Compare commits

...

3 Commits

Author SHA1 Message Date
Amir Alexander Abdelbaki 7627dd67ff feat(setup): seed /etc/skel from installed user's ~/.config after all modules run
Problem: every module installs its config into the running user's ~/.config, but
/etc/skel was never updated afterwards. Any additional user created with
`useradd -m` later would get an empty home directory with no configs at all —
they would have to manually copy or re-run setup.

Solution: at the end of both TUI installer scripts (after every module and the
colorway step have finished), copy the fully-configured user's home into
/etc/skel so that it becomes the template for all future users.

How it works — tui-install.sh + simple-install.sh (identical block in both):

  The block runs AFTER the last run_module call and AFTER apply-theme.sh, so
  the snapshot is taken when the home directory is in its final state. It copies:

    ~/.config/  → /etc/skel/.config/    (all app configs, DE configs, etc.)
    ~/.themes/  → /etc/skel/.themes/    (GTK themes, including cyberqueer)
    ~/.zshrc    → /etc/skel/.zshrc
    ~/.bashrc   → /etc/skel/.bashrc
    ~/.vimrc    → /etc/skel/.vimrc

  Each copy is guarded ([[ -d ]] / [[ -f ]]) so missing files are silently
  skipped rather than erroring. sudo is used because /etc/skel is root-owned
  but the installer runs as the normal user.

arch-autoinstall.sh + archbaseos-guided-install.sh (chroot-phase changes):

  The previous version tried to cherry-pick specific subdirectories from the
  Dotfiles repo clone (hypr/, niri/, waybar/, etc.) using a long list of cp
  commands. This was brittle — any new module that installs to ~/.config was
  not automatically captured, and the list had to be manually maintained.

  Replaced with a minimal block that only copies the three shell dotfiles
  (.zshrc, .bashrc, .vimrc) from the repo clone into /etc/skel. This is
  sufficient for the first user created during installation (useradd -m runs
  immediately after, before any modules). The full ~/.config sync above then
  takes over for all subsequent users after the modules have run.

  arch-autoinstall.sh additionally had the skel setup moved to before the
  useradd -m call (was missing entirely before) so even the first user gets
  the shell dotfiles, with a fallback direct-clone path if the skel clone fails.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 10:19:06 +02:00
Amir Alexander Abdelbaki dd1cd2b8c7 feat(setup/apps): convert graphical apps to Flatpak-first with cyberqueer GTK theme
Policy change: graphical apps now prefer Flatpak > pacman > AUR. Non-graphical
tools keep pacman > AUR > source. This makes installed apps sandboxed, keeps
system packages clean, and gives us a single hook point (apply_flatpak_theme)
to theme every GUI app consistently.

lib/logging.sh — two new helper functions sourced by every module:

  ensure_flatpak()
    Checks if flatpak is installed (pacman installs it if not) and ensures the
    Flathub remote is registered. Called at the top of every Flatpak script so
    the module is self-contained and safe to run in any order.

  apply_flatpak_theme(app_id)
    Copies gtk-themes/cyberqueer/ from the Dotfiles repo into ~/.themes/, then
    calls `flatpak override --user --filesystem=~/.themes:ro <id>` so the
    sandbox can read it, and `flatpak override --user --env=GTK_THEME=cyberqueer
    <id>` to activate it. Gracefully skips with a warning if the theme source
    directory is absent.

App scripts converted (pacman/AUR → Flatpak + theme):
  ardour       org.ardour.Ardour
  audacity     org.audacityteam.Audacity
  chromium     org.chromium.Chromium
  firefox      org.mozilla.firefox
  geany        org.geany.Geany
  gimp         org.gimp.GIMP
  inkscape     org.inkscape.Inkscape
  kate         org.kde.kate
  kdenlive     org.kde.kdenlive
  krita        org.kde.krita
  librewolf    io.gitlab.librewolf-community.librewolf
  lmms         io.lmms.LMMS
  localsend    org.localsend.localsend
  min-browser  com.github.minbrowser.min
  mixxx        org.mixxx.Mixxx
  onlyoffice   org.onlyoffice.desktopeditors
  openshot     org.openshot.OpenShot
  rdp-client   org.remmina.Remmina  (was pacman remmina + freerdp + libvncserver;
               Flatpak bundles all protocols, including VNC and SSH tunnels)
  shotcut      org.shotcut.Shotcut
  steam        com.valvesoftware.Steam
  vscodium     com.vscodium.codium
  wireshark    org.wireshark.Wireshark
  xournal      com.github.xournalpp.xournalpp
  zed          dev.zed.Zed
  zen-browser  io.github.zen_browser.zen

Special cases:

  blender-povray: Blender → Flatpak (org.blender.Blender) + theme; POV-Ray
    stays pacman because it has no Flatpak and is a CLI renderer, not a GUI app.

  prismlauncher / stuntrally: were already Flatpak installs; added
    apply_flatpak_theme so they pick up the cyberqueer theme like everything else.

  vesktop: switched from AUR vesktop to Flatpak dev.vencord.Vesktop. The AUR
    build requires cargo and takes several minutes; the Flatpak is pre-built.
    Vencord config is now deployed to ~/.var/app/dev.vencord.Vesktop/config/
    (both Vencord/ and vesktop/ sub-dirs) instead of ~/.config/, which is where
    the Flatpak sandbox exposes its config directory.

  k8s: kubectl stays pacman (it is a CLI tool with no GUI, no Flatpak needed);
    podman-desktop switches from pacman podman-desktop to Flatpak
    io.podman_desktop.PodmanDesktop + theme, because it is a full GUI app.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 10:19:06 +02:00
Amir Alexander Abdelbaki b4d0aec647 feat(setup): wire mail-notmuch and caldav-sync into TUI installers + answerfile
Two fully-featured module scripts already existed under optional-Modules/apps/
(mail-notmuch.sh and caldav-sync.sh) but were never surfaced in the installer
UI, so users had no way to select them during setup.

Changes across three files:

simple-install.sh
  - count_steps(): added entries for mail-notmuch and caldav-sync so the
    [N/total] progress counter stays accurate; also back-filled 13 other apps
    (gimp, inkscape, krita, ardour, audacity, lmms, mixxx, cecilia, kdenlive,
    openshot, shotcut, anti-malware, timeshift) that were already in the
    checklist but missing from count_steps, causing the total to be wrong.
  - Checklist: added both entries under the CLI Tools header, directly after
    himalaya, with a human-readable description of the stack each installs.
  - Run section: added the conditional run_module calls so the modules
    actually execute when selected.

tui-install.sh (dialog-based TUI, same three locations as above)
  - count_steps(): added mail-notmuch and caldav-sync.
  - Checklist: added both entries with matching descriptions.
  - Run section: added the conditional run_module calls.

generate-answerfile.sh
  - Added both entries to the dialog checklist so the JSON answerfile
    generator (used for unattended / ISO-embedded installs) can also select
    them, keeping the answerfile schema in sync with the interactive TUIs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 10:19:06 +02:00
36 changed files with 241 additions and 68 deletions

View File

@ -382,6 +382,18 @@ echo "$HOSTNAME" > /etc/hostname
# NetworkManager
systemctl enable NetworkManager
# Populate /etc/skel with dotfiles and base configs for all new users
echo "Cloning dotfiles into /etc/skel..."
git clone https://git.abdelbaki.eu/The_miro/Dotfiles.git /etc/skel/Dotfiles \
|| echo "Warning: dotfiles clone into skel failed — will fall back to direct clone."
# Seed /etc/skel with base shell dotfiles from the repo clone
if [[ -d /etc/skel/Dotfiles ]]; then
D=/etc/skel/Dotfiles
cp "$D/.zshrc" /etc/skel/.zshrc 2>/dev/null || true
cp "$D/.bashrc" /etc/skel/.bashrc 2>/dev/null || true
cp "$D/.vimrc" /etc/skel/.vimrc 2>/dev/null || true
fi
# User
useradd -m -G wheel -s /bin/zsh "$USERNAME"
echo "$USERNAME:$USERPASS" | chpasswd
@ -433,10 +445,15 @@ fi
###################################################
# CLONE DOTFILES
###################################################
echo "Cloning dotfiles..."
git clone https://git.abdelbaki.eu/The_miro/Dotfiles.git "/home/$USERNAME/Dotfiles" \
&& chown -R "$USERNAME":"$USERNAME" "/home/$USERNAME/Dotfiles" \
|| echo "Warning: dotfiles clone failed — clone manually after first boot."
if [[ -d "/home/$USERNAME/Dotfiles" ]]; then
echo "Dotfiles already in home via skel — fixing ownership."
chown -R "$USERNAME:$USERNAME" "/home/$USERNAME"
else
echo "Cloning dotfiles directly to user home (skel clone failed)..."
git clone https://git.abdelbaki.eu/The_miro/Dotfiles.git "/home/$USERNAME/Dotfiles" \
&& chown -R "$USERNAME:$USERNAME" "/home/$USERNAME/Dotfiles" \
|| echo "Warning: dotfiles clone failed — clone manually after first boot."
fi
CHROOT_EOF

View File

@ -343,6 +343,14 @@ echo "Cloning dotfiles into /etc/skel..."
git clone https://git.abdelbaki.eu/The_miro/Dotfiles.git /etc/skel/Dotfiles \
|| echo "Warning: dotfiles clone failed — clone manually after first boot."
# Seed /etc/skel with base shell dotfiles from the repo clone
if [[ -d /etc/skel/Dotfiles ]]; then
D=/etc/skel/Dotfiles
cp "$D/.zshrc" /etc/skel/.zshrc 2>/dev/null || true
cp "$D/.bashrc" /etc/skel/.bashrc 2>/dev/null || true
cp "$D/.vimrc" /etc/skel/.vimrc 2>/dev/null || true
fi
mkdir -p /etc/skel/{Desktop,Documents,Downloads,Music,Pictures,Public,Templates,Videos}
useradd -m -G wheel -s /bin/zsh "$USERNAME"

View File

@ -224,6 +224,8 @@ if [[ "$AF_RUN_TUI" == "true" ]]; then
"networking-cli" "Networking CLI nmap · nethogs · mitmproxy · httpie" off \
"disk-recovery" "Disk Recovery ddrescue · f3" off \
"himalaya" "Himalaya terminal email client (AUR)" off \
"mail-notmuch" "Mail (notmuch) isync · msmtp · notmuch · alot stack" off \
"caldav-sync" "CalDAV Sync vdirsyncer · khal calendar sync" off \
"gnuplot" "Gnuplot scientific plotting" off \
"blender-povray" "Blender + POV-Ray 3D modelling & ray-tracing" off \
"toot" "toot Mastodon CLI client (AUR)" off \

View File

@ -10,3 +10,30 @@ log() { printf "${GREEN}[+] %s${RESET}\n" "$*"; }
skip() { printf "${YELLOW}[~] %s${RESET}\n" "$*"; }
warn() { printf "${YELLOW}[!] %s${RESET}\n" "$*" >&2; }
err() { printf "${RED}[✖] %s${RESET}\n" "$*" >&2; }
ensure_flatpak() {
if ! command -v flatpak &>/dev/null; then
log "Installing flatpak..."
sudo pacman -S --noconfirm --needed flatpak
fi
if ! flatpak remotes 2>/dev/null | grep -q flathub; then
log "Adding Flathub remote..."
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
fi
}
apply_flatpak_theme() {
local app_id="$1"
local theme_name="cyberqueer"
local theme_src="$HOME/Dotfiles/gtk-themes/$theme_name"
local themes_dir="$HOME/.themes"
if [[ ! -d "$theme_src" ]]; then
warn "Cyberqueer theme not found at $theme_src — skipping Flatpak theme override."
return 0
fi
mkdir -p "$themes_dir"
cp -r "$theme_src" "$themes_dir/$theme_name"
flatpak override --user --filesystem="$themes_dir":ro "$app_id"
flatpak override --user --env=GTK_THEME="$theme_name" "$app_id"
log "Cyberqueer theme applied to $app_id."
}

6
setup/modules/optional-Modules/apps/ardour.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Ardour (professional DAW)..."
sudo pacman -S --noconfirm --needed ardour
log "Installing Ardour (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.ardour.Ardour
apply_flatpak_theme "org.ardour.Ardour"
log "Ardour installed."

6
setup/modules/optional-Modules/apps/audacity.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Audacity (audio editor)..."
sudo pacman -S --noconfirm --needed audacity
log "Installing Audacity (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.audacityteam.Audacity
apply_flatpak_theme "org.audacityteam.Audacity"
log "Audacity installed."

10
setup/modules/optional-Modules/apps/blender-povray.sh Normal file → Executable file
View File

@ -2,6 +2,12 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Blender and POV-Ray..."
sudo pacman -S --noconfirm --needed blender povray
log "Installing Blender (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.blender.Blender
apply_flatpak_theme "org.blender.Blender"
log "Installing POV-Ray (pacman)..."
sudo pacman -S --noconfirm --needed povray
log "Blender and POV-Ray installed."

6
setup/modules/optional-Modules/apps/chromium.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Chromium..."
sudo pacman -S --noconfirm --needed chromium
log "Installing Chromium (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.chromium.Chromium
apply_flatpak_theme "org.chromium.Chromium"
log "Chromium installed."

6
setup/modules/optional-Modules/apps/firefox.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Firefox..."
sudo pacman -S --noconfirm --needed firefox
log "Installing Firefox (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.mozilla.firefox
apply_flatpak_theme "org.mozilla.firefox"
log "Firefox installed."

6
setup/modules/optional-Modules/apps/geany.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Geany and plugins..."
sudo pacman -S --noconfirm --needed geany geany-plugins
log "Installing Geany (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.geany.Geany
apply_flatpak_theme "org.geany.Geany"
log "Geany installed."

6
setup/modules/optional-Modules/apps/gimp.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing GIMP..."
sudo pacman -S --noconfirm --needed gimp
log "Installing GIMP (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.gimp.GIMP
apply_flatpak_theme "org.gimp.GIMP"
log "GIMP installed."

6
setup/modules/optional-Modules/apps/inkscape.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Inkscape..."
sudo pacman -S --noconfirm --needed inkscape
log "Installing Inkscape (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.inkscape.Inkscape
apply_flatpak_theme "org.inkscape.Inkscape"
log "Inkscape installed."

9
setup/modules/optional-Modules/apps/k8s.sh Normal file → Executable file
View File

@ -2,6 +2,11 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Kubernetes tools (kubectl, podman-desktop)..."
sudo pacman -S --noconfirm --needed kubectl podman-desktop
log "Installing kubectl (pacman)..."
sudo pacman -S --noconfirm --needed kubectl
log "Installing Podman Desktop (Flatpak)..."
ensure_flatpak
flatpak install -y flathub io.podman_desktop.PodmanDesktop
apply_flatpak_theme "io.podman_desktop.PodmanDesktop"
log "Kubernetes tools installed."

6
setup/modules/optional-Modules/apps/kate.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Kate..."
sudo pacman -S --noconfirm --needed kate
log "Installing Kate (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.kde.kate
apply_flatpak_theme "org.kde.kate"
log "Kate installed."

6
setup/modules/optional-Modules/apps/kdenlive.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Kdenlive..."
sudo pacman -S --noconfirm --needed kdenlive
log "Installing Kdenlive (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.kde.kdenlive
apply_flatpak_theme "org.kde.kdenlive"
log "Kdenlive installed."

6
setup/modules/optional-Modules/apps/krita.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Krita..."
sudo pacman -S --noconfirm --needed krita
log "Installing Krita (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.kde.krita
apply_flatpak_theme "org.kde.krita"
log "Krita installed."

6
setup/modules/optional-Modules/apps/librewolf.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing LibreWolf (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm librewolf-bin
log "Installing LibreWolf (Flatpak)..."
ensure_flatpak
flatpak install -y flathub io.gitlab.librewolf-community.librewolf
apply_flatpak_theme "io.gitlab.librewolf-community.librewolf"
log "LibreWolf installed."

6
setup/modules/optional-Modules/apps/lmms.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing LMMS..."
sudo pacman -S --noconfirm --needed lmms
log "Installing LMMS (Flatpak)..."
ensure_flatpak
flatpak install -y flathub io.lmms.LMMS
apply_flatpak_theme "io.lmms.LMMS"
log "LMMS installed."

6
setup/modules/optional-Modules/apps/localsend.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing LocalSend (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm localsend
log "Installing LocalSend (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.localsend.localsend
apply_flatpak_theme "org.localsend.localsend"
log "LocalSend installed."

6
setup/modules/optional-Modules/apps/min-browser.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Min browser (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm min
log "Installing Min browser (Flatpak)..."
ensure_flatpak
flatpak install -y flathub com.github.minbrowser.min
apply_flatpak_theme "com.github.minbrowser.min"
log "Min browser installed."

6
setup/modules/optional-Modules/apps/mixxx.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Mixxx (DJ software)..."
sudo pacman -S --noconfirm --needed mixxx
log "Installing Mixxx (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.mixxx.Mixxx
apply_flatpak_theme "org.mixxx.Mixxx"
log "Mixxx installed."

6
setup/modules/optional-Modules/apps/onlyoffice.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing OnlyOffice (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm onlyoffice-bin
log "Installing OnlyOffice (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.onlyoffice.desktopeditors
apply_flatpak_theme "org.onlyoffice.desktopeditors"
log "OnlyOffice installed."

6
setup/modules/optional-Modules/apps/openshot.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing OpenShot..."
sudo pacman -S --noconfirm --needed openshot
log "Installing OpenShot (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.openshot.OpenShot
apply_flatpak_theme "org.openshot.OpenShot"
log "OpenShot installed."

2
setup/modules/optional-Modules/apps/prismlauncher.sh Normal file → Executable file
View File

@ -3,5 +3,7 @@ set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing PrismLauncher (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.prismlauncher.PrismLauncher
apply_flatpak_theme "org.prismlauncher.PrismLauncher"
log "PrismLauncher installed."

11
setup/modules/optional-Modules/apps/rdp-client.sh Normal file → Executable file
View File

@ -2,9 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Remmina RDP client with FreeRDP and VNC support..."
sudo pacman -S --noconfirm --needed \
remmina \
freerdp \
libvncserver
log "Remmina installed with RDP (freerdp) and VNC support."
log "Installing Remmina (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.remmina.Remmina
apply_flatpak_theme "org.remmina.Remmina"
log "Remmina installed."

6
setup/modules/optional-Modules/apps/shotcut.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Shotcut..."
sudo pacman -S --noconfirm --needed shotcut
log "Installing Shotcut (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.shotcut.Shotcut
apply_flatpak_theme "org.shotcut.Shotcut"
log "Shotcut installed."

6
setup/modules/optional-Modules/apps/steam.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Steam..."
sudo pacman -S --noconfirm --needed steam
log "Installing Steam (Flatpak)..."
ensure_flatpak
flatpak install -y flathub com.valvesoftware.Steam
apply_flatpak_theme "com.valvesoftware.Steam"
log "Steam installed."

2
setup/modules/optional-Modules/apps/stuntrally.sh Normal file → Executable file
View File

@ -3,5 +3,7 @@ set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Stunt Rally (Flatpak)..."
ensure_flatpak
flatpak install -y flathub io.github.stuntrally.StuntRally3
apply_flatpak_theme "io.github.stuntrally.StuntRally3"
log "Stunt Rally installed."

18
setup/modules/optional-Modules/apps/vesktop.sh Normal file → Executable file
View File

@ -2,11 +2,19 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Vesktop (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm vesktop
log "Installing Vesktop (Flatpak)..."
ensure_flatpak
flatpak install -y flathub dev.vencord.Vesktop
apply_flatpak_theme "dev.vencord.Vesktop"
log "Deploying Vencord config..."
rm -rf ~/.config/Vencord ~/.config/vesktop
cp -r ~/Dotfiles/desktopenvs/hyprland/Vencord ~/.config/
cp -r ~/Dotfiles/desktopenvs/hyprland/Vencord ~/.config/vesktop
FLATPAK_CFG="$HOME/.var/app/dev.vencord.Vesktop/config"
mkdir -p "$FLATPAK_CFG"
if [[ -d "$HOME/Dotfiles/desktopenvs/hyprland/Vencord" ]]; then
rm -rf "$FLATPAK_CFG/Vencord" "$FLATPAK_CFG/vesktop"
cp -r "$HOME/Dotfiles/desktopenvs/hyprland/Vencord" "$FLATPAK_CFG/Vencord"
cp -r "$HOME/Dotfiles/desktopenvs/hyprland/Vencord" "$FLATPAK_CFG/vesktop"
else
warn "Vencord config not found at ~/Dotfiles/desktopenvs/hyprland/Vencord — skipping."
fi
log "Vesktop installed with Vencord theme."

6
setup/modules/optional-Modules/apps/vscodium.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing VSCodium (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm vscodium-bin
log "Installing VSCodium (Flatpak)..."
ensure_flatpak
flatpak install -y flathub com.vscodium.codium
apply_flatpak_theme "com.vscodium.codium"
log "VSCodium installed."

6
setup/modules/optional-Modules/apps/wireshark.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Wireshark..."
sudo pacman -S --noconfirm --needed wireshark-qt
log "Installing Wireshark (Flatpak)..."
ensure_flatpak
flatpak install -y flathub org.wireshark.Wireshark
apply_flatpak_theme "org.wireshark.Wireshark"
log "Wireshark installed."

6
setup/modules/optional-Modules/apps/xournal.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Xournal++ (PDF annotator)..."
sudo pacman -S --noconfirm --needed xournalpp
log "Installing Xournal++ (Flatpak)..."
ensure_flatpak
flatpak install -y flathub com.github.xournalpp.xournalpp
apply_flatpak_theme "com.github.xournalpp.xournalpp"
log "Xournal++ installed."

8
setup/modules/optional-Modules/apps/zed.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Zed editor..."
sudo pacman -S --noconfirm --needed zed
log "Zed installed."
log "Installing Zed editor (Flatpak)..."
ensure_flatpak
flatpak install -y flathub dev.zed.Zed
apply_flatpak_theme "dev.zed.Zed"
log "Zed editor installed."

6
setup/modules/optional-Modules/apps/zen-browser.sh Normal file → Executable file
View File

@ -2,6 +2,8 @@
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Zen Browser (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm zen-browser-bin
log "Installing Zen Browser (Flatpak)..."
ensure_flatpak
flatpak install -y flathub io.github.zen_browser.zen
apply_flatpak_theme "io.github.zen_browser.zen"
log "Zen Browser installed."

View File

@ -360,6 +360,21 @@ count_steps() {
[[ "$a" == *"lamco-rdp-server"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"qemu"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"xournal"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"gimp"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"inkscape"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"krita"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"ardour"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"audacity"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"lmms"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"mixxx"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"cecilia"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"kdenlive"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"openshot"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"shotcut"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"anti-malware"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"timeshift"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"mail-notmuch"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"caldav-sync"* ]] && TOTAL=$(( TOTAL + 1 ))
}
# ── Answerfile ────────────────────────────────────────────────────────────────
@ -501,6 +516,8 @@ else
\
"" "CLI Tools" header \
"himalaya" "Himalaya terminal email client (AUR)" off \
"mail-notmuch" "Mail (notmuch) isync · msmtp · notmuch · alot stack" off \
"caldav-sync" "CalDAV Sync vdirsyncer · khal calendar sync" off \
"gnuplot" "Gnuplot scientific plotting" off \
"blender-povray" "Blender + POV-Ray 3D modelling & ray-tracing" off \
"toot" "toot Mastodon CLI client (AUR)" off \
@ -653,6 +670,8 @@ fi
[[ "$SELECTED_APPS" == *"networking-cli"* ]] && run_module "Networking CLI" "$APPS/networking-cli.sh"
[[ "$SELECTED_APPS" == *"disk-recovery"* ]] && run_module "Disk Recovery" "$APPS/disk-recovery.sh"
[[ "$SELECTED_APPS" == *"himalaya"* ]] && run_module "Himalaya" "$APPS/himalaya.sh"
[[ "$SELECTED_APPS" == *"mail-notmuch"* ]] && run_module "Mail (notmuch)" "$APPS/mail-notmuch.sh"
[[ "$SELECTED_APPS" == *"caldav-sync"* ]] && run_module "CalDAV Sync" "$APPS/caldav-sync.sh"
[[ "$SELECTED_APPS" == *"gnuplot"* ]] && run_module "Gnuplot" "$APPS/gnuplot.sh"
[[ "$SELECTED_APPS" == *"blender-povray"* ]] && run_module "Blender + POV-Ray" "$APPS/blender-povray.sh"
[[ "$SELECTED_APPS" == *"toot"* ]] && run_module "toot" "$APPS/toot.sh"
@ -778,6 +797,18 @@ else
fi
fi
# ── Sync user config to /etc/skel ─────────────────────────────────────────────
# Captures everything installed by modules so future users start with the same setup.
if [[ -d "$HOME/.config" ]]; then
printf "\n Syncing ~/.config to /etc/skel...\n"
sudo mkdir -p /etc/skel/.config
sudo cp -r "$HOME/.config/." /etc/skel/.config/
fi
[[ -d "$HOME/.themes" ]] && { sudo mkdir -p /etc/skel/.themes; sudo cp -r "$HOME/.themes/." /etc/skel/.themes/; }
[[ -f "$HOME/.zshrc" ]] && sudo cp "$HOME/.zshrc" /etc/skel/.zshrc
[[ -f "$HOME/.bashrc" ]] && sudo cp "$HOME/.bashrc" /etc/skel/.bashrc
[[ -f "$HOME/.vimrc" ]] && sudo cp "$HOME/.vimrc" /etc/skel/.vimrc
# ── Done ──────────────────────────────────────────────────────────────────────
if $ANSWERFILE_MODE; then
printf "\nDone. Log: %s\n" "$LOG"

View File

@ -185,6 +185,8 @@ count_steps() {
[[ "$a" == *"shotcut"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"anti-malware"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"timeshift"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"mail-notmuch"* ]] && TOTAL=$(( TOTAL + 1 ))
[[ "$a" == *"caldav-sync"* ]] && TOTAL=$(( TOTAL + 1 ))
}
# ── Answerfile ────────────────────────────────────────────────────────────────
@ -342,6 +344,8 @@ else
"networking-cli" "Networking CLI nmap · nethogs · mitmproxy · httpie" off \
"disk-recovery" "Disk Recovery ddrescue · f3" off \
"himalaya" "Himalaya terminal email client (AUR)" off \
"mail-notmuch" "Mail (notmuch) isync · msmtp · notmuch · alot stack" off \
"caldav-sync" "CalDAV Sync vdirsyncer · khal calendar sync" off \
"gnuplot" "Gnuplot scientific plotting" off \
"blender-povray" "Blender + POV-Ray 3D modelling & ray-tracing" off \
"toot" "toot Mastodon CLI client (AUR)" off \
@ -538,6 +542,8 @@ fi
[[ "$SELECTED_APPS" == *"networking-cli"* ]] && run_module "Networking CLI" "$APPS/networking-cli.sh"
[[ "$SELECTED_APPS" == *"disk-recovery"* ]] && run_module "Disk Recovery" "$APPS/disk-recovery.sh"
[[ "$SELECTED_APPS" == *"himalaya"* ]] && run_module "Himalaya" "$APPS/himalaya.sh"
[[ "$SELECTED_APPS" == *"mail-notmuch"* ]] && run_module "Mail (notmuch)" "$APPS/mail-notmuch.sh"
[[ "$SELECTED_APPS" == *"caldav-sync"* ]] && run_module "CalDAV Sync" "$APPS/caldav-sync.sh"
[[ "$SELECTED_APPS" == *"gnuplot"* ]] && run_module "Gnuplot" "$APPS/gnuplot.sh"
[[ "$SELECTED_APPS" == *"blender-povray"* ]] && run_module "Blender + POV-Ray" "$APPS/blender-povray.sh"
[[ "$SELECTED_APPS" == *"toot"* ]] && run_module "toot" "$APPS/toot.sh"
@ -676,6 +682,18 @@ else
fi
fi
# ── Sync user config to /etc/skel ─────────────────────────────────────────────
# Captures everything installed by modules so future users start with the same setup.
if [[ -d "$HOME/.config" ]]; then
printf "\n Syncing ~/.config to /etc/skel...\n"
sudo mkdir -p /etc/skel/.config
sudo cp -r "$HOME/.config/." /etc/skel/.config/
fi
[[ -d "$HOME/.themes" ]] && { sudo mkdir -p /etc/skel/.themes; sudo cp -r "$HOME/.themes/." /etc/skel/.themes/; }
[[ -f "$HOME/.zshrc" ]] && sudo cp "$HOME/.zshrc" /etc/skel/.zshrc
[[ -f "$HOME/.bashrc" ]] && sudo cp "$HOME/.bashrc" /etc/skel/.bashrc
[[ -f "$HOME/.vimrc" ]] && sudo cp "$HOME/.vimrc" /etc/skel/.vimrc
# ── Done ──────────────────────────────────────────────────────────────────────
if $ANSWERFILE_MODE; then
printf "\nDone. Log: %s\n" "$LOG"