#!/usr/bin/env bash # --- Helper functions --- log() { echo -e "\033[1;34m[INFO]\033[0m $*"; } exists() { command -v "$1" >/dev/null 2>&1; } # --- Defined Paths --- 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" # 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