mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-07-04 22:43:02 +02:00
- Move all linux_configuration scripts into two semantic categories: - single_use/: scripts run once manually (fresh install, fixes, setup) - periodic_background/: scripts run by systemd timers or daemons - Preserve existing subdirectory structure within each category - Fix lib/common.sh source paths for new directory depths - Fix CONFIG_DIR depth in setup_periodic_system.sh and check_and_enable_services.sh - Update all references in tests, fresh-install/main.sh, nix modules, and docs - Fix check_polling_antipatterns.sh false positives (||, regex |, case patterns, jq strings) - Fix pre-existing mypy exclusion path and type annotations for moved tools/ directory - Rewrite check_polling_antipatterns.sh using awk (no bash regex loops); add require_serial: true
85 lines
2.6 KiB
Bash
Executable File
85 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
# Source common library for shared functions
|
|
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
|
|
# shellcheck source=../../lib/common.sh
|
|
source "$SCRIPT_DIR/../../lib/common.sh"
|
|
|
|
# Configuration -----------------------------------------------------------------
|
|
TARGET_SESSION_NAME="Xfce Session"
|
|
TARGET_PACKAGES=(
|
|
xfwm4 # Compositing window manager with XFCE integration
|
|
xfce4-session # Provides the Xfce session entry for display managers
|
|
xfce4-panel # Panel with system tray support
|
|
xfce4-settings # Settings daemon (enables compositing toggle, theming, etc.)
|
|
xfce4-terminal # Handy default terminal for the new environment
|
|
)
|
|
|
|
# Utility functions --------------------------------------------------------------
|
|
info() { echo "[INFO] $*"; }
|
|
warn() { echo "[WARN] $*" >&2; }
|
|
error() {
|
|
echo "[ERROR] $*" >&2
|
|
exit 1
|
|
}
|
|
|
|
ensure_pacman() {
|
|
require_command pacman "pacman" || error "Required command 'pacman' not found."
|
|
if ! grep -qi "arch" /etc/os-release 2> /dev/null; then
|
|
warn "This script was designed for Arch Linux; continuing anyway."
|
|
fi
|
|
}
|
|
|
|
install_packages() {
|
|
install_missing_pacman_packages "${TARGET_PACKAGES[@]}"
|
|
}
|
|
|
|
print_post_install_tips() {
|
|
cat << EOF
|
|
|
|
------------------------------------------------------------------------
|
|
XFCE session installed.
|
|
|
|
• i3 remains your default window manager. We did not modify ~/.xinitrc,
|
|
display manager defaults, or systemd targets.
|
|
• At your next graphical login, pick "${TARGET_SESSION_NAME}" (or "Xfce"),
|
|
then log in to enjoy compositing via xfwm4.
|
|
• Once you are done testing Unity, simply log out and choose i3 again.
|
|
|
|
We'll log you out now so you can switch sessions safely.
|
|
------------------------------------------------------------------------
|
|
EOF
|
|
}
|
|
|
|
logout_user() {
|
|
local session_id="${XDG_SESSION_ID:-}"
|
|
|
|
if [[ -n $session_id ]] && loginctl show-session "$session_id" > /dev/null 2>&1; then
|
|
info "Terminating current session (ID: $session_id) via loginctl."
|
|
loginctl terminate-session "$session_id"
|
|
return
|
|
fi
|
|
|
|
if loginctl list-sessions 2> /dev/null | awk '{print $1" "$3}' | grep -q " $USER$"; then
|
|
info "Terminating all sessions for user '$USER' via loginctl."
|
|
loginctl terminate-user "$USER"
|
|
return
|
|
fi
|
|
|
|
warn "loginctl could not terminate the session; attempting fallback logout."
|
|
pkill -KILL -u "$USER" || error "Failed to terminate user sessions. Please log out manually."
|
|
}
|
|
|
|
main() {
|
|
ensure_pacman
|
|
install_packages
|
|
print_post_install_tips
|
|
|
|
# Give the user a moment to read the instructions before logging out.
|
|
logout_user
|
|
}
|
|
|
|
main "$@"
|