diff --git a/Droidnix/install_Droidnix.sh b/Droidnix/install_Droidnix.sh index 0809093e0..9c574ac3a 100755 --- a/Droidnix/install_Droidnix.sh +++ b/Droidnix/install_Droidnix.sh @@ -1,161 +1,121 @@ -#!/usr/bin/env bash -set -euo pipefail +Create for me a script that does the following. +The script should run on any nixos machine. -### ───────────────────────────── -### Step 0 — Sudo preflight -### ───────────────────────────── -command -v sudo >/dev/null 2>&1 || { echo "sudo required"; exit 1; } +For git use REPO_URL="https://gitea.data-pro.nu/henrov/nixos.git" +For html use https://gitea.data-pro.nu/henrov/nixos/archive/main.zip -echo "Requesting sudo..." -sudo -v +This script is really important, my job depends on it -( while true; do sudo -n true; sleep 60; done ) & -SUDO_KEEPALIVE_PID=$! -trap 'kill $SUDO_KEEPALIVE_PID >/dev/null 2>&1 || true' EXIT -### ───────────────────────────── -### Step 1 — Identity -### ───────────────────────────── -USER_NAME="$(whoami)" -HOSTNAME_NAME="$(hostname)" -echo "User: $USER_NAME" -echo "Hostname: $HOSTNAME_NAME" -TARGET_DIR="$HOME/Droidnix" -REPO_URL="https://gitea.data-pro.nu/henrov/nixos.git" +# DroidNix Installation — Step Specification -### ───────────────────────────── -### Step 2 — Prepare directory -### ───────────────────────────── -rm -rf "$TARGET_DIR" -mkdir -p "$TARGET_DIR" +## Step 1 — Collect system identity -### ───────────────────────────── -### Step 3 — Clone repository (FIXED) -### ───────────────────────────── -if command -v git >/dev/null 2>&1; then - echo "Cloning via git..." - git clone "$REPO_URL" "$TARGET_DIR" -else - echo "ERROR: git is required (ZIP fallback removed because it was broken)" - exit 1 -fi +Store the current Unix username in a variable: `USER=$(whoami)` -### ───────────────────────────── -### Step 4 — Rename safely -### ───────────────────────────── -echo "Renaming files..." +Store the current hostname in a variable: `HOSTNAME=$(hostname)` -find "$TARGET_DIR" -depth -name '*traveldroid*' -print0 | while IFS= read -r -d '' path; do - mv "$path" "${path//traveldroid/$HOSTNAME_NAME}" -done +## Step 2 — Create target directory -find "$TARGET_DIR" -depth -name '*henrov*' -print0 | while IFS= read -r -d '' path; do - mv "$path" "${path//henrov/$USER_NAME}" -done +Create the directory `~/Droidnix` if it does not already exist. -### ───────────────────────────── -### Step 5 — Content replacement -### ───────────────────────────── -echo "Processing files..." +## Step 3 — Download the repository -is_text() { - file --mime "$1" | grep -q text -} +Download the contents of `https://gitea.data-pro.nu/henrov/nixos/src/branch/main/Droidnix` into `~/Droidnix` using the following priority: -export USER_NAME HOSTNAME_NAME TARGET_DIR +- If `git` is available: `git clone ~/Droidnix` -# generated directory -if [ -d "$TARGET_DIR/generated" ]; then - 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 +- Otherwise if `wget` is available: download the zip archive and extract it into `~/Droidnix` -README="$TARGET_DIR/README.org" +- Otherwise: use `curl` to download the zip archive and extract it into `~/Droidnix` -# 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" -fi +## Step 4 — Rename files and folders -# 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 +Perform the following renames recursively under `~/Droidnix`, processing deepest paths first to avoid conflicts: -### ───────────────────────────── -### Step 6 — Hardware config -### ───────────────────────────── -HOST_DIR="$TARGET_DIR/generated/hosts/$HOSTNAME_NAME" -mkdir -p "$HOST_DIR" +- **4.1** Rename any file or folder whose name contains `traveldroid`, replacing it with `$HOSTNAME` -echo "Generating hardware config..." +- **4.2** Rename any file or folder whose name contains `henrov`, replacing it with `$USER` -sudo nixos-generate-config --show-hardware-config \ - > "$HOST_DIR/hardware-configuration.nix" +## Step 5 — Replace strings in file contents -### ───────────────────────────── -### Step 7 — Inject into README -### ───────────────────────────── -if [ -f "$README" ]; then - echo "Updating README.org..." +Perform the following text substitutions: -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 +- **5.1** In all files under `~/Droidnix/generated/`, replace every occurrence of `henrov` with `$USER` -### ───────────────────────────── -### Step 8 — Build system -### ───────────────────────────── -echo "Rebuilding NixOS..." +- **5.2** In `~/Droidnix/[README.org](http://README.org)`, replace every occurrence of `henrov` with `$USER`, but **only within blocks** that begin with the string `** =` and end with a line matching `#+END_SRC`. Leave all text outside these blocks unchanged. -cd "$TARGET_DIR" -sudo nixos-rebuild switch --flake ".#$HOSTNAME_NAME" +- **5.3** In all files under `~/Droidnix/` (recursively, excluding binary files), replace every occurrence of `~/Repos/nixos/Droidnix` with `~/Droidnix` -### ───────────────────────────── -### Step 9 — Done -### ───────────────────────────── -cat <