diff --git a/.gitignore b/.gitignore
index eaa102a4e..15b198e0c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,6 @@ ubuntu-*-cloudimg-console.log
.DS_Store
*~
*.swp
+
+# Mainly generated by merge tools like 'meld'
+*.orig
diff --git a/README.md b/README.md
index cb70b5bdc..7672b4176 100644
--- a/README.md
+++ b/README.md
@@ -75,7 +75,7 @@ Build minimal CLI Debian buster based image for Odroid XU4. Use modern kernel an
```text
./compile.sh BOARD="odroidxu4" BRANCH="current" RELEASE="buster" CARD_DEVICE="/dev/sda" \
-KERNEL_ONLY="no" KERNEL_CONFIGURE="no" BUILD_DESKTOP="no" BUILD_MINIMAL="yes"
+KERNEL_ONLY="no" KERNEL_CONFIGURE="no" BUILD_DESKTOP="yes" RELEASE="focal" BUILD_DESKTOP="yes" DESKTOP_ENVIRONMENT="xfce" DESKTOP_ENVIRONMENT_CONFIG_NAME="config_full" DESKTOP_APPGROUPS_SELECTED="browsers editors programming"
```
[Build parameters, advanced build options, user defined configuration, build with Docker?](#additional-information)
diff --git a/VERSION b/VERSION
index 906042fed..c499058d2 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-21.02.0-trunk
+21.05.0-trunk
diff --git a/compile.sh b/compile.sh
index 5070c0cfc..6efe4c993 100755
--- a/compile.sh
+++ b/compile.sh
@@ -126,6 +126,10 @@ if [[ -z "$(command -v getfacl)" ]]; then
sudo apt-get update
sudo apt-get install -y acl
fi
+if [[ -z "$(command -v uuidgen)" ]]; then
+ sudo apt-get update
+ sudo apt-get install -y uuid-runtime
+fi
# Check for Vagrant
if [[ "${1}" == vagrant && -z "$(command -v vagrant)" ]]; then
diff --git a/config/boards/fe-som-rk3399.wip b/config/boards/fe-som-rk3399.wip
new file mode 100644
index 000000000..7ddfcf31a
--- /dev/null
+++ b/config/boards/fe-som-rk3399.wip
@@ -0,0 +1,9 @@
+# Rockchip RK3399 hexa core 2GB/4GB RAM SoC GBE USB3 USB-C WiFi/BT eMMC NVMe PCI-e i2c
+BOARD_NAME="FE-SOM-RK3399"
+BOARDFAMILY="rk3399"
+BOOTCONFIG="nanopc-t4-rk3399_defconfig"
+KERNEL_TARGET="legacy,current,dev"
+FULL_DESKTOP="yes"
+ASOUND_STATE="asound.state.rt5651"
+BOOT_LOGO="desktop"
+#BOOT_FDT_FILE="rockchip/fe-som-rk3399.dtb"
\ No newline at end of file
diff --git a/config/cli/bionic b/config/cli/bionic
new file mode 120000
index 000000000..aae2fdcd7
--- /dev/null
+++ b/config/cli/bionic
@@ -0,0 +1 @@
+focal
\ No newline at end of file
diff --git a/config/cli/bullseye/debootstrap/components b/config/cli/bullseye/debootstrap/components
new file mode 100644
index 000000000..ba2906d06
--- /dev/null
+++ b/config/cli/bullseye/debootstrap/components
@@ -0,0 +1 @@
+main
diff --git a/config/cli/bullseye/debootstrap/config_desktop/packages b/config/cli/bullseye/debootstrap/config_desktop/packages
new file mode 100644
index 000000000..404726787
--- /dev/null
+++ b/config/cli/bullseye/debootstrap/config_desktop/packages
@@ -0,0 +1 @@
+libgtk2.0-bin
diff --git a/config/cli/bullseye/debootstrap/packages b/config/cli/bullseye/debootstrap/packages
new file mode 100644
index 000000000..4ee34e5e1
--- /dev/null
+++ b/config/cli/bullseye/debootstrap/packages
@@ -0,0 +1,4 @@
+locales gnupg ifupdown apt-utils apt-transport-https ca-certificates bzip2 console-setup
+cpio cron dbus init initramfs-tools iputils-ping isc-dhcp-client kmod less libpam-systemd
+linux-base logrotate netbase netcat-openbsd rsyslog systemd sudo ucf udev whiptail
+wireless-regdb crda dmsetup rsync tzdata haveged fdisk
diff --git a/config/cli/bullseye/main/config_cli_standard/packages b/config/cli/bullseye/main/config_cli_standard/packages
new file mode 100644
index 000000000..ce2bdb670
--- /dev/null
+++ b/config/cli/bullseye/main/config_cli_standard/packages
@@ -0,0 +1,5 @@
+bridge-utils build-essential fbset iw wpasupplicant sudo linux-base crda wireless-regdb
+unattended-upgrades console-setup unicode-data initramfs-tools ca-certificates expect
+iptables automake html2text bison flex libwrap0-dev libssl-dev libnl-3-dev libnl-genl-3-dev
+keyboard-configuration gnupg2 networkd-dispatcher man-db hping3 command-not-found apt-file
+dkms python3-distutils python3-lib2to3
diff --git a/config/cli/bullseye/main/config_cli_standard/packages.additional b/config/cli/bullseye/main/config_cli_standard/packages.additional
new file mode 100644
index 000000000..ff3308b02
--- /dev/null
+++ b/config/cli/bullseye/main/config_cli_standard/packages.additional
@@ -0,0 +1,5 @@
+software-properties-common alsa-utils btrfs-progs dosfstools iotop stress screen
+ntfs-3g vim pciutils evtest pv libfuse2 libdigest-sha-perl
+libproc-processtable-perl aptitude dnsutils f3 haveged hdparm rfkill vlan bash-completion
+hostapd git ethtool unzip ifenslave libpam-systemd iperf3
+libnss-myhostname f2fs-tools avahi-autoipd iputils-arping qrencode sunxi-tools i2c-tools
diff --git a/config/cli/bullseye/main/config_desktop/packages b/config/cli/bullseye/main/config_desktop/packages
new file mode 100644
index 000000000..13d76123e
--- /dev/null
+++ b/config/cli/bullseye/main/config_desktop/packages
@@ -0,0 +1,4 @@
+bridge-utils build-essential fbset iw wpasupplicant sudo linux-base crda
+wireless-regdb unattended-upgrades console-setup unicode-data initramfs-tools
+ca-certificates expect iptables automake html2text bison flex libwrap0-dev
+libssl-dev libnl-3-dev libnl-genl-3-dev keyboard-configuration
diff --git a/config/cli/bullseye/main/config_desktop/packages.additional b/config/cli/bullseye/main/config_desktop/packages.additional
new file mode 100644
index 000000000..53ceceed5
--- /dev/null
+++ b/config/cli/bullseye/main/config_desktop/packages.additional
@@ -0,0 +1,5 @@
+software-properties-common alsa-utils btrfs-progs dosfstools iotop stress screen
+ntfs-3g vim pciutils evtest pv libfuse2 libdigest-sha-perl
+libproc-processtable-perl aptitude dnsutils f3 haveged hdparm rfkill vlan bash-completion
+hostapd git ethtool unzip ifenslave libpam-systemd iperf3
+libnss-myhostname f2fs-tools avahi-autoipd iputils-arping qrencode sunxi-tools
diff --git a/config/cli/bullseye/main/packages b/config/cli/bullseye/main/packages
new file mode 100644
index 000000000..59a297d2f
--- /dev/null
+++ b/config/cli/bullseye/main/packages
@@ -0,0 +1,3 @@
+bc cpufrequtils device-tree-compiler fping fake-hwclock psmisc chrony parted dialog
+ncurses-term sysfsutils toilet figlet u-boot-tools usbutils openssh-server nocache
+debconf-utils python3-apt
diff --git a/config/cli/bullseye/main/packages.additional b/config/cli/bullseye/main/packages.additional
new file mode 100644
index 000000000..8e79ef402
--- /dev/null
+++ b/config/cli/bullseye/main/packages.additional
@@ -0,0 +1,2 @@
+network-manager wireless-tools lsof htop mmc-utils wget nano sysstat net-tools resolvconf
+iozone3 jq libcrack2 cracklib-runtime curl mc i2c-tools
diff --git a/config/cli/buster/debootstrap/components b/config/cli/buster/debootstrap/components
new file mode 100644
index 000000000..ba2906d06
--- /dev/null
+++ b/config/cli/buster/debootstrap/components
@@ -0,0 +1 @@
+main
diff --git a/config/cli/buster/debootstrap/config_desktop/packages b/config/cli/buster/debootstrap/config_desktop/packages
new file mode 100644
index 000000000..404726787
--- /dev/null
+++ b/config/cli/buster/debootstrap/config_desktop/packages
@@ -0,0 +1 @@
+libgtk2.0-bin
diff --git a/config/cli/buster/debootstrap/packages b/config/cli/buster/debootstrap/packages
new file mode 100644
index 000000000..4ee34e5e1
--- /dev/null
+++ b/config/cli/buster/debootstrap/packages
@@ -0,0 +1,4 @@
+locales gnupg ifupdown apt-utils apt-transport-https ca-certificates bzip2 console-setup
+cpio cron dbus init initramfs-tools iputils-ping isc-dhcp-client kmod less libpam-systemd
+linux-base logrotate netbase netcat-openbsd rsyslog systemd sudo ucf udev whiptail
+wireless-regdb crda dmsetup rsync tzdata haveged fdisk
diff --git a/config/cli/buster/main/config_cli_standard/packages b/config/cli/buster/main/config_cli_standard/packages
new file mode 100644
index 000000000..78a4ce807
--- /dev/null
+++ b/config/cli/buster/main/config_cli_standard/packages
@@ -0,0 +1,5 @@
+bridge-utils build-essential fbset iw wpasupplicant sudo linux-base crda wireless-regdb
+unattended-upgrades console-setup unicode-data initramfs-tools ca-certificates expect
+iptables automake html2text bison flex libwrap0-dev libssl-dev libnl-3-dev libnl-genl-3-dev
+keyboard-configuration gnupg2 networkd-dispatcher man-db hping3 selinux-policy-default
+rng-tools command-not-found apt-file dkms python3-distutils python3-lib2to3
diff --git a/config/cli/buster/main/config_cli_standard/packages.additional b/config/cli/buster/main/config_cli_standard/packages.additional
new file mode 100644
index 000000000..ff3308b02
--- /dev/null
+++ b/config/cli/buster/main/config_cli_standard/packages.additional
@@ -0,0 +1,5 @@
+software-properties-common alsa-utils btrfs-progs dosfstools iotop stress screen
+ntfs-3g vim pciutils evtest pv libfuse2 libdigest-sha-perl
+libproc-processtable-perl aptitude dnsutils f3 haveged hdparm rfkill vlan bash-completion
+hostapd git ethtool unzip ifenslave libpam-systemd iperf3
+libnss-myhostname f2fs-tools avahi-autoipd iputils-arping qrencode sunxi-tools i2c-tools
diff --git a/config/cli/buster/main/config_desktop/packages b/config/cli/buster/main/config_desktop/packages
new file mode 100644
index 000000000..13d76123e
--- /dev/null
+++ b/config/cli/buster/main/config_desktop/packages
@@ -0,0 +1,4 @@
+bridge-utils build-essential fbset iw wpasupplicant sudo linux-base crda
+wireless-regdb unattended-upgrades console-setup unicode-data initramfs-tools
+ca-certificates expect iptables automake html2text bison flex libwrap0-dev
+libssl-dev libnl-3-dev libnl-genl-3-dev keyboard-configuration
diff --git a/config/cli/buster/main/config_desktop/packages.additional b/config/cli/buster/main/config_desktop/packages.additional
new file mode 100644
index 000000000..53ceceed5
--- /dev/null
+++ b/config/cli/buster/main/config_desktop/packages.additional
@@ -0,0 +1,5 @@
+software-properties-common alsa-utils btrfs-progs dosfstools iotop stress screen
+ntfs-3g vim pciutils evtest pv libfuse2 libdigest-sha-perl
+libproc-processtable-perl aptitude dnsutils f3 haveged hdparm rfkill vlan bash-completion
+hostapd git ethtool unzip ifenslave libpam-systemd iperf3
+libnss-myhostname f2fs-tools avahi-autoipd iputils-arping qrencode sunxi-tools
diff --git a/config/cli/buster/main/packages b/config/cli/buster/main/packages
new file mode 100644
index 000000000..59a297d2f
--- /dev/null
+++ b/config/cli/buster/main/packages
@@ -0,0 +1,3 @@
+bc cpufrequtils device-tree-compiler fping fake-hwclock psmisc chrony parted dialog
+ncurses-term sysfsutils toilet figlet u-boot-tools usbutils openssh-server nocache
+debconf-utils python3-apt
diff --git a/config/cli/buster/main/packages.additional b/config/cli/buster/main/packages.additional
new file mode 100644
index 000000000..704ca920c
--- /dev/null
+++ b/config/cli/buster/main/packages.additional
@@ -0,0 +1,2 @@
+network-manager wireless-tools lsof htop mmc-utils wget nano sysstat net-tools
+resolvconf iozone3 jq libcrack2 cracklib-runtime curl mc i2c-tools
diff --git a/config/cli/focal/debootstrap/components b/config/cli/focal/debootstrap/components
new file mode 100644
index 000000000..7df132ae4
--- /dev/null
+++ b/config/cli/focal/debootstrap/components
@@ -0,0 +1 @@
+main universe
diff --git a/config/cli/focal/debootstrap/config_desktop/packages b/config/cli/focal/debootstrap/config_desktop/packages
new file mode 100644
index 000000000..f79e9d59f
--- /dev/null
+++ b/config/cli/focal/debootstrap/config_desktop/packages
@@ -0,0 +1 @@
+libgtk2.0-bin dconf-cli libglib2.0-dev
diff --git a/config/cli/focal/debootstrap/packages b/config/cli/focal/debootstrap/packages
new file mode 100644
index 000000000..79555ee5b
--- /dev/null
+++ b/config/cli/focal/debootstrap/packages
@@ -0,0 +1,4 @@
+locales gnupg ifupdown apt-utils apt-transport-https ca-certificates bzip2 console-setup
+cpio cron dbus init initramfs-tools iputils-ping isc-dhcp-client kmod less libpam-systemd
+linux-base logrotate netbase netcat-openbsd rsyslog systemd sudo ucf udev whiptail
+wireless-regdb crda dmsetup rsync tzdata rng-tools fdisk
diff --git a/config/cli/focal/main/config_cli_standard/packages b/config/cli/focal/main/config_cli_standard/packages
new file mode 100644
index 000000000..fd59fbe64
--- /dev/null
+++ b/config/cli/focal/main/config_cli_standard/packages
@@ -0,0 +1,5 @@
+bridge-utils build-essential fbset iw wpasupplicant sudo linux-base crda wireless-regdb
+unattended-upgrades console-setup unicode-data initramfs-tools ca-certificates expect
+iptables automake html2text bison flex libwrap0-dev libssl-dev libnl-3-dev libnl-genl-3-dev
+keyboard-configuration gnupg2 networkd-dispatcher man-db hping3 selinux-policy-default
+dkms python3-distutils python3-lib2to3
diff --git a/config/cli/focal/main/config_cli_standard/packages.additional b/config/cli/focal/main/config_cli_standard/packages.additional
new file mode 100644
index 000000000..53ceceed5
--- /dev/null
+++ b/config/cli/focal/main/config_cli_standard/packages.additional
@@ -0,0 +1,5 @@
+software-properties-common alsa-utils btrfs-progs dosfstools iotop stress screen
+ntfs-3g vim pciutils evtest pv libfuse2 libdigest-sha-perl
+libproc-processtable-perl aptitude dnsutils f3 haveged hdparm rfkill vlan bash-completion
+hostapd git ethtool unzip ifenslave libpam-systemd iperf3
+libnss-myhostname f2fs-tools avahi-autoipd iputils-arping qrencode sunxi-tools
diff --git a/config/cli/focal/main/config_desktop/packages b/config/cli/focal/main/config_desktop/packages
new file mode 100644
index 000000000..ad3280db6
--- /dev/null
+++ b/config/cli/focal/main/config_desktop/packages
@@ -0,0 +1,4 @@
+bridge-utils build-essential fbset iw wpasupplicant sudo linux-base crda
+wireless-regdb unattended-upgrades console-setup unicode-data initramfs-tools
+ca-certificates expect iptables automake html2text bison flex libwrap0-dev
+libssl-dev libnl-3-dev libnl-genl-3-dev keyboard-configuration emacs-nox
diff --git a/config/cli/focal/main/config_desktop/packages.additional b/config/cli/focal/main/config_desktop/packages.additional
new file mode 100644
index 000000000..53ceceed5
--- /dev/null
+++ b/config/cli/focal/main/config_desktop/packages.additional
@@ -0,0 +1,5 @@
+software-properties-common alsa-utils btrfs-progs dosfstools iotop stress screen
+ntfs-3g vim pciutils evtest pv libfuse2 libdigest-sha-perl
+libproc-processtable-perl aptitude dnsutils f3 haveged hdparm rfkill vlan bash-completion
+hostapd git ethtool unzip ifenslave libpam-systemd iperf3
+libnss-myhostname f2fs-tools avahi-autoipd iputils-arping qrencode sunxi-tools
diff --git a/config/cli/focal/main/packages b/config/cli/focal/main/packages
new file mode 100644
index 000000000..59a297d2f
--- /dev/null
+++ b/config/cli/focal/main/packages
@@ -0,0 +1,3 @@
+bc cpufrequtils device-tree-compiler fping fake-hwclock psmisc chrony parted dialog
+ncurses-term sysfsutils toilet figlet u-boot-tools usbutils openssh-server nocache
+debconf-utils python3-apt
diff --git a/config/cli/focal/main/packages.additional b/config/cli/focal/main/packages.additional
new file mode 100644
index 000000000..704ca920c
--- /dev/null
+++ b/config/cli/focal/main/packages.additional
@@ -0,0 +1,2 @@
+network-manager wireless-tools lsof htop mmc-utils wget nano sysstat net-tools
+resolvconf iozone3 jq libcrack2 cracklib-runtime curl mc i2c-tools
diff --git a/config/cli/hirsute b/config/cli/hirsute
new file mode 120000
index 000000000..aae2fdcd7
--- /dev/null
+++ b/config/cli/hirsute
@@ -0,0 +1 @@
+focal
\ No newline at end of file
diff --git a/config/cli/sid b/config/cli/sid
new file mode 120000
index 000000000..766a99ab6
--- /dev/null
+++ b/config/cli/sid
@@ -0,0 +1 @@
+buster
\ No newline at end of file
diff --git a/config/desktop/README.md b/config/desktop/README.md
new file mode 100644
index 000000000..69228c491
--- /dev/null
+++ b/config/desktop/README.md
@@ -0,0 +1,102 @@
+
Desktop configuration
+
+Please use lowercase letters for all config / folder files
+
+```
+├──${RELEASE} The name of the distribution
+│ ├──environments DE packages lists and scripts
+│ │ ├──${DESKTOP_ENVIRONMENT} The name of the DE (xfce, gnome, kde, ...)
+│ │ │ |──${DESKTOP_ENVIRONMENT_CONFIG_NAME} Different configuration name prefixed with "config_" (config_basic, config_full, ... )
+│ │──appgroups Application groups packages lists and scripts
+│ │ ├──${DESKTOP_APPGROUPS_SELECTED} Appgroups names (editors, programming, ...)
+```
+
+In each directory representing a desktop environment, a desktop environment configuration or an appgroup, the following files can be present :
+
+* `packages`
+ If present, the content of the file will be added to the list
+ of packages 'required' by the Armbian desktop package.
+* `debian/postinst`
+ If present, the content of the file will be added to the `postinst`
+ script of the Armbian desktop package, which will be executed after
+ installing it.
+* `armbian/create_desktop_package.sh`
+ If present the content of this script will be executed, by the build
+ script, just before actually creating the Armbian Desktop `.deb`
+ package.
+ Any variable recognized and function defined by the build script,
+ at that point, can be used.
+* `sources/apt`
+ If present, the directory will be scanned for `.source` files,
+ which should contain APT URL, in a form that `add-apt-repository`
+ understand.
+ The system is restricted to ONLY ONE APT URL per file, since it's
+ basically calling :
+ `add-apt-repository $(cat "/that/apt/file.source")`
+ For each `.source` file parsed, if there's a corresponding
+ `.source.gpg` file, the file will be considered as a package
+ signing key and will be passed to `apt-key`.
+ For this one, the file is copied into `${SDCARD}/tmp` and then
+ **apt-key** is called like this : `apt-key "/tmp/file.source.gpg"`.
+
+Then in each directory representing a desktop environment, a desktop
+environment configuration or an appgroup, you can add :
+
+* `custom/boards/${BOARD}/`
+ For example `custom/orangepipc`.
+ A Board (odroidc4, tinkerboard, bananapi, ...) specific directory
+ where you can provide additional`packages`, `debian/postinst` and
+ `armbian/create_desktop_package.sh`.
+ The files, if present, will be parsed accordingly when building
+ for that specific board, if the element (desktop environment,
+ appgroup, ...) is selected.
+
+Then in each appgroup, you can add :
+
+* `custom/desktops/${DESTKOP_ENVIRONMENT}/`
+ For example `custom/desktops/xfce`.
+ A desktop environment specific directory where you can provide
+ additional `packages`, `debian/postinst` and
+ `armbian/create_desktop_package.sh`.
+ The files, if present, will be parsed accordingly if the appgroup
+ AND that desktop environment are both selected during a build.
+* `custom/boards/${BOARD}/custom/desktops/${DESTKOP_ENVIRONMENT}/`
+ For example `custom/boards/tinkerboard/custom/desktops/kde`.
+ A Board AND desktop environment specific directory where you can
+ provided additional `packages`, `debian/postinst` and
+ `armbian/create_desktop_package.sh`.
+ The files, if present, will be parsed accordingly if the appgroup,
+ that specific board and that specific desktop environments are
+ all selected during a build.
+
+### Adding a desktop environment
+
+> Currently, only official repositories are supported.
+
+Let's say that you want to add that new desktop environment
+"superduperde", that is now available on official on Debian/Ubuntu
+repositories.
+
+First, focus on one specific distribution like `focal` (Ubuntu)
+or `buster` (Debian). In our example, will take `focal`.
+We'll create our first configuration 'full', which should provide the
+DE along with all its specific apps, widgets and the kitchen sink.
+
+* Create the directory
+ `config/desktop/focal/environments/superduperde/config_full`
+* Create the file
+ `config/desktop/focal/environments/superduperde/config_full/packages`
+* Open the `packages` file, add the list of packages for `apt`.
+
+Then select it in the configuration menu, or pass the following
+variables to `./compile.sh` :
+
+```bash
+BUILD_DESKTOP="yes" RELEASE="focal" DESKTOP_ENVIRONMENT="superduperde" DESKTOP_ENVIRONMENT_CONFIG_NAME="config_full"
+```
+
+Then test the resulting image !
+
+### Tips
+
+Keep most complete configuration in latest stable versions (Ubuntu Focal and Ubuntu Buster) and link their sub-components / directories. The same goes for DE. We keep XFCE as a base and others linked to it - where this make sense.
\ No newline at end of file
diff --git a/config/desktop/bionic/appgroups b/config/desktop/bionic/appgroups
new file mode 120000
index 000000000..97784daa0
--- /dev/null
+++ b/config/desktop/bionic/appgroups
@@ -0,0 +1 @@
+../focal/appgroups
\ No newline at end of file
diff --git a/config/desktop/bionic/environments/xfce b/config/desktop/bionic/environments/xfce
new file mode 120000
index 000000000..e48eb6dc1
--- /dev/null
+++ b/config/desktop/bionic/environments/xfce
@@ -0,0 +1 @@
+../../focal/environments/xfce
\ No newline at end of file
diff --git a/config/desktop/bullseye/appgroups/browsers/armbian/create_desktop_package.sh b/config/desktop/bullseye/appgroups/browsers/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..a1bc70a52
--- /dev/null
+++ b/config/desktop/bullseye/appgroups/browsers/armbian/create_desktop_package.sh
@@ -0,0 +1,4 @@
+# install optimized browser configurations
+cp "${SRC}"/packages/blobs/desktop/chromium.conf "${destination}"/etc/armbian
+cp "${SRC}"/packages/blobs/desktop/firefox.conf "${destination}"/etc/armbian
+cp -R "${SRC}"/packages/blobs/desktop/chromium "${destination}"/etc/armbian
diff --git a/config/desktop/bullseye/appgroups/browsers/debian/postinst b/config/desktop/bullseye/appgroups/browsers/debian/postinst
new file mode 100644
index 000000000..831479914
--- /dev/null
+++ b/config/desktop/bullseye/appgroups/browsers/debian/postinst
@@ -0,0 +1,12 @@
+# overwrite stock chromium configuration
+if [ -d /etc/chromium-browser/ ]; then ln -sf /etc/armbian/chromium.conf /etc/chromium-browser/default; fi
+if [ -d /etc/chromium.d/ ]; then ln -sf /etc/armbian/chromium.conf /etc/chromium.d/chromium.conf; fi
+cp -R /etc/armbian/chromium /usr/share
+
+# overwrite stock firefox configuration
+if [ -d /etc/firefox/ ]; then ln -sf /etc/armbian/firefox.conf /etc/firefox/syspref.js; fi
+if [ -d /usr/lib/firefox-esr/ ]; then
+ ln -sf /etc/armbian/firefox.conf /usr/lib/firefox-esr/mozilla.cfg
+ echo 'pref("general.config.obscure_value", 0);' > /usr/lib/firefox-esr/defaults/pref/local-settings.js
+ echo 'pref("general.config.filename", "mozilla.cfg");' >> /usr/lib/firefox-esr/defaults/pref/local-settings.js
+fi
diff --git a/config/desktop/bullseye/appgroups/browsers/packages b/config/desktop/bullseye/appgroups/browsers/packages
new file mode 100644
index 000000000..5fd57ace5
--- /dev/null
+++ b/config/desktop/bullseye/appgroups/browsers/packages
@@ -0,0 +1 @@
+firefox-esr
diff --git a/config/desktop/bullseye/appgroups/chat b/config/desktop/bullseye/appgroups/chat
new file mode 120000
index 000000000..6fd6d4034
--- /dev/null
+++ b/config/desktop/bullseye/appgroups/chat
@@ -0,0 +1 @@
+../../buster/appgroups/chat
\ No newline at end of file
diff --git a/config/desktop/bullseye/appgroups/desktop_tools b/config/desktop/bullseye/appgroups/desktop_tools
new file mode 120000
index 000000000..6cac32ac7
--- /dev/null
+++ b/config/desktop/bullseye/appgroups/desktop_tools
@@ -0,0 +1 @@
+../../buster/appgroups/desktop_tools
\ No newline at end of file
diff --git a/config/desktop/bullseye/appgroups/editors b/config/desktop/bullseye/appgroups/editors
new file mode 120000
index 000000000..f5a1dbb9d
--- /dev/null
+++ b/config/desktop/bullseye/appgroups/editors
@@ -0,0 +1 @@
+../../buster/appgroups/editors
\ No newline at end of file
diff --git a/config/desktop/bullseye/appgroups/emails b/config/desktop/bullseye/appgroups/emails
new file mode 120000
index 000000000..5cc6c4a6d
--- /dev/null
+++ b/config/desktop/bullseye/appgroups/emails
@@ -0,0 +1 @@
+../../buster/appgroups/email
\ No newline at end of file
diff --git a/config/desktop/bullseye/appgroups/internet b/config/desktop/bullseye/appgroups/internet
new file mode 120000
index 000000000..755097ca5
--- /dev/null
+++ b/config/desktop/bullseye/appgroups/internet
@@ -0,0 +1 @@
+../../buster/appgroups/internet
\ No newline at end of file
diff --git a/config/desktop/bullseye/appgroups/internet-tools b/config/desktop/bullseye/appgroups/internet-tools
new file mode 120000
index 000000000..a441bfca2
--- /dev/null
+++ b/config/desktop/bullseye/appgroups/internet-tools
@@ -0,0 +1 @@
+../../buster/appgroups/internet-tools
\ No newline at end of file
diff --git a/config/desktop/bullseye/appgroups/multimedia b/config/desktop/bullseye/appgroups/multimedia
new file mode 120000
index 000000000..f974a28ac
--- /dev/null
+++ b/config/desktop/bullseye/appgroups/multimedia
@@ -0,0 +1 @@
+../../buster/appgroups/multimedia
\ No newline at end of file
diff --git a/config/desktop/bullseye/appgroups/office b/config/desktop/bullseye/appgroups/office
new file mode 120000
index 000000000..02e2dcb6f
--- /dev/null
+++ b/config/desktop/bullseye/appgroups/office
@@ -0,0 +1 @@
+../../buster/appgroups/office
\ No newline at end of file
diff --git a/config/desktop/bullseye/appgroups/programming b/config/desktop/bullseye/appgroups/programming
new file mode 120000
index 000000000..aa2c6e720
--- /dev/null
+++ b/config/desktop/bullseye/appgroups/programming
@@ -0,0 +1 @@
+../../buster/appgroups/programming
\ No newline at end of file
diff --git a/config/desktop/bullseye/appgroups/remote_desktop b/config/desktop/bullseye/appgroups/remote_desktop
new file mode 120000
index 000000000..f3f905728
--- /dev/null
+++ b/config/desktop/bullseye/appgroups/remote_desktop
@@ -0,0 +1 @@
+../../buster/appgroups/remote_desktop
\ No newline at end of file
diff --git a/config/desktop/bullseye/environments/gnome b/config/desktop/bullseye/environments/gnome
new file mode 120000
index 000000000..2cf0d20a5
--- /dev/null
+++ b/config/desktop/bullseye/environments/gnome
@@ -0,0 +1 @@
+../../buster/environments/gnome
\ No newline at end of file
diff --git a/config/desktop/bullseye/environments/mate/armbian/create_desktop_package.sh b/config/desktop/bullseye/environments/mate/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..25186ea4e
--- /dev/null
+++ b/config/desktop/bullseye/environments/mate/armbian/create_desktop_package.sh
@@ -0,0 +1,43 @@
+# install lightdm greeter
+cp -R "${SRC}"/packages/blobs/desktop/lightdm "${destination}"/etc/armbian
+
+# install default desktop settings
+mkdir -p "${destination}"/etc/skel
+cp -R "${SRC}"/packages/blobs/desktop/skel/. "${destination}"/etc/skel
+
+# install logo for login screen
+mkdir -p "${destination}"/usr/share/pixmaps/armbian
+cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/pixmaps/armbian
+
+# install wallpapers
+mkdir -p "${destination}"/usr/share/backgrounds/armbian/
+cp "${SRC}"/packages/blobs/desktop/wallpapers/armbian*.jpg "${destination}"/usr/share/backgrounds/armbian/
+
+mkdir -p "${destination}"/usr/share/mate-background-properties
+cat <<-EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml
+
+
+
+
+ Armbian light
+ /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+ Armbian dark
+ /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+EOF
+
+mkdir -p "${destination}"/usr/share/glib-2.0/schemas
+cat <<-EOF > "${destination}"/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override
+[org.gnome.desktop.background]
+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg'
+show-desktop-icons=true
+EOF
diff --git a/config/desktop/bullseye/environments/mate/config_base/packages b/config/desktop/bullseye/environments/mate/config_base/packages
new file mode 100644
index 000000000..a99670a68
--- /dev/null
+++ b/config/desktop/bullseye/environments/mate/config_base/packages
@@ -0,0 +1,25 @@
+xserver-xorg xserver-xorg-video-fbdev gvfs-backends gvfs-fuse xfonts-base xinit
+x11-xserver-utils mate-applets mate-applets-common mate-applet-brisk-menu mate-backgrounds
+mate-calc mate-calc-common mate-common mate-control-center mate-control-center-common
+mate-core mate-desktop mate-desktop-common mate-desktop-environment
+mate-desktop-environment-core mate-desktop-environment-extra
+mate-desktop-environment-extras mate-dock-applet mate-equake-applet mate-icon-theme
+mate-indicator-applet mate-indicator-applet-common mate-media mate-media-common mate-menu
+mate-menus mate-netbook mate-netbook-common mate-notification-daemon
+mate-notification-daemon-common mate-panel mate-panel-common mate-polkit mate-polkit-bin
+mate-polkit-common mate-power-manager mate-power-manager-common mate-screensaver
+mate-screensaver-common mate-sensors-applet mate-sensors-applet-common
+debian-mate-default-settings mate-session-manager mate-settings-daemon
+mate-settings-daemon-common mate-settings-daemon-dev mate-system-monitor
+mate-system-monitor-common mate-terminal mate-terminal-common mate-themes mate-tweak
+mate-user-guide mate-user-share mate-user-share-common mate-utils mate-utils-common
+mate-window-applets-common mate-window-buttons-applet mate-window-menu-applet
+mate-window-title-applet mate-applet-appmenu mate-sntray-plugin gtk2-engines
+gtk2-engines-murrine gtk2-engines-pixbuf libgtk2.0-bin network-manager-gnome
+gnome-keyring gcr libgck-1-0 p11-kit pasystray pavucontrol pulseaudio pavumeter
+bluez bluez-tools pulseaudio-module-bluetooth blueman libpam-gnome-keyring
+libgl1-mesa-dri profile-sync-daemon gnome-orca numix-gtk-theme synaptic apt-xapian-index
+lightdm lightdm-gtk-greeter-settings numix-gtk-theme dbus-x11 dictionaries-common
+hunspell-en-us tracker tracker-extract tracker-miner-fs gnome-packagekit
+apt-config-auto-update policykit-1 profile-sync-daemon software-properties-common
+system-config-printer system-config-printer-common printer-driver-all smbclient cifs-utils gdebi
diff --git a/config/desktop/bullseye/environments/mate/config_base/packages.uninstall b/config/desktop/bullseye/environments/mate/config_base/packages.uninstall
new file mode 100644
index 000000000..ec0762d75
--- /dev/null
+++ b/config/desktop/bullseye/environments/mate/config_base/packages.uninstall
@@ -0,0 +1 @@
+gdm3
\ No newline at end of file
diff --git a/config/desktop/bullseye/environments/mate/debian/postinst b/config/desktop/bullseye/environments/mate/debian/postinst
new file mode 100644
index 000000000..55d40480f
--- /dev/null
+++ b/config/desktop/bullseye/environments/mate/debian/postinst
@@ -0,0 +1,5 @@
+# overwrite stock lightdm greeter configuration
+if [ -d /etc/armbian/lightdm ]; then cp -R /etc/armbian/lightdm /etc/; fi
+
+# Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
+if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
diff --git a/config/desktop/bullseye/environments/mate/support b/config/desktop/bullseye/environments/mate/support
new file mode 100644
index 000000000..03cd47015
--- /dev/null
+++ b/config/desktop/bullseye/environments/mate/support
@@ -0,0 +1 @@
+csc
diff --git a/config/desktop/bullseye/environments/xfce b/config/desktop/bullseye/environments/xfce
new file mode 120000
index 000000000..d01871db2
--- /dev/null
+++ b/config/desktop/bullseye/environments/xfce
@@ -0,0 +1 @@
+../../buster/environments/xfce
\ No newline at end of file
diff --git a/config/desktop/buster/appgroups/browsers/armbian/create_desktop_package.sh b/config/desktop/buster/appgroups/browsers/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..a1bc70a52
--- /dev/null
+++ b/config/desktop/buster/appgroups/browsers/armbian/create_desktop_package.sh
@@ -0,0 +1,4 @@
+# install optimized browser configurations
+cp "${SRC}"/packages/blobs/desktop/chromium.conf "${destination}"/etc/armbian
+cp "${SRC}"/packages/blobs/desktop/firefox.conf "${destination}"/etc/armbian
+cp -R "${SRC}"/packages/blobs/desktop/chromium "${destination}"/etc/armbian
diff --git a/config/desktop/buster/appgroups/browsers/debian/postinst b/config/desktop/buster/appgroups/browsers/debian/postinst
new file mode 100644
index 000000000..831479914
--- /dev/null
+++ b/config/desktop/buster/appgroups/browsers/debian/postinst
@@ -0,0 +1,12 @@
+# overwrite stock chromium configuration
+if [ -d /etc/chromium-browser/ ]; then ln -sf /etc/armbian/chromium.conf /etc/chromium-browser/default; fi
+if [ -d /etc/chromium.d/ ]; then ln -sf /etc/armbian/chromium.conf /etc/chromium.d/chromium.conf; fi
+cp -R /etc/armbian/chromium /usr/share
+
+# overwrite stock firefox configuration
+if [ -d /etc/firefox/ ]; then ln -sf /etc/armbian/firefox.conf /etc/firefox/syspref.js; fi
+if [ -d /usr/lib/firefox-esr/ ]; then
+ ln -sf /etc/armbian/firefox.conf /usr/lib/firefox-esr/mozilla.cfg
+ echo 'pref("general.config.obscure_value", 0);' > /usr/lib/firefox-esr/defaults/pref/local-settings.js
+ echo 'pref("general.config.filename", "mozilla.cfg");' >> /usr/lib/firefox-esr/defaults/pref/local-settings.js
+fi
diff --git a/config/desktop/buster/appgroups/browsers/packages b/config/desktop/buster/appgroups/browsers/packages
new file mode 100644
index 000000000..b09c9bccb
--- /dev/null
+++ b/config/desktop/buster/appgroups/browsers/packages
@@ -0,0 +1 @@
+chromium firefox-esr
diff --git a/config/desktop/buster/appgroups/chat/packages b/config/desktop/buster/appgroups/chat/packages
new file mode 100644
index 000000000..43c58febc
--- /dev/null
+++ b/config/desktop/buster/appgroups/chat/packages
@@ -0,0 +1 @@
+hexchat telegram-desktop
diff --git a/config/desktop/buster/appgroups/desktop_tools/packages b/config/desktop/buster/appgroups/desktop_tools/packages
new file mode 100644
index 000000000..6dac7b556
--- /dev/null
+++ b/config/desktop/buster/appgroups/desktop_tools/packages
@@ -0,0 +1 @@
+bleachbit fbi kazam
diff --git a/config/desktop/buster/appgroups/editors/debian/postinst b/config/desktop/buster/appgroups/editors/debian/postinst
new file mode 100644
index 000000000..e69de29bb
diff --git a/config/desktop/buster/appgroups/editors/packages b/config/desktop/buster/appgroups/editors/packages
new file mode 100644
index 000000000..af822b48c
--- /dev/null
+++ b/config/desktop/buster/appgroups/editors/packages
@@ -0,0 +1 @@
+vim emacs geany code
diff --git a/config/desktop/buster/appgroups/email/packages b/config/desktop/buster/appgroups/email/packages
new file mode 100644
index 000000000..84daeddf7
--- /dev/null
+++ b/config/desktop/buster/appgroups/email/packages
@@ -0,0 +1 @@
+thunderbird
diff --git a/config/desktop/buster/appgroups/internet-tools/packages b/config/desktop/buster/appgroups/internet-tools/packages
new file mode 100644
index 000000000..02ac9d66e
--- /dev/null
+++ b/config/desktop/buster/appgroups/internet-tools/packages
@@ -0,0 +1 @@
+filezilla putty
diff --git a/config/desktop/buster/appgroups/internet/packages b/config/desktop/buster/appgroups/internet/packages
new file mode 100644
index 000000000..46d09b09d
--- /dev/null
+++ b/config/desktop/buster/appgroups/internet/packages
@@ -0,0 +1 @@
+qbittorrent transmission
diff --git a/config/desktop/buster/appgroups/multimedia/packages b/config/desktop/buster/appgroups/multimedia/packages
new file mode 100644
index 000000000..a92299ef1
--- /dev/null
+++ b/config/desktop/buster/appgroups/multimedia/packages
@@ -0,0 +1 @@
+mpv pithos gimp
diff --git a/config/desktop/buster/appgroups/office/packages b/config/desktop/buster/appgroups/office/packages
new file mode 100644
index 000000000..6a79d9929
--- /dev/null
+++ b/config/desktop/buster/appgroups/office/packages
@@ -0,0 +1 @@
+libreoffice libreoffice-style-tango
diff --git a/config/desktop/buster/appgroups/programming/packages b/config/desktop/buster/appgroups/programming/packages
new file mode 100644
index 000000000..0b9ee33b4
--- /dev/null
+++ b/config/desktop/buster/appgroups/programming/packages
@@ -0,0 +1 @@
+build-essential clang meld
diff --git a/config/desktop/buster/appgroups/remote_desktop/packages b/config/desktop/buster/appgroups/remote_desktop/packages
new file mode 100644
index 000000000..025a2f1dd
--- /dev/null
+++ b/config/desktop/buster/appgroups/remote_desktop/packages
@@ -0,0 +1 @@
+remmina
diff --git a/config/desktop/buster/environments/gnome/armbian/create_desktop_package.sh b/config/desktop/buster/environments/gnome/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..3f3edcc42
--- /dev/null
+++ b/config/desktop/buster/environments/gnome/armbian/create_desktop_package.sh
@@ -0,0 +1,32 @@
+# install default desktop settings
+mkdir -p "${destination}"/etc/skel
+cp -R "${SRC}"/packages/blobs/desktop/skel/. "${destination}"/etc/skel
+
+# install logo for login screen
+mkdir -p "${destination}"/usr/share/pixmaps/armbian
+cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/pixmaps/armbian
+
+# install wallpapers
+mkdir -p "${destination}"/usr/share/backgrounds/gnome/
+cp "${SRC}"/packages/blobs/desktop/wallpapers/armbian*.jpg "${destination}"/usr/share/backgrounds/gnome/
+mkdir -p "${destination}"/usr/share/gnome-background-properties
+cat <<-EOF > "${destination}"/usr/share/gnome-background-properties/armbian.xml
+
+
+
+
+ Armbian light
+ /usr/share/backgrounds/gnome/armbian18-Dre0x-Minum-light-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+ Armbian dark
+ /usr/share/backgrounds/gnome/armbian03-Dre0x-Minum-dark-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+EOF
diff --git a/config/desktop/buster/environments/gnome/config_base/packages b/config/desktop/buster/environments/gnome/config_base/packages
new file mode 100644
index 000000000..02bebb3d8
--- /dev/null
+++ b/config/desktop/buster/environments/gnome/config_base/packages
@@ -0,0 +1,24 @@
+xserver-xorg xserver-xorg-video-fbdev gvfs-backends xfonts-base xinit bubblewrap dbus-x11 dictionaries-common evolution-data-server
+evolution-data-server-common gcr geoclue-2.0 gir1.2-accountsservice-1.0 gir1.2-atspi-2.0 gir1.2-gck-1 gir1.2-gcr-3 gir1.2-gdesktopenums-3.0
+gir1.2-gdm-1.0 gir1.2-geoclue-2.0 gir1.2-gnomebluetooth-1.0 gir1.2-gnomedesktop-3.0 gir1.2-graphene-1.0 gir1.2-gweather-3.0 gir1.2-ibus-1.0
+gir1.2-json-1.0 gir1.2-mutter-3 gir1.2-nm-1.0 gir1.2-nma-1.0 gir1.2-polkit-1.0 gir1.2-rsvg-2.0 gir1.2-soup-2.4 gir1.2-upowerglib-1.0 gjs
+gnome-desktop3-data gnome-keyring gnome-session-bin gnome-session-common gnome-settings-daemon gnome-settings-daemon-common gnome-shell
+gnome-shell-common hunspell-en-us libaccountsservice0 libaspell15 libcamel-1.2-62 libebackend-1.2-10 libebook-1.2-19 libebook-contacts-1.2-2
+libecal-1.2-19 libedata-book-1.2-25 libedata-cal-1.2-29 libedataserver-1.2-23 libedataserverui-1.2-2 libenchant1c2a libfontenc1 libgck-1-0
+libgcr-base-3-1 libgcr-ui-3-1 libgdata-common libgdata22 libgdm1 libgeoclue-2-0 libgeocode-glib0 libgjs0g libgnome-autoar-0-0
+libgnome-bluetooth13 libgnome-desktop-3-17 libgoa-1.0-0b libgoa-1.0-common libgraphene-1.0-0 libgweather-3-15 libgweather-common libibus-1.0-5
+libical3 libimobiledevice6 libjavascriptcoregtk-4.0-18 libmutter-3-0 libnma0 libphonenumber7 libplist3 libprotobuf17 libtext-iconv-perl
+libunwind8 libupower-glib3 libusbmuxd4 libwebkit2gtk-4.0-37 libxaw7 libxfont2 libxkbfile1 libxmu6 libxmuu1 libxtst6 mutter mutter-common
+p11-kit p11-kit-modules pinentry-gnome3 upower x11-xkb-utils x11-xserver-utils xdg-dbus-proxy xserver-common xwayland zenity zenity-common
+gnome-session gdm3 terminator gnome-control-center libasound2 anacron at-spi2-core dmz-cursor-theme fonts-freefont-ttf fonts-urw-base35
+foomatic-db-compressed-ppds genisoimage ghostscript ghostscript-x gir1.2-goa-1.0 gir1.2-snapd-1 gnome-menus gnome-shell-extension-appindicator
+gnome-shell-extension-desktop-icons gvfs-bin inputattach libasound2-plugins libatk-adaptor libcairo-gobject-perl libcairo-perl libcue2
+libdee-1.0-4 libexempi8 libexiv2-14 libextutils-depends-perl libextutils-pkgconfig-perl libgexiv2-2 libglib-object-introspection-perl
+libglib-perl libglu1-mesa libgs9 libgs9-common libgsf-1-114 libgsf-1-common libgtk3-perl libgxps2 libidn11 libijs-0.35 libjbig2dec0
+libnautilus-extension1a libnotify-bin libpaper1 libpoppler-glib8 libpulsedsp libsasl2-modules libspeexdsp1 libtotem-plparser-common
+libtotem-plparser18 libtracker-control-2.0-0 libtracker-miner-2.0-0 libtracker-sparql-2.0-0 libu2f-udev libxxf86dga1 libyelp0 nautilus
+nautilus-data openprinting-ppds poppler-data printer-driver-pnm2ppa pulseaudio pulseaudio-utils python3-click python3-colorama python3-dateutil
+python3-debconf python3-debian python3-distutils python3-distutils-extra python3-yaml software-properties-gtk spice-vdagent tracker tracker-extract
+tracker-miner-fs gnome-packagekit apt-config-auto-update x11-apps x11-session-utils x11-utils xdg-desktop-portal xdg-user-dirs xdg-user-dirs-gtk
+xinput xorg xorg-docs-core yelp yelp-xsl pulseaudio-module-bluetooth pavucontrol gnome-shell-extension-trash cups system-config-printer-common
+system-config-printer gdebi
diff --git a/config/desktop/buster/environments/gnome/debian/postinst b/config/desktop/buster/environments/gnome/debian/postinst
new file mode 100644
index 000000000..55fb3a5c8
--- /dev/null
+++ b/config/desktop/buster/environments/gnome/debian/postinst
@@ -0,0 +1,44 @@
+# overwrite stock lightdm greeter configuration
+if [ -d /etc/armbian/lightdm ]; then cp -R /etc/armbian/lightdm /etc/; fi
+
+# Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
+if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
+
+# set wallpapper to armbian
+
+keys=/etc/dconf/db/local.d/00-bg
+locks=/etc/dconf/db/local.d/locks/background
+profile=/etc/dconf/profile/user
+
+install -Dv /dev/null $keys
+install -Dv /dev/null $locks
+install -Dv /dev/null $profile
+
+echo "[org/gnome/desktop/background]
+picture-uri='file:///usr/share/backgrounds/gnome/armbian03-Dre0x-Minum-dark-3840x2160.jpg'
+picture-options='zoom'
+primary-color='#456789'
+secondary-color='#FFFFFF'
+
+[org/gnome/desktop/screensaver]
+picture-uri='file:///usr/share/backgrounds/gnome/armbian03-Dre0x-Minum-dark-blurred-3840x2160.jpg'
+picture-options='zoom'
+primary-color='#456789'
+secondary-color='#FFFFFF'" >> $keys
+
+echo "/org/gnome/desktop/background/picture-uri
+/org/gnome/desktop/background/picture-options
+/org/gnome/desktop/background/primary-color
+/org/gnome/desktop/background/secondary-color
+
+/org/gnome/desktop/screensaver/picture-uri
+/org/gnome/desktop/screensaver/picture-options
+/org/gnome/desktop/screensaver/primary-color
+/org/gnome/desktop/screensaver/secondary-color" >> $locks
+
+echo "user-db:user
+system-db:local" >> $profile
+
+dconf update
+
+#sudo apt-get -y remove gnome-shell-extension-desktop-icons
diff --git a/config/desktop/buster/environments/gnome/only_for b/config/desktop/buster/environments/gnome/only_for
new file mode 100644
index 000000000..d40006758
--- /dev/null
+++ b/config/desktop/buster/environments/gnome/only_for
@@ -0,0 +1 @@
+arm64
diff --git a/config/desktop/buster/environments/gnome/support b/config/desktop/buster/environments/gnome/support
new file mode 100644
index 000000000..a23e5fb94
--- /dev/null
+++ b/config/desktop/buster/environments/gnome/support
@@ -0,0 +1 @@
+supported
diff --git a/config/desktop/buster/environments/lxde/armbian/create_desktop_package.sh b/config/desktop/buster/environments/lxde/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..25186ea4e
--- /dev/null
+++ b/config/desktop/buster/environments/lxde/armbian/create_desktop_package.sh
@@ -0,0 +1,43 @@
+# install lightdm greeter
+cp -R "${SRC}"/packages/blobs/desktop/lightdm "${destination}"/etc/armbian
+
+# install default desktop settings
+mkdir -p "${destination}"/etc/skel
+cp -R "${SRC}"/packages/blobs/desktop/skel/. "${destination}"/etc/skel
+
+# install logo for login screen
+mkdir -p "${destination}"/usr/share/pixmaps/armbian
+cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/pixmaps/armbian
+
+# install wallpapers
+mkdir -p "${destination}"/usr/share/backgrounds/armbian/
+cp "${SRC}"/packages/blobs/desktop/wallpapers/armbian*.jpg "${destination}"/usr/share/backgrounds/armbian/
+
+mkdir -p "${destination}"/usr/share/mate-background-properties
+cat <<-EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml
+
+
+
+
+ Armbian light
+ /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+ Armbian dark
+ /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+EOF
+
+mkdir -p "${destination}"/usr/share/glib-2.0/schemas
+cat <<-EOF > "${destination}"/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override
+[org.gnome.desktop.background]
+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg'
+show-desktop-icons=true
+EOF
diff --git a/config/desktop/buster/environments/lxde/config_base/packages b/config/desktop/buster/environments/lxde/config_base/packages
new file mode 100644
index 000000000..2387d2504
--- /dev/null
+++ b/config/desktop/buster/environments/lxde/config_base/packages
@@ -0,0 +1,14 @@
+xserver-xorg xserver-xorg-video-fbdev gvfs-backends xfonts-base xinit x11-xserver-utils lxappearance lxappearance-obconf lxde-common
+openbox-lxde-session lxde-icon-theme lxde lxde-core lxdm lxinput lxlauncher lxmenu-data lxmusic lxpanel lxpanel-data lxrandr
+lxde-settings-daemon lxlock lxpolkit lxsession lxsession-edit lxsession-logout lxtask lxterminal libmenu-cache-bin libmenu-cache-doc
+libmenu-cache3 task-lxde-desktop xinit xorg-docs-core x11-apps xorg-docs xscreensaver xfonts-100dpi xfonts-75dpi xfonts-scalable
+xcursor-themes xdg-user-dirs xdg-user-dirs-gtk keyutils redshift bluez bluez-tools bluez-cups brltty orca network-manager-pptp
+network-manager-l2tp network-manager-openconnect network-manager-openvpn network-manager-openvpn-gnome network-manager-vpnc cups
+cups-bsd cups-filters liblouisutdml-bin liblouis-bin blueman pulseaudio pulseaudio-module-bluetooth pamix pasystray pavucontrol
+pavumeter pavucontrol-qt gstreamer1.0-packagekit gstreamer1.0-plugins-base-apps libproxy1-plugin-gsettings libproxy1-plugin-networkmanager
+libu2f-udev libwmf0.2-7-gtk openprinting-ppds p7zip-full anacron doc-base foomatic-db-compressed-ppds ghostscript-x inputattach libatk-adaptor
+libgail-common libnotify-bin software-properties-gtk speech-dispatcher spice-vdagent zip lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings
+numix-gtk-theme terminator bubblewrap dbus-x11 dictionaries-common hunspell-en-us tracker tracker-extract tracker-miner-fs libgl1-mesa-dri
+policykit-1 profile-sync-daemon system-config-printer system-config-printer-common printer-driver-all software-properties-common samba
+smbclient cifs-utils synaptic apt-xapian-index gtk2-engines gtk2-engines-murrine gtk2-engines-pixbuf libgtk2.0-bin network-manager-gnome
+gnome-keyring gcr libgck-1-0 p11-kit libpam-gnome-keyring gdebi
diff --git a/config/desktop/buster/environments/lxde/debian/postinst b/config/desktop/buster/environments/lxde/debian/postinst
new file mode 100644
index 000000000..55d40480f
--- /dev/null
+++ b/config/desktop/buster/environments/lxde/debian/postinst
@@ -0,0 +1,5 @@
+# overwrite stock lightdm greeter configuration
+if [ -d /etc/armbian/lightdm ]; then cp -R /etc/armbian/lightdm /etc/; fi
+
+# Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
+if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
diff --git a/config/desktop/buster/environments/lxde/support b/config/desktop/buster/environments/lxde/support
new file mode 100644
index 000000000..03cd47015
--- /dev/null
+++ b/config/desktop/buster/environments/lxde/support
@@ -0,0 +1 @@
+csc
diff --git a/config/desktop/buster/environments/mate/armbian/create_desktop_package.sh b/config/desktop/buster/environments/mate/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..25186ea4e
--- /dev/null
+++ b/config/desktop/buster/environments/mate/armbian/create_desktop_package.sh
@@ -0,0 +1,43 @@
+# install lightdm greeter
+cp -R "${SRC}"/packages/blobs/desktop/lightdm "${destination}"/etc/armbian
+
+# install default desktop settings
+mkdir -p "${destination}"/etc/skel
+cp -R "${SRC}"/packages/blobs/desktop/skel/. "${destination}"/etc/skel
+
+# install logo for login screen
+mkdir -p "${destination}"/usr/share/pixmaps/armbian
+cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/pixmaps/armbian
+
+# install wallpapers
+mkdir -p "${destination}"/usr/share/backgrounds/armbian/
+cp "${SRC}"/packages/blobs/desktop/wallpapers/armbian*.jpg "${destination}"/usr/share/backgrounds/armbian/
+
+mkdir -p "${destination}"/usr/share/mate-background-properties
+cat <<-EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml
+
+
+
+
+ Armbian light
+ /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+ Armbian dark
+ /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+EOF
+
+mkdir -p "${destination}"/usr/share/glib-2.0/schemas
+cat <<-EOF > "${destination}"/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override
+[org.gnome.desktop.background]
+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg'
+show-desktop-icons=true
+EOF
diff --git a/config/desktop/buster/environments/mate/config_base/packages b/config/desktop/buster/environments/mate/config_base/packages
new file mode 100644
index 000000000..5a1b3b5a3
--- /dev/null
+++ b/config/desktop/buster/environments/mate/config_base/packages
@@ -0,0 +1,15 @@
+xserver-xorg xserver-xorg-video-fbdev gvfs-backends gvfs-fuse xfonts-base xinit x11-xserver-utils mate-applets mate-applets-common
+mate-applet-brisk-menu mate-backgrounds mate-calc mate-calc-common mate-common mate-control-center mate-control-center-common mate-core
+mate-desktop mate-desktop-common mate-desktop-environment mate-desktop-environment-core mate-desktop-environment-extra
+mate-desktop-environment-extras mate-dock-applet mate-equake-applet mate-icon-theme mate-icon-theme-faenza mate-indicator-applet
+mate-indicator-applet-common mate-media mate-media-common mate-menu mate-menus mate-netbook mate-netbook-common mate-notification-daemon
+mate-notification-daemon-common mate-panel mate-panel-common mate-polkit mate-polkit-bin mate-polkit-common mate-power-manager
+mate-power-manager-common mate-screensaver mate-screensaver-common mate-sensors-applet mate-sensors-applet-common debian-mate-default-settings
+mate-session-manager mate-settings-daemon mate-settings-daemon-common mate-settings-daemon-dev mate-system-monitor mate-system-monitor-common
+mate-terminal mate-terminal-common mate-themes mate-tweak mate-user-guide mate-user-share mate-user-share-common mate-utils mate-utils-common
+mate-window-applets-common mate-window-buttons-applet mate-window-menu-applet mate-window-title-applet mate-applet-appmenu mate-sntray-plugin
+gtk2-engines gtk2-engines-murrine gtk2-engines-pixbuf libgtk2.0-bin network-manager-gnome gnome-keyring gcr libgck-1-0 p11-kit pasystray
+pavucontrol pulseaudio pavumeter bluez bluez-tools pulseaudio-module-bluetooth blueman libpam-gnome-keyring libgl1-mesa-dri profile-sync-daemon
+gnome-orca numix-gtk-theme synaptic apt-xapian-index lightdm lightdm-gtk-greeter-settings numix-gtk-theme dbus-x11 dictionaries-common
+hunspell-en-us tracker tracker-extract tracker-miner-fs gnome-packagekit apt-config-auto-update policykit-1 profile-sync-daemon
+software-properties-common system-config-printer system-config-printer-common printer-driver-all smbclient cifs-utils gdebi
diff --git a/config/desktop/buster/environments/mate/config_base/packages.uninstall b/config/desktop/buster/environments/mate/config_base/packages.uninstall
new file mode 100644
index 000000000..ec0762d75
--- /dev/null
+++ b/config/desktop/buster/environments/mate/config_base/packages.uninstall
@@ -0,0 +1 @@
+gdm3
\ No newline at end of file
diff --git a/config/desktop/buster/environments/mate/debian/postinst b/config/desktop/buster/environments/mate/debian/postinst
new file mode 100644
index 000000000..55d40480f
--- /dev/null
+++ b/config/desktop/buster/environments/mate/debian/postinst
@@ -0,0 +1,5 @@
+# overwrite stock lightdm greeter configuration
+if [ -d /etc/armbian/lightdm ]; then cp -R /etc/armbian/lightdm /etc/; fi
+
+# Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
+if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
diff --git a/config/desktop/buster/environments/mate/support b/config/desktop/buster/environments/mate/support
new file mode 100644
index 000000000..03cd47015
--- /dev/null
+++ b/config/desktop/buster/environments/mate/support
@@ -0,0 +1 @@
+csc
diff --git a/config/desktop/buster/environments/xfce/armbian/create_desktop_package.sh b/config/desktop/buster/environments/xfce/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..4b1167fed
--- /dev/null
+++ b/config/desktop/buster/environments/xfce/armbian/create_desktop_package.sh
@@ -0,0 +1,22 @@
+# install lightdm greeter
+cp -R "${SRC}"/packages/blobs/desktop/lightdm "${destination}"/etc/armbian
+
+# install default desktop settings
+mkdir -p "${destination}"/etc/skel
+cp -R "${SRC}"/packages/blobs/desktop/skel/. "${destination}"/etc/skel
+
+# using different icon pack. Workaround due to this bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=867779
+sed -i 's//g' \
+"${destination}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
+
+# install dedicated startup icons
+mkdir -p "${destination}"/usr/share/pixmaps/armbian "${destination}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/
+cp "${SRC}/packages/blobs/desktop/icons/${DISTRIBUTION,,}.png" "${destination}"/usr/share/pixmaps/armbian
+sed 's/xenial.png/'"${DISTRIBUTION,,}"'.png/' -i "${destination}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
+
+# install logo for login screen
+cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/pixmaps/armbian
+
+# install wallpapers
+mkdir -p "${destination}"/usr/share/backgrounds/armbian/
+cp "${SRC}"/packages/blobs/desktop/wallpapers/armbian*.jpg "${destination}"/usr/share/backgrounds/armbian/
diff --git a/config/desktop/buster/environments/xfce/config_base/packages b/config/desktop/buster/environments/xfce/config_base/packages
new file mode 100644
index 000000000..9074cdcf1
--- /dev/null
+++ b/config/desktop/buster/environments/xfce/config_base/packages
@@ -0,0 +1,7 @@
+xserver-xorg xserver-xorg-video-fbdev gvfs-backends gvfs-fuse xfonts-base xinit x11-xserver-utils xfce4 lxtask xfce4-terminal
+thunar-volman gtk2-engines gtk2-engines-murrine gtk2-engines-pixbuf libgtk2.0-bin network-manager-gnome xfce4-notifyd gnome-keyring
+gcr libgck-1-0 p11-kit pasystray pavucontrol pulseaudio pavumeter bluez bluez-tools pulseaudio-module-bluetooth blueman libpam-gnome-keyring
+libgl1-mesa-dri policykit-1 profile-sync-daemon gnome-orca numix-gtk-theme synaptic apt-xapian-index lightdm lightdm-gtk-greeter
+lightdm-gtk-greeter-settings numix-gtk-theme system-config-printer system-config-printer-common printer-driver-all dbus-x11 dbus-x11
+dictionaries-common hunspell-en-us tracker tracker-extract tracker-miner-fs policykit-1 profile-sync-daemon software-properties-common
+samba smbclient cifs-utils xfce4-screenshooter gdebi
diff --git a/config/desktop/buster/environments/xfce/config_base/packages.uninstall b/config/desktop/buster/environments/xfce/config_base/packages.uninstall
new file mode 100644
index 000000000..ec0762d75
--- /dev/null
+++ b/config/desktop/buster/environments/xfce/config_base/packages.uninstall
@@ -0,0 +1 @@
+gdm3
\ No newline at end of file
diff --git a/config/desktop/buster/environments/xfce/debian/postinst b/config/desktop/buster/environments/xfce/debian/postinst
new file mode 100644
index 000000000..5a52d6ee7
--- /dev/null
+++ b/config/desktop/buster/environments/xfce/debian/postinst
@@ -0,0 +1,18 @@
+# overwrite stock lightdm greeter configuration
+if [ -d /etc/armbian/lightdm ]; then cp -R /etc/armbian/lightdm /etc/; fi
+
+# Adjust menu
+if [ -f /etc/xdg/menus/xfce-applications.menu ]; then
+sed -i -n '/Settings<\/Menuname>/{p;:a;N;/xfce4-session-logout.desktop<\/Filename>/!ba;s/.*\n/\
+\t\n\t\n \n armbian-donate.desktop<\/Filename>\
+\n armbian-support.desktop<\/Filename>\n/};p' /etc/xdg/menus/xfce-applications.menu
+fi
+
+# Hide few items
+if [ -f /usr/share/applications/display-im6.q16.desktop ]; then mv /usr/share/applications/display-im6.q16.desktop /usr/share/applications/display-im6.q16.desktop.hidden; fi
+if [ -f /usr/share/applications/display-im6.desktop ]]; then mv /usr/share/applications/display-im6.desktop /usr/share/applications/display-im6.desktop.hidden; fi
+if [ -f /usr/share/applications/vim.desktop ]]; then mv /usr/share/applications/vim.desktop /usr/share/applications/vim.desktop.hidden; fi
+if [ -f /usr/share/applications/libreoffice-startcenter.desktop ]]; then mv /usr/share/applications/libreoffice-startcenter.desktop /usr/share/applications/libreoffice-startcenter.desktop.hidden; fi
+
+# Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
+if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
diff --git a/config/desktop/buster/environments/xfce/support b/config/desktop/buster/environments/xfce/support
new file mode 100644
index 000000000..a23e5fb94
--- /dev/null
+++ b/config/desktop/buster/environments/xfce/support
@@ -0,0 +1 @@
+supported
diff --git a/config/desktop/focal/appgroups/3dsupport/packages b/config/desktop/focal/appgroups/3dsupport/packages
new file mode 100644
index 000000000..e9bd455de
--- /dev/null
+++ b/config/desktop/focal/appgroups/3dsupport/packages
@@ -0,0 +1 @@
+mesa-utils mesa-utils-extra glmark2
diff --git a/config/desktop/focal/appgroups/3dsupport/sources/apt/oibaf.source b/config/desktop/focal/appgroups/3dsupport/sources/apt/oibaf.source
new file mode 100644
index 000000000..2e6ad7c70
--- /dev/null
+++ b/config/desktop/focal/appgroups/3dsupport/sources/apt/oibaf.source
@@ -0,0 +1 @@
+ppa:oibaf/graphics-drivers
\ No newline at end of file
diff --git a/config/desktop/focal/appgroups/browsers/armbian/create_desktop_package.sh b/config/desktop/focal/appgroups/browsers/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..a1bc70a52
--- /dev/null
+++ b/config/desktop/focal/appgroups/browsers/armbian/create_desktop_package.sh
@@ -0,0 +1,4 @@
+# install optimized browser configurations
+cp "${SRC}"/packages/blobs/desktop/chromium.conf "${destination}"/etc/armbian
+cp "${SRC}"/packages/blobs/desktop/firefox.conf "${destination}"/etc/armbian
+cp -R "${SRC}"/packages/blobs/desktop/chromium "${destination}"/etc/armbian
diff --git a/config/desktop/focal/appgroups/browsers/debian/postinst b/config/desktop/focal/appgroups/browsers/debian/postinst
new file mode 100644
index 000000000..831479914
--- /dev/null
+++ b/config/desktop/focal/appgroups/browsers/debian/postinst
@@ -0,0 +1,12 @@
+# overwrite stock chromium configuration
+if [ -d /etc/chromium-browser/ ]; then ln -sf /etc/armbian/chromium.conf /etc/chromium-browser/default; fi
+if [ -d /etc/chromium.d/ ]; then ln -sf /etc/armbian/chromium.conf /etc/chromium.d/chromium.conf; fi
+cp -R /etc/armbian/chromium /usr/share
+
+# overwrite stock firefox configuration
+if [ -d /etc/firefox/ ]; then ln -sf /etc/armbian/firefox.conf /etc/firefox/syspref.js; fi
+if [ -d /usr/lib/firefox-esr/ ]; then
+ ln -sf /etc/armbian/firefox.conf /usr/lib/firefox-esr/mozilla.cfg
+ echo 'pref("general.config.obscure_value", 0);' > /usr/lib/firefox-esr/defaults/pref/local-settings.js
+ echo 'pref("general.config.filename", "mozilla.cfg");' >> /usr/lib/firefox-esr/defaults/pref/local-settings.js
+fi
diff --git a/config/desktop/focal/appgroups/browsers/packages b/config/desktop/focal/appgroups/browsers/packages
new file mode 100644
index 000000000..dbfb8f931
--- /dev/null
+++ b/config/desktop/focal/appgroups/browsers/packages
@@ -0,0 +1 @@
+firefox
diff --git a/config/desktop/focal/appgroups/chat/packages b/config/desktop/focal/appgroups/chat/packages
new file mode 100644
index 000000000..6cf68e662
--- /dev/null
+++ b/config/desktop/focal/appgroups/chat/packages
@@ -0,0 +1 @@
+hexchat
\ No newline at end of file
diff --git a/config/desktop/focal/appgroups/desktop_tools/packages b/config/desktop/focal/appgroups/desktop_tools/packages
new file mode 100644
index 000000000..0771e8c1c
--- /dev/null
+++ b/config/desktop/focal/appgroups/desktop_tools/packages
@@ -0,0 +1 @@
+bleachbit fbi kazam gparted
diff --git a/config/desktop/focal/appgroups/editors/debian/postinst b/config/desktop/focal/appgroups/editors/debian/postinst
new file mode 100644
index 000000000..e69de29bb
diff --git a/config/desktop/focal/appgroups/editors/packages b/config/desktop/focal/appgroups/editors/packages
new file mode 100644
index 000000000..0ce5d2504
--- /dev/null
+++ b/config/desktop/focal/appgroups/editors/packages
@@ -0,0 +1 @@
+vim emacs notepadqq
diff --git a/config/desktop/focal/appgroups/email/packages b/config/desktop/focal/appgroups/email/packages
new file mode 100644
index 000000000..84daeddf7
--- /dev/null
+++ b/config/desktop/focal/appgroups/email/packages
@@ -0,0 +1 @@
+thunderbird
diff --git a/config/desktop/focal/appgroups/internet/packages b/config/desktop/focal/appgroups/internet/packages
new file mode 100644
index 000000000..d67c64abf
--- /dev/null
+++ b/config/desktop/focal/appgroups/internet/packages
@@ -0,0 +1 @@
+transmission transmission-remote-gtk filezilla putty
diff --git a/config/desktop/focal/appgroups/languages/packages b/config/desktop/focal/appgroups/languages/packages
new file mode 100644
index 000000000..491aa5c30
--- /dev/null
+++ b/config/desktop/focal/appgroups/languages/packages
@@ -0,0 +1,2 @@
+language-pack-gnome-sl language-pack-gnome-de language-pack-gnome-fr language-pack-gnome-it
+language-pack-gnome-es language-pack-gnome-pt language-pack-gnome-ru
diff --git a/config/desktop/focal/appgroups/multimedia/packages b/config/desktop/focal/appgroups/multimedia/packages
new file mode 100644
index 000000000..0043ac698
--- /dev/null
+++ b/config/desktop/focal/appgroups/multimedia/packages
@@ -0,0 +1 @@
+mpv gimp celluloid
diff --git a/config/desktop/focal/appgroups/office/packages b/config/desktop/focal/appgroups/office/packages
new file mode 100644
index 000000000..f23d8ffb3
--- /dev/null
+++ b/config/desktop/focal/appgroups/office/packages
@@ -0,0 +1 @@
+libreoffice libreoffice-style-elementary simple-scan
diff --git a/config/desktop/focal/appgroups/programming/custom/desktops/gnome/packages b/config/desktop/focal/appgroups/programming/custom/desktops/gnome/packages
new file mode 100644
index 000000000..f9858e1ca
--- /dev/null
+++ b/config/desktop/focal/appgroups/programming/custom/desktops/gnome/packages
@@ -0,0 +1 @@
+gnome-builder geany
diff --git a/config/desktop/focal/appgroups/programming/custom/desktops/kde/packages b/config/desktop/focal/appgroups/programming/custom/desktops/kde/packages
new file mode 100644
index 000000000..1dafd1928
--- /dev/null
+++ b/config/desktop/focal/appgroups/programming/custom/desktops/kde/packages
@@ -0,0 +1 @@
+kdevelop qtcreator
diff --git a/config/desktop/focal/appgroups/programming/packages b/config/desktop/focal/appgroups/programming/packages
new file mode 100644
index 000000000..c91b3576e
--- /dev/null
+++ b/config/desktop/focal/appgroups/programming/packages
@@ -0,0 +1 @@
+build-essential clang meld regexxer
diff --git a/config/desktop/focal/appgroups/remote_desktop/packages b/config/desktop/focal/appgroups/remote_desktop/packages
new file mode 100644
index 000000000..025a2f1dd
--- /dev/null
+++ b/config/desktop/focal/appgroups/remote_desktop/packages
@@ -0,0 +1 @@
+remmina
diff --git a/config/desktop/focal/environments/budgie/armbian/create_desktop_package.sh b/config/desktop/focal/environments/budgie/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..fee2970ac
--- /dev/null
+++ b/config/desktop/focal/environments/budgie/armbian/create_desktop_package.sh
@@ -0,0 +1,43 @@
+# install lightdm greeter
+cp -R "${SRC}"/packages/blobs/desktop/lightdm "${destination}"/etc/armbian
+
+# install default desktop settings
+mkdir -p "${destination}"/etc/skel
+cp -R "${SRC}"/packages/blobs/desktop/skel/. "${destination}"/etc/skel
+
+# install logo for login screen
+mkdir -p "${destination}"/usr/share/pixmaps/armbian
+cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/pixmaps/armbian
+
+# install wallpapers
+mkdir -p "${destination}"/usr/share/backgrounds/armbian/
+cp "${SRC}"/packages/blobs/desktop/wallpapers/armbian*.jpg "${destination}"/usr/share/backgrounds/armbian/
+
+mkdir -p "${destination}"/usr/share/gnome-background-properties
+cat <<-EOF > "${destination}"/usr/share/gnome-background-properties/armbian.xml
+
+
+
+
+ Armbian light
+ /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+ Armbian dark
+ /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+EOF
+
+mkdir -p "${destination}"/usr/share/glib-2.0/schemas
+cat <<-EOF > "${destination}"/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override
+[org.gnome.desktop.background]
+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg'
+show-desktop-icons=true
+EOF
\ No newline at end of file
diff --git a/config/desktop/focal/environments/budgie/config_base/packages b/config/desktop/focal/environments/budgie/config_base/packages
new file mode 100644
index 000000000..9f0ce77fa
--- /dev/null
+++ b/config/desktop/focal/environments/budgie/config_base/packages
@@ -0,0 +1,18 @@
+xserver-xorg xserver-xorg-video-fbdev gvfs-backends xfonts-base xinit x11-xserver-utils budgie-desktop budgie-app-launcher-applet
+budgie-applications-menu-applet budgie-appmenu-applet budgie-brightness-controller-applet budgie-clockworks-applet budgie-countdown-applet
+budgie-desktop-doc budgie-desktop-environment budgie-dropby-applet budgie-extras-common budgie-extras-daemon budgie-fuzzyclock-applet
+budgie-hotcorners-applet budgie-indicator-applet budgie-kangaroo-applet budgie-keyboard-autoswitch-applet budgie-network-manager-applet
+budgie-previews budgie-previews-applet budgie-quickchar budgie-quicknote-applet budgie-recentlyused-applet budgie-rotation-lock-applet
+budgie-showtime-applet budgie-sntray-plugin budgie-takeabreak-applet budgie-trash-applet budgie-visualspace-applet budgie-wallpapers-focal
+budgie-wallstreet budgie-weathershow-applet budgie-welcome budgie-window-mover-applet budgie-window-shuffler budgie-workspace-overview-applet
+budgie-workspace-stopwatch-applet budgie-workspace-wallpaper-applet plank xinit xorg-docs-core x11-apps xorg-docs xscreensaver xfonts-100dpi
+xfonts-75dpi xfonts-scalable xcursor-themes xdg-user-dirs xdg-user-dirs-gtk keyutils redshift bluez-tools bluez-cups brltty orca
+policykit-desktop-privileges network-manager-pptp network-manager-l2tp network-manager-openconnect network-manager-openvpn
+network-manager-openvpn-gnome network-manager-vpnc cups cups-bsd cups-filters liblouisutdml-bin liblouis-bin blueman pamix pasystray pavucontrol
+pavumeter pavucontrol-qt gstreamer1.0-packagekit gstreamer1.0-plugins-base-apps libproxy1-plugin-gsettings libproxy1-plugin-networkmanager
+libu2f-udev libwmf0.2-7-gtk openprinting-ppds p7zip-full policykit-desktop-privileges anacron doc-base foomatic-db-compressed-ppds
+ghostscript-x inputattach kerneloops language-pack-en libatk-adaptor libgail-common libnotify-bin software-properties-gtk speech-dispatcher
+spice-vdagent zip lightdm lightdm-gtk-greeter lightdm-settings lightdm-gtk-greeter-settings numix-gtk-theme terminator gnome-terminal bubblewrap
+dbus-x11 dictionaries-common hunspell-en-us nautilus nautilus-data tracker tracker-extract tracker-miner-fs update-manager update-manager-core
+update-notifier update-notifier-common libgl1-mesa-dri policykit-1 profile-sync-daemon system-config-printer system-config-printer-common
+printer-driver-all software-properties-common samba smbclient cifs-utils pulseaudio-module-bluetooth gdebi
diff --git a/config/desktop/focal/environments/budgie/config_base/packages.uninstall b/config/desktop/focal/environments/budgie/config_base/packages.uninstall
new file mode 100644
index 000000000..ec0762d75
--- /dev/null
+++ b/config/desktop/focal/environments/budgie/config_base/packages.uninstall
@@ -0,0 +1 @@
+gdm3
\ No newline at end of file
diff --git a/config/desktop/focal/environments/budgie/debian/postinst b/config/desktop/focal/environments/budgie/debian/postinst
new file mode 100644
index 000000000..9b2c58f8b
--- /dev/null
+++ b/config/desktop/focal/environments/budgie/debian/postinst
@@ -0,0 +1,47 @@
+# overwrite stock lightdm greeter configuration
+if [ -d /etc/armbian/lightdm ]; then cp -R /etc/armbian/lightdm /etc/; fi
+
+# Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
+if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
+
+# set wallpapper to armbian
+
+keys=/etc/dconf/db/local.d/00-bg
+locks=/etc/dconf/db/local.d/locks/background
+profile=/etc/dconf/profile/user
+
+install -Dv /dev/null $keys
+install -Dv /dev/null $locks
+install -Dv /dev/null $profile
+
+echo "[org/budgie/desktop/background]
+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg'
+picture-options='zoom'
+primary-color='#456789'
+secondary-color='#FFFFFF'
+
+[org/budgie/desktop/screensaver]
+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-blurred-3840x2160.jpg'
+picture-options='zoom'
+primary-color='#456789'
+secondary-color='#FFFFFF'" >> $keys
+
+echo "/org/budgie/desktop/background/picture-uri
+/org/budgie/desktop/background/picture-options
+/org/budgie/desktop/background/primary-color
+/org/budgie/desktop/background/secondary-color
+
+/org/budgie/desktop/screensaver/picture-uri
+/org/budgie/desktop/screensaver/picture-options
+/org/budgie/desktop/screensaver/primary-color
+/org/budgie/desktop/screensaver/secondary-color" >> $locks
+
+echo "user-db:user
+system-db:local" >> $profile
+
+dconf update
+
+#compile schemas
+if [ -d /usr/share/glib-2.0/schemas ]; then
+ glib-compile-schemas /usr/share/glib-2.0/schemas
+fi
\ No newline at end of file
diff --git a/config/desktop/focal/environments/budgie/only_for b/config/desktop/focal/environments/budgie/only_for
new file mode 100644
index 000000000..d40006758
--- /dev/null
+++ b/config/desktop/focal/environments/budgie/only_for
@@ -0,0 +1 @@
+arm64
diff --git a/config/desktop/focal/environments/budgie/support b/config/desktop/focal/environments/budgie/support
new file mode 100644
index 000000000..a23e5fb94
--- /dev/null
+++ b/config/desktop/focal/environments/budgie/support
@@ -0,0 +1 @@
+supported
diff --git a/config/desktop/focal/environments/cinnamon/armbian/create_desktop_package.sh b/config/desktop/focal/environments/cinnamon/armbian/create_desktop_package.sh
new file mode 100755
index 000000000..04ded11cb
--- /dev/null
+++ b/config/desktop/focal/environments/cinnamon/armbian/create_desktop_package.sh
@@ -0,0 +1,49 @@
+# install lightdm greeter
+cp -R "${SRC}"/packages/blobs/desktop/lightdm "${destination}"/etc/armbian
+
+# install default desktop settings
+mkdir -p "${destination}"/etc/skel
+cp -R "${SRC}"/packages/blobs/desktop/skel/. "${destination}"/etc/skel
+
+# install logo for login screen
+mkdir -p "${destination}"/usr/share/pixmaps/armbian
+cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/pixmaps/armbian
+
+# install wallpapers
+mkdir -p "${destination}"/usr/share/backgrounds/armbian/
+cp "${SRC}"/packages/blobs/desktop/wallpapers/*.jpg "${destination}"/usr/share/backgrounds/armbian/
+mkdir -p "${destination}"/usr/share/cinnamon-background-properties
+cat <<-EOF > "${destination}"/usr/share/cinnamon-background-properties/armbian.xml
+
+
+
+
+ Armbian light
+ /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+ Armbian dark
+ /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+ Armbian uc
+ /usr/share/backgrounds/armbian/armbian-full-undeer-construction-3840-2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+ Armbian clear
+ /usr/share/backgrounds/armbian/Armbian-clear-rounded-bakcground-3840-2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+EOF
diff --git a/config/desktop/focal/environments/cinnamon/config_base/packages b/config/desktop/focal/environments/cinnamon/config_base/packages
new file mode 100644
index 000000000..27c55a393
--- /dev/null
+++ b/config/desktop/focal/environments/cinnamon/config_base/packages
@@ -0,0 +1,16 @@
+xserver-xorg xserver-xorg-video-fbdev xfonts-base xinit x11-xserver-utils gvfs gvfs-backends gvfs-fuse gvfs-bin gvfs-libs gvfs-daemons
+cinnamon cinnamon-common cinnamon-core cinnamon-control-center cinnamon-control-center-data cinnamon-desktop-data
+cinnamon-screensaver cinnamon-session cinnamon-screensaver cinnamon-session-common cinnamon-settings-daemon cinnamon-control-center-goa
+nemo nemo-data gir1.2-cinnamondesktop-3.0 gir1.2-cmenu-3.0 gir1.2-cvc-1.0 libcinnamon-desktop4 libcinnamon-menu-3-0 libcscreensaver0 libcvc0
+gtk2-engines gtk2-engines-murrine gtk2-engines-pixbuf libgtk2.0-bin lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings numix-gtk-theme
+xorg-docs-core x11-apps xorg-docs xscreensaver xfonts-100dpi xfonts-75dpi xfonts-scalable xcursor-themes xdg-user-dirs xdg-user-dirs-gtk
+ubuntu-drivers-common ubuntu-minimal keyutils redshift bluez-tools bluez-cups brltty orca policykit-desktop-privileges network-manager-pptp
+network-manager-l2tp network-manager-openconnect network-manager-openvpn network-manager-openvpn-gnome network-manager-vpnc cups cups-bsd
+cups-filters liblouisutdml-bin liblouis-bin blueman pamix pasystray pavucontrol pavumeter pavucontrol-qt gstreamer1.0-packagekit
+gstreamer1.0-plugins-base-apps libproxy1-plugin-gsettings libproxy1-plugin-networkmanager libu2f-udev libwmf0.2-7-gtk openprinting-ppds
+p7zip-full policykit-desktop-privileges anacron doc-base foomatic-db-compressed-ppds ghostscript-x inputattach kerneloops language-pack-en
+libatk-adaptor libgail-common libnotify-bin software-properties-gtk speech-dispatcher spice-vdagent zip orca bubblewrap dbus-x11
+dictionaries-common hunspell-en-us tracker tracker-extract tracker-miner-fs update-manager update-manager-core update-notifier
+update-notifier-common libgl1-mesa-dri policykit-1 profile-sync-daemon system-config-printer system-config-printer-common printer-driver-all
+software-properties-common samba smbclient cifs-utils gnome-power-manager powermgmt-base libupower-glib3 ruby-power-assert plank
+libplank-common libplank1 gdebi
diff --git a/config/desktop/focal/environments/cinnamon/config_base/packages.uninstall b/config/desktop/focal/environments/cinnamon/config_base/packages.uninstall
new file mode 100644
index 000000000..4b622d4aa
--- /dev/null
+++ b/config/desktop/focal/environments/cinnamon/config_base/packages.uninstall
@@ -0,0 +1 @@
+gdm3
diff --git a/config/desktop/focal/environments/cinnamon/config_meta/packages b/config/desktop/focal/environments/cinnamon/config_meta/packages
new file mode 100755
index 000000000..3def0e077
--- /dev/null
+++ b/config/desktop/focal/environments/cinnamon/config_meta/packages
@@ -0,0 +1,16 @@
+xserver-xorg xserver-xorg-video-fbdev xfonts-base xinit x11-xserver-utils gvfs gvfs-backends gvfs-fuse gvfs-bin gvfs-libs gvfs-daemons
+cinnamon cinnamon-desktop-environment cinnamon-common cinnamon-core cinnamon-control-center cinnamon-control-center-data cinnamon-desktop-data
+cinnamon-screensaver cinnamon-session cinnamon-screensaver cinnamon-session-common cinnamon-settings-daemon cinnamon-control-center-goa
+nemo nemo-data gir1.2-cinnamondesktop-3.0 gir1.2-cmenu-3.0 gir1.2-cvc-1.0 libcinnamon-desktop4 libcinnamon-menu-3-0 libcscreensaver0 libcvc0
+gtk2-engines gtk2-engines-murrine gtk2-engines-pixbuf libgtk2.0-bin lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings numix-gtk-theme
+xorg-docs-core x11-apps xorg-docs xscreensaver xfonts-100dpi xfonts-75dpi xfonts-scalable xcursor-themes xdg-user-dirs xdg-user-dirs-gtk
+ubuntu-drivers-common ubuntu-minimal keyutils redshift bluez-tools bluez-cups brltty orca policykit-desktop-privileges network-manager-pptp
+network-manager-l2tp network-manager-openconnect network-manager-openvpn network-manager-openvpn-gnome network-manager-vpnc cups cups-bsd
+cups-filters liblouisutdml-bin liblouis-bin blueman pamix pasystray pavucontrol pavumeter pavucontrol-qt gstreamer1.0-packagekit
+gstreamer1.0-plugins-base-apps libproxy1-plugin-gsettings libproxy1-plugin-networkmanager libu2f-udev libwmf0.2-7-gtk openprinting-ppds
+p7zip-full policykit-desktop-privileges anacron doc-base foomatic-db-compressed-ppds ghostscript-x inputattach kerneloops language-pack-en
+libatk-adaptor libgail-common libnotify-bin software-properties-gtk speech-dispatcher spice-vdagent zip orca bubblewrap dbus-x11
+dictionaries-common hunspell-en-us tracker tracker-extract tracker-miner-fs update-manager update-manager-core update-notifier
+update-notifier-common libgl1-mesa-dri policykit-1 profile-sync-daemon system-config-printer system-config-printer-common printer-driver-all
+software-properties-common samba smbclient cifs-utils gnome-power-manager powermgmt-base libupower-glib3 ruby-power-assert plank
+libplank-common libplank1
diff --git a/config/desktop/focal/environments/cinnamon/config_meta/packages.uninstall b/config/desktop/focal/environments/cinnamon/config_meta/packages.uninstall
new file mode 100644
index 000000000..4b622d4aa
--- /dev/null
+++ b/config/desktop/focal/environments/cinnamon/config_meta/packages.uninstall
@@ -0,0 +1 @@
+gdm3
diff --git a/config/desktop/focal/environments/cinnamon/debian/postinst b/config/desktop/focal/environments/cinnamon/debian/postinst
new file mode 100755
index 000000000..4a1b4be32
--- /dev/null
+++ b/config/desktop/focal/environments/cinnamon/debian/postinst
@@ -0,0 +1,51 @@
+# overwrite stock lightdm greeter configuration
+if [ -d /etc/armbian/lightdm ]; then cp -R /etc/armbian/lightdm /etc/; fi
+
+# Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
+if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
+
+# set wallpapper to armbian
+
+keys=/etc/dconf/db/local.d/00-bg
+locks=/etc/dconf/db/local.d/locks/background
+profile=/etc/dconf/profile/user
+
+install -Dv /dev/null $keys
+install -Dv /dev/null $locks
+install -Dv /dev/null $profile
+
+echo "[org/cinnamon/desktop/background]
+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg'
+picture-options='zoom'
+primary-color='#456789'
+secondary-color='#FFFFFF'
+
+[org/cinnamon/desktop/screensaver]
+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-blurred-3840x2160.jpg'
+picture-options='zoom'
+primary-color='#456789'
+secondary-color='#FFFFFF'" >> $keys
+
+echo "/org/cinnamon/desktop/background/picture-uri
+/org/cinnamon/desktop/background/picture-options
+/org/cinnamon/desktop/background/primary-color
+/org/cinnamon/desktop/background/secondary-color
+
+/org/cinnamon/desktop/screensaver/picture-uri
+/org/cinnamon/desktop/screensaver/picture-options
+/org/cinnamon/desktop/screensaver/primary-color
+/org/cinnamon/desktop/screensaver/secondary-color" >> $locks
+
+echo "user-db:user
+system-db:local" >> $profile
+
+dconf update
+
+#sudo apt-get -y remove cinnamon-shell-extension-desktop-icons
+
+#compile schemas
+if [ -d /usr/share/glib-2.0/schemas ]; then
+ glib-compile-schemas /usr/share/glib-2.0/schemas
+fi
+
+
diff --git a/config/desktop/focal/environments/cinnamon/only_for b/config/desktop/focal/environments/cinnamon/only_for
new file mode 100644
index 000000000..d40006758
--- /dev/null
+++ b/config/desktop/focal/environments/cinnamon/only_for
@@ -0,0 +1 @@
+arm64
diff --git a/config/desktop/focal/environments/cinnamon/support b/config/desktop/focal/environments/cinnamon/support
new file mode 100644
index 000000000..a23e5fb94
--- /dev/null
+++ b/config/desktop/focal/environments/cinnamon/support
@@ -0,0 +1 @@
+supported
diff --git a/config/desktop/focal/environments/deepin/armbian/create_desktop_package.sh b/config/desktop/focal/environments/deepin/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..6eb54a077
--- /dev/null
+++ b/config/desktop/focal/environments/deepin/armbian/create_desktop_package.sh
@@ -0,0 +1,10 @@
+# install lightdm greeter
+cp -R "${SRC}"/packages/blobs/desktop/lightdm "${destination}"/etc/armbian
+
+# install logo for login screen
+mkdir -p "${destination}"/usr/share/pixmaps/armbian
+cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/pixmaps/armbian
+
+# install backgrounds
+mkdir -p "${destination}"/usr/share/backgrounds/armbian/
+cp "${SRC}"/packages/blobs/desktop/wallpapers/*.jpg "${destination}"/usr/share/backgrounds/armbian/
diff --git a/config/desktop/focal/environments/deepin/config_base/armbian/create_desktop_package.sh b/config/desktop/focal/environments/deepin/config_base/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..8cfffc068
--- /dev/null
+++ b/config/desktop/focal/environments/deepin/config_base/armbian/create_desktop_package.sh
@@ -0,0 +1 @@
+# add config specific tweaks here
diff --git a/config/desktop/focal/environments/deepin/config_base/packages b/config/desktop/focal/environments/deepin/config_base/packages
new file mode 100644
index 000000000..9dac035f9
--- /dev/null
+++ b/config/desktop/focal/environments/deepin/config_base/packages
@@ -0,0 +1,18 @@
+xserver-xorg xserver-xorg-video-fbdev gvfs gvfs-backends gvfs-fuse gvfs-bin gvfs-libs gvfs-daemons xfonts-base xinit x11-xserver-utils
+deepin-desktop-base dde-desktop dde-api dde-dock dde-dock-onboard-plugin dde-launcher dde-control-center deepin-metacity deepin-wm
+startdde dde-session-ui dde-file-manager dde-qt5integration dde-disk-mount-plugin deepin-gtk-theme deepin-sound-theme deepin-icon-theme
+deepin-menu dde-daemon dde-account-faces deepin-desktop-schemas deepin-mutter dde-polkit-agent deepin-wm deepin-turbo deepin-turbo-booster
+ubuntudde-default-settings ubuntudde-icon-theme deepin-voice-recorder deepin-screenshot dde-calendar deepin-music deepin-picker
+deepin-gettext-tools deepin-image-viewer deepin-movie deepin-calculator deepin-shortcut-viewer deepin-system-monitor deepin-terminal
+deepin-topbar deepin-deb-installer deepin-screensaver deepin-anything-server eject fonts-noto fonts-noto-color-emoji libdtkgui-bin
+libdtkgui2 libdtkcore-bin gir1.2-deepin-mutter-3.0 lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings numix-gtk-theme xinit
+xorg-docs-core x11-apps xorg-docs xscreensaver xfonts-100dpi xfonts-75dpi xfonts-scalable xcursor-themes xdg-user-dirs xdg-user-dirs-gtk
+ubuntu-drivers-common ubuntu-minimal keyutils redshift bluez-tools bluez-cups brltty orca policykit-desktop-privileges network-manager-pptp
+network-manager-l2tp network-manager-openconnect network-manager-openvpn network-manager-openvpn-gnome network-manager-vpnc cups cups-bsd
+cups-filters liblouisutdml-bin liblouis-bin blueman pamix pasystray pavucontrol pavumeter pavucontrol-qt gstreamer1.0-packagekit
+gstreamer1.0-plugins-base-apps libproxy1-plugin-gsettings libproxy1-plugin-networkmanager libu2f-udev libwmf0.2-7-gtk openprinting-ppds
+p7zip-full policykit-desktop-privileges anacron doc-base foomatic-db-compressed-ppds ghostscript-x inputattach kerneloops language-pack-en
+libatk-adaptor libgail-common libnotify-bin software-properties-gtk speech-dispatcher spice-vdagent zip orca bubblewrap dbus-x11
+dictionaries-common hunspell-en-us tracker tracker-extract tracker-miner-fs update-manager update-manager-core update-notifier
+update-notifier-common libgl1-mesa-dri policykit-1 profile-sync-daemon system-config-printer system-config-printer-common printer-driver-all
+software-properties-common samba smbclient cifs-utils gnome-power-manager powermgmt-base libupower-glib3 ruby-power-assert gdebi
diff --git a/config/desktop/focal/environments/deepin/config_base/packages.uninstall b/config/desktop/focal/environments/deepin/config_base/packages.uninstall
new file mode 100644
index 000000000..ec0762d75
--- /dev/null
+++ b/config/desktop/focal/environments/deepin/config_base/packages.uninstall
@@ -0,0 +1 @@
+gdm3
\ No newline at end of file
diff --git a/config/desktop/focal/environments/deepin/debian/postinst b/config/desktop/focal/environments/deepin/debian/postinst
new file mode 100644
index 000000000..2b6769b58
--- /dev/null
+++ b/config/desktop/focal/environments/deepin/debian/postinst
@@ -0,0 +1,9 @@
+# overwrite stock lightdm greeter configuration
+if [ -d /etc/armbian/lightdm ]; then cp -R /etc/armbian/lightdm /etc/; fi
+
+# Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
+if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
+
+#remove linked file
+rm /etc/alternatives/deepin-default-background
+ln -s /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg /etc/alternatives/deepin-default-background
diff --git a/config/desktop/focal/environments/deepin/only_for b/config/desktop/focal/environments/deepin/only_for
new file mode 100644
index 000000000..d40006758
--- /dev/null
+++ b/config/desktop/focal/environments/deepin/only_for
@@ -0,0 +1 @@
+arm64
diff --git a/config/desktop/focal/environments/deepin/support b/config/desktop/focal/environments/deepin/support
new file mode 100644
index 000000000..03cd47015
--- /dev/null
+++ b/config/desktop/focal/environments/deepin/support
@@ -0,0 +1 @@
+csc
diff --git a/config/desktop/focal/environments/gnome/armbian/create_desktop_package.sh b/config/desktop/focal/environments/gnome/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..8c3701c25
--- /dev/null
+++ b/config/desktop/focal/environments/gnome/armbian/create_desktop_package.sh
@@ -0,0 +1,35 @@
+# install lightdm greeter
+cp -R "${SRC}"/packages/blobs/desktop/lightdm "${destination}"/etc/armbian
+
+# install default desktop settings
+mkdir -p "${destination}"/etc/skel
+cp -R "${SRC}"/packages/blobs/desktop/skel/. "${destination}"/etc/skel
+
+# install logo for login screen
+mkdir -p "${destination}"/usr/share/pixmaps/armbian
+cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/pixmaps/armbian
+
+# install wallpapers
+mkdir -p "${destination}"/usr/share/backgrounds/armbian/
+cp "${SRC}"/packages/blobs/desktop/wallpapers/armbian*.jpg "${destination}"/usr/share/backgrounds/armbian/
+mkdir -p "${destination}"/usr/share/gnome-background-properties
+cat <<-EOF > "${destination}"/usr/share/gnome-background-properties/armbian.xml
+
+
+
+
+ Armbian light
+ /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+ Armbian dark
+ /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+EOF
diff --git a/config/desktop/focal/environments/gnome/config_base/packages b/config/desktop/focal/environments/gnome/config_base/packages
new file mode 100644
index 000000000..f22396f0a
--- /dev/null
+++ b/config/desktop/focal/environments/gnome/config_base/packages
@@ -0,0 +1,26 @@
+xserver-xorg xserver-xorg-video-fbdev gvfs-backends xfonts-base xinit bubblewrap dbus-x11 dictionaries-common evolution-data-server
+evolution-data-server-common gcr geoclue-2.0 gir1.2-accountsservice-1.0 gir1.2-atspi-2.0 gir1.2-gck-1 gir1.2-gcr-3 gir1.2-gdesktopenums-3.0
+gir1.2-gdm-1.0 gir1.2-geoclue-2.0 gir1.2-gnomebluetooth-1.0 gir1.2-gnomedesktop-3.0 gir1.2-graphene-1.0 gir1.2-gweather-3.0 gir1.2-ibus-1.0
+gir1.2-json-1.0 gir1.2-mutter-6 gir1.2-nm-1.0 gir1.2-nma-1.0 gir1.2-polkit-1.0 gir1.2-rsvg-2.0 gir1.2-soup-2.4 gir1.2-upowerglib-1.0 gjs
+gnome-desktop3-data gnome-keyring gnome-session-bin gnome-session-common gnome-settings-daemon gnome-settings-daemon-common gnome-shell
+gnome-shell-common hunspell-en-us libaccountsservice0 libaspell15 libcamel-1.2-62 libebackend-1.2-10 libebook-1.2-20 libebook-contacts-1.2-3
+libecal-2.0-1 libedata-book-1.2-26 libedata-cal-2.0-1 libedataserver-1.2-24 libedataserverui-1.2-2 libenchant-2-2 libfontenc1 libgck-1-0
+libgcr-base-3-1 libgcr-ui-3-1 libgdata-common libgdata22 libgdm1 libgeoclue-2-0 libgeocode-glib0 libgjs0g libgnome-autoar-0-0 libgnome-bluetooth13
+libgnome-desktop-3-19 libgoa-1.0-0b libgoa-1.0-common libgraphene-1.0-0 libgweather-3-16 libgweather-common libibus-1.0-5 libical3 libimobiledevice6
+libjavascriptcoregtk-4.0-18 libmutter-6-0 libnma0 libphonenumber7 libplist3 libprotobuf17 libtext-iconv-perl libunwind8 libupower-glib3 libusbmuxd6
+libwebkit2gtk-4.0-37 libxaw7 libxfont2 libxkbfile1 libxmu6 libxmuu1 libxtst6 mutter mutter-common p11-kit p11-kit-modules pinentry-gnome3 upower
+x11-xkb-utils x11-xserver-utils xdg-dbus-proxy xserver-common xwayland zenity zenity-common gnome-session gdm3 terminator gnome-control-center
+alsa-base anacron at-spi2-core dmz-cursor-theme fonts-freefont-ttf fonts-urw-base35 foomatic-db-compressed-ppds genisoimage ghostscript ghostscript-x
+gir1.2-goa-1.0 gir1.2-snapd-1 gnome-menus gnome-shell-extension-appindicator gnome-shell-extension-desktop-icons gvfs-bin inputattach
+libasound2-plugins libatk-adaptor libcairo-gobject-perl libcairo-perl libcue2 libdee-1.0-4 libexempi8 libexiv2-27 libextutils-depends-perl
+libextutils-pkgconfig-perl libgexiv2-2 libglib-object-introspection-perl libglib-perl libglu1-mesa libgs9 libgs9-common libgsf-1-114
+libgsf-1-common libgtk3-perl libgxps2 libidn11 libijs-0.35 libjbig2dec0 libnautilus-extension1a libnotify-bin libpaper1 libpoppler-glib8
+libpulsedsp libsasl2-modules libspeexdsp1 libtotem-plparser-common libtotem-plparser18 libtracker-control-2.0-0 libtracker-miner-2.0-0
+libtracker-sparql-2.0-0 libu2f-udev libunity-protocol-private0 libunity-scopes-json-def-desktop libunity9 libxxf86dga1 libyelp0 linux-sound-base
+nautilus nautilus-data openprinting-ppds poppler-data printer-driver-pnm2ppa pulseaudio pulseaudio-utils python3-click python3-colorama
+python3-dateutil python3-debconf python3-debian python3-distupgrade python3-update-manager python3-xkit python3-yaml software-properties-gtk
+spice-vdagent tracker tracker-extract tracker-miner-fs update-manager update-manager-core update-notifier update-notifier-common x11-apps
+x11-session-utils x11-utils xdg-desktop-portal xdg-user-dirs xdg-user-dirs-gtk xinput xorg xorg-docs-core yaru-theme-gnome-shell yelp yelp-xsl
+pulseaudio-module-bluetooth pavucontrol gnome-shell-extension-trash cups system-config-printer-gnome ubuntu-desktop-minimal ubuntu-session
+ubuntu-settings gnome-terminal synaptic gnome-packagekit gnome-system-tools gnome-tweak-tool gedit gpaste gnome-tweaks gnome-system-log
+gnome-power-manager gnome-screensaver gnome-screenshot gnome-todo gnome-photos gpaint lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings gdebi gnome-screenshot
diff --git a/config/desktop/focal/environments/gnome/config_base/packages.uninstall b/config/desktop/focal/environments/gnome/config_base/packages.uninstall
new file mode 100644
index 000000000..ec0762d75
--- /dev/null
+++ b/config/desktop/focal/environments/gnome/config_base/packages.uninstall
@@ -0,0 +1 @@
+gdm3
\ No newline at end of file
diff --git a/config/desktop/focal/environments/gnome/debian/postinst b/config/desktop/focal/environments/gnome/debian/postinst
new file mode 100644
index 000000000..70a21226f
--- /dev/null
+++ b/config/desktop/focal/environments/gnome/debian/postinst
@@ -0,0 +1,49 @@
+# overwrite stock lightdm greeter configuration
+if [ -d /etc/armbian/lightdm ]; then cp -R /etc/armbian/lightdm /etc/; fi
+
+# Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
+if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
+
+# set wallpapper to armbian
+
+keys=/etc/dconf/db/local.d/00-bg
+locks=/etc/dconf/db/local.d/locks/background
+profile=/etc/dconf/profile/user
+
+install -Dv /dev/null $keys
+install -Dv /dev/null $locks
+install -Dv /dev/null $profile
+
+echo "[org/gnome/desktop/background]
+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg'
+picture-options='zoom'
+primary-color='#456789'
+secondary-color='#FFFFFF'
+
+[org/gnome/desktop/screensaver]
+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-blurred-3840x2160.jpg'
+picture-options='zoom'
+primary-color='#456789'
+secondary-color='#FFFFFF'" >> $keys
+
+echo "/org/gnome/desktop/background/picture-uri
+/org/gnome/desktop/background/picture-options
+/org/gnome/desktop/background/primary-color
+/org/gnome/desktop/background/secondary-color
+
+/org/gnome/desktop/screensaver/picture-uri
+/org/gnome/desktop/screensaver/picture-options
+/org/gnome/desktop/screensaver/primary-color
+/org/gnome/desktop/screensaver/secondary-color" >> $locks
+
+echo "user-db:user
+system-db:local" >> $profile
+
+dconf update
+
+#sudo apt-get -y remove gnome-shell-extension-desktop-icons
+
+#compile schemas
+if [ -d /usr/share/glib-2.0/schemas ]; then
+ glib-compile-schemas /usr/share/glib-2.0/schemas
+fi
\ No newline at end of file
diff --git a/config/desktop/focal/environments/gnome/only_for b/config/desktop/focal/environments/gnome/only_for
new file mode 100644
index 000000000..d40006758
--- /dev/null
+++ b/config/desktop/focal/environments/gnome/only_for
@@ -0,0 +1 @@
+arm64
diff --git a/config/desktop/focal/environments/gnome/support b/config/desktop/focal/environments/gnome/support
new file mode 100644
index 000000000..a23e5fb94
--- /dev/null
+++ b/config/desktop/focal/environments/gnome/support
@@ -0,0 +1 @@
+supported
diff --git a/config/desktop/focal/environments/mate/armbian/create_desktop_package.sh b/config/desktop/focal/environments/mate/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..c17d6e4b5
--- /dev/null
+++ b/config/desktop/focal/environments/mate/armbian/create_desktop_package.sh
@@ -0,0 +1,49 @@
+# install lightdm greeter
+cp -R "${SRC}"/packages/blobs/desktop/lightdm "${destination}"/etc/armbian
+# install default desktop settings
+
+mkdir -p "${destination}"/etc/skel
+cp -R "${SRC}"/packages/blobs/desktop/skel/. "${destination}"/etc/skel
+
+# install logo for login screen
+mkdir -p "${destination}"/usr/share/pixmaps/armbian
+cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/pixmaps/armbian
+
+# install wallpapers
+mkdir -p "${destination}"/usr/share/backgrounds/armbian/
+cp "${SRC}"/packages/blobs/desktop/wallpapers/*.jpg "${destination}"/usr/share/backgrounds/armbian/
+mkdir -p "${destination}"/usr/share/mate-background-properties
+cat <<-EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml
+
+
+
+
+ Armbian light
+ /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+ Armbian dark
+ /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+ Armbian uc
+ /usr/share/backgrounds/armbian/armbian-full-undeer-construction-3840-2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+ Armbian clear
+ /usr/share/backgrounds/armbian/Armbian-clear-rounded-bakcground-3840-2160.jpg
+ zoom
+ #ffffff
+ #000000
+
+
+EOF
diff --git a/config/desktop/focal/environments/mate/config_base/packages b/config/desktop/focal/environments/mate/config_base/packages
new file mode 100644
index 000000000..0fac15228
--- /dev/null
+++ b/config/desktop/focal/environments/mate/config_base/packages
@@ -0,0 +1,17 @@
+xserver-xorg xserver-xorg-video-fbdev gvfs-backends gvfs-fuse xfonts-base xinit x11-xserver-utils mate-accessibility-profiles
+mate-applet-appmenu mate-applet-brisk-menu mate-applets mate-applets-common mate-backgrounds mate-calc mate-calc-common
+mate-common mate-control-center mate-control-center-common mate-core mate-desktop mate-desktop-common mate-desktop-environment
+mate-desktop-environment-core mate-desktop-environment-extra mate-desktop-environment-extras mate-dock-applet mate-equake-applet
+mate-hud mate-icon-theme mate-indicator-applet mate-indicator-applet-common mate-media mate-media-common mate-menu mate-menus
+mate-notification-daemon mate-notification-daemon-common mate-panel mate-panel-common mate-polkit mate-polkit-bin
+mate-polkit-common mate-power-manager mate-power-manager-common mate-screensaver mate-screensaver-common mate-sensors-applet
+mate-sensors-applet-common mate-session-manager mate-settings-daemon mate-settings-daemon-common mate-sntray-plugin
+mate-system-monitor mate-system-monitor-common mate-terminal mate-terminal-common mate-themes mate-tweak mate-user-guide mate-user-share
+mate-user-share-common mate-utils mate-utils-common mate-window-applets-common mate-window-buttons-applet mate-window-menu-applet
+mate-window-title-applet gtk2-engines gtk2-engines-murrine gtk2-engines-pixbuf libgtk2.0-bin network-manager-gnome gnome-keyring gcr
+libgck-1-0 p11-kit pasystray pavucontrol pulseaudio pavumeter bluez bluez-tools pulseaudio-module-bluetooth blueman libpam-gnome-keyring
+libgl1-mesa-dri profile-sync-daemon gnome-orca numix-gtk-theme synaptic apt-xapian-index lightdm lightdm-gtk-greeter lightdm-settings
+lightdm-gtk-greeter-settings numix-gtk-theme dbus-x11 dictionaries-common hunspell-en-us tracker tracker-extract tracker-miner-fs
+update-manager update-manager-core update-notifier update-notifier-common policykit-1 profile-sync-daemon software-properties-common
+system-config-printer system-config-printer-common printer-driver-all smbclient cifs-utils gdebi
+
diff --git a/config/desktop/focal/environments/mate/config_base/packages.uninstall b/config/desktop/focal/environments/mate/config_base/packages.uninstall
new file mode 100644
index 000000000..ec0762d75
--- /dev/null
+++ b/config/desktop/focal/environments/mate/config_base/packages.uninstall
@@ -0,0 +1 @@
+gdm3
\ No newline at end of file
diff --git a/config/desktop/focal/environments/mate/debian/postinst b/config/desktop/focal/environments/mate/debian/postinst
new file mode 100644
index 000000000..d6427ac98
--- /dev/null
+++ b/config/desktop/focal/environments/mate/debian/postinst
@@ -0,0 +1,47 @@
+# overwrite stock lightdm greeter configuration
+if [ -d /etc/armbian/lightdm ]; then cp -R /etc/armbian/lightdm /etc/; fi
+
+# Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
+if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
+
+# set wallpapper to armbian
+
+keys=/etc/dconf/db/local.d/00-bg
+locks=/etc/dconf/db/local.d/locks/background
+profile=/etc/dconf/profile/user
+
+install -Dv /dev/null $keys
+install -Dv /dev/null $locks
+install -Dv /dev/null $profile
+
+echo "[org/mate/desktop/background]
+picture-filename='/usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg'
+picture-options='zoom'
+primary-color='#456789'
+secondary-color='#FFFFFF'
+
+[org/mate/desktop/screensaver]
+picture-filename='/usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-blurred-3840x2160.jpg'
+picture-options='zoom'
+primary-color='#456789'
+secondary-color='#FFFFFF'" >> $keys
+
+echo "/org/mate/desktop/background/picture-filename
+/org/mate/desktop/background/picture-options
+/org/mate/desktop/background/primary-color
+/org/mate/desktop/background/secondary-color
+
+/org/mate/screensaver/picture-filename
+/org/mate/screensaver/picture-options
+/org/mate/screensaver/primary-color
+/org/mate/screensaver/secondary-color" >> $locks
+
+echo "user-db:user
+system-db:local" >> $profile
+
+dconf update
+
+#compile schemas
+if [ -d /usr/share/glib-2.0/schemas ]; then
+ glib-compile-schemas /usr/share/glib-2.0/schemas
+fi
\ No newline at end of file
diff --git a/config/desktop/focal/environments/mate/only_for b/config/desktop/focal/environments/mate/only_for
new file mode 100644
index 000000000..d40006758
--- /dev/null
+++ b/config/desktop/focal/environments/mate/only_for
@@ -0,0 +1 @@
+arm64
diff --git a/config/desktop/focal/environments/mate/support b/config/desktop/focal/environments/mate/support
new file mode 100644
index 000000000..a23e5fb94
--- /dev/null
+++ b/config/desktop/focal/environments/mate/support
@@ -0,0 +1 @@
+supported
diff --git a/config/desktop/focal/environments/xfce/appgroups/programming/packages b/config/desktop/focal/environments/xfce/appgroups/programming/packages
new file mode 100644
index 000000000..f9858e1ca
--- /dev/null
+++ b/config/desktop/focal/environments/xfce/appgroups/programming/packages
@@ -0,0 +1 @@
+gnome-builder geany
diff --git a/config/desktop/focal/environments/xfce/armbian/create_desktop_package.sh b/config/desktop/focal/environments/xfce/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..4b1167fed
--- /dev/null
+++ b/config/desktop/focal/environments/xfce/armbian/create_desktop_package.sh
@@ -0,0 +1,22 @@
+# install lightdm greeter
+cp -R "${SRC}"/packages/blobs/desktop/lightdm "${destination}"/etc/armbian
+
+# install default desktop settings
+mkdir -p "${destination}"/etc/skel
+cp -R "${SRC}"/packages/blobs/desktop/skel/. "${destination}"/etc/skel
+
+# using different icon pack. Workaround due to this bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=867779
+sed -i 's//g' \
+"${destination}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
+
+# install dedicated startup icons
+mkdir -p "${destination}"/usr/share/pixmaps/armbian "${destination}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/
+cp "${SRC}/packages/blobs/desktop/icons/${DISTRIBUTION,,}.png" "${destination}"/usr/share/pixmaps/armbian
+sed 's/xenial.png/'"${DISTRIBUTION,,}"'.png/' -i "${destination}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
+
+# install logo for login screen
+cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/pixmaps/armbian
+
+# install wallpapers
+mkdir -p "${destination}"/usr/share/backgrounds/armbian/
+cp "${SRC}"/packages/blobs/desktop/wallpapers/armbian*.jpg "${destination}"/usr/share/backgrounds/armbian/
diff --git a/config/desktop/focal/environments/xfce/config_base/packages b/config/desktop/focal/environments/xfce/config_base/packages
new file mode 100644
index 000000000..49438868e
--- /dev/null
+++ b/config/desktop/focal/environments/xfce/config_base/packages
@@ -0,0 +1,8 @@
+xserver-xorg xserver-xorg-video-fbdev gvfs-backends gvfs-fuse xfonts-base xinit x11-xserver-utils xfce4 lxtask xfce4-terminal thunar-volman
+gtk2-engines gtk2-engines-murrine gtk2-engines-pixbuf libgtk2.0-bin network-manager-gnome xfce4-notifyd gnome-keyring gcr libgck-1-0 p11-kit
+pasystray pavucontrol pulseaudio pavumeter bluez bluez-tools pulseaudio-module-bluetooth blueman libpam-gnome-keyring libgl1-mesa-dri policykit-1
+profile-sync-daemon gnome-orca numix-gtk-theme synaptic apt-xapian-index lightdm lightdm-gtk-greeter lightdm-settings lightdm-gtk-greeter-settings
+numix-gtk-theme system-config-printer system-config-printer-common printer-driver-all dbus-x11 dbus-x11 dictionaries-common hunspell-en-us tracker
+tracker-extract tracker-miner-fs update-manager update-manager-core update-notifier update-notifier-common policykit-1 profile-sync-daemon
+software-properties-common samba smbclient cifs-utils xfce4-screenshooter gdebi
+
diff --git a/config/desktop/focal/environments/xfce/config_base/packages.uninstall b/config/desktop/focal/environments/xfce/config_base/packages.uninstall
new file mode 100644
index 000000000..ec0762d75
--- /dev/null
+++ b/config/desktop/focal/environments/xfce/config_base/packages.uninstall
@@ -0,0 +1 @@
+gdm3
\ No newline at end of file
diff --git a/config/desktop/focal/environments/xfce/debian/postinst b/config/desktop/focal/environments/xfce/debian/postinst
new file mode 100644
index 000000000..07717295c
--- /dev/null
+++ b/config/desktop/focal/environments/xfce/debian/postinst
@@ -0,0 +1,19 @@
+# overwrite stock lightdm greeter configuration
+if [ -d /etc/armbian/lightdm ]; then cp -R /etc/armbian/lightdm /etc/; fi
+
+# Adjust menu
+if [ -f /etc/xdg/menus/xfce-applications.menu ]; then
+sed -i -n '/Settings<\/Menuname>/{p;:a;N;/xfce4-session-logout.desktop<\/Filename>/!ba;s/.*\n/\
+\t\n\t\n \n armbian-donate.desktop<\/Filename>\
+\n armbian-support.desktop<\/Filename>\n/};p' /etc/xdg/menus/xfce-applications.menu
+fi
+
+# Hide few items
+if [ -f /usr/share/applications/display-im6.q16.desktop ]; then mv /usr/share/applications/display-im6.q16.desktop /usr/share/applications/display-im6.q16.desktop.hidden; fi
+if [ -f /usr/share/applications/display-im6.desktop ]]; then mv /usr/share/applications/display-im6.desktop /usr/share/applications/display-im6.desktop.hidden; fi
+if [ -f /usr/share/applications/vim.desktop ]]; then mv /usr/share/applications/vim.desktop /usr/share/applications/vim.desktop.hidden; fi
+if [ -f /usr/share/applications/libreoffice-startcenter.desktop ]]; then mv /usr/share/applications/libreoffice-startcenter.desktop /usr/share/applications/libreoffice-startcenter.desktop.hidden; fi
+
+# Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
+if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
+
diff --git a/config/desktop/focal/environments/xfce/support b/config/desktop/focal/environments/xfce/support
new file mode 100644
index 000000000..a23e5fb94
--- /dev/null
+++ b/config/desktop/focal/environments/xfce/support
@@ -0,0 +1 @@
+supported
diff --git a/config/desktop/hirsute/appgroups b/config/desktop/hirsute/appgroups
new file mode 120000
index 000000000..97784daa0
--- /dev/null
+++ b/config/desktop/hirsute/appgroups
@@ -0,0 +1 @@
+../focal/appgroups
\ No newline at end of file
diff --git a/config/desktop/hirsute/environments/budgie b/config/desktop/hirsute/environments/budgie
new file mode 120000
index 000000000..03309a752
--- /dev/null
+++ b/config/desktop/hirsute/environments/budgie
@@ -0,0 +1 @@
+../../focal/environments/budgie
\ No newline at end of file
diff --git a/config/desktop/hirsute/environments/deepin/armbian/create_desktop_package.sh b/config/desktop/hirsute/environments/deepin/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..6eb54a077
--- /dev/null
+++ b/config/desktop/hirsute/environments/deepin/armbian/create_desktop_package.sh
@@ -0,0 +1,10 @@
+# install lightdm greeter
+cp -R "${SRC}"/packages/blobs/desktop/lightdm "${destination}"/etc/armbian
+
+# install logo for login screen
+mkdir -p "${destination}"/usr/share/pixmaps/armbian
+cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/pixmaps/armbian
+
+# install backgrounds
+mkdir -p "${destination}"/usr/share/backgrounds/armbian/
+cp "${SRC}"/packages/blobs/desktop/wallpapers/*.jpg "${destination}"/usr/share/backgrounds/armbian/
diff --git a/config/desktop/hirsute/environments/deepin/config_base/armbian/create_desktop_package.sh b/config/desktop/hirsute/environments/deepin/config_base/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..8cfffc068
--- /dev/null
+++ b/config/desktop/hirsute/environments/deepin/config_base/armbian/create_desktop_package.sh
@@ -0,0 +1 @@
+# add config specific tweaks here
diff --git a/config/desktop/hirsute/environments/deepin/config_base/custom/boards/pinebook-pro/armbian/create_desktop_package.sh b/config/desktop/hirsute/environments/deepin/config_base/custom/boards/pinebook-pro/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..87d271740
--- /dev/null
+++ b/config/desktop/hirsute/environments/deepin/config_base/custom/boards/pinebook-pro/armbian/create_desktop_package.sh
@@ -0,0 +1,5 @@
+# install custom xorg for pinebook-pro
+cp -R "${SRC}"/packages/bsp/pinebook-pro/xorg.conf "${destination}"/etc/X11/xorg.conf.d/
+
+# install custom asound state for pinebook-pro
+cp -R "${SRC}"/packages/asound.state/ "${destination}"/etc/
\ No newline at end of file
diff --git a/config/desktop/hirsute/environments/deepin/config_base/packages b/config/desktop/hirsute/environments/deepin/config_base/packages
new file mode 100644
index 000000000..cb03de4a2
--- /dev/null
+++ b/config/desktop/hirsute/environments/deepin/config_base/packages
@@ -0,0 +1,18 @@
+xserver-xorg xserver-xorg-video-fbdev gvfs gvfs-backends gvfs-fuse gvfs-bin gvfs-libs gvfs-daemons xfonts-base xinit x11-xserver-utils
+deepin-desktop-base dde-desktop dde-api dde-dock dde-dock-onboard-plugin dde-launcher dde-control-center deepin-metacity deepin-wm
+startdde dde-session-ui dde-file-manager dde-qt5integration dde-disk-mount-plugin deepin-gtk-theme deepin-sound-theme deepin-icon-theme
+deepin-menu dde-daemon dde-account-faces deepin-desktop-schemas deepin-mutter dde-polkit-agent deepin-wm deepin-turbo deepin-turbo-booster
+ubuntudde-default-settings ubuntudde-icon-theme deepin-voice-recorder deepin-screenshot dde-calendar deepin-music deepin-picker
+deepin-gettext-tools deepin-image-viewer deepin-movie deepin-calculator deepin-shortcut-viewer deepin-system-monitor deepin-terminal
+deepin-topbar deepin-deb-installer deepin-screensaver deepin-anything-server eject fonts-noto fonts-noto-color-emoji libdtkgui-bin
+libdtkgui2 libdtkcore-bin gir1.2-deepin-mutter-3.0 lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings numix-gtk-theme xinit
+xorg-docs-core x11-apps xorg-docs xscreensaver xfonts-100dpi xfonts-75dpi xfonts-scalable xcursor-themes xdg-user-dirs xdg-user-dirs-gtk
+ubuntu-drivers-common ubuntu-minimal keyutils redshift bluez-tools bluez-cups brltty orca policykit-desktop-privileges network-manager-pptp
+network-manager-l2tp network-manager-openconnect network-manager-openvpn network-manager-openvpn-gnome network-manager-vpnc cups cups-bsd
+cups-filters liblouisutdml-bin liblouis-bin blueman pamix pasystray pavucontrol pavumeter pavucontrol-qt gstreamer1.0-packagekit
+gstreamer1.0-plugins-base-apps libproxy1-plugin-gsettings libproxy1-plugin-networkmanager libu2f-udev libwmf0.2-7-gtk openprinting-ppds
+p7zip-full policykit-desktop-privileges anacron doc-base foomatic-db-compressed-ppds ghostscript-x inputattach kerneloops language-pack-en
+libatk-adaptor libgail-common libnotify-bin software-properties-gtk speech-dispatcher spice-vdagent zip orca bubblewrap dbus-x11
+dictionaries-common hunspell-en-us tracker tracker-extract tracker-miner-fs update-manager update-manager-core update-notifier
+update-notifier-common libgl1-mesa-dri policykit-1 profile-sync-daemon system-config-printer system-config-printer-common printer-driver-all
+software-properties-common samba smbclient cifs-utils gnome-power-manager powermgmt-base libupower-glib3 ruby-power-assert
diff --git a/config/desktop/hirsute/environments/deepin/config_base/packages.uninstall b/config/desktop/hirsute/environments/deepin/config_base/packages.uninstall
new file mode 100644
index 000000000..ec0762d75
--- /dev/null
+++ b/config/desktop/hirsute/environments/deepin/config_base/packages.uninstall
@@ -0,0 +1 @@
+gdm3
\ No newline at end of file
diff --git a/config/desktop/hirsute/environments/deepin/config_base/sources/apt/deepin-dev.source b/config/desktop/hirsute/environments/deepin/config_base/sources/apt/deepin-dev.source
new file mode 100644
index 000000000..811a447cc
--- /dev/null
+++ b/config/desktop/hirsute/environments/deepin/config_base/sources/apt/deepin-dev.source
@@ -0,0 +1 @@
+add-apt-repository ppa:ubuntudde-dev/unstable
\ No newline at end of file
diff --git a/config/desktop/hirsute/environments/deepin/custom/boards/nanopct4_/armbian/create_desktop_package.sh b/config/desktop/hirsute/environments/deepin/custom/boards/nanopct4_/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..ce65d596c
--- /dev/null
+++ b/config/desktop/hirsute/environments/deepin/custom/boards/nanopct4_/armbian/create_desktop_package.sh
@@ -0,0 +1,9 @@
+# install custom xorg for pinebook-pro
+mkdir -p "${destination}"/etc/X11/
+cp -R "${SRC}"/packages/bsp/rk3399/xorg.conf "${destination}"/etc/X11/
+
+# install custom asound state for pinebook-pro
+mkdir -p "${destination}"/etc/
+cp -R "${SRC}"/packages/blobs/asound.state/ "${destination}"/etc/
+
+
diff --git a/config/desktop/hirsute/environments/deepin/custom/boards/pinebook-pro_/armbian/create_desktop_package.sh b/config/desktop/hirsute/environments/deepin/custom/boards/pinebook-pro_/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..7f724faeb
--- /dev/null
+++ b/config/desktop/hirsute/environments/deepin/custom/boards/pinebook-pro_/armbian/create_desktop_package.sh
@@ -0,0 +1,14 @@
+# install custom xorg for pinebook-pro
+cp -R "${SRC}"/packages/bsp/pinebook-pro/xorg.conf "${destination}"/etc/X11/
+
+## touchpad and keyboard tweaks
+# from https://github.com/ayufan-rock64/linux-package/tree/master/root-pinebookpro
+cp $SRC/packages/bsp/pinebook-pro/40-pinebookpro-touchpad.conf $destination/etc/X11/xorg.conf.d/
+#keybord
+mkdir -p $destination/etc/udev/hwdb.d/
+cp $SRC/packages/bsp/pinebook-pro/10-usb-kbd.hwdb $destination/etc/udev/hwdb.d/
+
+# install custom asound state for pinebook-pro
+cp -R "${SRC}"/packages/asound.state/ "${destination}"/etc/
+
+
diff --git a/config/desktop/hirsute/environments/deepin/custom/boards/pinebook-pro_/debian/postinst b/config/desktop/hirsute/environments/deepin/custom/boards/pinebook-pro_/debian/postinst
new file mode 100644
index 000000000..93930e277
--- /dev/null
+++ b/config/desktop/hirsute/environments/deepin/custom/boards/pinebook-pro_/debian/postinst
@@ -0,0 +1 @@
+echo "Hello from debian/postinst in the DDE for PineBook-Pro !"
diff --git a/config/desktop/hirsute/environments/deepin/debian/postinst b/config/desktop/hirsute/environments/deepin/debian/postinst
new file mode 100644
index 000000000..2b6769b58
--- /dev/null
+++ b/config/desktop/hirsute/environments/deepin/debian/postinst
@@ -0,0 +1,9 @@
+# overwrite stock lightdm greeter configuration
+if [ -d /etc/armbian/lightdm ]; then cp -R /etc/armbian/lightdm /etc/; fi
+
+# Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
+if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
+
+#remove linked file
+rm /etc/alternatives/deepin-default-background
+ln -s /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg /etc/alternatives/deepin-default-background
diff --git a/config/desktop/hirsute/environments/deepin/only_for b/config/desktop/hirsute/environments/deepin/only_for
new file mode 100644
index 000000000..d40006758
--- /dev/null
+++ b/config/desktop/hirsute/environments/deepin/only_for
@@ -0,0 +1 @@
+arm64
diff --git a/config/desktop/hirsute/environments/deepin/support b/config/desktop/hirsute/environments/deepin/support
new file mode 100644
index 000000000..03cd47015
--- /dev/null
+++ b/config/desktop/hirsute/environments/deepin/support
@@ -0,0 +1 @@
+csc
diff --git a/config/desktop/hirsute/environments/gnome/armbian b/config/desktop/hirsute/environments/gnome/armbian
new file mode 120000
index 000000000..3adcf2a0e
--- /dev/null
+++ b/config/desktop/hirsute/environments/gnome/armbian
@@ -0,0 +1 @@
+../../../focal/environments/gnome/armbian
\ No newline at end of file
diff --git a/config/desktop/hirsute/environments/gnome/config_base/packages b/config/desktop/hirsute/environments/gnome/config_base/packages
new file mode 100644
index 000000000..f8b190aec
--- /dev/null
+++ b/config/desktop/hirsute/environments/gnome/config_base/packages
@@ -0,0 +1,24 @@
+xserver-xorg xserver-xorg-video-fbdev gvfs-backends xfonts-base xinit bubblewrap dbus-x11 dictionaries-common evolution-data-server
+evolution-data-server-common gcr geoclue-2.0 gir1.2-accountsservice-1.0 gir1.2-atspi-2.0 gir1.2-gck-1 gir1.2-gcr-3 gir1.2-gdesktopenums-3.0
+gir1.2-gdm-1.0 gir1.2-geoclue-2.0 gir1.2-gnomebluetooth-1.0 gir1.2-gnomedesktop-3.0 gir1.2-graphene-1.0 gir1.2-gweather-3.0 gir1.2-ibus-1.0
+gir1.2-json-1.0 gir1.2-mutter-7 gir1.2-nm-1.0 gir1.2-nma-1.0 gir1.2-polkit-1.0 gir1.2-rsvg-2.0 gir1.2-soup-2.4 gir1.2-upowerglib-1.0 gjs
+gnome-desktop3-data gnome-keyring gnome-session-bin gnome-session-common gnome-settings-daemon gnome-settings-daemon-common gnome-shell
+gnome-shell-common hunspell-en-us libaccountsservice0 libaspell15 libcamel-1.2-62 libebackend-1.2-10 libebook-1.2-20 libebook-contacts-1.2-3
+libecal-2.0-1 libedata-book-1.2-26 libedata-cal-2.0-1 libedataserver-1.2-25 libedataserverui-1.2-2 libenchant-2-2 libfontenc1 libgck-1-0
+libgcr-base-3-1 libgcr-ui-3-1 libgdata-common libgdata22 libgdm1 libgeoclue-2-0 libgeocode-glib0 libgjs0g libgnome-autoar-0-0 libgnome-bluetooth13
+libgnome-desktop-3-19 libgoa-1.0-0b libgoa-1.0-common libgraphene-1.0-0 libgweather-3-16 libgweather-common libibus-1.0-5 libical3 libimobiledevice6
+libjavascriptcoregtk-4.0-18 libmutter-7-0 libnma0 libphonenumber8 libplist3 libprotobuf23 libtext-iconv-perl libunwind8 libupower-glib3 libusbmuxd6
+libwebkit2gtk-4.0-37 libxaw7 libxfont2 libxkbfile1 libxmu6 libxmuu1 libxtst6 mutter mutter-common p11-kit p11-kit-modules pinentry-gnome3 upower
+x11-xkb-utils x11-xserver-utils xdg-dbus-proxy xserver-common xwayland zenity zenity-common gnome-session gdm3 terminator gnome-control-center
+alsa-base anacron at-spi2-core dmz-cursor-theme fonts-freefont-ttf fonts-urw-base35 foomatic-db-compressed-ppds genisoimage ghostscript ghostscript-x
+gir1.2-goa-1.0 gir1.2-snapd-1 gnome-menus gnome-shell-extension-appindicator gnome-shell-extension-desktop-icons inputattach libasound2-plugins
+libatk-adaptor libcairo-gobject-perl libcairo-perl libcue2 libdee-1.0-4 libexempi8 libexiv2-27 libextutils-depends-perl libextutils-pkgconfig-perl
+libgexiv2-2 libglib-object-introspection-perl libglib-perl libglu1-mesa libgs9 libgs9-common libgsf-1-114 libgsf-1-common libgtk3-perl libgxps2
+libidn11 libijs-0.35 libjbig2dec0 libnautilus-extension1a libnotify-bin libpaper1 libpoppler-glib8 libpulsedsp libsasl2-modules libspeexdsp1
+libtotem-plparser-common libtotem-plparser18 libtracker-control-2.0-0 libtracker-miner-2.0-0 libtracker-sparql-2.0-0 libu2f-udev
+libunity-protocol-private0 libunity-scopes-json-def-desktop libunity9 libxxf86dga1 libyelp0 linux-sound-base nautilus nautilus-data openprinting-ppds
+poppler-data printer-driver-pnm2ppa pulseaudio pulseaudio-utils python3-click python3-colorama python3-dateutil python3-debconf python3-debian
+python3-distupgrade python3-update-manager python3-xkit python3-yaml software-properties-gtk spice-vdagent tracker tracker-extract tracker-miner-fs
+update-manager update-manager-core update-notifier update-notifier-common x11-apps x11-session-utils x11-utils xdg-desktop-portal xdg-user-dirs
+xdg-user-dirs-gtk xinput xorg xorg-docs-core yaru-theme-gnome-shell yelp yelp-xsl pulseaudio-module-bluetooth pavucontrol gnome-shell-extension-trash
+cups system-config-printer-gnome ubuntu-desktop-minimal ubuntu-session ubuntu-settings ubuntu-business-defaults gconf2 gdebi
diff --git a/config/desktop/hirsute/environments/gnome/debian b/config/desktop/hirsute/environments/gnome/debian
new file mode 120000
index 000000000..68b05869b
--- /dev/null
+++ b/config/desktop/hirsute/environments/gnome/debian
@@ -0,0 +1 @@
+../../../focal/environments/gnome/debian
\ No newline at end of file
diff --git a/config/desktop/hirsute/environments/gnome/only_for b/config/desktop/hirsute/environments/gnome/only_for
new file mode 120000
index 000000000..6b2dee246
--- /dev/null
+++ b/config/desktop/hirsute/environments/gnome/only_for
@@ -0,0 +1 @@
+../../../focal/environments/gnome/only_for
\ No newline at end of file
diff --git a/config/desktop/hirsute/environments/gnome/support b/config/desktop/hirsute/environments/gnome/support
new file mode 120000
index 000000000..fe28f381d
--- /dev/null
+++ b/config/desktop/hirsute/environments/gnome/support
@@ -0,0 +1 @@
+../../../focal/environments/gnome/support
\ No newline at end of file
diff --git a/config/desktop/hirsute/environments/mate b/config/desktop/hirsute/environments/mate
new file mode 120000
index 000000000..1defe21ee
--- /dev/null
+++ b/config/desktop/hirsute/environments/mate
@@ -0,0 +1 @@
+../../focal/environments/mate
\ No newline at end of file
diff --git a/config/desktop/hirsute/environments/xfce b/config/desktop/hirsute/environments/xfce
new file mode 120000
index 000000000..e48eb6dc1
--- /dev/null
+++ b/config/desktop/hirsute/environments/xfce
@@ -0,0 +1 @@
+../../focal/environments/xfce
\ No newline at end of file
diff --git a/config/desktop/sid b/config/desktop/sid
new file mode 120000
index 000000000..766a99ab6
--- /dev/null
+++ b/config/desktop/sid
@@ -0,0 +1 @@
+buster
\ No newline at end of file
diff --git a/config/distributions/bionic/name b/config/distributions/bionic/name
new file mode 100644
index 000000000..6e4b58986
--- /dev/null
+++ b/config/distributions/bionic/name
@@ -0,0 +1 @@
+Ubuntu Bionic 18.04 LTS
diff --git a/config/distributions/bionic/support b/config/distributions/bionic/support
new file mode 100644
index 000000000..03cd47015
--- /dev/null
+++ b/config/distributions/bionic/support
@@ -0,0 +1 @@
+csc
diff --git a/config/distributions/bullseye/name b/config/distributions/bullseye/name
new file mode 100644
index 000000000..81a0632a5
--- /dev/null
+++ b/config/distributions/bullseye/name
@@ -0,0 +1 @@
+Debian 11 Bullseye
diff --git a/config/distributions/bullseye/support b/config/distributions/bullseye/support
new file mode 100644
index 000000000..03cd47015
--- /dev/null
+++ b/config/distributions/bullseye/support
@@ -0,0 +1 @@
+csc
diff --git a/config/distributions/buster/name b/config/distributions/buster/name
new file mode 100644
index 000000000..fd7da05fe
--- /dev/null
+++ b/config/distributions/buster/name
@@ -0,0 +1 @@
+Debian 10 Buster
diff --git a/config/distributions/buster/support b/config/distributions/buster/support
new file mode 100644
index 000000000..a23e5fb94
--- /dev/null
+++ b/config/distributions/buster/support
@@ -0,0 +1 @@
+supported
diff --git a/config/distributions/focal/name b/config/distributions/focal/name
new file mode 100644
index 000000000..65d22abf2
--- /dev/null
+++ b/config/distributions/focal/name
@@ -0,0 +1 @@
+Ubuntu Focal 20.04 LTS
diff --git a/config/distributions/focal/support b/config/distributions/focal/support
new file mode 100644
index 000000000..a23e5fb94
--- /dev/null
+++ b/config/distributions/focal/support
@@ -0,0 +1 @@
+supported
diff --git a/config/distributions/hirsute/name b/config/distributions/hirsute/name
new file mode 100644
index 000000000..16f6ce4f1
--- /dev/null
+++ b/config/distributions/hirsute/name
@@ -0,0 +1 @@
+Ubuntu Hirsute 21.04
diff --git a/config/distributions/hirsute/support b/config/distributions/hirsute/support
new file mode 100644
index 000000000..03cd47015
--- /dev/null
+++ b/config/distributions/hirsute/support
@@ -0,0 +1 @@
+csc
diff --git a/config/distributions/sid/name b/config/distributions/sid/name
new file mode 100644
index 000000000..faba7461a
--- /dev/null
+++ b/config/distributions/sid/name
@@ -0,0 +1 @@
+Debian 12 Sid
diff --git a/config/distributions/sid/support b/config/distributions/sid/support
new file mode 100644
index 000000000..03cd47015
--- /dev/null
+++ b/config/distributions/sid/support
@@ -0,0 +1 @@
+csc
diff --git a/config/distributions/stretch/name b/config/distributions/stretch/name
new file mode 100644
index 000000000..b095b99be
--- /dev/null
+++ b/config/distributions/stretch/name
@@ -0,0 +1 @@
+Debian 9 Stretch
diff --git a/config/distributions/stretch/support b/config/distributions/stretch/support
new file mode 100644
index 000000000..bc2264ca1
--- /dev/null
+++ b/config/distributions/stretch/support
@@ -0,0 +1 @@
+eos
diff --git a/config/distributions/xenial/name b/config/distributions/xenial/name
new file mode 100644
index 000000000..5775788f6
--- /dev/null
+++ b/config/distributions/xenial/name
@@ -0,0 +1 @@
+Ubuntu Xenial 16.04 LTS
diff --git a/config/distributions/xenial/support b/config/distributions/xenial/support
new file mode 100644
index 000000000..bc2264ca1
--- /dev/null
+++ b/config/distributions/xenial/support
@@ -0,0 +1 @@
+eos
diff --git a/config/optional/boards/nanopct4/_config/desktop/_all_distributions/environments/_all_environments/armbian/create_desktop_package.sh b/config/optional/boards/nanopct4/_config/desktop/_all_distributions/environments/_all_environments/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..73de3e907
--- /dev/null
+++ b/config/optional/boards/nanopct4/_config/desktop/_all_distributions/environments/_all_environments/armbian/create_desktop_package.sh
@@ -0,0 +1,7 @@
+# install custom asound state for pinebook-pro
+mkdir -p "${destination}"/etc/
+cp -R "${SRC}"/packages/blobs/asound.state/ "${destination}"/etc/
+
+# install custom xorg for pinebook-pro
+mkdir -p "${destination}"/etc/X11/
+cp -R "${SRC}"/packages/bsp/rk3399/xorg.conf "${destination}"/etc/X11/
diff --git a/config/optional/boards/pinebook-pro/_config/desktop/_all_distributions/environments/_all_environments/armbian/create_desktop_package.sh b/config/optional/boards/pinebook-pro/_config/desktop/_all_distributions/environments/_all_environments/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..99c4057f1
--- /dev/null
+++ b/config/optional/boards/pinebook-pro/_config/desktop/_all_distributions/environments/_all_environments/armbian/create_desktop_package.sh
@@ -0,0 +1,11 @@
+# install custom xorg for pinebook-pro
+cp -R "${SRC}"/packages/bsp/pinebook-pro/xorg.conf "${destination}"/etc/X11/xorg.conf.d/
+
+# install custom asound state for pinebook-pro
+cp -R "${SRC}"/packages/asound.state/ "${destination}"/etc/
+
+## touchpad and keyboard tweaks
+# from https://github.com/ayufan-rock64/linux-package/tree/master/root-pinebookpro
+cp $SRC/packages/bsp/pinebook-pro/40-pinebookpro-touchpad.conf $destination/etc/X11/xorg.conf.d/
+mkdir -p $destination/etc/udev/hwdb.d/
+cp $SRC/packages/bsp/pinebook-pro/10-usb-kbd.hwdb $destination/etc/udev/hwdb.d/
diff --git a/config/optional/boards/pinebook-pro/_config/desktop/_all_distributions/environments/xfce/armbian/create_desktop_package.sh b/config/optional/boards/pinebook-pro/_config/desktop/_all_distributions/environments/xfce/armbian/create_desktop_package.sh
new file mode 100644
index 000000000..355908f17
--- /dev/null
+++ b/config/optional/boards/pinebook-pro/_config/desktop/_all_distributions/environments/xfce/armbian/create_desktop_package.sh
@@ -0,0 +1,4 @@
+# powerconfig, touchpad, and special keys
+cp $SRC/packages/bsp/pinebook-pro/xfce4-power-manager.xml ${SDCARD}/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/
+cp $SRC/packages/bsp/pinebook-pro/pointers.xml ${SDCARD}/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/
+cp $SRC/packages/bsp/pinebook-pro/xfce4-keyboard-shortcuts.xml ${SDCARD}/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/
diff --git a/config/sources/arm64.conf b/config/sources/arm64.conf
index 2ced54e48..4a5125c2c 100644
--- a/config/sources/arm64.conf
+++ b/config/sources/arm64.conf
@@ -5,23 +5,30 @@ ARCH=arm64
KERNEL_IMAGE_TYPE=Image
CAN_BUILD_STRETCH=yes
-[[ $ATF_COMPILE != "no" && -z $ATF_COMPILER ]] && ATF_COMPILER="aarch64-none-linux-gnu-"
+if [ "$(uname -m)" = "aarch64" ]; then
+ [[ $ATF_COMPILE != "no" && -z $ATF_COMPILER ]] && ATF_COMPILER="aarch64-linux-gnu-"
+ [[ -z $UBOOT_COMPILER ]] && UBOOT_COMPILER="aarch64-linux-gnu-"
+ [[ -z $KERNEL_COMPILER ]] && KERNEL_COMPILER="aarch64-linux-gnu-"
+ [[ -z $KERNEL_USE_GCC ]] && KERNEL_USE_GCC='> 8.0'
+else
+ [[ $ATF_COMPILE != "no" && -z $ATF_COMPILER ]] && ATF_COMPILER="aarch64-none-linux-gnu-"
+ [[ -z $UBOOT_COMPILER ]] && UBOOT_COMPILER="aarch64-none-linux-gnu-"
+ # > 9.2 https://armbian.atlassian.net/browse/AR-557
+ # [[ -z $KERNEL_COMPILER ]] && KERNEL_COMPILER="aarch64-none-linux-gnu-"
+ [[ -z $KERNEL_COMPILER ]] && KERNEL_COMPILER="aarch64-linux-gnu-"
+ [[ -z $KERNEL_USE_GCC ]] && KERNEL_USE_GCC='< 9.2'
+fi
+
[[ $ATF_COMPILE != "no" && -z $ATFSOURCE ]] && ATFSOURCE='https://github.com/ARM-software/arm-trusted-firmware'
[[ $ATF_COMPILE != "no" && -z $ATFDIR ]] && ATFDIR='arm-trusted-firmware-sunxi-mainline'
[[ $ATF_COMPILE != "no" && -z $ATFBRANCH ]] && ATFBRANCH='branch:master'
[[ $ATF_COMPILE != "no" && -z $ATF_USE_GCC ]] && ATF_USE_GCC='> 8.0'
-[[ -z $UBOOT_COMPILER ]] && UBOOT_COMPILER="aarch64-none-linux-gnu-"
-[[ -z $UBOOT_USE_GCC ]] && UBOOT_USE_GCC='> 8.0'
+[[ -z $UBOOT_USE_GCC ]] && UBOOT_USE_GCC='> 8.0'
[[ -z $BOOTSOURCE ]] && BOOTSOURCE=$MAINLINE_UBOOT_SOURCE
[[ -z $BOOTDIR ]] && BOOTDIR=$MAINLINE_UBOOT_DIR
[[ -z $BOOTBRANCH ]] && BOOTBRANCH='tag:v2020.04'
-# > 9.2 https://armbian.atlassian.net/browse/AR-557
-# [[ -z $KERNEL_COMPILER ]] && KERNEL_COMPILER="aarch64-none-linux-gnu-"
-[[ -z $KERNEL_COMPILER ]] && KERNEL_COMPILER="aarch64-linux-gnu-"
-[[ -z $KERNEL_USE_GCC ]] && KERNEL_USE_GCC='< 9.2'
[[ -z $KERNELDIR ]] && KERNELDIR=$MAINLINE_KERNEL_DIR
[[ -z $KERNELSOURCE ]] && KERNELSOURCE=$MAINLINE_KERNEL_SOURCE
[[ -z $KERNELBRANCH ]] && KERNELBRANCH='branch:linux-5.4.y'
-
diff --git a/config/sources/armhf.conf b/config/sources/armhf.conf
index 09b341037..3b26b58f3 100644
--- a/config/sources/armhf.conf
+++ b/config/sources/armhf.conf
@@ -4,17 +4,25 @@ ARCHITECTURE=arm
ARCH=armhf
KERNEL_IMAGE_TYPE=Image
CAN_BUILD_STRETCH=yes
-[[ -z $UBOOT_COMPILER ]] && UBOOT_COMPILER="arm-none-linux-gnueabihf-"
-[[ -z $UBOOT_USE_GCC ]] && UBOOT_USE_GCC='> 8.0'
+if [ "$(uname -m)" = "aarch64" ]; then
+ [[ -z $UBOOT_COMPILER ]] && UBOOT_COMPILER="arm-linux-gnueabihf-"
+else
+ [[ -z $UBOOT_COMPILER ]] && UBOOT_COMPILER="arm-none-linux-gnueabihf-"
+fi
+[[ -z $UBOOT_USE_GCC ]] && UBOOT_USE_GCC='> 8.0'
[[ -z $BOOTSOURCE ]] && BOOTSOURCE=$MAINLINE_UBOOT_SOURCE
[[ -z $BOOTDIR ]] && BOOTDIR=$MAINLINE_UBOOT_DIR
[[ -z $BOOTBRANCH ]] && BOOTBRANCH='tag:v2020.04'
-# > 9.2 https://armbian.atlassian.net/browse/AR-557
-#[[ -z $KERNEL_COMPILER ]] && KERNEL_COMPILER="arm-none-linux-gnueabihf-"
-[[ -z $KERNEL_COMPILER ]] && KERNEL_COMPILER="arm-linux-gnueabihf-"
-[[ -z $KERNEL_USE_GCC ]] && KERNEL_USE_GCC='< 9.2'
+if [ "$(uname -m)" = "aarch64" ]; then
+ [[ -z $KERNEL_COMPILER ]] && KERNEL_COMPILER="arm-linux-gnueabihf-"
+ [[ -z $KERNEL_USE_GCC ]] && KERNEL_USE_GCC='> 8.0'
+else
+ # > 9.2 https://armbian.atlassian.net/browse/AR-557
+ #[[ -z $KERNEL_COMPILER ]] && KERNEL_COMPILER="arm-none-linux-gnueabihf-"
+ [[ -z $KERNEL_COMPILER ]] && KERNEL_COMPILER="arm-linux-gnueabihf-"
+ [[ -z $KERNEL_USE_GCC ]] && KERNEL_USE_GCC='< 9.2'
+fi
[[ -z $KERNELDIR ]] && KERNELDIR=$MAINLINE_KERNEL_DIR
[[ -z $KERNELSOURCE ]] && KERNELSOURCE=$MAINLINE_KERNEL_SOURCE
[[ -z $KERNELBRANCH ]] && KERNELBRANCH='branch:linux-5.4.y'
-
diff --git a/config/sources/families/include/meson64_common.inc b/config/sources/families/include/meson64_common.inc
index 164dc6b8f..18e22228f 100644
--- a/config/sources/families/include/meson64_common.inc
+++ b/config/sources/families/include/meson64_common.inc
@@ -39,6 +39,16 @@ case $BRANCH in
esac
+if [ "$(uname -m)" = "aarch64" ]; then
+ if [ "$(lsb_release -sc)" = "focal" ]; then
+ PKG_PREFIX="qemu-x86_64-static "
+ else
+ PKG_PREFIX="qemu-x86_64 "
+ fi
+else
+ PKG_PREFIX=""
+fi
+
# this helper function includes postprocess for p212 and its variants.
# $1 PATH for uboot blob repo
# $2 dir name in uboot blob repo
@@ -64,14 +74,14 @@ uboot_gxl_postprocess()
$1/$2/bl21_zero.bin \
$1/$2/bl2_new.bin bl2
- $1/$2/aml_encrypt_gxl --bl3enc --input $1/$2/bl30_new.bin
- $1/$2/aml_encrypt_gxl --bl3enc --input $1/$2/bl31.img
- $1/$2/aml_encrypt_gxl --bl3enc --input bl33.bin
+ $PKG_PREFIX$1/$2/aml_encrypt_gxl --bl3enc --input $1/$2/bl30_new.bin
+ $PKG_PREFIX$1/$2/aml_encrypt_gxl --bl3enc --input $1/$2/bl31.img
+ $PKG_PREFIX$1/$2/aml_encrypt_gxl --bl3enc --input bl33.bin
- $1/$2/aml_encrypt_gxl --bl2sig --input $1/$2/bl2_new.bin \
+ $PKG_PREFIX$1/$2/aml_encrypt_gxl --bl2sig --input $1/$2/bl2_new.bin \
--output bl2.n.bin.sig
- $1/$2/aml_encrypt_gxl --bootmk \
+ $PKG_PREFIX$1/$2/aml_encrypt_gxl --bootmk \
--output u-boot.bin \
--bl2 bl2.n.bin.sig \
--bl30 $1/$2/bl30_new.bin.enc \
@@ -100,29 +110,29 @@ uboot_g12_postprocess()
bl21_zero.bin \
bl2_new.bin bl2
- $1/aml_encrypt_$2 --bl30sig \
+ $PKG_PREFIX$1/aml_encrypt_$2 --bl30sig \
--input bl30_new.bin \
--output bl30_new.bin.g12.enc \
--level v3
- $1/aml_encrypt_$2 --bl3sig \
+ $PKG_PREFIX$1/aml_encrypt_$2 --bl3sig \
--input bl30_new.bin.g12.enc \
--output bl30_new.bin.enc \
--level v3 --type bl30
- $1/aml_encrypt_$2 --bl3sig \
+ $PKG_PREFIX$1/aml_encrypt_$2 --bl3sig \
--input $1/bl31.img \
--output bl31.img.enc \
--level v3 --type bl31
- $1/aml_encrypt_$2 --bl3sig \
+ $PKG_PREFIX$1/aml_encrypt_$2 --bl3sig \
--input bl33.bin \
--compress lz4 \
--output bl33.bin.enc \
--level v3 --type bl33
- $1/aml_encrypt_$2 --bl2sig \
+ $PKG_PREFIX$1/aml_encrypt_$2 --bl2sig \
--input bl2_new.bin \
--output bl2.n.bin.sig
if [ -e $1/lpddr3_1d.fw ]
then
- $1/aml_encrypt_$2 --bootmk --output u-boot.bin \
+ $PKG_PREFIX$1/aml_encrypt_$2 --bootmk --output u-boot.bin \
--bl2 bl2.n.bin.sig \
--bl30 bl30_new.bin.enc \
--bl31 bl31.img.enc \
@@ -138,7 +148,7 @@ uboot_g12_postprocess()
--ddrfw9 $1/lpddr3_1d.fw \
--level v3
else
- $1/aml_encrypt_$2 --bootmk --output u-boot.bin \
+ $PKG_PREFIX$1/aml_encrypt_$2 --bootmk --output u-boot.bin \
--bl2 bl2.n.bin.sig \
--bl30 bl30_new.bin.enc \
--bl31 bl31.img.enc \
@@ -206,11 +216,43 @@ family_tweaks_bsp()
install -m 755 $SRC/packages/bsp/rockchip/hdmi-hotplug $destination/usr/local/bin
mkdir -p "$destination"/etc/X11/xorg.conf.d
+ if [[ $BOARD == odroidc2 || $BOARD == nanopik2 || $BOARD == lepatato || $BOARD == lafrite || $BOARD == vim1 ]]; then
+
cat <<-EOF > "$destination"/etc/X11/xorg.conf.d/02-driver.conf
# set fbdev as default driver.
Section "Device"
- Identifier "NOGPU"
- Driver "fbdev"
- EndSection
+ Identifier "NOGPU"
+ Driver "fbdev"
+ EndSection
EOF
+
+ elif [[ $BOARD == odroidn2 || $BOARD == odroidc4 || $BOARD == vim2 ]]; then
+
+ cat <<-EOF > "$destination"/etc/X11/xorg.conf
+ Section "Device"
+ Identifier "Armsoc Graphics"
+
+ ## Use armsoc driver
+ # Driver "armsoc"
+ ## End armsoc configuration
+
+ ## Use modesetting and glamor
+ Driver "modesetting"
+ Option "AccelMethod" "glamor" ### "glamor" to enable 3D acceleration, "none" to disable.
+ Option "DRI" "2"
+ Option "Dri2Vsync" "true"
+ Option "TripleBuffer" "True"
+ ## End glamor configuration
+
+ EndSection
+
+ Section "Screen"
+ Identifier "Default Screen"
+ SubSection "Display"
+ Depth 24
+ EndSubSection
+ EndSection
+ EOF
+
+ fi
}
diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc
index b6c4751c8..d825093de 100644
--- a/config/sources/families/include/rockchip64_common.inc
+++ b/config/sources/families/include/rockchip64_common.inc
@@ -181,6 +181,18 @@ legacy_uboot_locations()
uboot_custom_postprocess()
{
+ if [ "$(uname -m)" = "aarch64" ]; then
+ if [ "$(lsb_release -sc)" = "focal" ]; then
+ PKG_PREFIX="qemu-x86_64-static -L /usr/x86_64-linux-gnu "
+ else
+ PKG_PREFIX="qemu-x86_64 -L /usr/x86_64-linux-gnu "
+ fi
+ else
+ PKG_PREFIX=""
+ fi
+
+ RKBIN_DIR="$SRC/cache/sources/rkbin-tools"
+
if [[ $BOOT_USE_MAINLINE_ATF == yes || $BOOT_USE_TPL_SPL_BLOB == yes ]]; then
:
elif [[ $BOOT_USE_BLOBS == yes ]]; then
@@ -188,8 +200,8 @@ uboot_custom_postprocess()
local tempfile=$(mktemp)
tools/mkimage -n $BOOT_SOC -T rksd -d $RKBIN_DIR/$DDR_BLOB idbloader.bin
cat $RKBIN_DIR/$MINILOADER_BLOB >> idbloader.bin
- loaderimage --pack --uboot ./u-boot-dtb.bin uboot.img 0x200000
- trust_merger --replace bl31.elf $RKBIN_DIR/$BL31_BLOB trust.ini
+ $PKG_PREFIX$RKBIN_DIR/tools/loaderimage --pack --uboot ./u-boot-dtb.bin uboot.img 0x200000
+ $PKG_PREFIX$RKBIN_DIR/tools/trust_merger --replace bl31.elf $RKBIN_DIR/$BL31_BLOB trust.ini
elif [[ $BOOT_RK3399_LEGACY_HYBRID == yes ]]; then
@@ -210,7 +222,7 @@ uboot_custom_postprocess()
# 3328
tools/mkimage -n rk3328 -T rksd -d $SRC/cache/sources/rkbin-tools/rk33/rk3328_ddr_786MHz_v1.13.bin idbloader.bin
cat $SRC/cache/sources/rkbin-tools/rk33/rk3328_miniloader_v2.46.bin >> idbloader.bin
- loaderimage --pack --uboot ./u-boot-dtb.bin uboot.img 0x200000
+ $PKG_PREFIX$RKBIN_DIR/tools/loaderimage --pack --uboot ./u-boot-dtb.bin uboot.img 0x200000
else
echo "Unsupported u-boot processing configuration!"
@@ -286,7 +298,7 @@ atf_custom_postprocess()
# remove bl31.bin which can be 4+GiB in size and thus may fill the tmpfs mount
rm -f build/rk322xh/debug/bl31.bin
# ATF
- trust_merger trust.ini
+ $PKG_PREFIX$RKBIN_DIR/tools/trust_merger trust.ini
}
diff --git a/config/sources/families/meson-gxbb.conf b/config/sources/families/meson-gxbb.conf
index b4ac6dedb..f7fc5025e 100644
--- a/config/sources/families/meson-gxbb.conf
+++ b/config/sources/families/meson-gxbb.conf
@@ -7,15 +7,15 @@ uboot_custom_postprocess()
{
if [[ $BOARD == odroidc2 ]]; then
local t=$SRC/cache/sources/odroidc2-blobs/
- $t/fip_create --bl30 $t/gxb/bl30.bin \
+ $PKG_PREFIX$t/fip_create --bl30 $t/gxb/bl30.bin \
--bl301 $t/gxb/bl301.bin \
--bl31 $t/gxb/bl31.bin \
--bl33 u-boot.bin \
fip.bin
- $t/fip_create --dump fip.bin
+ $PKG_PREFIX$t/fip_create --dump fip.bin
cat $t/gxb/bl2.package fip.bin > boot_new.bin
rm -f u-boot.img
- $t/gxb/aml_encrypt_gxb --bootsig \
+ $PKG_PREFIX$t/gxb/aml_encrypt_gxb --bootsig \
--input boot_new.bin \
--output u-boot.img
rm -f u-boot.bin
@@ -33,12 +33,12 @@ uboot_custom_postprocess()
$t/k2/bl301_zero.bin \
$t/k2/bl30_new.bin bl30
- $t/k2/fip_create --bl30 $t/k2/bl30_new.bin \
+ $PKG_PREFIX$t/k2/fip_create --bl30 $t/k2/bl30_new.bin \
--bl31 $t/k2/bl31.img \
--bl33 bl33.bin \
$t/k2/fip.bin
- $t/k2/fip_create --dump $t/k2/fip.bin
+ $PKG_PREFIX$t/k2/fip_create --dump $t/k2/fip.bin
python $t/acs_tool.pyc $t/k2/bl2.bin \
$t/k2/bl2_acs.bin \
@@ -53,7 +53,7 @@ uboot_custom_postprocess()
cat $t/k2/bl2_new.bin $t/k2/fip.bin > boot_new.bin
- $t/k2/aml_encrypt_gxb --bootsig \
+ $PKG_PREFIX$t/k2/aml_encrypt_gxb --bootsig \
--input boot_new.bin \
--output u-boot.bin
diff --git a/config/targets-cli-beta.conf b/config/targets-cli-beta.conf
new file mode 100644
index 000000000..ea111fde8
--- /dev/null
+++ b/config/targets-cli-beta.conf
@@ -0,0 +1,392 @@
+######################################################################################################
+# board branch release desktop|cli|minimal stable|beta create images #
+######################################################################################################
+
+# Bananapi M1 / M1+ A20
+bananapi current hirsute cli beta yes
+bananapi legacy hirsute cli beta no
+
+
+# Bananapi Pro A20
+bananapi current hirsute cli beta yes
+
+
+# Bananapi M2+ H3
+bananapim2plus current hirsute cli beta yes
+
+
+# Bananapi M2 Zero H2+
+bananapim2zero current hirsute cli beta yes
+
+
+# Bananapi M2U R40
+bananapim2ultra current hirsute cli beta yes
+
+
+# Bananapi M64
+bananapim64 current hirsute cli beta yes
+
+
+# Bananapi R2
+bananapir2 legacy hirsute cli beta no
+
+
+# Helios4
+helios4 current hirsute cli beta yes
+helios4 dev hirsute cli beta no
+
+
+# Helios64
+helios64 current hirsute cli beta yes
+
+
+# Clearfog Base
+clearfogbase current hirsute cli beta yes
+
+
+# Clearfog Pro
+clearfogpro current hirsute cli beta yes
+
+
+# Cubieboard1
+cubieboard current hirsute cli beta yes
+
+
+# Cubieboard2
+cubieboard2 current hirsute cli beta yes
+
+
+# Cubietruck
+cubietruck current hirsute cli beta yes
+
+
+# Cubox-i
+cubox-i current hirsute cli beta yes
+
+
+# Espressobin
+espressobin current hirsute cli beta yes
+
+
+# Friendlyelec fe-som-rk3399
+fe-som-rk3399 current hirsute cli beta yes
+
+
+# Firefly rk3399
+firefly-rk3399 current hirsute cli beta yes
+
+
+# Khadas Vim1
+kvim1 current hirsute cli beta yes
+
+
+# Khadas Vim2
+kvim1 current hirsute cli beta yes
+
+
+# La frite
+lafrite current hirsute cli beta yes
+
+
+# Lepotato
+lepotato current hirsute cli beta yes
+
+
+# Olimex Lime
+lime current hirsute cli beta yes
+
+
+# Olimex Lime A-10
+lime-a10 current hirsute cli beta yes
+
+
+# Olimex Micro
+micro current hirsute cli beta yes
+
+
+# Olimex Lime2
+lime2 current hirsute cli beta yes
+
+
+# Olimex Lime A64
+lime-a64 current hirsute cli beta yes
+
+
+# MiQi
+miqi current hirsute cli beta yes
+
+
+# nanopct4
+nanopct4 current hirsute cli beta yes
+
+
+# nanopi-r1
+nanopi-r1 current hirsute cli beta yes
+
+
+# nanopi-r2s
+nanopi-r2s current hirsute cli beta yes
+
+
+# nanopi-r4s
+nanopi-r4s current hirsute cli beta yes
+
+
+# nanopiair
+nanopiair current hirsute cli beta yes
+
+
+# nanopiduo
+nanopiduo current hirsute cli beta yes
+
+
+# nanopiduo2
+nanopiduo2 current hirsute cli beta yes
+
+
+# nanopik1plus
+nanopik1plus current hirsute cli beta yes
+
+
+# nanopik2-905
+nanopik2-s905 current hirsute cli beta yes
+
+
+# nanopim1
+nanopim1 current hirsute cli beta yes
+
+
+# nanopim1plus
+nanopim1plus current hirsute cli beta yes
+
+
+# nanopim4
+nanopim4 current hirsute cli beta yes
+
+
+# nanopim4v2
+nanopim4v2 current hirsute cli beta yes
+
+
+# nanopineo
+nanopineo current hirsute cli beta yes
+
+
+# nanopineocore2
+nanopineo2 current hirsute cli beta yes
+
+
+# nanopineo2black
+nanopineo2black current hirsute cli beta yes
+
+
+# nanopineo3
+nanopineo3 current hirsute cli beta yes
+
+
+# nanopineo4
+nanopineo4 current hirsute cli beta yes
+
+
+# nanopineocore2
+nanopineocore2 current hirsute cli beta yes
+
+
+# nanopineoplus2
+nanopineoplus2 current hirsute cli beta yes
+
+
+# nanopia64
+nanopia64 current hirsute cli beta yes
+
+
+# Odroid C1
+odroidc1 current hirsute cli beta yes
+
+
+# Odroid C2
+odroidc2 current hirsute cli beta yes
+
+
+# Odroid N2 / N2+
+odroidn2 current hirsute cli beta yes
+
+
+# Odroid C4
+odroidc4 current hirsute cli beta yes
+
+
+# Odroid HC4
+odroidhc4 current hirsute cli beta yes
+
+
+# Odroid XU4
+odroidxu4 current hirsute cli beta yes
+
+
+# orangepi2
+orangepi2 current hirsute cli beta yes
+
+
+# orangepi 3
+orangepi3 current hirsute cli beta yes
+
+
+# Orangepi 4
+orangepi4 current hirsute cli beta yes
+
+
+# orangepi-r1
+orangepi-r1 current hirsute cli beta yes
+
+
+# Orangepi rk3399
+orangepi-rk3399 current hirsute cli beta yes
+
+
+# orangepilite
+orangepilite current hirsute cli beta yes
+
+
+# orangepilite2
+orangepilite2 current hirsute cli beta yes
+
+
+# orangepioneplus
+orangepioneplus current hirsute cli beta yes
+
+
+# orangepione
+orangepione current hirsute cli beta yes
+
+
+# orangepipc
+orangepipc current hirsute cli beta yes
+
+
+# orangepipc2
+orangepipc2 current hirsute cli beta yes
+
+
+# orangepipcplus
+orangepipcplus current hirsute cli beta yes
+
+
+# orangepiplus
+orangepiplus current hirsute cli beta yes
+
+
+# orangepiplus2e
+orangepiplus2e current hirsute cli beta yes
+
+
+# Orangepi Prime
+orangepiprime current hirsute cli beta yes
+
+
+# Orangepi Win
+orangepiwin current hirsute cli beta yes
+
+
+# orangepizero
+orangepizero current hirsute cli beta yes
+
+
+# orangepizero2
+orangepizero2 dev hirsute cli beta yes
+
+
+# orangepizeroplus
+orangepizeroplus current hirsute cli beta yes
+
+
+# orangepizeroplus2-h3
+orangepizeroplus2-h3 current hirsute cli beta yes
+
+
+# orangepizeroplus2-h5
+orangepizeroplus2-h5 current hirsute cli beta yes
+
+
+# Pine64
+pine64 current hirsute cli beta yes
+
+
+# Pine64so
+pine64so current hirsute cli beta yes
+
+
+# Pine H64
+pineh64 current hirsute cli beta yes
+
+
+# Pine H64 B
+pineh64-b current hirsute cli beta yes
+
+
+# Renegade
+renegade current hirsute cli beta yes
+
+
+# rk322x-box
+rk322x-box current hirsute cli beta yes
+
+
+# Rock64
+rock64 current hirsute cli beta yes
+
+
+# Rockpi 4a
+rockpi-4a current hirsute cli beta yes
+
+
+# Rockpi 4b
+rockpi-4b current hirsute cli beta yes
+
+
+# Rockpi 4c
+rockpi-4c current hirsute cli beta yes
+
+
+# Rockpi S
+rockpi-s current hirsute minimal beta yes
+
+
+# Rockpi E
+rockpi-e current hirsute cli beta yes
+
+
+# Rock64pro
+rockpro64 current hirsute cli beta yes
+
+
+# Tinkerboard
+tinkerboard current hirsute cli beta yes
+
+
+# Station M1
+station-m1 current hirsute cli beta yes
+
+
+# Station P1
+station-p1 current hirsute cli beta yes
+
+
+# tritium-h3
+tritium-h3 current hirsute cli beta yes
+
+
+# tritium-h5
+tritium-h5 current hirsute cli beta yes
+
+
+# Udoo
+udoo current hirsute cli beta yes
+
+
+# Z28 pro
+z28pro legacy hirsute cli beta yes
+
+
+# zeropi
+zeropi current hirsute cli beta yes
diff --git a/config/targets-desktop-beta.conf b/config/targets-desktop-beta.conf
new file mode 100644
index 000000000..e320aae43
--- /dev/null
+++ b/config/targets-desktop-beta.conf
@@ -0,0 +1,159 @@
+#########################################################################################################################################################
+# board branch release desktop|cli|minimal stable|beta create images DE DE config Comma delimited app groups #
+#########################################################################################################################################################
+
+#Friendlyelec FE-SOM-RK3399
+fe-som-rk3399 current focal desktop beta yes budgie config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+fe-som-rk3399 current focal desktop beta yes cinnamon config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+fe-som-rk3399 current focal desktop beta yes gnome config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+fe-som-rk3399 current focal desktop beta yes mate config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+fe-som-rk3399 current focal desktop beta yes xfce config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+
+
+# Khadas Vim1
+kvim1 current focal desktop beta yes gnome config_base
+
+
+# La frite
+lafrite current focal desktop beta yes gnome config_base
+
+
+# Lepotato
+lepotato current focal desktop beta yes gnome config_base
+
+
+# Olimex Lime A64
+lime-a64 current focal desktop beta yes gnome config_base
+
+
+# nanopct4
+nanopct4 current focal desktop beta yes budgie config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+nanopct4 current focal desktop beta yes cinnamon config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+nanopct4 current focal desktop beta yes gnome config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+nanopct4 current focal desktop beta yes mate config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+nanopct4 current focal desktop beta yes xfce config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+
+
+# nanopik1plus
+nanopik1plus current focal desktop beta yes gnome config_base
+
+
+# nanopik2-905
+nanopik2-s905 current focal desktop beta yes gnome config_base
+
+
+# nanopim4
+nanopim4 current focal desktop beta yes gnome config_base
+
+
+# nanopim4v2
+nanopim4v2 current focal desktop beta yes gnome config_base
+nanopim4v2 current focal desktop beta yes xfce config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+
+# Odroid C2
+odroidc2 current focal desktop beta yes gnome config_base
+
+
+# Odroid N2
+odroidn2 current focal desktop beta yes budgie config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+odroidn2 current focal desktop beta yes cinnamon config_base
+odroidn2 current focal desktop beta yes gnome config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+odroidn2 current focal desktop beta yes mate config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+odroidn2 current focal desktop beta yes xfce config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+
+# Odroid C4
+odroidc4 current focal desktop beta yes budgie config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+odroidc4 current focal desktop beta yes cinnamon config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+odroidc4 current focal desktop beta yes gnome config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+odroidc4 current focal desktop beta yes mate config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+odroidc4 current focal desktop beta yes xfce config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+
+
+# Odroid HC4
+odroidhc4 current focal desktop beta yes cinnamon config_base
+
+
+# Odroid XU4
+odroidxu4 current focal desktop beta yes xfce config_base
+
+
+# orangepi 3
+orangepi3 current focal desktop beta yes gnome config_base
+
+
+# Orangepi 4
+orangepi4 current focal desktop beta yes gnome config_base
+
+
+# orangepilite2
+orangepilite2 current focal desktop beta yes gnome config_base
+
+
+# orangepipc2
+orangepipc2 current focal desktop beta yes gnome config_base
+
+
+# Orangepi Prime
+orangepiprime current focal desktop beta yes gnome config_base
+
+
+# Orangepi Win
+orangepiwin current focal desktop beta yes gnome config_base
+
+
+# Pine64
+pine64 current focal desktop beta yes gnome config_base
+
+# Pinebook A64
+pinebook-a64 current focal desktop beta yes gnome config_base
+
+
+# Pinebook PRO
+pinebook-pro current focal desktop beta yes budgie config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+pinebook-pro current focal desktop beta yes cinnamon config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+pinebook-pro current focal desktop beta yes gnome config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+pinebook-pro current focal desktop beta yes mate config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+pinebook-pro current focal desktop beta yes xfce config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+
+
+# Pine H64
+pineh64 current focal desktop beta yes gnome config_base
+
+
+# Pine H64 B
+pineh64-b current focal desktop beta yes gnome config_base
+
+
+# Renegade
+renegade current focal desktop beta yes gnome config_base
+
+
+# Rockpi 4a
+rockpi-4a current focal desktop beta yes gnome config_base
+
+# Rockpi 4b
+rockpi-4b current focal desktop beta yes gnome config_base
+
+
+# Rockpi 4c
+rockpi-4c current focal desktop beta yes gnome config_base
+
+
+# Rock64pro
+
+rockpro64 current focal desktop beta yes budgie config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+rockpro64 current focal desktop beta yes cinnamon config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+rockpro64 current focal desktop beta yes gnome config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+rockpro64 current focal desktop beta yes mate config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+rockpro64 current focal desktop beta yes xfce config_base browsers,chat,desktop_tools,editors,email,internet,internet-tools,multimedia,office,programming,remote_desktop
+
+# Teres A64
+teres-a64 current focal desktop beta yes gnome config_base
+
+
+# Tinkerboard
+tinkerboard current focal desktop beta yes xfce config_base
+
+
+# tritium-h5
+tritium-h5 current focal desktop beta yes gnome config_base
diff --git a/config/targets.conf b/config/targets.conf
index 3deb4fbef..f9823758a 100644
--- a/config/targets.conf
+++ b/config/targets.conf
@@ -1,919 +1,684 @@
-# targets are delimited with tabs
-#
-# boardname - legacy|current|dev - upstream release name - desktop|cli|minimal - stable|beta - yes, images
-#
+#########################################################################################################################################################
+# board branch release desktop|cli|minimal stable|beta create images DE DE config Comma delimited app groups #
+#########################################################################################################################################################
-# Bananapi A20
+# Bananapi M1 / M1+ A20
+bananapi current buster cli stable yes
+bananapi current buster desktop stable yes xfce config_base browsers,chat
+bananapi current focal cli stable yes
+bananapi current focal desktop stable yes xfce config_base browsers,chat
+bananapi current buster minimal stable yes
+bananapi current focal minimal stable yes
+bananapi legacy buster cli stable no
+bananapi dev hirsute cli stable no
+
+
+# Bananapi Pro A20
+bananapi current buster cli stable yes
+bananapi current buster desktop stable yes xfce config_base browsers,chat
+bananapi current focal cli stable yes
+bananapi current focal desktop stable yes xfce config_base browsers,chat
+bananapi current buster minimal stable yes
+bananapi current focal minimal stable yes
+bananapi legacy buster cli stable no
-bananapi legacy buster cli stable no
-bananapi current buster desktop stable yes
-bananapi current buster cli stable yes
-bananapi current bionic cli stable yes
-bananapi current bullseye cli stable yes
-bananapi current focal cli stable yes
-bananapi current buster minimal stable yes
-bananapi current focal desktop stable yes
-bananapi current focal cli beta yes
# Bananapi M2+ H3
+bananapim2plus current buster cli stable yes
+bananapim2plus current buster desktop stable yes xfce config_base browsers,chat
+bananapim2plus current focal cli stable yes
+bananapim2plus current focal desktop stable yes xfce config_base browsers,chat
+bananapim2plus current buster minimal stable yes
+bananapim2plus current focal minimal stable yes
+bananapim2plus legacy buster cli stable no
-bananapim2plus current buster desktop stable yes
-bananapim2plus current bionic cli stable yes
-bananapim2plus current bullseye cli stable yes
-bananapim2plus current focal cli stable yes
-bananapim2plus current focal desktop stable yes
-bananapim2plus current focal cli beta yes
-# Bananapi M2 Zero H3
+# Bananapi M2 Zero H2+
+bananapim2zero current buster cli stable yes
+bananapim2zero current focal cli stable yes
+bananapim2zero current buster minimal stable yes
+bananapim2zero current focal minimal stable yes
+bananapim2zero legacy buster cli stable no
-bananapim2zero current buster desktop stable yes
-bananapim2zero current bionic cli stable yes
-bananapim2zero current bullseye cli stable yes
-bananapim2zero current focal cli stable yes
-bananapim2zero current focal cli beta yes
# Bananapi M2U R40
+bananapim2ultra current buster cli stable yes
+bananapim2ultra current focal cli stable yes
-bananapim2ultra current buster minimal stable yes
-bananapim2ultra current bullseye cli stable yes
-bananapim2ultra current focal minimal stable yes
# Bananapi M3
+bananapim3 current buster cli stable yes
+bananapim3 current focal cli stable yes
-bananapim3 current buster minimal stable yes
-bananapim3 current bionic desktop stable yes
-bananapim3 current bullseye cli stable yes
-bananapim3 current focal cli stable yes
-bananapim3 current focal desktop stable yes
# Bananapi M64
+bananapim64 current buster cli stable yes
+bananapim64 current focal cli stable yes
+bananapim64 dev hirsute cli stable no
-bananapim64 current bionic minimal stable yes
-bananapim64 current buster minimal stable yes
-bananapim64 current bullseye cli stable yes
-bananapim64 current focal cli stable yes
-bananapim64 current focal desktop stable yes
# Bananapi R2
+bananapir2 legacy buster cli stable yes
+bananapir2 legacy focal cli stable yes
-bananapir2 legacy buster minimal stable yes
-bananapir2 legacy focal minimal stable yes
-
-# Bananapi pro A20
-
-bananapipro current buster desktop stable yes
-bananapipro current buster cli stable yes
-bananapipro current bionic cli stable yes
-bananapipro current bullseye cli stable yes
-bananapipro current focal cli stable yes
-bananapipro current buster minimal stable yes
-bananapipro current focal desktop stable yes
-bananapipro current focal cli beta yes
# Helios4
-helios4 current buster cli stable yes
-helios4 current bionic cli stable yes
-helios4 current focal cli stable yes
-helios4 current bullseye cli stable yes
-helios4 current focal cli beta yes
+helios4 current buster cli stable yes
+helios4 current focal cli stable yes
# Helios64
-helios64 legacy buster cli stable yes
-helios64 current buster cli stable yes
-helios64 current bionic cli stable yes
-helios64 current focal cli stable yes
-helios64 current bullseye cli stable yes
+helios64 current buster cli stable yes
+helios64 current focal cli stable yes
+helios64 legacy buster cli stable yes
+
# Clearfog Base
-clearfogbase current buster cli stable yes
-clearfogbase current bionic cli stable yes
-clearfogbase current focal cli stable yes
-clearfogbase current bullseye cli stable yes
-clearfogbase current focal cli beta yes
+clearfogbase current buster cli stable yes
+clearfogbase current focal cli stable yes
# Clearfog Pro
-clearfogpro current buster cli stable yes
-clearfogpro current bionic cli stable yes
-clearfogpro current focal cli stable yes
-clearfogpro current bullseye cli stable yes
-clearfogpro dev buster cli stable no
-clearfogpro current focal cli beta yes
+clearfogpro current buster cli stable yes
+clearfogpro current focal cli stable yes
# Cubieboard1
+cubieboard current buster cli stable yes
+cubieboard current focal cli stable yes
-cubieboard current bionic cli stable yes
-cubieboard current buster cli stable yes
-cubieboard current focal cli stable yes
-cubieboard current bullseye cli stable yes
# Cubieboard2
+cubieboard2 current buster cli stable yes
+cubieboard2 current buster desktop stable yes xfce config_base browsers,chat
+cubieboard2 current focal cli stable yes
+cubieboard2 current focal desktop stable yes xfce config_base browsers,chat
-cubieboard2 current bionic cli stable yes
-cubieboard2 current buster cli stable yes
-cubieboard2 current focal cli stable yes
-cubieboard2 current focal desktop stable yes
# Cubietruck
-cubietruck current buster desktop stable yes
-cubietruck current buster cli stable yes
-cubietruck current bionic cli stable yes
-cubietruck current bullseye cli stable yes
-cubietruck current focal cli stable yes
-cubietruck current focal desktop stable yes
-cubietruck current focal cli beta yes
+cubietruck current buster cli stable yes
+cubietruck current buster desktop stable yes xfce config_base browsers,chat
+cubietruck current focal cli stable yes
+cubietruck current focal desktop stable yes xfce config_base browsers,chat
+
# Cubox-i
-cubox-i current buster cli stable yes
-cubox-i current bionic desktop stable yes
-cubox-i current buster minimal stable yes
-cubox-i current bullseye cli stable yes
-cubox-i current focal cli stable yes
-cubox-i current focal desktop stable yes
+cubox-i current buster cli stable yes
+cubox-i current buster desktop stable yes xfce config_base browsers,chat
+cubox-i current focal cli stable yes
+cubox-i current focal desktop stable yes xfce config_base browsers,chat
-# Udoo
-udoo current buster cli stable yes
-udoo current bionic desktop stable yes
-udoo current buster minimal stable yes
-udoo current bullseye cli stable yes
-udoo current focal cli stable yes
-udoo current focal desktop stable yes
-
-# Khadas Vim1
-kvim1 current buster desktop stable yes
-kvim1 current groovy cli stable yes
-kvim1 current bionic cli stable yes
-kvim1 current bullseye cli stable yes
-kvim1 current focal desktop stable yes
-
-# Khadas Vim2
-kvim2 current buster desktop stable yes
-kvim2 current groovy cli stable yes
-kvim2 current bionic cli stable yes
-kvim2 current bullseye cli stable yes
-kvim2 current focal desktop stable yes
-
-# La frite
-
-lafrite current buster cli stable yes
-lafrite current groovy cli stable yes
-lafrite current bionic desktop stable yes
-lafrite current bullseye minimal stable yes
-lafrite current focal cli stable yes
-lafrite current focal desktop stable yes
-
-# Lepotato
-
-lepotato current buster cli stable yes
-lepotato current groovy cli stable yes
-lepotato current bionic desktop stable yes
-lepotato current bullseye minimal stable yes
-lepotato current focal desktop stable yes
-lepotato current focal cli beta yes
-
-# Olimex Lime
-
-lime current buster cli stable yes
-lime current bionic cli stable yes
-lime current focal cli stable yes
-
-# Olimex Lime A-10
-
-lime-a10 current buster cli stable yes
-lime-a10 current focal cli stable yes
-
-# Olimex Micro
-
-micro current buster cli stable yes
-micro current bionic cli stable yes
-micro current focal cli stable yes
-
-# Olimex Lime2
-lime2 current buster desktop stable yes
-lime2 current buster cli stable yes
-lime2 current bionic cli stable yes
-lime2 current bullseye cli stable yes
-lime2 current focal cli stable yes
-lime2 current focal desktop stable yes
-
-# lime-a64
-
-lime-a64 current bionic minimal stable yes
-lime-a64 current buster minimal stable yes
-lime-a64 current bionic cli stable yes
-lime-a64 current buster cli stable yes
-lime-a64 current bullseye cli stable yes
-lime-a64 current focal cli stable yes
-lime-a64 current focal desktop stable yes
-lime-a64 current focal cli beta yes
-
-# MACCHIATObin Double Shot
-
-macchiatobin-doubleshot legacy buster cli stable yes
-macchiatobin-doubleshot legacy bionic cli stable yes
-macchiatobin-doubleshot legacy focal cli stable yes
# Espressobin
+espressobin current buster cli stable yes
+espressobin current focal cli stable yes
+espressobin dev hirsute cli stable no
-espressobin current buster cli stable yes
-espressobin current bionic cli stable yes
-espressobin current focal cli stable yes
-espressobin current bullseye cli stable yes
-espressobin current focal cli beta yes
-
-# nanopct3
-
-nanopct3 legacy buster minimal stable yes
-nanopct3 legacy buster cli stable yes
-nanopct3 legacy bionic desktop stable yes
-nanopct3 legacy bionic minimal stable yes
-nanopct3 legacy bullseye cli stable yes
-nanopct3 legacy focal cli stable yes
-
-# nanopct3plus
-
-nanopct3plus legacy buster cli stable yes
-nanopct3plus legacy buster minimal stable yes
-nanopct3plus legacy bionic desktop stable yes
-nanopct3plus legacy bionic minimal stable yes
-nanopct3plus legacy bullseye cli stable yes
-nanopct3plus legacy focal cli stable yes
-
-# nanopct4
-
-nanopct4 legacy buster cli stable yes
-nanopct4 legacy buster desktop stable yes
-nanopct4 legacy bionic desktop stable yes
-nanopct4 current buster cli stable yes
-nanopct4 current buster desktop stable yes
-nanopct4 current bionic cli stable yes
-nanopct4 current focal cli stable yes
-nanopct4 current focal desktop stable yes
-nanopct4 current focal cli beta yes
-
-# nanopi-r1
-
-nanopi-r1 current buster cli stable yes
-nanopi-r1 current bionic cli stable yes
-nanopi-r1 current bullseye cli stable yes
-nanopi-r1 current focal cli stable yes
-nanopi-r1 dev focal cli stable no
-nanopi-r1 current focal cli beta yes
-
-# nanopi-r2s
-
-nanopi-r2s current buster cli stable yes
-nanopi-r2s current bionic cli stable yes
-nanopi-r2s current bullseye minimal stable yes
-nanopi-r2s current focal minimal stable yes
-nanopi-r2s current focal cli beta yes
-
-# nanopi-r4s
-
-nanopi-r4s current buster cli stable yes
-nanopi-r4s current focal cli stable yes
-
-# nanopiair
-
-nanopiair current buster cli stable yes
-nanopiair current bionic cli stable yes
-nanopiair current bullseye cli stable yes
-nanopiair current focal cli stable yes
-nanopiair current focal cli beta yes
-
-# nanopiduo
-
-nanopiduo current buster cli stable yes
-nanopiduo current bionic cli stable yes
-nanopiduo current bullseye minimal stable yes
-nanopiduo current focal cli stable yes
-
-# nanopiduo2
-
-nanopiduo2 current buster cli stable yes
-nanopiduo2 current bionic cli stable yes
-nanopiduo2 current bullseye cli stable yes
-nanopiduo2 current focal cli stable yes
-
-# nanopifire3
-
-nanopifire3 legacy buster cli stable yes
-nanopifire3 legacy buster minimal stable yes
-nanopifire3 legacy buster desktop stable yes
-nanopifire3 legacy bionic cli stable yes
-nanopifire3 legacy bullseye cli stable yes
-nanopifire3 legacy focal cli stable yes
-
-# nanopik1plus
-
-nanopik1plus current buster desktop stable yes
-nanopik1plus current buster cli stable yes
-nanopik1plus current bionic cli stable yes
-nanopik1plus current bullseye cli stable yes
-nanopik1plus current focal cli stable yes
-nanopik1plus current focal desktop stable yes
-
-# nanopik2-905
-
-nanopik2-s905 current buster cli stable yes
-nanopik2-s905 current bionic desktop stable yes
-nanopik2-s905 current bullseye cli stable yes
-nanopik2-s905 current focal cli stable yes
-nanopik2-s905 current focal desktop stable yes
-
-# nanopim1
-
-nanopim1 current buster desktop stable yes
-nanopim1 current buster cli stable yes
-nanopim1 current bionic cli stable yes
-nanopim1 current bullseye cli stable yes
-nanopim1 current focal cli stable yes
-
-# nanopim1plus
-
-nanopim1plus current buster desktop stable yes
-nanopim1plus current buster cli stable yes
-nanopim1plus current bionic cli stable yes
-nanopim1plus current bullseye cli stable yes
-nanopim1plus current focal cli stable yes
-
-# zeropi
-zeropi current buster minimal stable yes
-zeropi current bionic cli stable yes
-zeropi current bullseye cli stable yes
-zeropi current focal cli stable yes
-
-# nanopim3
-
-nanopim3 legacy buster cli stable yes
-nanopim3 legacy buster minimal stable yes
-nanopim3 legacy bionic desktop stable yes
-nanopim3 legacy bullseye cli stable yes
-nanopim3 legacy focal cli stable yes
-
-# nanopim4
-
-nanopim4 legacy buster cli stable yes
-nanopim4 legacy buster desktop stable yes
-nanopim4 legacy bionic desktop stable yes
-nanopim4 current buster cli stable yes
-nanopim4 current buster desktop stable yes
-nanopim4 current bionic cli stable yes
-nanopim4 current bullseye cli stable yes
-nanopim4 current focal cli stable yes
-nanopim4 current focal desktop stable yes
-nanopim4 current focal cli beta yes
-
-# nanopim4v2
-
-nanopim4v2 legacy buster cli stable yes
-nanopim4v2 legacy buster desktop stable yes
-nanopim4v2 legacy bionic desktop stable yes
-nanopim4v2 current buster cli stable yes
-nanopim4v2 current buster desktop stable yes
-nanopim4v2 current bionic cli stable yes
-nanopim4v2 current bullseye cli stable yes
-nanopim4v2 current focal cli stable yes
-nanopim4v2 current focal desktop stable yes
-nanopim4v2 current focal cli beta yes
-
-# nanopineo
-
-nanopineo current buster cli stable yes
-nanopineo current bionic cli stable yes
-nanopineo current bullseye cli stable yes
-nanopineo current focal cli stable yes
-
-# nanopineocore2
-
-nanopineo2 current buster cli stable yes
-nanopineo2 current bionic cli stable yes
-nanopineo2 current buster minimal stable yes
-nanopineo2 current bullseye cli stable yes
-nanopineo2 current focal cli stable yes
-
-# nanopineo2black
-
-nanopineo2black current buster cli stable yes
-nanopineo2black current bionic cli stable yes
-nanopineo2black current bullseye cli stable yes
-nanopineo2black current focal cli stable yes
-nanopineo2black dev focal cli stable no
-
-# nanopineo3
-
-nanopineo3 current buster cli stable yes
-nanopineo3 current bionic cli stable yes
-nanopineo3 current bullseye minimal stable yes
-nanopineo3 current focal minimal stable yes
-
-# nanopineo4
-
-nanopineo4 legacy buster cli stable yes
-nanopineo4 legacy buster minimal stable yes
-nanopineo4 legacy bionic desktop stable yes
-nanopineo4 current buster desktop stable yes
-nanopineo4 current bionic cli stable yes
-nanopineo4 current bullseye cli stable yes
-nanopineo4 current focal cli stable yes
-nanopineo4 current focal desktop stable yes
-
-# nanopineocore2
-
-nanopineocore2 current buster cli stable yes
-nanopineocore2 current bionic cli stable yes
-nanopineocore2 current bullseye minimal stable yes
-nanopineocore2 current focal minimal stable yes
-
-# nanopineoplus2
-
-nanopineoplus2 current buster cli stable yes
-nanopineoplus2 current bullseye minimal stable yes
-nanopineoplus2 current focal minimal stable yes
-
-# nanopia64
-
-nanopia64 current buster cli stable yes
-nanopia64 current buster desktop stable yes
-nanopia64 current bionic cli stable yes
-nanopia64 current bullseye cli stable yes
-nanopia64 current focal cli stable yes
-
-# Odroid C1
-
-odroidc1 current focal cli stable yes
-odroidc1 current buster cli stable yes
-odroidc1 current groovy cli stable yes
-odroidc1 current bullseye cli stable yes
-
-# Odroid C2
-
-odroidc2 current buster cli stable yes
-odroidc2 current buster desktop stable yes
-odroidc2 current bullseye cli stable yes
-odroidc2 current focal cli stable yes
-odroidc2 current focal desktop stable yes
-odroidc2 current groovy cli stable yes
-
-# Odroid N2
-
-odroidn2 legacy buster cli stable yes
-odroidn2 current buster cli stable yes
-odroidn2 current buster desktop stable yes
-odroidn2 current focal desktop stable yes
-odroidn2 current focal cli stable yes
-
-# Odroid C4
-
-odroidc4 legacy focal desktop stable yes
-odroidc4 legacy buster cli stable yes
-odroidc4 current focal desktop stable yes
-odroidc4 current buster cli stable yes
-odroidc4 current bullseye cli stable yes
-odroidc4 current focal cli stable yes
-odroidc4 current groovy cli stable yes
-
-# Odroid HC4
-odroidhc4 legacy focal cli stable yes
-odroidhc4 legacy buster cli stable yes
-odroidhc4 current buster cli stable yes
-odroidhc4 current focal cli stable yes
-odroidhc4 current groovy cli stable yes
-
-# Odroid XU4
-
-odroidxu4 legacy buster cli stable yes
-odroidxu4 legacy buster desktop stable yes
-odroidxu4 legacy focal desktop stable yes
-odroidxu4 legacy focal cli stable yes
-odroidxu4 current bionic desktop stable yes
-odroidxu4 current buster minimal stable yes
-odroidxu4 current bullseye cli stable yes
-odroidxu4 current focal cli stable yes
-odroidxu4 dev focal cli stable no
-odroidxu4 current focal cli beta yes
-
-# orangepi2
-
-orangepi2 current buster desktop stable yes
-orangepi2 current buster cli stable yes
-orangepi2 current bionic cli stable yes
-orangepi2 current bullseye cli stable yes
-orangepi2 current focal cli stable yes
-orangepi2 current focal desktop stable yes
-
-# orangepi 3
-
-orangepi3 current buster cli stable yes
-orangepi3 current bionic desktop stable yes
-orangepi3 current bullseye cli stable yes
-orangepi3 current focal cli stable yes
-orangepi3 current focal desktop stable yes
-orangepi3 current focal cli beta yes
-
-# Orangepi 4
-
-orangepi4 legacy buster desktop stable yes
-orangepi4 legacy bullseye cli stable yes
-orangepi4 legacy bionic desktop stable yes
-orangepi4 current buster cli stable yes
-orangepi4 current bionic minimal stable yes
-orangepi4 current focal cli stable yes
-orangepi4 current focal desktop stable yes
-orangepi4 current focal cli beta yes
-
-# orangepi-r1
-
-orangepi-r1 current buster cli stable yes
-orangepi-r1 current bionic cli stable yes
-orangepi-r1 current buster minimal stable yes
-orangepi-r1 current bionic minimal stable yes
-orangepi-r1 current focal cli stable yes
-orangepi-r1 current bullseye minimal stable yes
-
-# Orangepi rk3399
-
-orangepi-rk3399 legacy buster desktop stable yes
-orangepi-rk3399 legacy bullseye cli stable yes
-orangepi-rk3399 legacy bionic desktop stable yes
-orangepi-rk3399 current buster cli stable yes
-orangepi-rk3399 current bionic minimal stable yes
-orangepi-rk3399 current bullseye cli stable yes
-orangepi-rk3399 current focal cli stable yes
# Firefly rk3399
+firefly-rk3399 current buster cli stable yes
+firefly-rk3399 legacy buster desktop stable yes xfce config_base browsers,chat
+firefly-rk3399 current focal cli stable yes
+firefly-rk3399 current focal desktop stable yes xfce config_base browsers,chat
+
+
+# Khadas Vim1
+kvim1 current buster cli stable yes
+kvim1 current buster desktop stable yes xfce config_base browsers,chat
+kvim1 current focal cli stable yes
+kvim1 current focal desktop stable yes xfce config_base browsers,chat
+
+
+# Khadas Vim2
+kvim1 current buster cli stable yes
+kvim1 current buster desktop stable yes xfce config_base browsers,chat
+kvim1 current focal cli stable yes
+kvim1 current focal desktop stable yes xfce config_base browsers,chat
+
+
+# La frite
+lafrite current buster cli stable yes
+lafrite current buster desktop stable yes xfce config_base browsers,chat
+lafrite current focal cli stable yes
+lafrite current focal desktop stable yes xfce config_base browsers,chat
+lafrite current buster minimal stable yes
+lafrite current focal minimal stable yes
+
+
+# Lepotato
+lepotato current buster cli stable yes
+lepotato current buster desktop stable yes xfce config_base browsers,chat
+lepotato current focal cli stable yes
+lepotato current focal desktop stable yes xfce config_base browsers,chat
+lepotato current buster minimal stable yes
+lepotato current focal minimal stable yes
+
+
+# Olimex Lime
+lime current buster cli stable yes
+lime current focal cli stable yes
+
+
+# Olimex Lime A-10
+lime-a10 current buster cli stable yes
+lime-a10 current focal cli stable yes
+
+
+# Olimex Micro
+micro current buster cli stable yes
+micro current focal cli stable yes
+
+
+# Olimex Lime2
+lime2 current buster cli stable yes
+lime2 current buster desktop stable yes xfce config_base browsers,chat
+lime2 current focal cli stable yes
+lime2 current focal desktop stable yes xfce config_base browsers,chat
+lime2 current buster minimal stable yes
+lime2 current focal minimal stable yes
+
+
+# Olimex Lime A64
+lime-a64 current buster cli stable yes
+lime-a64 current buster desktop stable yes xfce config_base browsers,chat
+lime-a64 current focal cli stable yes
+lime-a64 current focal desktop stable yes xfce config_base browsers,chat
+lime-a64 current buster minimal stable yes
+lime-a64 current focal minimal stable yes
+
+
+# MACCHIATObin Double Shot
+macchiatobin-doubleshot legacy buster cli stable yes
+macchiatobin-doubleshot legacy focal cli stable yes
+
+
+# MiQi
+miqi current buster cli stable yes
+miqi current buster desktop stable yes xfce config_base browsers,chat
+miqi current focal cli stable yes
+miqi current focal desktop stable yes xfce config_base browsers,chat
+
+
+# nanopct4
+nanopct4 legacy buster cli stable yes
+nanopct4 legacy buster desktop stable yes xfce config_base browsers,chat
+nanopct4 current buster cli stable yes
+nanopct4 current buster desktop stable yes xfce config_base browsers,chat
+nanopct4 current focal cli stable yes
+nanopct4 current focal desktop stable yes xfce config_base browsers,chat
+
+
+# nanopi-r1
+nanopi-r1 current buster cli stable yes
+nanopi-r1 current focal cli stable yes
+
+
+# nanopi-r2s
+nanopi-r2s current buster cli stable yes
+nanopi-r2s current focal cli stable yes
+
+
+# nanopi-r4s
+nanopi-r4s current buster cli stable yes
+nanopi-r4s current focal cli stable yes
+
+
+# nanopiair
+nanopiair current buster cli stable yes
+nanopiair current focal cli stable yes
+
+
+# nanopiduo
+nanopiduo current buster cli stable yes
+nanopiduo current focal cli stable yes
+
+
+# nanopiduo2
+nanopiduo2 current buster cli stable yes
+nanopiduo2 current focal cli stable yes
+
+
+# nanopik1plus
+nanopik1plus current buster cli stable yes
+nanopik1plus current buster desktop stable yes xfce config_base browsers,chat
+nanopik1plus current focal cli stable yes
+nanopik1plus current focal desktop stable yes xfce config_base browsers,chat
+
+
+# nanopik2-905
+nanopik2-s905 current buster cli stable yes
+nanopik2-s905 current buster desktop stable yes xfce config_base browsers,chat
+nanopik2-s905 current focal cli stable yes
+nanopik2-s905 current focal desktop stable yes xfce config_base browsers,chat
+
+
+# nanopim1
+nanopim1 current buster cli stable yes
+nanopim1 current buster desktop stable yes xfce config_base browsers,chat
+nanopim1 current focal cli stable yes
+
+
+# nanopim1plus
+nanopim1plus current buster cli stable yes
+nanopim1plus current buster desktop stable yes xfce config_base browsers,chat
+nanopim1plus current focal cli stable yes
+
+
+# nanopim4
+nanopim4 legacy buster cli stable yes
+nanopim4 legacy buster desktop stable yes xfce config_base browsers,chat
+nanopim4 current buster cli stable yes
+nanopim4 current buster desktop stable yes xfce config_base browsers,chat
+nanopim4 current focal cli stable yes
+nanopim4 current focal desktop stable yes xfce config_base browsers,chat
+
+
+# nanopim4v2
+nanopim4v2 legacy buster cli stable yes
+nanopim4v2 legacy buster desktop stable yes xfce config_base browsers,chat
+nanopim4v2 current buster cli stable yes
+nanopim4v2 current buster desktop stable yes xfce config_base browsers,chat
+nanopim4v2 current focal cli stable yes
+nanopim4v2 current focal desktop stable yes xfce config_base browsers,chat
+
+
+# nanopineo
+nanopineo current buster cli stable yes
+nanopineo current focal cli stable yes
+
+
+# nanopineocore2
+nanopineo2 current buster cli stable yes
+nanopineo2 current focal cli stable yes
+
+
+# nanopineo2black
+nanopineo2black current buster cli stable yes
+nanopineo2black dev focal cli stable no
+
+
+# nanopineo3
+nanopineo3 current buster cli stable yes
+nanopineo3 current focal cli stable yes
+
+
+# nanopineo4
+nanopineo4 legacy buster cli stable yes
+nanopineo4 current buster desktop stable yes xfce config_base browsers,chat
+nanopineo4 current focal cli stable yes
+nanopineo4 current focal desktop stable yes xfce config_base browsers,chat
+
+
+# nanopineocore2
+nanopineocore2 current buster cli stable yes
+nanopineocore2 current focal cli stable yes
+
+
+# nanopineoplus2
+nanopineoplus2 current buster cli stable yes
+nanopineoplus2 current focal cli stable yes
+
+
+# nanopia64
+nanopia64 current buster cli stable yes
+nanopia64 current buster desktop stable yes xfce config_base browsers,chat
+nanopia64 current focal cli stable yes
+
+
+# Odroid C1
+odroidc1 current focal cli stable yes
+odroidc1 current buster cli stable yes
+
+
+# Odroid C2
+odroidc2 current buster cli stable yes
+odroidc2 current buster desktop stable yes xfce config_base browsers,chat
+odroidc2 current focal cli stable yes
+odroidc2 current focal desktop stable yes xfce config_base browsers,chat
+
+
+# Odroid N2 / N2+
+odroidn2 legacy buster cli stable yes
+odroidn2 current buster cli stable yes
+odroidn2 current buster desktop stable yes xfce config_base browsers,chat
+odroidn2 current focal desktop stable yes xfce config_base browsers,chat
+odroidn2 current focal cli stable yes
+odroidn2 dev hirsute cli stable no
+
+
+# Odroid C4
+odroidc4 legacy focal desktop stable yes xfce config_base browsers,chat
+odroidc4 legacy buster cli stable yes
+odroidc4 current focal desktop stable yes xfce config_base browsers,chat
+odroidc4 current buster cli stable yes
+odroidc4 current focal cli stable yes
+
+
+# Odroid HC4
+odroidhc4 legacy focal cli stable yes
+odroidhc4 legacy buster cli stable yes
+odroidhc4 current buster cli stable yes
+odroidhc4 current focal cli stable yes
+odroidhc4 current focal desktop stable yes xfce config_base browsers,chat
+
+
+# Odroid XU4
+odroidxu4 legacy buster cli stable yes
+odroidxu4 legacy buster desktop stable yes xfce config_base browsers,chat
+odroidxu4 legacy focal cli stable yes
+odroidxu4 legacy focal desktop stable yes xfce config_base browsers,chat
+odroidxu4 current focal cli stable yes
+odroidxu4 current focal desktop stable yes
+odroidxu4 dev hirsute cli stable no
+
+
+# orangepi2
+orangepi2 current buster cli stable yes
+orangepi2 current buster desktop stable yes xfce config_base browsers,chat
+orangepi2 current focal cli stable yes
+orangepi2 current focal desktop stable yes xfce config_base browsers,chat
+
+
+# orangepi 3
+orangepi3 current buster cli stable yes
+orangepi3 current buster desktop stable yes xfce config_base browsers,chat
+orangepi3 current focal cli stable yes
+orangepi3 current focal desktop stable yes xfce config_base browsers,chat
+
+
+# Orangepi 4
+orangepi4 legacy buster desktop stable yes xfce config_base browsers,chat
+orangepi4 current buster cli stable yes
+orangepi4 current focal cli stable yes
+orangepi4 current focal desktop stable yes xfce config_base browsers,chat
+
+
+# orangepi-r1
+orangepi-r1 current buster cli stable yes
+orangepi-r1 current focal cli stable yes
+
+
+# Orangepi rk3399
+orangepi-rk3399 legacy buster desktop stable yes xfce config_base browsers,chat
+orangepi-rk3399 current buster cli stable yes
+orangepi-rk3399 current focal cli stable yes
+orangepi-rk3399 current focal desktop stable yes xfce config_base browsers,chat
-firefly-rk3399 legacy buster desktop stable yes
-firefly-rk3399 legacy bullseye cli stable yes
-firefly-rk3399 legacy bionic desktop stable yes
-firefly-rk3399 current buster cli stable yes
-firefly-rk3399 current bionic minimal stable yes
-firefly-rk3399 current bullseye cli stable yes
-firefly-rk3399 current focal cli stable yes
-firefly-rk3399 current focal desktop stable yes
# orangepilite
+orangepilite current buster cli stable yes
+orangepilite current buster desktop stable yes xfce config_base browsers,chat
+orangepilite current focal cli stable yes
-orangepilite current buster desktop stable yes
-orangepilite current buster cli stable yes
-orangepilite current bionic cli stable yes
-orangepilite current bullseye cli stable yes
-orangepilite current focal cli stable yes
# orangepilite2
+orangepilite2 current buster cli stable yes
+orangepilite2 current buster desktop stable yes xfce config_base browsers,chat
+orangepilite2 current focal cli stable yes
-orangepilite2 current buster cli stable yes
-orangepilite2 current bionic cli stable yes
-orangepilite2 current buster minimal stable yes
-orangepilite2 current bullseye cli stable yes
-orangepilite2 current focal cli stable yes
# orangepioneplus
+orangepioneplus current buster cli stable yes
+orangepioneplus current buster desktop stable yes xfce config_base browsers,chat
+orangepioneplus current focal cli stable yes
-orangepioneplus current buster cli stable yes
-orangepioneplus current bionic desktop stable yes
-orangepioneplus current bionic cli stable yes
-orangepioneplus current buster minimal stable yes
-orangepioneplus current bullseye cli stable yes
-orangepioneplus current focal cli stable yes
# orangepione
+orangepione current buster cli stable yes
+orangepione current buster desktop stable yes xfce config_base browsers,chat
+orangepione current focal cli stable yes
-orangepione current buster desktop stable yes
-orangepione current buster cli stable yes
-orangepione current bionic cli stable yes
-orangepione current bullseye cli stable yes
-orangepione current focal cli stable yes
-orangepione current focal cli beta yes
# orangepipc
+orangepipc current buster cli stable yes
+orangepipc current buster desktop stable yes xfce config_base browsers,chat
+orangepipc current focal cli stable yes
+orangepipc current focal desktop stable yes xfce config_base browsers,chat
-orangepipc current buster desktop stable yes
-orangepipc current buster cli stable yes
-orangepipc current bionic cli stable yes
-orangepipc current bullseye cli stable yes
-orangepipc current focal cli stable yes
-orangepipc current focal desktop stable yes
-orangepipc current focal cli beta yes
# orangepipc2
+orangepipc2 current buster cli stable yes
+orangepipc2 current buster desktop stable yes xfce config_base browsers,chat
+orangepipc2 current focal cli stable yes
+orangepipc2 current focal desktop stable yes xfce config_base browsers,chat
-orangepipc2 current buster desktop stable yes
-orangepipc2 current buster cli stable yes
-orangepipc2 current bionic cli stable yes
-orangepipc2 current bullseye cli stable yes
-orangepipc2 current focal cli stable yes
-orangepipc2 current focal desktop stable yes
-orangepipc2 current focal cli beta yes
# orangepipcplus
+orangepipcplus current buster cli stable yes
+orangepipcplus current buster desktop stable yes xfce config_base browsers,chat
+orangepipcplus current focal cli stable yes
+orangepipcplus current focal desktop stable yes xfce config_base browsers,chat
-orangepipcplus current buster desktop stable yes
-orangepipcplus current buster cli stable yes
-orangepipcplus current bionic cli stable yes
-orangepipcplus current bullseye cli stable yes
-orangepipcplus current focal cli stable yes
-orangepipcplus current focal desktop stable yes
-orangepipcplus current focal cli beta yes
# orangepiplus
+orangepiplus current buster cli stable yes
+orangepiplus current buster desktop stable yes xfce config_base browsers,chat
+orangepiplus current focal cli stable yes
+orangepiplus current focal desktop stable yes xfce config_base browsers,chat
-orangepiplus current buster desktop stable yes
-orangepiplus current buster cli stable yes
-orangepiplus current bionic cli stable yes
-orangepiplus current bullseye cli stable yes
-orangepiplus current focal cli stable yes
-orangepiplus current focal desktop stable yes
# orangepiplus2e
+orangepiplus2e current buster cli stable yes
+orangepiplus2e current buster desktop stable yes xfce config_base browsers,chat
+orangepiplus2e current focal cli stable yes
+orangepiplus2e current focal desktop stable yes xfce config_base browsers,chat
-orangepiplus2e current buster desktop stable yes
-orangepiplus2e current buster cli stable yes
-orangepiplus2e current bionic cli stable yes
-orangepiplus2e current bullseye cli stable yes
-orangepiplus2e current focal cli stable yes
-orangepiplus2e current focal desktop stable yes
# Orangepi Prime
+orangepiprime current buster cli stable yes
+orangepiprime current buster desktop stable yes xfce config_base browsers,chat
+orangepiprime current focal cli stable yes
+orangepiprime current focal desktop stable yes xfce config_base browsers,chat
-orangepiprime current buster cli stable yes
-orangepiprime current buster desktop stable yes
-orangepiprime current bionic desktop stable yes
-orangepiprime current bullseye cli stable yes
-orangepiprime current focal cli stable yes
-orangepiprime current focal desktop stable yes
# Orangepi Win
+orangepiwin current buster cli stable yes
+orangepiwin current buster desktop stable yes xfce config_base browsers,chat
+orangepiwin current focal cli stable yes
+orangepiwin current focal desktop stable yes xfce config_base browsers,chat
-orangepiwin current buster cli stable yes
-orangepiwin current buster desktop stable yes
-orangepiwin current bionic cli stable yes
-orangepiwin current bullseye cli stable yes
-orangepiwin current focal cli stable yes
-orangepiwin current focal desktop stable yes
# orangepizero
+orangepizero current buster cli stable yes
+orangepizero current focal cli stable yes
-orangepizero current buster cli stable yes
-orangepizero current bionic cli stable yes
-orangepizero current bullseye cli stable yes
-orangepizero current focal cli stable yes
-orangepizero current focal cli beta yes
# orangepizero2
-
-orangepizero2 current buster cli stable yes
-orangepizero2 current focal cli stable yes
+orangepizero2 current buster cli stable yes
+orangepizero2 current focal cli stable yes
# orangepizeroplus
+orangepizeroplus current buster cli stable yes
+orangepizeroplus current focal cli stable yes
-orangepizeroplus current buster cli stable yes
-orangepizeroplus current bullseye cli stable yes
-orangepizeroplus current bionic cli stable yes
-orangepizeroplus current focal cli stable yes
# orangepizeroplus2-h3
+orangepizeroplus2-h3 current buster cli stable yes
+orangepizeroplus2-h3 current focal cli stable yes
-orangepizeroplus2-h3 current buster cli stable yes
-orangepizeroplus2-h3 current bionic minimal stable yes
-orangepizeroplus2-h3 current bullseye cli stable yes
-orangepizeroplus2-h3 current focal cli stable yes
-orangepizeroplus2-h3 current focal cli beta yes
# orangepizeroplus2-h5
+orangepizeroplus2-h5 current buster cli stable yes
+orangepizeroplus2-h5 current focal cli stable yes
-orangepizeroplus2-h5 current buster cli stable yes
-orangepizeroplus2-h5 current bionic minimal stable yes
-orangepizeroplus2-h5 current bullseye cli stable yes
-orangepizeroplus2-h5 current focal cli stable yes
-orangepizeroplus2-h5 current focal cli beta yes
# LinkSprite pcDuino3
+pcduino3 current buster cli stable yes
+pcduino3 current focal cli stable yes
-pcduino3 current bionic cli stable yes
-pcduino3 current buster cli stable yes
-pcduino3 current focal cli stable yes
# Pine64
+pine64 current buster cli stable yes
+pine64 current buster desktop stable yes xfce config_base browsers,chat
+pine64 current focal cli stable yes
+pine64 current focal desktop stable yes xfce config_base browsers,chat
-pine64 current buster cli stable yes
-pine64 current buster desktop stable yes
-pine64 current bionic cli stable yes
-pine64 current bullseye cli stable yes
-pine64 current focal cli stable yes
-pine64 current focal desktop stable yes
-pine64 current focal cli beta yes
# Pine64so
+pine64so current buster cli stable yes
+pine64so current focal cli stable yes
-pine64so current buster cli stable yes
-pine64so current bionic cli stable yes
-pine64so current bullseye cli stable yes
-pine64so current focal cli stable yes
# Pinecube
+pinecube current focal minimal stable yes
+pinecube current buster minimal stable yes
-pinecube current focal minimal stable yes
-pinecube current buster minimal stable yes
# Pinebook A64
+pinebook-a64 legacy buster desktop stable yes xfce config_base browsers,chat
+pinebook-a64 legacy focal desktop stable yes xfce config_base browsers,chat
-pinebook-a64 legacy focal desktop stable yes
-pinebook-a64 legacy buster desktop stable yes
-pinebook-a64 current focal desktop beta yes
# Pinebook PRO
-
-pinebook-pro legacy bionic desktop stable yes
-pinebook-pro legacy buster desktop stable yes
-pinebook-pro legacy focal desktop stable yes
-pinebook-pro current focal desktop stable yes
-pinebook-pro current focal desktop beta yes
-pinebook-pro current bullseye desktop beta yes
+pinebook-pro legacy buster desktop stable yes xfce config_base browsers,chat
+pinebook-pro legacy focal desktop stable yes xfce config_base browsers,chat
+pinebook-pro current buster desktop stable yes xfce config_base browsers,chat
+pinebook-pro current focal desktop stable yes xfce config_base browsers,chat
# Pine H64
+pineh64 current buster cli stable yes
+pineh64 current buster desktop stable yes xfce config_base browsers,chat
+pineh64 current focal cli stable yes
+pineh64 current focal desktop stable yes xfce config_base browsers,chat
-pineh64 current buster cli stable yes
-pineh64 current bionic cli stable yes
-pineh64 current bullseye cli stable yes
-pineh64 current focal cli stable yes
-pineh64 current buster desktop stable yes
-pineh64 current focal desktop stable yes
-pineh64 current focal cli beta yes
# Pine H64 B
+pineh64-b current buster cli stable yes
+pineh64-b current buster desktop stable yes xfce config_base browsers,chat
+pineh64-b current focal cli stable yes
+pineh64-b current focal desktop stable yes xfce config_base browsers,chat
-pineh64-b current buster cli stable yes
-pineh64-b current bullseye cli stable yes
-pineh64-b current focal cli stable yes
-pineh64-b current buster desktop stable yes
-pineh64-b current focal desktop stable yes
-pineh64-b current focal cli beta yes
# Renegade
+renegade legacy buster desktop stable yes xfce config_base browsers,chat
+renegade current buster cli stable yes
+renegade current focal cli stable yes
+renegade current focal desktop stable yes xfce config_base browsers,chat
-renegade legacy buster desktop stable yes
-renegade current buster cli stable yes
-renegade legacy focal cli stable yes
-renegade current focal cli stable yes
-renegade current focal desktop stable yes
-renegade legacy bionic desktop stable yes
-renegade current bionic desktop stable yes
# rk322x-box
+rk322x-box legacy buster cli stable yes
+rk322x-box legacy focal desktop stable yes xfce config_base browsers,chat
+rk322x-box current buster minimal stable yes
+rk322x-box current focal desktop stable yes xfce config_base browsers,chat
+rk322x-box dev hirsute cli stable no
-rk322x-box legacy buster cli stable yes
-rk322x-box legacy focal desktop stable yes
-rk322x-box current buster minimal stable yes
-rk322x-box current focal desktop stable yes
# Rock64
+rock64 legacy buster desktop stable yes xfce config_base browsers,chat
+rock64 current buster cli stable yes
+rock64 current focal cli stable yes
+rock64 current focal desktop stable yes xfce config_base browsers,chat
-rock64 legacy buster desktop stable yes
-rock64 current buster cli stable yes
-rock64 legacy focal cli stable yes
-rock64 current focal cli stable yes
-rock64 legacy bionic desktop stable yes
-rock64 current bionic desktop stable yes
-rock64 current focal desktop stable yes
-rock64 current focal cli beta yes
# Rockpi 4a
+rockpi-4a legacy buster cli stable yes
+rockpi-4a legacy buster desktop stable yes xfce config_base browsers,chat
+rockpi-4a current buster cli stable yes
+rockpi-4a current buster desktop stable yes xfce config_base browsers,chat
+rockpi-4a current focal cli stable yes
+rockpi-4a current focal desktop stable yes xfce config_base browsers,chat
-rockpi-4a legacy buster desktop stable yes
-rockpi-4a current buster cli stable yes
-rockpi-4a legacy focal cli stable yes
-rockpi-4a current focal cli stable yes
-rockpi-4a current bionic minimal stable yes
-rockpi-4a legacy bionic minimal stable yes
-rockpi-4a legacy bionic desktop stable yes
-rockpi-4a current buster desktop stable yes
-rockpi-4a current focal desktop stable yes
-rockpi-4a current buster cli beta yes
# Rockpi 4b
+rockpi-4b legacy buster cli stable yes
+rockpi-4b legacy buster desktop stable yes xfce config_base browsers,chat
+rockpi-4b current buster cli stable yes
+rockpi-4b current buster desktop stable yes xfce config_base browsers,chat
+rockpi-4b current focal cli stable yes
+rockpi-4b current focal desktop stable yes xfce config_base browsers,chat
-rockpi-4b legacy buster desktop stable yes
-rockpi-4b current buster cli stable yes
-rockpi-4b legacy focal cli stable yes
-rockpi-4b current focal cli stable yes
-rockpi-4b current bionic minimal stable yes
-rockpi-4b legacy bionic minimal stable yes
-rockpi-4b legacy bionic desktop stable yes
-rockpi-4b current buster desktop stable yes
-rockpi-4b current focal desktop stable yes
-rockpi-4b current buster cli beta yes
# Rockpi 4c
+rockpi-4c legacy buster cli stable yes
+rockpi-4c legacy buster desktop stable yes xfce config_base browsers,chat
+rockpi-4c current buster cli stable yes
+rockpi-4c current buster desktop stable yes xfce config_base browsers,chat
+rockpi-4c current focal cli stable yes
+rockpi-4c current focal desktop stable yes xfce config_base browsers,chat
-rockpi-4c legacy buster desktop stable yes
-rockpi-4c current buster cli stable yes
-rockpi-4c legacy focal cli stable yes
-rockpi-4c current focal cli stable yes
-rockpi-4c current bionic minimal stable yes
-rockpi-4c legacy bionic minimal stable yes
-rockpi-4c legacy bionic desktop stable yes
-rockpi-4c current buster desktop stable yes
-rockpi-4c current focal desktop stable yes
-rockpi-4c current buster cli beta yes
# Rockpi S
+rockpi-s legacy buster minimal stable yes
+rockpi-s legacy focal minimal stable yes
+rockpi-s current buster minimal stable yes
+rockpi-s current focal minimal stable yes
-rockpi-s legacy buster minimal stable yes
-rockpi-s legacy focal minimal stable yes
-rockpi-s current buster minimal stable yes
-rockpi-s current focal minimal stable yes
# Rockpi E
-rockpi-e current buster cli stable yes
-rockpi-e current focal cli stable yes
-rockpi-e dev buster cli stable yes
-rockpi-e dev focal cli stable yes
-rockpi-e current focal cli beta yes
+rockpi-e current buster cli stable yes
+rockpi-e current focal cli stable yes
+
# Rock64pro
+rockpro64 legacy buster cli stable yes
+rockpro64 legacy buster desktop stable yes xfce config_base browsers,chat
+rockpro64 current buster cli stable yes
+rockpro64 current buster desktop stable yes xfce config_base browsers,chat
+rockpro64 current focal cli stable yes
+rockpro64 current focal desktop stable yes xfce config_base browsers,chat
-rockpro64 legacy buster desktop stable yes
-rockpro64 legacy bionic desktop stable yes
-rockpro64 current buster cli stable yes
-rockpro64 current bionic cli stable yes
-rockpro64 current bullseye cli stable yes
-rockpro64 current focal cli stable yes
-rockpro64 current focal desktop stable yes
# Teres A64
+teres-a64 current buster desktop stable yes xfce config_base browsers,chat
+teres-a64 current focal desktop stable yes xfce config_base browsers,chat
-teres-a64 current bionic desktop stable yes
-teres-a64 current buster desktop stable yes
-teres-a64 current focal cli stable yes
-teres-a64 current focal desktop stable yes
-teres-a64 current focal desktop beta yes
# Tinkerboard
+tinkerboard legacy buster cli stable yes
+tinkerboard legacy buster desktop stable yes xfce config_base browsers,chat
+tinkerboard current buster cli stable yes
+tinkerboard current buster desktop stable yes xfce config_base browsers,chat
+tinkerboard current focal cli stable yes
+tinkerboard current focal desktop stable yes xfce config_base browsers,chat
+tinkerboard dev hirsute cli stable no
-tinkerboard legacy buster desktop stable yes
-tinkerboard legacy bionic desktop stable yes
-tinkerboard legacy buster cli stable yes
-tinkerboard current bionic desktop stable yes
-tinkerboard current buster minimal stable yes
-tinkerboard current bullseye cli stable yes
-tinkerboard current focal cli stable yes
-tinkerboard current focal desktop stable yes
-tinkerboard current focal cli beta yes
-
-# MiQi
-
-miqi current buster cli stable yes
-miqi current buster desktop stable yes
-miqi current focal minimal stable yes
-miqi current bionic desktop stable yes
-
-# tritium-h3
-
-tritium-h3 current buster desktop stable yes
-tritium-h3 current buster cli stable yes
-tritium-h3 current bionic desktop stable yes
-tritium-h3 current bionic cli stable yes
-tritium-h3 current focal desktop stable yes
-tritium-h3 current focal cli stable yes
-tritium-h3 current focal cli beta yes
-
-# tritium-h5
-
-tritium-h5 current buster desktop stable yes
-tritium-h5 current buster cli stable yes
-tritium-h5 current bionic desktop stable yes
-tritium-h5 current bionic cli stable yes
-tritium-h5 current focal desktop stable yes
-tritium-h5 current focal cli stable yes
-tritium-h5 current focal cli beta yes
-
-# xt-q8l-v10
-
-xt-q8l-v10 current buster desktop stable yes
-xt-q8l-v10 current bionic desktop stable yes
-xt-q8l-v10 current buster minimal stable yes
-xt-q8l-v10 current focal cli stable yes
-
-# Z28 pro
-
-z28pro legacy buster desktop stable yes
-z28pro legacy buster cli stable yes
-z28pro legacy focal cli stable yes
-z28pro current focal desktop stable yes
# Station M1
+station-m1 legacy buster desktop stable yes xfce config_base browsers,chat
+station-m1 current focal cli stable yes
+station-m1 current focal desktop stable yes xfce config_base browsers,chat
-station-m1 legacy buster desktop stable yes
-station-m1 current bullseye cli stable yes
-station-m1 current focal cli stable yes
-station-m1 current bullseye desktop stable yes
-station-m1 current focal desktop stable yes
# Station P1
+station-p1 legacy buster desktop stable yes xfce config_base browsers,chat
+station-p1 current focal cli stable yes
+station-p1 current focal desktop stable yes xfce config_base browsers,chat
-station-p1 legacy buster desktop stable yes
-station-p1 current bullseye cli stable yes
-station-p1 current focal cli stable yes
-station-p1 current bullseye desktop stable yes
-station-p1 current focal desktop stable yes
+
+# tritium-h3
+tritium-h3 current buster desktop stable yes xfce config_base browsers,chat
+tritium-h3 current buster cli stable yes
+tritium-h3 current focal desktop stable yes xfce config_base browsers,chat
+tritium-h3 current focal cli stable yes
+
+
+# tritium-h5
+tritium-h5 current buster desktop stable yes xfce config_base browsers,chat
+tritium-h5 current buster cli stable yes
+tritium-h5 current focal desktop stable yes xfce config_base browsers,chat
+tritium-h5 current focal cli stable yes
+
+
+# Udoo
+udoo current buster cli stable yes
+udoo current buster desktop stable yes xfce config_base browsers,chat
+udoo current focal cli stable yes
+udoo current focal desktop stable yes xfce config_base browsers,chat
+
+
+# xt-q8l-v10
+xt-q8l-v10 current buster desktop stable yes xfce config_base browsers,chat
+xt-q8l-v10 current bionic desktop stable yes xfce config_base browsers,chat
+xt-q8l-v10 current buster minimal stable yes
+xt-q8l-v10 current focal cli stable yes
+
+
+# Z28 pro
+z28pro legacy buster desktop stable yes xfce config_base browsers,chat
+z28pro legacy buster cli stable yes
+z28pro legacy focal cli stable yes
+z28pro current focal desktop stable yes xfce config_base browsers,chat
+
+
+# zeropi
+zeropi current buster cli stable yes
+zeropi current focal cli stable yes
diff --git a/config/templates/customize-image.sh.template b/config/templates/customize-image.sh.template
index 2a99456b6..eebf10637 100644
--- a/config/templates/customize-image.sh.template
+++ b/config/templates/customize-image.sh.template
@@ -235,7 +235,7 @@ UnattendedStorageBenchmark() {
InstallAdvancedDesktop()
{
- apt install -yy transmission libreoffice libreoffice-style-tango meld remmina thunderbird kazam avahi-daemon
+ apt-get install -yy transmission libreoffice libreoffice-style-tango meld remmina thunderbird kazam avahi-daemon
[[ -f /usr/share/doc/avahi-daemon/examples/sftp-ssh.service ]] && cp /usr/share/doc/avahi-daemon/examples/sftp-ssh.service /etc/avahi/services/
[[ -f /usr/share/doc/avahi-daemon/examples/ssh.service ]] && cp /usr/share/doc/avahi-daemon/examples/ssh.service /etc/avahi/services/
apt clean
diff --git a/lib/build-all-ng.sh b/lib/build-all-ng.sh
index 006b388b4..a1f3df781 100644
--- a/lib/build-all-ng.sh
+++ b/lib/build-all-ng.sh
@@ -60,7 +60,10 @@ unset LINUXFAMILY LINUXCONFIG KERNELDIR KERNELSOURCE KERNELBRANCH BOOTDIR BOOTSO
PACKAGE_LIST_BOARD PACKAGE_LIST_FAMILY PACKAGE_LIST_DESKTOP_BOARD PACKAGE_LIST_DESKTOP_FAMILY ATF_COMPILE ATFPATCHDIR OFFSET BOOTSOURCEDIR BOOT_USE_BLOBS \
BOOT_SOC DDR_BLOB MINILOADER_BLOB BL31_BLOB BOOT_RK3328_USE_AYUFAN_ATF BOOT_USE_BLOBS BOOT_RK3399_LEGACY_HYBRID \
BOOT_USE_MAINLINE_ATF BOOT_USE_TPL_SPL_BLOB BOOT_SUPPORT_SPI OFFLINE_WORK IMAGE_PARTITION_TABLE BOOT_LOGO UPSTREM_VER FORCED_MONTH_OFFSET \
- PACKAGE_LIST_BOARD_REMOVE PACKAGE_LIST_FAMILY_REMOVE PACKAGE_LIST_DESKTOP_BOARD_REMOVE PACKAGE_LIST_DESKTOP_FAMILY_REMOVE BOOTCONFIG_DEV USE_OVERLAYFS
+ PACKAGE_LIST_BOARD_REMOVE PACKAGE_LIST_FAMILY_REMOVE PACKAGE_LIST_DESKTOP_BOARD_REMOVE PACKAGE_LIST_DESKTOP_FAMILY_REMOVE BOOTCONFIG_DEV \
+ DESKTOP_ENVIRONMENT DESKTOP_ENVIRONMENT_CONFIG_NAME DESKTOP_APPGROUPS_SELECTED DESKTOP_APT_FLAGS_SELECTED \
+ DESKTOP_ENVIRONMENT_DIRPATH DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH DESKTOP_ENVIRONMENT_DIRPATH DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH \
+ DESKTOP_CONFIG_PREFIX DESKTOP_CONFIGS_DIR DESKTOP_APPGROUPS_DIR DEBIAN_RECOMMENDS USE_OVERLAYFS aggregated_content DEBOOTSTRAP_COMPONENTS
}
pack_upload ()
@@ -69,7 +72,7 @@ pack_upload ()
# pack and upload to server or just pack
display_alert "Signing" "Please wait!" "info"
- local version="Armbian_${REVISION}_${BOARD^}_${RELEASE}_${BRANCH}_${VER/-$LINUXFAMILY/}"
+ local version="Armbian_${REVISION}_${BOARD^}_${RELEASE}_${BRANCH}_${VER/-$LINUXFAMILY/}${DESKTOP_ENVIRONMENT:+_$DESKTOP_ENVIRONMENT}"
local subdir="archive"
compression_type=""
@@ -145,7 +148,7 @@ build_main ()
[[ $BUILD_MINIMAL == yes ]] && upload_image=${upload_image}_minimal
[[ $BETA == yes ]] && local upload_subdir=nightly
- touch "/run/armbian/Armbian_${BOARD^}_${BRANCH}_${RELEASE}_${BUILD_DESKTOP}_${BUILD_MINIMAL}.pid";
+ touch "/run/armbian/Armbian_${BOARD^}_${BRANCH}_${RELEASE}_${DESKTOP_ENVIRONMENT}_${BUILD_DESKTOP}_${BUILD_MINIMAL}.pid";
if [[ $KERNEL_ONLY != yes ]]; then
#if ssh ${SEND_TO_SERVER} stat ${SEND_TO_LOCATION}${BOARD}/${upload_subdir}/${upload_image}* \> /dev/null 2\>\&1; then
@@ -161,8 +164,9 @@ build_main ()
source "${SRC}"/lib/main.sh
fi
+
cd "${SRC}"
- rm "/run/armbian/Armbian_${BOARD^}_${BRANCH}_${RELEASE}_${BUILD_DESKTOP}_${BUILD_MINIMAL}.pid"
+ rm "/run/armbian/Armbian_${BOARD^}_${BRANCH}_${RELEASE}_${DESKTOP_ENVIRONMENT}_${BUILD_DESKTOP}_${BUILD_MINIMAL}.pid"
}
@@ -209,7 +213,7 @@ function check_hash()
[[ -z ${KERNELPATCHDIR} ]] && KERNELPATCHDIR=$LINUXFAMILY-$BRANCH
[[ -z ${LINUXCONFIG} ]] && LINUXCONFIG=linux-$LINUXFAMILY-$BRANCH
hash_watch_1=$(find "${SRC}/patch/kernel/${KERNELPATCHDIR}" -maxdepth 1 -printf '%s %P\n' 2> /dev/null | sort)
- hash_watch_2=$(cat "${SRC}/config/kernel/${LINUXCONFIG}.config")
+ hash_watch_2=$(cat "${SRC}/config/kernel/${LINUXCONFIG}.config" 2> /dev/null)
patch_hash=$(echo "${hash_watch_1}${hash_watch_2}" | improved_git hash-object --stdin)
case $ref_type in
@@ -267,10 +271,10 @@ function build_all()
# unset also board related variables
unset BOARDFAMILY DESKTOP_AUTOLOGIN DEFAULT_CONSOLE FULL_DESKTOP MODULES MODULES_CURRENT MODULES_LEGACY MODULES_DEV \
BOOTCONFIG MODULES_BLACKLIST MODULES_BLACKLIST_LEGACY MODULES_BLACKLIST_CURRENT MODULES_BLACKLIST_DEV DEFAULT_OVERLAYS SERIALCON \
- BUILD_MINIMAL RELEASE ATFBRANCH BOOT_FDT_FILE BOOTCONFIG_DEV
-
- read -r BOARD BRANCH RELEASE BUILD_TARGET BUILD_STABILITY BUILD_IMAGE <<< "${line}"
+ BUILD_MINIMAL RELEASE ATFBRANCH BOOT_FDT_FILE BOOTCONFIG_DEV BOOTSOURCEDIR
+ read -r BOARD BRANCH RELEASE BUILD_TARGET BUILD_STABILITY BUILD_IMAGE DESKTOP_ENVIRONMENT DESKTOP_ENVIRONMENT_CONFIG_NAME DESKTOP_APPGROUPS_SELECTED<<< "${line}"
+ DESKTOP_APPGROUPS_SELECTED="${DESKTOP_APPGROUPS_SELECTED//,/ }"
# read all possible configurations
# shellcheck source=/dev/null
source "${SRC}/config/boards/${BOARD}".eos 2> /dev/null
@@ -315,6 +319,7 @@ function build_all()
[[ ${BUILD_TARGET} == "desktop" ]] && BUILD_DESKTOP="yes"
[[ ${BUILD_TARGET} == "minimal" ]] && BUILD_MINIMAL="yes"
+ [[ ${BSP_BUILD} == yes ]] && BUILD_STABILITY=$STABILITY
# create beta or stable
if [[ "${BUILD_STABILITY}" == "${STABILITY}" ]]; then
@@ -364,7 +369,7 @@ function build_all()
IFS=',' read -r -a RELBRANCH <<< "${KERNEL_TARGET}"
for BRANCH in "${RELBRANCH[@]}"
do
- RELTARGETS=(xenial stretch buster bullseye bionic groovy focal)
+ RELTARGETS=(xenial stretch buster bullseye bionic groovy focal hirsute sid)
for RELEASE in "${RELTARGETS[@]}"
do
display_alert "BSP for ${BOARD} ${BRANCH} ${RELEASE}."
@@ -387,8 +392,8 @@ function build_all()
else
((n+=1))
# In dryrun it only prints out what will be build
- printf "%s\t%-32s\t%-8s\t%-14s\t%-6s\t%-6s\t%-6s\n" "${n}." \
- "$BOARD (${BOARDFAMILY})" "${BRANCH}" "${RELEASE}" "${BUILD_DESKTOP}" "${BUILD_MINIMAL}"
+ printf "%s\t%-32s\t%-8s\t%-14s\t%-6s\t%-6s\t%-6s\t%-6s\n" "${n}." \
+ "$BOARD (${BOARDFAMILY})" "${BRANCH}" "${RELEASE}" "${DESKTOP_ENVIRONMENT}" "${BUILD_DESKTOP}" "${BUILD_MINIMAL}" "${DESKTOP_APPGROUPS_SELECTED}"
fi
fi
@@ -426,7 +431,7 @@ echo ""
display_alert "Building all targets" "$STABILITY $(if [[ $KERNEL_ONLY == "yes" ]] ; then echo "kernels"; \
else echo "images"; fi)" "info"
-printf "\n%s\t%-32s\t%-8s\t%-14s\t%-6s\t%-6s\t%-6s\n\n" "" "board" "branch" "release" "XFCE" "minimal"
+printf "\n%s\t%-32s\t%-8s\t%-14s\t%-6s\t%-6s\t%-6s\t%-6s\n\n" "" "board" "branch" "release" "DE" "desktop" "minimal" "DE app groups"
# display what we will build
build_all "dryrun"
diff --git a/lib/chroot-buildpackages.sh b/lib/chroot-buildpackages.sh
index 522080bdf..4318c2c7f 100644
--- a/lib/chroot-buildpackages.sh
+++ b/lib/chroot-buildpackages.sh
@@ -33,17 +33,20 @@ create_chroot()
apt_mirror['bionic']="$UBUNTU_MIRROR"
apt_mirror['focal']="$UBUNTU_MIRROR"
apt_mirror['groovy']="$UBUNTU_MIRROR"
+ apt_mirror['hirsute']="$UBUNTU_MIRROR"
components['stretch']='main,contrib'
components['buster']='main,contrib'
components['bullseye']='main,contrib'
+ components['sid']='main,contrib'
components['xenial']='main,universe,multiverse'
components['bionic']='main,universe,multiverse'
components['focal']='main,universe,multiverse'
components['groovy']='main,universe,multiverse'
+ components['hirsute']='main,universe,multiverse'
display_alert "Creating build chroot" "$release/$arch" "info"
local includes="ccache,locales,git,ca-certificates,devscripts,libfile-fcntllock-perl,debhelper,rsync,python3,distcc"
# perhaps a temporally workaround
- [[ $release == buster || $release == bullseye || $release == focal || $release == groovy ]] && includes=${includes}",perl-openssl-defaults,libnet-ssleay-perl"
+ [[ $release == buster || $release == bullseye || $release == focal || $release == groovy || $release == hirsute || $release == sid ]] && includes=${includes}",perl-openssl-defaults,libnet-ssleay-perl"
if [[ $NO_APT_CACHER != yes ]]; then
local mirror_addr="http://localhost:3142/${apt_mirror[${release}]}"
else
@@ -78,7 +81,7 @@ create_chroot()
mkdir -p "${target_dir}"/var/lock
fi
chroot "${target_dir}" /bin/bash -c "/usr/sbin/update-ccache-symlinks"
- [[ $release == focal ]] && chroot "${target_dir}" /bin/bash -c "ln -s /usr/bin/python3 /usr/bin/python"
+ [[ $release == focal || $release == groovy || $release == hirsute || $release == sid ]] && chroot "${target_dir}" /bin/bash -c "ln -s /usr/bin/python3 /usr/bin/python"
touch "${target_dir}"/root/.debootstrap-complete
display_alert "Debootstrap complete" "${release}/${arch}" "info"
} #############################################################################
@@ -99,6 +102,8 @@ chroot_prepare_distccd()
gcc_version['bionic']='5.4'
gcc_version['focal']='9.2'
gcc_version['groovy']='10.2'
+ gcc_version['hirsute']='10.2'
+ gcc_version['sid']='10.2'
gcc_type['armhf']='arm-linux-gnueabihf-'
gcc_type['arm64']='aarch64-linux-gnu-'
rm -f "${dest}"/cmdlist
@@ -132,7 +137,7 @@ chroot_build_packages()
target_arch="${ARCH}"
else
# only make packages for recent releases. There are no changes on older
- target_release="stretch bionic buster bullseye groovy focal"
+ target_release="stretch bionic buster bullseye groovy focal hirsute sid"
target_arch="armhf arm64"
fi
diff --git a/lib/compilation.sh b/lib/compilation.sh
index 8c5e6ec5d..0f44061fa 100644
--- a/lib/compilation.sh
+++ b/lib/compilation.sh
@@ -41,6 +41,9 @@ compile_atf()
display_alert "Compiling ATF" "" "info"
+# build aarch64
+ if [[ $(dpkg --print-architecture) == amd64 ]]; then
+
local toolchain
toolchain=$(find_toolchain "$ATF_COMPILER" "$ATF_USE_GCC")
[[ -z $toolchain ]] && exit_with_error "Could not find required toolchain" "${ATF_COMPILER}gcc $ATF_USE_GCC"
@@ -53,6 +56,9 @@ compile_atf()
[[ -z $toolchain2 ]] && exit_with_error "Could not find required toolchain" "${toolchain2_type}gcc $toolchain2_ver"
fi
+# build aarch64
+ fi
+
display_alert "Compiler version" "${ATF_COMPILER}gcc $(eval env PATH="${toolchain}:${PATH}" "${ATF_COMPILER}gcc" -dumpversion)" "info"
local target_make target_patchdir target_files
@@ -128,6 +134,9 @@ compile_uboot()
display_alert "Compiling u-boot" "$version" "info"
+# build aarch64
+ if [[ $(dpkg --print-architecture) == amd64 ]]; then
+
local toolchain
toolchain=$(find_toolchain "$UBOOT_COMPILER" "$UBOOT_USE_GCC")
[[ -z $toolchain ]] && exit_with_error "Could not find required toolchain" "${UBOOT_COMPILER}gcc $UBOOT_USE_GCC"
@@ -140,6 +149,8 @@ compile_uboot()
[[ -z $toolchain2 ]] && exit_with_error "Could not find required toolchain" "${toolchain2_type}gcc $toolchain2_ver"
fi
+# build aarch64
+ fi
display_alert "Compiler version" "${UBOOT_COMPILER}gcc $(eval env PATH="${toolchain}:${toolchain2}:${PATH}" "${UBOOT_COMPILER}gcc" -dumpversion)" "info"
[[ -n $toolchain2 ]] && display_alert "Additional compiler version" "${toolchain2_type}gcc $(eval env PATH="${toolchain}:${toolchain2}:${PATH}" "${toolchain2_type}gcc" -dumpversion)" "info"
@@ -338,10 +349,16 @@ compile_kernel()
fi
display_alert "Compiling $BRANCH kernel" "$version" "info"
+# build aarch64
+ if [[ $(dpkg --print-architecture) == amd64 ]]; then
+
local toolchain
toolchain=$(find_toolchain "$KERNEL_COMPILER" "$KERNEL_USE_GCC")
[[ -z $toolchain ]] && exit_with_error "Could not find required toolchain" "${KERNEL_COMPILER}gcc $KERNEL_USE_GCC"
+# build aarch64
+ fi
+
display_alert "Compiler version" "${KERNEL_COMPILER}gcc $(eval env PATH="${toolchain}:${PATH}" "${KERNEL_COMPILER}gcc" -dumpversion)" "info"
# copy kernel config
diff --git a/lib/configuration.sh b/lib/configuration.sh
index 47dbb41f0..b13947d38 100644
--- a/lib/configuration.sh
+++ b/lib/configuration.sh
@@ -21,11 +21,11 @@ USEALLCORES=yes # Use all CPU cores for compiling
[[ -z $EXIT_PATCHING_ERROR ]] && EXIT_PATCHING_ERROR="" # exit patching if failed
[[ -z $HOST ]] && HOST="$BOARD" # set hostname to the board
cd "${SRC}" || exit
-ROOTFSCACHE_VERSION=2
+ROOTFSCACHE_VERSION=3
CHROOT_CACHE_VERSION=7
BUILD_REPOSITORY_URL=$(improved_git remote get-url $(improved_git remote 2>/dev/null | grep origin) 2>/dev/null)
BUILD_REPOSITORY_COMMIT=$(improved_git describe --match=d_e_a_d_b_e_e_f --always --dirty 2>/dev/null)
-ROOTFS_CACHE_MAX=42 # max number of rootfs cache, older ones will be cleaned up
+ROOTFS_CACHE_MAX=200 # max number of rootfs cache, older ones will be cleaned up
if [[ $BETA == yes ]]; then
DEB_STORAGE=$DEST/debs-beta
@@ -95,12 +95,6 @@ ATF_COMPILE=yes
# single ext4 partition is the default and preferred configuration
#BOOTFS_TYPE=''
-
-# set unique mounting directory
-SDCARD="${SRC}/.tmp/rootfs-${BRANCH}-${BOARD}-${RELEASE}-${BUILD_DESKTOP}-${BUILD_MINIMAL}"
-MOUNT="${SRC}/.tmp/mount-${BRANCH}-${BOARD}-${RELEASE}-${BUILD_DESKTOP}-${BUILD_MINIMAL}"
-DESTIMG="${SRC}/.tmp/image-${BRANCH}-${BOARD}-${RELEASE}-${BUILD_DESKTOP}-${BUILD_MINIMAL}"
-
[[ ! -f ${SRC}/config/sources/families/$LINUXFAMILY.conf ]] && \
exit_with_error "Sources configuration not found" "$LINUXFAMILY"
@@ -114,6 +108,213 @@ fi
# load architecture defaults
source "${SRC}/config/sources/${ARCH}.conf"
+# Myy : Menu configuration for choosing desktop configurations
+
+show_menu() {
+ provided_title=$1
+ provided_backtitle=$2
+ provided_menuname=$3
+ # Myy : I don't know why there's a TTY_Y - 8...
+ #echo "Provided title : $provided_title"
+ #echo "Provided backtitle : $provided_backtitle"
+ #echo "Provided menuname : $provided_menuname"
+ #echo "Provided options : " "${@:4}"
+ #echo "TTY X: $TTY_X Y: $TTY_Y"
+ dialog --stdout --title "$provided_title" --backtitle "${provided_backtitle}" \
+ --menu "$provided_menuname" $TTY_Y $TTY_X $((TTY_Y - 8)) "${@:4}"
+}
+
+# Myy : FIXME Factorize
+show_select_menu() {
+ provided_title=$1
+ provided_backtitle=$2
+ provided_menuname=$3
+ dialog --stdout --title "${provided_title}" --backtitle "${provided_backtitle}" \
+ --checklist "${provided_menuname}" $TTY_Y $TTY_X $((TTY_Y - 8)) "${@:4}"
+}
+
+# Myy : Once we got a list of selected groups, parse the PACKAGE_LIST inside configuration.sh
+
+DESKTOP_ELEMENTS_DIR="${SRC}/config/desktop/${RELEASE}"
+DESKTOP_CONFIGS_DIR="${DESKTOP_ELEMENTS_DIR}/environments"
+DESKTOP_CONFIG_PREFIX="config_"
+DESKTOP_APPGROUPS_DIR="${DESKTOP_ELEMENTS_DIR}/appgroups"
+
+desktop_element_available_for_arch() {
+ local desktop_element_path="${1}"
+ local targeted_arch="${2}"
+
+ local arch_limitation_file="${1}/only_for"
+
+ echo "Checking if ${desktop_element_path} is available for ${targeted_arch} in ${arch_limitation_file}" >> "${DEST}"/debug/output.log
+ if [[ -f "${arch_limitation_file}" ]]; then
+ grep -- "${targeted_arch}" "${arch_limitation_file}"
+ return $?
+ else
+ return 0
+ fi
+}
+
+desktop_element_supported() {
+
+ local desktop_element_path="${1}"
+
+ local support_level_filepath="${desktop_element_path}/support"
+ if [[ -f "${support_level_filepath}" ]]; then
+ local support_level="$(cat "${support_level_filepath}")"
+ if [[ "${support_level}" != "supported" && "${EXPERT}" != "yes" ]]; then
+ return 65
+ fi
+
+ desktop_element_available_for_arch "${desktop_element_path}" "${ARCH}"
+ if [[ $? -ne 0 ]]; then
+ return 66
+ fi
+ else
+ return 64
+ fi
+
+ return 0
+
+}
+
+if [[ $BUILD_DESKTOP == "yes" && -z $DESKTOP_ENVIRONMENT ]]; then
+
+ desktop_environments_prepare_menu() {
+ for desktop_env_dir in "${DESKTOP_CONFIGS_DIR}/"*; do
+ local desktop_env_name=$(basename ${desktop_env_dir})
+ local expert_infos=""
+ [[ "${EXPERT}" == "yes" ]] && expert_infos="[$(cat "${desktop_env_dir}/support" 2> /dev/null)]"
+ desktop_element_supported "${desktop_env_dir}" "${ARCH}" && options+=("${desktop_env_name}" "${desktop_env_name^} desktop environment ${expert_infos}")
+ done
+ }
+
+ options=()
+ desktop_environments_prepare_menu
+
+ if [[ "${options[0]}" == "" ]]; then
+ exit_with_error "No desktop environment seems to be available for your board ${BOARD} (ARCH : ${ARCH} - EXPERT : ${EXPERT})"
+ fi
+
+ DESKTOP_ENVIRONMENT=$(show_menu "Choose a desktop environment" "$backtitle" "Select the default desktop environment to bundle with this image" "${options[@]}")
+
+ unset options
+
+ if [[ -z "${DESKTOP_ENVIRONMENT}" ]]; then
+ exit_with_error "No desktop environment selected..."
+ fi
+
+fi
+
+if [[ $BUILD_DESKTOP == "yes" ]]; then
+ # Expected environment variables :
+ # - options
+ # - ARCH
+
+ desktop_environment_check_if_valid() {
+
+ local error_msg=""
+ desktop_element_supported "${DESKTOP_ENVIRONMENT_DIRPATH}" "${ARCH}"
+ local retval=$?
+
+ if [[ ${retval} == 0 ]]; then
+ return
+ elif [[ ${retval} == 64 ]]; then
+ error_msg+="Either the desktop environment ${DESKTOP_ENVIRONMENT} does not exist "
+ error_msg+="or the file ${DESKTOP_ENVIRONMENT_DIRPATH}/support is missing"
+ elif [[ ${retval} == 65 ]]; then
+ error_msg+="Only experts can build an image with the desktop environment \"${DESKTOP_ENVIRONMENT}\", since the Armbian team won't offer any support for it (EXPERT=${EXPERT})"
+ elif [[ ${retval} == 66 ]]; then
+ error_msg+="The desktop environment \"${DESKTOP_ENVIRONMENT}\" has no packages for your targeted board architecture (BOARD=${BOARD} ARCH=${ARCH}). "
+ error_msg+="The supported boards architectures are : "
+ error_msg+="$(cat "${DESKTOP_ENVIRONMENT_DIRPATH}/only_for")"
+ fi
+
+ exit_with_error "${error_msg}"
+ }
+
+ DESKTOP_ENVIRONMENT_DIRPATH="${DESKTOP_CONFIGS_DIR}/${DESKTOP_ENVIRONMENT}"
+
+ desktop_environment_check_if_valid
+fi
+
+if [[ $BUILD_DESKTOP == "yes" && -z $DESKTOP_ENVIRONMENT_CONFIG_NAME ]]; then
+ # FIXME Check for empty folders, just in case the current maintainer
+ # messed up
+ # Note, we could also ignore it and don't show anything in the previous
+ # menu, but that hides information and make debugging harder, which I
+ # don't like. Adding desktop environments as a maintainer is not a
+ # trivial nor common task.
+
+ options=()
+ for configuration in "${DESKTOP_ENVIRONMENT_DIRPATH}/${DESKTOP_CONFIG_PREFIX}"*; do
+ config_filename=$(basename ${configuration})
+ config_name=${config_filename#"${DESKTOP_CONFIG_PREFIX}"}
+ options+=("${config_filename}" "${config_name} configuration")
+ done
+
+ DESKTOP_ENVIRONMENT_CONFIG_NAME=$(show_menu "Choose the desktop environment config" "$backtitle" "Select the configuration for this environment.\nThese are sourced from ${desktop_environment_config_dir}" "${options[@]}")
+ unset options
+
+ if [[ -z $DESKTOP_ENVIRONMENT_CONFIG_NAME ]]; then
+ exit_with_error "No desktop configuration selected... Do you really want a desktop environment ?"
+ fi
+fi
+
+if [[ $BUILD_DESKTOP == "yes" ]]; then
+ DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH="${DESKTOP_ENVIRONMENT_DIRPATH}/${DESKTOP_ENVIRONMENT_CONFIG_NAME}"
+ DESKTOP_ENVIRONMENT_PACKAGE_LIST_FILEPATH="${DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH}/packages"
+fi
+
+# "-z ${VAR+x}" allows to check for unset variable
+# Technically, someone might want to build a desktop with no additional
+# appgroups.
+if [[ $BUILD_DESKTOP == "yes" && -z ${DESKTOP_APPGROUPS_SELECTED+x} ]]; then
+
+ options=()
+ for appgroup_path in "${DESKTOP_APPGROUPS_DIR}/"*; do
+ appgroup="$(basename "${appgroup_path}")"
+ options+=("${appgroup}" "${appgroup^}" off)
+ done
+
+ DESKTOP_APPGROUPS_SELECTED=$(\
+ show_select_menu \
+ "Choose desktop softwares to add" \
+ "$backtitle" \
+ "Select which kind of softwares you'd like to add to your build" \
+ "${options[@]}")
+
+ unset options
+fi
+
+#exit_with_error 'Testing'
+
+# Expected variables
+# - aggregated_content
+# - potential_paths
+# - separator
+# Write to variables :
+# - aggregated_content
+aggregate_content() {
+ echo -e "Potential paths : ${potential_paths}\n" >> "${DEST}"/debug/output.log
+ for filepath in ${potential_paths}; do
+ if [[ -f "${filepath}" ]]; then
+ echo -e "${filepath/"$SRC"\//} yes\n" >> "${DEST}"/debug/output.log
+ aggregated_content+=$(cat "${filepath}")
+ aggregated_content+="${separator}"
+ else
+ echo -e "${filepath/"$SRC"\//} no\n" >> "${DEST}"/debug/output.log
+ fi
+
+ done
+}
+
+# set unique mounting directory
+MOUNT_UUID=$(uuidgen)
+SDCARD="${SRC}/.tmp/rootfs-${MOUNT_UUID}"
+MOUNT="${SRC}/.tmp/mount-${MOUNT_UUID}"
+DESTIMG="${SRC}/.tmp/image-${MOUNT_UUID}"
+
# dropbear needs to be configured differently
[[ $CRYPTROOT_ENABLE == yes && $RELEASE == xenial ]] && exit_with_error "Encrypted rootfs is not supported in Xenial"
[[ $RELEASE == stretch && $CAN_BUILD_STRETCH != yes ]] && exit_with_error "Building Debian Stretch images with selected kernel is not supported"
@@ -131,147 +332,160 @@ BOOTCONFIG_VAR_NAME=BOOTCONFIG_${BRANCH^^}
[[ -z $ATFPATCHDIR ]] && ATFPATCHDIR="atf-$LINUXFAMILY"
[[ -z $KERNELPATCHDIR ]] && KERNELPATCHDIR="$LINUXFAMILY-$BRANCH"
-if [[ $RELEASE == xenial || $RELEASE == bionic || $RELEASE == focal || $RELEASE == groovy ]]; then
+if [[ "$RELEASE" =~ ^(xenial|bionic|focal|groovy|hirsute)$ ]]; then
DISTRIBUTION="Ubuntu"
else
DISTRIBUTION="Debian"
fi
-# Base system dependencies. Since adding MINIMAL_IMAGE we rely on "variant=minbase" which has very basic package set
-DEBOOTSTRAP_LIST="locales gnupg ifupdown apt-utils apt-transport-https ca-certificates bzip2 console-setup cpio cron \
- dbus init initramfs-tools iputils-ping isc-dhcp-client kmod less libpam-systemd \
- linux-base logrotate netbase netcat-openbsd rsyslog systemd sudo ucf udev whiptail \
- wireless-regdb crda dmsetup rsync tzdata"
+CLI_CONFIG_PATH="${SRC}/config/cli/${RELEASE}"
+DEBOOTSTRAP_CONFIG_PATH="${CLI_CONFIG_PATH}/debootstrap"
-[[ $BUILD_DESKTOP == yes ]] && DEBOOTSTRAP_LIST+=" libgtk2.0-bin"
-
-# tab cleanup is mandatory
-DEBOOTSTRAP_LIST=$(echo $DEBOOTSTRAP_LIST | sed -e 's,\\[trn],,g')
-
-# For minimal build different set of packages is needed
-# Essential packages for minimal build
-PACKAGE_LIST="bc cpufrequtils device-tree-compiler fping fake-hwclock psmisc chrony parted dialog \
- ncurses-term sysfsutils toilet figlet u-boot-tools usbutils openssh-server \
- nocache debconf-utils python3-apt"
-
-[[ $ROOTFS_TYPE == xfs ]] && PACKAGE_LIST="$PACKAGE_LIST xfsprogs"
-
-# Non-essential packages for minimal build
-PACKAGE_LIST_ADDITIONAL="network-manager wireless-tools lsof htop mmc-utils wget nano sysstat net-tools resolvconf iozone3 jq libcrack2 cracklib-runtime curl"
-
-if [[ "$BUILD_MINIMAL" != "yes" ]]; then
- # Essential packages
- PACKAGE_LIST="$PACKAGE_LIST bridge-utils build-essential fbset \
- iw wpasupplicant sudo linux-base crda \
- wireless-regdb unattended-upgrades \
- console-setup unicode-data initramfs-tools \
- ca-certificates expect iptables automake html2text \
- bison flex libwrap0-dev libssl-dev libnl-3-dev libnl-genl-3-dev keyboard-configuration"
-
-
- # Non-essential packages
- PACKAGE_LIST_ADDITIONAL="$PACKAGE_LIST_ADDITIONAL alsa-utils btrfs-progs dosfstools iotop stress screen \
- ntfs-3g vim pciutils evtest pv libfuse2 libdigest-sha-perl \
- libproc-processtable-perl aptitude dnsutils f3 haveged hdparm rfkill vlan bash-completion \
- hostapd git ethtool unzip ifenslave libpam-systemd iperf3 \
- software-properties-common libnss-myhostname f2fs-tools avahi-autoipd iputils-arping qrencode sunxi-tools"
+if [[ $? != 0 ]]; then
+ exit_with_error "The desktop environment ${DESKTOP_ENVIRONMENT} is not available for your architecture ${ARCH}"
fi
+AGGREGATION_SEARCH_ROOT_ABSOLUTE_DIRS="
+${SRC}/config
+${SRC}/config/optional/_any_board/_configs
+${SRC}/config/optional/architectures/${ARCH}/_config
+${SRC}/config/optional/families/${LINUXFAMILY}/_config
+${SRC}/config/optional/boards/${BOARD}/_config
+"
+
+DEBOOTSTRAP_SEARCH_RELATIVE_DIRS="
+cli/_all_distributions/debootstrap
+cli/${RELEASE}/debootstrap
+"
+
+CLI_SEARCH_RELATIVE_DIRS="
+cli/_all_distributions/main
+cli/${RELEASE}/main
+"
+
+DESKTOP_ENVIRONMENTS_SEARCH_RELATIVE_DIRS="
+desktop/_all_distributions/environments/_all_environments
+desktop/_all_distributions/environments/${DESKTOP_ENVIRONMENT}
+desktop/_all_distributions/environments/${DESKTOP_ENVIRONMENT}/${DESKTOP_ENVIRONMENT_CONFIG_NAME}
+desktop/${RELEASE}/environments/_all_environments
+desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}
+desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/${DESKTOP_ENVIRONMENT_CONFIG_NAME}
+"
+
+DESKTOP_APPGROUPS_SEARCH_RELATIVE_DIRS="
+desktop/_all_distributions/appgroups
+desktop/_all_distributions/environments/${DESKTOP_ENVIRONMENT}/appgroups
+desktop/${RELEASE}/appgroups
+desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups
+"
+
+get_all_potential_paths() {
+ local root_dirs="${AGGREGATION_SEARCH_ROOT_ABSOLUTE_DIRS}"
+ local rel_dirs="${1}"
+ local sub_dirs="${2}"
+ local looked_up_subpath="${3}"
+ for root_dir in ${root_dirs}; do
+ for rel_dir in ${rel_dirs}; do
+ for sub_dir in ${sub_dirs}; do
+ potential_paths+="${root_dir}/${rel_dir}/${sub_dir}/${looked_up_subpath} "
+ done
+ done
+ done
+ # for ppath in ${potential_paths}; do
+ # echo "Checking for ${ppath}"
+ # if [[ -f "${ppath}" ]]; then
+ # echo "OK !|"
+ # else
+ # echo "Nope|"
+ # fi
+ # done
+}
+
+# Environment variables expected :
+# - aggregated_content
+# Arguments :
+# 1. File to look up in each directory
+# 2. The separator to add between each concatenated file
+# 3. Relative directories paths added to ${3}
+# 4. Relative directories paths added to ${4}
+#
+# The function will basically generate a list of potential paths by
+# generating all the potential paths combinations leading to the
+# looked up file
+# ${AGGREGATION_SEARCH_ROOT_ABSOLUTE_DIRS}/${3}/${4}/${1}
+# Then it will concatenate the content of all the available files
+# into ${aggregated_content}
+#
+# TODO :
+# ${4} could be removed by just adding the appropriate paths to ${3}
+# dynamically for each case
+# (debootstrap, cli, desktop environments, desktop appgroups, ...)
+
+aggregate_all_root_rel_sub() {
+ local separator="${2}"
+
+ local potential_paths=""
+ get_all_potential_paths "${3}" "${4}" "${1}"
+
+ aggregate_content
+}
+
+aggregate_all_debootstrap() {
+ local sub_dirs_to_check=". "
+ if [[ ! -z "${SELECTED_CONFIGURATION+x}" ]]; then
+ sub_dirs_to_check+="config_${SELECTED_CONFIGURATION}"
+ fi
+ aggregate_all_root_rel_sub "${1}" "${2}" "${DEBOOTSTRAP_SEARCH_RELATIVE_DIRS}" "${sub_dirs_to_check}"
+}
+
+aggregate_all_cli() {
+ local sub_dirs_to_check=". "
+ if [[ ! -z "${SELECTED_CONFIGURATION+x}" ]]; then
+ sub_dirs_to_check+="config_${SELECTED_CONFIGURATION}"
+ fi
+ aggregate_all_root_rel_sub "${1}" "${2}" "${CLI_SEARCH_RELATIVE_DIRS}" "${sub_dirs_to_check}"
+}
+
+aggregate_all_desktop() {
+ aggregate_all_root_rel_sub "${1}" "${2}" "${DESKTOP_ENVIRONMENTS_SEARCH_RELATIVE_DIRS}" "."
+ aggregate_all_root_rel_sub "${1}" "${2}" "${DESKTOP_APPGROUPS_SEARCH_RELATIVE_DIRS}" "${DESKTOP_APPGROUPS_SELECTED}"
+}
+
+one_line() {
+ local aggregate_func_name="${1}"
+ local aggregated_content=""
+ shift 1
+ $aggregate_func_name "${@}"
+ cleanup_list aggregated_content
+}
+
+DEBOOTSTRAP_LIST="$(one_line aggregate_all_debootstrap "packages" " ")"
+DEBOOTSTRAP_COMPONENTS="$(one_line aggregate_all_debootstrap "components" " ")"
+DEBOOTSTRAP_COMPONENTS="${DEBOOTSTRAP_COMPONENTS// /,}"
+PACKAGE_LIST="$(one_line aggregate_all_cli "packages" " ")"
+PACKAGE_LIST_ADDITIONAL="$(one_line aggregate_all_cli "packages.additional" " ")"
+
+echo "DEBOOTSTRAP LIST : ${DEBOOTSTRAP_LIST}" >> "${DEST}"/debug/output.log
+echo "DEBOOTSTRAP_COMPONENTS : ${DEBOOTSTRAP_COMPONENTS}" >> "${DEST}"/debug/output.log
+echo "CLI PACKAGE_LIST : ${PACKAGE_LIST}" >> "${DEST}"/debug/output.log
+echo "CLI PACKAGE_LIST_ADDITIONAL : ${PACKAGE_LIST_ADDITIONAL}" >> "${DEST}"/debug/output.log
# Dependent desktop packages
-PACKAGE_LIST_DESKTOP="xserver-xorg xserver-xorg-video-fbdev gvfs-backends gvfs-fuse xfonts-base xinit \
- x11-xserver-utils xfce4 lxtask xfce4-terminal thunar-volman gtk2-engines gtk2-engines-murrine gtk2-engines-pixbuf \
- libgtk2.0-bin network-manager-gnome xfce4-notifyd gnome-keyring gcr libgck-1-0 p11-kit pasystray pavucontrol \
- pulseaudio pavumeter bluez bluez-tools pulseaudio-module-bluetooth blueman libpam-gnome-keyring \
- libgl1-mesa-dri policykit-1 profile-sync-daemon gnome-orca numix-gtk-theme synaptic apt-xapian-index lightdm lightdm-gtk-greeter"
+# Myy : Sources packages from file here
+# Myy : FIXME Rename aggregate_all to aggregate_all_desktop
+if [[ $BUILD_DESKTOP == "yes" ]]; then
+ PACKAGE_LIST_DESKTOP+="$(one_line aggregate_all_desktop "packages" " ")"
+ echo "Groups selected ${DESKTOP_APPGROUPS_SELECTED} -> PACKAGES : ${PACKAGE_LIST_DESKTOP}" >> "${DEST}"/debug/output.log
+fi
-# Recommended desktop packages
-PACKAGE_LIST_DESKTOP_RECOMMENDS="galculator hexchat xfce4-screenshooter network-manager-openvpn-gnome mpv fbi \
- cups-pk-helper cups geany atril xarchiver"
-
-# Full desktop packages
-PACKAGE_LIST_DESKTOP_FULL="libreoffice libreoffice-style-breeze meld remmina kazam avahi-daemon transmission"
-
-# Packages installed before desktop.
-PACKAGE_LIST_PREDEPENDS=""
-
-# Release specific packages
-case $RELEASE in
-
- xenial)
- DEBOOTSTRAP_COMPONENTS="main"
- DEBOOTSTRAP_LIST+=" btrfs-tools"
- [[ -z $BUILD_MINIMAL || $BUILD_MINIMAL == no ]] && PACKAGE_LIST_RELEASE="man-db sysbench command-not-found selinux-policy-default"
- PACKAGE_LIST_DESKTOP+=" paman libgcr-3-common gcj-jre-headless paprefs numix-icon-theme libgnome2-perl \
- pulseaudio-module-gconf onboard"
- PACKAGE_LIST_DESKTOP_RECOMMENDS+=" chromium-browser language-selector-gnome system-config-printer-common \
- system-config-printer-gnome leafpad mirage"
- PACKAGE_LIST_DESKTOP_FULL+=" thunderbird"
- ;;
-
- stretch)
- DEBOOTSTRAP_COMPONENTS="main"
- DEBOOTSTRAP_LIST+=" rng-tools"
- [[ -z $BUILD_MINIMAL || $BUILD_MINIMAL == no ]] && PACKAGE_LIST_RELEASE="man-db kbd net-tools gnupg2 dirmngr sysbench command-not-found selinux-policy-default"
- PACKAGE_LIST_DESKTOP+=" paman libgcr-3-common gcj-jre-headless paprefs dbus-x11 libgnome2-perl pulseaudio-module-gconf onboard"
- PACKAGE_LIST_DESKTOP_RECOMMENDS+=" chromium system-config-printer-common system-config-printer leafpad mirage"
- PACKAGE_LIST_DESKTOP_FULL+=" thunderbird"
- ;;
-
- bionic)
- DEBOOTSTRAP_COMPONENTS="main,universe"
- DEBOOTSTRAP_LIST+=" rng-tools fdisk"
- [[ -z $BUILD_MINIMAL || $BUILD_MINIMAL == no ]] && PACKAGE_LIST_RELEASE="man-db kbd net-tools gnupg2 dirmngr networkd-dispatcher command-not-found selinux-policy-default"
- PACKAGE_LIST_DESKTOP+=" xserver-xorg-input-all paprefs dbus-x11 libgnome2-perl pulseaudio-module-gconf onboard"
- PACKAGE_LIST_DESKTOP_RECOMMENDS+=" chromium-browser system-config-printer-common system-config-printer \
- language-selector-gnome leafpad mirage"
- PACKAGE_LIST_DESKTOP_FULL+=" thunderbird"
- ;;
-
- buster)
- DEBOOTSTRAP_COMPONENTS="main"
- DEBOOTSTRAP_LIST+=" rng-tools fdisk"
- [[ -z $BUILD_MINIMAL || $BUILD_MINIMAL == no ]] && PACKAGE_LIST_RELEASE="man-db kbd net-tools gnupg2 dirmngr networkd-dispatcher command-not-found selinux-policy-default"
- PACKAGE_LIST_DESKTOP+=" paprefs dbus-x11 numix-icon-theme onboard"
- PACKAGE_LIST_DESKTOP_RECOMMENDS+=" chromium system-config-printer-common system-config-printer mirage"
- PACKAGE_LIST_DESKTOP_FULL+=" thunderbird"
- ;;
-
- bullseye)
- DEBOOTSTRAP_COMPONENTS="main"
- DEBOOTSTRAP_LIST+=" haveged fdisk"
- [[ -z $BUILD_MINIMAL || $BUILD_MINIMAL == no ]] && PACKAGE_LIST_RELEASE="man-db kbd net-tools gnupg2 dirmngr networkd-dispatcher command-not-found"
- PACKAGE_LIST_DESKTOP+=" paprefs dbus-x11 numix-icon-theme"
- PACKAGE_LIST_DESKTOP_RECOMMENDS+=" firefox-esr system-config-printer-common system-config-printer"
- PACKAGE_LIST_DESKTOP_FULL+=""
- ;;
-
-
- focal)
- DEBOOTSTRAP_COMPONENTS="main,universe"
- DEBOOTSTRAP_LIST+=" rng-tools fdisk"
- [[ -z $BUILD_MINIMAL || $BUILD_MINIMAL == no ]] && PACKAGE_LIST_RELEASE="man-db kbd net-tools gnupg2 dirmngr networkd-dispatcher selinux-policy-default"
- PACKAGE_LIST_DESKTOP+=" xserver-xorg-input-all paprefs dbus-x11 pulseaudio-module-gsettings onboard"
- PACKAGE_LIST_DESKTOP_RECOMMENDS+=" firefox system-config-printer-common system-config-printer \
- language-selector-gnome viewnior"
- PACKAGE_LIST_DESKTOP_FULL+=" thunderbird"
- PACKAGE_LIST_PREDEPENDS="policykit-1-gnome notification-daemon"
- ;;
-
- groovy)
- DEBOOTSTRAP_COMPONENTS="main,universe"
- DEBOOTSTRAP_LIST+=" rng-tools fdisk"
- [[ -z $BUILD_MINIMAL || $BUILD_MINIMAL == no ]] && PACKAGE_LIST_RELEASE="man-db kbd net-tools gnupg2 dirmngr networkd-dispatcher selinux-policy-default"
- PACKAGE_LIST_DESKTOP+=" xserver-xorg-input-all paprefs dbus-x11 pulseaudio-module-gsettings onboard"
- PACKAGE_LIST_DESKTOP_RECOMMENDS+=" firefox system-config-printer-common system-config-printer \
- language-selector-gnome mirage"
- PACKAGE_LIST_DESKTOP_FULL+=" thunderbird"
- PACKAGE_LIST_PREDEPENDS="policykit-1-gnome notification-daemon"
- ;;
-
-esac
-
+display_alert "Deboostrap" >> "${DEST}"/debug/output.log
+display_alert "Components ${DEBOOTSTRAP_COMPONENTS}" >> "${DEST}"/debug/output.log
+display_alert "Packages ${DEBOOTSTRAP_LIST}" >> "${DEST}"/debug/output.log
+display_alert "----" >> "${DEST}"/debug/output.log
+display_alert "CLI packages" >> "${DEST}"/debug/output.log
+display_alert "Standard : ${PACKAGE_LIST}" >> "${DEST}"/debug/output.log
+display_alert "Additional : ${PACKAGE_LIST_ADDITIONAL}" >> "${DEST}"/debug/output.log
DEBIAN_MIRROR='deb.debian.org/debian'
DEBIAN_SECURTY='security.debian.org/'
@@ -307,13 +521,56 @@ fi
# Build final package list after possible override
PACKAGE_LIST="$PACKAGE_LIST $PACKAGE_LIST_RELEASE $PACKAGE_LIST_ADDITIONAL"
-[[ $BUILD_DESKTOP == yes ]] && PACKAGE_LIST="$PACKAGE_LIST $PACKAGE_LIST_DESKTOP $PACKAGE_LIST_DESKTOP_RECOMMENDS"
+PACKAGE_MAIN_LIST="$(cleanup_list PACKAGE_LIST)"
+
+[[ $BUILD_DESKTOP == yes ]] && PACKAGE_LIST="$PACKAGE_LIST $PACKAGE_LIST_DESKTOP"
+PACKAGE_LIST="$(cleanup_list PACKAGE_LIST)"
# remove any packages defined in PACKAGE_LIST_RM in lib.config
+aggregated_content="${PACKAGE_LIST_RM} "
+aggregate_all_cli "packages.remove" " "
+aggregate_all_desktop "packages.remove" " "
+PACKAGE_LIST_RM="$(cleanup_list aggregated_content)"
+unset aggregated_content
+
+aggregated_content=""
+aggregate_all_cli "packages.uninstall" " "
+aggregate_all_desktop "packages.uninstall" " "
+PACKAGE_LIST_UNINSTALL="$(cleanup_list aggregated_content)"
+unset aggregated_content
+
+display_alert "PACKAGE_MAIN_LIST : ${PACKAGE_MAIN_LIST}" >> "${DEST}"/debug/output.log
+display_alert "PACKAGE_LIST : ${PACKAGE_LIST}" >> "${DEST}"/debug/output.log
+display_alert "PACKAGE_LIST_RM : ${PACKAGE_LIST_RM}" >> "${DEST}"/debug/output.log
+display_alert "PACKAGE_LIST_UNINSTALL : ${PACKAGE_LIST_UNINSTALL}" >> "${DEST}"/debug/output.log
+
if [[ -n $PACKAGE_LIST_RM ]]; then
- PACKAGE_LIST=$(sed -r "s/\b($(tr ' ' '|' <<< ${PACKAGE_LIST_RM}))\b//g" <<< "${PACKAGE_LIST}")
+ display_alert "Remove filter : $(tr ' ' '|' <<< ${PACKAGE_LIST_RM})"
+ # Turns out that \b can be tricked by dashes.
+ # So if you remove mesa-utils but still want to install "mesa-utils-extra"
+ # a "\b(mesa-utils)\b" filter will convert "mesa-utils-extra" to "-extra".
+ # \W is not tricked by this but consumes the surrounding spaces, so we
+ # replace the occurence by one space, to avoid sticking the next word to
+ # the previous one after consuming the spaces.
+ PACKAGE_LIST=$(sed -r "s/\W($(tr ' ' '|' <<< ${PACKAGE_LIST_RM}))\W/ /g" <<< " ${PACKAGE_LIST} ")
+ PACKAGE_MAIN_LIST=$(sed -r "s/\W($(tr ' ' '|' <<< ${PACKAGE_LIST_RM}))\W/ /g" <<< " ${PACKAGE_MAIN_LIST} ")
+ if [[ $BUILD_DESKTOP == "yes" ]]; then
+ PACKAGE_LIST_DESKTOP=$(sed -r "s/\W($(tr ' ' '|' <<< ${PACKAGE_LIST_RM}))\W/ /g" <<< " ${PACKAGE_LIST_DESKTOP} ")
+ # Removing double spaces... AGAIN, since we might have used a sed on them
+ # Do not quote the variables. This would defeat the trick.
+ PACKAGE_LIST_DESKTOP="$(echo ${PACKAGE_LIST_DESKTOP})"
+ fi
+
+ # Removing double spaces... AGAIN, since we might have used a sed on them
+ # Do not quote the variables. This would defeat the trick.
+ PACKAGE_LIST="$(echo ${PACKAGE_LIST})"
+ PACKAGE_MAIN_LIST="$(echo ${PACKAGE_MAIN_LIST})"
fi
+display_alert "After removal of packages.remove packages" >> "${DEST}"/debug/output.log
+display_alert "PACKAGE_MAIN_LIST : \"${PACKAGE_MAIN_LIST}\"" >> "${DEST}"/debug/output.log
+display_alert "PACKAGE_LIST : \"${PACKAGE_LIST}\"" >> "${DEST}"/debug/output.log
+
# Give the option to configure DNS server used in the chroot during the build process
[[ -z $NAMESERVER ]] && NAMESERVER="1.0.0.1" # default is cloudflare alternate
@@ -347,6 +604,8 @@ Board: $BOARD
Branch: $BRANCH
Minimal: $BUILD_MINIMAL
Desktop: $BUILD_DESKTOP
+Desktop Environment: $DESKTOP_ENVIRONMENT
+Software groups: $DESKTOP_APPGROUPS_SELECTED
Kernel configuration:
Repository: $KERNELSOURCE
diff --git a/lib/debootstrap.sh b/lib/debootstrap.sh
index 3b7116de0..b43687c04 100644
--- a/lib/debootstrap.sh
+++ b/lib/debootstrap.sh
@@ -18,7 +18,7 @@
#
debootstrap_ng()
{
- display_alert "Starting rootfs and image building process for" "$BOARD $RELEASE" "info"
+ display_alert "Starting rootfs and image building process for" "${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL}" "info"
[[ $ROOTFS_TYPE != ext4 ]] && display_alert "Assuming $BOARD $BRANCH kernel supports $ROOTFS_TYPE" "" "wrn"
@@ -110,7 +110,10 @@ create_rootfs_cache()
local packages_hash=$(get_package_list_hash "$(($ROOTFSCACHE_VERSION - $n))")
[[ -z ${FORCED_MONTH_OFFSET} ]] && FORCED_MONTH_OFFSET=${n}
local packages_hash=$(get_package_list_hash "$(date -d "$D +${FORCED_MONTH_OFFSET} month" +"%Y-%m-module$ROOTFSCACHE_VERSION" | sed 's/^0*//')")
- local cache_type=$(if [[ ${BUILD_DESKTOP} == yes ]]; then echo "xfce-desktop"; elif [[ ${BUILD_MINIMAL} == yes ]]; then echo "minimal"; else echo "cli";fi)
+ local cache_type="cli"
+ [[ ${BUILD_DESKTOP} == yes ]] && local cache_type="xfce-desktop"
+ [[ -n ${DESKTOP_ENVIRONMENT} ]] && local cache_type="${DESKTOP_ENVIRONMENT}"
+ [[ ${BUILD_MINIMAL} == yes ]] && local cache_type="minimal"
local cache_name=${RELEASE}-${cache_type}-${ARCH}.$packages_hash.tar.lz4
local cache_fname=${SRC}/cache/rootfs/${cache_name}
local display_name=${RELEASE}-${cache_type}-${ARCH}.${packages_hash:0:3}...${packages_hash:29}.tar.lz4
@@ -161,7 +164,7 @@ create_rootfs_cache()
${OUTPUT_DIALOG:+' | dialog --backtitle "$backtitle" --progressbox "Debootstrap (stage 1/2)..." $TTY_Y $TTY_X'} \
${OUTPUT_VERYSILENT:+' >/dev/null 2>/dev/null'}
- [[ ${PIPESTATUS[0]} -ne 0 || ! -f $SDCARD/debootstrap/debootstrap ]] && exit_with_error "Debootstrap base system first stage failed"
+ [[ ${PIPESTATUS[0]} -ne 0 || ! -f $SDCARD/debootstrap/debootstrap ]] && exit_with_error "Debootstrap base system for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} first stage failed"
cp /usr/bin/$QEMU_BINARY $SDCARD/usr/bin/
@@ -174,7 +177,7 @@ create_rootfs_cache()
${OUTPUT_DIALOG:+' | dialog --backtitle "$backtitle" --progressbox "Debootstrap (stage 2/2)..." $TTY_Y $TTY_X'} \
${OUTPUT_VERYSILENT:+' >/dev/null 2>/dev/null'}
- [[ ${PIPESTATUS[0]} -ne 0 || ! -f $SDCARD/bin/bash ]] && exit_with_error "Debootstrap base system second stage failed"
+ [[ ${PIPESTATUS[0]} -ne 0 || ! -f $SDCARD/bin/bash ]] && exit_with_error "Debootstrap base system for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} second stage failed"
mount_chroot "$SDCARD"
@@ -228,14 +231,60 @@ create_rootfs_cache()
${OUTPUT_DIALOG:+' | dialog --backtitle "$backtitle" --progressbox "Upgrading base packages..." $TTY_Y $TTY_X'} \
${OUTPUT_VERYSILENT:+' >/dev/null 2>/dev/null'}
+ # Myy: Dividing the desktop packages installation steps into multiple
+ # ones. We first install the "ADDITIONAL_PACKAGES" in order to get
+ # access to software-common-properties installation.
+ # THEN we add the APT sources and install the Desktop packages.
+ # TODO : Find a way to add APT sources WITHOUT software-common-properties
+
[[ ${PIPESTATUS[0]} -ne 0 ]] && display_alert "Upgrading base packages" "failed" "wrn"
# stage: install additional packages
- display_alert "Installing packages for" "Armbian" "info"
+ display_alert "Installing the main packages for" "Armbian" "info"
eval 'LC_ALL=C LANG=C chroot $SDCARD /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y -q \
- $apt_extra $apt_extra_progress --no-install-recommends install $PACKAGE_LIST"' \
+ $apt_extra $apt_extra_progress --no-install-recommends install $PACKAGE_MAIN_LIST"' \
${PROGRESS_LOG_TO_FILE:+' | tee -a $DEST/debug/debootstrap.log'} \
- ${OUTPUT_DIALOG:+' | dialog --backtitle "$backtitle" --progressbox "Installing Armbian system..." $TTY_Y $TTY_X'} \
+ ${OUTPUT_DIALOG:+' | dialog --backtitle "$backtitle" --progressbox "Installing Armbian main packages..." $TTY_Y $TTY_X'} \
+ ${OUTPUT_VERYSILENT:+' >/dev/null 2>/dev/null'}
+
+ [[ ${PIPESTATUS[0]} -ne 0 ]] && exit_with_error "Installation of Armbian main packages for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} failed"
+
+ if [[ $BUILD_DESKTOP == "yes" ]]; then
+ # FIXME Myy : Are we keeping this only for Desktop users,
+ # or should we extend this to CLI users too ?
+ # There might be some clunky boards that require Debian packages from
+ # specific repos...
+ display_alert "Adding apt sources for Desktop packages"
+ add_desktop_package_sources
+
+ local apt_desktop_install_flags=""
+ if [[ ! -z ${DESKTOP_APT_FLAGS_SELECTED+x} ]]; then
+ for flag in ${DESKTOP_APT_FLAGS_SELECTED}; do
+ apt_desktop_install_flags+=" --install-${flag}"
+ done
+ else
+ # Myy : Using the previous default option, if the variable isn't defined
+ # And ONLY if it's not defined !
+ apt_desktop_install_flags+=" --no-install-recommends"
+ fi
+
+ display_alert "Installing the desktop packages for" "Armbian" "info"
+ eval 'LC_ALL=C LANG=C chroot $SDCARD /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y -q \
+ $apt_extra $apt_extra_progress install ${apt_desktop_install_flags} $PACKAGE_LIST_DESKTOP"' \
+ ${PROGRESS_LOG_TO_FILE:+' | tee -a $DEST/debug/debootstrap.log'} \
+ ${OUTPUT_DIALOG:+' | dialog --backtitle "$backtitle" --progressbox "Installing Armbian desktop packages..." $TTY_Y $TTY_X'} \
+ ${OUTPUT_VERYSILENT:+' >/dev/null 2>/dev/null'}
+
+ [[ ${PIPESTATUS[0]} -ne 0 ]] && exit_with_error "Installation of Armbian desktop packages for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} failed"
+ fi
+
+ # Remove packages from packages.uninstall
+
+ display_alert "Uninstall packages" "$PACKAGE_LIST_UNINSTALL" "info"
+ eval 'LC_ALL=C LANG=C chroot $SDCARD /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y -qq \
+ $apt_extra $apt_extra_progress purge $PACKAGE_LIST_UNINSTALL"' \
+ ${PROGRESS_LOG_TO_FILE:+' >> $DEST/debug/debootstrap.log'} \
+ ${OUTPUT_DIALOG:+' | dialog --backtitle "$backtitle" --progressbox "Removing packages.uninstall packages..." $TTY_Y $TTY_X'} \
${OUTPUT_VERYSILENT:+' >/dev/null 2>/dev/null'}
[[ ${PIPESTATUS[0]} -ne 0 ]] && exit_with_error "Installation of Armbian packages failed"
@@ -266,7 +315,7 @@ create_rootfs_cache()
# creating xapian index that synaptic runs faster
if [[ $BUILD_DESKTOP == yes ]]; then
display_alert "Recreating Synaptic search index" "Please wait" "info"
- chroot $SDCARD /bin/bash -c "/usr/sbin/update-apt-xapian-index -u"
+ chroot $SDCARD /bin/bash -c "[[ -f /usr/sbin/update-apt-xapian-index ]] && /usr/sbin/update-apt-xapian-index -u"
fi
# this is needed for the build process later since resolvconf generated file in /run is not saved
@@ -281,7 +330,7 @@ create_rootfs_cache()
umount_chroot "$SDCARD"
tar cp --xattrs --directory=$SDCARD/ --exclude='./dev/*' --exclude='./proc/*' --exclude='./run/*' --exclude='./tmp/*' \
- --exclude='./sys/*' . | pv -p -b -r -s $(du -sb $SDCARD/ | cut -f1) -N "$display_name" | lz4 -c > $cache_fname
+ --exclude='./sys/*' . | pv -p -b -r -s $(du -sb $SDCARD/ | cut -f1) -N "$display_name" | lz4 -5 -c > $cache_fname
# sign rootfs cache archive that it can be used for web cache once. Internal purposes
if [[ -n $GPG_PASS ]]; then
@@ -332,7 +381,7 @@ prepare_partitions()
# parttype[nfs] is empty
# metadata_csum and 64bit may need to be disabled explicitly when migrating to newer supported host OS releases
- if [[ $(lsb_release -sc) =~ bionic|buster|bullseye|cosmic|groovy|focal ]]; then
+ if [[ $(lsb_release -sc) =~ bionic|buster|bullseye|cosmic|groovy|focal|hirsute|sid ]]; then
mkopts[ext4]='-q -m 2 -O ^64bit,^metadata_csum'
elif [[ $(lsb_release -sc) == xenial ]]; then
mkopts[ext4]='-q -m 2'
@@ -466,7 +515,6 @@ prepare_partitions()
check_loop_device "$LOOP"
- # NOTE: losetup -P option is not available in Trusty
losetup $LOOP ${SDCARD}.raw
# loop device was grabbed here, unlock
@@ -601,7 +649,7 @@ update_initramfs()
create_image()
{
# stage: create file name
- local version="Armbian_${REVISION}_${BOARD^}_${RELEASE}_${BRANCH}_${VER/-$LINUXFAMILY/}"
+ local version="Armbian_${REVISION}_${BOARD^}_${RELEASE}_${BRANCH}_${VER/-$LINUXFAMILY/}${DESKTOP_ENVIRONMENT:+_$DESKTOP_ENVIRONMENT}"
[[ $BUILD_DESKTOP == yes ]] && version=${version}_desktop
[[ $BUILD_MINIMAL == yes ]] && version=${version}_minimal
[[ $ROOTFS_TYPE == nfs ]] && version=${version}_nfsboot
@@ -689,7 +737,7 @@ create_image()
if [[ $COMPRESS_OUTPUTIMAGE == *xz* ]]; then
display_alert "Compressing" "${FINALDEST}/${version}.img.xz" "info"
# compressing consumes a lot of memory we don't have. Waiting for previous packing job to finish helps to run a lot more builds in parallel
- [[ ${BUILD_ALL} == yes ]] && while [[ $(ps -uax | grep "pixz" | wc -l) -gt 3 ]]; do echo -en "#"; sleep 2; done
+ [[ ${BUILD_ALL} == yes && $(free | grep Mem | awk '{print $4/$2 * 100}' | awk '{print int($1+0.5)}') -lt 50 ]] && while [[ $(ps -uax | grep "pixz" | wc -l) -gt 5 ]]; do echo -en "#"; sleep 2; done
pixz -9 < $DESTIMG/${version}.img > ${FINALDEST}/${version}.img.xz
compression_type=".xz"
fi
diff --git a/lib/desktop.sh b/lib/desktop.sh
index 361ec9ddb..18016453a 100644
--- a/lib/desktop.sh
+++ b/lib/desktop.sh
@@ -9,14 +9,40 @@
# This file is a part of the Armbian build script
# https://github.com/armbian/build/
+# Functions:
+# create_desktop_package
+# run_on_sdcard
+# install_ppa_prerequisites
+# add_apt_sources
+# add_desktop_package_sources
+# desktop_postinstall
+
+
+
+
create_desktop_package ()
{
- # join and cleanup package list
- PACKAGE_LIST_DESKTOP+=" "${PACKAGE_LIST_DESKTOP_RECOMMENDS}
- PACKAGE_LIST_DESKTOP=${PACKAGE_LIST_DESKTOP// /,};
- PACKAGE_LIST_DESKTOP=${PACKAGE_LIST_DESKTOP//[[:space:]]/}
+ # join and cleanup package list
+ # Remove leading and trailing whitespaces
+ echo "Showing PACKAGE_LIST_DESKTOP before postprocessing" >> "${DEST}"/debug/output.log
+ # Use quotes to show leading and trailing spaces
+ echo "\"$PACKAGE_LIST_DESKTOP\"" >> "${DEST}"/debug/output.log
+
+ # Remove leading and trailing spaces with some bash monstruosity
+ # https://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-a-bash-variable#12973694
+ DEBIAN_RECOMMENDS="${PACKAGE_LIST_DESKTOP#"${PACKAGE_LIST_DESKTOP%%[![:space:]]*}"}"
+ DEBIAN_RECOMMENDS="${DEBIAN_RECOMMENDS%"${DEBIAN_RECOMMENDS##*[![:space:]]}"}"
+ # Replace whitespace characters by commas
+ DEBIAN_RECOMMENDS=${DEBIAN_RECOMMENDS// /,};
+ # Remove others 'spacing characters' (like tabs)
+ DEBIAN_RECOMMENDS=${DEBIAN_RECOMMENDS//[[:space:]]/}
+
+ echo "DEBIAN_RECOMMENDS : ${DEBIAN_RECOMMENDS}" >> "${DEST}"/debug/output.log
+
+ # Replace whitespace characters by commas
PACKAGE_LIST_PREDEPENDS=${PACKAGE_LIST_PREDEPENDS// /,};
+ # Remove others 'spacing characters' (like tabs)
PACKAGE_LIST_PREDEPENDS=${PACKAGE_LIST_PREDEPENDS//[[:space:]]/}
local destination tmp_dir
@@ -25,6 +51,8 @@ create_desktop_package ()
rm -rf "${destination}"
mkdir -p "${destination}"/DEBIAN
+ echo "${PACKAGE_LIST_PREDEPENDS}" >> "${DEST}"/debug/output.log
+
# set up control file
cat <<-EOF > "${destination}"/DEBIAN/control
Package: ${CHOSEN_DESKTOP}
@@ -34,85 +62,43 @@ create_desktop_package ()
Installed-Size: 1
Section: xorg
Priority: optional
- Recommends: ${PACKAGE_LIST_DESKTOP//[:space:]+/,}
- Provides: ${CHOSEN_DESKTOP}
+ Recommends: ${DEBIAN_RECOMMENDS//[:space:]+/,}
+ Provides: ${CHOSEN_DESKTOP}, armbian-${RELEASE}-desktop
Pre-Depends: ${PACKAGE_LIST_PREDEPENDS//[:space:]+/,}
Description: Armbian desktop for ${DISTRIBUTION} ${RELEASE}
EOF
- cat <<-EOF > "${destination}"/DEBIAN/postinst
- #!/bin/sh -e
+ #display_alert "Showing ${destination}/DEBIAN/control"
+ cat "${destination}"/DEBIAN/control >> "${DEST}"/debug/install.log
- # overwrite stock chromium and firefox configuration
- if [ -d /etc/chromium-browser/ ]; then ln -sf /etc/armbian/chromium.conf /etc/chromium-browser/default; fi
- if [ -d /etc/chromium.d/ ]; then ln -sf /etc/armbian/chromium.conf /etc/chromium.d/chromium.conf; fi
- cp -R /etc/armbian/chromium /usr/share
- # overwrite stock lightdm greeter configuration
- if [ -d /etc/armbian/lightdm ]; then cp -R /etc/armbian/lightdm /etc/; fi
+ # Recreating the DEBIAN/postinst file
+ echo "#!/bin/sh -e" > "${destination}/DEBIAN/postinst"
- if [ -d /etc/firefox/ ]; then ln -sf /etc/armbian/firefox.conf /etc/firefox/syspref.js; fi
+ local aggregated_content=""
+ aggregate_all_desktop "debian/postinst" $'\n'
- if [ -d /usr/lib/firefox-esr/ ]; then
- ln -sf /etc/armbian/firefox.conf /usr/lib/firefox-esr/mozilla.cfg
- echo 'pref("general.config.obscure_value", 0);' > /usr/lib/firefox-esr/defaults/pref/local-settings.js
- echo 'pref("general.config.filename", "mozilla.cfg");' >> /usr/lib/firefox-esr/defaults/pref/local-settings.js
- fi
+ echo "${aggregated_content}" >> "${destination}/DEBIAN/postinst"
+ echo "exit 0" >> "${destination}/DEBIAN/postinst"
- # Adjust menu
- if [ -f /etc/xdg/menus/xfce-applications.menu ]; then
- sed -i -n '/Settings<\/Menuname>/{p;:a;N;/xfce4-session-logout.desktop<\/Filename>/!ba;s/.*\n/\
- \t\n\t\n \n armbian-donate.desktop<\/Filename>\
- \n armbian-support.desktop<\/Filename>\n/};p' /etc/xdg/menus/xfce-applications.menu
- fi
-
- # Hide few items
- if [ -f /usr/share/applications/display-im6.q16.desktop ]; then mv /usr/share/applications/display-im6.q16.desktop /usr/share/applications/display-im6.q16.desktop.hidden; fi
- if [ -f /usr/share/applications/display-im6.desktop ]]; then mv /usr/share/applications/display-im6.desktop /usr/share/applications/display-im6.desktop.hidden; fi
- if [ -f /usr/share/applications/vim.desktop ]]; then mv /usr/share/applications/vim.desktop /usr/share/applications/vim.desktop.hidden; fi
- if [ -f /usr/share/applications/libreoffice-startcenter.desktop ]]; then mv /usr/share/applications/libreoffice-startcenter.desktop /usr/share/applications/libreoffice-startcenter.desktop.hidden; fi
-
- # Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
- if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
-
- exit 0
- EOF
chmod 755 "${destination}"/DEBIAN/postinst
- # add loading desktop splash service
- mkdir -p "${destination}"/etc/systemd/system/
- cp "${SRC}"/packages/blobs/desktop/desktop-splash/desktop-splash.service "${destination}"/etc/systemd/system/desktop-splash.service
+ #display_alert "Showing ${destination}/DEBIAN/postinst"
+ cat "${destination}/DEBIAN/postinst" >> "${DEST}"/debug/install.log
- # install optimized browser configurations
+ # Armbian create_desktop_package scripts
+
+ unset aggregated_content
+
+ # Myy : I'm preparing the common armbian folders, in advance, since the scripts are now splitted
mkdir -p "${destination}"/etc/armbian
- cp "${SRC}"/packages/blobs/desktop/chromium.conf "${destination}"/etc/armbian
- cp "${SRC}"/packages/blobs/desktop/firefox.conf "${destination}"/etc/armbian
- cp -R "${SRC}"/packages/blobs/desktop/chromium "${destination}"/etc/armbian
- # install lightdm greeter
- cp -R "${SRC}"/packages/blobs/desktop/lightdm "${destination}"/etc/armbian
+ local aggregated_content=""
- # install default desktop settings
- mkdir -p "${destination}"/etc/skel
- cp -R "${SRC}"/packages/blobs/desktop/skel/. "${destination}"/etc/skel
+ aggregate_all_desktop "armbian/create_desktop_package.sh" $'\n'
-
- # using different icon pack. Workaround due to this bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=867779
- if [[ ${RELEASE} == bionic || ${RELEASE} == stretch || ${RELEASE} == buster || ${RELEASE} == bullseye || ${RELEASE} == focal || ${RELEASE} == groovy ]]; then
- sed -i 's//g' \
- "${destination}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
- fi
-
- # install dedicated startup icons
- mkdir -p "${destination}"/usr/share/pixmaps "${destination}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/
- cp "${SRC}/packages/blobs/desktop/icons/${DISTRIBUTION,,}.png" "${destination}"/usr/share/pixmaps
- sed 's/xenial.png/'"${DISTRIBUTION,,}"'.png/' -i "${destination}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
-
- # install logo for login screen
- cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/pixmaps
-
- # install wallpapers
- mkdir -p "${destination}"/usr/share/backgrounds/xfce/
- cp "${SRC}"/packages/blobs/desktop/wallpapers/armbian*.jpg "${destination}"/usr/share/backgrounds/xfce/
+ # display_alert "Showing the user scripts executed in create_desktop_package"
+ echo "${aggregated_content}" >> "${DEST}"/debug/install.log
+ eval "${aggregated_content}"
# create board DEB file
display_alert "Building desktop package" "${CHOSEN_DESKTOP}_${REVISION}_all" "info"
@@ -120,40 +106,119 @@ create_desktop_package ()
mkdir -p "${DEB_STORAGE}/${RELEASE}"
cd "${destination}"; cd ..
fakeroot dpkg-deb -b "${destination}" "${DEB_STORAGE}/${RELEASE}/${CHOSEN_DESKTOP}_${REVISION}_all.deb" >/dev/null
+
# cleanup
rm -rf "${tmp_dir}"
+
+ unset aggregated_content
+
}
+
+
+
+run_on_sdcard() {
+
+ # Myy : The lack of quotes is deliberate here
+ # This allows for redirections and pipes easily.
+ chroot "${SDCARD}" /bin/bash -c "${@}" >> "${DEST}"/debug/install.log
+
+}
+
+
+
+
+install_ppa_prerequisites() {
+
+ # Myy : So... The whole idea is that, a good bunch of external sources
+ # are PPA.
+ # Adding PPA without add-apt-repository is poorly conveninent since
+ # you need to reconstruct the URL by hand, and find the GPG key yourself.
+ # add-apt-repository does that automatically, and in a way that allows you
+ # to remove it cleanly through the same tool.
+
+ # Myy : TODO Try to find a way to install this package only when
+ # we encounter a PPA.
+ run_on_sdcard "DEBIAN_FRONTEND=noninteractive apt install -yqq software-properties-common"
+
+}
+
+add_apt_sources() {
+
+ local potential_paths=""
+ local sub_dirs_to_check=". "
+ if [[ ! -z "${SELECTED_CONFIGURATION+x}" ]]; then
+ sub_dirs_to_check+="config_${SELECTED_CONFIGURATION}"
+ fi
+ get_all_potential_paths "${DEBOOTSTRAP_SEARCH_RELATIVE_DIRS}" "${sub_dirs_to_check}" "sources/apt"
+ get_all_potential_paths "${CLI_SEARCH_RELATIVE_DIRS}" "${sub_dirs_to_check}" "sources/apt"
+ get_all_potential_paths "${DESKTOP_ENVIRONMENTS_SEARCH_RELATIVE_DIRS}" "." "sources/apt"
+ get_all_potential_paths "${DESKTOP_APPGROUPS_SEARCH_RELATIVE_DIRS}" "${DESKTOP_APPGROUPS_SELECTED}" "sources/apt"
+
+ display_alert "ADDING ADDITIONAL APT SOURCES"
+
+ for apt_sources_dirpath in ${potential_paths}; do
+ if [[ -d "${apt_sources_dirpath}" ]]; then
+ for apt_source_filepath in "${apt_sources_dirpath}/"*.source; do
+ local new_apt_source="$(cat "${apt_source_filepath}")"
+ display_alert "Adding APT Source ${new_apt_source}"
+ # -y -> Assumes yes to all queries
+ # -n -> Do not update package cache after adding
+ run_on_sdcard "add-apt-repository -y -n \"${new_apt_source}\""
+ display_alert "Return code : $?"
+
+ local apt_source_gpg_filepath="${apt_source_filepath}.gpg"
+
+ # PPA provide GPG keys automatically, it seems.
+ # But other repositories (Docker for example) require the
+ # user to import GPG keys manually
+ # Myy : FIXME We need some automatic Git warnings when someone
+ # add a GPG key, since trusting the wrong keys could lead to
+ # serious issues.
+ if [[ -f "${apt_source_gpg_filepath}" ]]; then
+ display_alert "Adding GPG Key ${apt_source_gpg_filepath}"
+ local apt_source_gpg_filename="$(basename ${apt_source_gpg_filepath})"
+ cp "${apt_source_gpg_filepath}" "${SDCARD}/tmp/${apt_source_gpg_filename}"
+ run_on_sdcard "apt-key add \"/tmp/${apt_source_gpg_filename}\""
+ echo "APT Key returned : $?"
+ fi
+ done
+ fi
+ done
+
+}
+
+
+
+
+add_desktop_package_sources() {
+
+ # Myy : I see Snap and Flatpak coming up in the next releases
+ # so... let's prepare for that
+ add_apt_sources
+ run_on_sdcard "apt -y -q update"
+ ls -l "${SDCARD}/etc/apt/sources.list.d" >> "${DEST}"/debug/install.log
+ cat "${SDCARD}/etc/apt/sources.list" >> "${DEST}"/debug/install.log
+
+}
+
+
+
+
desktop_postinstall ()
{
- # disable display manager for first run
- chroot "${SDCARD}" /bin/bash -c "systemctl --no-reload disable lightdm.service >/dev/null 2>&1"
- chroot "${SDCARD}" /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get update" >> "${DEST}"/debug/install.log
- if [[ ${FULL_DESKTOP} == yes ]]; then
- chroot "${SDCARD}" /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -yqq --no-install-recommends install $PACKAGE_LIST_DESKTOP_FULL" >> "${DEST}"/debug/install.log
- fi
+
+ # disable display manager for the first run
+ run_on_sdcard "systemctl --no-reload disable lightdm.service >/dev/null 2>&1"
+ run_on_sdcard "systemctl --no-reload disable gdm3.service >/dev/null 2>&1"
+ run_on_sdcard "DEBIAN_FRONTEND=noninteractive apt-get update" >> "${DEST}"/debug/install.log
if [[ -n ${PACKAGE_LIST_DESKTOP_BOARD} ]]; then
- chroot "${SDCARD}" /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -yqq --no-install-recommends install $PACKAGE_LIST_DESKTOP_BOARD" >> "${DEST}"/debug/install.log
+ run_on_sdcard "DEBIAN_FRONTEND=noninteractive apt-get -yqq --no-install-recommends install $PACKAGE_LIST_DESKTOP_BOARD"
fi
if [[ -n ${PACKAGE_LIST_DESKTOP_FAMILY} ]]; then
- chroot "${SDCARD}" /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -yqq --no-install-recommends install $PACKAGE_LIST_DESKTOP_FAMILY" >> "${DEST}"/debug/install.log
+ run_on_sdcard "DEBIAN_FRONTEND=noninteractive apt-get -yqq --no-install-recommends install $PACKAGE_LIST_DESKTOP_FAMILY"
fi
- # Compile Turbo Frame buffer for sunxi
- if [[ $LINUXFAMILY == sun* && $BRANCH == default ]]; then
- sed 's/name="use_compositing" type="bool" value="true"/name="use_compositing" type="bool" value="false"/' -i "${SDCARD}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml
-
- # enable memory reservations
- echo "disp_mem_reserves=on" >> "${SDCARD}"/boot/armbianEnv.txt
- echo "extraargs=cma=96M" >> "${SDCARD}"/boot/armbianEnv.txt
- fi
-
- if [[ $BOARD == "pinebook-pro" ]]; then
- # powerconfig, touchpad, and special keys
- cp $SRC/packages/bsp/pinebook-pro/xfce4-power-manager.xml ${SDCARD}/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/
- cp $SRC/packages/bsp/pinebook-pro/pointers.xml ${SDCARD}/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/
- cp $SRC/packages/bsp/pinebook-pro/xfce4-keyboard-shortcuts.xml ${SDCARD}/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/
- fi
-}
+}
\ No newline at end of file
diff --git a/lib/distributions.sh b/lib/distributions.sh
index f52425a7d..bad3d063b 100644
--- a/lib/distributions.sh
+++ b/lib/distributions.sh
@@ -58,7 +58,7 @@ install_common()
# /usr/share/initramfs-tools/hooks/dropbear will automatically add 'id_ecdsa.pub' to authorized_keys file
# during mkinitramfs of update-initramfs
#cat "${SDCARD}"/etc/dropbear-initramfs/id_ecdsa.pub > "${SDCARD}"/etc/dropbear-initramfs/authorized_keys
- CRYPTROOT_SSH_UNLOCK_KEY_NAME="Armbian_${REVISION}_${BOARD^}_${RELEASE}_${BRANCH}_${VER/-$LINUXFAMILY/}".key
+ CRYPTROOT_SSH_UNLOCK_KEY_NAME="Armbian_${REVISION}_${BOARD^}_${RELEASE}_${BRANCH}_${VER/-$LINUXFAMILY/}_${DESKTOP_ENVIRONMENT}".key
# copy dropbear ssh key to image output dir for convenience
cp "${SDCARD}"/etc/dropbear-initramfs/id_ecdsa "${DEST}/images/${CRYPTROOT_SSH_UNLOCK_KEY_NAME}"
display_alert "SSH private key for dropbear (initramfs) has been copied to:" \
@@ -277,13 +277,13 @@ install_common()
# install armbian-desktop
if [[ "${REPOSITORY_INSTALL}" != *armbian-desktop* ]]; then
if [[ $BUILD_DESKTOP == yes ]]; then
- install_deb_chroot "${DEB_STORAGE}/$RELEASE/armbian-${RELEASE}-desktop_${REVISION}_all.deb"
+ install_deb_chroot "${DEB_STORAGE}/$RELEASE/${CHOSEN_DESKTOP}_${REVISION}_all.deb"
# install display manager and PACKAGE_LIST_DESKTOP_FULL packages if enabled per board
desktop_postinstall
fi
else
if [[ $BUILD_DESKTOP == yes ]]; then
- install_deb_chroot "armbian-${RELEASE}-desktop" "remote"
+ install_deb_chroot "${CHOSEN_DESKTOP}" "remote"
# install display manager and PACKAGE_LIST_DESKTOP_FULL packages if enabled per board
desktop_postinstall
fi
@@ -478,9 +478,6 @@ install_common()
}
-
-
-
install_rclocal()
{
@@ -504,9 +501,6 @@ install_rclocal()
}
-
-
-
install_distribution_specific()
{
@@ -527,7 +521,7 @@ install_distribution_specific()
;;
- stretch|buster)
+ stretch|buster|sid)
# remove doubled uname from motd
[[ -f "${SDCARD}"/etc/update-motd.d/10-uname ]] && rm "${SDCARD}"/etc/update-motd.d/10-uname
@@ -550,7 +544,7 @@ install_distribution_specific()
sed '/security/ d' -i "${SDCARD}"/etc/apt/sources.list
;;
- bionic|groovy|focal)
+ bionic|groovy|focal|hirsute)
# by using default lz4 initrd compression leads to corruption, go back to proven method
sed -i "s/^COMPRESS=.*/COMPRESS=gzip/" "${SDCARD}"/etc/initramfs-tools/initramfs.conf
diff --git a/lib/general.sh b/lib/general.sh
index d932513af..6ff5255d7 100644
--- a/lib/general.sh
+++ b/lib/general.sh
@@ -129,7 +129,7 @@ get_package_list_hash()
# create_sources_list
#
-# : stretch|buster|bullseye|xenial|bionic|groovy|focal
+# : stretch|buster|bullseye|xenial|bionic|groovy|focal|groovy|hirsute|sid
# : path to root directory
#
create_sources_list()
@@ -139,7 +139,7 @@ create_sources_list()
[[ -z $basedir ]] && exit_with_error "No basedir passed to create_sources_list"
case $release in
- stretch|buster|bullseye)
+ stretch|buster|bullseye|sid)
cat <<-EOF > "${basedir}"/etc/apt/sources.list
deb http://${DEBIAN_MIRROR} $release main contrib non-free
#deb-src http://${DEBIAN_MIRROR} $release main contrib non-free
@@ -155,7 +155,7 @@ create_sources_list()
EOF
;;
- xenial|bionic|groovy|focal)
+ xenial|bionic|groovy|focal|groovy|hirsute)
cat <<-EOF > "${basedir}"/etc/apt/sources.list
deb http://${UBUNTU_MIRROR} $release main restricted universe multiverse
#deb-src http://${UBUNTU_MIRROR} $release main restricted universe multiverse
@@ -598,30 +598,48 @@ display_alert "Building kernel splash logo" "$RELEASE" "info"
+DISTRIBUTIONS_DESC_DIR="config/distributions"
+
function distro_menu ()
{
# create a select menu for choosing a distribution based EXPERT status
-# also sets DISTRIBUTION_STATUS which goes to BSP package / armbian-release
- for i in "${!distro_name[@]}"
- do
- if [[ "${i}" == "${1}" ]]; then
- if [[ "${distro_support[$i]}" != "supported" && $EXPERT != "yes" ]]; then
- :
- else
- local text=""
- [[ $EXPERT == "yes" ]] && local text="(${distro_support[$i]})"
- options+=("$i" "${distro_name[$i]} $text")
- fi
- DISTRIBUTION_STATUS=${distro_support[$i]}
- break
+ local distrib_dir="${1}"
+
+ if [[ -d "${distrib_dir}" && -f "${distrib_dir}/support" ]]; then
+ local support_level="$(cat "${distrib_dir}/support")"
+ if [[ "${support_level}" != "supported" && $EXPERT != "yes" ]]; then
+ :
+ else
+ local distro_codename="$(basename "${distrib_dir}")"
+ local distro_fullname="$(cat "${distrib_dir}/name")"
+ local expert_infos=""
+ [[ $EXPERT == "yes" ]] && expert_infos="(${support_level})"
+ options+=("${distro_codename}" "${distro_fullname} ${expert_infos}")
fi
- done
+ fi
}
+function distros_options() {
+ for distrib_dir in "${DISTRIBUTIONS_DESC_DIR}/"*; do
+ distro_menu "${distrib_dir}"
+ done
+}
+function set_distribution_status() {
+
+ local distro_support_desc_filepath="${DISTRIBUTIONS_DESC_DIR}/${RELEASE}/support"
+ if [[ ! -f "${distro_support_desc_filepath}" ]]; then
+ exit_with_error "Distribution ${distribution_name} does not exist"
+ else
+ DISTRIBUTION_STATUS="$(cat "${distro_support_desc_filepath}")"
+ fi
+
+ [[ "${DISTRIBUTION_STATUS}" != "supported" ]] && [[ "${EXPERT}" != "yes" ]] && exit_with_error "Armbian ${RELEASE} is unsupported and, therefore, only available to experts (EXPERT=yes)"
+
+}
adding_packages()
{
@@ -654,7 +672,7 @@ addtorepo()
# parameter "delete" remove incoming directory if publishing is succesful
# function: cycle trough distributions
- local distributions=("xenial" "stretch" "bionic" "buster" "bullseye" "groovy" "focal")
+ local distributions=("xenial" "stretch" "bionic" "buster" "bullseye" "groovy" "focal" "hirsute" "sid")
local errors=0
for release in "${distributions[@]}"; do
@@ -766,7 +784,7 @@ addtorepo()
repo-manipulate() {
- local DISTROS=("xenial" "stretch" "bionic" "buster" "bullseye" "groovy" "focal")
+ local DISTROS=("xenial" "stretch" "bionic" "buster" "bullseye" "groovy" "focal" "hirsute" "sid")
case $@ in
serve)
# display repository content
@@ -951,6 +969,8 @@ prepare_host()
else
local offline=false
fi
+# build aarch64
+ if [[ $(dpkg --print-architecture) != arm64 ]]; then
if [[ $(dpkg --print-architecture) != amd64 ]]; then
display_alert "Please read documentation to set up proper compilation environment"
@@ -958,6 +978,9 @@ prepare_host()
exit_with_error "Running this tool on non x86-x64 build host is not supported"
fi
+# build aarch64
+ fi
+
# wait until package manager finishes possible system maintanace
wait_for_package_manager
@@ -966,6 +989,10 @@ prepare_host()
# packages list for host
# NOTE: please sync any changes here with the Dockerfile and Vagrantfile
+
+# build aarch64
+ if [[ $(dpkg --print-architecture) == amd64 ]]; then
+
local hostdeps="wget ca-certificates device-tree-compiler pv bc lzop zip binfmt-support build-essential ccache debootstrap ntpdate \
gawk gcc-arm-linux-gnueabihf qemu-user-static u-boot-tools uuid-dev zlib1g-dev unzip libusb-1.0-0-dev fakeroot \
parted pkg-config libncurses5-dev whiptail debian-keyring debian-archive-keyring f2fs-tools libfile-fcntllock-perl rsync libssl-dev \
@@ -974,6 +1001,20 @@ prepare_host()
locales ncurses-base pixz dialog systemd-container udev lib32stdc++6 libc6-i386 lib32ncurses5 lib32tinfo5 \
bison libbison-dev flex libfl-dev cryptsetup gpg gnupg1 cpio aria2 pigz dirmngr python3-distutils jq"
+# build aarch64
+ else
+
+ local hostdeps="wget ca-certificates device-tree-compiler pv bc lzop zip binfmt-support build-essential ccache debootstrap ntpdate \
+ gawk gcc-arm-linux-gnueabihf qemu-user-static u-boot-tools uuid-dev zlib1g-dev unzip libusb-1.0-0-dev fakeroot \
+ parted pkg-config libncurses5-dev whiptail debian-keyring debian-archive-keyring f2fs-tools libfile-fcntllock-perl rsync libssl-dev \
+ nfs-kernel-server btrfs-progs ncurses-term p7zip-full kmod dosfstools libc6-dev-armhf-cross imagemagick \
+ curl patchutils liblz4-tool libpython2.7-dev linux-base swig aptly acl python3-dev \
+ locales ncurses-base pixz dialog systemd-container udev libc6 qemu\
+ bison libbison-dev flex libfl-dev cryptsetup gpg gnupg1 cpio aria2 pigz dirmngr python3-distutils"
+
+# build aarch64
+ fi
+
local codename=$(lsb_release -sc)
# Add support for Ubuntu 20.04, 21.04 and Mint Ulyana
@@ -987,12 +1028,11 @@ prepare_host()
display_alert "Build host OS release" "${codename:-(unknown)}" "info"
- # Ubuntu Focal x86_64 is the only fully supported host OS release
- # Ubuntu Bionic x86_64 support is no longer supported
+ # Ubuntu 20.04.x (Focal) x86_64 is the only fully supported host OS release
# Using Docker/VirtualBox/Vagrant is the only supported way to run the build script on other Linux distributions
#
# NO_HOST_RELEASE_CHECK overrides the check for a supported host system
- # Disable host OS check at your own risk, any issues reported with unsupported releases will be closed without a discussion
+ # Disable host OS check at your own risk. Any issues reported with unsupported releases will be closed without discussion
if [[ -z $codename || "buster groovy focal hirsute debbie tricia ulyana" != *"$codename"* ]]; then
if [[ $NO_HOST_RELEASE_CHECK == yes ]]; then
display_alert "You are running on an unsupported system" "${codename:-(unknown)}" "wrn"
@@ -1006,6 +1046,8 @@ prepare_host()
exit_with_error "Windows subsystem for Linux is not a supported build environment"
fi
+# build aarch64
+ if [[ $(dpkg --print-architecture) == amd64 ]]; then
if [[ -z $codename || $codename =~ ^(focal|groovy|debbie|buster|hirsute|ulyana)$ ]]; then
hostdeps="${hostdeps/lib32ncurses5 lib32tinfo5/lib32ncurses6 lib32tinfo6}"
@@ -1028,6 +1070,9 @@ prepare_host()
SYNC_CLOCK=no
fi
+# build aarch64
+ fi
+
# Skip verification if you are working offline
if ! $offline; then
@@ -1043,6 +1088,10 @@ prepare_host()
done
# distribution packages are buggy, download from author
+
+# build aarch64
+ if [[ $(dpkg --print-architecture) == amd64 ]]; then
+
if [[ ! -f /etc/apt/sources.list.d/aptly.list ]]; then
display_alert "Updating from external repository" "aptly" "info"
if [ x"" != x"${http_proxy}" ]; then
@@ -1057,6 +1106,9 @@ prepare_host()
sed "s/squeeze/nightly/" -i /etc/apt/sources.list.d/aptly.list
fi
+# build aarch64
+ fi
+
if [[ ${#deps[@]} -gt 0 ]]; then
display_alert "Installing build dependencies"
apt-get -q update
@@ -1071,10 +1123,16 @@ prepare_host()
ntpdate -s "${NTP_SERVER:-pool.ntp.org}"
fi
+# build aarch64
+ if [[ $(dpkg --print-architecture) == amd64 ]]; then
+
if [[ $(dpkg-query -W -f='${db:Status-Abbrev}\n' 'zlib1g:i386' 2>/dev/null) != *ii* ]]; then
apt-get install -qq -y --no-install-recommends zlib1g:i386 >/dev/null 2>&1
fi
+# build aarch64
+ fi
+
# create directory structure
mkdir -p "${SRC}"/{cache,output} "${USERPATCHES_PATH}"
if [[ -n $SUDO_USER ]]; then
@@ -1087,6 +1145,9 @@ prepare_host()
fi
mkdir -p "${DEST}"/debs-beta/extra "${DEST}"/debs/extra "${DEST}"/{config,debug,patch} "${USERPATCHES_PATH}"/overlay "${SRC}"/cache/{sources,hash,hash-beta,toolchain,utility,rootfs} "${SRC}"/.tmp
+# build aarch64
+ if [[ $(dpkg --print-architecture) == amd64 ]]; then
+
display_alert "Checking for external GCC compilers" "" "info"
# download external Linaro compiler and missing special dependencies since they are needed for certain sources
@@ -1134,6 +1195,9 @@ prepare_host()
test -e /proc/sys/fs/binfmt_misc/qemu-aarch64 || update-binfmts --enable qemu-aarch64
fi
+# build aarch64
+ fi
+
[[ ! -f "${USERPATCHES_PATH}"/customize-image.sh ]] && cp "${SRC}"/config/templates/customize-image.sh.template "${USERPATCHES_PATH}"/customize-image.sh
if [[ ! -f "${USERPATCHES_PATH}"/README ]]; then
diff --git a/lib/image-helpers.sh b/lib/image-helpers.sh
index 595cabff6..c2b5d64aa 100644
--- a/lib/image-helpers.sh
+++ b/lib/image-helpers.sh
@@ -19,7 +19,6 @@
# customize_image
# install_deb_chroot
-
# mount_chroot
#
# helper to reduce code duplication
@@ -116,7 +115,7 @@ customize_image()
# util-linux >= 2.27 required
mount -o bind,ro "$USERPATCHES_PATH"/overlay "${SDCARD}"/tmp/overlay
display_alert "Calling image customization script" "customize-image.sh" "info"
- chroot "${SDCARD}" /bin/bash -c "/tmp/customize-image.sh $RELEASE $LINUXFAMILY $BOARD $BUILD_DESKTOP"
+ chroot "${SDCARD}" /bin/bash -c "/tmp/customize-image.sh $RELEASE $LINUXFAMILY $BOARD $BUILD_DESKTOP $ARCH"
CUSTOMIZE_IMAGE_RC=$?
umount -i "${SDCARD}"/tmp/overlay >/dev/null 2>&1
mountpoint -q "${SDCARD}"/tmp/overlay || rm -r "${SDCARD}"/tmp/overlay
diff --git a/lib/main.sh b/lib/main.sh
index c6100b292..72bb74960 100644
--- a/lib/main.sh
+++ b/lib/main.sh
@@ -12,6 +12,14 @@
# Main program
#
+cleanup_list() {
+ local varname="${1}"
+ local list_to_clean="${!varname}"
+ list_to_clean="${list_to_clean#"${list_to_clean%%[![:space:]]*}"}"
+ list_to_clean="${list_to_clean%"${list_to_clean##*[![:space:]]}"}"
+ echo ${list_to_clean}
+}
+
if [[ $(basename "$0") == main.sh ]]; then
echo "Please use compile.sh to start the build process"
@@ -159,8 +167,6 @@ if [[ -z $KERNEL_CONFIGURE ]]; then
fi
-[[ ${KERNEL_CONFIGURE} == prebuilt ]] && REPOSITORY_INSTALL="u-boot,kernel,bsp,armbian-zsh,armbian-config,armbian-firmware"
-
if [[ -z $BOARD ]]; then
WIP_STATE=supported
@@ -281,50 +287,28 @@ else
fi
-# define distribution support status
-declare -A distro_name distro_support
-distro_name['stretch']="Debian 9 Stretch"
-distro_support['stretch']="eos"
-distro_name['buster']="Debian 10 Buster"
-distro_support['buster']="supported"
-distro_name['bullseye']="Debian 11 Bullseye"
-distro_support['bullseye']="csc"
-distro_name['xenial']="Ubuntu Xenial 16.04 LTS"
-distro_support['xenial']="eos"
-distro_name['bionic']="Ubuntu Bionic 18.04 LTS"
-distro_support['bionic']="supported"
-distro_name['focal']="Ubuntu Focal 20.04 LTS"
-distro_support['focal']="supported"
-distro_name['groovy']="Ubuntu Groovy 20.10"
-distro_support['groovy']="csc"
-
if [[ $KERNEL_ONLY != yes && -z $RELEASE ]]; then
options=()
- distro_menu "focal"
- distro_menu "buster"
- distro_menu "bionic"
- distro_menu "bullseye"
- distro_menu "groovy"
- distro_menu "stretch"
- distro_menu "xenial"
+ distros_options
- RELEASE=$(dialog --stdout --title "Choose a release package base" --backtitle "$backtitle" \
- --menu "Select the target OS release package base" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}")
- [[ -z $RELEASE ]] && exit_with_error "No release selected"
+ RELEASE=$(dialog --stdout --title "Choose a release package base" --backtitle "$backtitle" \
+ --menu "Select the target OS release package base" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}")
+ echo "options : ${options}"
+ [[ -z $RELEASE ]] && exit_with_error "No release selected"
+ unset options
fi
-# read distribution support status which is written to the armbian-release file
-distro_menu "$RELEASE"
-unset options
-
# don't show desktop option if we choose minimal build
[[ $BUILD_MINIMAL == yes ]] && BUILD_DESKTOP=no
if [[ $KERNEL_ONLY != yes && -z $BUILD_DESKTOP ]]; then
+ # read distribution support status which is written to the armbian-release file
+ set_distribution_status
+
options=()
options+=("no" "Image with console interface (server)")
options+=("yes" "Image with desktop environment")
@@ -332,7 +316,10 @@ if [[ $KERNEL_ONLY != yes && -z $BUILD_DESKTOP ]]; then
--menu "Select the target image type" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}")
unset options
[[ -z $BUILD_DESKTOP ]] && exit_with_error "No option selected"
- [[ $BUILD_DESKTOP == yes ]] && BUILD_MINIMAL=no
+ if [[ ${BUILD_DESKTOP} == "yes" ]]; then
+ BUILD_MINIMAL=no
+ SELECTED_CONFIGURATION="desktop"
+ fi
fi
@@ -345,13 +332,31 @@ if [[ $KERNEL_ONLY != yes && $BUILD_DESKTOP == no && -z $BUILD_MINIMAL ]]; then
--menu "Select the target image type" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}")
unset options
[[ -z $BUILD_MINIMAL ]] && exit_with_error "No option selected"
+ if [[ $BUILD_MINIMAL == "yes" ]]; then
+ SELECTED_CONFIGURATION="cli_minimal"
+ else
+ SELECTED_CONFIGURATION="cli_standard"
+ fi
fi
#prevent conflicting setup
-[[ $BUILD_DESKTOP == yes ]] && BUILD_MINIMAL=no
+if [[ $BUILD_DESKTOP == "yes" ]]; then
+ BUILD_MINIMAL=no
+ SELECTED_CONFIGURATION="desktop"
+elif [[ $BUILD_MINIMAL != "yes" || -z "${BUILD_MINIMAL}" ]]; then
+ BUILD_MINIMAL=no # Just in case BUILD_MINIMAL is not defined
+ BUILD_DESKTOP=no
+ SELECTED_CONFIGURATION="cli_standard"
+elif [[ $BUILD_MINIMAL == "yes" ]]; then
+ BUILD_DESKTOP=no
+ SELECTED_CONFIGURATION="cli_minimal"
+fi
+
[[ $BUILD_MINIMAL == yes ]] && EXTERNAL=no
+[[ ${KERNEL_CONFIGURE} == prebuilt ]] && [[ -z ${REPOSITORY_INSTALL} ]] && REPOSITORY_INSTALL="u-boot,kernel,bsp,armbian-zsh,armbian-config,armbian-firmware${BUILD_DESKTOP:+,armbian-desktop}"
+
#shellcheck source=configuration.sh
source "${SRC}"/lib/configuration.sh
@@ -390,7 +395,7 @@ DEB_BRANCH=${DEB_BRANCH:+${DEB_BRANCH}-}
CHOSEN_UBOOT=linux-u-boot-${DEB_BRANCH}${BOARD}
CHOSEN_KERNEL=linux-image-${DEB_BRANCH}${LINUXFAMILY}
CHOSEN_ROOTFS=linux-${RELEASE}-root-${DEB_BRANCH}${BOARD}
-CHOSEN_DESKTOP=armbian-${RELEASE}-desktop
+CHOSEN_DESKTOP=armbian-${RELEASE}-desktop-${DESKTOP_ENVIRONMENT}
CHOSEN_KSRC=linux-source-${BRANCH}-${LINUXFAMILY}
do_default() {
@@ -486,7 +491,7 @@ overlayfs_wrapper "cleanup"
[[ -n $RELEASE && ! -f ${DEB_STORAGE}/$RELEASE/${CHOSEN_ROOTFS}_${REVISION}_${ARCH}.deb ]] && create_board_package
# create desktop package
-[[ -n $RELEASE && ! -f ${DEB_STORAGE}/$RELEASE/${CHOSEN_DESKTOP}_${REVISION}_all.deb ]] && create_desktop_package
+[[ -n $RELEASE && $DESKTOP_ENVIRONMENT && ! -f ${DEB_STORAGE}/$RELEASE/${CHOSEN_DESKTOP}_${REVISION}_all.deb ]] && create_desktop_package
# build additional packages
[[ $EXTERNAL_NEW == compile ]] && chroot_build_packages
@@ -515,6 +520,10 @@ $([[ -n $BUILD_MINIMAL ]] && echo "BUILD_MINIMAL=${BUILD_MINIMAL} ")\
$([[ -n $BUILD_DESKTOP ]] && echo "BUILD_DESKTOP=${BUILD_DESKTOP} ")\
$([[ -n $KERNEL_ONLY ]] && echo "KERNEL_ONLY=${KERNEL_ONLY} ")\
$([[ -n $KERNEL_CONFIGURE ]] && echo "KERNEL_CONFIGURE=${KERNEL_CONFIGURE} ")\
+$([[ -n $DESKTOP_ENVIRONMENT ]] && echo "DESKTOP_ENVIRONMENT=${DESKTOP_ENVIRONMENT} ")\
+$([[ -n $DESKTOP_ENVIRONMENT_CONFIG_NAME ]] && echo "DESKTOP_ENVIRONMENT_CONFIG_NAME=${DESKTOP_ENVIRONMENT_CONFIG_NAME} ")\
+$([[ -n $DESKTOP_APPGROUPS_SELECTED ]] && echo "DESKTOP_APPGROUPS_SELECTED=\"${DESKTOP_APPGROUPS_SELECTED}\" ")\
+$([[ -n $DESKTOP_APT_FLAGS_SELECTED ]] && echo "DESKTOP_APT_FLAGS_SELECTED=\"${DESKTOP_APT_FLAGS_SELECTED}\" ")\
$([[ -n $COMPRESS_OUTPUTIMAGE ]] && echo "COMPRESS_OUTPUTIMAGE=${COMPRESS_OUTPUTIMAGE} ")\
" "ext"
diff --git a/lib/makeboarddeb.sh b/lib/makeboarddeb.sh
index cfa1abbfb..095ec55b8 100644
--- a/lib/makeboarddeb.sh
+++ b/lib/makeboarddeb.sh
@@ -286,6 +286,12 @@ fi
KERNEL_IMAGE_TYPE=$KERNEL_IMAGE_TYPE
EOF
+ if [[ $BUILD_DESKTOP == yes ]]; then
+ cat <<-EOF >> "${destination}"/etc/armbian-release
+ DESKTOP=$DESKTOP_ENVIRONMENT
+ EOF
+ fi
+
# this is required for NFS boot to prevent deconfiguring the network on shutdown
sed -i 's/#no-auto-down/no-auto-down/g' "${destination}"/etc/network/interfaces.default
diff --git a/packages/blobs/asound.state/asound.state.rk3399 b/packages/blobs/asound.state/asound.state.rk3399
new file mode 100644
index 000000000..202b7dfde
--- /dev/null
+++ b/packages/blobs/asound.state/asound.state.rk3399
@@ -0,0 +1,440 @@
+state.rockchipes8316c {
+ control.1 {
+ iface CARD
+ name 'Headphones Jack'
+ value false
+ comment {
+ access read
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.2 {
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 0
+ value.1 0
+ comment {
+ access 'read write'
+ type INTEGER
+ count 2
+ range '0 - 3'
+ dbmin -4800
+ dbmax 0
+ dbvalue.0 -4800
+ dbvalue.1 -4800
+ }
+ }
+ control.3 {
+ iface MIXER
+ name 'Headphone Mixer Volume'
+ value.0 11
+ value.1 11
+ comment {
+ access 'read write'
+ type INTEGER
+ count 2
+ range '0 - 11'
+ dbmin -1200
+ dbmax 0
+ dbvalue.0 0
+ dbvalue.1 0
+ }
+ }
+ control.4 {
+ iface MIXER
+ name 'Playback Polarity'
+ value Normal
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 Normal
+ item.1 'R Invert'
+ item.2 'L Invert'
+ item.3 'L + R Invert'
+ }
+ }
+ control.5 {
+ iface MIXER
+ name 'DAC Playback Volume'
+ value.0 192
+ value.1 192
+ comment {
+ access 'read write'
+ type INTEGER
+ count 2
+ range '0 - 192'
+ dbmin -9999999
+ dbmax 0
+ dbvalue.0 0
+ dbvalue.1 0
+ }
+ }
+ control.6 {
+ iface MIXER
+ name 'DAC Soft Ramp Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.7 {
+ iface MIXER
+ name 'DAC Soft Ramp Rate'
+ value 4
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 4'
+ }
+ }
+ control.8 {
+ iface MIXER
+ name 'DAC Notch Filter Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.9 {
+ iface MIXER
+ name 'DAC Double Fs Switch'
+ value true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.10 {
+ iface MIXER
+ name 'DAC Stereo Enhancement'
+ value 7
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 7'
+ }
+ }
+ control.11 {
+ iface MIXER
+ name 'DAC Mono Mix Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.12 {
+ iface MIXER
+ name 'Capture Polarity'
+ value Normal
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 Normal
+ item.1 Invert
+ }
+ }
+ control.13 {
+ iface MIXER
+ name 'Mic Boost Switch'
+ value true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.14 {
+ iface MIXER
+ name 'ADC Capture Volume'
+ value 0
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 192'
+ dbmin -9999999
+ dbmax 0
+ dbvalue.0 -9999999
+ }
+ }
+ control.15 {
+ iface MIXER
+ name 'ADC PGA Gain Volume'
+ value 0
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 10'
+ }
+ }
+ control.16 {
+ iface MIXER
+ name 'ADC Soft Ramp Switch'
+ value true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.17 {
+ iface MIXER
+ name 'ADC Double Fs Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.18 {
+ iface MIXER
+ name 'ALC Capture Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.19 {
+ iface MIXER
+ name 'ALC Capture Max Volume'
+ value 28
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 28'
+ dbmin -650
+ dbmax 3550
+ dbvalue.0 3550
+ }
+ }
+ control.20 {
+ iface MIXER
+ name 'ALC Capture Min Volume'
+ value 0
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 28'
+ dbmin -1200
+ dbmax 3000
+ dbvalue.0 -1200
+ }
+ }
+ control.21 {
+ iface MIXER
+ name 'ALC Capture Target Volume'
+ value 11
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 10'
+ dbmin -1650
+ dbmax -150
+ dbvalue.0 0
+ }
+ }
+ control.22 {
+ iface MIXER
+ name 'ALC Capture Hold Time'
+ value 0
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 10'
+ }
+ }
+ control.23 {
+ iface MIXER
+ name 'ALC Capture Decay Time'
+ value 3
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 10'
+ }
+ }
+ control.24 {
+ iface MIXER
+ name 'ALC Capture Attack Time'
+ value 2
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 10'
+ }
+ }
+ control.25 {
+ iface MIXER
+ name 'ALC Capture Noise Gate Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.26 {
+ iface MIXER
+ name 'ALC Capture Noise Gate Threshold'
+ value 0
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 31'
+ }
+ }
+ control.27 {
+ iface MIXER
+ name 'ALC Capture Noise Gate Type'
+ value 'Constant PGA Gain'
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 'Constant PGA Gain'
+ item.1 'Mute ADC Output'
+ }
+ }
+ control.28 {
+ iface MIXER
+ name 'Speaker Switch'
+ value true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.29 {
+ iface MIXER
+ name 'Differential Mux'
+ value lin1-rin1
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 lin1-rin1
+ item.1 lin2-rin2
+ item.2 'lin1-rin1 with 20db Boost'
+ item.3 'lin2-rin2 with 20db Boost'
+ }
+ }
+ control.30 {
+ iface MIXER
+ name 'Digital Mic Mux'
+ value 'dmic disable'
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 'dmic disable'
+ item.1 'dmic data at high level'
+ item.2 'dmic data at low level'
+ }
+ }
+ control.31 {
+ iface MIXER
+ name 'DAC Source Mux'
+ value 'LDATA TO LDAC, RDATA TO RDAC'
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 'LDATA TO LDAC, RDATA TO RDAC'
+ item.1 'LDATA TO LDAC, LDATA TO RDAC'
+ item.2 'RDATA TO LDAC, RDATA TO RDAC'
+ item.3 'RDATA TO LDAC, LDATA TO RDAC'
+ }
+ }
+ control.32 {
+ iface MIXER
+ name 'Left Headphone Mux'
+ value lin2-rin2
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 lin1-rin1
+ item.1 lin2-rin2
+ item.2 'lin-rin with Boost'
+ item.3 'lin-rin with Boost and PGA'
+ }
+ }
+ control.33 {
+ iface MIXER
+ name 'Right Headphone Mux'
+ value lin1-rin1
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 lin1-rin1
+ item.1 lin2-rin2
+ item.2 'lin-rin with Boost'
+ item.3 'lin-rin with Boost and PGA'
+ }
+ }
+ control.34 {
+ iface MIXER
+ name 'Left Headphone Mixer LLIN Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.35 {
+ iface MIXER
+ name 'Left Headphone Mixer Left DAC Switch'
+ value true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.36 {
+ iface MIXER
+ name 'Right Headphone Mixer RLIN Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.37 {
+ iface MIXER
+ name 'Right Headphone Mixer Right DAC Switch'
+ value true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/blobs/desktop/firefox.conf b/packages/blobs/desktop/firefox.conf
index 0db946c4d..eadf690fb 100644
--- a/packages/blobs/desktop/firefox.conf
+++ b/packages/blobs/desktop/firefox.conf
@@ -12,4 +12,4 @@ pref("toolkit.telemetry.rejected", true);
pref("reader.parse-on-load.enabled", false);
pref("browser.cache.disk.enable", false);
pref("browser.cache.memory.enable", true);
-pref("browser.cache.memory.capacity", "-1");
\ No newline at end of file
+// pref("browser.cache.memory.capacity", "-1");
diff --git a/packages/blobs/desktop/lightdm/lightdm-gtk-greeter.conf b/packages/blobs/desktop/lightdm/lightdm-gtk-greeter.conf
index 2b8aabc7f..114190261 100644
--- a/packages/blobs/desktop/lightdm/lightdm-gtk-greeter.conf
+++ b/packages/blobs/desktop/lightdm/lightdm-gtk-greeter.conf
@@ -1,10 +1,12 @@
[greeter]
-background = #888a85
+background = /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-blurred-3840x2160.jpg
theme-name = Numix
icon-theme-name = Numix
-default-user-image=/usr/share/pixmaps/armbian.png
-indicators = ~session;~language;~power;~a11y
-screensaver-timeout = 0
font-name = Sans 11
+indicators = ~session;~host;~spacer;~a11y;~language;~clock;~power
+default-user-image = /usr/share/pixmaps/armbian/armbian.png
+screensaver-timeout = 20
user-background = false
keyboard = onboard --theme=ModelM
+reader = orca
+position = -97%,start -50%,center
diff --git a/packages/blobs/desktop/lightdm/lightdm.conf.d/11-armbian.conf b/packages/blobs/desktop/lightdm/lightdm.conf.d/11-armbian.conf
index 9b14b9557..3c1eabbc1 100644
--- a/packages/blobs/desktop/lightdm/lightdm.conf.d/11-armbian.conf
+++ b/packages/blobs/desktop/lightdm/lightdm.conf.d/11-armbian.conf
@@ -1,5 +1,5 @@
-[SeatDefaults]
-user-session=ubuntu
+[Seat:*]
+user-session=xfce
greeter-show-manual-login=false
greeter-hide-users=false
allow-guest=false
diff --git a/packages/blobs/desktop/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml b/packages/blobs/desktop/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
index b704f5fd7..fa0777e8a 100644
--- a/packages/blobs/desktop/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
+++ b/packages/blobs/desktop/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
@@ -7,52 +7,52 @@
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
diff --git a/packages/blobs/desktop/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml b/packages/blobs/desktop/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
index e5e76c17e..897bf2db7 100644
--- a/packages/blobs/desktop/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
+++ b/packages/blobs/desktop/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
@@ -23,7 +23,7 @@
-
+
diff --git a/packages/blobs/desktop/wallpapers/Armbian-clear-rounded-bakcground-3840-2160.jpg b/packages/blobs/desktop/wallpapers/Armbian-clear-rounded-bakcground-3840-2160.jpg
new file mode 100644
index 000000000..3cacd7b25
Binary files /dev/null and b/packages/blobs/desktop/wallpapers/Armbian-clear-rounded-bakcground-3840-2160.jpg differ
diff --git a/packages/blobs/desktop/wallpapers/Armbian-clear-rounded-bakcground-blur-3840-2160.jpg b/packages/blobs/desktop/wallpapers/Armbian-clear-rounded-bakcground-blur-3840-2160.jpg
new file mode 100644
index 000000000..c3ef01139
Binary files /dev/null and b/packages/blobs/desktop/wallpapers/Armbian-clear-rounded-bakcground-blur-3840-2160.jpg differ
diff --git a/packages/blobs/desktop/wallpapers/armbian-full-undeer-construction-3840-2160.jpg b/packages/blobs/desktop/wallpapers/armbian-full-undeer-construction-3840-2160.jpg
new file mode 100644
index 000000000..a29a456b7
Binary files /dev/null and b/packages/blobs/desktop/wallpapers/armbian-full-undeer-construction-3840-2160.jpg differ
diff --git a/packages/blobs/desktop/wallpapers/armbian-full-undeer-construction-blur-3840-2160.jpg b/packages/blobs/desktop/wallpapers/armbian-full-undeer-construction-blur-3840-2160.jpg
new file mode 100644
index 000000000..a683803c8
Binary files /dev/null and b/packages/blobs/desktop/wallpapers/armbian-full-undeer-construction-blur-3840-2160.jpg differ
diff --git a/packages/blobs/desktop/wallpapers/armbian03-Dre0x-Minum-dark-blurred-3840x2160.jpg b/packages/blobs/desktop/wallpapers/armbian03-Dre0x-Minum-dark-blurred-3840x2160.jpg
new file mode 100644
index 000000000..886700d3a
Binary files /dev/null and b/packages/blobs/desktop/wallpapers/armbian03-Dre0x-Minum-dark-blurred-3840x2160.jpg differ
diff --git a/packages/blobs/desktop/wallpapers/armbian18-Dre0x-Minum-light-blurred-3840x2160.jpg b/packages/blobs/desktop/wallpapers/armbian18-Dre0x-Minum-light-blurred-3840x2160.jpg
new file mode 100644
index 000000000..a498136f3
Binary files /dev/null and b/packages/blobs/desktop/wallpapers/armbian18-Dre0x-Minum-light-blurred-3840x2160.jpg differ
diff --git a/packages/bsp/common/usr/lib/armbian/armbian-firstlogin b/packages/bsp/common/usr/lib/armbian/armbian-firstlogin
index dd2b7114d..9fcda3dd2 100755
--- a/packages/bsp/common/usr/lib/armbian/armbian-firstlogin
+++ b/packages/bsp/common/usr/lib/armbian/armbian-firstlogin
@@ -8,8 +8,10 @@
. /etc/armbian-release
+
check_abort()
{
+
echo -e "\nDisabling user account creation procedure\n"
rm -f /root/.not_logged_in_yet
if [[ ${USER_SHELL} == zsh ]]; then
@@ -17,24 +19,28 @@ check_abort()
fi
trap - INT
exit 0
+
}
-function read_password()
+read_password()
{
-unset password
-prompt="$1 password: "
-while IFS= read -p "$prompt" -r -s -n 1 char
-do
- if [[ $char == $'\0' ]]
- then
- break
- fi
- prompt='*'
- password+="$char"
-done
+
+ unset password
+ prompt="$1 password: "
+ while IFS= read -p "$prompt" -r -s -n 1 char
+ do
+ if [[ $char == $'\0' ]]
+ then
+ break
+ fi
+ prompt='*'
+ password+="$char"
+ done
+
}
+
set_shell()
{
@@ -90,9 +96,11 @@ set_timezone_and_locales()
STATE=$(echo ${RES} | cut -d"," -f2)
CCODE=$(echo ${RES} | cut -d"," -f3 | xargs)
KEYBOARD="${CCODE,,}"
- LOCALES=$(grep territory /usr/share/i18n/locales/* | grep "$CCODE" | cut -d ":" -f 1 | cut -d "/" -f 6 | xargs -I{} grep {} /usr/share/i18n/SUPPORTED | grep "\.UTF-8" | cut -d " " -f 1)
+ LOCALES=$(grep territory /usr/share/i18n/locales/* | grep "$CCODE" | cut -d ":" -f 1 | cut -d "/" -f 6 | \
+ xargs -I{} grep {} /usr/share/i18n/SUPPORTED | grep "\.UTF-8" | cut -d " " -f 1)
# UTF8 is not present everywhere so check again in case it returns empty value
- [[ -z "$LOCALES" ]] && LOCALES=$(grep territory /usr/share/i18n/locales/* | grep "$CCODE" | cut -d ":" -f 1 | cut -d "/" -f 6 | xargs -I{} grep {} /usr/share/i18n/SUPPORTED | cut -d " " -f 1)
+ [[ -z "$LOCALES" ]] && LOCALES=$(grep territory /usr/share/i18n/locales/* | grep "$CCODE" | cut -d ":" -f 1 | cut -d "/" -f 6 | \
+ xargs -I{} grep {} /usr/share/i18n/SUPPORTED | cut -d " " -f 1)
echo -e "Detected timezone: \x1B[92m$TZDATA\x1B[0m"
echo ""
read -n1 -s -r -p "Set user language based on your location? [Y/n] " response
@@ -154,6 +162,7 @@ set_timezone_and_locales()
+
add_profile_sync_settings()
{
/usr/bin/psd >/dev/null 2>&1
@@ -178,6 +187,7 @@ add_profile_sync_settings()
+
add_user()
{
read -t 0 temp
@@ -197,12 +207,13 @@ add_user()
read_password "Repeat"
second_input=$password
echo ""
- if [[ $first_input == $second_input ]]; then
- result="$(cracklib-check <<<"$password")"
- okay="$(awk -F': ' '{ print $2}' <<<"$result")"
- if [[ "$okay" == "OK" ]]; then
+ if [[ $first_input == $second_input ]]; then
+ result="$(cracklib-check <<<"$password")"
+ okay="$(awk -F': ' '{ print $2}' <<<"$result")"
+ if [[ "$okay" == "OK" ]]; then
echo -e ""
read -e -p "Please provide your real name: " -i "${RealUserName^}" RealName
+
adduser --quiet --disabled-password --home /home/"$RealUserName" --gecos "$RealName" "$RealUserName"
(echo $first_input;echo $second_input;) | passwd "$RealUserName" >/dev/null 2>&1
for additionalgroup in sudo netdev audio video disk tty users games dialout plugdev input bluetooth systemd-journal ssh; do
@@ -225,14 +236,14 @@ add_user()
touch /home/${RealUserName}/.activate_psd
chown $RealUserName:$RealUserName /home/${RealUserName}/.activate_psd
fi
- break
+ break
else
- echo -e "Rejected - \e[0;31m$okay.\x1B[0m Try again."
- fi
- elif [[ -n $password ]]; then
- echo -e "Rejected - \e[0;31mpasswords do not match.\x1B[0m Try again."
- fi
- done
+ echo -e "Rejected - \e[0;31m$okay.\x1B[0m Try again."
+ fi
+ elif [[ -n $password ]]; then
+ echo -e "Rejected - \e[0;31mpasswords do not match.\x1B[0m Try again."
+ fi
+ done
}
@@ -242,8 +253,9 @@ if [[ -f /root/.not_logged_in_yet && -n $(tty) ]]; then
rm -f /etc/systemd/system/serial-getty@.service.d/override.conf
systemctl daemon-reload
- # detect lightdm
+ # detect display manager
desktop_lightdm=$(dpkg-query -W -f='${db:Status-Abbrev}\n' lightdm 2>/dev/null)
+ desktop_gdm3=$(dpkg-query -W -f='${db:Status-Abbrev}\n' gdm3 2>/dev/null)
if [ "$IMAGE_TYPE" != "nightly" ]; then
if [ "$BRANCH" == "dev" ]; then
@@ -328,30 +340,87 @@ if [[ -f /root/.not_logged_in_yet && -n $(tty) ]]; then
user-session=xfce
EOF
+ # select gnome session (has to be first or it breaks budgie/cinnamon desktop autologin and user-session)
+ [[ -x $(which gnome-session) ]] && sed -i "s/user-session.*/user-session=ubuntu/" /etc/lightdm/lightdm.conf.d/11-armbian.conf
+ [[ -x $(which gnome-session) ]] && sed -i "s/user-session.*/user-session=ubuntu/" /etc/lightdm/lightdm.conf.d/22-armbian-autologin.conf
+
+ # select budgie session
+ [[ -x $(which budgie-desktop) ]] && sed -i "s/user-session.*/user-session=budgie-desktop/" /etc/lightdm/lightdm.conf.d/11-armbian.conf
+ [[ -x $(which budgie-desktop) ]] && sed -i "s/user-session.*/user-session=budgie-desktop/" /etc/lightdm/lightdm.conf.d/22-armbian-autologin.conf
+
+ # select deepin session
+ [[ -x $(which deepin-wm) ]] && sed -i "s/user-session.*/user-session=deepin/" /etc/lightdm/lightdm.conf.d/11-armbian.conf
+ [[ -x $(which deepin-wm) ]] && sed -i "s/user-session.*/user-session=deepin/" /etc/lightdm/lightdm.conf.d/22-armbian-autologin.conf
+
+ # select cinnamon session
+ [[ -x $(which cinnamon) ]] && sed -i "s/user-session.*/user-session=cinnamon/" /etc/lightdm/lightdm.conf.d/11-armbian.conf
+ [[ -x $(which cinnamon) ]] && sed -i "s/user-session.*/user-session=cinnamon/" /etc/lightdm/lightdm.conf.d/22-armbian-autologin.conf
+
+ # select mate session
+ [[ -x $(which mate-wm) ]] && sed -i "s/user-session.*/user-session=mate/" /etc/lightdm/lightdm.conf.d/11-armbian.conf
+ [[ -x $(which mate-wm) ]] && sed -i "s/user-session.*/user-session=mate/" /etc/lightdm/lightdm.conf.d/22-armbian-autologin.conf
+
ln -sf /lib/systemd/system/lightdm.service /etc/systemd/system/display-manager.service
- if [[ -f /var/run/resize2fs-reboot ]]; then
- # Let the user reboot now otherwise start desktop environment
- printf "\n\n\e[0;91mWarning: a reboot is needed to finish resizing the filesystem \x1B[0m \n"
- printf "\e[0;91mPlease reboot the system now \x1B[0m \n\n"
- elif [ -z "$ConfigureDisplay" ] || [ "$ConfigureDisplay" = "n" ] || [ "$ConfigureDisplay" = "N" ]; then
- echo -e "\n\e[1m\e[39mNow starting desktop environment...\x1B[0m\n"
- sleep 1
- service lightdm start 2>/dev/null
- if [ -f /root/.desktop_autologin ]; then
- rm /root/.desktop_autologin
- else
- systemctl -q enable armbian-disable-autologin.timer
- systemctl start armbian-disable-autologin.timer
+
+ if [[ -f /var/run/resize2fs-reboot ]]; then
+ # Let the user reboot now otherwise start desktop environment
+ printf "\n\n\e[0;91mWarning: a reboot is needed to finish resizing the filesystem \x1B[0m \n"
+ printf "\e[0;91mPlease reboot the system now \x1B[0m \n\n"
+ elif [ -z "$ConfigureDisplay" ] || [ "$ConfigureDisplay" = "n" ] || [ "$ConfigureDisplay" = "N" ]; then
+ echo -e "\n\e[1m\e[39mNow starting desktop environment...\x1B[0m\n"
+ sleep 1
+ service lightdm start 2>/dev/null
+ if [ -f /root/.desktop_autologin ]; then
+ rm /root/.desktop_autologin
+ else
+ systemctl -q enable armbian-disable-autologin.timer
+ systemctl start armbian-disable-autologin.timer
+ fi
+ # logout if logged at console
+ [[ -n $(who -la | grep root | grep tty1) ]] && exit 1
fi
- # logout if logged at console
- [[ -n $(who -la | grep root | grep tty1) ]] && exit 1
- fi
+
+ elif [ -n "$desktop_gdm3" ] && [ -n "$RealName" ] ; then
+
+ # 1st run goes without login
+ mkdir -p /etc/gdm3
+ cat <<-EOF > /etc/gdm3/custom.conf
+ [daemon]
+ AutomaticLoginEnable = true
+ AutomaticLogin = $RealUserName
+ EOF
+
+ ln -sf /lib/systemd/system/gdm3.service /etc/systemd/system/display-manager.service
+
+ if [[ -f /var/run/resize2fs-reboot ]]; then
+
+ # Let the user reboot now otherwise start desktop environment
+ printf "\n\n\e[0;91mWarning: a reboot is needed to finish resizing the filesystem \x1B[0m \n"
+ printf "\e[0;91mPlease reboot the system now \x1B[0m \n\n"
+
+ elif [ -z "$ConfigureDisplay" ] || [ "$ConfigureDisplay" = "n" ] || [ "$ConfigureDisplay" = "N" ]; then
+
+ echo -e "\n\e[1m\e[39mNow starting desktop environment...\x1B[0m\n"
+ sleep 1
+ service gdm3 start 2>/dev/null
+ if [ -f /root/.desktop_autologin ]; then
+ rm /root/.desktop_autologin
+ else
+ (sleep 20; sed -i "s/AutomaticLoginEnable.*/AutomaticLoginEnable = false/" /etc/gdm3/custom.conf) &
+ fi
+ # logout if logged at console
+ [[ -n $(who -la | grep root | grep tty1) ]] && exit 1
+
+ fi
+
else
+
# Display reboot recommendation if necessary
if [[ -f /var/run/resize2fs-reboot ]]; then
printf "\n\n\e[0;91mWarning: a reboot is needed to finish resizing the filesystem \x1B[0m \n"
printf "\e[0;91mPlease reboot the system now \x1B[0m \n\n"
fi
+
fi
fi
diff --git a/packages/bsp/rk3399/xorg.conf b/packages/bsp/rk3399/xorg.conf
new file mode 100644
index 000000000..8dc42e545
--- /dev/null
+++ b/packages/bsp/rk3399/xorg.conf
@@ -0,0 +1,24 @@
+Section "Device"
+ Identifier "Rockchip Graphics"
+
+ ## Use armsoc driver
+ # Driver "armsoc"
+ ## End armsoc configuration
+
+ ## Use modesetting and glamor
+ Driver "modesetting"
+ Option "AccelMethod" "glamor" ### "glamor" to enable 3D acceleration, "none" to disable.
+ Option "DRI" "2"
+ Option "Dri2Vsync" "true"
+ Option "TripleBuffer" "True"
+ ## End glamor configuration
+
+ EndSection
+
+ Section "Screen"
+ Identifier "Default Screen"
+ SubSection "Display"
+ Depth 24
+ Modes "1920x1080" "1280x1024" "1024x768" "800x600"
+ EndSubSection
+ EndSection
diff --git a/patch/kernel/rockchip-current/1007-RK3288-DTSI-rk3288-Add-missing-SPI2-pinctrl.patch b/patch/kernel/rockchip-current/1004-RK3288-DTSI-rk3288-Add-missing-SPI2-pinctrl.patch
similarity index 100%
rename from patch/kernel/rockchip-current/1007-RK3288-DTSI-rk3288-Add-missing-SPI2-pinctrl.patch
rename to patch/kernel/rockchip-current/1004-RK3288-DTSI-rk3288-Add-missing-SPI2-pinctrl.patch
diff --git a/patch/kernel/rockchip-current/1010-ARM-DTSI-rk3288-Adding-missing-EDP-power-domain.patch b/patch/kernel/rockchip-current/1005-ARM-DTSI-rk3288-Adding-missing-EDP-power-domain.patch
similarity index 100%
rename from patch/kernel/rockchip-current/1010-ARM-DTSI-rk3288-Adding-missing-EDP-power-domain.patch
rename to patch/kernel/rockchip-current/1005-ARM-DTSI-rk3288-Adding-missing-EDP-power-domain.patch
diff --git a/patch/kernel/rockchip-current/1012-ARM-DTSI-rk3288-Fixed-the-SPDIF-node-address.patch b/patch/kernel/rockchip-current/1006-ARM-DTSI-rk3288-Fixed-the-SPDIF-node-address.patch
similarity index 100%
rename from patch/kernel/rockchip-current/1012-ARM-DTSI-rk3288-Fixed-the-SPDIF-node-address.patch
rename to patch/kernel/rockchip-current/1006-ARM-DTSI-rk3288-Fixed-the-SPDIF-node-address.patch
diff --git a/patch/kernel/rockchip-current/1013-ARM-DTS-rk3288-tinker-Enabling-SDIO-and-Wifi.patch b/patch/kernel/rockchip-current/1007-ARM-DTS-rk3288-tinker-Enabling-SDIO-and-Wifi.patch
similarity index 100%
rename from patch/kernel/rockchip-current/1013-ARM-DTS-rk3288-tinker-Enabling-SDIO-and-Wifi.patch
rename to patch/kernel/rockchip-current/1007-ARM-DTS-rk3288-tinker-Enabling-SDIO-and-Wifi.patch
diff --git a/patch/kernel/rockchip-current/1014-ARM-DTS-rk3288-tinker-Setup-the-Bluetooth-UART-pins.patch b/patch/kernel/rockchip-current/1008-ARM-DTS-rk3288-tinker-Setup-the-Bluetooth-UART-pins.patch
similarity index 100%
rename from patch/kernel/rockchip-current/1014-ARM-DTS-rk3288-tinker-Setup-the-Bluetooth-UART-pins.patch
rename to patch/kernel/rockchip-current/1008-ARM-DTS-rk3288-tinker-Setup-the-Bluetooth-UART-pins.patch
diff --git a/patch/kernel/rockchip-current/1015-ARM-DTSI-rk3288-tinker-Improving-the-CPU-max-voltage.patch b/patch/kernel/rockchip-current/1009-ARM-DTSI-rk3288-tinker-Improving-the-CPU-max-voltage.patch
similarity index 100%
rename from patch/kernel/rockchip-current/1015-ARM-DTSI-rk3288-tinker-Improving-the-CPU-max-voltage.patch
rename to patch/kernel/rockchip-current/1009-ARM-DTSI-rk3288-tinker-Improving-the-CPU-max-voltage.patch
diff --git a/patch/kernel/rockchip-current/1017-ARM-DTS-rk3288-tinker-Defined-the-I2C-interfaces.patch b/patch/kernel/rockchip-current/1010-ARM-DTS-rk3288-tinker-Defined-the-I2C-interfaces.patch
similarity index 100%
rename from patch/kernel/rockchip-current/1017-ARM-DTS-rk3288-tinker-Defined-the-I2C-interfaces.patch
rename to patch/kernel/rockchip-current/1010-ARM-DTS-rk3288-tinker-Defined-the-I2C-interfaces.patch
diff --git a/patch/kernel/rockchip-current/1018-ARM-DTS-rk3288-tinker-Defining-the-SPI-interface.patch b/patch/kernel/rockchip-current/1011-ARM-DTS-rk3288-tinker-Defining-the-SPI-interface.patch
similarity index 100%
rename from patch/kernel/rockchip-current/1018-ARM-DTS-rk3288-tinker-Defining-the-SPI-interface.patch
rename to patch/kernel/rockchip-current/1011-ARM-DTS-rk3288-tinker-Defining-the-SPI-interface.patch
diff --git a/patch/kernel/rockchip-current/1019-ARM-DTSI-rk3288-tinker-Defining-SDMMC-properties.patch b/patch/kernel/rockchip-current/1012-ARM-DTSI-rk3288-tinker-Defining-SDMMC-properties.patch
similarity index 100%
rename from patch/kernel/rockchip-current/1019-ARM-DTSI-rk3288-tinker-Defining-SDMMC-properties.patch
rename to patch/kernel/rockchip-current/1012-ARM-DTSI-rk3288-tinker-Defining-SDMMC-properties.patch
diff --git a/patch/kernel/rockchip-current/1020-ARM-DTSI-rk3288-Set-the-VPU-MMU-power-domains.patch b/patch/kernel/rockchip-current/1013-ARM-DTSI-rk3288-Set-the-VPU-MMU-power-domains.patch
similarity index 100%
rename from patch/kernel/rockchip-current/1020-ARM-DTSI-rk3288-Set-the-VPU-MMU-power-domains.patch
rename to patch/kernel/rockchip-current/1013-ARM-DTSI-rk3288-Set-the-VPU-MMU-power-domains.patch
diff --git a/patch/kernel/rockchip-current/1023-dts-rk3288-support-for-dedicating-npll-to-a-vop.patch b/patch/kernel/rockchip-current/1014-dts-rk3288-support-for-dedicating-npll-to-a-vop.patch
similarity index 100%
rename from patch/kernel/rockchip-current/1023-dts-rk3288-support-for-dedicating-npll-to-a-vop.patch
rename to patch/kernel/rockchip-current/1014-dts-rk3288-support-for-dedicating-npll-to-a-vop.patch
diff --git a/patch/kernel/rockchip-current/1024-arm-dts-veyron-Added-a-flag-to-disable-cache-flush-d.patch b/patch/kernel/rockchip-current/1015-arm-dts-veyron-Added-a-flag-to-disable-cache-flush-d.patch
similarity index 100%
rename from patch/kernel/rockchip-current/1024-arm-dts-veyron-Added-a-flag-to-disable-cache-flush-d.patch
rename to patch/kernel/rockchip-current/1015-arm-dts-veyron-Added-a-flag-to-disable-cache-flush-d.patch
diff --git a/patch/kernel/rockchip-current/1025-ARM-DTSI-rk3288-disable-serial-dmas.patch b/patch/kernel/rockchip-current/1016-ARM-DTSI-rk3288-disable-serial-dmas.patch
similarity index 100%
rename from patch/kernel/rockchip-current/1025-ARM-DTSI-rk3288-disable-serial-dmas.patch
rename to patch/kernel/rockchip-current/1016-ARM-DTSI-rk3288-disable-serial-dmas.patch