diff --git a/Droidnix/.envrc b/Droidnix/.envrc deleted file mode 100644 index e69de29bb..000000000 diff --git a/Droidnix/install_Droidnix.sh b/Droidnix/install_Droidnix.sh new file mode 100755 index 000000000..08909d229 --- /dev/null +++ b/Droidnix/install_Droidnix.sh @@ -0,0 +1,179 @@ +#!/usr/bin/env bash + +set -euo pipefail + +### ───────────────────────────── +### Step 1 — Collect system 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/src/branch/main/Droidnix" + +### ───────────────────────────── +### Step 2 — Create target directory +### ───────────────────────────── +mkdir -p "$TARGET_DIR" + +### ───────────────────────────── +### Step 3 — Download repository +### ───────────────────────────── +if command -v git >/dev/null 2>&1; then + echo "Using git..." + rm -rf "$TARGET_DIR" + 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." + exit 1 +fi + +### ───────────────────────────── +### Step 4 — Rename files/folders (deepest first) +### ───────────────────────────── +echo "Renaming paths..." + +find "$TARGET_DIR" -depth -name '*traveldroid*' | while read -r path; do + newpath="$(echo "$path" | sed "s/traveldroid/$HOSTNAME_NAME/g")" + mv "$path" "$newpath" +done + +find "$TARGET_DIR" -depth -name '*henrov*' | while read -r path; do + newpath="$(echo "$path" | sed "s/henrov/$USER_NAME/g")" + mv "$path" "$newpath" +done + +### ───────────────────────────── +### Step 5 — Replace strings in file contents +### ───────────────────────────── +echo "Replacing file contents..." + +# Helper: only text files +is_text() { + file --mime "$1" | grep -q text +} + +# 5.1 generated/* +if [ -d "$TARGET_DIR/generated" ]; then + find "$TARGET_DIR/generated" -type f | while read -r f; do + is_text "$f" && sed -i "s/henrov/$USER_NAME/g" "$f" + done +fi + +README="$TARGET_DIR/README.org" + +# 5.2 + 5.6 (org blocks only) +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 + +# 5.3 + 5.4 global replacements +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 +done + +### ───────────────────────────── +### Step 6 — Generate hardware config +### ───────────────────────────── +HOST_DIR="$TARGET_DIR/generated/hosts/$HOSTNAME_NAME" +mkdir -p "$HOST_DIR" + +echo "Generating hardware configuration..." + +sudo nixos-generate-config --show-hardware-config \ + > "$HOST_DIR/hardware-configuration.nix" + +### ───────────────────────────── +### Step 7 — Inject into README.org +### ───────────────────────────── +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" +fi + +### ───────────────────────────── +### Step 8 — Build and activate +### ───────────────────────────── +echo "Building NixOS configuration..." + +cd "$TARGET_DIR" +sudo nixos-rebuild switch --flake ".#$HOSTNAME_NAME" + +### ───────────────────────────── +### Step 9 — Inform user +### ───────────────────────────── +cat <