diff --git a/Droidnix/install_Droidnix.sh b/Droidnix/install_Droidnix.sh index 83fa89a1d..e3e1a12d2 100755 --- a/Droidnix/install_Droidnix.sh +++ b/Droidnix/install_Droidnix.sh @@ -1,30 +1,21 @@ #!/usr/bin/env bash - set -euo pipefail ### ───────────────────────────── -### Step 0 — Request sudo upfront +### Step 0 — Sudo preflight ### ───────────────────────────── -if ! command -v sudo >/dev/null 2>&1; then - echo "Error: sudo is required." - exit 1 -fi +command -v sudo >/dev/null 2>&1 || { echo "sudo required"; exit 1; } -echo "Requesting sudo privileges..." +echo "Requesting sudo..." sudo -v -# Keep sudo alive in the background ( while true; do sudo -n true; sleep 60; done ) & SUDO_KEEPALIVE_PID=$! -# Ensure cleanup on exit -cleanup() { - kill "$SUDO_KEEPALIVE_PID" >/dev/null 2>&1 || true -} -trap cleanup EXIT +trap 'kill $SUDO_KEEPALIVE_PID >/dev/null 2>&1 || true' EXIT ### ───────────────────────────── -### Step 1 — Collect system identity +### Step 1 — Identity ### ───────────────────────────── USER_NAME="$(whoami)" HOSTNAME_NAME="$(hostname)" @@ -36,161 +27,135 @@ TARGET_DIR="$HOME/Droidnix" REPO_URL="https://gitea.data-pro.nu/henrov/nixos/src/branch/main/Droidnix" ### ───────────────────────────── -### Step 2 — Create target directory +### Step 2 — Prepare directory ### ───────────────────────────── +rm -rf "$TARGET_DIR" mkdir -p "$TARGET_DIR" ### ───────────────────────────── -### Step 3 — Download repository +### Step 3 — Clone repository (FIXED) ### ───────────────────────────── if command -v git >/dev/null 2>&1; then - echo "Using git..." - rm -rf "$TARGET_DIR" + echo "Cloning via git..." git clone "$REPO_URL" "$TARGET_DIR" - -elif command -v wget >/dev/null 2>&1; then - echo "Using wget..." - TMP_ZIP="/tmp/droidnix.zip" - wget -O "$TMP_ZIP" "$REPO_URL/archive/main.zip" - unzip -o "$TMP_ZIP" -d /tmp - rm -rf "$TARGET_DIR" - mv /tmp/Droidnix-main "$TARGET_DIR" - -elif command -v curl >/dev/null 2>&1; then - echo "Using curl..." - TMP_ZIP="/tmp/droidnix.zip" - curl -L "$REPO_URL/archive/main.zip" -o "$TMP_ZIP" - unzip -o "$TMP_ZIP" -d /tmp - rm -rf "$TARGET_DIR" - mv /tmp/Droidnix-main "$TARGET_DIR" - else - echo "Error: git, wget, or curl required." + echo "ERROR: git is required (ZIP fallback removed because it was broken)" exit 1 fi ### ───────────────────────────── -### Step 4 — Rename files/folders (deepest first) +### Step 4 — Rename safely ### ───────────────────────────── -echo "Renaming paths..." +echo "Renaming files..." -find "$TARGET_DIR" -depth -name '*traveldroid*' | while read -r path; do - newpath="$(echo "$path" | sed "s/traveldroid/$HOSTNAME_NAME/g")" - mv "$path" "$newpath" +find "$TARGET_DIR" -depth -name '*traveldroid*' -print0 | while IFS= read -r -d '' path; do + mv "$path" "${path//traveldroid/$HOSTNAME_NAME}" done -find "$TARGET_DIR" -depth -name '*henrov*' | while read -r path; do - newpath="$(echo "$path" | sed "s/henrov/$USER_NAME/g")" - mv "$path" "$newpath" +find "$TARGET_DIR" -depth -name '*henrov*' -print0 | while IFS= read -r -d '' path; do + mv "$path" "${path//henrov/$USER_NAME}" done ### ───────────────────────────── -### Step 5 — Replace strings in file contents +### Step 5 — Content replacement ### ───────────────────────────── -echo "Replacing file contents..." +echo "Processing files..." is_text() { file --mime "$1" | grep -q text } +export USER_NAME HOSTNAME_NAME TARGET_DIR + +# generated directory if [ -d "$TARGET_DIR/generated" ]; then - find "$TARGET_DIR/generated" -type f | while read -r f; do + find "$TARGET_DIR/generated" -type f -print0 | while IFS= read -r -d '' f; do is_text "$f" && sed -i "s/henrov/$USER_NAME/g" "$f" done fi README="$TARGET_DIR/README.org" +# org block replacement if [ -f "$README" ]; then - awk -v user="$USER_NAME" -v host="$HOSTNAME_NAME" ' - BEGIN { inblock=0 } - /^\*\* =/ { inblock=1 } - /^\#\+END_SRC/ { inblock=0 } - { - if (inblock) { - gsub(/henrov/, user) - gsub(/traveldroid/, host) - } - print - }' "$README" > "$README.tmp" && mv "$README.tmp" "$README" +awk -v user="$USER_NAME" -v host="$HOSTNAME_NAME" ' +BEGIN { inblock=0 } + /^\*\* =/ { inblock=1 } + /^\#\+END_SRC/ { inblock=0 } +{ + if (inblock) { + gsub(/henrov/, user) + gsub(/traveldroid/, host) + } + print +}' "$README" > "$README.tmp" && mv "$README.tmp" "$README" fi -find "$TARGET_DIR" -type f | while read -r f; do - if is_text "$f"; then - sed -i \ - -e "s|~/Repos/nixos/Droidnix|~/Droidnix|g" \ - -e "s/traveldroid/$HOSTNAME_NAME/g" \ - "$f" - fi +# global replacements +find "$TARGET_DIR" -type f -print0 | while IFS= read -r -d '' f; do + is_text "$f" || continue + sed -i \ + -e "s|~/Repos/nixos/Droidnix|~/Droidnix|g" \ + -e "s/traveldroid/$HOSTNAME_NAME/g" \ + "$f" done ### ───────────────────────────── -### Step 6 — Generate hardware config +### Step 6 — Hardware config ### ───────────────────────────── HOST_DIR="$TARGET_DIR/generated/hosts/$HOSTNAME_NAME" mkdir -p "$HOST_DIR" -echo "Generating hardware configuration..." +echo "Generating hardware config..." sudo nixos-generate-config --show-hardware-config \ > "$HOST_DIR/hardware-configuration.nix" ### ───────────────────────────── -### Step 7 — Inject into README.org +### Step 7 — Inject into README ### ───────────────────────────── if [ -f "$README" ]; then echo "Updating README.org..." - awk -v host="$HOSTNAME_NAME" -v file="$HOST_DIR/hardware-configuration.nix" ' - BEGIN { - target = "#+BEGIN_SRC nix :tangle generated/hosts/" host "/hardware-configuration.nix :noweb yes :mkdirp yes :eval never" - inblock=0 - } - $0 == target { - print - while ((getline line < file) > 0) print line - inblock=1 - next - } - inblock && $0 == "#+END_SRC" { - print - inblock=0 - next - } - !inblock { print } - ' "$README" > "$README.tmp" && mv "$README.tmp" "$README" +awk -v host="$HOSTNAME_NAME" -v file="$HOST_DIR/hardware-configuration.nix" ' +BEGIN { + target = "#+BEGIN_SRC nix :tangle generated/hosts/" host "/hardware-configuration.nix :noweb yes :mkdirp yes :eval never" + inblock=0 +} +$0 == target { + print + while ((getline line < file) > 0) print line + inblock=1 + next +} +inblock && $0 == "#+END_SRC" { + print + inblock=0 + next +} +!inblock { print } +' "$README" > "$README.tmp" && mv "$README.tmp" "$README" fi ### ───────────────────────────── -### Step 8 — Build and activate +### Step 8 — Build system ### ───────────────────────────── -echo "Building NixOS configuration..." +echo "Rebuilding NixOS..." cd "$TARGET_DIR" sudo nixos-rebuild switch --flake ".#$HOSTNAME_NAME" ### ───────────────────────────── -### Step 9 — Inform user +### Step 9 — Done ### ───────────────────────────── cat <