Compare commits
382 Commits
ubuntu/14
...
ubuntu/plu
Author | SHA1 | Date | |
---|---|---|---|
|
ac31dfe838 | ||
68b4f76a29 | |||
694b57d395 | |||
3288d57e56 | |||
6cb7d4dc52 | |||
f26f191a17 | |||
c93e956a5e | |||
3282b74627 | |||
6b2555c998 | |||
52472914bb | |||
782b5feeee | |||
133641b96c | |||
de24f68f2b | |||
5a1835af47 | |||
197d24e295 | |||
dc3e8a738f | |||
abe9758e56 | |||
d6ff965abb | |||
71f067fbba | |||
7ba422ace8 | |||
68b993050c | |||
0c540f933a | |||
39ab8da0c8 | |||
|
af59433966 | ||
|
6c4331aa1b | ||
|
d3b7c6dbce | ||
|
571c964174 | ||
6633422407 | |||
9cca776896 | |||
ede40ead21 | |||
7080285492 | |||
d5ec2191d4 | |||
70fb145bf7 | |||
996be3ace8 | |||
067b1ef3bd | |||
0fea5bd853 | |||
bffde9297a | |||
95b9217d82 | |||
723b04b9f4 | |||
12bb9d642c | |||
76a66470c9 | |||
4111b8a7dd | |||
fc7f594848 | |||
7ce9170fe4 | |||
81a6192cd9 | |||
636fb54564 | |||
15de561729 | |||
e2073f896b | |||
a54615cb83 | |||
a202c2a229 | |||
0a87303cbc | |||
e24341cb0e | |||
9284c1f21b | |||
fd47fdaf63 | |||
718bd8dae1 | |||
1ff64e36fb | |||
0fc038aea9 | |||
0908c29cfb | |||
d3c20f92d0 | |||
|
9c08301c64 | ||
|
d6b8031044 | ||
|
945e04f624 | ||
|
8710134431 | ||
|
e7c9f13d84 | ||
|
1eaf731724 | ||
|
bd8d056a28 | ||
|
61488db395 | ||
|
d3a1223278 | ||
|
966ac04280 | ||
e687608175 | |||
f415963f24 | |||
6f9cb0434e | |||
|
f744e763f7 | ||
|
b9b706ce02 | ||
|
949a91e6ef | ||
|
a300fa7ba3 | ||
|
dcd969079c | ||
|
e073dc915c | ||
|
a5e93e5ff7 | ||
|
664da199e4 | ||
|
a5c2f4625e | ||
|
edc227001a | ||
|
be748bed19 | ||
0d29c20385 | |||
6959468d0c | |||
2843b10697 | |||
883c08282e | |||
4f1f85ef9c | |||
5674431193 | |||
b2766f78bc | |||
825b0631bd | |||
1b74da2587 | |||
0d65dd0d20 | |||
c48927d938 | |||
d19ba3878c | |||
ec477ab8e9 | |||
052f17fd80 | |||
b754ac1285 | |||
303ab727b5 | |||
c04b82b2fa | |||
ba4dae0174 | |||
cb54b1e186 | |||
1299a42d37 | |||
8696f7da83 | |||
fd49ee70fe | |||
1cc0cb1be9 | |||
f9d7cd9639 | |||
f461a8afec | |||
7256a4013a | |||
adcf60e0ee | |||
3f2cca27e9 | |||
1cebfe1fd8 | |||
be86ca1ec0 | |||
e3d1d6fe9c | |||
0f213e4269 | |||
1c4b837add | |||
8b924b0eeb | |||
27850a5f22 | |||
48a5f7d792 | |||
7bad26586e | |||
a6ece69a5a | |||
45d0d7bb62 | |||
991af8f043 | |||
ffc955d58e | |||
c8f33d68f7 | |||
8c60c69654 | |||
3cf89c92ab | |||
5356eeab97 | |||
4d0755e3f0 | |||
|
79aaacdae4 | ||
2e551c98e4 | |||
03d507b751 | |||
4629bba99c | |||
f777bbfa16 | |||
a649612fd2 | |||
c2fa148bc5 | |||
2389a13777 | |||
c000464ad5 | |||
62c5dee9e7 | |||
3e5f959765 | |||
efe57b6984 | |||
f8bf449335 | |||
61b3436848 | |||
c323c1df78 | |||
e54b912e24 | |||
52cf0936d6 | |||
e6f7fb2f5a | |||
dfe54b454d | |||
0ab235c89e | |||
24a11332de | |||
072c709db1 | |||
14c632b6d5 | |||
99dcbbec07 | |||
11ba0bb760 | |||
d4f3a7cbb3 | |||
473731f547 | |||
775de27505 | |||
a5a4c1bb3d | |||
dc16d97796 | |||
f14cf77d43 | |||
26c675cb3d | |||
57efcc96f9 | |||
e4fa30c3d2 | |||
d35567de95 | |||
1de2940b52 | |||
b0c000326b | |||
9f6b8f8e8a | |||
9b0d4c4394 | |||
b52736fc07 | |||
448d50f929 | |||
26e2cbac91 | |||
4b847dae69 | |||
f8e37f2a81 | |||
f31623c3b7 | |||
2be42e5594 | |||
ad4ab2cf25 | |||
3c0ae960b7 | |||
4dd1ad4040 | |||
cb55a5d0bd | |||
7fe4cfc8f7 | |||
8c2f95c375 | |||
4b5c7564fa | |||
|
7c553cade9 | ||
|
7df7fd8d36 | ||
|
9f711d1952 | ||
|
87c224b44f | ||
|
74168eea8b | ||
|
b3fff4b1a0 | ||
|
613f7dcdd9 | ||
|
046700eef5 | ||
|
462809be53 | ||
|
d2f526a390 | ||
|
2c4429ba8f | ||
1600aa1924 | |||
fb0c5f7457 | |||
|
65f9659b10 | ||
|
571786c537 | ||
|
b45da6833b | ||
|
fbc09d2b52 | ||
7d65c43dc8 | |||
2f4a39718e | |||
30c1bcd002 | |||
f01937c48a | |||
85211fef0d | |||
49332f8ac7 | |||
14f4aba8c3 | |||
33563a24d2 | |||
58706b13ff | |||
9ce85e5de5 | |||
27a43e3279 | |||
|
6d7e110c0c | ||
5d212e327b | |||
|
c13df45a36 | ||
|
53302f99fd | ||
|
9d29b34ec0 | ||
|
1c7f9f7c57 | ||
|
a45bcd47cf | ||
|
611885afc0 | ||
989a2c1d25 | |||
e2b457d54e | |||
e46a3a2c13 | |||
07b528bb8e | |||
ee0e98343a | |||
4d5aa76d05 | |||
8f36ff486f | |||
02c9e56863 | |||
|
8e4dd6ab5c | ||
5af9ce3a06 | |||
fe28365106 | |||
a1e074d8c7 | |||
6d64aa40f7 | |||
c6932db7fa | |||
e69a6b1b99 | |||
df7f7abf4e | |||
332dcf71a4 | |||
9efa3a5d54 | |||
1c4b181833 | |||
405efd5bee | |||
a3b7c93bc5 | |||
b3013a97ae | |||
|
82708a6093 | ||
|
621b60ad9d | ||
|
ed3170b37f | ||
f25350ba7b | |||
06fcece443 | |||
9dc360ffc7 | |||
23dde1516e | |||
481f235e47 | |||
297c69e9f8 | |||
c745f420ed | |||
|
3c1c1b2ef8 | ||
8123671afb | |||
f52413a647 | |||
6f639a0a75 | |||
86886d8ebf | |||
20073284a9 | |||
9bb6ff8ef8 | |||
60626a2fae | |||
|
63230172e4 | ||
b0ae6f47ed | |||
01c0bcafc8 | |||
|
d6982b94e5 | ||
|
35f736d83f | ||
|
66bedf2b2e | ||
|
031020bc3c | ||
|
a84e6f2513 | ||
2b451b0c03 | |||
6513905ecf | |||
d88f26d2ac | |||
|
3aacab9db3 | ||
|
a4d3a3547c | ||
|
565bb03037 | ||
|
a4008aa208 | ||
|
2e97965bb9 | ||
|
18d60f96fd | ||
|
79b19ea58e | ||
|
4bcbf7a2bf | ||
|
dab7ad8fbf | ||
|
402dc7d13a | ||
|
59a8b2b597 | ||
|
0315b34f66 | ||
|
d385b7fa62 | ||
|
27b10443ad | ||
|
d671e92039 | ||
2f179e636f | |||
|
394dc4f068 | ||
|
d396ff5e9f | ||
|
aa19196f75 | ||
00420b10e3 | |||
|
feaf80857a | ||
|
9d4402f377 | ||
|
7dcbf16c85 | ||
2cc0bed73b | |||
cacfe81115 | |||
d787e3fc20 | |||
d34d3ac983 | |||
a45f016346 | |||
|
72240d9fa0 | ||
|
e647964386 | ||
cd7fa92d15 | |||
1a4f60968a | |||
626f59a767 | |||
|
6cf62c82d0 | ||
|
7df30927fa | ||
|
053817ff0e | ||
|
b7e77646f2 | ||
|
043062ea43 | ||
|
b9c13cfb8d | ||
|
40a5fc1d0d | ||
|
7cb22b4a69 | ||
|
89c791e769 | ||
|
f16e3e1094 | ||
|
2ea0f7f12d | ||
|
25c5f3c7e4 | ||
|
48ccf8291f | ||
|
3ac42b4e25 | ||
|
5f9d673872 | ||
|
213f578b1d | ||
|
96ed9a0a21 | ||
|
16c302d2fa | ||
|
addf582ce8 | ||
|
9ed093012e | ||
|
e7b1e9e544 | ||
|
bfd00d9013 | ||
|
a0f70d3712 | ||
a392e286f3 | |||
07a443fb58 | |||
3915c9a26f | |||
|
8d0c107a0f | ||
|
df71fee23d | ||
|
a74f1abbfb | ||
74419de594 | |||
abc1aafe33 | |||
1364462c86 | |||
87a0d32242 | |||
21acfae10a | |||
4bf7f72786 | |||
9c6c1de9fe | |||
|
8914c0f210 | ||
|
27ac1c0161 | ||
|
10e4174f71 | ||
|
030028768b | ||
|
83fbe22b2f | ||
|
f0c827eb32 | ||
8c5e3a0061 | |||
|
c8068a4819 | ||
6db75e1ae8 | |||
|
7d0940466e | ||
fcc2036633 | |||
4f328dc3d7 | |||
|
c677c371ca | ||
|
71ea46cde5 | ||
|
7a2bfdb50c | ||
|
2106753efa | ||
|
1588b33eba | ||
|
bef3de7261 | ||
|
b4e5b38104 | ||
|
76432697a7 | ||
|
e91b5b2d3d | ||
|
e628ebc084 | ||
|
d9dc0546f6 | ||
|
8eeeac57c6 | ||
|
82b66ac9a3 | ||
|
d2394fa5a6 | ||
|
d6652367c5 | ||
|
cdbf98cc8c | ||
|
28499fdf8b | ||
|
2502b30166 | ||
|
a2e6868a2a | ||
|
ebdbcddd51 | ||
|
0cdb5a5e07 | ||
|
04e8090eae | ||
|
638e13824f | ||
|
eebe3db608 | ||
|
653fedc3b8 | ||
|
ba78fcd55a | ||
|
8236b6ad92 | ||
|
b798b3f55c | ||
|
8362219314 | ||
|
874785ad0c | ||
|
b292a53b8e | ||
|
d33cfb8e32 |
62
Makefile
@ -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
|
||||
|
@ -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.
|
||||
|
||||
|
24
archive/ubuntustudio/README.md
Normal 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/>.
|
BIN
archive/ubuntustudio/branding/ubuntustudio/Art.png
Normal file
After Width: | Height: | Size: 342 KiB |
BIN
archive/ubuntustudio/branding/ubuntustudio/Audio.png
Normal file
After Width: | Height: | Size: 329 KiB |
BIN
archive/ubuntustudio/branding/ubuntustudio/FindUs.png
Normal file
After Width: | Height: | Size: 404 KiB |
BIN
archive/ubuntustudio/branding/ubuntustudio/NewLook.png
Normal file
After Width: | Height: | Size: 379 KiB |
BIN
archive/ubuntustudio/branding/ubuntustudio/Photography.png
Normal file
After Width: | Height: | Size: 407 KiB |
BIN
archive/ubuntustudio/branding/ubuntustudio/Software.png
Normal file
After Width: | Height: | Size: 294 KiB |
BIN
archive/ubuntustudio/branding/ubuntustudio/Video.png
Normal file
After Width: | Height: | Size: 460 KiB |
31
archive/ubuntustudio/branding/ubuntustudio/branding.desc
Normal 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"
|
BIN
archive/ubuntustudio/branding/ubuntustudio/icon.png
Normal file
After Width: | Height: | Size: 22 KiB |
11
archive/ubuntustudio/branding/ubuntustudio/lang/Makefile
Executable 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
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>Få 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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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'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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>Få 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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
BIN
archive/ubuntustudio/branding/ubuntustudio/logo.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
106
archive/ubuntustudio/branding/ubuntustudio/show.qml
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
92
archive/ubuntustudio/branding/ubuntustudio/stylesheet.qss
Normal 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 { }
|
||||
*/
|
BIN
archive/ubuntustudio/branding/ubuntustudio/welcome.png
Normal file
After Width: | Height: | Size: 243 KiB |
119
archive/ubuntustudio/calamaresrc
Normal 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
|
4
archive/ubuntustudio/kded_device_automounterrc
Normal file
@ -0,0 +1,4 @@
|
||||
[General]
|
||||
AutomountEnabled=false
|
||||
AutomountOnLogin=false
|
||||
AutomountOnPlugin=false
|
45
common/basicwallpaper/CMakeLists.txt
Normal 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()
|
3
common/basicwallpaper/README.md
Normal 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.
|
28
common/basicwallpaper/main.cpp
Normal 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();
|
||||
}
|
43
common/basicwallpaper/mainwindow.cpp
Normal 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!";
|
||||
}
|
||||
}
|
24
common/basicwallpaper/mainwindow.h
Normal 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
|
22
common/basicwallpaper/mainwindow.ui
Normal 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
@ -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
@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
loadkeys "$(cat /dev/shm/fixconkeys-layout)"
|
||||
setupcon --save-only
|
||||
rm /usr/libexec/fixconkeys-part2
|
16
common/modules/automirror/automirror.conf
Normal 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
|
||||
|
126
common/modules/automirror/main.py
Normal 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)
|
5
common/modules/automirror/module.desc
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
type: "job"
|
||||
name: "automirror"
|
||||
interface: "python"
|
||||
script: "main.py"
|
18
common/modules/before_bootloader_context.conf
Normal 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
|
5
common/modules/copy_vmlinuz_shellprocess.conf
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
dontChroot: true
|
||||
timeout: 60
|
||||
script:
|
||||
- command: "cp /cdrom/casper/vmlinuz ${ROOT}/boot/vmlinuz-$(uname -r)"
|
3
common/modules/finished.conf
Normal file
@ -0,0 +1,3 @@
|
||||
---
|
||||
restartNowMode: user-checked
|
||||
restartNowCommand: "systemctl -i reboot"
|
2
common/modules/fstab.conf
Normal file
@ -0,0 +1,2 @@
|
||||
crypttabOptions: luks,keyscript=/bin/cat
|
||||
efiMountOptions: umask=0077
|
3
common/modules/grubcfg.conf
Normal file
@ -0,0 +1,3 @@
|
||||
overwrite: false
|
||||
defaults:
|
||||
GRUB_ENABLE_CRYPTODISK: true
|
8
common/modules/locale.conf
Normal 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"
|
@ -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
@ -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 ]
|
31
common/modules/pkgselect/CMakeLists.txt
Normal 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
|
||||
)
|
391
common/modules/pkgselect/PackageSelectViewStep.cpp
Normal 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>(); )
|
143
common/modules/pkgselect/PackageSelectViewStep.h
Normal 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
|
51
common/modules/pkgselect/pkgselect.conf
Normal 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"
|
380
common/modules/pkgselect/pkgselect.ui
Normal 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>
|
37
common/modules/pkgselectprocess/CMakeLists.txt
Normal 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})
|
573
common/modules/pkgselectprocess/PackageSelectProcess.cpp
Normal 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, ¤tDescription, 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();
|
||||
}
|
60
common/modules/pkgselectprocess/PackageSelectProcess.h
Normal 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
|
54
common/modules/pkgselectprocess/checkpackage-backend.cpp
Normal 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;
|
||||
}
|
7
common/modules/pkgselectprocess/module.desc
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
type: "job"
|
||||
name: "pkgselectprocess"
|
||||
interface: "qtplugin"
|
||||
load: "libcalamares_job_pkgselectprocess.so"
|
||||
noconfig: true
|
||||
weight: 12
|
5
common/modules/shellprocess_add386arch.conf
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
dontChroot: false
|
||||
timeout: 30
|
||||
script:
|
||||
- command: "/usr/bin/dpkg --add-architecture i386"
|
5
common/modules/shellprocess_bug-LP#1829805.conf
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
dontChroot: false
|
||||
timeout: 30
|
||||
script:
|
||||
- "touch ${ROOT}/boot/initrd.img-$(uname -r)"
|
7
common/modules/shellprocess_fix_oem_uid.conf
Normal 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"
|
5
common/modules/shellprocess_fixconkeys_part1.conf
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
dontChroot: true
|
||||
timeout: 30
|
||||
script:
|
||||
- /usr/libexec/fixconkeys-part1 ${ROOT}
|
5
common/modules/shellprocess_fixconkeys_part2.conf
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
dontChroot: false
|
||||
timeout: 10800
|
||||
script:
|
||||
- /usr/libexec/fixconkeys-part2
|
@ -2,4 +2,4 @@
|
||||
dontChroot: true
|
||||
timeout: 30
|
||||
script:
|
||||
- calamares-logs-helper @@ROOT@@
|
||||
- calamares-logs-helper ${ROOT}
|
4
common/modules/umount.conf
Normal 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
|
10
debian/calamares-settings-kubuntu.install
vendored
Normal 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/
|
7
debian/calamares-settings-kubuntu.lintian-overrides
vendored
Normal 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]
|
11
debian/calamares-settings-lubuntu.install
vendored
@ -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/
|
||||
|
@ -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]
|
||||
|
1
debian/calamares-settings-ubuntu-common.links
vendored
Normal file
@ -0,0 +1 @@
|
||||
usr/lib/calamares/modules/automirror usr/lib/${DEB_HOST_MULTIARCH}/calamares/modules/automirror
|
12
debian/calamares-settings-ubuntu-unity.install
vendored
Normal 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/
|
7
debian/calamares-settings-ubuntu-unity.lintian-overrides
vendored
Normal 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
1
debian/compat
vendored
@ -1 +0,0 @@
|
||||
11
|
102
debian/control
vendored
@ -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
@ -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
@ -0,0 +1 @@
|
||||
calamares.slideshow calamares
|
49
debian/rules
vendored
@ -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
@ -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/>.
|
BIN
kubuntu/branding/kubuntu/01_Easy_Install.png
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
kubuntu/branding/kubuntu/02_Customizable_Desktop.png
Normal file
After Width: | Height: | Size: 1.4 MiB |
BIN
kubuntu/branding/kubuntu/03_Built-in_Applications.png
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
kubuntu/branding/kubuntu/04_Performant.png
Normal file
After Width: | Height: | Size: 2.1 MiB |
BIN
kubuntu/branding/kubuntu/05_Secure_and_Private.png
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
kubuntu/branding/kubuntu/06_Community_Support.png
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
kubuntu/branding/kubuntu/07_Free_and_Open_Source.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
kubuntu/branding/kubuntu/08_Software_Compatibility.png
Normal file
After Width: | Height: | Size: 1.8 MiB |
BIN
kubuntu/branding/kubuntu/09_Beautiful_Aesthetics.png
Normal file
After Width: | Height: | Size: 2.4 MiB |
BIN
kubuntu/branding/kubuntu/10_Kubuntu_Focus.png
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
kubuntu/branding/kubuntu/11_Testimonials_of_Success.png
Normal file
After Width: | Height: | Size: 1.2 MiB |