install and link-dotfiles treat it as a default; install-packages and change-settings overwrote an exported override, so a clone anywhere but ~/.local/share/Panama sourced the extras catalog from a path that does not exist and copied config/copy from the wrong tree.
98 lines
4.8 KiB
Bash
Executable File
98 lines
4.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Strict: the copy over / below is the one thing this stage exists to do, and
|
|
# without set -e its failure fell through to guarded no-ops and exited 0 --
|
|
# a failed stage the installer's summary could never see.
|
|
set -euo pipefail
|
|
|
|
# --- Helper functions ---
|
|
log() { echo -e "\033[1;34m[INFO]\033[0m $*"; }
|
|
exists() { command -v "$1" >/dev/null 2>&1; }
|
|
|
|
# --- Defined Paths ---
|
|
# The default, not an assignment: an exported PANAMA_PATH from a clone at
|
|
# another location must win, or the copy over / below reads the wrong tree.
|
|
PANAMA_PATH="${PANAMA_PATH:-$HOME/.local/share/Panama}"
|
|
|
|
echo -e "\n--- Copying System & User files ---"
|
|
log "Changing DNF Settings"
|
|
sudo cp -r "$PANAMA_PATH/config/copy/." "/"
|
|
|
|
# The GPU symlink rules land via the copy above. Apply them without a reboot so
|
|
# AQ_DRM_DEVICES resolves on the first Hyprland login rather than the second.
|
|
if [[ -f /etc/udev/rules.d/99-panama-gpu.rules ]]; then
|
|
log "Reloading udev rules for stable GPU symlinks"
|
|
sudo udevadm control --reload
|
|
sudo udevadm trigger --subsystem-match=drm
|
|
fi
|
|
|
|
# The document-portal drop-in lands via the same copy. A user unit's drop-ins
|
|
# are read at daemon-reload, so without this the guard applies from the next
|
|
# login rather than from now -- and the failure it guards against is one you
|
|
# only find days later, when you next open a flatpak you had not opened yet.
|
|
if [[ -f /etc/systemd/user/xdg-document-portal.service.d/panama-stale-mount.conf ]]; then
|
|
log "Reloading the user manager so the document-portal drop-in applies"
|
|
systemctl --user daemon-reload || log "Could not reload the user manager"
|
|
fi
|
|
|
|
echo -e "\n--- Desktop appearance ---"
|
|
# GTK and Qt apps read these directly from gsettings; there is no settings
|
|
# daemon outside GNOME, so they must be correct rather than merely overridden.
|
|
# These match config/dot/gtk-3.0/settings.ini and quickshell's Theme.qml.
|
|
if exists gsettings; then
|
|
log "Applying interface settings"
|
|
gsettings set org.gnome.desktop.interface gtk-theme 'adw-gtk3-dark'
|
|
gsettings set org.gnome.desktop.interface icon-theme 'Adwaita'
|
|
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
|
|
gsettings set org.gnome.desktop.interface font-name 'Adwaita Sans 11'
|
|
gsettings set org.gnome.desktop.interface monospace-font-name 'VictorMono Nerd Font 10'
|
|
gsettings set org.gnome.desktop.interface cursor-theme 'oreo_blue_cursors'
|
|
# Deliberately NOT setting cursor-size. GNOME here is on 16 (smaller than
|
|
# GNOME's own default of 24) and changing it would visibly alter the working
|
|
# GNOME session. Hyprland uses XCURSOR_SIZE=24 from uwsm/env; if the cursor
|
|
# feels too large there, change that one value rather than this one.
|
|
fi
|
|
|
|
echo -e "\n--- Hyprland session services ---"
|
|
# Deliberately NOT enabling these.
|
|
#
|
|
# hyprpaper / hypridle / hyprpolkitagent / vicinae all ship units that are
|
|
# WantedBy=graphical-session.target -- and that target is active under GNOME
|
|
# too. Enabling them would start hypridle alongside GNOME's own idle handling
|
|
# (two daemons blanking and locking the screen on different timers) and start
|
|
# hyprpaper where there is no layer shell for it to draw on.
|
|
#
|
|
# Instead hypr/autostart.lua runs `systemctl --user start ...` on
|
|
# hyprland.start, which scopes them to the Hyprland session. They still get the
|
|
# correct uwsm activation environment and still stop in order, because they are
|
|
# PartOf=graphical-session.target.
|
|
log "Hyprland services are started per-session by hypr/autostart.lua, not enabled globally"
|
|
|
|
# espanso is the exception to the rule above: text expansion is wanted under
|
|
# any compositor and conflicts with nothing GNOME runs, and upstream's own
|
|
# mechanism is a registered user unit. The RPM ships no unit -- without this,
|
|
# the package installs, the config links, and no trigger ever fires.
|
|
# `service register` writes and enables the unit and is idempotent on re-runs;
|
|
# autostart.lua also starts it so the first Hyprland login after a fresh
|
|
# install expands text without waiting for the next one.
|
|
if exists espanso && ! systemctl --user cat espanso.service >/dev/null 2>&1; then
|
|
log "Registering the espanso text-expansion service"
|
|
espanso service register >/dev/null 2>&1 || log "Could not register espanso"
|
|
fi
|
|
|
|
# Notification daemons must NOT be installed: mako, dunst and swaync all
|
|
# register Name=org.freedesktop.Notifications for D-Bus activation, which races
|
|
# Quickshell's own notification server at login. Whoever wins keeps the name.
|
|
for pkg in mako dunst SwayNotificationCenter; do
|
|
if rpm -q "$pkg" >/dev/null 2>&1; then
|
|
log "WARNING: $pkg is installed and will fight Quickshell for the notification D-Bus name."
|
|
log " Fix with: systemctl --user mask ${pkg,,}.service"
|
|
fi
|
|
done
|
|
|
|
# Select the launcher theme once vicinae exists.
|
|
if exists vicinae; then
|
|
log "Setting vicinae theme"
|
|
vicinae theme set tokyonight-moon >/dev/null 2>&1 || true
|
|
fi
|