Compare commits

...

382 Commits

Author SHA1 Message Date
Aaron Rainbolt
ac31dfe838
Much fix, very fix, wow 2025-04-16 18:26:31 -05:00
68b4f76a29 Upload to Plucky 2025-04-15 22:37:08 -05:00
694b57d395 [pkgselectprocess] Ensure we have the correct apt sources when doing no network (LP: #2107287).
When doing installations without network, we need to ensure that we don't try
to perform apt operations that require internet. To do this in Plucky, we need
to temporarily copy the ubuntu.sources file to an ubuntu.sources.bak file. To
bring all of the previous commits in this upload together, we use the
bind-mounted /media/cdrom not only to install the correct GRUB packages, but
to ensure that we can still install them and any other packages on ship-live.

There has to be a better, more native way to do this. It works for now, but in
the Questing cycle, we're probably going to move some of these command-line
apt calls to be a consumer of the libapt C library (LP: #2107287).
2025-04-15 22:35:18 -05:00
3288d57e56 [pkgselectprocess] When running apt remove, use CPBE just in case. 2025-04-15 22:29:07 -05:00
6cb7d4dc52 [pkgselectprocess] Ensure hasInternet is available as a local variable, so we can use it. 2025-04-15 22:27:26 -05:00
f26f191a17 [checkpackage-backend] Pass through packages starting with "^" or containing "*"
Simply pass through packages starting with "^" or containing "*". For this
cycle we can trust our distributors won't do anything unusual, but next cycle,
we need to perform explicit validation on these items.

If you are a downstream, please be careful!
2025-04-15 22:24:59 -05:00
c93e956a5e [pkgselectprocess] Ensure apt-cdrom command outputs have their own prefix. 2025-04-15 22:22:47 -05:00
3282b74627 [pkgselectprocess] Explicitly log all apt commands in the debug logs. 2025-04-15 22:21:38 -05:00
6b2555c998 [bootloader] Simply bootloader logic to ensure we can use /cdrom elsewhere
Instead of utilizing a contextualprocess to only bind-mount /cdrom to
/media/cdrom when it's a specific type of system, simply add it to the mounts
for all flavors, and move the specific copy of the vmlinuz file to a dedicated
shellprocess module. This will be re-factored next cycle, ideally being worked
directly into a dedicated C++ module instead of several, miscellaneous shell
scripts wrapped in YAML.
2025-04-15 22:19:46 -05:00
52472914bb Add a new changelog entry 2025-04-15 22:16:11 -05:00
782b5feeee Upload to Plucky 2025-04-15 12:14:44 -05:00
133641b96c [OEM] Ensure the final desktop file completing OEM is marked as executable. 2025-04-12 22:04:30 -05:00
de24f68f2b [pkgselectprocess] Compliment the previous commit by aligning installation of Calamares
To complement the last fix, ensure that Calamares ends up on the removal list
for non-stacked squashfses if and only if OEM is disabled, and Calamares shows
up on the install list only for stacked squashfses which have OEM enabled.
This nuanced approach ensures all potential combinations have the intended
functionality.
2025-04-12 21:51:18 -05:00
5a1835af47 [pkgselect] Temporarily add Calamares and KDialog to the final install list for Lubuntu
As a temporary measure until OEM is refactored in the 25.10 cycle, we need to
ensure that Calamares and its necessary dependencies are installed on the
target, iff this is a stacked squashfs *and* it is an OEM install. We're doing
this in pkgselect instead of pkgselectprocess because pkgselect already knows
about stacked squashfses, it's what provides the final "additional install
list" to be considered by checkpackage-backend, and this is a temporary fix
anyway (LP: #2104343).
2025-04-12 21:34:04 -05:00
197d24e295 [pkgselectprocess] Do not include uninstallable virtual packages in the CPBE output
When we are creating the final list of packages to feed to "apt install,"
virtual packages which do not have a valid candidate are included in this
list, causing the installation to fail. When creating this list, use FindGrp
instead of FindPkg, and only add it to the list if there is a valid candidate.
Additionally, add these items to an unordered set, to eliminate deduplication
(LP: #2106773).

A reliable testcase for this is the libreoffice-help-is package, at least in
Plucky.
2025-04-12 21:02:06 -05:00
dc3e8a738f Upload to Plucky 2025-04-09 07:02:43 -05:00
abe9758e56 [Lubuntu] Remove the Dracut configuration so we fall back to the defaults provided by the package. This is a no-op. 2025-04-09 06:44:57 -05:00
d6ff965abb [pkgselectprocess] Disable the dpkg trigger inhibition logic this cycle. The original goal here was to de-duplicate some of the trigger processing work, but it's obvious this needs more work. It's too premature to ship right now, unfortunately. 2025-04-09 06:44:48 -05:00
71f067fbba [OEM] [Kubuntu] In stage two, ensure we use Wayland, consistent with the rest of the session scripts. 2025-04-09 05:06:25 -05:00
7ba422ace8 [OEM] Ensure OEM processing is ran, now that pkgselectprocess exists
As a temporary stop-gap until this can be completely re-written next cycle,
ensure the sed call in the Calamares OEM setup refers to pkgselectprocess,
not packages. This was preventing the OEM processing step (as opposed to just
the GUI configuration) to be missing (LP: #2104343).
2025-04-09 05:00:24 -05:00
68b993050c [pkgselectprocess] Fix usage of checkpackage-backend
If checkpackage-backend does not exist in the target system, likely due to the
use of stacked squashfses, ensure it temporarily exists so it can be used in
the install process. This fixes installation of the Virtual Machine Manager
when selected on the Customize menu (LP: #2104243).
2025-04-09 01:56:22 -05:00
0c540f933a Bump Standards-Version to 4.7.2, no changes needed. 2025-04-09 01:55:56 -05:00
39ab8da0c8 Add a new changelog entry 2025-04-09 01:55:32 -05:00
Rik Mills
af59433966 Release to plucky 2025-04-07 11:38:23 +01:00
Rik Mills
6c4331aa1b [Kubuntu] Update 10_Kubuntu_Focus installer slide. 2025-04-07 11:02:05 +01:00
Rik Mills
d3b7c6dbce [Kubuntu] Update 07_Free_and_Open_Source installer slide for plucky puffin mascot image. 2025-04-07 11:01:26 +01:00
Rik Mills
571c964174 [Kubuntu] Update welcome images for plucky 25.04 2025-04-07 11:00:43 +01:00
6633422407 [Unity] Set Kvantum theme to KvGnomeDark for calamares 2025-03-26 20:02:03 +00:00
9cca776896 [Unity] Update welcome slide for Plucky 2025-03-26 00:06:38 +00:00
ede40ead21 update partition names to match current version 2025-03-24 22:48:06 +00:00
7080285492 update OEM batch identifier to match current version 2025-03-24 07:02:41 +00:00
d5ec2191d4 [Lubuntu] update slides for current apps 2025-03-07 03:22:38 +00:00
70fb145bf7 add python3 to build-dep 2025-03-07 03:18:39 +00:00
996be3ace8 update changelog 2025-03-06 10:23:58 +00:00
067b1ef3bd [lubuntu] update welcome slides for plucky 2025-03-06 02:11:13 -08:00
0fea5bd853 Fix installation of apt packages more consistently (LP: #2089494). 2025-02-24 04:02:12 -06:00
bffde9297a Upload to Plucky 2025-02-21 13:10:45 -06:00
95b9217d82 [basicwallpaper] Bump minimum CMake version, remove .user file. 2025-02-21 13:10:36 -06:00
723b04b9f4 Remove all of Walter's trailing whitespace 2025-02-21 12:36:05 -06:00
12bb9d642c Move calamares -> libcalamares-dev for build dependencies. 2025-02-21 12:35:31 -06:00
76a66470c9 Upload to Plucky 2025-02-18 01:29:31 -06:00
4111b8a7dd Run wrap-and-sort. 2025-02-18 01:29:17 -06:00
fc7f594848 Add dh-sequence-qmldeps and ${qml6:Depends} to ensure all QML 6 runtime dependencies are properly picked up. 2025-02-18 01:28:52 -06:00
7ce9170fe4 Upload to Plucky 2025-02-16 18:05:43 -06:00
81a6192cd9 [packaging] Bump Calamares dependency to 3.3.13-0ubuntu4 for users fixes. 2025-02-16 18:05:31 -06:00
636fb54564 [users] Set allowWeakPasswords and allowWeakPasswordsDefault to false for all three flavors, but add some basic password recommendations based on NIST standards, warning if the password falls outside of that. 2025-02-16 18:05:13 -06:00
15de561729 [Lubuntu] add NIST pw requirements with user override option 2025-01-28 17:18:26 +00:00
e2073f896b Upload to Plucky 2024-11-27 23:28:36 -06:00
a54615cb83 Make forbidden_names much stronger (LP: #2088576). 2024-11-27 23:28:14 -06:00
a202c2a229 Rearrange the Lubuntu module order to account for packages with new stuff to put in the initramfs. 2024-11-25 03:02:35 -06:00
0a87303cbc Upload to Plucky 2024-11-24 20:51:44 -06:00
e24341cb0e [pkgselectprocess] Add a more robust check for apt packages when installing them (LP: #2089494). 2024-11-24 20:50:58 -06:00
9284c1f21b [pkgselectprocess] Add dpkg diversions for dracut, update-initramfs, and locale-gen. These will be called later in the process. 2024-11-24 20:24:41 -06:00
fd47fdaf63 Upload to Plucky 2024-11-23 09:16:36 -06:00
718bd8dae1 Add a Dracut config file for Lubuntu. 2024-11-22 19:56:20 -06:00
1ff64e36fb Upload to Plucky 2024-11-21 22:28:08 -06:00
0fc038aea9 Fix apt install functionality in pkgselectprocess. 2024-11-21 22:27:58 -06:00
0908c29cfb Switch Lubuntu to dracut by default. 2024-11-21 22:24:43 -06:00
d3c20f92d0 Add new global storage value for stacked squashfses and adjust config. 2024-11-20 23:59:03 -06:00
Erich Eickmeyer
9c08301c64 Update changelog, upload to plucky 2024-11-20 17:07:09 -08:00
Erich Eickmeyer
d6b8031044 Fix oem user number 2024-11-20 17:04:46 -08:00
Erich Eickmeyer
945e04f624 Let calamares-raspiprep.sh add oem user 2024-11-20 17:03:03 -08:00
Rik Mills
8710134431 Release 1:25.04.5 to plucky. 2024-11-12 18:30:59 +00:00
Rik Mills
e7c9f13d84 Fix Vcs to point to ubuntu-qt-code team LP git. 2024-11-12 18:30:08 +00:00
Rik Mills
1eaf731724 Release to 1:25.04.4 plucky 2024-11-12 17:51:25 +00:00
Rik Mills
bd8d056a28 kubuntu/modules/pkgselect.conf: Remove fcitx* from installed system. 2024-11-12 17:50:00 +00:00
Erich Eickmeyer
61488db395 Set Lubuntu raspberry pi prep script executable 2024-11-10 06:32:31 -08:00
Erich Eickmeyer
d3a1223278 Update changelog, upload to plucky 2024-11-09 16:05:08 -08:00
Erich Eickmeyer
966ac04280 Lubuntu: add raspberry pi scripting 2024-11-09 15:59:35 -08:00
e687608175 Rewrite the pkgselect module and its processing. 2024-10-29 19:23:46 -05:00
f415963f24 Port to Qt 6. 2024-10-15 23:28:32 -05:00
6f9cb0434e Welcome to Plucky Puffin! 2024-10-15 21:13:17 -05:00
Rik Mills
f744e763f7 NOCI
Release to oracular
2024-09-28 21:46:11 +01:00
Rik Mills
b9b706ce02 Update Kubuntu slideshow for 24.10 (LP: #2080925) 2024-09-28 21:30:59 +01:00
Aaron Rainbolt
949a91e6ef
Fix klünitybuntu's root partition names for Oracular 2024-09-24 22:38:42 -05:00
Aaron Rainbolt
a300fa7ba3
Get welcome images into shape for Klünitybuntu 2024-09-24 22:34:48 -05:00
Aaron Rainbolt
dcd969079c Fix pkgselect UI centering bug 2024-08-08 14:25:46 -05:00
Aaron Rainbolt
e073dc915c Release to Oracular. 2024-06-13 22:34:23 -05:00
Aaron Rainbolt
a5e93e5ff7 Fix Calamares theming during OEM install first-time user setup on Kubuntu. 2024-06-13 00:07:49 -05:00
Aaron Rainbolt
664da199e4 Fix an issue where the user made during post-OEM user setup would be given UID 1001. 2024-06-12 23:41:45 -05:00
Aaron Rainbolt
a5c2f4625e Don't recomment Internet during user setup after OEM install on Ubuntu Unity 2024-06-12 23:32:08 -05:00
Aaron Rainbolt
edc227001a Don't recommend Internet for Kubuntu user setup after OEM install 2024-06-12 23:28:46 -05:00
Aaron Rainbolt
be748bed19 Fix Kubuntu's donation and internet check links 2024-06-12 23:27:36 -05:00
0d29c20385 Welcome to Oracular Oriole! 2024-04-30 15:25:30 -05:00
6959468d0c sync with archive 2024-04-29 21:14:34 +00:00
2843b10697 Do not remove zram-config on Ubuntu Unity, it does not exist in the first place (LP: #2063108). 2024-04-22 07:10:41 -05:00
883c08282e Rearrange versions 2024-04-19 18:52:29 -05:00
4f1f85ef9c Fix timeouts. 2024-04-19 18:50:41 -05:00
5674431193 Don't show Thunderbird on Kubuntu. 2024-04-19 18:37:11 -05:00
b2766f78bc Remove timeouts re: networking/update-initramfs 2024-04-19 21:51:53 +00:00
825b0631bd Add icon on Desktop to finish OEM install. 2024-04-19 19:57:39 +00:00
1b74da2587 Fix the sizes of some Kubuntu branding things. 2024-04-18 19:33:16 -05:00
0d65dd0d20 Get rid of the third-party drivers checkbox. 2024-04-17 23:19:09 -05:00
c48927d938 Add Kubuntu branding from Rick Timmis. 2024-04-16 12:58:30 -05:00
d19ba3878c Don't keep lubuntu-snap-installation-monitor installed on the minimal option (LP: #2061318). 2024-04-16 10:27:57 -05:00
ec477ab8e9 Remove after_bootloader contextual process 2024-04-16 01:14:25 +00:00
052f17fd80 Fix sidebar color for Kubuntu. 2024-04-15 14:50:27 -05:00
b754ac1285 Run apt update before installing packages 2024-04-13 00:45:46 +00:00
303ab727b5 Run the pkgselect contextualprocesses after packages in Kubuntu and Ubuntu Unity (LP: #2060879) 2024-04-11 02:50:17 -05:00
c04b82b2fa Fix pkgselect for kubuntu and ubuntuunity 2024-04-10 16:19:55 -05:00
ba4dae0174 Upload to Noble 2024-04-09 03:16:01 -05:00
cb54b1e186 Adjust spacers accordingly on no network. 2024-04-09 03:14:56 -05:00
1299a42d37 Allow fixconkeys-part2 a 5 minute window to run, which should be enough to run update-initramfs (LP: #2060429). 2024-04-09 03:08:13 -05:00
8696f7da83 Bump the timeout limits to 15 minutes for both pkgselect contextualprocess modules. 2024-04-09 03:03:28 -05:00
fd49ee70fe Be completely sure apt will not try to prompt the user. 2024-04-09 03:01:49 -05:00
1cc0cb1be9 Don't purge zram-config from Kubuntu, it doesn't exist. 2024-04-08 21:08:35 -05:00
f9d7cd9639 Sync with archive. 2024-04-08 21:06:10 -05:00
f461a8afec Revert "Remove zram-config from package purge list for Kubuntu"
This reverts commit 7256a4013a2745daa877b6bf5a1f2013a3e8ef0a.
2024-04-08 21:02:33 -05:00
7256a4013a Remove zram-config from package purge list for Kubuntu 2024-04-08 21:00:08 -05:00
adcf60e0ee Add missing build dependency on golang-go. 2024-04-01 15:29:31 -05:00
3f2cca27e9 Ship it! 2024-03-28 23:35:33 -05:00
1cebfe1fd8 no network 2024-03-28 23:26:46 -05:00
be86ca1ec0 snap-seed-glue 2024-03-28 22:53:26 -05:00
e3d1d6fe9c Wraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaap. 2024-03-28 21:32:30 -05:00
0f213e4269 Someone (cough, me) didn't audit the package purge lists very well... 2024-03-26 15:03:36 -05:00
1c4b837add Give up on GPT-on-MBR this cycle, too dangerous 2024-03-26 14:59:21 -05:00
8b924b0eeb Adjust changelog, fix Ubuntu Unity OEM stuff 2024-03-25 15:35:44 -05:00
27850a5f22 setting BROWSER to open as live user 2024-03-25 19:29:51 +00:00
48a5f7d792 Go all-GPT, tweak changelog wording a bit 2024-03-25 13:18:09 -05:00
7bad26586e Enhance design with suggestions from Michael, make changelog more accurate 2024-03-22 01:07:13 -05:00
a6ece69a5a Ensure the items show up in globalStorage, but fail at actually using them 2024-03-21 22:44:13 -05:00
45d0d7bb62 can haz UI instead of QML pls kthxbai 2024-03-21 21:29:58 -05:00
991af8f043 Enable pkgselect for everyone. 2024-03-21 18:41:13 -05:00
ffc955d58e Fix LUKS passphrase prompt for non-US keyboard layouts, undo an accidental change to Kubuntu 2024-03-21 16:26:13 -05:00
c8f33d68f7 Add Ubuntu Unity config, fix some bugs 2024-03-17 21:07:07 -05:00
8c60c69654 GeoIP in welcome module disabled 2024-03-13 18:18:01 +00:00
3cf89c92ab Actually enforce non-empty passwords 2024-03-10 18:26:40 -05:00
5356eeab97 Good bye Ubuntu Studio, we miss you. Come back anytime! 2024-03-10 18:26:38 -05:00
4d0755e3f0 Add changelog entry 2024-03-01 13:02:33 -06:00
Neal Gompa
79aaacdae4 debian/control: Define the flavor packages as swappable packages
It is possible to define packages such that one and only one package
with a particular virtual name can be installed. Use that instead
of forcing people to enumerate conflicts for every possible flavor.
2024-03-01 13:00:29 -06:00
2e551c98e4 OEM mode bugfixes 2024-02-15 13:30:35 -06:00
03d507b751 Update copyright file 2024-02-14 18:11:19 -06:00
4629bba99c Massive OEM mode overhaul for Lubuntu, tweaks and fixes for Kubuntu OEM mode 2024-02-14 18:09:10 -06:00
f777bbfa16 Sync with archive. 2024-02-12 17:26:01 -06:00
a649612fd2 Upload to Noble. 2024-01-18 16:27:55 -06:00
c2fa148bc5 Be compliant with the current state of the deb822 Ubuntu implementation specification. 2024-01-18 16:27:33 -06:00
2389a13777 Upload to Noble. 2023-12-30 16:26:29 -05:00
c000464ad5 Update welcome slide for noble. 2023-12-30 16:25:49 -05:00
62c5dee9e7 Use new icon for Lubuntu's installer, and improve theming. 2023-12-23 18:22:20 -06:00
3e5f959765 Don't try to uninstall muon when doing a minimal install 2023-12-07 19:24:18 -06:00
efe57b6984 Sync with archive. 2023-12-07 19:15:45 -06:00
f8bf449335 Add some testing code to the QML file to make it do what we'd like. 2023-11-22 18:30:35 -06:00
61b3436848 Install the QML file to the proper directory. 2023-11-22 18:30:11 -06:00
c323c1df78 Update snaps used for Krita. 2023-11-22 16:51:52 -06:00
e54b912e24 Add a full installation radio button, and disable the bottom checkboxes if minimal install is selected. 2023-11-22 16:51:02 -06:00
52cf0936d6 Go back to fullscreen. 2023-11-22 15:49:20 -06:00
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. 2023-11-22 15:38:04 -06:00
dfe54b454d Even if modules fail, try to perform the unmount. 2023-11-22 15:35:12 -06:00
0ab235c89e Use lxqt-sudo instead of sudo, to pick up theming. 2023-11-22 15:23:07 -06:00
24a11332de Fix a Lintian override (we use sudo now, not pkexec) 2023-11-20 12:33:17 -06:00
072c709db1 Copy the Calamares log from the right place 2023-11-20 12:32:53 -06:00
14c632b6d5 Go back to using sudo -E 2023-11-19 16:27:04 -06:00
99dcbbec07 Another FTBFS fix attempt 2023-11-15 21:13:58 -06:00
11ba0bb760 Add some Lintian overrides 2023-11-15 20:36:56 -06:00
d4f3a7cbb3 Trailing whitespace trim 2023-11-15 20:24:40 -06:00
473731f547 Export a couple important env vars 2023-11-15 20:22:10 -06:00
775de27505 Unset some superfluous executable bits 2023-11-15 20:19:18 -06:00
a5a4c1bb3d /usr/lib/x86_64-linux-gnu/usr/lib/x86_64-linux-gnu is a bit repetitive, no? 2023-11-15 20:15:38 -06:00
dc16d97796 pkgselect CMakeLists.txt fixes 2023-11-15 20:14:27 -06:00
f14cf77d43 Revert "Fix FTBFS on !(amd64)."
This reverts commit 26c675cb3da5244e718aa62fa951537197c5ed7a.
2023-11-15 17:01:51 -06:00
26c675cb3d Fix FTBFS on !(amd64). 2023-11-14 14:46:04 -06:00
57efcc96f9 Upload to Noble. 2023-10-20 13:39:47 -05:00
e4fa30c3d2 Welcome to Noble! 2023-10-20 13:39:22 -05:00
d35567de95 Fix Vcs-* again. 2023-10-20 13:38:27 -05:00
1de2940b52 Some more polish around text and Ubuntu Restricted Extras etc. 2023-10-20 13:34:24 -05:00
b0c000326b Bypass the debconf prompt for msttcorefonts, which absolutely breaks some license agreement. 2023-10-16 09:49:59 -05:00
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. 2023-10-16 09:38:37 -05:00
9b0d4c4394 Completely finish the backend for pkgselect 2023-10-15 17:12:58 -05:00
b52736fc07 Finish the prototype for pkgselect, which stores the values in GlobalStorage for later usage by a contextualprocess 2023-10-15 17:12:58 -05:00
448d50f929 Start more of the backend implementation. 2023-10-15 17:12:58 -05:00
26e2cbac91 In another step forward on this ongoing project, connect the view step to a Job, which runs during the installation. 2023-10-15 17:12:58 -05:00
4b847dae69 Add the UI for Package Select, allowing for fine-tuned customization of the installed system. 2023-10-15 17:12:58 -05:00
f8e37f2a81 Fix Vcs-*. 2023-10-15 17:12:57 -05:00
f31623c3b7 Start 23.10 -> 24.04. 2023-10-15 17:12:32 -05:00
2be42e5594 Use geoip.ubuntu.com by default. 2023-10-08 12:19:55 -05:00
ad4ab2cf25 Remove the Partners repository as an option. 2023-10-08 11:53:46 -05:00
3c0ae960b7 update changelog for no-change rebuild 2023-09-10 10:06:10 -07:00
4dd1ad4040 update changelog 2023-09-10 09:35:12 -07:00
cb55a5d0bd update lubuntu welcome.png for mantic 2023-09-10 09:00:27 -07:00
7fe4cfc8f7 Upload to Mantic. 2023-08-14 20:11:16 -04:00
8c2f95c375 Add ext4, btrfs, xfs options on erase for Lubuntu. 2023-08-14 20:08:07 -04:00
4b5c7564fa Welcome to Mantic. 2023-08-14 19:54:05 -04:00
Aaron Rainbolt
7c553cade9 Don't let people make a user with a blank password 2023-04-16 17:37:42 -05:00
Aaron Rainbolt
7df7fd8d36 Fixed an invalid entry in Lubuntu's branding.desc 2023-03-20 18:01:25 -05:00
Erich Eickmeyer
9f711d1952 update changelog, upload to lunar 2023-03-20 15:54:33 -07:00
Erich Eickmeyer
87c224b44f Fix Ubuntu Studio sidebar colors 2023-03-20 11:49:03 -07:00
Erich Eickmeyer
74168eea8b Update changelog, upload to Lunar 2023-03-18 08:47:29 -07:00
Erich Eickmeyer
b3fff4b1a0 Revert "Revert "Updated ubuntustudio slideshow""
This reverts commit 046700eef59947c5aa5da722b441a41233e45f07.
2023-03-18 08:46:46 -07:00
Erich Eickmeyer
613f7dcdd9 Commit previously uncomm changes from arraybolt3 2023-03-18 08:45:06 -07:00
Erich Eickmeyer
046700eef5 Revert "Updated ubuntustudio slideshow"
This reverts commit 462809be536045f37846cb03806d46cf51e9c497.
2023-03-18 08:40:41 -07:00
Erich Eickmeyer
462809be53 Updated ubuntustudio slideshow 2023-03-18 08:19:13 -07:00
Aaron Rainbolt
d2f526a390 Updated copyright file 2023-03-15 03:55:22 -05:00
Aaron Rainbolt
2c4429ba8f Slideshow update for Lunar 2023-03-13 21:23:56 -05:00
1600aa1924 Upload to Lunar. 2023-03-07 13:16:42 -07:00
fb0c5f7457 Ensure the langpacks for GNOME and KDE applications are installed too. This increases the end user install by approximately 25 MB, and saves them the trouble of having to hunt for it later. 2023-03-07 13:16:19 -07:00
Aaron Rainbolt
65f9659b10 Run wrap-and-sort. 2023-02-28 22:35:28 -06:00
Aaron Rainbolt
571786c537 Added a Depends on python3-distro. 2023-02-28 22:35:03 -06:00
Aaron Rainbolt
b45da6833b Bumped Standards-Version. 2023-02-28 22:34:02 -06:00
Aaron Rainbolt
fbc09d2b52 Swapped in python3-distro in place of lsb_release. 2023-02-28 22:33:47 -06:00
7d65c43dc8 Fixed changelog message for version 1:22.10.12. 2022-11-23 23:07:28 -06:00
2f4a39718e Added Lintian overrides for direct dpkg database access. 2022-11-23 17:06:05 -06:00
30c1bcd002 Added Lintian overrides for missing manpages. 2022-11-23 16:55:23 -06:00
f01937c48a Added 'Rules-Requires-Root: no'. 2022-11-23 16:54:34 -06:00
85211fef0d Bumped Standards-Version to 4.6.1, no changes necessary. 2022-11-23 16:49:06 -06:00
49332f8ac7 Removed trailing whitespace from changelog. 2022-11-23 16:48:15 -06:00
14f4aba8c3 Fixed broken Lintian override in Lubuntu. 2022-11-23 16:45:19 -06:00
33563a24d2 Removed unnecessary Breaks lines. 2022-11-23 16:40:47 -06:00
58706b13ff Updated Lintian overrides. 2022-11-23 16:40:34 -06:00
9ce85e5de5 Set Lubuntu Calamares to windowed mode 2022-11-23 16:16:51 -06:00
27a43e3279 Fixed black Lubuntu sidebar. 2022-11-23 16:16:39 -06:00
Erich Eickmeyer
6d7e110c0c Allow swap for Ubuntu Studio 2022-11-15 18:12:00 -08:00
5d212e327b Welcome to the Lunar Lobster! 2022-10-28 14:36:25 -05:00
Erich Eickmeyer
c13df45a36 Fix for black Ubuntu Studio sidebar 2022-10-04 18:35:33 -07:00
Erich Eickmeyer
53302f99fd Update from diffs 2022-08-06 20:18:13 -07:00
Erich Eickmeyer
9d29b34ec0 Upload to kinetic 2022-06-28 11:49:49 -07:00
Erich Eickmeyer
1c7f9f7c57 Remove remaining duplicate files that are in common 2022-06-28 11:48:10 -07:00
Erich Eickmeyer
a45bcd47cf Upload to kinetic 2022-06-27 17:16:52 -07:00
Erich Eickmeyer
611885afc0 Remove duplicated file for common and ubuntustudio 2022-06-27 17:14:49 -07:00
989a2c1d25 Major oops in last changelog entry. 2022-06-26 22:18:07 -05:00
e2b457d54e Upload to Kinetic. 2022-06-26 22:10:45 -05:00
e46a3a2c13 Upload to kinetic. 2022-06-12 14:45:57 -04:00
07b528bb8e Fix typo in desktop file for Lubuntu. 2022-06-12 14:45:29 -04:00
ee0e98343a Upload to kinetic. 2022-06-11 16:07:20 -04:00
4d5aa76d05 Point to the right log file now that we start as root. 2022-06-11 15:58:54 -04:00
8f36ff486f Adjust lubuntu desktop file for pkexec. 2022-06-11 15:56:08 -04:00
02c9e56863 Changelog. 2022-06-11 10:07:18 -05:00
Aaron Rainbolt
8e4dd6ab5c Fixed release name 2022-06-11 10:03:33 -05:00
5af9ce3a06 Updated changelog 2022-06-11 10:03:33 -05:00
fe28365106 Modified users.conf for Calamares 3.3.0 compatibility. 2022-06-11 10:03:33 -05:00
a1e074d8c7 Changed deprecated "symlink" to "dbus-symlink". 2022-06-11 10:03:33 -05:00
6d64aa40f7 Moved config from fstab.conf to mount.conf for Calamares 3.3.0 compatibility. 2022-06-11 10:03:33 -05:00
c6932db7fa Fixed contextual and shell processes for Ubuntu Studio. 2022-06-11 10:03:33 -05:00
e69a6b1b99 Actually fixed contextual and shell processes. 2022-06-11 10:03:33 -05:00
df7f7abf4e Update settings for Calamares 3.3. 2022-06-08 18:50:39 -05:00
332dcf71a4 Changed contextual processes and shell processes as needed to support new ROOT placeholder syntax in Calamares 3.3.0. 2022-06-08 18:47:32 -05:00
9efa3a5d54 Added a warning about a potential future breaking change. 2022-06-08 18:47:32 -05:00
1c4b181833 Modified for compatibility with Calamares 3.3.0 (changed userShell option) 2022-06-08 18:47:32 -05:00
405efd5bee Change deprecated "symlink" option to "dbus-symlink". 2022-06-08 18:47:32 -05:00
a3b7c93bc5 Moved mount options from fstab.conf to mount.conf for Calamares 3.3.0 compatibility. 2022-06-08 18:47:32 -05:00
b3013a97ae Sync from archive. 2022-06-01 21:06:28 -04:00
Erich Eickmeyer
82708a6093 Use Ubuntu Studio Light colors 2022-03-24 09:52:55 -07:00
Erich Eickmeyer
621b60ad9d Fix kded automount issue 2022-03-22 16:46:15 -07:00
Erich Eickmeyer
ed3170b37f Update logo and slideshow for Ubuntu Studio 2022-03-21 08:40:54 -07:00
f25350ba7b Upload to jammy. 2021-11-14 11:24:47 -05:00
06fcece443 Bump Standards Version to 4.6.0. 2021-11-14 11:24:02 -05:00
9dc360ffc7 Update desktop file for 22.04. 2021-11-14 11:17:05 -05:00
23dde1516e Welcome to Jammy Jellyfish! 2021-11-14 10:51:52 -05:00
481f235e47 Upload to impish. 2021-09-25 07:48:10 -04:00
297c69e9f8 Update branding for proper version. 2021-09-25 07:47:12 -04:00
c745f420ed Update desktop file for proper version. 2021-09-25 07:43:18 -04:00
Erich Eickmeyer
3c1c1b2ef8 Remove zram-config from us/mod/packages.conf 2021-09-14 17:28:29 -07:00
8123671afb Upload to Hirsute. 2021-03-01 15:37:51 -05:00
f52413a647 Adjust log level for -D6. 2021-03-01 15:36:47 -05:00
6f639a0a75 Upload to Hirsute. 2021-01-03 12:39:43 -05:00
86886d8ebf Update copyright. 2021-01-03 12:38:26 -05:00
20073284a9 Add swapfile option and set as initial choice. 2021-01-03 12:09:59 -05:00
9bb6ff8ef8 Set sambashare user as a system user. 2021-01-03 11:58:52 -05:00
60626a2fae Welcome to Hirsute Hippo! 2021-01-03 11:50:17 -05:00
apt-ghetto
63230172e4 Lubuntu: Fix GeoIP parsing
Summary:
With the recent switch of the GeoIP service, the format has also changed from
JSON to XML. This was not correctly changed in the welcome module for Lubuntu.

Test Plan:
1. Start Calamares (e.g. with an IP address from Europe).
2. Check, that the language is set correctly (e.g. French when in France).

Reviewers: wxl, tsimonq2, kc2bez

Reviewed By: wxl, kc2bez

Differential Revision: https://phab.lubuntu.me/D101
2021-01-03 10:54:30 -05:00
b0ae6f47ed Upload to Groovy. 2020-10-14 18:24:02 -05:00
01c0bcafc8 Switch to Canonical's GeoIP service. 2020-10-14 18:23:36 -05:00
Erich Eickmeyer
d6982b94e5 Lowered Ubuntu Studio RAM requirements 2020-09-26 09:47:00 -07:00
Erich Eickmeyer
35f736d83f Update changelog 2020-09-19 14:57:41 -07:00
Erich Eickmeyer
66bedf2b2e Update Video and Photography slideshow bits 2020-09-19 14:55:40 -07:00
Erich Eickmeyer
031020bc3c Color correction for sidebar 2020-09-19 13:47:09 -07:00
Erich Eickmeyer
a84e6f2513 Add removal of dvd.list back to scripts 2020-06-04 16:58:44 -07:00
2b451b0c03 Upload to groovy. 2020-06-03 18:50:58 -04:00
6513905ecf Add dependencies for LUKS and slideshow. 2020-06-03 18:46:57 -04:00
d88f26d2ac Fix desktop file version for groovy. 2020-06-03 18:26:30 -04:00
Erich Eickmeyer
3aacab9db3 Darken sidebar to match new version of materia-kde 2020-05-31 18:27:11 -07:00
Erich Eickmeyer
a4d3a3547c Update changelog, upload to groovy 2020-05-30 22:38:04 -07:00
Erich Eickmeyer
565bb03037 Add new shellprocess for fixing audio perms 2020-05-30 22:35:36 -07:00
Erich Eickmeyer
a4008aa208 Blacklist dvd.list file from unpack 2020-05-30 22:35:08 -07:00
Erich Eickmeyer
2e97965bb9 Remove fixes from before_bootloader_context
These items are taken care of in unpackfs.conf and
shellprocess_fix_audio_perms.conf now
2020-05-30 22:34:47 -07:00
Erich Eickmeyer
18d60f96fd Update changelog, upload to groovy 2020-05-29 08:36:26 -07:00
Erich Eickmeyer
79b19ea58e Revert previous commit 2020-05-29 08:36:07 -07:00
Erich Eickmeyer
4bcbf7a2bf Studio - Apply fixes in previous upload to legacy BIOS systems 2020-05-28 16:26:01 -07:00
Erich Eickmeyer
dab7ad8fbf Update changelog, upload to groovy 2020-05-22 19:32:36 -07:00
Erich Eickmeyer
402dc7d13a Reenable audio.conf prior to first run 2020-05-22 19:30:46 -07:00
Erich Eickmeyer
59a8b2b597 Update two slideshow images 2020-05-22 19:30:17 -07:00
Erich Eickmeyer
0315b34f66 Actually fix changelog 2020-05-22 13:20:58 -07:00
Erich Eickmeyer
d385b7fa62 Fix changelog 2020-05-22 13:19:31 -07:00
Erich Eickmeyer
27b10443ad Fix dvd.list leftover in /etc/apt/sources.list.d 2020-05-22 13:14:42 -07:00
Erich Eickmeyer
d671e92039 Fix for logs-helper looking in wrong folder 2020-05-21 14:29:56 -07:00
2f179e636f Drop d/compat switch to debhelper-compat. 2020-05-20 20:41:12 -04:00
apt-ghetto
394dc4f068 Adjust studio's translations. 2020-05-20 20:22:19 -04:00
Erich Eickmeyer
d396ff5e9f Add user to audio group by default 2020-05-15 21:04:25 -07:00
Erich Eickmeyer
aa19196f75 Change-out some lubuntuisms for UbuntuStudio-isms 2020-05-15 21:03:54 -07:00
00420b10e3
Fix versioning 2020-05-15 14:04:41 -07:00
Erich Eickmeyer
feaf80857a Add Ubuntu Studio to Makefile 2020-05-14 22:41:29 -07:00
Erich Eickmeyer
9d4402f377 Fix .desktop file 2020-05-14 22:38:44 -07:00
Erich Eickmeyer
7dcbf16c85 Add Ubuntu Studio 2020-05-14 22:36:51 -07:00
2cc0bed73b Add shellprocess for i386 multiarch
Summary:
Add shellprocess to enable i386.
Bump Standards-Version to 4.5.0.
This provides "plan B" to T143

Test Plan:
 1. Boot live media
 1. Try to install Steam in Discover and it should fail with "dependency resolution failed"
 1. Install Lubuntu
 1. Reboot
 1. `dpkg --print-foreign-architectures` returns `i386`
 1. Install Steam in Discover and it should just work

Reviewers: wxl, tsimonq2

Reviewed By: wxl

Differential Revision: https://phab.lubuntu.me/D75
2020-01-30 20:32:14 -05:00
cacfe81115 Upload to Focal. 2019-10-18 15:42:46 -05:00
d787e3fc20 Welcome to the Focal Fossa! 2019-10-17 12:33:15 -05:00
d34d3ac983 Depend on a versioned Calamares to ensure that this package and Calamares migrate at the same time. 2019-10-09 15:01:41 -05:00
a45f016346 Calamares is not capitalized
Summary:
Directory location of Calamares logs is not capitalized.
This follows new Calamares version 3.2.14

Test Plan: Make sure install process copies log files to installed system correctly.

Reviewers: tsimonq2, wxl

Reviewed By: tsimonq2

Differential Revision: https://phab.lubuntu.me/D51
2019-10-09 15:00:14 -05:00
apt-ghetto
72240d9fa0 Clean up automirror module
Summary:
  * Improve naming of variables
  * Add comments

Test Plan: No test plan

Reviewers: wxl, tsimonq2, kc2bez

Reviewed By: wxl, tsimonq2, kc2bez

Differential Revision: https://phab.lubuntu.me/D44
2019-09-13 18:18:00 -04:00
apt-ghetto
e647964386 Fix UnboundLocalError in automirror module
Summary: When opening an URL, an error may be raised and the wrong, not defined variable was logged.

Test Plan: Create an HTTPError or an URLError (socket.timeout), when opening "https://ipapi.co/json"

Reviewers: wxl, tsimonq2, kc2bez

Reviewed By: wxl, kc2bez

Differential Revision: https://phab.lubuntu.me/D42
2019-09-08 22:58:06 -07:00
cd7fa92d15 Clean up Calamares settings.
Summary:
This resolves T107

Refactor automirror

Add donate button url and geoip to welcome

Adjust locale.conf geoip format

Set default filesystem type and no user swap choices

Add defaults to settings to eliminate warnings

Add efi mount options to fstab.conf

Set restart mode in finished.conf to new style

Set bootloader entry name to Ubuntu and slideshowAPI to 1

Test Plan:
Test Calamares installation for proper location detection.

Test Calamares installation for proper efi mount.

Test Calamares installation for proper bootloader entry.

Reviewers: tsimonq2, wxl, apt-ghetto

Reviewed By: tsimonq2, wxl

Subscribers: apt-ghetto

Maniphest Tasks: T107

Differential Revision: https://phab.lubuntu.me/D33
2019-08-20 21:32:27 -07:00
1a4f60968a Set window size fullscreen.
Summary: Set the window size to fullscreen. T25 (LP: #1824758)

Test Plan: Test Calamares in daily for fullscreen window.

Reviewers: tsimonq2, wxl

Reviewed By: tsimonq2, wxl

Differential Revision: https://phab.lubuntu.me/D19
2019-07-04 12:30:26 -07:00
626f59a767 Work around update-initramfs issue and reorder jobs
Summary:
The initramfs job fails to build an initrd.img for two reasons:

1. No /boot/vmlinuz-$version
2. No /boot/initrd.img-$version

(1) is due to "contextualprocess@before_bootloader_mkdirs" needing to
be executed before "initramfs" because it copies in the kernel image
from /cdrom/casper/vmlinuz.

(2) is due to a bug in update-initramfs::get_sorted_versions() because
it expects there to be an existing initrd.img-$version despite the fact
the "initramfs" module is calling it with the -c (create) option, not
-u (update).

Closes (LP: #1829805)

Test Plan: Edited config in Live Environment and successfully rebooted into the installed OS.

Reviewers: wxl, tsimonq2

Reviewed By: wxl

Differential Revision: https://phab.lubuntu.me/D15
2019-06-19 19:40:57 -07:00
Simon Quigley
6cf62c82d0 Upload to Eoan. 2019-04-19 19:12:15 -05:00
Simon Quigley
7df30927fa Welcome to the Eoan EANIMAL! 2019-04-19 19:11:49 -05:00
apt-ghetto
053817ff0e Lower the minimum RAM requirements.
Summary: Allow users with less than 1 GiB of RAM, to install Lubuntu.

Test Plan: Start the installation on a machine with less than 1 GiB RAM

Reviewers: wxl, tsimonq2

Reviewed By: wxl, tsimonq2

Differential Revision: https://phab.lubuntu.me/D6
2019-04-10 19:38:48 -05:00
Simon Quigley
b7e77646f2 Upload to Disco. 2019-01-13 00:25:16 -06:00
Simon Quigley
043062ea43 Add a missing module in the automirror script. 2019-01-13 00:25:03 -06:00
Simon Quigley
b9c13cfb8d Upload to Disco. 2019-01-12 21:37:57 -06:00
Simon Quigley
40a5fc1d0d Adjust config for automirror changes in the previous upload. 2019-01-12 21:37:28 -06:00
Simon Quigley
7cb22b4a69 Upload to Disco. 2019-01-12 15:31:48 -06:00
Simon Quigley
89c791e769 Change the version number to be release-based. 2019-01-12 15:31:32 -06:00
Simon Quigley
f16e3e1094 Add changelog entry for the previous commit. 2019-01-12 15:31:03 -06:00
apt-ghetto
2ea0f7f12d Refactor automirror
Summary:
 * Updated automirror.conf
   * Removed useless configs
   * Added URL for the country code

 * Refactored main.py
   * Added dictionary with the subdomains of some countries
   * Simplified logic
   * Removed premature optimizations
   * Renamed variables and methods

Test Plan: Compare this version with the previous version. The behaviour is expected to be the same.

Reviewers: tsimonq2, wxl

Differential Revision: https://phab.lubuntu.me/D49
2019-01-12 15:29:31 -06:00
Samuel Banya
25c5f3c7e4 Samuel Banya: Adding one line fix to Automirror's import socket
Summary: Adding one line fix to only import socket

Test Plan: Will test in isolated instance of main.py to ensure function

Reviewers: wxl, tsimonq2

Reviewed By: tsimonq2

Differential Revision: https://phab.lubuntu.me/D47
2018-12-18 22:45:41 -06:00
Simon Quigley
48ccf8291f Upload to Disco. 2018-11-20 18:29:28 -06:00
Simon Quigley
3ac42b4e25 Write a workaround to fix the support and release notes links on the welcome screen. 2018-11-20 18:29:07 -06:00
Simon Quigley
5f9d673872 Don't remove partitionmanager anymore; its a system utility we expect to have installed. 2018-11-17 20:48:43 -06:00
Simon Quigley
213f578b1d Try to install languages during the installation. 2018-11-17 20:47:22 -06:00
Simon Quigley
96ed9a0a21 We aren't Lubuntu Next anymore; take it away from the package description. 2018-11-03 21:09:01 -05:00
Simon Quigley
16c302d2fa Upload to Disco. 2018-11-03 18:03:26 -05:00
Simon Quigley
addf582ce8 Change the desktop file from 18.10 to 19.04. 2018-11-03 18:03:06 -05:00
Simon Quigley
9ed093012e Upload to Disco. 2018-11-02 17:34:07 -05:00
Simon Quigley
e7b1e9e544 Fix accidentally reverted parts of 27 in 28 due to the VCS not being up-to-date. Thanks to Jeremy Bicha for spotting the issue (LP: #1801393). 2018-11-02 17:33:47 -05:00
Simon Quigley
bfd00d9013 Welcome to the Disco Dingo! 2018-11-01 20:41:48 -05:00
Simon Quigley
a0f70d3712 Fix whitespace. 2018-11-01 20:40:46 -05:00
a392e286f3 Clarify changelog. 2018-10-16 21:01:21 -07:00
07a443fb58 Ensure upgrades don't happen for EFI packages. 2018-10-16 21:00:31 -07:00
3915c9a26f Add missing identifiers for urllib exception handling. 2018-10-15 21:20:25 -07:00
Simon Quigley
8d0c107a0f Fix Walter's bash faux pas. 2018-10-13 15:34:38 -05:00
Simon Quigley
df71fee23d Rename calamares.desktop to lubuntu-calamares.desktop. 2018-10-13 14:05:35 -05:00
Simon Quigley
a74f1abbfb Fix all the bad whitespace. 2018-10-13 13:46:17 -05:00
74419de594 cleanup after new install file location 2018-10-12 21:50:57 -07:00
abc1aafe33 fix location of installer .desktop 2018-10-12 20:58:17 -07:00
1364462c86 fix check for EFI architecture 2018-10-12 18:40:46 -07:00
87a0d32242 Restore Calamares productIcon. 2018-10-11 19:39:14 -07:00
21acfae10a Ignore BIOS entirely when installing GRUB for EFI. 2018-10-11 19:36:36 -07:00
4bf7f72786 Updated automirror for urllib.request
Summary: Updated automirror for urllib.request

Test Plan:
Verify basic function in US, but then also have non-US users test for functionality, especially paying attention to time.

More specifically, this patch should be able to be applied directly to /usr/lib/(i138-linux-gnu|x86_64-linux-gnu)/calamares/modules/automirror/main.py in a live system, then run the installer and see what happens.

Reviewers: tsimonq2, wxl

Reviewed By: tsimonq2

Differential Revision: https://phab.lubuntu.me/D23
2018-10-10 20:55:45 -05:00
9c6c1de9fe Generalize installation of GRUB for EFI.
Summary: See T97.

Test Plan: Already tested. Ship it!

Reviewers: tsimonq2

Reviewed By: tsimonq2

Differential Revision: https://phab.lubuntu.me/D33
2018-10-10 08:15:47 -07:00
Simon Quigley
8914c0f210 Add a changelog entry. 2018-10-09 13:33:55 -05:00
Simon Quigley
27ac1c0161 Add -E to the Calamares desktop icon call so that our nice theming carries over to Cala. 2018-10-09 13:32:42 -05:00
Simon Quigley
10e4174f71 Grab logo.png back because it's still referenced. 2018-10-09 13:31:53 -05:00
Wendy Hill
030028768b Fixed spelling on Office.png and added smooth: true qml to first slide. 2018-10-08 21:53:41 -06:00
Wendy Hill
83fbe22b2f Updated the slideshow. 2018-10-08 16:05:31 -06:00
Simon Quigley
f0c827eb32 C'mooooon, whitespace. :( 2018-10-07 00:07:16 -05:00
8c5e3a0061 Ensure install .desktop file is always removed.
Summary: Fixes T82.

Test Plan: Install and reboot. Desktop should be free of the install .desktop file. This has been tested already for EFI and BIOS in a virtual machine, but since this is related to a task that concerns a rather particular system consisting of 32 bit EFI with a 64 bit processor, it will need to be tested in other cases.

Reviewers: tsimonq2

Reviewed By: tsimonq2

Maniphest Tasks: T82

Differential Revision: https://phab.lubuntu.me/D30
2018-10-07 00:06:52 -05:00
Simon Quigley
c8068a4819 Bad whitespace is bad. 2018-10-06 16:30:25 -05:00
6db75e1ae8 Enable support for LUKS/encryption.
Summary: All settings required to enable support for LUKS/encryption.

Test Plan:
The two methods of encryption will need to be tested:

 1. Automated option, e.g. Erase Disk
    1. Click the radio button for the option
    1. Check the Encrypt checkbox
    1. Enter your password twice
    1. Continue with the install as normal
 1. Manual partitioning
    1. Create a new partition
    1. Check the Encrypt checkbox underneath filesystem
    1. Enter your password twice
    1. Don't forget to mount as /
    1. Continue with the install as normal

If the install completes without errors and can boot successfully after completion, asking for and accepting the correct password before booting the system, then we've got ourselves a winner.

Reviewers: tsimonq2

Reviewed By: tsimonq2

Differential Revision: https://phab.lubuntu.me/D28
2018-10-06 00:46:12 -07:00
Simon Quigley
7d0940466e Add Korean support. 2018-08-26 14:49:04 -05:00
fcc2036633 Remove all password checking.
Summary:
We were using password checking in Calamares, especially as supported by libpwquality, but have received overwhelming community feedback against this. Therefore, we remove any checking by libpwquality, including defaults that aren't explicit, like the dictionary check. Sadly, it seems that setting enforcing=0 to simply print a warning does not work. IIt's possible that this is a bug, but not worth chasing at this point. The only thing unsupported is a blank password, but that's something that's [not clear](https://github.com/calamares/calamares/issues/790#issuecomment-330455711) is supported.

The good news is that the [string](743c19d8dd/src/modules/users/page_usersetup.ui (L440)) suggesting a good password is still there. If there's anywhere to be additional improments, it's there.

Test Plan: Run Calamares and enter a variety of lame passwords (e.g. space, the number one, the letter a, the word cat, etc.) twice. If the "next" button is not greyed out, it succeeds.

Reviewers: tsimonq2

Reviewed By: tsimonq2

Differential Revision: https://phab.lubuntu.me/D12
2018-08-26 13:24:06 -05:00
4f328dc3d7 Add executable key to defaultDesktopEnvironment stanza in displaymanager.
Summary: See {T55}

Test Plan:
Install with autologin enabled. After install and reboot, should be in Lubuntu session.

NOTE: an additional fix to calamares itself is required.

Reviewers: tsimonq2

Reviewed By: tsimonq2

Differential Revision: https://phab.lubuntu.me/D9
2018-08-21 00:05:38 -05:00
Lugito
c677c371ca Merge branch 'origin/master' into Weblate 2018-08-17 12:28:12 -05:00
Hans P. Möller
71ea46cde5 Translated using Weblate (German)
Currently translated at 93,7% (15 of 16 strings)

Translation: Lubuntu/Calamares Slideshow
Translate-URL: https://translate.lubuntu.me/projects/lubuntu/calamares-slideshow/de/
2018-08-17 12:28:12 -05:00
Carl Schwan
7a2bfdb50c Translated using Weblate (French)
Currently translated at 100,0% (16 of 16 strings)

Translation: Lubuntu/Calamares Slideshow
Translate-URL: https://translate.lubuntu.me/projects/lubuntu/calamares-slideshow/fr/
2018-08-17 12:28:12 -05:00
Emanuele Antonio Faraone
2106753efa Translated using Weblate (Italian)
Currently translated at 100,0% (16 of 16 strings)

Translation: Lubuntu/Calamares Slideshow
Translate-URL: https://translate.lubuntu.me/projects/lubuntu/calamares-slideshow/it/
2018-08-17 12:28:11 -05:00
Emanuele Antonio Faraone
1588b33eba Translated using Weblate (Italian)
Currently translated at 100,0% (3 of 3 strings)

Translation: Lubuntu/Desktop File for Calamares
Translate-URL: https://translate.lubuntu.me/projects/lubuntu/calamares-settings-lubuntu-desktop/it/
2018-08-17 12:27:32 -05:00
Lugito
bef3de7261 Merge branch 'origin/master' into Weblate 2018-08-17 05:51:43 -05:00
Carl Schwan
b4e5b38104 Translated using Weblate (French)
Currently translated at 100,0% (3 of 3 strings)

Translation: Lubuntu/Desktop File for Calamares
Translate-URL: https://translate.lubuntu.me/projects/lubuntu/calamares-settings-lubuntu-desktop/fr/
2018-08-17 05:51:41 -05:00
Lugito
76432697a7 Merge branch 'origin/master' into Weblate 2018-08-17 05:48:09 -05:00
Carl Schwan
e91b5b2d3d Translated using Weblate (French)
Currently translated at 100,0% (16 of 16 strings)

Translation: Lubuntu/Calamares Slideshow
Translate-URL: https://translate.lubuntu.me/projects/lubuntu/calamares-slideshow/fr/
2018-08-17 05:48:05 -05:00
Simon Quigley
e628ebc084 Upload to Cosmic. 2018-08-14 17:12:23 -05:00
Simon Quigley
d9dc0546f6 Remove the build dep completely. 2018-08-14 17:12:14 -05:00
Simon Quigley
8eeeac57c6 Upload to Cosmic. 2018-08-14 16:19:46 -05:00
Simon Quigley
82b66ac9a3 Bump Standards-version to 4.2.0, no changes needed. 2018-08-14 16:19:31 -05:00
Simon Quigley
d2394fa5a6 Make the password detection runtime dep into a build dep. 2018-08-14 16:19:07 -05:00
Simon Quigley
d6652367c5 Add a changelog entry for the Danish translation. 2018-08-14 16:18:22 -05:00
Lugito
cdbf98cc8c Merge branch 'origin/master' into Weblate 2018-08-13 02:33:47 -05:00
Henrik Christiansen
28499fdf8b Translated using Weblate (Danish)
Currently translated at 100,0% (3 of 3 strings)

Translation: Lubuntu/Desktop File for Calamares
Translate-URL: https://translate.lubuntu.me/projects/lubuntu/calamares-settings-lubuntu-desktop/da/
2018-08-13 02:33:44 -05:00
Simon Quigley
2502b30166 Upload to Cosmic. 2018-08-10 20:13:51 -05:00
Simon Quigley
a2e6868a2a Sync default user groups with Neon. 2018-08-10 13:16:43 -05:00
Simon Quigley
ebdbcddd51 Add a minimum password strength requirement. 2018-08-10 13:15:03 -05:00
Simon Quigley
0cdb5a5e07 Upload to Cosmic. 2018-08-09 22:42:06 -05:00
Simon Quigley
04e8090eae Fix a typo in automirror. 2018-08-09 22:41:47 -05:00
Simon Quigley
638e13824f Enable automirror by default. 2018-08-09 22:40:15 -05:00
Simon Quigley
eebe3db608 Upload to Cosmic. 2018-08-09 21:25:27 -05:00
Simon Quigley
653fedc3b8 Add a calamares-settings-ubuntu-common package with an automirror module. 2018-08-09 21:25:06 -05:00
Simon Quigley
ba78fcd55a Also replace DATE. 2018-08-09 20:49:25 -05:00
Simon Quigley
8236b6ad92 Move the sources into the Python file for now. 2018-08-09 20:45:07 -05:00
Simon Quigley
b798b3f55c Fix missing indent. 2018-08-09 19:57:58 -05:00
Simon Quigley
8362219314 Initial automirror module. 2018-08-09 19:41:20 -05:00
Lugito
874785ad0c Merge branch 'origin/master' into Weblate 2018-07-25 02:41:51 -05:00
Einar Mostad
b292a53b8e Translated using Weblate (Norwegian Bokmål)
Currently translated at 100,0% (3 of 3 strings)

Translation: Lubuntu/Desktop File for Calamares
Translate-URL: https://translate.lubuntu.me/projects/lubuntu/calamares-settings-lubuntu-desktop/nb/
2018-07-25 02:41:50 -05:00
Einar Mostad
d33cfb8e32 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100,0% (16 of 16 strings)

Translation: Lubuntu/Calamares Slideshow
Translate-URL: https://translate.lubuntu.me/projects/lubuntu/calamares-slideshow/nb/
2018-07-25 02:40:09 -05:00
320 changed files with 9621 additions and 716 deletions

View File

@ -5,11 +5,69 @@
all:
# Desktop file
(cd lubuntu/po/ && make)
chmod +x lubuntu/*.desktop
(cd kubuntu/po/ && make)
(cd ubuntuunity/po && make)
# Slideshow
(cd lubuntu/branding/lubuntu/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 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

View File

@ -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.

View File

@ -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/>.

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 KiB

View File

@ -0,0 +1,31 @@
---
componentName: ubuntustudio
windowExpanding: normal
windowSize: "890px,600px"
strings:
productName: Ubuntu Studio
shortProductName: Ubuntu Studio
version: 23.10
shortVersion: noble
versionedName: Ubuntu Studio
shortVersionedName: Ubuntu Studio 23.10
bootloaderEntryName: Ubuntu
productUrl: https://ubuntustudio.org/
supportUrl: https://ubuntustudio.org/support/
images:
productLogo: "logo.png"
productIcon: "icon.png"
productWelcome: "welcome.png"
slideshow: "show.qml"
slideshowAPI: 1
style:
SidebarBackground: "#1E1E1E"
SidebarText: "#BBBBBB"
SidebarTextCurrent: "#FFFFFF"
SidebarBackgroundCurrent: "#121212"

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -0,0 +1,11 @@
#!/usr/bin/make -f
LANGUAGES := ar ca de es eu gl be da el et fr ko pl pt pt_BR
all:
for i in $(LANGUAGES); do \
/usr/lib/qt5/bin/lrelease "calamares-lubuntu_$$i.ts"; \
rm calamares-lubuntu_$$i.ts; \
done
# vim:ts=4

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ar">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation>احصل على المساعدة</translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation>https://lubuntu.me</translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation>ايميلك</translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation>مُدار بواسطة تروجيتا</translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation>لتشغيل جميع أفلامك</translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation>ليبر أوفيس</translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation>لتحرير ولتعديل جميع مستنداتك</translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation>الصور</translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation>تظهر بواسطة نوكامس</translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation>أحصل على المرح!</translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation>مع 2048 لعبة</translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation>دردشة اي ار سي</translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation>مع كواسيل اي ار سي</translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation>أظهر مستنداتك</translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation>مع عارض كيو بد دي اف</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ca">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation>Obtenir Suport</translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation>https://lubuntu.me</translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation>El Teu E-Mail</translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation>Gestionat per Trojitá</translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation>SMPlayer</translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation>Per reproduir Totes les Teves Pel·lícules</translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation>LibreOffice</translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation>Per Editar Tots el Teus Documents</translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation>Imatges</translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation>Mostrades Amb Nomacs</translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation>Diverteix-te!</translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation>Amb el joc 2048</translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation>IRC Chat</translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation>Amb Quassel IRC</translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation>Consulteu els Vostres Documents</translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation>Amb QPDFView</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="da_DK">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation> support</translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation>https://lubuntu.me</translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation>Din e-mail</translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation>Styret af Trojitá</translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation>SMPlayer</translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation>Til at afspille alle dine videoer</translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation>LibreOffice</translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation>Rediger alle dine dokumenter</translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation>Billeder</translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation>Se dem med Nomacs</translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation>Hav det sjovt!</translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation>Med 2048 spillet</translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation>IRC Chat</translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation>Med Quassel IRC</translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation>Se dine dokumenter</translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation>Med QPDFView</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="de">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation>Unterstützung erhalten</translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation>https://lubuntu.me</translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation>Ihre E-Mail-Adresse</translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation>von Trojitá verwaltet</translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation>SMPlayer</translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation>Um alle ihre Filme abzuspielen</translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation>LibreOffice</translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation>Bearbeitet all ihre Dokumente</translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation>Bilder</translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation>Viel Spaß!</translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation>Mit das 2048 Spiel</translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation>IRC Chat</translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation>Mit Quassel IRC</translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation>Ihre Dokumente anzeigen</translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation>Mit QPDFView</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="es">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation>Obtén Soporte</translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation>https://lubuntu.me</translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation>Tu e-mail</translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation>Gestionado por Trojitá</translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation>SMPlayer</translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation>Para Reproducir Todas Tus Películas</translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation>LibreOffice</translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation>Edita Todos Tus Documentos</translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation>Imágenes</translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation>Mostradas Con Nomacs</translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation>¡Diviértete!</translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation>Con el juego 2048</translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation>Chat de IRC</translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation>Con Quassel IRC</translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation>Visualiza tus Documentos</translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation>Con QPDFView</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="fr">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation>Obtenir de l&apos;aide</translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation>https://lubuntu.me</translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation>Votre mail</translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation>Managé par Trojità</translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation>SMPlayer</translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation>Pour regarder tous vos films</translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation>LibreOffice</translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation>Édite tous vos documents</translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation>Images</translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation>Visionné avec Nomacs</translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation>Amusez vous !</translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation>Avec le jeux 2018</translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation>Chat IRC</translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation>Avec Quassel IRC</translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation>Regardez vos documents</translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation>Avec QPDFView</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="it_IT">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation>Ricevi Supporto</translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation>https://lubuntu.me</translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation>La tua Mail</translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation>Gestito da Trojitá</translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation>SMPlayer</translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation>Per Riprodurre Tutti i Tuoi Filmati</translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation>LibreOffice</translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation>Modifica tutti i tuoi documenti</translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation>Immagini</translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation>Visualizzato con Nomacs</translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation>Divertiti!</translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation>Con il gioco 2048</translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation>Chat IRC</translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation>Con Quassel IRC</translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation>Vedi i tuoi documenti</translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation>Con QPDFView</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="no">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation> brukerstøtte</translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation>https://lubuntu.me</translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation>Din epost</translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation>Håndtert av Trojitá</translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation>SMPlayer</translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation>For å spille alle dine filmer</translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation>LibreOffice</translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation>Skriv alle dine dokumenter</translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation>Bilder</translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation>Vist med Nomacs</translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation>Ha det gøy!</translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation>Med 2048-spillet</translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation>IRC Chat</translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation>Med Quassel IRC</translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation>Se dine dokumenter</translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation>Med QPDFView</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="pl">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation>Uzyskaj wsparcie</translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation>https://lubuntu.me</translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation>Twój e-mail</translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation>Obsługiwany przez Trojitá</translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation>SMPlayer</translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation>Odtwarzający wszystkie Twoje filmy</translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation>LibreOffice</translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation>Edytuje Twoje dokumenty</translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation>Zdjęcia</translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation>Wyświetlane przez Nomacs</translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation>Baw się dobrze!</translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation>Z grą 2048</translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation>Czat IRC</translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation>Dzięki Quassel IRC</translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation>Wyświetlaj swoje dokumenty</translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation>W QPDFView</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="pt">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation>Suporte</translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation>https://lubuntu.me</translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation>O seu correio eletrónico (e-mail)</translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation>Gerido por Trojitá</translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation>SMPlayer</translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation>Para a reprodução de todos os seus filmes</translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation>LibreOffice</translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation>Edita todos os seus documentos</translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation>Imagens</translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation>Visualizado com Nomacs</translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation>Divirta-se!</translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation>Com o jogo 2048</translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation>Converse via IRC</translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation>Com o Quassel IRC</translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation>Visualize os seus documentos</translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation>Com o QPDFView</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="pt_BR">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation>Suporte</translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation>https://lubuntu.me</translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation>Seu correio eletrônico (e-mail)</translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation>Gerenciado por Trojitá</translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation>SMPlayer</translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation>Para reprodução dos seus filmes favoritos</translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation>LibreOffice</translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation>Edita todos os seus documentos</translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation>Imagens</translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation>Visualizadas com Nomacs</translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation>Divirta-se!</translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation>Com o jogo 2048</translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation>Converse via IRC</translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation>Com o Quassel IRC</translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation>Visualize os seus documentos</translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation>Com o QPDFView</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ru_RU">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="32"/>
<source>Get Support</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="56"/>
<source>https://lubuntu.me</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="90"/>
<source>Your Mail</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="114"/>
<source>Managed by Trojitá</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="148"/>
<source>SMPlayer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="172"/>
<source>To Play All of Your Movies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="206"/>
<source>LibreOffice</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="230"/>
<source>Edits All Of Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="264"/>
<source>Pictures</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="288"/>
<source>Viewed With Nomacs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="322"/>
<source>Have Fun!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="346"/>
<source>With the 2048 game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="380"/>
<source>IRC Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="404"/>
<source>With Quassel IRC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="438"/>
<source>View Your Documents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="462"/>
<source>With QPDFView</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,106 @@
import QtQuick 2.0;
import calamares.slideshow 1.0;
Presentation
{
id: presentation
Timer {
interval: 20000
running: true
repeat: true
onTriggered: presentation.goToNextSlide()
}
Slide {
Image {
anchors.centerIn: parent
id: image1
x:0
y:0
width: 790
height: 520
fillMode: Image.PreserveAspectFit
smooth: true
source: "NewLook.png"
}
}
Slide {
Image {
anchors.centerIn: parent
id: image3
x: 0
y: 0
width: 790
height: 520
fillMode: Image.PreserveAspectFit
smooth: true
source: "Audio.png"
}
}
Slide {
Image {
anchors.centerIn: parent
id: image4
x: 0
y: 0
width: 790
height: 520
fillMode: Image.PreserveAspectFit
smooth: true
source: "Video.png"
}
}
Slide {
Image {
anchors.centerIn: parent
id: image5
x: 0
y: 0
width: 790
height: 520
fillMode: Image.PreserveAspectFit
smooth: true
source: "Art.png"
}
}
Slide {
Image {
anchors.centerIn: parent
id: image6
x: 0
y: 0
width: 790
height: 520
fillMode: Image.PreserveAspectFit
smooth: true
source: "Photography.png"
}
}
Slide {
Image {
anchors.centerIn: parent
id: image7
x: 0
y: 0
width: 790
height: 520
fillMode: Image.PreserveAspectFit
smooth: true
source: "Software.png"
}
}
Slide {
Image {
anchors.centerIn: parent
id: image2
x: 0
y: 0
width: 790
height: 520
fillMode: Image.PreserveAspectFit
smooth: true
source: "FindUs.png"
}
}
}

View File

@ -0,0 +1,92 @@
/*
A branding component can ship a stylesheet (like this one)
which is applied to parts of the Calamares user-interface.
In principle, all parts can be styled through CSS.
Missing parts should be filed as issues.
The IDs are based on the object names in the C++ code.
You can use the Debug Dialog to find out object names:
- Open the debug dialog
- Choose tab *Tools*
- Click *Widget Tree* button
The list of object names is printed in the log.
Documentation for styling Qt Widgets through a stylesheet
can be found at
https://doc.qt.io/qt-5/stylesheet-examples.html
https://doc.qt.io/qt-5/stylesheet-reference.html
In Calamares, styling widget classes is supported (e.g.
using `QComboBox` as a selector).
This example stylesheet has all the actual styling commented out.
The examples are not exhaustive.
*/
/*** Generic Widgets.
*
* You can style **all** widgets of a given class by selecting
* the class name. Some widgets have specialized sub-selectors.
*/
/*
QPushButton { background-color: green; }
*/
/*** Main application window.
*
* The main application window has the sidebar, which in turn
* contains a logo and a list of items -- note that the list
* can **not** be styled, since it has its own custom C++
* delegate code.
*/
/*
#mainApp { setStyleSheet("color: white; background-color: black;"); }
#sidebarApp { }
#logoApp { }
*/
/*** Welcome module.
*
* There are plenty of parts, but the buttons are the most interesting
* ones (donate, release notes, ...). The little icon image can be
* styled through *qproperty-icon*, which is a little obscure.
* URLs can reference the QRC paths of the Calamares application
* or loaded via plugins or within the filesystem. There is no
* comprehensive list of available icons, though.
*/
/*
QPushButton#aboutButton { qproperty-icon: url(:/data/images/release.svg); }
#donateButton,
#supportButton,
#releaseNotesButton,
#knownIssuesButton { qproperty-icon: url(:/data/images/help.svg); }
*/
/*** Partitioning module.
*
* Many moving parts, which you will need to experiment with.
*/
/*
#bootInfoIcon { }
#bootInfoLable { }
#deviceInfoIcon { }
#defineInfoLabel { }
#scrollAreaWidgetContents { }
#partitionBarView { }
*/
/*** Licensing module.
*
* The licensing module paints individual widgets for each of
* the licenses. The item can be collapsed or expanded.
*/
/*
#licenseItem { }
#licenseItemFullText { }
*/

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

View File

@ -0,0 +1,119 @@
[ColorEffects:Disabled]
Color=56,56,56
ColorAmount=0
ColorEffect=0
ContrastAmount=0.65
ContrastEffect=1
IntensityAmount=0.1
IntensityEffect=2
[ColorEffects:Inactive]
ChangeSelectionColor=true
Color=112,111,110
ColorAmount=0.025
ColorEffect=2
ContrastAmount=0.1
ContrastEffect=2
Enable=false
IntensityAmount=0
IntensityEffect=0
[Colors:Button]
BackgroundAlternate=163,212,250
BackgroundNormal=246,245,244
DecorationFocus=53,132,228
DecorationHover=53,132,228
ForegroundActive=53,132,228
ForegroundInactive=112,125,138
ForegroundLink=41,128,185
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=35,38,41
ForegroundPositive=39,174,96
ForegroundVisited=155,89,182
[Colors:Complementary]
BackgroundAlternate=27,30,32
BackgroundNormal=42,46,50
DecorationFocus=53,132,228
DecorationHover=53,132,228
ForegroundActive=53,132,228
ForegroundInactive=161,169,177
ForegroundLink=29,153,243
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=252,252,252
ForegroundPositive=39,174,96
ForegroundVisited=155,89,182
[Colors:Selection]
BackgroundAlternate=163,212,250
BackgroundNormal=53,132,228
DecorationFocus=53,132,228
DecorationHover=53,132,228
ForegroundActive=53,132,228
ForegroundInactive=112,125,138
ForegroundLink=41,128,185
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=255,255,255
ForegroundPositive=39,174,96
ForegroundVisited=155,89,182
[Colors:Tooltip]
BackgroundAlternate=234,231,229
BackgroundNormal=246,245,244
DecorationFocus=53,132,228
DecorationHover=53,132,228
ForegroundActive=53,132,228
ForegroundInactive=112,125,138
ForegroundLink=41,128,185
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=35,38,41
ForegroundPositive=39,174,96
ForegroundVisited=155,89,182
[Colors:View]
BackgroundAlternate=246,245,244
BackgroundNormal=255,255,255
DecorationFocus=53,132,228
DecorationHover=53,132,228
ForegroundActive=53,132,228
ForegroundInactive=112,125,138
ForegroundLink=41,128,185
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=35,38,41
ForegroundPositive=39,174,96
ForegroundVisited=155,89,182
[Colors:Window]
BackgroundAlternate=227,229,231
BackgroundNormal=234,231,229
DecorationFocus=53,132,228
DecorationHover=53,132,228
ForegroundActive=53,132,228
ForegroundInactive=112,125,138
ForegroundLink=41,128,185
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=35,38,41
ForegroundPositive=39,174,96
ForegroundVisited=155,89,182
[General]
ColorScheme=UbuntuStudioLight
Name=Ubuntu Studio Light
shadeSortColumn=true
[KDE]
contrast=4
[WM]
activeBackground=234,231,229
activeBlend=227,229,231
activeForeground=35,38,41
inactiveBackground=234,231,229
inactiveBlend=234,231,229
inactiveForeground=112,125,138

View File

@ -0,0 +1,4 @@
[General]
AutomountEnabled=false
AutomountOnLogin=false
AutomountOnPlugin=false

View File

@ -0,0 +1,45 @@
cmake_minimum_required(VERSION 3.16)
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()

View File

@ -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.

View File

@ -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();
}

View File

@ -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!";
}
}

View File

@ -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

View File

@ -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>

3
common/fixconkeys-part1 Executable file
View File

@ -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

4
common/fixconkeys-part2 Executable file
View File

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

View File

@ -0,0 +1,16 @@
---
# Which base URL to use for the archive.
#
# This assumes that your mirror URLs are under XX.baseURL
baseUrl: archive.ubuntu.com
# URL used for IP address lookup
geoip:
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
# sources.list-like files.
distribution: Ubuntu

View File

@ -0,0 +1,126 @@
#!/usr/bin/env python3
# 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
# 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 program. If not, see <http://www.gnu.org/licenses/>.
import json
import libcalamares
from time import strftime
import urllib.request
from urllib.error import HTTPError, URLError
import socket
import logging
import distro
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 get_subdomain_by_country(country_code):
return SUBDOMAINS_BY_COUNTRY_CODE.get(country_code, "")
def write_file(path, content):
with open(path, "w") as f:
f.write(content)
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")
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")
libcalamares.globalstorage.insert("mirrorURL", base_url)
libcalamares.globalstorage.insert("ubuntuCodename", codename)

View File

@ -0,0 +1,5 @@
---
type: "job"
name: "automirror"
interface: "python"
script: "main.py"

View File

@ -0,0 +1,18 @@
# Make sure the correct bootloader package is installed for EFI.
# Also pull in shim so secureboot has a chance at working.
# Because of edge cases, we ignore BIOS, and do the same
# procedure for all EFI types.
---
firmwareType:
bios: "-/bin/true"
"*":
- command: apt-cdrom add -m -d=/media/cdrom/
timeout: 10
- command: sed -i '/deb http/d' /etc/apt/sources.list
timeout: 10
- command: apt-get update
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: 10800
- command: apt install -y --no-upgrade -o Acquire::gpgv::Options::=--ignore-time-conflict shim-signed
timeout: 10800

View File

@ -0,0 +1,5 @@
---
dontChroot: true
timeout: 60
script:
- command: "cp /cdrom/casper/vmlinuz ${ROOT}/boot/vmlinuz-$(uname -r)"

View File

@ -0,0 +1,3 @@
---
restartNowMode: user-checked
restartNowCommand: "systemctl -i reboot"

View File

@ -0,0 +1,2 @@
crypttabOptions: luks,keyscript=/bin/cat
efiMountOptions: umask=0077

View File

@ -0,0 +1,3 @@
overwrite: false
defaults:
GRUB_ENABLE_CRYPTODISK: true

View File

@ -0,0 +1,8 @@
---
region: "America"
zone: "New_York"
localeGenPath: "/etc/locale.gen"
geoip:
style: "xml"
url: "https://geoip.ubuntu.com/lookup"
selector: "TimeZone"

View File

@ -5,4 +5,4 @@ systemd: true
dbus: true
# Whether /var/lib/dbus/machine-id should be a symlink to /etc/machine-id
# (ignored if dbus is false, or if there is no /etc/machine-id to point to).
symlink: true
dbus-symlink: true

41
common/modules/mount.conf Normal file
View File

@ -0,0 +1,41 @@
extraMounts:
- device: proc
fs: proc
mountPoint: /proc
- device: sys
fs: sysfs
mountPoint: /sys
- device: /dev
mountPoint: /dev
options: [ bind ]
- device: tmpfs
fs: tmpfs
mountPoint: /run
- device: /run/udev
mountPoint: /run/udev
options: [ bind ]
- device: efivarfs
fs: efivarfs
mountPoint: /sys/firmware/efi/efivars
efi: true
- device: /run/systemd/resolve
mountPoint: /run/systemd/resolve
options: [ bind ]
- device: /cdrom
mountPoint: /media/cdrom
options: [ bind ]
mountOptions:
- filesystem: default
options: [ defaults ]
- filesystem: btrfs
options: [ defaults, noatime, autodefrag ]
ssdOptions: [ discard, compress=lzo ]
- filesystem: ext4
ssdOptions: [ discard ]
- filesystem: jfs
ssdOptions: [ discard ]
- filesystem: xfs
ssdOptions: [ discard ]
- filesystem: swap
ssdOptions: [ discard ]

View File

@ -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.9 )
find_package(ECM "6.0.0" NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH})
include(KDEInstallDirs)
find_package(KF6 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
)

View File

@ -0,0 +1,391 @@
#include "PackageSelectViewStep.h"
#include "ui_pkgselect.h"
#include "JobQueue.h"
#include "GlobalStorage.h"
#include "network/Manager.h"
#include <QCheckBox>
#include <QVariant>
#include <QDebug>
#include <QLabel>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QRadioButton>
/**
* @brief Initializes a new PackageSelectViewStep object.
* @param parent The parent QObject.
*/
PackageSelectViewStep::PackageSelectViewStep(QObject* parent)
: Calamares::ViewStep(parent),
m_packageSelections(),
ui(new Ui::pkgselect),
m_widget(new QWidget()), // Parent set to nullptr
m_connectionsMade(false)
{
ui->setupUi(m_widget);
// Layout Adjustment to Prevent Shifting
// Ensures that hiding/showing elements does not disrupt the layout
QGridLayout* mainLayout = qobject_cast<QGridLayout*>(ui->gridLayout);
if (mainLayout) {
mainLayout->setRowStretch(mainLayout->rowCount(), 1);
}
}
/**
* @brief Cleans up the PackageSelectViewStep object.
*/
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.value(key).toBool();
}
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::setConfigurationMap(const QVariantMap& configurationMap)
{
m_configurationMap = configurationMap;
}
/**
* @brief Activates the step, setting up the UI based on network availability and configuration.
*
* This method is called when the step becomes active. It handles network checks,
* dynamically creates package selection checkboxes, and connects signal handlers.
*/
void PackageSelectViewStep::onActivate()
{
// Check network availability
Calamares::Network::Manager network;
bool hasInternet = network.hasInternet();
// Handle network unavailability
//if (!hasInternet) {
// Disable almost all fancy features to avoid bugs, revert in 25.10 cycle
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);
//}
// Dynamically create package checkboxes only once
if (m_packageCheckBoxes.isEmpty()) {
QVariantList additionalPackages = m_configurationMap.value("packages").toMap().value("additional_packages").toList();
QVBoxLayout* packagesLayout = ui->extraparty_scrollhouse->findChild<QVBoxLayout*>("packages_layout");
if (!packagesLayout) {
qWarning() << "packages_layout not found in UI.";
return;
}
for (const QVariant& var : additionalPackages) {
QVariantMap pkg = var.toMap();
QString packageId = pkg.value("id").toString();
QString packageName = pkg.value("name").toString();
QString packageDescription = pkg.value("description").toString();
bool isSnap = pkg.value("snap").toBool();
// Create checkbox
QCheckBox* checkbox = new QCheckBox(packageName, m_widget);
checkbox->setObjectName(packageId); // Naming as packageId directly
// Create description label
QLabel* descriptionLabel = new QLabel(packageDescription, m_widget);
QFont descFont = descriptionLabel->font();
descFont.setPointSize(10);
descFont.setItalic(true);
descriptionLabel->setFont(descFont);
descriptionLabel->setWordWrap(true);
// Add to layout
packagesLayout->addWidget(checkbox);
packagesLayout->addWidget(descriptionLabel);
// Store in the map
m_packageCheckBoxes.insert(packageId, checkbox);
// Connect checkbox toggled signal
connect(checkbox, &QCheckBox::toggled, this, &PackageSelectViewStep::updatePackageSelections);
}
}
// Handle installation modes
// Connect radio buttons to lambda functions only once
if (!m_connectionsMade) {
connect(ui->minimal_button, &QRadioButton::toggled, this, [this, hasInternet](bool checked) {
if (checked && hasInternet) {
// Hide additional packages UI
ui->extraparty_scroll->setVisible(false);
ui->extraparty_text->setVisible(false);
ui->mandatory_warning_label->setVisible(false);
// Uncheck and disable all additional package checkboxes
QVariantList removePackages = m_configurationMap.value("packages").toMap().value("minimal_remove_packages").toList();
for (const QVariant& var : removePackages) {
QString packageId = var.toString();
QCheckBox* checkbox = m_packageCheckBoxes.value(packageId, nullptr);
if (checkbox) {
checkbox->setChecked(false);
checkbox->setEnabled(false);
}
}
}
});
connect(ui->normal_button, &QRadioButton::toggled, this, [this, hasInternet](bool checked) {
if (checked && hasInternet) {
// Show additional packages UI
ui->extraparty_scroll->setVisible(true);
ui->extraparty_text->setVisible(true);
ui->mandatory_warning_label->setVisible(true);
// Enable all additional package checkboxes
for (auto checkbox : m_packageCheckBoxes) {
if (checkbox) {
checkbox->setEnabled(true);
}
}
}
});
connect(ui->full_button, &QRadioButton::toggled, this, [this, hasInternet](bool checked) {
if (checked && hasInternet) {
// Show additional packages UI
ui->extraparty_scroll->setVisible(true);
ui->extraparty_text->setVisible(true);
ui->mandatory_warning_label->setVisible(true);
// Check and disable all additional package checkboxes
for (auto checkbox : m_packageCheckBoxes) {
if (checkbox) {
checkbox->setChecked(true);
checkbox->setEnabled(false);
}
}
}
});
m_connectionsMade = true;
}
// Layout Adjustment to Prevent Shifting
// Ensure that hiding/showing elements does not center the remaining widgets
// This is generally handled by Qt's layout system, but adding stretch ensures stability
QGridLayout* mainLayout = qobject_cast<QGridLayout*>(ui->gridLayout);
if (mainLayout) {
mainLayout->setRowStretch(mainLayout->rowCount(), 1);
}
}
/**
* @brief Handles actions to perform when leaving the step, such as storing selected packages.
*
* This method gathers the selected packages, determines the installation mode,
* and stores the relevant data into Calamares' GlobalStorage for use in subsequent steps.
*/
void PackageSelectViewStep::onLeave()
{
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
if (!gs) {
qWarning() << "GlobalStorage is not available.";
return;
}
bool isStackedSquashfs = m_configurationMap.value("stacked_squashfs").toBool();
QVariantMap installationData = gs->value("installation_data").toMap();
QString installationMode = installationData.value("installation_mode").toString();
bool downloadUpdates = installationData.value("download_updates").toBool();
QVariantList packagesToInstall = installationData.value("packages_to_install").toList();
QVariantList packagesToRemove = installationData.value("packages_to_remove").toList();
QVariantList presentSnaps = installationData.value("present_snaps").toList();
// Handle default value for rootMountPoint
QString rootMountPoint = "/";
if (gs->contains("rootMountPoint")) {
rootMountPoint = gs->value("rootMountPoint").toString();
}
QVariantMap globalData;
// Determine selected installation mode
if (ui->minimal_button->isChecked()) {
installationMode = "minimal";
} else if (ui->normal_button->isChecked()) {
installationMode = "normal";
} else if (ui->full_button->isChecked()) {
installationMode = "full";
}
globalData.insert("installation_mode", installationMode);
// Used by unpackfs on stacked squashfs systems
if (installationMode == "minimal") {
}
if (installationMode == "minimal") {
globalData.insert("unpack_regular", false);
if (!isStackedSquashfs) {
QVariantList minimalPackages = m_configurationMap.value("packages").toMap().value("minimal_remove_packages").toList();
QVariantList installerPackages = m_configurationMap.value("packages").toMap().value("installer_remove_packages").toList();
QVariantList combinedRemove = minimalPackages + installerPackages;
globalData.insert("packages_to_remove", combinedRemove);
}
} else {
globalData.insert("unpack_regular", true);
// For normal and full, store packages to install
QVariantList selectedPackagesList;
// Store the snaps that are already on the system by default
QStringList presentSnapList;
// Process all checked boxes
for (auto it = m_packageCheckBoxes.constBegin(); it != m_packageCheckBoxes.constEnd(); ++it) {
const QString& packageId = it.key();
QCheckBox* checkbox = it.value();
if (checkbox && checkbox->isChecked()) {
// Retrieve package details from configuration
QVariantList additionalPackages = m_configurationMap.value("packages").toMap().value("additional_packages").toList();
QVariantMap packageDetails;
for (const QVariant& var : additionalPackages) {
QVariantMap pkg = var.toMap();
if (pkg.value("id").toString() == packageId) {
packageDetails.insert("id", pkg.value("id").toString());
packageDetails.insert("snap", pkg.value("snap").toBool());
break;
}
}
if (!packageDetails.isEmpty()) {
selectedPackagesList.append(packageDetails);
}
}
}
// Add the additional packages to be installed and substitute locale
QVariantList installPackages = m_configurationMap.value("packages").toMap().value("regular_install_packages").toList();
QString localeVal = gs->value("locale").toString();
for (const QVariant& installPackage : installPackages) {
QString packageId = installPackage.toString().replace("$LOCALE", localeVal);
QVariantMap packageDetails;
packageDetails.insert("id", packageId);
packageDetails.insert("snap", false);
selectedPackagesList.append(packageDetails);
}
// Ensure delta updates are processed first
QVariantList refreshSnaps = m_configurationMap.value("packages").toMap().value("refresh_snaps").toList();
for (const QVariant& snapVar : refreshSnaps) {
QString snapId = snapVar.toString();
presentSnapList.append(snapId);
}
// As a temporary measure until OEM is refactored in the 25.10 cycle,
// we need to ensure that Calamares and its necessary dependencies are
// installed on the target, iff this is a stacked squashfs.
// FIXME: remove in favor of more nuanced stacked squashfs
// functionality in 25.10
// Ref: https://discourse.ubuntu.com/t/implementation-of-ship-live-within-a-squashfs/57510
// LP: #2104343
if (isStackedSquashfs) {
QVector<QString> stage_two_packages = {"calamares", "kdialog"};
for (QString& package_name : stage_two_packages) {
QVariantMap package_details;
package_details.insert("id", package_name);
package_details.insert("snap", false);
selectedPackagesList.append(package_details);
}
}
globalData.insert("packages_to_install", selectedPackagesList);
if (!isStackedSquashfs) {
QVariantList installerPackages = m_configurationMap.value("packages").toMap().value("installer_remove_packages").toList();
globalData.insert("packages_to_remove", installerPackages);
}
globalData.insert("present_snaps", presentSnapList);
}
// Store the state of 'download_updates' checkbox
bool updatesChecked = ui->updates_button->isChecked();
globalData.insert("download_updates", updatesChecked);
gs->insert("installation_data", globalData);
}
/**
* @brief Slot to handle checkbox toggle events.
*
* This method updates the internal package selection map based on user interactions
* with the package checkboxes.
*
* @param checked The new checked state of the checkbox.
*/
void PackageSelectViewStep::updatePackageSelections(bool checked)
{
QCheckBox* checkbox = qobject_cast<QCheckBox*>(sender());
if (!checkbox)
return;
QString packageId = checkbox->objectName();
m_packageSelections[packageId] = checked;
emit packageSelectionsChanged();
}
/**
* @brief Retrieves the checkbox associated with a given package ID.
*
* @param id The package ID.
* @return A pointer to the QCheckBox, or nullptr if not found.
*/
QCheckBox* PackageSelectViewStep::getCheckboxById(const QString& id) const
{
return m_packageCheckBoxes.value(id, nullptr);
}
CALAMARES_PLUGIN_FACTORY_DEFINITION(PackageSelectViewStepFactory, registerPlugin<PackageSelectViewStep>(); )

View File

@ -0,0 +1,143 @@
#ifndef PACKAGESELECTVIEWSTEP_H
#define PACKAGESELECTVIEWSTEP_H
#include <QObject>
#include <QVariantMap>
#include <QMap>
#include "DllMacro.h"
#include "utils/PluginFactory.h"
#include "viewpages/ViewStep.h"
namespace Ui {
class pkgselect;
}
class QCheckBox;
/**
* @class PackageSelectViewStep
* @brief A Calamares view step for selecting and customizing packages during installation.
*
* This class provides a user interface for selecting additional packages to install,
* managing installation modes, and handling network availability scenarios.
*/
class PLUGINDLLEXPORT PackageSelectViewStep : public Calamares::ViewStep
{
Q_OBJECT
public:
/**
* @brief Constructs a new PackageSelectViewStep object.
* @param parent The parent QObject.
*/
explicit PackageSelectViewStep(QObject* parent = nullptr);
/**
* @brief Destroys the PackageSelectViewStep object.
*/
~PackageSelectViewStep() override;
/**
* @brief Returns the display name of the step.
* @return The pretty name as a QString.
*/
QString prettyName() const override;
/**
* @brief Returns the widget associated with this step.
* @return A pointer to the QWidget.
*/
QWidget* widget() override;
/**
* @brief Returns the list of jobs to execute for this step.
* @return An empty Calamares::JobList.
*/
Calamares::JobList jobs() const override;
/**
* @brief Indicates whether the "Next" button is enabled.
* @return Always returns true.
*/
bool isNextEnabled() const override;
/**
* @brief Indicates whether the "Back" button is enabled.
* @return Always returns true.
*/
bool isBackEnabled() const override;
/**
* @brief Indicates whether the step is at the beginning.
* @return Always returns true.
*/
bool isAtBeginning() const override;
/**
* @brief Indicates whether the step is at the end.
* @return Always returns true.
*/
bool isAtEnd() const override;
/**
* @brief Activates the step, setting up the UI based on network availability and configuration.
*/
void onActivate() override;
/**
* @brief Handles actions to perform when leaving the step, such as storing selected packages.
*/
void onLeave() override;
/**
* @brief Sets the configuration map for the step.
* @param configurationMap The QVariantMap containing configuration data.
*/
void setConfigurationMap(const QVariantMap& configurationMap) override;
/**
* @brief Retrieves the current package selections.
* @return A QVariantMap of package selections.
*/
QVariantMap packageSelections() const { return m_packageSelections; }
public slots:
/**
* @brief Slot to handle checkbox toggle events.
* @param checked The new checked state of the checkbox.
*/
void updatePackageSelections(bool checked);
signals:
/**
* @brief Signal emitted when package selections change.
*/
void packageSelectionsChanged();
private:
/**
* @brief Retrieves the checkbox associated with a given package ID.
* @param id The package ID.
* @return A pointer to the QCheckBox, or nullptr if not found.
*/
QCheckBox* getCheckboxById(const QString& id) const;
/**
* @brief Checks if a given key exists in package selections and is set to true.
* @param key The key to check.
* @return True if the key exists and is true, otherwise false.
*/
bool exists_and_true(const QString& key) const;
QVariantMap m_packageSelections; ///< Stores the state of package selections.
Ui::pkgselect* ui; ///< Pointer to the UI class.
QWidget* m_widget; ///< Pointer to the main widget of the step.
QVariantMap m_configurationMap; ///< Stores configuration data.
QMap<QString, QCheckBox*> m_packageCheckBoxes; ///< Maps package IDs to their corresponding checkboxes.
bool m_connectionsMade; ///< Flag to ensure signal connections are made only once.
};
CALAMARES_PLUGIN_FACTORY_DECLARATION(PackageSelectViewStepFactory)
#endif // PACKAGESELECTVIEWSTEP_H

View File

@ -0,0 +1,51 @@
---
packages:
additional_packages:
- id: "element-desktop"
name: "Element"
description: "Matrix-based end-to-end encrypted messenger and secure collaboration app."
snap: true
- id: "thunderbird"
name: "Thunderbird"
description: "Email, newsfeed, chat, and calendaring client."
snap: true
- id: "krita"
name: "Krita"
description: "Graphics editor designed primarily for digital art and 2D animation."
snap: true
minimal_remove_packages:
- "snapd"
- "lubuntu-snap-installation-monitor"
- "vlc"
- "plasma-discover"
- "transmission-qt"
- "quassel"
- "2048-qt"
- "featherpad"
- "noblenote"
- "kcalc"
- "qps"
- "zsync"
- "partitionmanager"
- "qapt-deb-installer"
- "picom"
- "qlipper"
- "qtpass"
- "libreoffice*"
installer_remove_packages:
- "^live-*"
- calamares-settings-lubuntu
- calamares
- zram-config
- cifs-utils
- lubuntu-installer-prompt
regular_install_packages:
- language-pack-$LOCALE
- language-pack-gnome-$LOCALE
- language-pack-kde-$LOCALE
- hunspell-$LOCALE
- libreoffice-help-$LOCALE
- libreoffice-l10n-$LOCALE
refresh_snaps:
- "firefox"
- "firmware-updater"

View File

@ -0,0 +1,380 @@
<?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>Package Selection</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">
<!-- Installation Mode Label -->
<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>
<!-- Minimal Installation Radio Button -->
<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>
<!-- Minimal Installation Description -->
<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>
<!-- Normal Installation Radio Button -->
<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>
<!-- Normal Installation Description -->
<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>
<!-- Full Installation Radio Button -->
<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>
<!-- Full Installation Description -->
<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>
<!-- Spacer Elements -->
<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="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="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="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>
<!-- Additional Options Label -->
<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>
<!-- Update Checkbox -->
<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>
<!-- Updates Text -->
<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>
<!-- Mandatory Warning Label -->
<item row="20" 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>
<!-- Pushup Spacer -->
<item row="21" 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>
<!-- Additional Packages Label -->
<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>
<!-- Scroll Area for Additional Packages -->
<item row="19" 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="QVBoxLayout" name="packages_layout">
<!-- Dynamic Checkboxes will be added here -->
</layout>
</widget>
</widget>
</item>
<!-- Stretch to Push Elements Up -->
<item row="22" column="1">
<spacer name="stretch_spacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,37 @@
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
include(FeatureSummary)
set( CMAKE_CXX_STANDARD 23 )
set( CMAKE_CXX_STANDARD_REQUIRED ON )
find_library(APT_PKG_LIB apt-pkg)
if (NOT APT_PKG_LIB)
message(FATAL_ERROR "Could not find libapt-pkg")
endif()
find_package(ECM "6.0.0" NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH})
find_package(KF6 REQUIRED COMPONENTS CoreAddons)
include(KDEInstallDirs)
set( CALAMARES_VERSION_REQUIRED 3.3.9 )
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( pkgselectprocess
TYPE job
EXPORT_MACRO PLUGINDLLEXPORT_PRO
SOURCES
PackageSelectProcess.cpp
SHARED_LIB
NO_CONFIG
)
add_executable(check_package checkpackage-backend.cpp)
target_link_libraries(check_package PRIVATE ${APT_PKG_LIB})

View File

@ -0,0 +1,573 @@
#include "PackageSelectProcess.h"
#include "GlobalStorage.h"
#include "JobQueue.h"
#include <QProcess>
#include <QDebug>
#include <QDir>
#include <QCoreApplication>
#include <QRegularExpression>
#include <QFile>
CALAMARES_PLUGIN_FACTORY_DEFINITION(PackageSelectProcessFactory, registerPlugin<PackageSelectProcess>();)
PackageSelectProcess::PackageSelectProcess(QObject* parent)
: Calamares::CppJob(parent),
m_prettyStatus(tr("Preparing to install selected packages..."))
{
}
QString PackageSelectProcess::prettyName() const
{
return tr("Installing selected packages");
}
QString PackageSelectProcess::prettyStatusMessage() const
{
return m_prettyStatus;
}
void PackageSelectProcess::setConfigurationMap(const QVariantMap& configurationMap)
{
m_configurationMap = configurationMap;
}
Calamares::JobResult PackageSelectProcess::runAptCommand(const QString& command,
const QString& rootMountPoint,
double startProgress,
double endProgress,
bool verboseProgress)
{
qDebug() << "Running apt command:" << command;
QProcess aptProcess(this);
aptProcess.setProgram("/usr/sbin/chroot");
aptProcess.setArguments({ rootMountPoint, "/bin/bash", "-c", command });
aptProcess.setProcessChannelMode(QProcess::MergedChannels);
constexpr int MAX_LINES = 5000;
double progressRange = endProgress - startProgress;
double progressPerLine = progressRange / static_cast<double>(MAX_LINES);
int lineCount = 0;
QString commandHRPrefix;
if (command.contains("install")) {
commandHRPrefix = tr("Installing packages: ");
} else if (command.contains("full-upgrade")) {
commandHRPrefix = tr("Upgrading installed system: ");
} else if (command.contains("remove")) {
commandHRPrefix = tr("Cleaning up packages: ");
} else if (command.contains("cdrom")) {
commandHRPrefix = tr("cdrom: ");
}
QRegularExpression getRegex(R"(Get:\d+\s+[^ ]+\s+[^ ]+\s+(.+?)\s+\S+\s+(\S+)\s+\[(.*?)\])");
connect(&aptProcess, &QProcess::readyReadStandardOutput, this,
[this, &lineCount, progressPerLine, startProgress, endProgress, verboseProgress, commandHRPrefix, getRegex]() {
QProcess *aptProcess = (QProcess *)(QObject::sender());
if (aptProcess == NULL) return;
while (aptProcess->canReadLine()) {
QString line = QString::fromUtf8(aptProcess->readLine()).trimmed();
qDebug() << "Apt log line: " << line;
if (line.isEmpty()) {
continue;
}
if (verboseProgress && !line.contains("Running in chroot, ignoring command") &&
!line.contains("Waiting until unit") && !line.contains("Stopping snap") &&
!line.contains("/dev/pts")) {
// Process "Get:" lines to show download information
if (line.startsWith("Get:")) {
QRegularExpressionMatch match = getRegex.match(line);
if (match.hasMatch()) {
QString packageName = match.captured(1);
QString packageVersion = match.captured(2);
QString packageSize = match.captured(3);
line = tr("Downloading %1 %2 (%3)").arg(packageName, packageVersion, packageSize);
}
}
m_prettyStatus = commandHRPrefix + line;
emit prettyStatusMessageChanged(m_prettyStatus);
qDebug() << m_prettyStatus;
}
lineCount++;
double currentProgress = startProgress + (lineCount * progressPerLine);
currentProgress = qBound(startProgress, currentProgress, endProgress);
emit progress(currentProgress);
}
});
aptProcess.start();
if (!aptProcess.waitForStarted()) {
qWarning() << "Failed to start apt command:" << aptProcess.errorString();
return Calamares::JobResult::error(tr("Apt command failed"),
tr("Failed to start apt command: %1").arg(aptProcess.errorString()));
}
while (!aptProcess.waitForFinished(100)) {
QCoreApplication::processEvents();
}
if (aptProcess.exitStatus() != QProcess::NormalExit || aptProcess.exitCode() != 0) {
QString errorOutput = QString::fromUtf8(aptProcess.readAllStandardError()).trimmed();
qWarning() << "Apt command error:" << errorOutput;
return Calamares::JobResult::error(tr("Apt command failed"),
tr("Failed to execute apt command: %1").arg(errorOutput));
}
emit progress(endProgress);
m_prettyStatus = tr("Command executed successfully.");
emit prettyStatusMessageChanged(m_prettyStatus);
return Calamares::JobResult::ok();
}
Calamares::JobResult PackageSelectProcess::runSnapCommand(const QStringList& snapPackages,
const QString& rootMountPoint,
double startProgress,
double endProgress)
{
const QString seedDirectory = QDir::cleanPath(rootMountPoint + "/var/lib/snapd/seed");
QDir dir(seedDirectory);
if (!dir.exists() && !dir.mkpath(".")) {
return Calamares::JobResult::error(tr("Snap installation failed"),
tr("Failed to create seed directory: %1").arg(seedDirectory));
}
QStringList snapCommandArgs = { "--seed", seedDirectory };
snapCommandArgs += snapPackages;
qDebug() << "Executing Snap Command:" << snapCommandArgs.join(" ");
QProcess snapProcess(this);
snapProcess.setProgram("/usr/bin/snapd-seed-glue");
snapProcess.setArguments(snapCommandArgs);
snapProcess.setProcessChannelMode(QProcess::MergedChannels);
QString currentDescription;
connect(&snapProcess, &QProcess::readyReadStandardOutput, this,
[&snapProcess, this, &currentDescription, startProgress, endProgress]( ) {
while (snapProcess.canReadLine()) {
QString line = QString::fromUtf8(snapProcess.readLine()).trimmed();
if (line.isEmpty()) {
continue;
}
QStringList parts = line.split("\t");
if (parts.size() != 2) {
qWarning() << "Unexpected output format from snap-seed-glue:" << line;
continue;
}
bool ok = false;
double percentage = parts[0].toDouble(&ok);
const QString& description = parts[1];
if (!ok) {
qWarning() << "Failed to parse percentage from line:" << line;
continue;
}
if (description != currentDescription) {
m_prettyStatus = description;
emit prettyStatusMessageChanged(m_prettyStatus);
currentDescription = description;
qDebug() << description;
}
double scaledProgress = startProgress + (percentage / 100.0) * (endProgress - startProgress);
emit progress(scaledProgress);
}
});
m_prettyStatus = tr("Installing snap packages...");
emit prettyStatusMessageChanged(m_prettyStatus);
emit progress(startProgress);
snapProcess.start();
if (!snapProcess.waitForStarted()) {
qWarning() << "Failed to start snap installation process:" << snapProcess.errorString();
return Calamares::JobResult::error(tr("Snap installation failed"),
tr("Failed to start snap installation process: %1").arg(snapProcess.errorString()));
}
while (!snapProcess.waitForFinished(100)) {
QCoreApplication::processEvents();
}
if (snapProcess.exitStatus() != QProcess::NormalExit || snapProcess.exitCode() != 0) {
QString errorOutput = QString::fromUtf8(snapProcess.readAllStandardError()).trimmed();
qWarning() << "Snap installation error:" << errorOutput;
return Calamares::JobResult::error(tr("Snap installation failed"),
tr("Failed to install snap packages: %1").arg(errorOutput));
}
emit progress(endProgress);
m_prettyStatus = tr("Snap packages installed successfully!");
emit prettyStatusMessageChanged(m_prettyStatus);
return Calamares::JobResult::ok();
}
void PackageSelectProcess::divert(bool enable)
{
for (auto it = dpkgDiversions.constBegin(); it != dpkgDiversions.constEnd(); ++it) {
const QString& name = it.key();
const QString& path = it.value();
QString divertedPath = path + ".REAL";
QString command;
if (enable) {
qDebug() << tr("Adding diversion for %1...").arg(name);
command = QString("dpkg-divert --quiet --add --divert %1 --rename %2")
.arg(divertedPath, path);
} else {
qDebug() << tr("Removing diversion for %1...").arg(name);
QFile::remove(rootMountPoint + path);
command = QString("dpkg-divert --quiet --remove --rename %1").arg(path);
}
// Set up the QProcess to run the command in chroot
QProcess process;
process.setProgram("/usr/sbin/chroot");
process.setArguments({ rootMountPoint, "/bin/bash", "-c", command });
process.setProcessChannelMode(QProcess::MergedChannels);
// Run the process
process.start();
if (!process.waitForFinished()) {
qWarning() << "Process error:" << process.errorString();
continue;
}
if (process.exitStatus() != QProcess::NormalExit || process.exitCode() != 0) {
qWarning() << "Error handling diversion for" << name << ":" << process.readAll();
continue;
}
if (!enable) { continue; }
// Create the replacement script in chroot
QString scriptContent = QString(
"#!/bin/sh\n"
"echo \"%1: diverted (will be called later)\" >&1\n"
"exit 0\n"
).arg(name);
QString scriptPath = rootMountPoint + path;
QFile scriptFile(scriptPath);
if (!scriptFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
qWarning() << "Error creating script for" << name << ":" << scriptFile.errorString();
continue;
}
QTextStream out(&scriptFile);
out << scriptContent;
scriptFile.close();
// Make the script executable
QFile::setPermissions(scriptPath, QFile::permissions(scriptPath) | QFile::ExeOwner | QFile::ExeGroup | QFile::ExeOther);
}
}
Calamares::JobResult PackageSelectProcess::exec()
{
auto gs = Calamares::JobQueue::instance()->globalStorage();
if (!gs || !gs->contains("installation_data")) {
return Calamares::JobResult::error(tr("No installation data found."),
tr("Installation data is missing from global storage."));
}
const QVariantMap installationData = gs->value("installation_data").toMap();
const QString installationMode = installationData.value("installation_mode").toString();
const bool hasInternet = gs->value("hasInternet").toBool();
const bool downloadUpdates = (installationData.value("download_updates").toBool() && hasInternet);
const QVariantList packagesToInstall = installationData.value("packages_to_install").toList();
const QVariantList packagesToRemove = installationData.value("packages_to_remove").toList();
const QVariantList presentSnaps = installationData.value("present_snaps").toList();
// Handle default value for rootMountPoint
rootMountPoint = "/";
if (gs->contains("rootMountPoint")) {
rootMountPoint = gs->value("rootMountPoint").toString();
}
const QString checkpackage_path = "/usr/libexec/checkpackage-backend";
const QString chroot_checkpackage_path = rootMountPoint + checkpackage_path;
QFile* cpbe = new QFile(chroot_checkpackage_path);
static const QMap<QString, QVector<ProgressAllocation>> allocationMap = {
{ "minimal", { {0.0, 1.0} } },
{ "normal", { {0.0, 0.4}, {0.4, 1.0} } },
{ "full", { {0.0, 0.25}, {0.25, 1.0} } }
};
const QVector<ProgressAllocation> allocations = allocationMap.value(installationMode, { {0.0, 1.0} });
const double aptRange = allocations[0].end - allocations[0].start;
const double updateStart = allocations[0].start;
const double updateEnd = updateStart + 0.1 * aptRange;
// Temporarily copy ubuntu.sources elsewhere, if we do not have network
// This is so we can update the apt cache safely
// FIXME: there has to be a better, more native way to do this. It works
// for now, but in the 25.10 cycle, we're probably going to move some of
// these command-line apt calls to the libapt C library. LP: #2107287
if (!hasInternet) {
const QString ubuntu_sources_path = rootMountPoint + "/etc/apt/sources.list.d/ubuntu.sources";
QFile* ubuntu_sources = new QFile(ubuntu_sources_path);
// Just in case this module is used in a non-Ubuntu environment, make sure ubuntu.sources exists
// TODO: make this configurable in the 25.10 cycle
if (ubuntu_sources->exists()) {
const QString backup_name = ubuntu_sources_path + ".bak";
if (!ubuntu_sources->rename(ubuntu_sources_path + ".bak")) {
return Calamares::JobResult::error(tr("Internal Error"),
tr("Permission denied when moving ubuntu.sources to prepare for offline install"));
}
Calamares::JobResult addCdromResult = runAptCommand("apt-cdrom add -m -d=/media/cdrom/", rootMountPoint, updateStart, updateEnd, true);
if (!addCdromResult) return std::move(addCdromResult);
} else {
return Calamares::JobResult::error(tr("Internal Error"),
tr("/etc/apt/sources.list.d/ubuntu.sources not found in the target, are you a downstream?"));
}
}
// Run apt update
m_prettyStatus = tr("Updating apt cache");
emit prettyStatusMessageChanged(m_prettyStatus);
emit progress(updateStart);
Calamares::JobResult updateResult = runAptCommand("DEBIAN_FRONTEND=noninteractive apt-get update",
rootMountPoint,
updateStart,
updateEnd,
false);
if (!updateResult) { // Using operator bool() to check for errors
return std::move(updateResult); // Move to avoid copy
}
QStringList debPackages;
for (const QVariant& var : packagesToInstall) {
const QVariantMap pkg = var.toMap();
if (!pkg.value("snap").toBool()) {
debPackages << pkg.value("id").toString();
}
}
// Add diversions for dracut, update-initramfs, and locale-gen
/*
dpkgDiversions = {
{"dracut", "/usr/bin/dracut"},
{"update-initramfs", "/usr/sbin/update-initramfs"},
{"locale-gen", "/usr/sbin/locale-gen"}
};
divert(true);
*/
double installStart;
double installEnd;
if (downloadUpdates) {
const double upgradeStart = updateEnd;
const double upgradeEnd = upgradeStart + 0.25 * aptRange;
Calamares::JobResult upgradeResult = runAptCommand(
"DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::='--force-confnew' full-upgrade",
rootMountPoint,
upgradeStart,
upgradeEnd,
true
);
if (!upgradeResult) { // Using operator bool() to check for errors
return std::move(upgradeResult); // Move to avoid copy
}
installStart = upgradeEnd;
installEnd = installStart + 0.25 * aptRange;
}
else {
installStart = updateEnd;
installEnd = installStart + 0.5 * aptRange;
installEnd = qMin(installEnd, allocations[0].end);
}
qDebug() << "Progress range: installStart:" << installStart << "installEnd:" << installEnd;
if (!debPackages.isEmpty()) {
// Corresponding to the temporary hack in pkgselect adding calamares
// and kdialog to the list, we only want those two included in the
// final installation if we're actually in OEM mode. Otherwise, they
// can be ignored, and are just clutter.
// FIXME: When the OEM stack is rewritten in 25.10, this needs to be
// removed.
if (!QFile::exists("/etc/calamares/OEM_MODE_ACTIVATED")) {
QStringList wip_list;
for (auto debPackage : debPackages) {
if (!debPackage.contains(QString("calamares")) &&
!debPackage.contains(QString("kdialog"))) {
wip_list << debPackage;
}
}
debPackages = wip_list;
}
// checkpackage-backend needs to be explicitly copied to the chroot
// and removed later for systems with stacked squashfses, or the
// install command will fail. LP: #2104243
if (!cpbe->exists()) {
QFile* parent_cpbe = new QFile(checkpackage_path);
if (!parent_cpbe->copy(chroot_checkpackage_path)) {
return Calamares::JobResult::error(tr("Internal Error"),
tr("Permission denied when copying checkpackage-backend, are you running Calamares correctly?"));
}
}
const QString packageList = debPackages.join(" ");
const QString installCommand = QString("DEBIAN_FRONTEND=noninteractive apt-get -y install $(/usr/libexec/checkpackage-backend %1);").arg(packageList);
Calamares::JobResult installResult = runAptCommand(installCommand,
rootMountPoint,
installStart,
installEnd,
true);
if (!installResult) {
if (!cpbe->remove()) qDebug() << "Warning: failed to clean up /usr/libexec/checkpackage-backend";
return std::move(installResult);
}
}
else qDebug() << "No packages to install.";
QStringList removeDebPackages;
for (const QVariant& var : packagesToRemove) {
removeDebPackages << var.toString();
}
// As part of the fix for LP: #2104343, we need to ensure that, if
// we are currently in OEM mode, Calamares and friends remain
// installed. During stage two, we clean it up.
// FIXME: When the OEM stack is rewritten in 25.10, this needs to be
// rewritten.
if (QFile::exists("/etc/calamares/OEM_MODE_ACTIVATED")) {
QStringList wip_list;
for (auto removeDebPackage : removeDebPackages) {
if (!removeDebPackage.contains(QString("calamares"))) wip_list << removeDebPackage;
}
removeDebPackages = wip_list;
}
const double removeStart = installEnd;
const double removeEnd = removeStart + 0.2 * aptRange;
if (!removeDebPackages.isEmpty()) {
const QString removeCommand = QString("DEBIAN_FRONTEND=noninteractive apt-get -y --purge remove $(/usr/libexec/checkpackage-backend %1);")
.arg(removeDebPackages.join(" "));
Calamares::JobResult removeResult = runAptCommand(removeCommand,
rootMountPoint,
removeStart,
removeEnd,
true);
if (!removeResult) return std::move(removeResult);
}
const double autoremoveStart = removeEnd;
const double autoremoveEnd = autoremoveStart + 0.2 * aptRange;
Calamares::JobResult autoremoveResult = runAptCommand("DEBIAN_FRONTEND=noninteractive apt-get -y autoremove",
rootMountPoint,
autoremoveStart,
autoremoveEnd,
true);
// Disable diversions
//divert(false);
// Move ubuntu.sources back, and clean up the cdrom file
// FIXME: there has to be a better, more native way to do this. It works
// for now, but in the 25.10 cycle, we're probably going to move some of
// these command-line apt calls to the libapt C library. LP: #2107287
try {
if (!hasInternet) {
const QString ubuntu_sources_path = rootMountPoint + "/etc/apt/sources.list.d/ubuntu.sources";
const QString backup_name = ubuntu_sources_path + ".bak";
QFile* ubuntu_sources = new QFile(ubuntu_sources_path);
QFile* ubuntu_sources_bak = new QFile(backup_name);
// Just in case this module is used in a non-Ubuntu environment, make sure ubuntu.sources exists
// TODO: make this configurable in the 25.10 cycle
if (ubuntu_sources->exists()) {
if (!ubuntu_sources->remove()) {
return Calamares::JobResult::error(tr("Internal Error"),
tr("/etc/apt/sources.list.d/ubuntu.sources already exists and it won't budge - this is a rare edge case, please report!"));
}
}
if (!ubuntu_sources_bak->rename(ubuntu_sources_path)) {
return Calamares::JobResult::error(tr("Internal Error"),
tr("Permission denied when moving ubuntu.sources back after offline install"));
}
// Remove the apt-cdrom entry we added earlier
// This may seem drastic, but we already expect that the automirror
// module, ran before this, creates a deb822-style ubuntu.sources
QFile* cdrom_sources_list = new QFile(rootMountPoint + "/etc/apt/sources.list");
if (!cdrom_sources_list->remove()) {
return Calamares::JobResult::error(tr("Internal Error"),
tr("Failed to remove classic sources.list file"));
}
}
} catch (const std::exception &exc) {
qDebug() << exc.what();
} catch (...) {
qDebug() << "Caught unknown error";
}
// Handle snap packages
if (installationMode != "minimal") {
QStringList snapPackages;
QStringList presentSnapsList;
// Convert QVariantList to QStringList
for (const QVariant& var : presentSnaps) {
presentSnapsList << var.toString();
}
for (const QVariant& var : packagesToInstall) {
const QVariantMap pkg = var.toMap();
if (pkg.value("snap").toBool()) {
snapPackages << pkg.value("id").toString();
}
}
QStringList finalSnapPackages;
if (!snapPackages.isEmpty() && !presentSnapsList.isEmpty()) {
finalSnapPackages = presentSnapsList + snapPackages;
}
else if (!snapPackages.isEmpty()) {
finalSnapPackages = snapPackages;
}
else if (!presentSnapsList.isEmpty() && downloadUpdates) {
finalSnapPackages = presentSnapsList;
}
if (!finalSnapPackages.isEmpty()) {
double snapStart = allocations.size() > 1 ? allocations[1].start : allocations[0].end;
double snapEnd = allocations.size() > 1 ? allocations[1].end : allocations[0].end;
Calamares::JobResult snapResult = runSnapCommand(finalSnapPackages,
rootMountPoint,
snapStart,
snapEnd);
if (!snapResult) { // Using operator bool() to check for errors
return std::move(snapResult); // Move to avoid copy
}
}
}
emit progress(1.0);
m_prettyStatus = tr("All selected packages installed successfully.");
emit prettyStatusMessageChanged(m_prettyStatus);
if (!cpbe->remove()) qDebug() << "Warning: failed to clean up /usr/libexec/checkpackage-backend";
return Calamares::JobResult::ok();
}

View File

@ -0,0 +1,60 @@
#ifndef PACKAGESELECTPROCESS_H
#define PACKAGESELECTPROCESS_H
#include <QMap>
#include <QObject>
#include <QString>
#include <QVariantMap>
#include "CppJob.h"
#include "utils/PluginFactory.h"
#include "DllMacro.h"
class QProcess;
class PLUGINDLLEXPORT PackageSelectProcess : public Calamares::CppJob
{
Q_OBJECT
public:
explicit PackageSelectProcess(QObject* parent = nullptr);
~PackageSelectProcess() override = default;
QString prettyName() const override;
QString prettyStatusMessage() const override;
Calamares::JobResult exec() override;
void setConfigurationMap(const QVariantMap& configurationMap) override;
signals:
void prettyStatusMessageChanged(const QString&);
private:
struct ProgressAllocation
{
double start;
double end;
};
Calamares::JobResult runAptCommand(const QString& command,
const QString& rootMountPoint,
double startProgress,
double endProgress,
bool verboseProgress);
Calamares::JobResult runSnapCommand(const QStringList& snapPackages,
const QString& rootMountPoint,
double startProgress,
double endProgress);
void divert(bool enable);
QMap<QString, QString> dpkgDiversions;
QString rootMountPoint;
QVariantMap m_configurationMap;
QString m_prettyStatus;
};
CALAMARES_PLUGIN_FACTORY_DECLARATION(PackageSelectProcessFactory)
#endif // PACKAGESELECTPROCESS_H

View File

@ -0,0 +1,54 @@
#include <iostream>
#include <string>
#include <unordered_set>
#include <apt-pkg/algorithms.h>
#include <apt-pkg/cacheiterators.h>
#include <apt-pkg/init.h>
#include <apt-pkg/cachefile.h>
#include <apt-pkg/pkgcache.h>
#include <apt-pkg/pkgsystem.h>
#include <apt-pkg/progress.h>
int main(int argc, char* argv[]) {
pkgInitConfig(*_config);
pkgInitSystem(*_config, _system);
if (_system == 0) {
std::cerr << "apt-pkg not initialized\n";
return 1;
}
// Open the package cache.
pkgCacheFile *cache = new pkgCacheFile();
OpProgress progress;
if (!cache || cache->Open(&progress, false) == false) {
std::cerr << "Error: could not open APT cache.\n";
return 1;
}
pkgApplyStatus(*cache);
std::vector<std::string> package_names(argv + 1, argv + argc);
if (package_names.empty()) return 0;
std::unordered_set<std::string> seen_packages;
for (std::string package_name : package_names) {
if (seen_packages.contains(package_name)) continue;
seen_packages.insert(package_name);
// Tasks and wildcards should just be passed through as-is, for now
if (package_name.starts_with('^') || package_name.contains('*')) {
std::cout << package_name << " ";
continue;
}
pkgCache::GrpIterator grp = cache->GetPkgCache()->FindGrp(package_name);
if (!grp.end()) {
pkgCache::PkgIterator it = grp.FindPreferredPkg(true);
if (!it.end() && !it.VersionList().end()) {
std::cout << package_name << " ";
}
}
}
std::cout << "\n";
cache->Close();
return 0;
}

View File

@ -0,0 +1,7 @@
---
type: "job"
name: "pkgselectprocess"
interface: "qtplugin"
load: "libcalamares_job_pkgselectprocess.so"
noconfig: true
weight: 12

View File

@ -0,0 +1,5 @@
---
dontChroot: false
timeout: 30
script:
- command: "/usr/bin/dpkg --add-architecture i386"

View File

@ -0,0 +1,5 @@
---
dontChroot: false
timeout: 30
script:
- "touch ${ROOT}/boot/initrd.img-$(uname -r)"

View File

@ -0,0 +1,7 @@
---
dontChroot: false
timeout: 120
script:
- "sed -i 's/oem:x:1000:1000/oem:x:60999:60999/' /etc/passwd"
- "sed -i 's/oem:x:1000/oem:x:60999/' /etc/group"
- "chown -R 60999:60999 /home/oem"

View File

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

View File

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

View File

@ -2,4 +2,4 @@
dontChroot: true
timeout: 30
script:
- calamares-logs-helper @@ROOT@@
- calamares-logs-helper ${ROOT}

View File

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

View File

@ -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/

View File

@ -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]

View File

@ -1,5 +1,12 @@
lubuntu/calamares.desktop etc/skel/Desktop/
lubuntu/calamares-logs-helper usr/bin/
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/oem/calamares-raspiprep.sh usr/libexec/
lubuntu/oemconfig.tar.gz etc/calamares/
lubuntu/settings.conf etc/calamares/

View File

@ -1,3 +1,7 @@
# Although it's technically against policy, in this case it's justified because it's the only way
calamares-settings-lubuntu: package-contains-file-in-etc-skel etc/skel/Desktop/
calamares-settings-lubuntu: package-contains-file-in-etc-skel etc/skel/Desktop/calamares.desktop
# 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]

View File

@ -0,0 +1 @@
usr/lib/calamares/modules/automirror usr/lib/${DEB_HOST_MULTIARCH}/calamares/modules/automirror

View File

@ -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/

View File

@ -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]

1234
debian/changelog vendored

File diff suppressed because it is too large Load Diff

1
debian/compat vendored
View File

@ -1 +0,0 @@
11

102
debian/control vendored
View File

@ -3,14 +3,102 @@ Section: devel
Priority: optional
Maintainer: Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
Uploaders: Simon Quigley <tsimonq2@ubuntu.com>
Build-Depends: debhelper (>= 11), intltool, qttools5-dev-tools
Standards-Version: 4.1.5
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
Build-Depends: debhelper-compat (= 13),
dh-sequence-qmldeps,
cmake,
extra-cmake-modules,
fakeroot,
intltool,
libapt-pkg-dev,
libcalamares-dev (>= 3.3.13-0ubuntu4),
libkf6coreaddons-dev,
libqt6svg6-dev,
libyaml-cpp-dev,
python3,
qt6-base-dev,
qt6-declarative-dev,
qt6-l10n-tools,
qt6-tools-dev,
qt6-tools-dev-tools
Standards-Version: 4.7.2
Homepage: https://code.launchpad.net/~ubuntu-qt-code/+git/calamares-settings-ubuntu
Vcs-Browser: https://git.launchpad.net/~ubuntu-qt-code/+git/calamares-settings-ubuntu
Vcs-Git: https://git.launchpad.net/~ubuntu-qt-code/+git/calamares-settings-ubuntu
Rules-Requires-Root: no
Package: calamares-settings-kubuntu
Architecture: all
Depends: calamares-settings-ubuntu-common (>= ${binary:Version}),
${misc:Depends},
${qml6: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, squashfs-tools, ${misc:Depends}
Depends: calamares-settings-ubuntu-common (>= ${binary:Version}),
${misc:Depends},
${qml6:Depends}
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 Next.
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}),
qt6-style-kvantum,
qt6-style-kvantum-themes,
${misc:Depends},
${qml6: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.3.13-0ubuntu4),
calamares-settings-ubuntu-common-data (= ${binary:Version}),
cryptsetup,
dracut-core,
kdialog,
keyutils,
libglib2.0-bin,
snapd-seed-glue,
squashfs-tools,
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.
.
Common settings for all Ubuntu flavors.
Package: calamares-settings-ubuntu-common-data
Architecture: all
Depends: ${misc:Depends},
python3,
python3-distro,
Conflicts: calamares-settings-ubuntu-common (<< 1:25.04.16)
Replaces: calamares-settings-ubuntu-common (<< 1:25.04.16)
Description: Data for 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.
.
Architecture-independent data for the common Calamares settings.

29
debian/copyright vendored
View File

@ -2,7 +2,10 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Files: *
Copyright: 2014 Rohan Garg <shadeslayer@systems>
2017-2018 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
@ -19,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.

1
debian/qmldeps.overrides vendored Normal file
View File

@ -0,0 +1 @@
calamares.slideshow calamares

49
debian/rules vendored
View File

@ -1,4 +1,53 @@
#!/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
export PKGSELECT = "common/modules/pkgselect"
export PKGSELECTPROCESS = "common/modules/pkgselectprocess"
export USRDIR = "debian/calamares-settings-ubuntu-common/usr"
export DATA_USRDIR = "debian/calamares-settings-ubuntu-common-data/usr"
export MODULES_DIR = "debian/calamares-settings-ubuntu-common/usr/lib/$(DEB_HOST_MULTIARCH)/calamares/modules"
export DATA_MODULES_DIR = "debian/calamares-settings-ubuntu-common-data/usr/lib/calamares/modules"
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
%:
dh $@
override_dh_auto_configure:
(cd $(PKGSELECT) && mkdir build && cd build && cmake ..)
(cd $(PKGSELECTPROCESS) && mkdir build && cd build && cmake ..)
override_dh_auto_build:
make;
(cd $(PKGSELECT)/build && $(MAKE))
(cd $(PKGSELECTPROCESS)/build && $(MAKE))
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 $(MODULES_DIR) $(DATA_MODULES_DIR)
cp -vr common/modules/automirror $(DATA_MODULES_DIR)
mkdir -pv debian/calamares-settings-ubuntu-common-data/etc/calamares/modules
cp -vr common/modules/*.conf debian/calamares-settings-ubuntu-common-data/etc/calamares/modules
chmod 644 $(DATA_MODULES_DIR)/automirror/automirror.conf
chmod 644 $(DATA_MODULES_DIR)/automirror/module.desc
chmod 644 $(MODULES_DIR)/pkgselect/libcalamares_viewmodule_pkgselect.so
chmod 644 $(MODULES_DIR)/pkgselect/module.desc
mkdir -pv $(MODULES_DIR)/pkgselectprocess
cp -v $(PKGSELECTPROCESS)/build/*.so $(PKGSELECTPROCESS)/build/*.desc $(MODULES_DIR)/pkgselectprocess
chmod 644 $(MODULES_DIR)/pkgselectprocess/libcalamares_job_pkgselectprocess.so
chmod 644 $(MODULES_DIR)/pkgselectprocess/module.desc
mkdir -pv $(USRDIR)/libexec/ $(DATA_USRDIR)/libexec/
cp -v common/fixconkeys-part1 $(DATA_USRDIR)/libexec/fixconkeys-part1
cp -v common/fixconkeys-part2 $(DATA_USRDIR)/libexec/fixconkeys-part2
cp -v $(PKGSELECTPROCESS)/build/check_package $(USRDIR)/libexec/checkpackage-backend

21
kubuntu/README.md Normal file
View File

@ -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.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

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