diff --git a/CHANGES b/CHANGES index cf5f9637e..58602f256 100644 --- a/CHANGES +++ b/CHANGES @@ -6,10 +6,11 @@ website will have to do for older versions. # 3.2.24 (unreleased) # This release contains contributions from (alphabetically by first name): - - No external contributors yet + - Gaël PORTAY ## Core ## - - No core changes yet + - There is now a bash-completions script for Calamares; turn on + the (CMake-time) option INSTALL_COMPLETION to get it. (Thanks Gaël) ## Modules ## - No module changes yet diff --git a/CMakeLists.txt b/CMakeLists.txt index bc14780a9..6edece315 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,6 +49,7 @@ set( CALAMARES_VERSION_RC 1 ) # Set to 0 during release cycle, 1 during develop # option( INSTALL_CONFIG "Install configuration files" OFF ) option( INSTALL_POLKIT "Install Polkit configuration" ON ) +option( INSTALL_COMPLETION "Install shell completions" OFF ) option( BUILD_TESTING "Build the testing tree." ON ) option( WITH_PYTHON "Enable Python modules API (requires Boost.Python)." ON ) option( WITH_PYTHONQT "Enable next generation Python modules API (experimental, requires PythonQt)." OFF ) @@ -389,6 +390,13 @@ list( SORT CALAMARES_TRANSLATION_LANGUAGES ) add_subdirectory( lang ) # i18n tools +if ( INSTALL_COMPLETION ) + if( NOT CMAKE_INSTALL_BASHCOMPLETIONDIR ) + set( CMAKE_INSTALL_BASHCOMPLETIONDIR "${CMAKE_INSTALL_DATADIR}/bash-completion/completions" ) + endif() + + install( FILES ${CMAKE_SOURCE_DIR}/data/completion/bash/calamares DESTINATION "${CMAKE_INSTALL_BASHCOMPLETIONDIR}" ) +endif() ### Example Distro # diff --git a/data/completion/bash/calamares b/data/completion/bash/calamares new file mode 100644 index 000000000..47c2bb268 --- /dev/null +++ b/data/completion/bash/calamares @@ -0,0 +1,36 @@ +# === This file is part of Calamares - === +# +# Copyright 2020, Gaël PORTAY +# +# Calamares is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Calamares is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Calamares. If not, see . + +_calamares() +{ + local cur prev words cword + _init_completion || return + + case "$prev" in + -D) + COMPREPLY=( $( compgen -W "$( seq 0 1 8 )" -- "$cur" ) ) + return + ;; + -c|--config) + _filedir + return + ;; + esac + + COMPREPLY=( $( compgen -W "-h --help -v --version -d --debug -D -c --config -X -xdg-config -T --debug-translation" -- "$cur" ) ) +} && +complete -F _calamares calamares diff --git a/src/modules/partition/core/PartitionActions.cpp b/src/modules/partition/core/PartitionActions.cpp index 5e785c9d1..d0de2c0d4 100644 --- a/src/modules/partition/core/PartitionActions.cpp +++ b/src/modules/partition/core/PartitionActions.cpp @@ -151,6 +151,10 @@ doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionO KPM_PARTITION_FLAG( None ) ); PartitionInfo::setFormat( efiPartition, true ); PartitionInfo::setMountPoint( efiPartition, o.efiPartitionMountPoint ); + if ( gs->contains( "efiSystemPartitionName" ) ) + { + efiPartition->setLabel( gs->value( "efiSystemPartitionName" ).toString() ); + } core->createPartition( dev, efiPartition, KPM_PARTITION_FLAG_ESP ); firstFreeSector = lastSector + 1; } diff --git a/src/modules/partition/gui/PartitionViewStep.cpp b/src/modules/partition/gui/PartitionViewStep.cpp index ed35fafa4..48d250ca4 100644 --- a/src/modules/partition/gui/PartitionViewStep.cpp +++ b/src/modules/partition/gui/PartitionViewStep.cpp @@ -538,6 +538,12 @@ PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap ) gs->insert( "efiSystemPartitionSize", CalamaresUtils::getString( configurationMap, "efiSystemPartitionSize" ) ); } + // Read and parse key efiSystemPartitionName + if ( configurationMap.contains( "efiSystemPartitionName" ) ) + { + gs->insert( "efiSystemPartitionName", CalamaresUtils::getString( configurationMap, "efiSystemPartitionName" ) ); + } + // SWAP SETTINGS // // This is a bit convoluted because there's legacy settings to handle as well diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.cpp b/src/modules/partition/jobs/FillGlobalStorageJob.cpp index ac65b5ff6..a302a3f31 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.cpp +++ b/src/modules/partition/jobs/FillGlobalStorageJob.cpp @@ -107,7 +107,7 @@ mapForPartition( Partition* partition, const QString& uuid ) Logger::CDebug deb; using TR = Logger::DebugRow< const char* const, const QString& >; deb << Logger::SubEntry << "mapping for" << partition->partitionPath() << partition->deviceNode() - << TR( "mtpoint:", PartitionInfo::mountPoint( partition ) ) << TR( "fs:", map[ "fs" ].toString() ) + << TR( "mountPoint:", PartitionInfo::mountPoint( partition ) ) << TR( "fs:", map[ "fs" ].toString() ) << TR( "fsName", map[ "fsName" ].toString() ) << TR( "uuid", uuid ) << TR( "claimed", map[ "claimed" ].toString() ); diff --git a/src/modules/partition/partition.conf b/src/modules/partition/partition.conf index 241e4ea05..f6cc34ee4 100644 --- a/src/modules/partition/partition.conf +++ b/src/modules/partition/partition.conf @@ -7,6 +7,10 @@ efiSystemPartition: "/boot/efi" # If nothing is specified, the default size of 300MiB will be used. # efiSystemPartitionSize: 300M +# This optional setting specifies the name of the EFI system partition. +# If nothing is specified, the partition name is left unset. +# efiSystemPartitionName: EFI + # In autogenerated partitioning, allow the user to select a swap size? # If there is exactly one choice, no UI is presented, and the user # cannot make a choice -- this setting is used. If there is more than diff --git a/src/modules/welcomeq/img/language-icon-48px.png b/src/modules/welcomeq/img/language-icon-48px.png new file mode 100644 index 000000000..4012a4bee Binary files /dev/null and b/src/modules/welcomeq/img/language-icon-48px.png differ diff --git a/src/modules/welcomeq/release_notes.qml b/src/modules/welcomeq/release_notes.qml new file mode 100644 index 000000000..ce9d1d4af --- /dev/null +++ b/src/modules/welcomeq/release_notes.qml @@ -0,0 +1,100 @@ +/* === This file is part of Calamares - === + * + * Copyright 2020, Anke Boersma + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +import io.calamares.ui 1.0 + +import QtQuick 2.7 +import QtQuick.Controls 2.2 +import QtQuick.Window 2.2 +import QtQuick.Layouts 1.3 + +Rectangle { + width: parent.width + height: parent.height + focus: true + color: "#f2f2f2" + + Flickable { + id: flick + anchors.fill: parent + contentHeight: 3500 + + ScrollBar.vertical: ScrollBar { + id: fscrollbar + width: 10 + policy: ScrollBar.AlwaysOn + } + + TextArea { + id: intro + x: 130 + y: 8 + width: 640 + font.pointSize: 14 + textFormat: Text.RichText + antialiasing: true + activeFocusOnPress: false + wrapMode: Text.WordWrap + + text: qsTr("

%1

+

This an example QML file, showing options in RichText with Flickable content.

+ +

QML with RichText can use HTML tags, Flickable content is useful for touchscreens.

+ +

This is bold text

+

This is italic text

+

This is underlined text

+

This text will be center-aligned.

+

This is strikethrough

+ +

Code example: + ls -l /home

+ +

Lists:

+
    +
  • Intel CPU systems
  • +
  • AMD CPU systems
  • +
+ +

The vertical scrollbar is adjustable, current width set to 10.

").arg(Branding.string(Branding.VersionedName)) + + } + } + + ToolButton { + id: toolButton + x: 19 + y: 29 + width: 105 + height: 48 + text: qsTr("Back") + hoverEnabled: true + onClicked: load.source = "" + + Image { + id: image1 + x: 0 + y: 13 + width: 22 + height: 22 + source: "img/chevron-left-solid.svg" + fillMode: Image.PreserveAspectFit + } + } + +} diff --git a/src/modules/welcomeq/welcomeq.qml b/src/modules/welcomeq/welcomeq.qml index 729b61b28..6330f5116 100644 --- a/src/modules/welcomeq/welcomeq.qml +++ b/src/modules/welcomeq/welcomeq.qml @@ -16,6 +16,7 @@ * You should have received a copy of the GNU General Public License * along with Calamares. If not, see . */ +import io.calamares.core 1.0 import io.calamares.ui 1.0 import QtQuick 2.10 @@ -29,21 +30,21 @@ Page { id: welcome - header: Item - { + header: Item { width: parent.width height: parent.height - Text - { + Text { id: welcomeTopText anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top + horizontalAlignment: Text.AlignHCenter + padding: 40 // In QML, QString::arg() only takes one argument - text: qsTr("

Welcome to the %1 %2 installer

").arg(Branding.string(Branding.ProductName)).arg(Branding.string(Branding.Version)) + text: qsTr("

Welcome to the %1 %2 installer

+

This program will ask you some questions and set up %1 on your computer.

").arg(Branding.string(Branding.ProductName)).arg(Branding.string(Branding.Version)) } - Image - { + Image { id: welcomeImage anchors.centerIn: parent // imagePath() returns a full pathname, so make it refer to the filesystem @@ -55,36 +56,31 @@ Page fillMode: Image.PreserveAspectFit } - RowLayout - { + RowLayout { id: buttonBar - width: parent.width + width: parent.width / 1.5 height: 64 anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter spacing: Kirigami.Units.largeSpacing* 2 -/* Traditionally Calamares has had an "About" button that talks about - * Calamares itself, which just isn't a very useful thing in someone - * else's installation ISO. - */ - Button - { + Button { Layout.fillWidth: true text: qsTr("About") icon.name: "dialog-information" Kirigami.Theme.backgroundColor: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.4) Kirigami.Theme.textColor: Kirigami.Theme.textColor - visible: false + visible: true onClicked: { - //onClicked: load.source = "file:/usr/share/calamares/branding/kaos_branding/show.qml" + //onClicked: load.source = "file:/usr/share/calamares/branding/default/show.qml" onClicked: load.source = "about.qml" } } - Button - { + + Button { Layout.fillWidth: true text: qsTr("Support") icon.name: "system-help" @@ -94,8 +90,8 @@ Page visible: config.supportUrl !== "" onClicked: Qt.openUrlExternally(config.supportUrl) } - Button - { + + Button { Layout.fillWidth: true text: qsTr("Known issues") icon.name: "tools-report-bug" @@ -105,8 +101,8 @@ Page visible: config.knownIssuesUrl !== "" onClicked: Qt.openUrlExternally(config.knownIssuesUrl) } - Button - { + + Button { Layout.fillWidth: true text: qsTr("Release notes") icon.name: "folder-text" @@ -114,10 +110,11 @@ Page Kirigami.Theme.textColor: Kirigami.Theme.textColor visible: config.releaseNotesUrl !== "" - onClicked: Qt.openUrlExternally(config.releaseNotesUrl) + onClicked: load.source = "release_notes.qml" + //onClicked: load.source = "file:/usr/share/calamares/release_notes.qml" } - Button - { + + Button { Layout.fillWidth: true text: qsTr("Donate") icon.name: "taxes-finances" @@ -128,8 +125,41 @@ Page onClicked: Qt.openUrlExternally(config.donateUrl) } } - Loader - { + + RowLayout { + id: languageBar + width: parent.width /1.2 + height: 48 + + anchors.bottom: parent.bottom + anchors.bottomMargin: parent.height /7 + anchors.horizontalCenter: parent.horizontalCenter + spacing: Kirigami.Units.largeSpacing* 4 + + Rectangle { + width: parent.width + Layout.fillWidth: true + focus: true + Image { + id: image + height: 48 + fillMode: Image.PreserveAspectFit + source: "img/language-icon-48px.png" + } + + ComboBox { + id: languages + anchors.left: image.right + width: languageBar.width /1.1 + textRole: "label" + currentIndex: 4 //model.currentIndex + model: config.languagesModel + onCurrentIndexChanged: console.debug(currentText, currentIndex) + } + } + } + + Loader { id:load anchors.fill: parent } diff --git a/src/modules/welcomeq/welcomeq.qrc b/src/modules/welcomeq/welcomeq.qrc index 84e598a27..71431254e 100644 --- a/src/modules/welcomeq/welcomeq.qrc +++ b/src/modules/welcomeq/welcomeq.qrc @@ -2,7 +2,9 @@ welcomeq.qml about.qml + release_notes.qml img/squid.png img/chevron-left-solid.svg + img/language-icon-48px.png