problem with url
This commit is contained in:
@@ -1,30 +1,21 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
### Step 0 — Request sudo upfront
|
### Step 0 — Sudo preflight
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
if ! command -v sudo >/dev/null 2>&1; then
|
command -v sudo >/dev/null 2>&1 || { echo "sudo required"; exit 1; }
|
||||||
echo "Error: sudo is required."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Requesting sudo privileges..."
|
echo "Requesting sudo..."
|
||||||
sudo -v
|
sudo -v
|
||||||
|
|
||||||
# Keep sudo alive in the background
|
|
||||||
( while true; do sudo -n true; sleep 60; done ) &
|
( while true; do sudo -n true; sleep 60; done ) &
|
||||||
SUDO_KEEPALIVE_PID=$!
|
SUDO_KEEPALIVE_PID=$!
|
||||||
|
|
||||||
# Ensure cleanup on exit
|
trap 'kill $SUDO_KEEPALIVE_PID >/dev/null 2>&1 || true' EXIT
|
||||||
cleanup() {
|
|
||||||
kill "$SUDO_KEEPALIVE_PID" >/dev/null 2>&1 || true
|
|
||||||
}
|
|
||||||
trap cleanup EXIT
|
|
||||||
|
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
### Step 1 — Collect system identity
|
### Step 1 — Identity
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
USER_NAME="$(whoami)"
|
USER_NAME="$(whoami)"
|
||||||
HOSTNAME_NAME="$(hostname)"
|
HOSTNAME_NAME="$(hostname)"
|
||||||
@@ -36,161 +27,135 @@ TARGET_DIR="$HOME/Droidnix"
|
|||||||
REPO_URL="https://gitea.data-pro.nu/henrov/nixos/src/branch/main/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"
|
mkdir -p "$TARGET_DIR"
|
||||||
|
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
### Step 3 — Download repository
|
### Step 3 — Clone repository (FIXED)
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
if command -v git >/dev/null 2>&1; then
|
if command -v git >/dev/null 2>&1; then
|
||||||
echo "Using git..."
|
echo "Cloning via git..."
|
||||||
rm -rf "$TARGET_DIR"
|
|
||||||
git clone "$REPO_URL" "$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
|
else
|
||||||
echo "Error: git, wget, or curl required."
|
echo "ERROR: git is required (ZIP fallback removed because it was broken)"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
find "$TARGET_DIR" -depth -name '*traveldroid*' -print0 | while IFS= read -r -d '' path; do
|
||||||
newpath="$(echo "$path" | sed "s/traveldroid/$HOSTNAME_NAME/g")"
|
mv "$path" "${path//traveldroid/$HOSTNAME_NAME}"
|
||||||
mv "$path" "$newpath"
|
|
||||||
done
|
done
|
||||||
|
|
||||||
find "$TARGET_DIR" -depth -name '*henrov*' | while read -r path; do
|
find "$TARGET_DIR" -depth -name '*henrov*' -print0 | while IFS= read -r -d '' path; do
|
||||||
newpath="$(echo "$path" | sed "s/henrov/$USER_NAME/g")"
|
mv "$path" "${path//henrov/$USER_NAME}"
|
||||||
mv "$path" "$newpath"
|
|
||||||
done
|
done
|
||||||
|
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
### Step 5 — Replace strings in file contents
|
### Step 5 — Content replacement
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
echo "Replacing file contents..."
|
echo "Processing files..."
|
||||||
|
|
||||||
is_text() {
|
is_text() {
|
||||||
file --mime "$1" | grep -q text
|
file --mime "$1" | grep -q text
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export USER_NAME HOSTNAME_NAME TARGET_DIR
|
||||||
|
|
||||||
|
# generated directory
|
||||||
if [ -d "$TARGET_DIR/generated" ]; then
|
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"
|
is_text "$f" && sed -i "s/henrov/$USER_NAME/g" "$f"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
README="$TARGET_DIR/README.org"
|
README="$TARGET_DIR/README.org"
|
||||||
|
|
||||||
|
# org block replacement
|
||||||
if [ -f "$README" ]; then
|
if [ -f "$README" ]; then
|
||||||
awk -v user="$USER_NAME" -v host="$HOSTNAME_NAME" '
|
awk -v user="$USER_NAME" -v host="$HOSTNAME_NAME" '
|
||||||
BEGIN { inblock=0 }
|
BEGIN { inblock=0 }
|
||||||
/^\*\* =/ { inblock=1 }
|
/^\*\* =/ { inblock=1 }
|
||||||
/^\#\+END_SRC/ { inblock=0 }
|
/^\#\+END_SRC/ { inblock=0 }
|
||||||
{
|
{
|
||||||
if (inblock) {
|
if (inblock) {
|
||||||
gsub(/henrov/, user)
|
gsub(/henrov/, user)
|
||||||
gsub(/traveldroid/, host)
|
gsub(/traveldroid/, host)
|
||||||
}
|
}
|
||||||
print
|
print
|
||||||
}' "$README" > "$README.tmp" && mv "$README.tmp" "$README"
|
}' "$README" > "$README.tmp" && mv "$README.tmp" "$README"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
find "$TARGET_DIR" -type f | while read -r f; do
|
# global replacements
|
||||||
if is_text "$f"; then
|
find "$TARGET_DIR" -type f -print0 | while IFS= read -r -d '' f; do
|
||||||
|
is_text "$f" || continue
|
||||||
sed -i \
|
sed -i \
|
||||||
-e "s|~/Repos/nixos/Droidnix|~/Droidnix|g" \
|
-e "s|~/Repos/nixos/Droidnix|~/Droidnix|g" \
|
||||||
-e "s/traveldroid/$HOSTNAME_NAME/g" \
|
-e "s/traveldroid/$HOSTNAME_NAME/g" \
|
||||||
"$f"
|
"$f"
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
### Step 6 — Generate hardware config
|
### Step 6 — Hardware config
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
HOST_DIR="$TARGET_DIR/generated/hosts/$HOSTNAME_NAME"
|
HOST_DIR="$TARGET_DIR/generated/hosts/$HOSTNAME_NAME"
|
||||||
mkdir -p "$HOST_DIR"
|
mkdir -p "$HOST_DIR"
|
||||||
|
|
||||||
echo "Generating hardware configuration..."
|
echo "Generating hardware config..."
|
||||||
|
|
||||||
sudo nixos-generate-config --show-hardware-config \
|
sudo nixos-generate-config --show-hardware-config \
|
||||||
> "$HOST_DIR/hardware-configuration.nix"
|
> "$HOST_DIR/hardware-configuration.nix"
|
||||||
|
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
### Step 7 — Inject into README.org
|
### Step 7 — Inject into README
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
if [ -f "$README" ]; then
|
if [ -f "$README" ]; then
|
||||||
echo "Updating README.org..."
|
echo "Updating README.org..."
|
||||||
|
|
||||||
awk -v host="$HOSTNAME_NAME" -v file="$HOST_DIR/hardware-configuration.nix" '
|
awk -v host="$HOSTNAME_NAME" -v file="$HOST_DIR/hardware-configuration.nix" '
|
||||||
BEGIN {
|
BEGIN {
|
||||||
target = "#+BEGIN_SRC nix :tangle generated/hosts/" host "/hardware-configuration.nix :noweb yes :mkdirp yes :eval never"
|
target = "#+BEGIN_SRC nix :tangle generated/hosts/" host "/hardware-configuration.nix :noweb yes :mkdirp yes :eval never"
|
||||||
inblock=0
|
inblock=0
|
||||||
}
|
}
|
||||||
$0 == target {
|
$0 == target {
|
||||||
print
|
print
|
||||||
while ((getline line < file) > 0) print line
|
while ((getline line < file) > 0) print line
|
||||||
inblock=1
|
inblock=1
|
||||||
next
|
next
|
||||||
}
|
}
|
||||||
inblock && $0 == "#+END_SRC" {
|
inblock && $0 == "#+END_SRC" {
|
||||||
print
|
print
|
||||||
inblock=0
|
inblock=0
|
||||||
next
|
next
|
||||||
}
|
}
|
||||||
!inblock { print }
|
!inblock { print }
|
||||||
' "$README" > "$README.tmp" && mv "$README.tmp" "$README"
|
' "$README" > "$README.tmp" && mv "$README.tmp" "$README"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
### Step 8 — Build and activate
|
### Step 8 — Build system
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
echo "Building NixOS configuration..."
|
echo "Rebuilding NixOS..."
|
||||||
|
|
||||||
cd "$TARGET_DIR"
|
cd "$TARGET_DIR"
|
||||||
sudo nixos-rebuild switch --flake ".#$HOSTNAME_NAME"
|
sudo nixos-rebuild switch --flake ".#$HOSTNAME_NAME"
|
||||||
|
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
### Step 9 — Inform user
|
### Step 9 — Done
|
||||||
### ─────────────────────────────
|
### ─────────────────────────────
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
|
|
||||||
Installation complete. Please reboot your system.
|
Installation complete. Reboot recommended.
|
||||||
|
|
||||||
After rebooting, any changes to your NixOS configuration must be made in
|
Edit config:
|
||||||
|
~/Droidnix/README.org
|
||||||
~/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:
|
|
||||||
|
|
||||||
|
Rebuild:
|
||||||
cd ~/Droidnix && sudo nixos-rebuild switch --flake .#$(hostname)
|
cd ~/Droidnix && sudo nixos-rebuild switch --flake .#$(hostname)
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|||||||
Reference in New Issue
Block a user