diff --git a/modules/flatpaks/files/bin/system-flatpak-setup b/modules/flatpaks/files/bin/system-flatpak-setup new file mode 100755 index 0000000..1bdddd3 --- /dev/null +++ b/modules/flatpaks/files/bin/system-flatpak-setup @@ -0,0 +1,53 @@ +#!/usr/bin/env bash + +# Script Version +VER=1 +VER_FILE="/etc/ublue-os/system-flatpak-configured" +VER_RAN=$(cat $VER_FILE) + +# Run script if updated +if [[ -f $VER_FILE && $VER = $VER_RAN ]]; then + echo "Flatpak setup v$VER has already ran. Exiting..." + exit 0 +fi + +# Opt out of and remove Fedora's flatpak repo +if grep -qz 'fedora' <<< $(flatpak remotes); then + /usr/lib/fedora-third-party/fedora-third-party-opt-out + /usr/bin/fedora-third-party disable + flatpak remote-delete fedora --force +fi + +# Set up system Flathub if not already installed +flatpak remote-add --if-not-exists --system flathub https://flathub.org/repo/flathub.flatpakrepo + +# In case fedora flatpak repo is already removed, but Flathub was left disabled by mistake +flatpak remote-modify flathub --enable --system --title="Flathub (System)" + +# Lists of flatpaks +FLATPAK_LIST=$(flatpak list --columns=application) +INSTALL_LIST=$(cat /etc/flatpak/system-install) +REMOVE_LIST=$(cat /etc/flatpak/system-remove) + +# Install flatpaks in list +if [[ -n $INSTALL_LIST ]]; then + for flatpak in $INSTALL_LIST; do + if grep -qvz $flatpak <<< $FLATPAK_LIST; then + flatpak install --system --noninteractive flathub $flatpak + fi + done +fi + +# Remove flatpaks in list +if [[ -n $REMOVE_LIST ]]; then + for flatpak in $REMOVE_LIST; do + if grep -qz $flatpak <<< $FLATPAK_LIST; then + flatpak remove --system --noninteractive $flatpak + fi + done +fi + +# Prevent future executions +echo "Writing state file" +mkdir -p /etc/ublue-os +echo $VER > $VER_FILE \ No newline at end of file diff --git a/modules/flatpaks/files/bin/user-flatpak-setup b/modules/flatpaks/files/bin/user-flatpak-setup new file mode 100755 index 0000000..e068f67 --- /dev/null +++ b/modules/flatpaks/files/bin/user-flatpak-setup @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +# Script Version +VER=1 +VER_FILE="$HOME/.config/ublue-os/user-flatpak-configured" +VER_RAN=$(cat $VER_FILE) + +# Run script if updated +if [[ -f $VER_FILE && $VER = $VER_RAN ]]; then + echo "Flatpak setup v$VER has already ran. Exiting..." + exit 0 +fi + +# Setup Flathub +if grep -qz 'fedora' <<< $(flatpak remotes); then + flatpak remote-delete --user fedora --force +fi +flatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepo + +# Lists of flatpaks +FLATPAK_LIST=$(flatpak list --columns=application) +INSTALL_LIST=$(cat /etc/flatpak/user-install) +REMOVE_LIST=$(cat /etc/flatpak/user-remove) + +# Install flatpaks in list +if [[ -n $INSTALL_LIST ]]; then + for flatpak in $INSTALL_LIST; do + if grep -qvz $flatpak <<< $FLATPAK_LIST; then + flatpak install --user --noninteractive flathub $flatpak + fi + done +fi + +# Remove flatpaks in list +if [[ -n $REMOVE_LIST ]]; then + for flatpak in $REMOVE_LIST; do + if grep -qz $flatpak <<< $FLATPAK_LIST; then + flatpak remove --user --noninteractive $flatpak + fi + done +fi + +# Prevent future executions +echo "Writing state file" +mkdir -p $HOME/.config/ublue-os/ +echo $VER > $VER_FILE \ No newline at end of file diff --git a/modules/flatpaks/files/systemd/system/system-flatpak-setup.service b/modules/flatpaks/files/systemd/system/system-flatpak-setup.service new file mode 100644 index 0000000..ae71aaa --- /dev/null +++ b/modules/flatpaks/files/systemd/system/system-flatpak-setup.service @@ -0,0 +1,13 @@ +[Unit] +Description=Manage system flatpaks +Documentation=https://github.com/ublue-os/endlish-oesque/issues/10 +Wants=network-online.target +After=network-online.target + +[Service] +Type=oneshot +ExecStart=/usr/bin/system-flatpak-setup +Restart=on-failure + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/modules/flatpaks/files/systemd/user/user-flatpak-setup.service b/modules/flatpaks/files/systemd/user/user-flatpak-setup.service new file mode 100644 index 0000000..89a3fdc --- /dev/null +++ b/modules/flatpaks/files/systemd/user/user-flatpak-setup.service @@ -0,0 +1,10 @@ +[Unit] +Description=Configure Flatpaks for current user +Requires=xdg-desktop-autostart.target + +[Service] +Type=simple +ExecStart=/usr/bin/user-flatpak-setup + +[Install] +WantedBy=default.target \ No newline at end of file diff --git a/modules/flatpaks/flatpaks.sh b/modules/flatpaks/flatpaks.sh index 8b8d147..6dd33b1 100644 --- a/modules/flatpaks/flatpaks.sh +++ b/modules/flatpaks/flatpaks.sh @@ -3,6 +3,11 @@ # Tell build process to exit if there are any errors. set -oue pipefail +export FLATPAKS_MODULE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" + +cp -r "$FLATPAKS_MODULE_DIR"/files/bin/* /usr/bin/ +cp -r "$FLATPAKS_MODULE_DIR"/files/systemd/* /usr/lib/systemd/ + SYS_INSTALL_LIST=/usr/etc/flatpak/system-install SYS_REMOVE_LIST=/usr/etc/flatpak/system-remove USER_INSTALL_LIST=/usr/etc/flatpak/user-install