#!/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 <