Compare commits
2 commits
main
...
systemd-bo
Author | SHA1 | Date | |
---|---|---|---|
91a5b5f814 | |||
2bf3336c01 |
13 changed files with 1368 additions and 320 deletions
|
@ -1,23 +1,64 @@
|
|||
/* === This file is part of Calamares Extensions - <http://github.com/calamares-extensions> ===
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2021 Adriaan de Groot <groot@kde.org>
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
/* An *ImageSlide* is a *Slide* (it offers the API that *Presentation*
|
||||
* expects) while displaying only a single image. This is useful
|
||||
* for presentations that are all images, with no interaction or text.
|
||||
*/
|
||||
|
||||
import QtQuick 2.5
|
||||
|
||||
/* To use an *ImageSlide*, instantiate it inside your *Presentation*
|
||||
* and set the *src* property to a path to an image file in a supported
|
||||
* format. Relative paths are ok.
|
||||
*/
|
||||
Item {
|
||||
id: imageslide
|
||||
|
||||
/* Slides should be non-visible at the start; the *Presentation*
|
||||
* handles visibility (so that one slide at a time is visible).
|
||||
*/
|
||||
visible: false
|
||||
|
||||
/* Make this item fill up the parent, so that alignment of the
|
||||
* image (below) works out to "middle of the parent".
|
||||
*/
|
||||
anchors.fill: parent
|
||||
|
||||
/* The *Presentation* manages visibility of children that have
|
||||
* attribute *isSlide* and *isSlide* is set to *true*. Other
|
||||
* children are ignored, so we need to set this so that the
|
||||
* *ImageSlide* elements are treated like slides.
|
||||
*/
|
||||
property bool isSlide: true;
|
||||
|
||||
/* The *Presentation* allows slides to have notes, so just leave
|
||||
* an empty string here.
|
||||
*/
|
||||
property string notes;
|
||||
|
||||
|
||||
/* This is the important property for *ImageSlide*: the path to the
|
||||
* image to display. When instantiating *ImageSlide*, set this for
|
||||
* each instance. Relative paths are ok.
|
||||
*/
|
||||
property string src;
|
||||
|
||||
/* The image itself. It has fixed sizes (300x150px). You could set
|
||||
* an aspect ratio here (e.g. `height: width / 2`) as well.
|
||||
*
|
||||
* This binds the image source (filename) to the string *src*
|
||||
* in the *ImageSlide* element, for convenience in setting things
|
||||
* up in the overall slideshow. If you want to make width and
|
||||
* height configurable, add a property above and then bind to
|
||||
* them from the Image element.
|
||||
*/
|
||||
Image {
|
||||
id: image
|
||||
source: src
|
||||
width: 1280
|
||||
height: 720
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
}
|
||||
|
|
269
etc/calamares/branding/parchlinux/Map.qml
Normal file
269
etc/calamares/branding/parchlinux/Map.qml
Normal file
|
@ -0,0 +1,269 @@
|
|||
/* === This file is part of Calamares - <https://calamares.io> ===
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2020 Anke Boersma <demm@kaosx.us>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*
|
||||
* Calamares is Free Software: see the License-Identifier above.
|
||||
*
|
||||
*/
|
||||
|
||||
import QtQuick 2.10
|
||||
import QtQuick.Controls 2.10
|
||||
import QtQuick.Window 2.14
|
||||
import QtQuick.Layouts 1.3
|
||||
|
||||
import org.kde.kirigami 2.7 as Kirigami
|
||||
|
||||
import QtLocation 5.14
|
||||
import QtPositioning 5.14
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
// These are used by the map query to initially center the
|
||||
// map on the user's likely location. They are updated by
|
||||
// getIp() which does a more accurate GeoIP lookup than
|
||||
// the default one in Calamares
|
||||
property var cityName: ""
|
||||
property var countryName: ""
|
||||
|
||||
/* This is an extra GeoIP lookup, which will find better-accuracy
|
||||
* location data for the user's IP, and then sets the current timezone
|
||||
* and map location. Call it from Component.onCompleted so that
|
||||
* it happens "on time" before the page is shown.
|
||||
*/
|
||||
function getIpOnline() {
|
||||
var xhr = new XMLHttpRequest
|
||||
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState === XMLHttpRequest.DONE) {
|
||||
var responseJSON = JSON.parse(xhr.responseText)
|
||||
var tz = responseJSON.timezone
|
||||
var ct = responseJSON.city
|
||||
var cy = responseJSON.country
|
||||
|
||||
cityName = ct
|
||||
countryName = cy
|
||||
|
||||
config.setCurrentLocation(tz)
|
||||
}
|
||||
}
|
||||
|
||||
// Define the target of the request
|
||||
xhr.open("GET", "https://get.geojs.io/v1/ip/geo.json")
|
||||
// Execute the request
|
||||
xhr.send()
|
||||
}
|
||||
|
||||
/* This is an "offline" GeoIP lookup -- it just follows what
|
||||
* Calamares itself has figured out with its GeoIP or configuration.
|
||||
* Call it from the **Component** onActivate() -- in localeq.qml --
|
||||
* so it happens as the page is shown.
|
||||
*/
|
||||
function getIpOffline() {
|
||||
cityName = config.currentLocation.zone
|
||||
countryName = config.currentLocation.countryCode
|
||||
}
|
||||
|
||||
/* This is an **accurate** TZ lookup method: it queries an
|
||||
* online service for the TZ at the given coordinates. It
|
||||
* requires an internet connection, though, and the distribution
|
||||
* will need to have an account with geonames to not hit the
|
||||
* daily query limit.
|
||||
*
|
||||
* See below, in MouseArea, for calling the right method.
|
||||
*/
|
||||
function getTzOnline() {
|
||||
var xhr = new XMLHttpRequest
|
||||
var latC = map.center.latitude
|
||||
var lonC = map.center.longitude
|
||||
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState === XMLHttpRequest.DONE) {
|
||||
var responseJSON = JSON.parse(xhr.responseText)
|
||||
var tz2 = responseJSON.timezoneId
|
||||
|
||||
config.setCurrentLocation(tz2)
|
||||
}
|
||||
}
|
||||
|
||||
console.log("Online lookup", latC, lonC)
|
||||
// Needs to move to localeq.conf, each distribution will need their own account
|
||||
xhr.open("GET", "http://api.geonames.org/timezoneJSON?lat=" + latC + "&lng=" + lonC + "&username=SOME_USERNAME")
|
||||
xhr.send()
|
||||
}
|
||||
|
||||
/* This is a quick TZ lookup method: it uses the existing
|
||||
* Calamares "closest TZ" code, which has lots of caveats.
|
||||
*
|
||||
* See below, in MouseArea, for calling the right method.
|
||||
*/
|
||||
function getTzOffline() {
|
||||
var latC = map.center.latitude
|
||||
var lonC = map.center.longitude
|
||||
var tz = config.zonesModel.lookup(latC, lonC)
|
||||
console.log("Offline lookup", latC, lonC)
|
||||
config.setCurrentLocation(tz.region, tz.zone)
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: parent.width
|
||||
height: parent.height / 1.28
|
||||
|
||||
Plugin {
|
||||
id: mapPlugin
|
||||
name: "esri" // "esri", "here", "itemsoverlay", "mapbox", "mapboxgl", "osm"
|
||||
}
|
||||
|
||||
Map {
|
||||
id: map
|
||||
anchors.fill: parent
|
||||
plugin: mapPlugin
|
||||
activeMapType: supportedMapTypes[0]
|
||||
//might be desirable to set zoom level configurable?
|
||||
zoomLevel: 5
|
||||
bearing: 0
|
||||
tilt: 0
|
||||
copyrightsVisible : true
|
||||
fieldOfView : 0
|
||||
|
||||
GeocodeModel {
|
||||
id: geocodeModel
|
||||
plugin: mapPlugin
|
||||
autoUpdate: true
|
||||
query: Address {
|
||||
id: address
|
||||
city: cityName
|
||||
country: countryName
|
||||
}
|
||||
|
||||
onLocationsChanged: {
|
||||
if (count == 1) {
|
||||
map.center.latitude = get(0).coordinate.latitude
|
||||
map.center.longitude = get(0).coordinate.longitude
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MapQuickItem {
|
||||
id: marker
|
||||
anchorPoint.x: image.width/4
|
||||
anchorPoint.y: image.height
|
||||
coordinate: QtPositioning.coordinate(
|
||||
map.center.latitude,
|
||||
map.center.longitude)
|
||||
//coordinate: QtPositioning.coordinate(40.730610, -73.935242) // New York
|
||||
|
||||
sourceItem: Image {
|
||||
id: image
|
||||
width: 32
|
||||
height: 32
|
||||
source: "img/pin.svg"
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
acceptedButtons: Qt.LeftButton
|
||||
anchors.fill: map
|
||||
hoverEnabled: true
|
||||
property var coordinate: map.toCoordinate(Qt.point(mouseX, mouseY))
|
||||
Label {
|
||||
x: parent.mouseX - width -5
|
||||
y: parent.mouseY - height - 5
|
||||
text: "%1, %2".arg(
|
||||
parent.coordinate.latitude).arg(parent.coordinate.longitude)
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
marker.coordinate = coordinate
|
||||
map.center.latitude = coordinate.latitude
|
||||
map.center.longitude = coordinate.longitude
|
||||
|
||||
// Pick a TZ lookup method here (quick:offline, accurate:online)
|
||||
getTzOffline();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.right: parent.right
|
||||
anchors.bottomMargin: 5
|
||||
anchors.rightMargin: 10
|
||||
|
||||
MouseArea {
|
||||
width: 32
|
||||
height:32
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
Image {
|
||||
source: "img/plus.png"
|
||||
anchors.centerIn: parent
|
||||
width: 36
|
||||
height: 36
|
||||
}
|
||||
|
||||
onClicked: map.zoomLevel++
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
width: 32
|
||||
height:32
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
Image {
|
||||
source: "img/minus.png"
|
||||
anchors.centerIn: parent
|
||||
width: 32
|
||||
height: 32
|
||||
}
|
||||
|
||||
onClicked: map.zoomLevel--
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: parent.width
|
||||
height: 100
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
Item {
|
||||
id: location
|
||||
Kirigami.Theme.inherit: false
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
Rectangle {
|
||||
anchors.centerIn: parent
|
||||
width: 300
|
||||
height: 30
|
||||
color: Kirigami.Theme.backgroundColor
|
||||
|
||||
Text {
|
||||
id: tzText
|
||||
text: qsTr("Timezone: %1").arg(config.currentTimezoneName)
|
||||
color: Kirigami.Theme.textColor
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
|
||||
/* If you want an extra (and accurate) GeoIP lookup,
|
||||
* enable this one and disable the offline lookup in
|
||||
* onActivate().
|
||||
Component.onCompleted: getIpOnline();
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
anchors.top: location.bottom
|
||||
anchors.topMargin: 20
|
||||
padding: 10
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor
|
||||
text: qsTr("Please select your preferred location on the map so the installer can suggest the locale
|
||||
and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging
|
||||
to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.")
|
||||
}
|
||||
}
|
||||
}
|
236
etc/calamares/branding/parchlinux/Offline.qml
Normal file
236
etc/calamares/branding/parchlinux/Offline.qml
Normal file
|
@ -0,0 +1,236 @@
|
|||
/* === This file is part of Calamares - <https://calamares.io> ===
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2020-2021 Anke Boersma <demm@kaosx.us>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*
|
||||
* Calamares is Free Software: see the License-Identifier above.
|
||||
*
|
||||
*/
|
||||
|
||||
import io.calamares.core 1.0
|
||||
import io.calamares.ui 1.0
|
||||
|
||||
import QtQuick 2.10
|
||||
import QtQuick.Controls 2.10
|
||||
import QtQuick.Window 2.14
|
||||
import QtQuick.Layouts 1.3
|
||||
|
||||
import org.kde.kirigami 2.7 as Kirigami
|
||||
|
||||
Page {
|
||||
width: 800 //parent.width
|
||||
height: 500
|
||||
|
||||
id: control
|
||||
property string currentRegion
|
||||
property string currentZone
|
||||
|
||||
StackView {
|
||||
id: stack
|
||||
anchors.fill: parent
|
||||
clip: true
|
||||
|
||||
initialItem: Item {
|
||||
|
||||
Label {
|
||||
|
||||
id: region
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
color: Kirigami.Theme.textColor
|
||||
horizontalAlignment: Text.AlignCenter
|
||||
text: qsTr("Select your preferred Region, or use the default settings.")
|
||||
}
|
||||
|
||||
ListView {
|
||||
|
||||
id: list
|
||||
ScrollBar.vertical: ScrollBar {
|
||||
active: true
|
||||
}
|
||||
|
||||
width: parent.width / 2
|
||||
height: parent.height / 1.5
|
||||
anchors.centerIn: parent
|
||||
anchors.verticalCenterOffset: -30
|
||||
focus: true
|
||||
clip: true
|
||||
boundsBehavior: Flickable.StopAtBounds
|
||||
spacing: 2
|
||||
|
||||
Rectangle {
|
||||
|
||||
z: parent.z - 1
|
||||
anchors.fill: parent
|
||||
color: "#BDC3C7"
|
||||
radius: 5
|
||||
opacity: 0.7
|
||||
}
|
||||
|
||||
model: config.regionModel
|
||||
currentIndex: -1
|
||||
delegate: ItemDelegate {
|
||||
|
||||
hoverEnabled: true
|
||||
width: parent.width
|
||||
highlighted: ListView.isCurrentItem
|
||||
|
||||
Label {
|
||||
|
||||
text: model.name
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
width: parent.width
|
||||
height: 30
|
||||
color: highlighted ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor
|
||||
|
||||
background: Rectangle {
|
||||
|
||||
color: highlighted || hovered ? Kirigami.Theme.highlightColor : "white" //Kirigami.Theme.backgroundColor
|
||||
opacity: highlighted || hovered ? 0.5 : 0.3
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
|
||||
list.currentIndex = index
|
||||
control.currentRegion = model.name
|
||||
config.regionalZonesModel.region = control.currentRegion
|
||||
tztext.text = qsTr("Timezone: %1").arg(config.currentTimezoneName)
|
||||
stack.push(zoneView)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: zoneView
|
||||
|
||||
Item {
|
||||
|
||||
Label {
|
||||
|
||||
id: zone
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
color: Kirigami.Theme.textColor
|
||||
text: qsTr("Select your preferred Zone within your Region.")
|
||||
}
|
||||
|
||||
ListView {
|
||||
|
||||
id: list2
|
||||
ScrollBar.vertical: ScrollBar {
|
||||
active: true
|
||||
}
|
||||
|
||||
width: parent.width / 2
|
||||
height: parent.height / 1.5
|
||||
anchors.centerIn: parent
|
||||
anchors.verticalCenterOffset: -30
|
||||
focus: true
|
||||
clip: true
|
||||
boundsBehavior: Flickable.StopAtBounds
|
||||
spacing: 2
|
||||
|
||||
Rectangle {
|
||||
|
||||
z: parent.z - 1
|
||||
anchors.fill: parent
|
||||
color: "#BDC3C7"
|
||||
radius: 5
|
||||
opacity: 0.7
|
||||
}
|
||||
|
||||
model: config.regionalZonesModel
|
||||
currentIndex : -1
|
||||
delegate: ItemDelegate {
|
||||
|
||||
hoverEnabled: true
|
||||
width: parent.width
|
||||
highlighted: ListView.isCurrentItem
|
||||
|
||||
Label {
|
||||
|
||||
text: model.name
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
width: parent.width
|
||||
height: 30
|
||||
color: highlighted ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor
|
||||
|
||||
background: Rectangle {
|
||||
|
||||
color: highlighted || hovered ? Kirigami.Theme.highlightColor : "white" //Kirigami.Theme.backgroundColor
|
||||
opacity: highlighted || hovered ? 0.5 : 0.3
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
|
||||
list2.currentIndex = index
|
||||
list2.positionViewAtIndex(index, ListView.Center)
|
||||
control.currentZone = model.name
|
||||
config.setCurrentLocation(control.currentRegion, control.currentZone)
|
||||
tztext.text = qsTr("Timezone: %1").arg(config.currentTimezoneName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
|
||||
Layout.fillWidth: true
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.verticalCenterOffset: -30
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: parent.width / 15
|
||||
icon.name: "go-previous"
|
||||
text: qsTr("Zones")
|
||||
onClicked: stack.pop()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
|
||||
width: parent.width
|
||||
height: 60
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.bottom: parent.bottom
|
||||
|
||||
Item {
|
||||
|
||||
id: location
|
||||
Kirigami.Theme.inherit: false
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
Rectangle {
|
||||
|
||||
anchors.centerIn: parent
|
||||
width: 300
|
||||
height: 30
|
||||
color: Kirigami.Theme.backgroundColor
|
||||
|
||||
Text {
|
||||
|
||||
id: tztext
|
||||
text: qsTr("Timezone: %1").arg(config.currentTimezoneName)
|
||||
color: Kirigami.Theme.textColor
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
|
||||
anchors.top: location.bottom
|
||||
anchors.topMargin: 20
|
||||
padding: 10
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor
|
||||
text: qsTr("You can fine-tune Language and Locale settings below.")
|
||||
}
|
||||
}
|
||||
}
|
103
etc/calamares/branding/parchlinux/Requirements.qml
Normal file
103
etc/calamares/branding/parchlinux/Requirements.qml
Normal file
|
@ -0,0 +1,103 @@
|
|||
/* === This file is part of Calamares - <https://calamares.io> ===
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2020 Anke Boersma <demm@kaosx.us>
|
||||
* SPDX-FileCopyrightText: 2020 Adriaan de Groot <groot@kde.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*
|
||||
* Calamares is Free Software: see the License-Identifier above.
|
||||
*
|
||||
*/
|
||||
|
||||
import io.calamares.core 1.0
|
||||
import io.calamares.ui 1.0
|
||||
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.2
|
||||
import QtQuick.Layouts 1.3
|
||||
import org.kde.kirigami 2.7 as Kirigami
|
||||
|
||||
Rectangle {
|
||||
focus: true
|
||||
Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor
|
||||
anchors.fill: parent
|
||||
anchors.topMargin: 50
|
||||
|
||||
TextArea {
|
||||
id: required
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: 1
|
||||
horizontalAlignment: TextEdit.AlignHCenter
|
||||
width: 640
|
||||
font.pointSize: 11
|
||||
textFormat: Text.RichText
|
||||
antialiasing: true
|
||||
activeFocusOnPress: false
|
||||
wrapMode: Text.WordWrap
|
||||
|
||||
property var requirementsText: qsTr("<p>This computer does not satisfy the minimum requirements for installing %1.<br/>
|
||||
Installation cannot continue.</p>").arg(Branding.string(Branding.VersionedName))
|
||||
property var recommendationsText: qsTr("<p>This computer does not satisfy some of the recommended requirements for setting up %1.<br/>
|
||||
Setup can continue, but some features might be disabled.</p>").arg(Branding.string(Branding.VersionedName))
|
||||
|
||||
text: config.requirementsModel.satisfiedMandatory ? recommendationsText : requirementsText
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: 640
|
||||
height: 360
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.top: required.bottom
|
||||
anchors.topMargin: 5
|
||||
|
||||
Component {
|
||||
id: requirementsDelegate
|
||||
|
||||
Item {
|
||||
width: 640
|
||||
height: 35
|
||||
visible: true
|
||||
|
||||
Column {
|
||||
anchors.centerIn: parent
|
||||
|
||||
Rectangle {
|
||||
implicitWidth: 640
|
||||
implicitHeight: 35
|
||||
// Colors and images based on the two satisfied-bools:
|
||||
// - if satisfied, then green / ok
|
||||
// - otherwise if mandatory, then red / stop
|
||||
// - otherwise, then yellow / warning
|
||||
border.color: satisfied ? "#228b22" : (mandatory ? "#ff0000" : "#ffa411")
|
||||
color: satisfied ? "#f0fff0" : (mandatory ? "#ffc0cb" : "#ffefd5")
|
||||
|
||||
Image {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.right: parent.right
|
||||
anchors.margins: 20
|
||||
source: satisfied ? "qrc:/data/images/yes.svgz" : (mandatory ? "qrc:/data/images/no.svgz" : "qrc:/data/images/information.svgz")
|
||||
}
|
||||
|
||||
Text {
|
||||
text: satisfied ? details : negatedText
|
||||
anchors.centerIn: parent
|
||||
font.pointSize: 11
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ListView {
|
||||
id: requirementsList
|
||||
anchors.fill: parent
|
||||
spacing: 5
|
||||
// This uses the filtered model, so that only unsatisfied
|
||||
// requirements are ever shown. You could use *requirementsModel*
|
||||
// to get all of them.
|
||||
model: config.unsatisfiedRequirements
|
||||
delegate: requirementsDelegate
|
||||
}
|
||||
}
|
||||
}
|
||||
|
101
etc/calamares/branding/parchlinux/about.qml
Normal file
101
etc/calamares/branding/parchlinux/about.qml
Normal file
|
@ -0,0 +1,101 @@
|
|||
/* === This file is part of Calamares - <https://calamares.io> ===
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2020 2022 Anke Boersma <demm@kaosx.us>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*
|
||||
* Calamares is Free Software: see the License-Identifier above.
|
||||
*
|
||||
*/
|
||||
|
||||
import io.calamares.core 1.0
|
||||
import io.calamares.ui 1.0
|
||||
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Window 2.3
|
||||
|
||||
ApplicationWindow {
|
||||
id: about
|
||||
visible: true
|
||||
width: 760
|
||||
height: 400
|
||||
title: qsTr("About Calamares")
|
||||
|
||||
property var appName: "Calamares"
|
||||
property var appVersion: "3.3 RC"
|
||||
|
||||
Rectangle {
|
||||
id: textArea
|
||||
anchors.fill: parent
|
||||
color: "#f2f2f2"
|
||||
|
||||
Column {
|
||||
id: column
|
||||
anchors.centerIn: parent
|
||||
|
||||
|
||||
Rectangle {
|
||||
width: 560
|
||||
height: 250
|
||||
radius: 10
|
||||
border.width: 0
|
||||
|
||||
Text {
|
||||
width: 400
|
||||
height: 250
|
||||
anchors.centerIn: parent
|
||||
text: qsTr("<h1>%1</h1><br/>
|
||||
<strong>%2<br/>
|
||||
for %3</strong><br/><br/>
|
||||
Copyright 2014-2017 Teo Mrnjavac <teo@kde.org><br/>
|
||||
Copyright 2017-2022 Adriaan de Groot <groot@kde.org><br/>
|
||||
Thanks to <a href='https://calamares.io/team/'>the Calamares team</a>
|
||||
and the <a href=\"https://www.transifex.com/kaos/kaos/\">KaOS
|
||||
translators team</a>.<br/><br/>
|
||||
<a href='https://calamares.io/'>Calamares</a>
|
||||
development is sponsored by <br/>
|
||||
<a href='http://www.blue-systems.com/'>Blue Systems</a> -
|
||||
Liberating Software." )
|
||||
.arg(appName)
|
||||
.arg(appVersion)
|
||||
.arg(Branding.string(Branding.VersionedName))
|
||||
|
||||
onLinkActivated: Qt.openUrlExternally(link)
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
acceptedButtons: Qt.NoButton
|
||||
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
}
|
||||
|
||||
font.pointSize: 10
|
||||
anchors.verticalCenterOffset: 10
|
||||
anchors.horizontalCenterOffset: 40
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
||||
Image {
|
||||
id: image
|
||||
x: 8
|
||||
y: 12
|
||||
height: 100
|
||||
fillMode: Image.PreserveAspectFit
|
||||
source: "squid.png"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Button {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.bottom: parent.bottom
|
||||
icon.name: "window-close"
|
||||
text: qsTr("Close")
|
||||
hoverEnabled: true
|
||||
onClicked: about.close();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -5,12 +5,12 @@ welcomeStyleCalamares: false
|
|||
|
||||
welcomeExpandingLogo: true
|
||||
|
||||
windowExpanding: normal
|
||||
|
||||
windowExpanding: noexpand
|
||||
windowSize: 1280px,720px
|
||||
windowPlacement: center
|
||||
|
||||
sidebar: widget
|
||||
|
||||
#sidebar: qml,top
|
||||
sidebar: none
|
||||
navigation: widget
|
||||
|
||||
strings:
|
||||
|
@ -28,10 +28,10 @@ images:
|
|||
productWelcome: "idioma.png"
|
||||
|
||||
style:
|
||||
sidebarBackground: "#FFFFFF"
|
||||
sidebarText: "#292F34"
|
||||
sidebarTextSelect: "#ffffff"
|
||||
sidebarTextHighlight: "#2093d1"
|
||||
SidebarBackground: "#282c34"
|
||||
SidebarText: "#FFFFFF"
|
||||
SidebarTextSelect: "#cc0000"
|
||||
SidebarTextHighlight: "#000000"
|
||||
|
||||
slideshow: "show.qml"
|
||||
|
||||
|
|
|
@ -1,53 +1,111 @@
|
|||
/* === This file is part of Calamares Extensions - <http://github.com/calamares-extensions> ===
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2021 Adriaan de Groot <groot@kde.org>
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
/* This is a simple slideshow for use during the *exec* phase of
|
||||
* installation, that displays a handful of slides. It uses
|
||||
* the *Presentation* QML components -- this allows, for instance,
|
||||
* notes to be added to slides, and for arrow navigation to be
|
||||
* used. But at its core it's just a bunch of images, repeating.
|
||||
*
|
||||
* For this kind of limited functionality, it may be better to
|
||||
* use the "plain images" slideshow format in Calamares, although
|
||||
* then you don't have any say in how things are animated.
|
||||
*
|
||||
* This slideshow is written for *slideshowAPI* version 1, so in
|
||||
* `branding.desc` set that appropriately.
|
||||
*/
|
||||
|
||||
|
||||
import QtQuick 2.0;
|
||||
import calamares.slideshow 1.0;
|
||||
import QtQuick 2.0 // Basic QML
|
||||
import calamares.slideshow 1.0 // Calamares slideshow: Presentation
|
||||
import io.calamares.ui 1.0 // Calamares internals: Branding
|
||||
|
||||
/* *Presentation* comes from the pre-installed calamares.slideshow
|
||||
* that comes with Calamares itself. See `Presentation.qml` in the
|
||||
* Calamares repository for details and documentation.
|
||||
*
|
||||
* The important parts of presentation are:
|
||||
* - it has a property *activatedInCalamares* which is set to *true*
|
||||
* when the slideshow becomes visible, *false* afterwards.
|
||||
* - it expects one or more children with a property *isSlide*
|
||||
* set to *true*.
|
||||
* - it has a function *goToNextSlide()* to do just that (where
|
||||
* "slides" is the sequence of children that have property
|
||||
* *isSlide* set to *true*.
|
||||
*
|
||||
*/
|
||||
Presentation
|
||||
{
|
||||
id: presentation
|
||||
|
||||
/* This timer ticks once per second (1000ms, set in *interval*)
|
||||
* and calls *goToNextSlide()* each time. Note that it needs
|
||||
* to know the *id* of the presentation, so keep *id* (above)
|
||||
* matched with the function call.
|
||||
*
|
||||
* The timer starts when the presentation is activated; you could
|
||||
* also set *running* to true, but that might cost extra resources.
|
||||
*/
|
||||
Timer {
|
||||
interval: 30000
|
||||
interval: 15000
|
||||
running: presentation.activatedInCalamares
|
||||
repeat: true
|
||||
onTriggered: presentation.goToNextSlide()
|
||||
}
|
||||
|
||||
/* These functions are called when the presentation starts and
|
||||
* ends, respectively. They could be used to start the timer,
|
||||
* but that is done automatically through *activatedInCalamares*,
|
||||
* so there's nothing **to** do.
|
||||
*
|
||||
* Leaving these functions out is fine, although Calamares will
|
||||
* complain that they are missing, then.
|
||||
*/
|
||||
function onActivate() { }
|
||||
function onLeave() { }
|
||||
|
||||
|
||||
/* A presentation is an Item: it has no visual appearance at all.
|
||||
* Give it a background, which fills the whole area of the presentation.
|
||||
* Setting *z* to a low value places this rectangle **behind** other
|
||||
* things in the presentation -- which is correct for a background.
|
||||
*
|
||||
* This uses the background set in the styles section of `branding.desc`.
|
||||
*/
|
||||
Rectangle {
|
||||
id: mybackground
|
||||
anchors.fill: parent
|
||||
color: Branding.styleString(Branding.SidebarBackground)
|
||||
color: "#282c34"
|
||||
z: -1
|
||||
}
|
||||
|
||||
/* The *ImageSlide* is a component unique to this branding directory.
|
||||
* The QML file `ImageSlide.qml` can be stored alongside `show.qml`
|
||||
* and it will be loaded on-demand. See the documentation in that
|
||||
* file for details, but it comes down to this: for each *ImageSlide*,
|
||||
* set *src* to a suitable value (an image path in this directory)
|
||||
* and that will be displayed.
|
||||
*/
|
||||
ImageSlide {
|
||||
src: "slide01.png"
|
||||
src: "slide-01.png"
|
||||
}
|
||||
|
||||
ImageSlide {
|
||||
src: "slide02.png"
|
||||
src: "slide-02.png"
|
||||
}
|
||||
|
||||
ImageSlide {
|
||||
src: "slide03.png"
|
||||
src: "slide-03.png"
|
||||
}
|
||||
|
||||
ImageSlide {
|
||||
src: "slide04.png"
|
||||
src: "slide-04.png"
|
||||
}
|
||||
|
||||
ImageSlide {
|
||||
src: "slide05.png"
|
||||
src: "slide-05.png"
|
||||
}
|
||||
|
||||
ImageSlide {
|
||||
src: "slide06.png"
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
399
etc/calamares/branding/parchlinux/stylesheet-codes.qss
Normal file
399
etc/calamares/branding/parchlinux/stylesheet-codes.qss
Normal file
|
@ -0,0 +1,399 @@
|
|||
/*
|
||||
|
||||
A branding component can ship a stylesheet (like this one)
|
||||
which is applied to parts of the Calamares user-interface.
|
||||
In principle, all parts can be styled through CSS.
|
||||
Missing parts should be filed as issues.
|
||||
|
||||
The IDs are based on the object names in the C++ code.
|
||||
You can use the Debug Dialog to find out object names:
|
||||
- Open the debug dialog
|
||||
- Choose tab *Tools*
|
||||
- Click *Widget Tree* button
|
||||
The list of object names is printed in the log.
|
||||
|
||||
Documentation for styling Qt Widgets through a stylesheet
|
||||
can be found at
|
||||
https://doc.qt.io/qt-5/stylesheet-examples.html
|
||||
https://doc.qt.io/qt-5/stylesheet-reference.html
|
||||
In Calamares, styling widget classes is supported (e.g.
|
||||
using `QComboBox` as a selector).
|
||||
|
||||
This example stylesheet has all the actual styling commented out.
|
||||
The examples are not exhaustive.
|
||||
|
||||
Use gammaray
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/* ########## MAIN APPLICATION WINDOW ########## */
|
||||
|
||||
#mainApp {
|
||||
color: #a3aed2
|
||||
}
|
||||
|
||||
#mainText{
|
||||
font : bold 16px;
|
||||
}
|
||||
|
||||
#sidebarApp {
|
||||
|
||||
}
|
||||
|
||||
#logoApp {
|
||||
}
|
||||
|
||||
#sidebarMenuApp {
|
||||
padding: 3px;
|
||||
background-color: #394260;
|
||||
}
|
||||
|
||||
QWidget {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
QTextEdit, QListView {
|
||||
}
|
||||
QDialogButtonBox {
|
||||
}
|
||||
QAbstractSpinBox {
|
||||
}
|
||||
QListWidget::item:alternate {
|
||||
}
|
||||
|
||||
#view-button-back:hover {
|
||||
color: #769FF0;
|
||||
}
|
||||
#view-button-next:hover {
|
||||
color: #769FF0;
|
||||
}
|
||||
#view-button-cancel:hover {
|
||||
color: #769FF0;
|
||||
}
|
||||
|
||||
#debugButton {
|
||||
font: bold 8px;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
#debugButton:hover {
|
||||
color: #769FF0;
|
||||
}
|
||||
|
||||
#aboutButton:hover {
|
||||
color: #769FF0;
|
||||
}
|
||||
#donateButton:hover {
|
||||
color: #769FF0;
|
||||
}
|
||||
#supportButton:hover {
|
||||
color: #769FF0;
|
||||
}
|
||||
#knownIssuesButton:hover {
|
||||
color: #769FF0;
|
||||
}
|
||||
#releaseNotesButton:hover {
|
||||
color: #769FF0;
|
||||
}
|
||||
|
||||
/* ########## TOOLTIP ########## */
|
||||
|
||||
QToolTip {
|
||||
background-color: #769FF0;
|
||||
font : 16px;
|
||||
color: white;
|
||||
padding: 3px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
QPushButton {
|
||||
font : 16px;
|
||||
}
|
||||
|
||||
QDialogButtonBox {
|
||||
dialogbuttonbox-buttons-have-icons: 0;
|
||||
}
|
||||
|
||||
/* ########## SCROLL BAR ########## */
|
||||
|
||||
QScrollBar:vertical {
|
||||
background: #efefef;
|
||||
width: 20px;
|
||||
margin: 38px 0 20px 0;
|
||||
}
|
||||
|
||||
QScrollBar::handle:vertical {
|
||||
background: #769FF0;
|
||||
max-height: 25px;
|
||||
}
|
||||
|
||||
QScrollBar::sub-line:vertical {
|
||||
border: none;
|
||||
background: none;
|
||||
height: 20px;
|
||||
subcontrol-position: top;
|
||||
subcontrol-origin: margin;
|
||||
}
|
||||
|
||||
QScrollBar::add-line:vertical {
|
||||
border: none;
|
||||
background: none;
|
||||
height: 20px;
|
||||
subcontrol-position: bottom;
|
||||
subcontrol-origin: margin;
|
||||
}
|
||||
|
||||
/* ########## QLIST VIEW ########## */
|
||||
|
||||
QListView {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
QListView::item:alternate {
|
||||
color: #769FF0;
|
||||
color: white;
|
||||
}
|
||||
|
||||
QListView::item:!alternate:selected:active {
|
||||
background: #769FF0;
|
||||
color: white;
|
||||
}
|
||||
|
||||
QListView::item:selected:active {
|
||||
background: #769FF0;
|
||||
color: white;
|
||||
}
|
||||
|
||||
QListView::item:selected:!active {
|
||||
background: #769FF0;
|
||||
color: white;
|
||||
}
|
||||
|
||||
QListView::item:hover {
|
||||
background: #769FF0;
|
||||
color: white;
|
||||
}
|
||||
|
||||
QListView#listLayout::item:!alternate:selected:active {
|
||||
background: #769FF0;
|
||||
color: white;
|
||||
}
|
||||
|
||||
QListView#listVariant::item:!alternate:selected:active {
|
||||
background: #769FF0;
|
||||
color: white;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ########## QLINE EDIT ########## */
|
||||
|
||||
QLineEdit#LE_TestKeyboard {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
QLineEdit#m_passphraseLineEdit, QLineEdit#vgName,
|
||||
QLineEdit#m_confirmLineEdit {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
QLineEdit#textBoxUserVerifiedPassword, QLineEdit#textBoxVerifiedRootPassword {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
QLineEdit#textBoxFullName, QLineEdit#textBoxLoginName, QLineEdit#textBoxHostName,
|
||||
QLineEdit#textBoxUserPassword, QLineEdit#textBoxRootPassword {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
#textBoxFullName, #textBoxLoginName, #textBoxHostName, #textBoxUserPassword,
|
||||
#textBoxRootPassword, #textBoxAutoLogin, #vgName {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
#textBoxUserVerifiedPassword, #textBoxVerifiedRootPassword,
|
||||
#LE_TestKeyboard, #m_confirmLineEdit, #m_passphraseLineEdit {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
/* ##########PARTITION ########## */
|
||||
|
||||
#partitionLabel {
|
||||
}
|
||||
|
||||
#partitionLabelsView {
|
||||
}
|
||||
|
||||
#CreatePartitionDialog {
|
||||
}
|
||||
|
||||
#partResizerWidget {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
/* ########## PAGE_USERSETUP ########## */
|
||||
|
||||
#labelWhatIsYourName {
|
||||
font: 16px;
|
||||
}
|
||||
#textBoxFullName {
|
||||
font: 16px;
|
||||
}
|
||||
#labelFullName {
|
||||
font: 16px;
|
||||
}
|
||||
#labelFullNameError {
|
||||
font: 16px;
|
||||
}
|
||||
#username_label_2 {
|
||||
font: 16px;
|
||||
}
|
||||
#textBoxLoginName {
|
||||
font: 16px;
|
||||
}
|
||||
#labelUsername {
|
||||
font: 16px;
|
||||
}
|
||||
#labelUsernameError {
|
||||
font: 16px;
|
||||
}
|
||||
#hostname_label_2 {
|
||||
font: 16px;
|
||||
}
|
||||
#textBoxHostName {
|
||||
font: 16px;
|
||||
}
|
||||
#labelHostname {
|
||||
font: 16px;
|
||||
}
|
||||
#labelHostnameError {
|
||||
font: 16px;
|
||||
}
|
||||
#password_label_2 {
|
||||
font: 16px;
|
||||
}
|
||||
#textBoxUserPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#textBoxUserVerifiedPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#labelUserPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#labelUserPasswordError {
|
||||
font: 16px;
|
||||
}
|
||||
#checkBoxRequireStrongPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#checkBoxDoAutoLogin {
|
||||
font: 16px;
|
||||
}
|
||||
#checkBoxReusePassword {
|
||||
font: 16px;
|
||||
}
|
||||
#labelChooseRootPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#textBoxRootPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#textBoxVerifiedRootPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#labelRootPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#labelRootPasswordError {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
/* ########## COMBO BOX ########## */
|
||||
|
||||
QComboBox {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
QComboBox::item:selected {
|
||||
background: #769FF0;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#mountPointComboBox::drop-down {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
/* ########## SPIN BOX ########## */
|
||||
|
||||
QSpinBox {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
QLineEdit {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
/* ########## TREE VIEW ########## */
|
||||
|
||||
QTreeView {
|
||||
font: 16px;
|
||||
show-decoration-selected: 0;
|
||||
}
|
||||
|
||||
QTreeView::item {
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
QTreeView::item:selected {
|
||||
background: #769FF0;
|
||||
font: bold;
|
||||
}
|
||||
|
||||
QTreeView::branch:has-siblings:!adjoins-item {
|
||||
}
|
||||
QTreeView::branch:has-siblings:adjoins-item {
|
||||
}
|
||||
QTreeView::branch:!has-children:!has-siblings:adjoins-item {
|
||||
}
|
||||
QTreeView::branch:has-children:!has-siblings:closed,
|
||||
QTreeView::branch:closed:has-children:has-siblings {
|
||||
}
|
||||
QTreeView::branch:open:has-children:!has-siblings,
|
||||
QTreeView::branch:open:has-children:has-siblings {
|
||||
}
|
||||
|
||||
/* ########## CHECK BOX ########## */
|
||||
|
||||
QCheckBox {
|
||||
}
|
||||
QCheckBox::indicator:unchecked {
|
||||
}
|
||||
QCheckBox::indicator:checked {
|
||||
}
|
||||
QItemSelectionModel::Select {
|
||||
}
|
||||
|
||||
/* ########## HEADER VIEW ########## */
|
||||
|
||||
QHeaderView::section {
|
||||
font : 16px;
|
||||
}
|
||||
|
||||
/* ########## PROGRESS BAR ########## */
|
||||
|
||||
QProgressBar {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
QProgressBar::chunk {
|
||||
background-color: #769FF0;
|
||||
}
|
||||
|
||||
#debugButton {
|
||||
font: bold 8px;
|
||||
color: #394260;
|
||||
}
|
||||
#debugButton:hover {
|
||||
color: #394260;
|
||||
}
|
|
@ -1,253 +1,132 @@
|
|||
|
||||
/* ########## MAIN APPLICATION WINDOW ########## */
|
||||
/*** Main application window.
|
||||
*
|
||||
* The main application window has the sidebar, which in turn
|
||||
* contains a logo and a list of items -- note that the list
|
||||
* can **not** be styled, since it has its own custom C++
|
||||
* delegate code.
|
||||
*/
|
||||
|
||||
#mainApp {
|
||||
}
|
||||
|
||||
#mainText{
|
||||
font : bold 16px;
|
||||
color: #a3aed2;
|
||||
background-color: #1b1a26;
|
||||
}
|
||||
|
||||
#sidebarApp {
|
||||
|
||||
color: #a3aed2;
|
||||
background-color: #1b1a26;
|
||||
}
|
||||
#logoApp {
|
||||
background: none;
|
||||
}
|
||||
|
||||
#logoApp {
|
||||
}
|
||||
/*** Welcome module.
|
||||
*
|
||||
* There are plenty of parts, but the buttons are the most interesting
|
||||
* ones (donate, release notes, ...). The little icon image can be
|
||||
* styled through *qproperty-icon*, which is a little obscure.
|
||||
* URLs can reference the QRC paths of the Calamares application
|
||||
* or loaded via plugins or within the filesystem. There is no
|
||||
* comprehensive list of available icons, though.
|
||||
*/
|
||||
|
||||
#sidebarMenuApp {
|
||||
padding: 0px;
|
||||
background-color: none;
|
||||
}
|
||||
/*** Generic Widgets.
|
||||
*
|
||||
* You can style **all** widgets of a given class by selecting
|
||||
* the class name. Some widgets have specialized sub-selectors.
|
||||
*/
|
||||
|
||||
QWidget {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
QTextEdit, QListView {
|
||||
}
|
||||
QDialogButtonBox {
|
||||
}
|
||||
QAbstractSpinBox {
|
||||
}
|
||||
QListWidget::item:alternate {
|
||||
}
|
||||
|
||||
|
||||
#debugButton {
|
||||
font: bold 8px;
|
||||
color: #292F34;
|
||||
}
|
||||
|
||||
|
||||
/* ########## TOOLTIP ########## */
|
||||
|
||||
QPushButton {
|
||||
font : 16px;
|
||||
}
|
||||
|
||||
QDialogButtonBox {
|
||||
dialogbuttonbox-buttons-have-icons: 0;
|
||||
}
|
||||
|
||||
/* ########## QLIST VIEW ########## */
|
||||
|
||||
QListView {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
/* ########## QLINE EDIT ########## */
|
||||
|
||||
QLineEdit#LE_TestKeyboard {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
QLineEdit#m_passphraseLineEdit, QLineEdit#vgName,
|
||||
QLineEdit#m_confirmLineEdit {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
QLineEdit#textBoxUserVerifiedPassword, QLineEdit#textBoxVerifiedRootPassword {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
QLineEdit#textBoxFullName, QLineEdit#textBoxLoginName, QLineEdit#textBoxHostName,
|
||||
QLineEdit#textBoxUserPassword, QLineEdit#textBoxRootPassword {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
#textBoxFullName, #textBoxLoginName, #textBoxHostName, #textBoxUserPassword,
|
||||
#textBoxRootPassword, #textBoxAutoLogin, #vgName {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
#textBoxUserVerifiedPassword, #textBoxVerifiedRootPassword,
|
||||
#LE_TestKeyboard, #m_confirmLineEdit, #m_passphraseLineEdit {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
/* ##########PARTITION ########## */
|
||||
|
||||
#partResizerWidget {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
/* ########## PAGE_USERSETUP ########## */
|
||||
|
||||
#labelWhatIsYourName {
|
||||
font: 16px;
|
||||
}
|
||||
#textBoxFullName {
|
||||
font: 16px;
|
||||
}
|
||||
#labelFullName {
|
||||
font: 16px;
|
||||
}
|
||||
#labelFullNameError {
|
||||
font: 16px;
|
||||
}
|
||||
#username_label_2 {
|
||||
font: 16px;
|
||||
}
|
||||
#textBoxLoginName {
|
||||
font: 16px;
|
||||
}
|
||||
#labelUsername {
|
||||
font: 16px;
|
||||
}
|
||||
#labelUsernameError {
|
||||
font: 16px;
|
||||
}
|
||||
#hostname_label_2 {
|
||||
font: 16px;
|
||||
}
|
||||
#textBoxHostName {
|
||||
font: 16px;
|
||||
}
|
||||
#labelHostname {
|
||||
font: 16px;
|
||||
}
|
||||
#labelHostnameError {
|
||||
font: 16px;
|
||||
}
|
||||
#password_label_2 {
|
||||
font: 16px;
|
||||
}
|
||||
#textBoxUserPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#textBoxUserVerifiedPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#labelUserPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#labelUserPasswordError {
|
||||
font: 16px;
|
||||
}
|
||||
#checkBoxRequireStrongPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#checkBoxDoAutoLogin {
|
||||
font: 16px;
|
||||
}
|
||||
#checkBoxReusePassword {
|
||||
font: 16px;
|
||||
}
|
||||
#labelChooseRootPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#textBoxRootPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#textBoxVerifiedRootPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#labelRootPassword {
|
||||
font: 16px;
|
||||
}
|
||||
#labelRootPasswordError {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
/* ########## COMBO BOX ########## */
|
||||
|
||||
QComboBox {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
#mountPointComboBox::drop-down {
|
||||
font: 16px;
|
||||
}
|
||||
|
||||
/* ########## SPIN BOX ########## */
|
||||
|
||||
QSpinBox {
|
||||
font: 16px;
|
||||
font: 16px;
|
||||
color: #769ff0;
|
||||
background-color: #1b1a26;
|
||||
}
|
||||
|
||||
QLineEdit {
|
||||
font: 16px;
|
||||
font: 16px;
|
||||
color: #a3aed2;
|
||||
background-color: #394260;
|
||||
}
|
||||
|
||||
/* ########## TREE VIEW ########## */
|
||||
QListView {
|
||||
font: 16px;
|
||||
color: #769ff0;
|
||||
alternate-background-color: #769ff0;
|
||||
background-color: #394260;
|
||||
}
|
||||
|
||||
QPushButton {
|
||||
font: 16px;
|
||||
color: #769ff0;
|
||||
background-color: #1b1a26;
|
||||
border-color: #394260;
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
QToolTip {
|
||||
font: 16px;
|
||||
color: #769ff0;
|
||||
background-color: #212736;
|
||||
border: none;
|
||||
}
|
||||
|
||||
QTreeView {
|
||||
font: 16px;
|
||||
show-decoration-selected: 0;
|
||||
font: 16px;
|
||||
color: #769ff0;
|
||||
alternate-background-color: #769ff0;
|
||||
background-color: #212736;
|
||||
}
|
||||
|
||||
QTreeView::item {
|
||||
padding: 2px;
|
||||
#layoutSelector {
|
||||
font: 16px;
|
||||
color: #a3aed2;
|
||||
selection-color: #a3aed2;
|
||||
background-color: #1b1a26;
|
||||
selection-background-color: #1b1a26;
|
||||
}
|
||||
|
||||
QTreeView::branch:has-siblings:!adjoins-item {
|
||||
}
|
||||
QTreeView::branch:has-siblings:adjoins-item {
|
||||
}
|
||||
QTreeView::branch:!has-children:!has-siblings:adjoins-item {
|
||||
}
|
||||
QTreeView::branch:has-children:!has-siblings:closed,
|
||||
QTreeView::branch:closed:has-children:has-siblings {
|
||||
}
|
||||
QTreeView::branch:open:has-children:!has-siblings,
|
||||
QTreeView::branch:open:has-children:has-siblings {
|
||||
#variantSelector {
|
||||
font: 16px;
|
||||
color: #a3aed2;
|
||||
selection-color: #a3aed2;
|
||||
background-color: #1b1a26;
|
||||
selection-background-color: #1b1a26;
|
||||
}
|
||||
|
||||
/* ########## CHECK BOX ########## */
|
||||
|
||||
QCheckBox {
|
||||
}
|
||||
QCheckBox::indicator:unchecked {
|
||||
}
|
||||
QCheckBox::indicator:checked {
|
||||
}
|
||||
QItemSelectionModel::Select {
|
||||
#scrollAreaWidgetContents {
|
||||
color: #a3aed2;
|
||||
}
|
||||
|
||||
/* ########## HEADER VIEW ########## */
|
||||
|
||||
QHeaderView::section {
|
||||
font : 16px;
|
||||
#defineInfoLabel {
|
||||
color: #a3aed2;
|
||||
}
|
||||
|
||||
#debugButton {
|
||||
background-color: none;
|
||||
font: 12px;
|
||||
color: #edecf0;
|
||||
height: 32px;
|
||||
border: none;
|
||||
}
|
||||
/*
|
||||
QPushButton#aboutButton { qproperty-icon: url(:/data/images/release.svg); }
|
||||
#donateButton,
|
||||
#supportButton,
|
||||
#releaseNotesButton,
|
||||
#knownIssuesButton { qproperty-icon: url(:/data/images/help.svg); }
|
||||
*/
|
||||
|
||||
#debugButton:hover {
|
||||
color: #ff7f7f;
|
||||
}
|
||||
/*** Partitioning module.
|
||||
*
|
||||
* Many moving parts, which you will need to experiment with.
|
||||
*/
|
||||
|
||||
/*
|
||||
#bootInfoIcon { }
|
||||
#bootInfoLable { }
|
||||
#deviceInfoIcon { }
|
||||
#partitionBarView { }
|
||||
*/
|
||||
|
||||
#aboutButton {
|
||||
background-color: none;
|
||||
font: 12px;
|
||||
color: #292F34;
|
||||
height: 32px;
|
||||
border: none;
|
||||
}
|
||||
/*** Licensing module.
|
||||
*
|
||||
* The licensing module paints individual widgets for each of
|
||||
* the licenses. The item can be collapsed or expanded.
|
||||
*/
|
||||
|
||||
/*
|
||||
#licenseItem { }
|
||||
#licenseItemFullText { }
|
||||
*/
|
||||
|
|
|
@ -1,58 +1,24 @@
|
|||
#efiBootLoaderVar: "packagechooser_bootloader"
|
||||
# Possible options are 'grub', 'sb-shim' and 'systemd-boot'.
|
||||
efiBootLoader: "grub"
|
||||
# systemd-boot configuration files settings, set kernel search path, kernel name
|
||||
# and amount of time before default selection boots
|
||||
efiBootLoader: "systemd-boot"
|
||||
|
||||
kernelSearchPath: "/usr/lib/modules"
|
||||
kernelName: "vmlinuz"
|
||||
#kernelName: "vmlinuz"
|
||||
kernelPattern: "^vmlinuz.*"
|
||||
timeout: "10"
|
||||
|
||||
# systemd-boot and refind support custom kernel params
|
||||
kernelParams: [ "quiet" ]
|
||||
#refindKernelList: [ "linux","linux-lts","linux-zen","linux-hardened" ]
|
||||
# GRUB 2 binary names and boot directory
|
||||
# Some distributions (e.g. Fedora) use grub2-* (resp. /boot/grub2/) names.
|
||||
# These names are also used when using sb-shim, since that needs some
|
||||
# GRUB functionality (notably grub-probe) to work. As needed, you may use
|
||||
# complete paths like `/usr/bin/efibootmgr` for the executables.
|
||||
#
|
||||
kernelParams: [ "nvme_load=YES","nowatchdog","quiet" ]
|
||||
refindKernelList: [ "linux","linux-lts","linux-zen","linux-hardened" ]
|
||||
grubInstall: "grub-install"
|
||||
grubMkconfig: "grub-mkconfig"
|
||||
grubCfg: "/boot/grub/grub.cfg"
|
||||
grubProbe: "grub-probe"
|
||||
efiBootMgr: "efibootmgr"
|
||||
efiBootloaderId: "parchlinux"
|
||||
|
||||
# Optionally set the bootloader ID to use for EFI. This is passed to
|
||||
# grub-install --bootloader-id.
|
||||
#
|
||||
# If not set here, the value from bootloaderEntryName from branding.desc
|
||||
# is used, with problematic characters (space and slash) replaced.
|
||||
#
|
||||
# The ID is also used as a directory name within the EFI environment,
|
||||
# and the bootloader is copied from /boot/efi/EFI/<dirname>/ . When
|
||||
# setting the option here, keep in mind that the name is sanitized
|
||||
# (problematic characters, see above, are replaced).
|
||||
#
|
||||
# There are some special words possible at the end of *efiBootloaderId*:
|
||||
# ${SERIAL} can be used to obtain a uniquely-numbered suffix
|
||||
# that is added to the Id (yielding, e.g., `dirname1` or `dirname72`)
|
||||
# ${RANDOM} can be used to obtain a unique 4-digit hex suffix
|
||||
# ${PHRASE} can be used to obtain a unique 1-to-3-word suffix
|
||||
# from a dictionary of space-themed words
|
||||
# These words must be at the **end** of the *efiBootloaderId* value.
|
||||
# There must also be at most one of them. If there is none, no suffix-
|
||||
# processing is done and the *efiBootloaderId* is used unchanged.
|
||||
#
|
||||
# NOTE: Debian derivatives that use the unmodified Debian GRUB EFI
|
||||
# packages may need to set this to "debian" because that is
|
||||
# hard-coded in `grubx64.efi`.
|
||||
#
|
||||
# efiBootloaderId: "dirname"
|
||||
|
||||
# Optionally install a copy of the GRUB EFI bootloader as the EFI
|
||||
# fallback loader (either bootia32.efi or bootx64.efi depending on
|
||||
# the system). This may be needed on certain systems (Intel DH87MC
|
||||
# seems to be the only one). If you set this to false, take care
|
||||
# to add another module to optionally install the fallback on those
|
||||
# boards that need it.
|
||||
installEFIFallback: false
|
||||
|
||||
loaderEntries:
|
||||
- "timeout 5"
|
||||
- "console-mode auto"
|
||||
- "reboot-for-bitlocker 1"
|
|
@ -5,6 +5,8 @@
|
|||
# target as a usable chroot / "live" system).
|
||||
---
|
||||
|
||||
setSELinux: false
|
||||
|
||||
extraMounts:
|
||||
- device: proc
|
||||
fs: proc
|
||||
|
@ -40,10 +42,10 @@ btrfsSubvolumes:
|
|||
|
||||
mountOptions:
|
||||
- filesystem: default
|
||||
options: [ defaults, noatime ]
|
||||
options: [ noatime ]
|
||||
- filesystem: efi
|
||||
options: [ defaults, umask=0077 ]
|
||||
options: [ fmask=0137, dmask=0027 ]
|
||||
- filesystem: btrfs
|
||||
options: [ defaults, noatime, compress=zstd ]
|
||||
options: [ noatime, compress=zstd ]
|
||||
- filesystem: btrfs_swap
|
||||
options: [ defaults, noatime ]
|
||||
options: [ noatime ]
|
|
@ -3,11 +3,15 @@
|
|||
#
|
||||
# partition handling.
|
||||
---
|
||||
efi:
|
||||
mountPoint: "/efi"
|
||||
recommendedSize: 1024MiB
|
||||
minimumSize: 500MiB
|
||||
label: "EFI"
|
||||
|
||||
efiSystemPartition: "/boot/efi"
|
||||
|
||||
# set to 512M for best compatinbility for buggy old EFI firmware
|
||||
efiSystemPartitionSize: 512M
|
||||
#efiSystemPartitionSize: 512M
|
||||
|
||||
userSwapChoices:
|
||||
- none # Create no swap, use no swap
|
||||
|
@ -15,6 +19,7 @@ userSwapChoices:
|
|||
- suspend # At least main memory size
|
||||
- file # To swap file instead of partition
|
||||
|
||||
|
||||
drawNestedPartitions: false
|
||||
|
||||
alwaysShowPartitionLabels: true
|
||||
|
@ -25,19 +30,10 @@ initialSwapChoice: none
|
|||
|
||||
defaultFileSystemType: "ext4"
|
||||
|
||||
# Selectable filesystem type, used when "erase" is done.
|
||||
#
|
||||
# When erasing the disk, the *defaultFileSystemType* is used (see
|
||||
# above), but it is also possible to give users a choice:
|
||||
# list suitable filesystems here. A drop-down is provided
|
||||
# to pick which is the filesystems will be used.
|
||||
#
|
||||
# The value *defaultFileSystemType* is added to this list (with a warning)
|
||||
# if not present; the default pick is the *defaultFileSystemType*.
|
||||
#
|
||||
# If not specified at all, uses *defaultFileSystemType* without a
|
||||
# warning (this matches traditional no-choice-available behavior best).
|
||||
# availableFileSystemTypes: ["ext4","btrfs","xfs","f2fs"]
|
||||
showNotEncryptedBootMessage: false
|
||||
|
||||
luksGeneration: luks1
|
||||
|
||||
|
||||
availableFileSystemTypes: ["ext4","f2fs","xfs","btrfs"]
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@ sudoersGroup: wheel
|
|||
autologinGroup: autologin
|
||||
|
||||
|
||||
|
||||
sudoersConfigureWithGroup: true
|
||||
|
||||
setRootPassword: false
|
||||
|
@ -32,11 +31,11 @@ doAutologin: false
|
|||
|
||||
# These are very weak -- actually, none at all -- requirements
|
||||
passwordRequirements:
|
||||
minLength: -1 # Password at least this many characters
|
||||
maxLength: 10 # Password at most this many characters
|
||||
libpwquality:
|
||||
- minlen=0
|
||||
- minclass=0
|
||||
minLength: 1 # Password at least this many characters
|
||||
# maxLength: 10 # Password at most this many characters
|
||||
# libpwquality:
|
||||
# - minlen=0
|
||||
# - minclass=0
|
||||
|
||||
allowWeakPasswords: true
|
||||
|
||||
|
@ -49,7 +48,6 @@ user:
|
|||
hostname:
|
||||
location: EtcFile
|
||||
writeHostsFile: true
|
||||
template: "ParchBox-${cpu}"
|
||||
forbidden_names: [ localhost ]
|
||||
|
||||
presets:
|
||||
|
|
Loading…
Add table
Reference in a new issue