| 1 | #!/bin/bash |
| 2 | # gardm installation script |
| 3 | # Installs gardm (gar display manager) system-wide |
| 4 | |
| 5 | set -e |
| 6 | |
| 7 | # Colors for output |
| 8 | RED='\033[0;31m' |
| 9 | GREEN='\033[0;32m' |
| 10 | YELLOW='\033[1;33m' |
| 11 | NC='\033[0m' # No Color |
| 12 | |
| 13 | log_info() { |
| 14 | echo -e "${GREEN}[INFO]${NC} $1" |
| 15 | } |
| 16 | |
| 17 | log_warn() { |
| 18 | echo -e "${YELLOW}[WARN]${NC} $1" |
| 19 | } |
| 20 | |
| 21 | log_error() { |
| 22 | echo -e "${RED}[ERROR]${NC} $1" |
| 23 | } |
| 24 | |
| 25 | # Check if running as root |
| 26 | if [ "$EUID" -ne 0 ]; then |
| 27 | log_error "Please run as root (sudo ./install.sh)" |
| 28 | exit 1 |
| 29 | fi |
| 30 | |
| 31 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| 32 | PROJECT_DIR="$(dirname "$SCRIPT_DIR")" |
| 33 | |
| 34 | log_info "Installing gardm from $PROJECT_DIR" |
| 35 | |
| 36 | # Build release binaries |
| 37 | log_info "Building release binaries..." |
| 38 | cd "$PROJECT_DIR" |
| 39 | cargo build --release -p gardmd -p gardm-greeter |
| 40 | |
| 41 | # Install binaries |
| 42 | log_info "Installing binaries to /usr/bin..." |
| 43 | install -Dm755 target/release/gardmd /usr/bin/gardmd |
| 44 | install -Dm755 target/release/gardm-greeter /usr/bin/gardm-greeter |
| 45 | |
| 46 | # Create config directories |
| 47 | log_info "Creating configuration directories..." |
| 48 | mkdir -p /etc/gardm |
| 49 | mkdir -p /usr/share/gardm/backgrounds |
| 50 | |
| 51 | # Install PAM configuration |
| 52 | log_info "Installing PAM configuration..." |
| 53 | install -Dm644 etc/pam.d/gardm /etc/pam.d/gardm |
| 54 | |
| 55 | # Install systemd service |
| 56 | log_info "Installing systemd service..." |
| 57 | install -Dm644 etc/gardm.service /usr/lib/systemd/system/gardm.service |
| 58 | |
| 59 | # Install default config if not exists |
| 60 | if [ ! -f /etc/gardm/config.toml ]; then |
| 61 | log_info "Installing default configuration..." |
| 62 | install -Dm644 etc/config.toml /etc/gardm/config.toml |
| 63 | else |
| 64 | log_warn "/etc/gardm/config.toml already exists, not overwriting" |
| 65 | fi |
| 66 | |
| 67 | # Create sysconfig file (empty, for environment overrides) |
| 68 | if [ ! -f /etc/sysconfig/gardm ]; then |
| 69 | echo "# Environment variables for gardm" > /etc/sysconfig/gardm |
| 70 | chmod 644 /etc/sysconfig/gardm |
| 71 | fi |
| 72 | |
| 73 | # Reload systemd |
| 74 | log_info "Reloading systemd daemon..." |
| 75 | systemctl daemon-reload |
| 76 | |
| 77 | log_info "Installation complete!" |
| 78 | echo "" |
| 79 | echo "To enable gardm as your display manager:" |
| 80 | echo " 1. First, TEST gardm (see scripts/test-gardm.sh)" |
| 81 | echo " 2. Then disable your current display manager:" |
| 82 | echo " sudo systemctl disable sddm # or gdm, lightdm, etc." |
| 83 | echo " 3. Enable gardm:" |
| 84 | echo " sudo systemctl enable gardm" |
| 85 | echo " 4. Reboot" |
| 86 | echo "" |
| 87 | log_warn "ALWAYS keep a terminal/tty login available as fallback!" |