Compare commits

...

98 Commits

Author SHA1 Message Date
Walter Lapchynski 6959468d0c sync with archive
4 weeks ago
Simon Quigley 2843b10697 Do not remove zram-config on Ubuntu Unity, it does not exist in the first place (LP: #2063108).
1 month ago
Aaron Rainbolt 883c08282e Rearrange versions
1 month ago
Aaron Rainbolt 4f1f85ef9c Fix timeouts.
1 month ago
Aaron Rainbolt 5674431193 Don't show Thunderbird on Kubuntu.
1 month ago
Walter Lapchynski b2766f78bc Remove timeouts re: networking/update-initramfs
1 month ago
Walter Lapchynski 825b0631bd Add icon on Desktop to finish OEM install.
1 month ago
Aaron Rainbolt 1b74da2587 Fix the sizes of some Kubuntu branding things.
1 month ago
Aaron Rainbolt 0d65dd0d20 Get rid of the third-party drivers checkbox.
1 month ago
Aaron Rainbolt c48927d938 Add Kubuntu branding from Rick Timmis.
1 month ago
Simon Quigley d19ba3878c Don't keep lubuntu-snap-installation-monitor installed on the minimal option (LP: #2061318).
1 month ago
Walter Lapchynski ec477ab8e9 Remove after_bootloader contextual process
1 month ago
Aaron Rainbolt 052f17fd80 Fix sidebar color for Kubuntu.
1 month ago
Walter Lapchynski b754ac1285 Run apt update before installing packages
2 months ago
Simon Quigley 303ab727b5 Run the pkgselect contextualprocesses after packages in Kubuntu and Ubuntu Unity (LP: #2060879)
2 months ago
Aaron Rainbolt c04b82b2fa Fix pkgselect for kubuntu and ubuntuunity
2 months ago
Simon Quigley ba4dae0174 Upload to Noble
2 months ago
Simon Quigley cb54b1e186 Adjust spacers accordingly on no network.
2 months ago
Simon Quigley 1299a42d37 Allow fixconkeys-part2 a 5 minute window to run, which should be enough to run update-initramfs (LP: #2060429).
2 months ago
Simon Quigley 8696f7da83 Bump the timeout limits to 15 minutes for both pkgselect contextualprocess modules.
2 months ago
Simon Quigley fd49ee70fe Be completely sure apt will not try to prompt the user.
2 months ago
Aaron Rainbolt 1cc0cb1be9 Don't purge zram-config from Kubuntu, it doesn't exist.
2 months ago
Aaron Rainbolt f9d7cd9639 Sync with archive.
2 months ago
Aaron Rainbolt f461a8afec Revert "Remove zram-config from package purge list for Kubuntu"
2 months ago
Aaron Rainbolt 7256a4013a Remove zram-config from package purge list for Kubuntu
2 months ago
Simon Quigley adcf60e0ee Add missing build dependency on golang-go.
2 months ago
Simon Quigley 3f2cca27e9 Ship it!
2 months ago
Simon Quigley 1cebfe1fd8 no network
2 months ago
Simon Quigley be86ca1ec0 snap-seed-glue
2 months ago
Simon Quigley e3d1d6fe9c Wraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaap.
2 months ago
Aaron Rainbolt 0f213e4269 Someone (cough, me) didn't audit the package purge lists very well...
2 months ago
Aaron Rainbolt 1c4b837add Give up on GPT-on-MBR this cycle, too dangerous
2 months ago
Aaron Rainbolt 8b924b0eeb Adjust changelog, fix Ubuntu Unity OEM stuff
2 months ago
Walter Lapchynski 27850a5f22 setting BROWSER to open as live user
2 months ago
Aaron Rainbolt 48a5f7d792 Go all-GPT, tweak changelog wording a bit
2 months ago
Aaron Rainbolt 7bad26586e Enhance design with suggestions from Michael, make changelog more accurate
2 months ago
Simon Quigley a6ece69a5a Ensure the items show up in globalStorage, but fail at actually using them
2 months ago
Simon Quigley 45d0d7bb62 can haz UI instead of QML pls kthxbai
2 months ago
Simon Quigley 991af8f043 Enable pkgselect for everyone.
2 months ago
Aaron Rainbolt ffc955d58e Fix LUKS passphrase prompt for non-US keyboard layouts, undo an accidental change to Kubuntu
2 months ago
Aaron Rainbolt c8f33d68f7 Add Ubuntu Unity config, fix some bugs
2 months ago
Walter Lapchynski 8c60c69654 GeoIP in welcome module disabled
3 months ago
Aaron Rainbolt 3cf89c92ab Actually enforce non-empty passwords
3 months ago
Aaron Rainbolt 5356eeab97 Good bye Ubuntu Studio, we miss you. Come back anytime!
3 months ago
Aaron Rainbolt 4d0755e3f0 Add changelog entry
3 months ago
Neal Gompa 79aaacdae4 debian/control: Define the flavor packages as swappable packages
3 months ago
Aaron Rainbolt 2e551c98e4 OEM mode bugfixes
3 months ago
Aaron Rainbolt 03d507b751 Update copyright file
3 months ago
Aaron Rainbolt 4629bba99c Massive OEM mode overhaul for Lubuntu, tweaks and fixes for Kubuntu OEM mode
3 months ago
Aaron Rainbolt f777bbfa16 Sync with archive.
4 months ago
Simon Quigley a649612fd2 Upload to Noble.
4 months ago
Simon Quigley c2fa148bc5 Be compliant with the current state of the deb822 Ubuntu implementation specification.
4 months ago
Dan Simmons 2389a13777 Upload to Noble.
5 months ago
Dan Simmons c000464ad5 Update welcome slide for noble.
5 months ago
Simon Quigley 62c5dee9e7 Use new icon for Lubuntu's installer, and improve theming.
5 months ago
Aaron Rainbolt 3e5f959765 Don't try to uninstall muon when doing a minimal install
6 months ago
Aaron Rainbolt efe57b6984 Sync with archive.
6 months ago
Simon Quigley f8bf449335 Add some testing code to the QML file to make it do what we'd like.
6 months ago
Simon Quigley 61b3436848 Install the QML file to the proper directory.
6 months ago
Simon Quigley c323c1df78 Update snaps used for Krita.
6 months ago
Simon Quigley e54b912e24 Add a full installation radio button, and disable the bottom checkboxes if minimal install is selected.
6 months ago
Simon Quigley 52cf0936d6 Go back to fullscreen.
6 months ago
Simon Quigley e6f7fb2f5a Explicitly depend on lubuntu-installer-prompt, which provides a default workflow on the live system. Remove this package at the end of the install as well.
6 months ago
Simon Quigley dfe54b454d Even if modules fail, try to perform the unmount.
6 months ago
Simon Quigley 0ab235c89e Use lxqt-sudo instead of sudo, to pick up theming.
6 months ago
Aaron Rainbolt 24a11332de Fix a Lintian override (we use sudo now, not pkexec)
6 months ago
Aaron Rainbolt 072c709db1 Copy the Calamares log from the right place
6 months ago
Aaron Rainbolt 14c632b6d5 Go back to using sudo -E
6 months ago
Aaron Rainbolt 99dcbbec07 Another FTBFS fix attempt
7 months ago
Aaron Rainbolt 11ba0bb760 Add some Lintian overrides
7 months ago
Aaron Rainbolt d4f3a7cbb3 Trailing whitespace trim
7 months ago
Aaron Rainbolt 473731f547 Export a couple important env vars
7 months ago
Aaron Rainbolt 775de27505 Unset some superfluous executable bits
7 months ago
Aaron Rainbolt a5a4c1bb3d /usr/lib/x86_64-linux-gnu/usr/lib/x86_64-linux-gnu is a bit repetitive, no?
7 months ago
Aaron Rainbolt dc16d97796 pkgselect CMakeLists.txt fixes
7 months ago
Aaron Rainbolt f14cf77d43 Revert "Fix FTBFS on !(amd64)."
7 months ago
Simon Quigley 26c675cb3d Fix FTBFS on !(amd64).
7 months ago
Simon Quigley 57efcc96f9 Upload to Noble.
7 months ago
Simon Quigley e4fa30c3d2 Welcome to Noble!
7 months ago
Simon Quigley d35567de95 Fix Vcs-* again.
7 months ago
Simon Quigley 1de2940b52 Some more polish around text and Ubuntu Restricted Extras etc.
7 months ago
Simon Quigley b0c000326b Bypass the debconf prompt for msttcorefonts, which absolutely breaks some license agreement.
8 months ago
Simon Quigley 9f6b8f8e8a Migrate to deb822 sources, removing the sources.list file pre-populated by livecd-rootfs. Main and Universe deb sources are enabled by default, Restricted and Multiverse are opt-in via the installer checkbox.
8 months ago
Simon Quigley 9b0d4c4394 Completely finish the backend for pkgselect
8 months ago
Simon Quigley b52736fc07 Finish the prototype for pkgselect, which stores the values in GlobalStorage for later usage by a contextualprocess
8 months ago
Simon Quigley 448d50f929 Start more of the backend implementation.
8 months ago
Simon Quigley 26e2cbac91 In another step forward on this ongoing project, connect the view step to a Job, which runs during the installation.
8 months ago
Simon Quigley 4b847dae69 Add the UI for Package Select, allowing for fine-tuned customization of the installed system.
8 months ago
Simon Quigley f8e37f2a81 Fix Vcs-*.
8 months ago
Simon Quigley f31623c3b7 Start 23.10 -> 24.04.
8 months ago
Simon Quigley 2be42e5594 Use geoip.ubuntu.com by default.
8 months ago
Simon Quigley ad4ab2cf25 Remove the Partners repository as an option.
8 months ago
Walter Lapchynski 3c0ae960b7 update changelog for no-change rebuild
9 months ago
Walter Lapchynski 4dd1ad4040 update changelog
9 months ago
Walter Lapchynski cb55a5d0bd update lubuntu welcome.png for mantic
9 months ago
Dan Simmons 7fe4cfc8f7 Upload to Mantic.
10 months ago
Dan Simmons 8c2f95c375 Add ext4, btrfs, xfs options on erase for Lubuntu.
10 months ago
Dan Simmons 4b5c7564fa Welcome to Mantic.
10 months ago

@ -5,13 +5,69 @@
all:
# Desktop file
(cd lubuntu/po/ && make)
(cd ubuntustudio/po/ && make)
(cd kubuntu/po/ && make)
(cd ubuntuunity/po && make)
# Slideshow
(cd lubuntu/branding/lubuntu/lang/ && make)
(cd ubuntustudio/branding/ubuntustudio/lang && make)
# basicwallpaper
(cd common/basicwallpaper && mkdir build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release && make)
# Lubuntu OEM setup stuff
(cd lubuntu && mkdir oemconfig && cd oemconfig && mkdir -p usr/bin && mkdir -p etc/calamares && mkdir -p usr/share/xsessions && mkdir -p usr/libexec && mkdir -p etc && mkdir -p usr/share/applications && mkdir -p home/oem/Desktop)
(cp lubuntu/calamares-logs-helper lubuntu/oemconfig/usr/bin/)
(cp lubuntu/oem/sddm.conf lubuntu/oemconfig/etc/)
(cp lubuntu/oem/sudoers.oem lubuntu/oemconfig/etc/ && chmod 400 lubuntu/oemconfig/etc/sudoers.oem)
(cp lubuntu/oem/calamares-oemfinish.sh lubuntu/oemconfig/usr/libexec/)
(cp lubuntu/oem/calamares-finish-oem lubuntu/oemconfig/usr/bin/)
(cp lubuntu/oem/calamares-finish-oem.desktop lubuntu/oemconfig/usr/share/applications/)
(cp -r lubuntu/branding lubuntu/oemconfig/etc/calamares/)
(cp -r lubuntu/oem/modules/ lubuntu/oemconfig/etc/calamares/)
(cp lubuntu/oem/settings.conf lubuntu/oemconfig/etc/calamares/)
(cp lubuntu/oem/lubuntu-oem-env/lubuntu-oem-environment.desktop lubuntu/oemconfig/usr/share/xsessions/)
(cp lubuntu/oem/lubuntu-oem-env/start-lubuntu-oem-env lubuntu/oemconfig/usr/libexec/)
(cp common/basicwallpaper/build/basicwallpaper lubuntu/oemconfig/usr/bin/)
(cp lubuntu/oem/calamares-finish-oem.desktop lubuntu/oemconfig/home/oem/Desktop/)
(fakeroot bash -c "chown -R root:root lubuntu/oemconfig && tar cvzf lubuntu/oemconfig.tar.gz lubuntu/oemconfig")
# Kubuntu OEM setup stuff
(cd kubuntu && mkdir oemconfig && cd oemconfig && mkdir -p usr/bin && mkdir -p etc/calamares && mkdir -p usr/share/xsessions && mkdir -p usr/libexec && mkdir -p etc && mkdir -p usr/share/applications && mkdir -p home/oem/Desktop)
(cp kubuntu/calamares-logs-helper kubuntu/oemconfig/usr/bin/)
(cp kubuntu/oem/sddm.conf kubuntu/oemconfig/etc/)
(cp kubuntu/oem/sudoers.oem kubuntu/oemconfig/etc/ && chmod 400 kubuntu/oemconfig/etc/sudoers.oem)
(cp kubuntu/oem/calamares-oemfinish.sh kubuntu/oemconfig/usr/libexec/)
(cp kubuntu/oem/calamares-finish-oem kubuntu/oemconfig/usr/bin/)
(cp kubuntu/oem/calamares-finish-oem.desktop kubuntu/oemconfig/usr/share/applications/)
(cp -r kubuntu/branding kubuntu/oemconfig/etc/calamares/)
(cp -r kubuntu/oem/modules/ kubuntu/oemconfig/etc/calamares/)
(cp kubuntu/oem/settings.conf kubuntu/oemconfig/etc/calamares/)
(cp kubuntu/oem/kubuntu-oem-env/kubuntu-oem-environment.desktop kubuntu/oemconfig/usr/share/xsessions/)
(cp kubuntu/oem/kubuntu-oem-env/start-kubuntu-oem-env kubuntu/oemconfig/usr/libexec/)
(cp common/basicwallpaper/build/basicwallpaper kubuntu/oemconfig/usr/bin/)
(cp kubuntu/oem/calamares-finish-oem.desktop kubuntu/oemconfig/home/oem/Desktop/)
(fakeroot bash -c "chown -R root:root kubuntu/oemconfig && tar cvzf kubuntu/oemconfig.tar.gz kubuntu/oemconfig")
# Ubuntu Unity OEM setup stuff
(cd ubuntuunity && mkdir oemconfig && cd oemconfig && mkdir -p usr/bin && mkdir -p etc/calamares && mkdir -p usr/share/xsessions && mkdir -p usr/libexec && mkdir -p etc/lightdm && mkdir -p usr/share/applications && mkdir -p home/oem/Desktop)
(cp ubuntuunity/calamares-logs-helper ubuntuunity/oemconfig/usr/bin/)
(cp ubuntuunity/oem/lightdm.conf ubuntuunity/oemconfig/etc/lightdm/)
(cp ubuntuunity/oem/sudoers.oem ubuntuunity/oemconfig/etc/ && chmod 400 kubuntu/oemconfig/etc/sudoers.oem)
(cp ubuntuunity/oem/calamares-oemfinish.sh ubuntuunity/oemconfig/usr/libexec/)
(cp ubuntuunity/oem/calamares-finish-oem ubuntuunity/oemconfig/usr/bin/)
(cp ubuntuunity/oem/calamares-finish-oem.desktop ubuntuunity/oemconfig/usr/share/applications/)
(cp -r ubuntuunity/branding ubuntuunity/oemconfig/etc/calamares/)
(cp -r ubuntuunity/oem/modules/ ubuntuunity/oemconfig/etc/calamares/)
(cp ubuntuunity/oem/settings.conf ubuntuunity/oemconfig/etc/calamares/)
(cp ubuntuunity/oem/ubuntu-unity-oem-env/ubuntu-unity-oem-environment.desktop ubuntuunity/oemconfig/usr/share/xsessions/)
(cp ubuntuunity/oem/ubuntu-unity-oem-env/start-ubuntu-unity-oem-env ubuntuunity/oemconfig/usr/libexec/)
(cp common/basicwallpaper/build/basicwallpaper ubuntuunity/oemconfig/usr/bin/)
(cp ubuntuunity/oem/calamares-finish-oem.desktop ubuntuunity/oemconfig/home/oem/Desktop/)
(fakeroot bash -c "chown -R root:root ubuntuunity/oemconfig && tar cvzf ubuntuunity/oemconfig.tar.gz ubuntuunity/oemconfig")
# Get rid of the unnecessary files
find lubuntu/ -type f -iname "*.in" | xargs rm -f
find lubuntu/ -type f -iname "Makefile" | xargs rm -f
find ubuntustudio/ -type f -iname "*.in" | xargs rm -f
find ubuntustudio/ -type f -iname "Makefile" | xargs rm -f
find kubuntu/ -type f -iname "*.in" | xargs rm -f
find kubuntu/ -type f -iname "Makefile" | xargs rm -f
find ubuntuunity/ -type f -iname "*.in" | xargs rm -f
find ubuntuunity/ -type f -iname "Makefile" | xargs rm -f
rm -rf kubuntu/oemconfig
rm -rf lubuntu/oemconfig
rm -rf ubuntuunity/oemconfig
rm -rf common/basicwallpaper/build
# vim:ts=4

@ -6,8 +6,8 @@ If you want to add a new package for your flavor, here's how to do it:
2. Edit files and rename the branding directory for your flavor. All of the
configuration files are pretty self-explanatory, but they're documented
well upstream, so it shouldn't be hard to put your own spin on things.
3. Create a new binary package, and *make sure to Conflicts against all other
binary packages in this source package*. This needs to be done because all
3. Create a new binary package, and *make sure to Provides+Conflicts against
`calamares-settings-ubuntu-flavor`*. This needs to be done because all
subdirectories are installed in the same location, so this makes sure that
nobody tries to install any two binary packages at the same time.

@ -0,0 +1,24 @@
# Ubuntu Studio's Calamares Branding (archived)
This directory houses the branding Ubuntu Studio used when Calamares was still
being used as the installer, along with some additional potentially useful
configuration fragments. Ubuntu Studio has since switched to using
ubuntu-desktop-provision, and thus most of the actual configuration has been
removed.
Unless otherwise stated, the contents of this directory are licensed as follows:
Copyright (C) 2020 Ubuntu Studio Developers <ubuntu-studio-devel@lists.ubuntu.com>
This program 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.
This program 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 this software. If not, see <http://www.gnu.org/licenses/>.

Before

Width:  |  Height:  |  Size: 342 KiB

After

Width:  |  Height:  |  Size: 342 KiB

Before

Width:  |  Height:  |  Size: 329 KiB

After

Width:  |  Height:  |  Size: 329 KiB

Before

Width:  |  Height:  |  Size: 404 KiB

After

Width:  |  Height:  |  Size: 404 KiB

Before

Width:  |  Height:  |  Size: 379 KiB

After

Width:  |  Height:  |  Size: 379 KiB

Before

Width:  |  Height:  |  Size: 294 KiB

After

Width:  |  Height:  |  Size: 294 KiB

Before

Width:  |  Height:  |  Size: 460 KiB

After

Width:  |  Height:  |  Size: 460 KiB

@ -7,10 +7,10 @@ windowSize: "890px,600px"
strings:
productName: Ubuntu Studio
shortProductName: Ubuntu Studio
version: 23.04
shortVersion: lunar
version: 23.10
shortVersion: noble
versionedName: Ubuntu Studio
shortVersionedName: Ubuntu Studio 23.04
shortVersionedName: Ubuntu Studio 23.10
bootloaderEntryName: Ubuntu
productUrl: https://ubuntustudio.org/
supportUrl: https://ubuntustudio.org/support/

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Before

Width:  |  Height:  |  Size: 243 KiB

After

Width:  |  Height:  |  Size: 243 KiB

@ -0,0 +1,45 @@
cmake_minimum_required(VERSION 3.5)
project(basicwallpaper VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(basicwallpaper
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
else()
add_executable(basicwallpaper
${PROJECT_SOURCES}
)
endif()
target_link_libraries(basicwallpaper PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
install(TARGETS basicwallpaper
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(basicwallpaper)
endif()

@ -0,0 +1,288 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 6.0.2, 2024-02-14T12:14:09. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{c72e8e96-4d64-44b5-94c8-e16820d11b4b}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{c8b6ccbc-b12c-473e-83be-23a4b6d2eb6e}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="CMake.Build.Type">Debug</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=Debug
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/arraybolt3/Projects/build-basicwallpaper-Desktop-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="CMake.Build.Type">Release</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/arraybolt3/Projects/build-basicwallpaper-Desktop-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="CMake.Build.Type">RelWithDebInfo</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/arraybolt3/Projects/build-basicwallpaper-Desktop-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release with Debug Information</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<value type="QString" key="CMake.Build.Type">MinSizeRel</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=MinSizeRel
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/arraybolt3/Projects/build-basicwallpaper-Desktop-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Minimum Size Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

@ -0,0 +1,3 @@
# basicwallpaper: Shows an image in the background across all screens
Copyright (C) 2024 Kubuntu Developers <kubuntu-devel@lists.ubuntu.com>. Licensed under the GNU GPL version 3. This license applies to all files in the repository. Inspiration taken from lubuntu-installer-prompt and pcmanfm-qt.

@ -0,0 +1,28 @@
#include "mainwindow.h"
#include <QApplication>
#include <QScreen>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString wallpaperFile;
if (argc > 1) {
wallpaperFile = QString(argv[1]);
} else {
return 1;
}
for (QScreen *screen : QApplication::screens()) {
MainWindow *w = new MainWindow(wallpaperFile);
w->setWindowFlags(Qt::WindowStaysOnBottomHint);
w->setGeometry(screen->geometry());
w->showFullScreen();
w->show();
w->applyWallpaper();
}
return a.exec();
}

@ -0,0 +1,43 @@
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QDebug>
#include <QImage>
MainWindow::MainWindow(const QString &wallpaperFile, QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_wallpaperFile = wallpaperFile;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::applyWallpaper()
{
QImage image(m_wallpaperFile);
if (!image.isNull()) {
qreal imgRatio = static_cast<qreal>(image.width()) / image.height();
qreal screenRatio = static_cast<qreal>(this->width()) / this->height();
QImage scaled;
if (imgRatio < screenRatio) {
scaled = image.scaledToWidth(this->width(), Qt::SmoothTransformation);
int yGap = (scaled.height() - this->height()) / 2;
scaled = scaled.copy(0, yGap, scaled.width(), this->height());
} else {
scaled = image.scaledToHeight(this->height(), Qt::SmoothTransformation);
int xGap = (scaled.width() - this->width()) / 2;
scaled = scaled.copy(xGap, 0, this->width(), scaled.height());
}
QPixmap bg = QPixmap::fromImage(scaled);
QPalette palette;
palette.setBrush(QPalette::Window, bg);
this->setPalette(palette);
} else {
qCritical() << "ERROR: Wallpaper does not exist!";
}
}

@ -0,0 +1,24 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(const QString &wallpaperFile, QWidget *parent = nullptr);
~MainWindow();
void applyWallpaper();
private:
Ui::MainWindow *ui;
QString m_wallpaperFile;
};
#endif // MAINWINDOW_H

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QMenuBar" name="menubar"/>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>

@ -0,0 +1,3 @@
#!/bin/bash
setxkbmap -query | awk '/layout/{ print $2 }' > /dev/shm/fixconkeys-layout
cp /usr/libexec/fixconkeys-part2 ${1}/usr/libexec/fixconkeys-part2

@ -0,0 +1,5 @@
#!/bin/bash
loadkeys "$(cat /dev/shm/fixconkeys-layout)"
setupcon --save-only
update-initramfs -c -k all
rm /usr/libexec/fixconkeys-part2

@ -6,8 +6,8 @@ baseUrl: archive.ubuntu.com
# URL used for IP address lookup
geoip:
style: "json"
url: "https://ipapi.co/json"
style: "xml"
url: "https://geoip.ubuntu.com/lookup"
# Distribution that this is based off of.
# This is so we can make safe assumptions for the contents of

@ -1,6 +1,6 @@
#!/usr/bin/env python3
# Copyright (C) 2018 Simon Quigley <tsimonq2@ubuntu.com>
# Copyright (C) 2018-2023 Simon Quigley <tsimonq2@ubuntu.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -19,150 +19,108 @@ import json
import libcalamares
from time import strftime
import urllib.request
from urllib.error import HTTPError
from urllib.error import URLError
from urllib.error import HTTPError, URLError
import socket
import logging
import distro
global sources
sources = """# Automatically generated by Calamares on DATE.
# Lines starting with "deb" are mandatory, while lines starting with "deb-src"
# are for more detailed package information.
## See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
## newer versions of DISTRIBUTION.
deb URL/ubuntu/ CODENAME main restricted
# deb-src URL/ubuntu/ CODENAME main restricted
## Major bug fix updates produced after the final release of DISTRIBUTION.
## Have you noticed a regression? Please report it!
## https://wiki.ubuntu.com/StableReleaseUpdates#Regressions
deb URL/ubuntu/ CODENAME-updates main restricted
# deb-src URL/ubuntu/ CODENAME-updates main restricted
## Software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu team.
## Also, please note that software in Universe WILL NOT receive any review or
## updates from the Ubuntu security team directly. Updates in this repository
## are provided by volunteers, but most come from Debian.
deb URL/ubuntu/ CODENAME universe
# deb-src URL/ubuntu/ CODENAME universe
deb URL/ubuntu/ CODENAME-updates universe
# deb-src URL/ubuntu/ CODENAME-updates universe
## Software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu team,
## and may not be under a free licence. Please satisfy yourself as your rights
## to use the software. Also, please note that software in Multiverse WILL NOT
## receive any review or updates from the Ubuntu security team directly.
deb URL/ubuntu/ CODENAME multiverse
# deb-src URL/ubuntu/ CODENAME multiverse
deb URL/ubuntu/ CODENAME-updates multiverse
# deb-src URL/ubuntu/ CODENAME-updates multiverse
## Software from this repository contains tested security updates from the
## Ubuntu security team.
deb http://security.ubuntu.com/ubuntu CODENAME-security main restricted
# deb-src http://security.ubuntu.com/ubuntu CODENAME-security main restricted
deb http://security.ubuntu.com/ubuntu CODENAME-security universe
# deb-src http://security.ubuntu.com/ubuntu CODENAME-security universe
deb http://security.ubuntu.com/ubuntu CODENAME-security multiverse
# deb-src http://security.ubuntu.com/ubuntu CODENAME-security multiverse
## Software from this repository may not have been tested as extensively as
## software contained in the main release, although it includes newer versions
## of some applications which may provide useful features. Also, please note
## that software in Backports WILL NOT receive any review or updates from the
## Ubuntu security team.
deb URL/ubuntu/ CODENAME-backports main restricted universe multiverse
# deb-src URL/ubuntu/ CODENAME-backports main restricted universe multiverse
## Uncomment the following two lines to add software from Canonical's
## "partner" repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu CODENAME partner
# deb-src http://archive.canonical.com/ubuntu CODENAME partner"""
SUBDOMAINS_BY_COUNTRY_CODE = {"US": "us.",
"AU": "au.",
"SE": "no.",
"NO": "no.",
"NZ": "nz.",
"NL": "nl.",
"KR": "kr.",
"DE": "de.",
"GE": "ge.",
"PF": "pf.",
"CZ": "cz.",
"HR": "hr."}
def getcountrycode():
"""
Return the two-letter country code or an empty string.
Tries to determine the country code based on the public IP address,
if the device is connected to the Internet. Otherwise it returns
an empty string.
"""
if libcalamares.globalstorage.value("hasInternet"):
geoipurl = libcalamares.job.configuration["geoip"]["url"]
try:
with urllib.request.urlopen(geoipurl, timeout=75) as http_response:
localedata = json.loads(http_response.read().decode())
except HTTPError as http_error:
logging.error("Data not retrieved because %s - URL: %s",
http_error, geoipurl)
except URLError as url_error:
if isinstance(url_error.reason, socket.timeout):
logging.error("Socket timed out - URL %s", geoipurl)
else:
logging.error("Non-timeout protocol error.")
else:
logging.info("Country successfully determined.")
return localedata["country"]
else:
return ""
def get_subdomain_by_country(countrycode):
"""Return the subdomain for the given countrycode
or an empty string.
"""
if countrycode in SUBDOMAINS_BY_COUNTRY_CODE.keys():
return SUBDOMAINS_BY_COUNTRY_CODE[countrycode]
else:
import xml.etree.ElementTree as ET
from os import remove
SUBDOMAINS_BY_COUNTRY_CODE = {
"US": "us.", "AU": "au.", "SE": "no.", "NO": "no.",
"NZ": "nz.", "NL": "nl.", "KR": "kr.", "DE": "de.",
"GE": "ge.", "PF": "pf.", "CZ": "cz.", "HR": "hr."
}
def get_sources_template():
return """# Automatically generated by Calamares on {date}.
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of {distro}.
## Ubuntu distribution repository
##
## The following settings can be adjusted to configure which packages to use from Ubuntu.
## Mirror your choices (except for URIs and Suites) in the security section below to
## ensure timely security updates.
##
## Types: Append deb-src to enable the fetching of source package.
## URIs: A URL to the repository (you may add multiple URLs)
## Suites: The following additional suites can be configured
## <name>-updates - Major bug fix updates produced after the final release of the
## distribution.
## <name>-backports - software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
## Components: Aside from main, the following components can be added to the list
## restricted - Software that may not be under a free license, or protected by patents.
## universe - Community maintained packages.
## Software from this repository is only maintained and supported by Canonical
## for machines with Ubuntu Pro subscriptions. Without Ubuntu Pro, the Ubuntu
## community provides best-effort security maintenance.
## multiverse - Community maintained of restricted. Software from this repository is
## ENTIRELY UNSUPPORTED by the Ubuntu team, and may not be under a free
## licence. Please satisfy yourself as to your rights to use the software.
## Also, please note that software in multiverse WILL NOT receive any
## review or updates from the Ubuntu security team.
##
## See the sources.list(5) manual page for further settings.
Types: deb
URIs: {url}
Suites: {codename} {codename}-updates {codename}-backports
Components: main universe restricted multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
## Ubuntu security updates. Aside from URIs and Suites,
## this should mirror your choices in the previous section.
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: {codename}-security
Components: main universe restricted multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
"""
def get_country_code():
if not libcalamares.globalstorage.value("hasInternet"):
return ""
geoip_config = libcalamares.job.configuration["geoip"]
try:
with urllib.request.urlopen(geoip_config["url"], timeout=75) as resp:
if geoip_config["style"] == "json":
return json.loads(resp.read().decode())["country_code"]
elif geoip_config["style"] == "xml":
return ET.parse(resp).getroot().find("CountryCode").text
except (HTTPError, URLError, socket.timeout):
logging.error("Failed to get country code.")
return ""
def getcodename():
"""Return the codename of the distribution, similar to lsb_release -cs"""
return distro.codename()
def get_subdomain_by_country(country_code):
return SUBDOMAINS_BY_COUNTRY_CODE.get(country_code, "")
def changesources(subdomain):
"""Replace the placeholders and then create the sources.list"""
distro = libcalamares.job.configuration["distribution"]
url = "http://{}{}".format(subdomain,
libcalamares.job.configuration["baseUrl"])
def write_file(path, content):
with open(path, "w") as f:
f.write(content)
global sources
sources = sources.replace("DISTRIBUTION", distro)
sources = sources.replace("CODENAME", getcodename())
sources = sources.replace("URL", url)
sources = sources.replace("DATE", strftime("%Y-%m-%d"))
filepath = libcalamares.globalstorage.value("rootMountPoint")
filepath += "/etc/apt/sources.list"
with open(filepath, "r+") as sourcesfile:
sourcesfile.seek(0)
sourcesfile.write(sources)
sourcesfile.truncate()
def run():
country_code = get_country_code()
subdomain = get_subdomain_by_country(country_code)
base_url = "http://{}{}/ubuntu".format(subdomain, libcalamares.job.configuration["baseUrl"])
codename = distro.codename()
root_mount_point = libcalamares.globalstorage.value("rootMountPoint")
def run():
"""Autoselect a mirror and create the sources.list file."""
countrycode = getcountrycode()
subdomain = get_subdomain_by_country(countrycode)
sources = get_sources_template().format(date=strftime("%Y-%m-%d"), distro=libcalamares.job.configuration["distribution"], url=base_url, codename=codename)
write_file(f"{root_mount_point}/etc/apt/sources.list.d/ubuntu.sources", sources)
remove(f"{root_mount_point}/etc/apt/sources.list")
changesources(subdomain)
libcalamares.globalstorage.insert("mirrorURL", base_url)
libcalamares.globalstorage.insert("ubuntuCodename", codename)

@ -11,8 +11,8 @@ firmwareType:
- command: sed -i '/deb http/d' /etc/apt/sources.list
timeout: 10
- command: apt-get update
timeout: 120
timeout: 10800
- command: apt install -y --no-upgrade -o Acquire::gpgv::Options::=--ignore-time-conflict grub-efi-$(if grep -q 64 /sys/firmware/efi/fw_platform_size; then echo amd64-signed; else echo ia32; fi)
timeout: 300
timeout: 10800
- command: apt install -y --no-upgrade -o Acquire::gpgv::Options::=--ignore-time-conflict shim-signed
timeout: 300
timeout: 10800

@ -0,0 +1,31 @@
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
include(FeatureSummary)
set( CMAKE_CXX_STANDARD 17 )
set( CMAKE_CXX_STANDARD_REQUIRED ON )
set( CALAMARES_VERSION_REQUIRED 3.3.0 )
find_package(ECM ${ECM_VERSION} NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH})
include(KDEInstallDirs)
find_package(KF5 REQUIRED COMPONENTS CoreAddons)
find_package(Calamares ${CALAMARES_VERSION_REQUIRED} NO_CMAKE_PACKAGE_REGISTRY)
if (NOT TARGET Calamares::calamares OR NOT TARGET Calamares::calamaresui)
find_package(Calamares ${CALAMARES_VERSION_REQUIRED} REQUIRED)
endif()
message(STATUS "Found Calamares version ${Calamares_VERSION}")
message(STATUS " libraries ${Calamares_LIB_DIRS}")
message(STATUS "")
calamares_add_plugin( pkgselect
TYPE viewmodule
EXPORT_MACRO PLUGINDLLEXPORT_PRO
SOURCES
PackageSelectViewStep.cpp
UI
pkgselect.ui
SHARED_LIB
)

@ -0,0 +1,208 @@
#include "PackageSelectViewStep.h"
#include "JobQueue.h"
#include "GlobalStorage.h"
#include "Branding.h"
#include "network/Manager.h"
#include <QVariantMap>
PackageSelectViewStep::PackageSelectViewStep( QObject* parent )
: Calamares::ViewStep( parent ),
m_packageSelections(QVariantMap()),
ui(new Ui::pkgselect)
{
m_widget = new QWidget();
ui->setupUi(m_widget);
}
PackageSelectViewStep::~PackageSelectViewStep()
{
delete ui;
delete m_widget;
}
QString
PackageSelectViewStep::prettyName() const
{
return tr( "Customize" );
}
bool PackageSelectViewStep::exists_and_true(const QString& key) const
{
return m_packageSelections.contains(key) && m_packageSelections[key].toBool() == true;
}
QWidget* PackageSelectViewStep::widget()
{
return m_widget;
}
Calamares::JobList PackageSelectViewStep::jobs() const
{
return Calamares::JobList();
}
bool PackageSelectViewStep::isNextEnabled() const
{
return true;
}
bool PackageSelectViewStep::isBackEnabled() const
{
return true;
}
bool PackageSelectViewStep::isAtBeginning() const
{
return true;
}
bool PackageSelectViewStep::isAtEnd() const
{
return true;
}
void PackageSelectViewStep::onActivate()
{
// Connect the Minimal Installation radio button
connect(ui->minimal_button, &QRadioButton::toggled, this, [this](bool checked) {
Calamares::Network::Manager network;
if (checked && network.hasInternet()) {
ui->extraparty_scroll->setVisible(false);
ui->extraparty_text->setVisible(false);
ui->mandatory_warning_label->setVisible(false);
ui->element_button->setChecked(false);
ui->thunderbird_button->setChecked(false);
ui->virtmanager_button->setChecked(false);
ui->krita_button->setChecked(false);
ui->element_button->setEnabled(false);
ui->thunderbird_button->setEnabled(false);
ui->virtmanager_button->setEnabled(false);
ui->krita_button->setEnabled(false);
}
});
// Connect the Normal Installation radio button
connect(ui->normal_button, &QRadioButton::toggled, this, [this](bool checked) {
Calamares::Network::Manager network;
if (checked && network.hasInternet()) {
ui->extraparty_scroll->setVisible(true);
ui->extraparty_text->setVisible(true);
ui->mandatory_warning_label->setVisible(true);
ui->element_button->setChecked(false);
ui->thunderbird_button->setChecked(false);
ui->virtmanager_button->setChecked(false);
ui->krita_button->setChecked(false);
ui->element_button->setEnabled(true);
ui->thunderbird_button->setEnabled(true);
ui->virtmanager_button->setEnabled(true);
ui->krita_button->setEnabled(true);
}
});
// Connect the Full Installation radio button
connect(ui->full_button, &QRadioButton::toggled, this, [this](bool checked) {
Calamares::Network::Manager network;
if (checked && network.hasInternet()) {
ui->extraparty_scroll->setVisible(true);
ui->extraparty_text->setVisible(true);
ui->mandatory_warning_label->setVisible(true);
ui->element_button->setChecked(true);
ui->thunderbird_button->setChecked(true);
ui->virtmanager_button->setChecked(true);
ui->krita_button->setChecked(true);
ui->element_button->setEnabled(false);
ui->thunderbird_button->setEnabled(false);
ui->virtmanager_button->setEnabled(false);
ui->krita_button->setEnabled(false);
}
});
// Disable many bits of functionality if network is not enabled
Calamares::Network::Manager network;
if (!network.hasInternet()) {
ui->full_button->setVisible(false);
ui->full_text->setVisible(false);
ui->left_spacer->changeSize(20, 20, QSizePolicy::Fixed, QSizePolicy::Fixed);
ui->right_spacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed);
ui->additional_label->setVisible(false);
ui->updates_button->setVisible(false);
ui->updates_text->setVisible(false);
ui->extraparty_scroll->setVisible(false);
ui->extraparty_text->setVisible(false);
ui->mandatory_warning_label->setVisible(false);
ui->element_button->setChecked(false);
ui->thunderbird_button->setChecked(false);
ui->virtmanager_button->setChecked(false);
ui->krita_button->setChecked(false);
ui->element_button->setEnabled(false);
ui->thunderbird_button->setEnabled(false);
ui->virtmanager_button->setEnabled(false);
ui->krita_button->setEnabled(false);
}
// Thunderbird exists on Kubuntu already
if (Calamares::Branding::instance()->componentName() == "kubuntu") {
ui->thunderbird_button->setChecked(false);
ui->thunderbird_button->setEnabled(false);
ui->thunderbird_button->setVisible(false);
ui->thunderbird_text->setVisible(false);
ui->thunderbird_spacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed);
ui->thunderbird_spacer->invalidate();
}
// Connect the storage items
/// Full/Normal/Minimal
connect(ui->minimal_button, &QRadioButton::toggled, this, &PackageSelectViewStep::updatePackageSelections);
connect(ui->normal_button, &QRadioButton::toggled, this, &PackageSelectViewStep::updatePackageSelections);
connect(ui->full_button, &QRadioButton::toggled, this, &PackageSelectViewStep::updatePackageSelections);
/// Additional Options
connect(ui->updates_button, &QRadioButton::toggled, this, &PackageSelectViewStep::updatePackageSelections);
/// Third-Party Apps
connect(ui->element_button, &QCheckBox::toggled, this, &PackageSelectViewStep::updatePackageSelections);
connect(ui->thunderbird_button, &QCheckBox::toggled, this, &PackageSelectViewStep::updatePackageSelections);
connect(ui->virtmanager_button, &QCheckBox::toggled, this, &PackageSelectViewStep::updatePackageSelections);
connect(ui->krita_button, &QCheckBox::toggled, this, &PackageSelectViewStep::updatePackageSelections);
}
void
PackageSelectViewStep::onLeave()
{
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
QVariantMap config;
for (auto i = m_packageSelections.begin(); i != m_packageSelections.end(); ++i) {
if (exists_and_true(i.key())) {
config.insert(i.key(), i.value());
}
}
gs->insert("packages", config);
}
void PackageSelectViewStep::updatePackageSelections(bool checked) {
QObject* sender_obj = sender();
if (!sender_obj) return;
QString key = sender_obj->objectName();
// snake_case -> camelCase
QStringList parts = key.split("_", Qt::SkipEmptyParts);
for (int i = 1; i < parts.size(); ++i) {
parts[i][0] = parts[i][0].toUpper();
}
QString camelCaseKey = parts.join("");
m_packageSelections[camelCaseKey] = checked;
}
CALAMARES_PLUGIN_FACTORY_DEFINITION( PackageSelectViewStepFactory, registerPlugin< PackageSelectViewStep >(); )

@ -0,0 +1,52 @@
#ifndef PACKAGESELECTVIEWSTEP_H
#define PACKAGESELECTVIEWSTEP_H
#include <QFile>
#include <QTextStream>
#include "DllMacro.h"
#include "utils/PluginFactory.h"
#include "viewpages/ViewStep.h"
#include "ui_pkgselect.h"
namespace Ui {
class pkgselect;
}
class PLUGINDLLEXPORT PackageSelectViewStep : public Calamares::ViewStep
{
Q_OBJECT
public:
explicit PackageSelectViewStep( QObject* parent = nullptr );
~PackageSelectViewStep() override;
QString prettyName() const override;
QWidget* widget() override;
Calamares::JobList jobs() const override;
bool isNextEnabled() const override;
bool isBackEnabled() const override;
bool isAtBeginning() const override;
bool isAtEnd() const override;
void onActivate() override;
void onLeave() override;
QVariantMap packageSelections() const { return m_packageSelections; }
void updatePackageSelections(bool checked);
signals:
void packageSelectionsChanged();
private:
QVariantMap m_packageSelections;
Ui::pkgselect *ui;
QWidget* m_widget;
bool exists_and_true(const QString& key) const;
};
CALAMARES_PLUGIN_FACTORY_DECLARATION( PackageSelectViewStepFactory )
#endif

@ -0,0 +1,594 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>pkgselect</class>
<widget class="QWidget" name="pkgselect">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>830</width>
<height>943</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<property name="styleSheet">
<string notr="true">QRadioButton {
spacing: 13px;
}
QCheckBox {
spacing: 13px;
}
QLabel {
padding-left: 33px;
padding-right: 33px;
}</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="17" column="1">
<spacer name="verticalSpacer_11">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>3</height>
</size>
</property>
</spacer>
</item>
<item row="9" column="1">
<widget class="QRadioButton" name="minimal_button">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>21</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Minimal Installation</string>
</property>
</widget>
</item>
<item row="16" column="1">
<widget class="QLabel" name="extraparty_text">
<property name="font">
<font>
<pointsize>18</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">padding-left: 0px; padding-right: 0px;</string>
</property>
<property name="text">
<string>Install additional third-party packages</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QRadioButton" name="full_button">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>21</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Full Installation</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QLabel" name="minimal_text">
<property name="font">
<font>
<pointsize>10</pointsize>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>Only the desktop environment</string>
</property>
</widget>
</item>
<item row="0" column="0">
<spacer name="left_spacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="2">
<spacer name="right_spacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="20" column="1">
<spacer name="pushup">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="12" column="1">
<widget class="QLabel" name="additional_label">
<property name="font">
<font>
<pointsize>18</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">padding-left: 0px; padding-right: 0px;</string>
</property>
<property name="text">
<string>Additional Options</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="full_text">
<property name="font">
<font>
<pointsize>10</pointsize>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>All applications in the Normal Installation, and all extra third-party packages listed below</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
<item row="8" column="1">
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="15" column="1">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="13" column="1">
<widget class="QCheckBox" name="updates_button">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>21</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Download and install updates following installation</string>
</property>
</widget>
</item>
<item row="14" column="1">
<widget class="QLabel" name="updates_text">
<property name="font">
<font>
<pointsize>10</pointsize>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>This saves time after installation, and keeps your system secure</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QLabel" name="normal_text">
<property name="font">
<font>
<pointsize>10</pointsize>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>Web browser, utilities, office software, games, and media players</string>
</property>
</widget>
</item>
<item row="11" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="6" column="1">
<widget class="QRadioButton" name="normal_button">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>21</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Normal Installation</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="19" column="0" colspan="3">
<widget class="QLabel" name="mandatory_warning_label">
<property name="font">
<font>
<pointsize>11</pointsize>
<weight>75</weight>
<italic>false</italic>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Note: Ubuntu and flavors are NOT responsible for third-party software installed from this list.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="apps_label">
<property name="font">
<font>
<pointsize>18</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">padding-left: 0px; padding-right: 0px;</string>
</property>
<property name="text">
<string>Installation Mode</string>
</property>
</widget>
</item>
<item row="18" column="1">
<widget class="QScrollArea" name="extraparty_scroll">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="extraparty_scrollhouse">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>762</width>
<height>281</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="8" column="1">
<widget class="QCheckBox" name="virtmanager_button">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>21</height>
</size>
</property>
<property name="text">
<string>Virtual Machine Manager</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="element_button">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>21</height>
</size>
</property>
<property name="text">
<string>Element</string>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QCheckBox" name="krita_button">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>21</height>
</size>
</property>
<property name="text">
<string>Krita</string>
</property>
</widget>
</item>
<item row="6" column="1">
<spacer name="thunderbird_spacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="1">
<widget class="QLabel" name="element_text">
<property name="font">
<font>
<pointsize>10</pointsize>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>Matrix-based end-to-end encrypted messenger and secure collaboration app</string>
</property>
</widget>
</item>
<item row="10" column="1">
<spacer name="verticalSpacer_10">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item row="9" column="1">
<widget class="QLabel" name="virtmanager_text">
<property name="font">
<font>
<pointsize>10</pointsize>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>Desktop user interface for managing virtual machines through libvirt</string>
</property>
</widget>
</item>
<item row="0" column="1">
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>1</width>
<height>5</height>
</size>
</property>
</spacer>
</item>
<item row="5" column="1">
<widget class="QLabel" name="thunderbird_text">
<property name="font">
<font>
<pointsize>10</pointsize>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>Email, newsfeed, chat, and calendaring client</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QCheckBox" name="thunderbird_button">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>21</height>
</size>
</property>
<property name="text">
<string>Thunderbird</string>
</property>
</widget>
</item>
<item row="3" column="1">
<spacer name="verticalSpacer_8">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item row="13" column="1">
<spacer name="pushup_tiny">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>6</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<spacer name="horizontalSpacer_12">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>5</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="12" column="1">
<widget class="QLabel" name="krita_text">
<property name="font">
<font>
<pointsize>10</pointsize>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>Graphics editor designed primarily for digital art and 2D animation</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item row="4" column="1">
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

@ -0,0 +1,5 @@
---
dontChroot: true
timeout: 30
script:
- /usr/libexec/fixconkeys-part1 ${ROOT}

@ -0,0 +1,5 @@
---
dontChroot: false
timeout: 10800
script:
- /usr/libexec/fixconkeys-part2

@ -0,0 +1,4 @@
---
# Setting emergency to true will make it so this module is still run
# when a prior module fails
emergency: true

@ -0,0 +1,5 @@
module snap-seed-glue
go 1.22.1
require github.com/snapcore/snapd v0.0.0-20240328101726-fdc222fc37a0

@ -0,0 +1,289 @@
package main
// Copyright (C) 2024 Simon Quigley <tsimonq2@ubuntu.com>
//
// This program 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.
//
// This program 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.
import (
"flag"
"fmt"
"io/ioutil"
"log"
"os"
"os/exec"
"path/filepath"
"strings"
"github.com/snapcore/snapd/snap"
"github.com/snapcore/snapd/interfaces/builtin"
"gopkg.in/yaml.v2"
)
type seed struct {
Snaps []struct {
Name string `yaml:"name"`
Channel string `yaml:"channel"`
File string `yaml:"file"`
} `yaml:"snaps"`
}
func main() {
snap.SanitizePlugsSlots = builtin.SanitizePlugsSlots
var seed_directory string
flag.StringVar(&seed_directory, "seed", "/var/lib/snapd/seed", "Specify the seed directory")
flag.Parse()
snap_set := make(map[string]bool)
snaps_dir := filepath.Join(seed_directory, "snaps")
assertions_dir := filepath.Join(seed_directory, "assertions")
seed_yaml := filepath.Join(seed_directory, "seed.yaml")
ensure_seed_yaml(seed_yaml)
existing_snaps_in_yaml := load_existing_snaps(seed_yaml)
for _, snap_info := range flag.Args() {
parts := strings.SplitN(snap_info, "=", 2)
snap_name := parts[0]
channel := "stable" // Default to stable if no channel is specified
if len(parts) == 2 {
channel = parts[1]
}
process_snap_with_prereqs(snap_name, channel, &snap_set, snaps_dir, assertions_dir, seed_yaml, existing_snaps_in_yaml)
}
essentialSnaps := []string{"snapd", "bare"}
for _, snapName := range essentialSnaps {
if !existing_snaps_in_yaml[snapName] {
process_snap_with_prereqs(snapName, "stable", &snap_set, snaps_dir, assertions_dir, seed_yaml, existing_snaps_in_yaml)
}
}
update_seed_yaml(snaps_dir, seed_yaml, snap_set, existing_snaps_in_yaml)
remove_state_json(filepath.Join(seed_directory, "..", "state.json"))
ensure_assertions(assertions_dir)
validate_seed(seed_yaml)
}
func ensure_seed_yaml(seed_yaml string) {
if _, err := os.Stat(seed_yaml); os.IsNotExist(err) {
file, err := os.Create(seed_yaml)
if err != nil {
log.Fatalf("Failed to create seed.yaml: %v", err)
}
defer file.Close()
file.WriteString("snaps:\n")
}
}
func load_existing_snaps(seed_yaml string) map[string]bool {
file, err := ioutil.ReadFile(seed_yaml)
if err != nil {
log.Fatalf("Failed to read seed.yaml: %v", err)
}
var seed_data seed
if err := yaml.Unmarshal(file, &seed_data); err != nil {
log.Fatalf("Failed to parse seed.yaml: %v", err)
}
existing := make(map[string]bool)
for _, snap := range seed_data.Snaps {
existing[snap.Name] = true
}
return existing
}
func update_seed_yaml(snaps_dir, seed_yaml string, snap_set map[string]bool, existing_snaps map[string]bool) {
seed_data := load_seed_data(seed_yaml)
for snap_name := range snap_set {
if !existing_snaps[snap_name] {
snap_files, err := filepath.Glob(filepath.Join(snaps_dir, fmt.Sprintf("%s_*.snap", snap_name)))
if err != nil || len(snap_files) == 0 {
log.Printf("No snap file found for %s", snap_name)
return
}
snap_file := filepath.Base(snap_files[0])
log.Printf(snap_file)
// FIXME: should put the real name of the channel in here
seed_data.Snaps = append(seed_data.Snaps, struct {
Name string `yaml:"name"`
Channel string `yaml:"channel"`
File string `yaml:"file"`
}{snap_name, "latest/stable", snap_file})
}
}
// Marshal to YAML and write back to file
data, err := yaml.Marshal(&seed_data)
if err != nil {
log.Fatalf("Failed to marshal seed data to YAML: %v", err)
}
if err := ioutil.WriteFile(seed_yaml, data, 0644); err != nil {
log.Fatalf("Failed to write updated seed.yaml: %v", err)
}
}
func load_seed_data(seed_yaml string) seed {
file, err := ioutil.ReadFile(seed_yaml)
if err != nil {
log.Fatalf("Failed to read seed.yaml: %v", err)
}
var seed_data seed
if err := yaml.Unmarshal(file, &seed_data); err != nil {
log.Fatalf("Failed to parse seed.yaml: %v", err)
}
return seed_data
}
func remove_state_json(state_json_path string) {
if _, err := os.Stat(state_json_path); err == nil {
os.Remove(state_json_path)
}
}
func validate_seed(seed_yaml string) {
cmd := exec.Command("snap", "debug", "validate-seed", seed_yaml)
if err := cmd.Run(); err != nil {
log.Printf("Error validating seed: %v", err)
}
}
func process_snap_with_prereqs(snap_name, channel string, snap_set *map[string]bool, snaps_dir, assertions_dir, seed_yaml string, existing_snaps_in_yaml map[string]bool) {
if (*snap_set)[snap_name] {
return
}
// Download the snap if not already processed or listed in seed.yaml
if !existing_snaps_in_yaml[snap_name] {
cmd := exec.Command("snap", "download", snap_name, "--channel="+channel, "--target-directory="+snaps_dir)
if err := cmd.Run(); err != nil {
log.Printf("Error downloading snap %s from channel %s: %v", snap_name, channel, err)
return
}
}
snap_files, err := filepath.Glob(filepath.Join(snaps_dir, fmt.Sprintf("%s_*.snap", snap_name)))
if err != nil || len(snap_files) == 0 {
log.Printf("No snap file found for %s in channel %s", snap_name, channel)
return
}
snap_file := snap_files[0]
cmd := exec.Command("unsquashfs", "-n", "-d", filepath.Join(snaps_dir, fmt.Sprintf("%s_meta", snap_name)), snap_file, "meta/snap.yaml")
if err := cmd.Run(); err != nil {
log.Printf("Error extracting meta/snap.yaml from snap %s: %v", snap_name, err)
return
}
yaml_data, err := ioutil.ReadFile(filepath.Join(snaps_dir, fmt.Sprintf("%s_meta/meta/snap.yaml", snap_name)))
if err != nil {
log.Printf("Error reading snap.yaml file for %s: %v", snap_name, err)
return
}
info, err := snap.InfoFromSnapYaml(yaml_data)
if err != nil {
log.Printf("Error parsing snap.yaml data for %s: %v", snap_name, err)
return
}
(*snap_set)[snap_name] = true
tracker := snap.SimplePrereqTracker{}
missing_provider_content_tags := tracker.MissingProviderContentTags(info, nil)
for provider_snap := range missing_provider_content_tags {
if !(*snap_set)[provider_snap] {
process_snap_with_prereqs(provider_snap, "stable", snap_set, snaps_dir, assertions_dir, seed_yaml, existing_snaps_in_yaml)
}
}
if info.Base != "" && !(*snap_set)[info.Base] {
process_snap_with_prereqs(info.Base, "stable", snap_set, snaps_dir, assertions_dir, seed_yaml, existing_snaps_in_yaml)
}
assert_files, err := filepath.Glob(filepath.Join(snaps_dir, "*.assert"))
for _, file := range assert_files {
target_path := filepath.Join(assertions_dir, filepath.Base(file))
err := os.Rename(file, target_path)
if err != nil {
log.Printf("Failed to move %s to %s: %v", file, assertions_dir, err)
}
}
os.RemoveAll(filepath.Join(snaps_dir, fmt.Sprintf("%s_meta", snap_name)))
}
func ensure_assertions(assertions_dir string) {
model := "generic-classic"
brand := "generic"
series := "16"
model_assertion_path := filepath.Join(assertions_dir, "model")
account_key_assertion_path := filepath.Join(assertions_dir, "account-key")
account_assertion_path := filepath.Join(assertions_dir, "account")
// Check and generate model assertion
if _, err := os.Stat(model_assertion_path); os.IsNotExist(err) {
output, err := exec.Command("snap", "known", "--remote", "model", "series="+series, "model="+model, "brand-id="+brand).CombinedOutput()
if err != nil {
log.Fatalf("Failed to fetch model assertion: %v, Output: %s", err, string(output))
}
ioutil.WriteFile(model_assertion_path, output, 0644)
}
// Generate account-key assertion if not exists
if _, err := os.Stat(account_key_assertion_path); os.IsNotExist(err) {
signKeySha3 := grep_pattern(model_assertion_path, "sign-key-sha3-384: ")
output, err := exec.Command("snap", "known", "--remote", "account-key", "public-key-sha3-384="+signKeySha3).CombinedOutput()
if err != nil {
log.Fatalf("Failed to fetch account-key assertion: %v, Output: %s", err, string(output))
}
ioutil.WriteFile(account_key_assertion_path, output, 0644)
}
// Generate account assertion if not exists
if _, err := os.Stat(account_assertion_path); os.IsNotExist(err) {
accountId := grep_pattern(account_key_assertion_path, "account-id: ")
output, err := exec.Command("snap", "known", "--remote", "account", "account-id="+accountId).CombinedOutput()
if err != nil {
log.Fatalf("Failed to fetch account assertion: %v, Output: %s", err, string(output))
}
ioutil.WriteFile(account_assertion_path, output, 0644)
}
}
func grep_pattern(filePath, pattern string) string {
content, err := ioutil.ReadFile(filePath)
if err != nil {
log.Fatalf("Failed to read from file %s: %v", filePath, err)
}
lines := strings.Split(string(content), "\n")
for _, line := range lines {
if strings.Contains(line, pattern) {
parts := strings.SplitN(line, ":", 2)
if len(parts) == 2 {
return strings.TrimSpace(parts[1])
}
}
}
log.Fatalf("Pattern %s not found in file %s", pattern, filePath)
return ""
}

@ -0,0 +1,10 @@
kubuntu/branding/ etc/calamares/
kubuntu/calamares-launch-normal usr/bin/
kubuntu/calamares-logs-helper usr/bin/
kubuntu/kubuntu-calamares.desktop usr/share/applications/
kubuntu/modules/ etc/calamares/
kubuntu/oem/calamares-launch-oem usr/bin/
kubuntu/oem/calamares-launch-oem.desktop usr/share/applications/
kubuntu/oem/calamares-oemprep.sh usr/libexec/
kubuntu/oemconfig.tar.gz etc/calamares/
kubuntu/settings.conf etc/calamares/

@ -0,0 +1,7 @@
# sudo will always be present in the target system
calamares-settings-kubuntu: desktop-command-not-in-package sudo *
# there will be no manpage for any of this in the foreseeable future
calamares-settings-kubuntu: no-manual-page *
# We're just extracting a log file and preserving it for the user to look at
# after the installation, this is normal.
calamares-settings-kubuntu: uses-dpkg-database-directly [usr/bin/calamares-logs-helper]

@ -1,5 +1,11 @@
lubuntu/branding/ etc/calamares/
lubuntu/calamares-launch-normal usr/bin/
lubuntu/calamares-logs-helper usr/bin/
lubuntu/lubuntu-calamares.desktop usr/share/applications/
lubuntu/lubuntu-installer.svg usr/share/icons/hicolor/scalable/apps/
lubuntu/modules/ etc/calamares/
lubuntu/oem/calamares-launch-oem usr/bin/
lubuntu/oem/calamares-launch-oem.desktop usr/share/applications/
lubuntu/oem/calamares-oemprep.sh usr/libexec/
lubuntu/oemconfig.tar.gz etc/calamares/
lubuntu/settings.conf etc/calamares/

@ -1,8 +1,7 @@
# The .desktop file uses pkexec to run the installer. pkexec is included in
# the system.
calamares-settings-lubuntu: desktop-command-not-in-package pkexec [usr/share/applications/lubuntu-calamares.desktop]
# there will be no manpage in the foreseeable future
calamares-settings-lubuntu: no-manual-page [usr/bin/calamares-logs-helper]
# sudo will always exist in the target system
calamares-settings-lubuntu: desktop-command-not-in-package sudo *
# there will be no manpage for any of this in the foreseeable future
calamares-settings-lubuntu: no-manual-page *
# We're just extracting a log file and preserving it for the user to look at
# after the installation, this is normal.
calamares-settings-lubuntu: uses-dpkg-database-directly [usr/bin/calamares-logs-helper]

@ -0,0 +1,4 @@
# this is an internal implementation detail, no manpage needed
calamares-settings-ubuntu-common: no-manual-page [usr/bin/calamares_snap_install]
# this is normal and not a problem
calamares-settings-ubuntu-common: executable-in-usr-lib [usr/lib/x86_64-linux-gnu/calamares/modules/automirror/main.py]

@ -0,0 +1,12 @@
ubuntuunity/branding/ etc/calamares/
ubuntuunity/calamares-launch-normal usr/bin/
ubuntuunity/calamares-logs-helper usr/bin/
ubuntuunity/kvantum.kvconfig etc/xdg/Kvantum/
ubuntuunity/modules/ etc/calamares/
ubuntuunity/oem/calamares-launch-oem usr/bin/
ubuntuunity/oem/calamares-launch-oem.desktop usr/share/applications/
ubuntuunity/oem/calamares-oemprep.sh usr/libexec/
ubuntuunity/oemconfig.tar.gz etc/calamares/
ubuntuunity/settings.conf etc/calamares/
ubuntuunity/ubuntu-unity-calamares.desktop usr/share/applications/
ubuntuunity/ubuntu-unity-installer.svg usr/share/icons/hicolor/scalable/apps/

@ -0,0 +1,7 @@
# sudo will always be present in the target system
calamares-settings-ubuntu-unity: desktop-command-not-in-package sudo *
# there will be no manpage for any of this in the foreseeable future
calamares-settings-ubuntu-unity: no-manual-page *
# We're just extracting a log file and preserving it for the user to look at
# after the installation, this is normal.
calamares-settings-ubuntu-unity: uses-dpkg-database-directly [usr/bin/calamares-logs-helper]

@ -1,7 +0,0 @@
ubuntustudio/branding/ etc/calamares/
ubuntustudio/calamares-logs-helper usr/bin/
ubuntustudio/calamaresrc etc/xdg
ubuntustudio/kded_device_automounterrc etc/xdg
ubuntustudio/modules/ etc/calamares/
ubuntustudio/settings.conf etc/calamares/
ubuntustudio/ubuntustudio-calamares.desktop usr/share/applications/

@ -1,8 +0,0 @@
# The .desktop file uses bash to run firefox as the local
# user. bash is included in the system.
calamares-settings-ubuntustudio: desktop-command-not-in-package bash [usr/share/applications/ubuntustudio-calamares.desktop]
# there will be no manpage in the foreseeable future
calamares-settings-ubuntustudio: no-manual-page [usr/bin/calamares-logs-helper]
# We're just extracting a log file and preserving it for the user to look at
# after the installation, this is normal.
calamares-settings-ubuntustudio: uses-dpkg-database-directly [usr/bin/calamares-logs-helper]

349
debian/changelog vendored

@ -1,3 +1,352 @@
calamares-settings-ubuntu (1:24.04.39) noble; urgency=medium
* Fix permissions on /home/oem when doing OEM installations. (LP: #2063403)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 25 Apr 2024 00:01:37 -0500
calamares-settings-ubuntu (1:24.04.38) noble; urgency=high
* Do not remove zram-config on Ubuntu Unity, it does not exist in the first
place (LP: #2063108).
-- Simon Quigley <tsimonq2@ubuntu.com> Mon, 22 Apr 2024 07:10:28 -0500
calamares-settings-ubuntu (1:24.04.37) noble; urgency=medium
* Correctly lengthen timeouts for network and initramfs package commands.
(LP: #2060429)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Fri, 19 Apr 2024 18:52:09 -0500
calamares-settings-ubuntu (1:24.04.36) noble; urgency=medium
* Don't show Thunderbird as an installable third-party app on Kubuntu.
(LP: #2062438)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Fri, 19 Apr 2024 17:38:06 -0500
calamares-settings-ubuntu (1:24.04.35) noble; urgency=medium
* Remove timeouts for network-related package commands. (LP: #2062106)
* Remove timeouts for update-initramfs. (LP: #2060429)
-- Walter Lapchynski <wxl@ubuntu.com> Fri, 19 Apr 2024 21:23:54 +0000
calamares-settings-ubuntu (1:24.04.34) noble; urgency=medium
* Add icon on Desktop to finish OEM install. (LP: #2060928)
-- Walter Lapchynski <wxl@ubuntu.com> Fri, 19 Apr 2024 19:18:59 +0000
calamares-settings-ubuntu (1:24.04.33) noble; urgency=medium
* Fix slideshow image sizes for Kubuntu.
* Fix the size of the logo in the upper-left corner for Kubuntu.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 18 Apr 2024 19:28:02 -0500
calamares-settings-ubuntu (1:24.04.32) noble; urgency=medium
* Remove the third-party driver installation checkbox from pkgselect, its
functionality was not implemented.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Wed, 17 Apr 2024 23:18:12 -0500
calamares-settings-ubuntu (1:24.04.31) noble; urgency=medium
* Add Kubuntu branding. (LP: #2060845)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Tue, 16 Apr 2024 12:57:56 -0500
calamares-settings-ubuntu (1:24.04.30) noble; urgency=medium
* Don't keep lubuntu-snap-installation-monitor installed on the minimal
option (LP: #2061318).
-- Simon Quigley <tsimonq2@ubuntu.com> Tue, 16 Apr 2024 10:24:00 -0500
calamares-settings-ubuntu (1:24.04.29) noble; urgency=medium
[ Aaron Rainbolt ]
* Change Kubuntu's Calamares sidebar color.
[ Walter Lapchynski ]
* Remove after_bootloader contextual process. (LP: #2061681)
-- Walter Lapchynski <wxl@ubuntu.com> Tue, 16 Apr 2024 01:10:47 +0000
calamares-settings-ubuntu (1:24.04.28) noble; urgency=medium
* Run apt updates before installing packages. (LP: #2061150)
-- Walter Lapchynski <wxl@ubuntu.com> Sat, 13 Apr 2024 00:44:32 +0000
calamares-settings-ubuntu (1:24.04.27) noble; urgency=medium
* Run the pkgselect contextualprocesses after packages in Kubuntu and Ubuntu
Unity (LP: #2060879)
-- Simon Quigley <tsimonq2@ubuntu.com> Thu, 11 Apr 2024 02:49:44 -0500
calamares-settings-ubuntu (1:24.04.26) noble; urgency=medium
* Make the pkgselect module actually work on Kubuntu and Ubuntu Unity.
(LP: #2060879)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Wed, 10 Apr 2024 16:16:21 -0500
calamares-settings-ubuntu (1:24.04.25) noble; urgency=medium
* Be completely sure apt will not try to prompt the user.
* Bump the timeout limits to 15 minutes for both pkgselect
contextualprocess modules.
* Allow fixconkeys-part2 a 5 minute window to run, which should be
enough to run update-initramfs (LP: #2060429).
* Adjust spacers accordingly on no network.
-- Simon Quigley <tsimonq2@ubuntu.com> Tue, 09 Apr 2024 03:15:53 -0500
calamares-settings-ubuntu (1:24.04.24) noble; urgency=medium
* Don't try to remove the nonexistant zram-config package from a Kubuntu
installation.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Mon, 08 Apr 2024 21:07:08 -0500
calamares-settings-ubuntu (1:24.04.23) noble; urgency=medium
* Set GOCACHE to stay within the build directory
-- Simon Chopin <schopin@ubuntu.com> Wed, 03 Apr 2024 19:40:50 +0200
calamares-settings-ubuntu (1:24.04.22) noble; urgency=medium
* Add missing build dependency on golang-go.
-- Simon Quigley <tsimonq2@ubuntu.com> Mon, 01 Apr 2024 15:28:24 -0500
calamares-settings-ubuntu (1:24.04.21) noble; urgency=medium
[ Simon Quigley ]
* Revamp pkgselect and enable it for everyone (LP: #2056061).
* Wraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaap.
* No-network UX improvements for pkgselect (LP: #2048727).
[ Aaron Rainbolt ]
* Don't try to start Unity after the OEM environment exits on Ubuntu Unity,
this has to be done by logging in via LightDM.
* Fix a couple of goofs with post-install package purging.
[ Walter Lapchynski ]
* Make links work. (LP: #1981473)
-- Simon Quigley <tsimonq2@ubuntu.com> Thu, 28 Mar 2024 23:30:34 -0500
calamares-settings-ubuntu (1:24.04.20) noble; urgency=medium
* Fix LUKS passphrase unlocker for non-US keyboard layouts.
* Disable pkgselect module on Kubuntu, it's not ready for use and wasn't
intentionally enabled.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 21 Mar 2024 13:32:53 -0500
calamares-settings-ubuntu (1:24.04.19) noble; urgency=medium
* Add Ubuntu Unity configuration. (LP: #2055799)
* Disable GeoIP in a couple missed places.
* Don't tell the user that they've disabled OEM configuration mode when they
chose to not disable it.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Sun, 17 Mar 2024 20:14:00 +0000
calamares-settings-ubuntu (1:24.04.18) noble; urgency=medium
* GeoIP in welcome module disabled.
-- Walter Lapchynski <wxl@ubuntu.com> Wed, 13 Mar 2024 18:16:06 +0000
calamares-settings-ubuntu (1:24.04.17) noble; urgency=medium
[ Neal Gompa ]
* debian/control: Define the flavor packages as swappable packages
[ Aaron Rainbolt ]
* Wipe Ubuntu Studio's configuration while preserving branding, Studio now
uses ubuntu-desktop-provision.
* Migrate from users.conf password setting "nonEmpty: true" to
"minLength: 1" to enforce non-empty passwords.
- This is not a new feature, we had non-empty passwords being enforced in
the past and didn't intentionally undo this, but Calamares dropped the
"nonEmpty: true" setting we were using.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Sun, 10 Mar 2024 18:10:03 -0500
calamares-settings-ubuntu (1:24.04.16) noble; urgency=medium
* Actually fix the autologin bug.
* Don't kick the user out of first-run configuration mode if they don't
complete it the first time around.
* Fix a bug that caused the first-run setup wizard to not run even after
instructing it to.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 15 Feb 2024 10:36:34 -0600
calamares-settings-ubuntu (1:24.04.15) noble; urgency=medium
* Add Lubuntu OEM config.
* Fix a bug that could interfere with autologin setup during first-run
configuration after an OEM install.
* Add a simple wallpaper display engine for the first-run configuration
wizard.
* Don't run kdialog as root.
* Make OEM file cleanup more thorough.
* Update copyright file.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Wed, 14 Feb 2024 12:11:34 -0600
calamares-settings-ubuntu (1:24.04.14) noble; urgency=medium
* Add Kubuntu OEM config.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Wed, 07 Feb 2024 17:02:27 -0600
calamares-settings-ubuntu (1:24.04.13) noble; urgency=medium
* Add Kubuntu config.
* Update Lubuntu config to create an unencrypted /boot partition when
encryption is enabled.
* Enforce the use of Calamares 3.3.1-0ubuntu3 or later to ensure that needed
encryption-related features are present.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Fri, 02 Feb 2024 15:32:10 -0600
calamares-settings-ubuntu (1:24.04.12) noble; urgency=medium
* Be compliant with the current state of the deb822 Ubuntu implementation
specification.
-- Simon Quigley <tsimonq2@ubuntu.com> Thu, 18 Jan 2024 16:27:43 -0600
calamares-settings-ubuntu (1:24.04.11) noble; urgency=medium
* Update welcome slide for Noble.
-- Dan Simmons <kc2bez@lubuntu.me> Sat, 30 Dec 2023 16:26:04 -0500
calamares-settings-ubuntu (1:24.04.10) noble; urgency=medium
* Use new icon for Lubuntu's installer, and improve theming.
-- Simon Quigley <tsimonq2@ubuntu.com> Sat, 23 Dec 2023 18:20:50 -0600
calamares-settings-ubuntu (1:24.04.9) noble; urgency=medium
* Remove muon from the list of packages to purge when doing a minimal
installation, it no longer exists in Noble.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Fri, 08 Dec 2023 01:16:24 +0000
calamares-settings-ubuntu (1:24.04.8) noble; urgency=medium
* Use lxqt-sudo instead of sudo, to pick up theming.
* Even if modules fail, try to perform the unmount.
* Explicitly depend on lubuntu-installer-prompt, which provides a default
workflow on the live system. Remove this package at the end of the install
as well.
* Go back to fullscreen.
* Add a full installation radio button, and disable the bottom checkboxes if
minimal install is selected.
* Update snaps used for Krita.
* Install the QML file to the proper directory.
* Add some testing code to the QML file to make it do what we'd like.
-- Simon Quigley <tsimonq2@ubuntu.com> Wed, 22 Nov 2023 18:30:39 -0600
calamares-settings-ubuntu (1:24.04.7) noble; urgency=medium
* Copy the Calamares installation log file from $HOME rather than /root.
(LP: #2044006)
* Update a Lintian override now that we're using sudo rather than pkexec to
launch Calamares in Lubuntu.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Mon, 20 Nov 2023 12:21:41 -0600
calamares-settings-ubuntu (1:24.04.6) noble; urgency=medium
* Use sudo -E to launch Calamares so that Lubuntu theming is preserved.
-- Aaron Rainbolt <arraybolt3@gmail.com> Sun, 19 Nov 2023 16:26:18 -0600
calamares-settings-ubuntu (1:24.04.5) noble; urgency=medium
* Fixed an FTBFS on !(amd64).
-- Aaron Rainbolt <arraybolt3@gmail.com> Wed, 15 Nov 2023 21:12:05 -0600
calamares-settings-ubuntu (1:24.04.4) noble; urgency=medium
* Fixed the pkgselect module's CMakeLists.txt file.
* Removed some unnecessary path segments from debian/rules.
* Unset the executable bit on files that shouldn't be executable.
* Exported the LC_ALL=C.UTF-8 and DEB_BUILD_MAINT_OPTIONS = hardening =+all
environment variables in debian/rules since we're building a shared
library in here now.
* Removed trailing whitespace from changelog.
* Added some lintian-overrides for the lack of a manual page and an
executable Python script in /usr/lib
-- Aaron Rainbolt <arraybolt3@gmail.com> Wed, 15 Nov 2023 18:33:39 -0600
calamares-settings-ubuntu (1:24.04.3) noble; urgency=medium
* Revert a failed FTBFS fix.
-- Aaron Rainbolt <arraybolt3@gmail.com> Wed, 15 Nov 2023 17:01:22 -0600
calamares-settings-ubuntu (1:24.04.2) noble; urgency=medium
* Fix FTBFS on !(amd64).
-- Simon Quigley <tsimonq2@ubuntu.com> Tue, 14 Nov 2023 14:34:09 -0600
calamares-settings-ubuntu (1:24.04.1) noble; urgency=medium
* Fix Vcs-*.
* Add a Package Select module, allowing for fine-tuned customization of the
installed system.
* Migrate to deb822 sources, removing the sources.list file pre-populated by
livecd-rootfs. Main and Universe deb sources are enabled by default,
Restricted and Multiverse are opt-in via the installer checkbox.
* Welcome to Noble!
-- Simon Quigley <tsimonq2@ubuntu.com> Fri, 20 Oct 2023 13:39:32 -0500
calamares-settings-ubuntu (1:23.10.4) mantic; urgency=medium
* Remove the Partners repository as an option.
* Use geoip.ubuntu.com by default.
-- Simon Quigley <tsimonq2@ubuntu.com> Sun, 08 Oct 2023 11:53:28 -0500
calamares-settings-ubuntu (1:23.10.3) mantic; urgency=medium
* No-change rebuild.
-- Walter Lapchynski <wxl@ubuntu.com> Sun, 10 Sep 2023 10:05:21 -0700
calamares-settings-ubuntu (1:23.10.2) mantic; urgency=medium
* Update welcome image for Mantic in Lubuntu.
-- Walter Lapchynski <wxl@ubuntu.com> Sun, 10 Sep 2023 09:03:28 -0700
calamares-settings-ubuntu (1:23.10.1) mantic; urgency=medium
* Welcome to the Mantic Minotaur!
* Add ext4, btrfs, xfs file system options on erase disk for Lubuntu.
-- Dan Simmons <kc2bez@lubuntu.me> Mon, 14 Aug 2023 20:10:37 -0400
calamares-settings-ubuntu (1:23.04.12) lunar; urgency=medium
* Don't allow the first user to be created with a blank password in either

68
debian/control vendored

@ -3,47 +3,81 @@ Section: devel
Priority: optional
Maintainer: Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
Uploaders: Simon Quigley <tsimonq2@ubuntu.com>
Build-Depends: debhelper-compat (= 13), intltool, qttools5-dev-tools
Build-Depends: calamares (>= 3.3.5),
cmake,
debhelper-compat (= 13),
extra-cmake-modules,
golang-github-snapcore-snapd-dev (>= 2.62),
golang-go,
golang-gopkg-yaml.v2-dev,
intltool,
libkf5coreaddons-dev,
libqt5svg5-dev,
libyaml-cpp-dev,
qtbase5-dev,
qtdeclarative5-dev,
qttools5-dev,
qttools5-dev-tools
Standards-Version: 4.6.2
Homepage: https://code.launchpad.net/ubuntu-calamares-settings
Vcs-Git: https://git.launchpad.net/ubuntu-calamares-settings
Vcs-Browser: https://git.launchpad.net/ubuntu-calamares-settings
Homepage: https://code.launchpad.net/~ubuntu-qt-code/+git/calamares-settings-ubuntu
Vcs-Browser: https://git.lubuntu.me/Lubuntu/calamares-settings-ubuntu/
Vcs-Git: https://git.lubuntu.me/Lubuntu/calamares-settings-ubuntu.git
Rules-Requires-Root: no
Package: calamares-settings-kubuntu
Architecture: all
Depends: calamares-settings-ubuntu-common (>= ${binary:Version}),
${misc:Depends}
Conflicts: calamares-settings-ubuntu-flavor
Provides: calamares-settings-ubuntu-flavor
Description: Kubuntu Calamares Settings and Branding
This package contains the Calamares settings and branding for Kubuntu.
As part of the branding the installer slideshow is contained within.
The settings ensure a proper Kubuntu desktop is installed with the
KDE Plasma desktop environment.
Package: calamares-settings-lubuntu
Architecture: all
Depends: calamares-settings-ubuntu-common (>= ${binary:Version}),
${misc:Depends}
Conflicts: calamares-settings-ubuntustudio
Recommends: lubuntu-installer-prompt
Conflicts: calamares-settings-ubuntu-flavor
Provides: calamares-settings-ubuntu-flavor
Description: Lubuntu Calamares Settings and Branding
This package contains the Calamares settings and branding for Lubuntu.
As part of the branding the installer slideshow is contained within.
The settings ensure a proper Lubuntu desktop is installed with the
LXQt desktop environment.
Package: calamares-settings-ubuntu-unity
Architecture: all
Depends: calamares-settings-ubuntu-common (>= ${binary:Version}),
qt5-style-kvantum,
qt5-style-kvantum-themes,
${misc:Depends}
Conflicts: calamares-settings-ubuntu-flavor
Provides: calamares-settings-ubuntu-flavor
Description: Ubuntu Unity Calamares Settings and Branding
This package contains the Calamares settings and branding for Ubuntu Unity.
As part of the branding the installer slideshow is contained within.
The settings ensure a proper Ubuntu Unity desktop is installed with the
Unity desktop environment.
Package: calamares-settings-ubuntu-common
Architecture: any
Depends: calamares (>= 3.2.14~),
cryptsetup,
kdialog,
keyutils,
python3,
python3-distro,
qml-module-qtquick-window2,
qml-module-qtquick2,
squashfs-tools,
${misc:Depends}
sudo,
${misc:Depends},
${shlibs:Depends}
Description: Common Calamares Settings
This package contains the common Calamares settings for all flavors.
There is also a automirror Python script to set sources based on
geolocation.
Package: calamares-settings-ubuntustudio
Architecture: all
Depends: calamares-settings-ubuntu-common (>= ${binary:Version}),
${misc:Depends}
Conflicts: calamares-settings-lubuntu
Description: Ubuntu Studio Calamares Settings and Branding
This package contains the Calamares settings and branding for Ubuntu Studio.
As part of the branding the installer slideshow is contained within.
The settings ensure a proper Ubuntu Studio desktop is installed with the
KDE Plasma desktop environment.

28
debian/copyright vendored

@ -2,8 +2,10 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Files: *
Copyright: 2014 Rohan Garg <shadeslayer@systems>
2017-2023 Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
2020 Ubuntu Studio Developers <ubuntu-studio-devel@lists.ubuntu.com>
2024 Kubuntu Developers <kubuntu-devel@lists.ubuntu.com>
2024 Ubuntu Unity Developers
2017-2024 Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
License: GPL-3+
This package is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -20,3 +22,27 @@ License: GPL-3+
.
On Debian systems, the complete text of the GNU General
Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
Files: ubuntuunity/ubuntu-unity-installer.svg
Copyright: 2014 Uri Herrera <uri_herrera@nitrux.in> and others
2024 Ubuntu Unity Developers
License: LGPL-3+
This package is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
.
This package 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 Lesser General Public License for more details.
.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>
.
On Debian systems, the complete text of the GNU Lesser General
Public License version 3 can be found in "/usr/share/common-licenses/LGPL-3".
Comment:
Adapted from the Breeze icon theme. See
https://develop.kde.org/frameworks/breeze-icons for more information about
Breeze icons.

38
debian/rules vendored

@ -1,16 +1,46 @@
#!/usr/bin/make -f
export LC_ALL=C.UTF-8
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
export GOPATH=/usr/share/gocode
export GO111MODULE=off
export GOCACHE=$(CURDIR)/.gocache
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
PKGSELECT = "common/modules/pkgselect"
MODULES_DIR = "debian/calamares-settings-ubuntu-common/usr/lib/$(DEB_HOST_MULTIARCH)/calamares/modules"
%:
dh $@
override_dh_auto_configure:
(cd $(PKGSELECT) && mkdir build && cd build && cmake ..)
override_dh_auto_build:
make;
(cd $(PKGSELECT)/build && $(MAKE))
(cd common/snap-seed-glue && go build -gcflags="all=-N -l" -ldflags="-compressdwarf=false" -o snap-seed-glue main.go)
override_dh_auto_clean:
dh_auto_clean
rm -rf $(GOCACHE)
override_dh_auto_install:
(cd $(PKGSELECT)/build && $(MAKE) DESTDIR=$(CURDIR)/debian/calamares-settings-ubuntu-common/ install)
override_dh_missing:
dh_missing
mkdir -pv debian/calamares-settings-ubuntu-common/usr/lib/$(DEB_HOST_MULTIARCH)/calamares/modules
cp -vr common/modules/automirror debian/calamares-settings-ubuntu-common/usr/lib/$(DEB_HOST_MULTIARCH)/calamares/modules
mkdir -pv $(MODULES_DIR)
cp -vr common/modules/automirror $(MODULES_DIR)
mkdir -pv debian/calamares-settings-ubuntu-common/etc/calamares/modules
cp -vr common/modules/*.conf debian/calamares-settings-ubuntu-common/etc/calamares/modules
chmod -R 755 debian/calamares-settings-ubuntu-common/usr/lib/
chmod 644 debian/calamares-settings-ubuntu-common/usr/lib/$(DEB_HOST_MULTIARCH)/calamares/modules/automirror/automirror.conf
chmod 644 debian/calamares-settings-ubuntu-common/usr/lib/$(DEB_HOST_MULTIARCH)/calamares/modules/automirror/module.desc
chmod 644 $(MODULES_DIR)/automirror/automirror.conf
chmod 644 $(MODULES_DIR)/automirror/module.desc
chmod 644 $(MODULES_DIR)/pkgselect/libcalamares_viewmodule_pkgselect.so
chmod 644 $(MODULES_DIR)/pkgselect/module.desc
mkdir -pv debian/calamares-settings-ubuntu-common/usr/bin/
cp -v common/snap-seed-glue/snap-seed-glue debian/calamares-settings-ubuntu-common/usr/bin/snap-seed-glue
mkdir -pv debian/calamares-settings-ubuntu-common/usr/libexec/
cp -v common/fixconkeys-part1 debian/calamares-settings-ubuntu-common/usr/libexec/fixconkeys-part1
cp -v common/fixconkeys-part2 debian/calamares-settings-ubuntu-common/usr/libexec/fixconkeys-part2

@ -0,0 +1,21 @@
# Kubuntu's Calamares Settings
This directory houses the Calamares settings for Kubuntu.
Unless otherwise stated, the contents of this directory are licensed as follows:
Copyright (C) 2018 Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
Copyright (C) 2024 Kubuntu Developers <kubuntu-devel@lists.ubuntu.com>
This program 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.
This program 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 this software. If not, see <http://www.gnu.org/licenses/>.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

@ -0,0 +1,29 @@
---
componentName: kubuntu
windowExpanding: fullscreen
strings:
productName: Kubuntu
shortProductName: Kubuntu
version: 24.04 LTS
shortVersion: noble
versionedName: Kubuntu
shortVersionedName: Kubuntu 24.04 LTS
bootloaderEntryName: Kubuntu
productUrl: https://kubuntu.org/
supportUrl: https://kubuntu.org/contact/
images:
productLogo: "logo.png"
productIcon: "icon.png"
productWelcome: "welcome.png"
slideshow: "show.qml"
slideshowAPI: 1
style:
SidebarBackground: "#6C7B93"
SidebarText: "#FFFFFF"
SidebarTextCurrent: "#0068C8"

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@ -0,0 +1,165 @@
import QtQuick 2.0;
import calamares.slideshow 1.0;
Presentation
{
id: presentation
Timer {
interval: 15000
running: true
repeat: true
onTriggered: presentation.goToNextSlide()
}
Slide {
Image {
id: image1
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "01_Easy_Install.png"
}
}
Slide {
Image {
id: image2
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "02_Customizable_Desktop.png"
}
}
Slide {
Image {
id: image3
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "03_Built-in_Applications.png"
}
}
Slide {
Image {
id: image4
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "04_Performant.png"
}
}
Slide {
Image {
id: image5
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "05_Secure_and_Private.png"
}
}
Slide {
Image {
id: image6
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "06_Community_Support.png"
}
}
Slide {
Image {
id: image7
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "07_Free_and_Open_Source.png"
}
}
Slide {
Image {
id: image8
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "08_Software_Compatibility.png"
}
}
Slide {
Image {
id: image9
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "09_Beautiful_Aesthetics.png"
}
}
Slide {
Image {
id: image10
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "10_Kubuntu_Focus.png"
}
}
Slide {
Image {
id: image11
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "11_Testimonials_of_Success.png"
}
}
Slide {
Image {
id: image12
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "12_Get_Involved.png"
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

@ -0,0 +1,16 @@
#!/bin/bash
#
# Launch Calamares normally.
if [ -e '/etc/calamares/OEM_MODE_ACTIVATED' ]; then
msg="$(cat <<EOL
The installer was previously run in OEM mode. Please reboot to reset the
configuration and try again.
EOL
)";
kdialog --msgbox "${msg}";
exit 1;
fi
export BROWSER='sudo -H -u kubuntu firefox'
calamares -D8;

@ -6,7 +6,7 @@ root=$1
install_dir=$root/var/log/installer
[ -d $install_dir ] || mkdir -p $install_dir
cp /home/ubuntu-studio/.cache/calamares/session.log $install_dir/debug
cp $HOME/.cache/calamares/session.log $install_dir/debug
cp /cdrom/.disk/info $install_dir/media-info
cp /var/log/casper.log $install_dir/casper.log

@ -1,11 +1,11 @@
[Desktop Entry]
Type=Application
Version=1.0
_Name=Install Ubuntu Studio 23.04
_GenericName=Install Ubuntu Studio
Exec=bash -c "export BROWSER='sudo -H -u ubuntu-studio firefox'; sudo -E calamares"
_Name=Install Kubuntu 24.04 LTS
_GenericName=Install Kubuntu
Exec=sudo -E /usr/bin/calamares-launch-normal
_Comment=Calamares — System Installer
Icon=calamares
Icon=system-software-install
Terminal=false
StartupNotify=true
Categories=Qt;System;

@ -0,0 +1,6 @@
---
baseUrl: archive.ubuntu.com
distribution: Kubuntu
geoip:
style: "xml"
url: "https://geoip.ubuntu.com/lookup"

@ -2,8 +2,8 @@ displaymanagers:
- sddm
defaultDesktopEnvironment:
executable: "startplasma-x11"
desktopFile: "Ubuntu Studio"
executable: "startkde"
desktopFile: "plasma"
basicSetup: false
sysconfigSetup: false

@ -0,0 +1,2 @@
---
batch-identifier: kubuntu-2404-${DATE}

@ -0,0 +1,16 @@
update_db: true
backend: apt
operations:
- remove:
- "^live-*"
- calamares-settings-kubuntu
- calamares
- cifs-utils
- kubuntu-installer-prompt
- try_install:
- language-pack-$LOCALE
- language-pack-gnome-$LOCALE
- language-pack-kde-$LOCALE
- hunspell-$LOCALE
- libreoffice-help-$LOCALE
- libreoffice-l10n-$LOCALE

@ -0,0 +1,21 @@
efiSystemPartition: "/boot/efi"
enableLuksAutomatedPartitioning: true
luksGeneration: luks2
userSwapChoices:
- none
- file
initialSwapChoice: file
drawNestedPartitions: true
defaultFileSystemType: "ext4"
availableFileSystemTypes: ["ext4","btrfs","xfs"]
partitionLayout:
- name: "kubuntu_boot"
filesystem: ext4
noEncrypt: true
onlyPresentWithEncryption: true
mountPoint: "/boot"
size: 4G
- name: "kubuntu_2404"
filesystem: unknown
mountPoint: "/"
size: 100%

@ -0,0 +1,19 @@
---
dontChroot: false
timeout: 10800
"packages.minimalButton":
true:
- "DEBIAN_FRONTEND=noninteractive apt-get -y --purge remove kmahjongg kmines kpat ksudoku skanlite skanpage okular libreoffice* kdeconnect krdc konversation neochat elisa haruna vim snapd partitionmanager usb-creator* plasma-welcome kde-config-tablet plasma-welcome"
- "apt-get -y autoremove"
"packages.partyButton":
true:
- "DEBIAN_FRONTEND=noninteractive apt-get update"
- "DEBIAN_FRONTEND=noninteractive apt-get -y install ubuntu-restricted-addons unrar"
"packages.updatesButton":
true:
- "DEBIAN_FRONTEND=noninteractive apt-get update"
- "DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::='--force-confnew' full-upgrade"
"packages.virtmanagerButton":
true:
- "DEBIAN_FRONTEND=noninteractive apt-get update"
- "DEBIAN_FRONTEND=noninteractive apt-get -y install virt-manager"

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save