Added Installer

This commit is contained in:
2026-05-04 16:34:08 +02:00
parent 429d7849a8
commit 9dfff0bfcd
2 changed files with 179 additions and 0 deletions
+179
View File
@@ -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 <<EOF
Installation complete. Please reboot your system.
After rebooting, any changes to your NixOS configuration must be made in
~/Droidnix/README.org
Before rebuilding, first tangle the org file using:
emacs --batch --no-init-file ~/Droidnix/README.org \\
--eval "(require 'org)" \\
--eval "(require 'ob-tangle)" \\
--eval "(find-file \\"README.org\\")" \\
--eval "(with-temp-message \\"\\" (org-babel-tangle))" \\
--eval "(with-temp-message \\"\\" (org-html-export-to-html))"
Then rebuild with:
cd ~/Droidnix && sudo nixos-rebuild switch --flake .#$(hostname)
EOF