diff --git a/dotfiles/hypr/Scripts/homelab-control.sh b/dotfiles/hypr/Scripts/homelab-control.sh index d02adb1..048f8da 100755 --- a/dotfiles/hypr/Scripts/homelab-control.sh +++ b/dotfiles/hypr/Scripts/homelab-control.sh @@ -9,118 +9,17 @@ notify() { notify-send "Homelab" "$1" >/dev/null 2>&1 || true } -setup_homelab() { - local server_address server_username server_port - - if command -v zenity >/dev/null 2>&1; then - local data - data="$(zenity --forms --title="Homelab Control Center" \ - --text="Server-Zugangsdaten eingeben" \ - --add-entry="Server-Adresse" \ - --add-entry="SSH-Benutzer" \ - --add-entry="SSH-Port")" || return 1 - server_address="$(printf '%s\n' "$data" | cut -d'|' -f1)" - server_username="$(printf '%s\n' "$data" | cut -d'|' -f2)" - server_port="$(printf '%s\n' "$data" | cut -d'|' -f3)" - [[ -z "$server_address" ]] && { notify "Keine Adresse angegeben."; return 1; } - server_username="${server_username:-root}" - server_port="${server_port:-22}" - - elif command -v gum >/dev/null 2>&1; then - gum style --foreground 212 "Homelab Control Center Setup" - echo - server_address="$(gum input --prompt "Server address: " --placeholder "192.168.1.100")" - [[ -z "$server_address" ]] && { notify "Keine Adresse angegeben."; return 1; } - server_username="$(gum input --prompt "SSH username: " --value "root")" - server_port="$(gum input --prompt "SSH port: " --value "22")" - - elif command -v whiptail >/dev/null 2>&1; then - server_address="$(whiptail --inputbox "Server address" 10 60 3>&1 1>&2 2>&3)" || return 1 - [[ -z "$server_address" ]] && { notify "Keine Adresse angegeben."; return 1; } - server_username="$(whiptail --inputbox "SSH username" 10 60 "root" 3>&1 1>&2 2>&3)" || return 1 - server_port="$(whiptail --inputbox "SSH port" 10 60 "22" 3>&1 1>&2 2>&3)" || return 1 - - else - echo "=== Homelab Control Center Setup ===" - echo - read -r -p "Server address (IP or domain): " server_address - [[ -z "$server_address" ]] && { echo "Keine Adresse eingegeben."; return 1; } - read -r -p "SSH username [root]: " server_username - server_username="${server_username:-root}" - read -r -p "SSH port [22]: " server_port - server_port="${server_port:-22}" - fi - - mkdir -p "$(dirname "$HOMELAB_CONFIG")" - cat > "$HOMELAB_CONFIG" </dev/null 2>&1 || true -} - -if [[ "${1:-}" == "--setup" ]]; then - setup_homelab - exit $? -fi - if ! command -v ags >/dev/null 2>&1; then notify "ags ist nicht installiert." exit 1 fi if ! command -v sshpass >/dev/null 2>&1; then - if command -v zenity >/dev/null 2>&1; then - zenity --question --title="sshpass" --text="sshpass wird benötigt. Installieren?" --width=300 && sudo pacman -S --noconfirm sshpass || true - elif [[ -t 0 ]] && command -v gum >/dev/null 2>&1; then - gum confirm "sshpass ist nicht installiert. Installieren?" && sudo pacman -S --noconfirm sshpass || true - fi - if ! command -v sshpass >/dev/null 2>&1; then - notify "sshpass wird benötigt. Bitte installieren: sudo pacman -S sshpass" - exit 1 - fi -fi - -if [[ -f "$HOMELAB_CONFIG" ]]; then - export HOMELAB_CONFIG -else - if command -v zenity >/dev/null 2>&1; then - notify "Keine Homelab-Konfiguration gefunden. Setup startet..." - if ! setup_homelab; then - exit 1 - fi - else - notify "Keine Konfiguration gefunden. Terminal wird geöffnet..." - local term="" - for t in "${TERMINAL:-}" kitty alacritty foot gnome-terminal xterm; do - [[ -z "$t" ]] && continue - command -v "$t" >/dev/null 2>&1 && { term="$t"; break; } - done - if [[ -z "$term" ]]; then - notify "Kein Terminal und kein zenity. sudo pacman -S zenity" - exit 1 - fi - "$term" -e "$0" --setup - if [[ ! -f "$HOMELAB_CONFIG" ]]; then - exit 1 - fi - fi - export HOMELAB_CONFIG + notify "sshpass wird benötigt. Bitte installieren: sudo pacman -S sshpass" + exit 1 fi +export HOMELAB_CONFIG cd "$HYPR_DIR" ags quit --instance homelab-control >/dev/null 2>&1 || true exec ags run "$HYPR_DIR/ags/homelab.tsx" diff --git a/dotfiles/hypr/ags/homelab.tsx b/dotfiles/hypr/ags/homelab.tsx index 078e965..a08137f 100644 --- a/dotfiles/hypr/ags/homelab.tsx +++ b/dotfiles/hypr/ags/homelab.tsx @@ -4,14 +4,25 @@ import { execAsync } from "ags/process"; import css from "./homelab.css"; import GLib from "gi://GLib"; +let hasConfig = false; +const CONFIG_PATH = GLib.getenv("HOMELAB_CONFIG") || `${GLib.getenv("HOME")}/.config/homelab/config.yaml`; + +function saveConfig(host: string, user: string, port: string) { + const yaml = `# Homelab Configuration\ngenerated_by: Omeron\n\nserver:\n address: "${host}"\n username: "${user}"\n port: ${port}\n\ncontrol_center:\n refresh_interval: 5\n theme: "dark"\n\nfeatures:\n docker: true\n services: true\n storage: true\n network: true\n monitoring: true\n`; + GLib.file_set_contents(CONFIG_PATH, new TextEncoder().encode(yaml)); + hasConfig = true; + const win = app.get_window("homelab-control"); + if (win) win.set_child({authed ? : } as Gtk.Widget); +} + function loadConfig() { - const configPath = GLib.getenv("HOMELAB_CONFIG") || `${GLib.getenv("HOME")}/.config/homelab/config.yaml`; const defaults = { host: "10.0.0.15", user: "root", port: 22 }; try { - const [ok, contents] = GLib.file_get_contents(configPath); + const [ok, contents] = GLib.file_get_contents(CONFIG_PATH); if (!ok || !contents) return defaults; + hasConfig = true; const text = new TextDecoder().decode(contents); const lines = text.split("\n"); let host = defaults.host; @@ -1113,6 +1124,55 @@ function startRefreshTimer() { }); } +function SetupView() { + let host = ""; + let user = "root"; + let port = "22"; + + return ( + + + + { host = entry.get_text(); }} + onActivate={() => { + if (host && user && port) saveConfig(host, user, port); + }} + /> + { user = entry.get_text() || "root"; }} + onActivate={() => { + if (host && user && port) saveConfig(host, user, port); + }} + /> + { port = entry.get_text() || "22"; }} + onActivate={() => { + if (host && user && port) saveConfig(host, user, port); + }} + /> +