change from mono-home-manager to full flake multi-system configuration

This commit is contained in:
wieerwill
2025-11-30 12:28:05 +01:00
parent 5c3a992f34
commit 362f65c384
62 changed files with 4469 additions and 576 deletions

120
scripts/check-home-manager.sh Executable file
View File

@@ -0,0 +1,120 @@
#!/usr/bin/env bash
set -euo pipefail
echo "🔍 Checking if Nix is installed..."
if ! command -v nix &> /dev/null; then
echo "❌ Nix is not installed. Install it from https://nixos.org/download.html"
exit 1
fi
echo "✅ Nix is installed."
echo "🔍 Checking for conflicting Home Manager installations..."
HM_DIR="$HOME/.config/home-manager"
HM_BIN="$HOME/.nix-profile/bin/home-manager"
if [ -e "$HM_DIR/home.nix" ]; then
echo "⚠️ Found existing Home Manager config at: $HM_DIR"
echo " This may conflict with your flake-based setup. Consider backing it up or removing it."
fi
if [ -x "$HM_BIN" ]; then
echo "⚠️ Found existing Home Manager binary in nix-profile: $HM_BIN"
echo " Ensure it's not managing your home separately from your flake config."
fi
echo "📦 Gathering APT-installed packages..."
apt list --manual-installed 2>/dev/null | awk -F/ '{print tolower($1)}' | sort > /tmp/apt-installed.txt
echo "📦 Gathering Home Manager packages from flake..."
if ! nix --extra-experimental-features "nix-command flakes" eval \
".#homeConfigurations.$(hostname).config.home.packages" \
--json > /tmp/hm-pkgs.json 2>/dev/null; then
echo "❌ Failed to evaluate Home Manager flake packages. Is the attribute name $(hostname) correct?"
exit 1
fi
jq -r '.[]' /tmp/hm-pkgs.json | sed -E 's|.*/||' | sed -E 's|^[a-z0-9]{32}-||' | sed -E 's|-[0-9][^-]*$||' | sort -u > /tmp/home-manager-packages.txt
echo "apt count: $(wc -l < /tmp/apt-installed.txt)"
echo "hm count: $(wc -l < /tmp/home-manager-packages.txt)"
echo "🔁 Comparing package lists..."
comm -12 /tmp/apt-installed.txt /tmp/home-manager-packages.txt > /tmp/duplicate-packages.txt
echo "🔎 Looking for fuzzy matches..."
if [ -s /tmp/apt-installed.txt ] && [ -s /tmp/home-manager-packages.txt ]; then
grep -Fxf /tmp/apt-installed.txt /tmp/home-manager-packages.txt > /tmp/exact-matches.txt || touch /tmp/exact-matches.txt
else
touch /tmp/exact-matches.txt
fi
echo "Additional fuzzy checking (slow but useful)"
if [ -s /tmp/home-manager-packages.txt ] && [ -s /tmp/apt-installed.txt ]; then
grep -Fif /tmp/home-manager-packages.txt /tmp/apt-installed.txt > /tmp/fuzzy-matches.txt || touch /tmp/fuzzy-matches.txt
else
touch /tmp/fuzzy-matches.txt
fi
echo
if [ -s /tmp/duplicate-packages.txt ] || [ -s /tmp/exact-matches.txt ] || [ -s /tmp/fuzzy-matches.txt ]; then
echo "⚠️ Possible duplicate packages installed via APT and Home Manager:"
cat /tmp/duplicate-packages.txt /tmp/exact-matches.txt /tmp/fuzzy-matches.txt | sort -u
echo
echo "📝 You can manually remove these APT packages to avoid duplication and save space."
echo
else
echo "✅ No conflicting packages found between APT and Home Manager."
fi
# Clean up
rm /tmp/apt-installed.txt
rm /tmp/home-manager-packages.txt
rm /tmp/duplicate-packages.txt
rm /tmp/exact-matches.txt
rm /tmp/fuzzy-matches.txt
# check username and home dir
EXPECTED_USERNAME="wieerwill"
EXPECTED_HOME="/home/$EXPECTED_USERNAME"
CURRENT_USERNAME=$(whoami)
CURRENT_HOME="$HOME"
echo
echo "🔍 Current username: $CURRENT_USERNAME"
echo "📁 Current home directory: $CURRENT_HOME"
echo "🔄 Target username: $EXPECTED_USERNAME"
echo "📁 Target home directory: $EXPECTED_HOME"
echo ""
if [[ "$CURRENT_USERNAME" == "$EXPECTED_USERNAME" && "$CURRENT_HOME" == "$EXPECTED_HOME" ]]; then
echo "✅ Your username and home directory already match the Nix configuration."
else
echo "⚠️ Your system username or home directory do not match your Nix config."
echo
echo "To safely rename your user, follow these steps from a different admin user (e.g. tempadmin):"
echo
echo "$ sudo usermod -l $EXPECTED_USERNAME $CURRENT_USERNAME"
echo "$ sudo groupmod -n $EXPECTED_USERNAME $CURRENT_USERNAME"
echo "$ sudo mv /home/$CURRENT_USERNAME /home/$EXPECTED_USERNAME"
echo "$ sudo usermod -d /home/$EXPECTED_USERNAME -m $EXPECTED_USERNAME"
echo "$ sudo chown -R $EXPECTED_USERNAME:$EXPECTED_USERNAME /home/$EXPECTED_USERNAME"
echo
echo "Optional: Rename any hardcoded paths or config. Search with:"
echo "$ grep -r '$CURRENT_USERNAME' /home/$EXPECTED_USERNAME/.config"
echo ""
echo "🚨 Don't run these while logged in as $CURRENT_USERNAME!"
echo "🛠️ Create a temporary admin user first if needed:"
echo "$ sudo adduser tempadmin"
echo "$ sudo usermod -aG sudo tempadmin"
echo
echo "After renaming, log in as $EXPECTED_USERNAME and run this check script again."
exit 0
fi
echo
read -r -p "🚀 Do you want to apply the Home Manager configuration for $(hostname) now? [y/N] " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
echo "🔧 Applying Home Manager configuration..."
nix run --extra-experimental-features "nix-command flakes" --impure \
.#homeConfigurations.$(hostname).activationPackage
else
echo "❌ Skipping Home Manager activation."
fi

56
scripts/nix-check.sh Executable file
View File

@@ -0,0 +1,56 @@
#!/usr/bin/env bash
set -euo pipefail
# Set required experimental features
export NIX_CONFIG="experimental-features = nix-command flakes"
FLAKE_PATH="."
# List systems and type: nixos or home-manager
# Format: [hostname]=type:user
declare -A SYSTEMS=(
[t440p]="nixos:wieerwill"
[steamdeck]="nixos:wieerwill"
[xaorus]="home:wieerwill"
[vps04_08]="home:wieerwill"
)
echo "🔍 Checking Nix flake at: $FLAKE_PATH"
echo
# Check flake syntax and structure
echo "🧪 Running: nix flake check"
if nix flake check "$FLAKE_PATH" --show-trace; then
echo "✅ Flake syntax and outputs look good!"
else
echo "❌ Flake check failed!"
exit 1
fi
echo
# Check each system based on type
for HOST in "${!SYSTEMS[@]}"; do
IFS=":" read -r TYPE USER <<< "${SYSTEMS[$HOST]}"
echo "🔎 Checking $TYPE system: $USER@$HOST"
if [[ "$TYPE" == "nixos" ]]; then
ATTR="nixosConfigurations.${HOST}.config.system.build.toplevel"
elif [[ "$TYPE" == "home" ]]; then
ATTR="homeConfigurations.${HOST}.activationPackage"
else
echo "❌ Unknown system type for $HOST. Skipping..."
continue
fi
if OUTPUT=$(nix eval "$FLAKE_PATH"#"$ATTR" 2>&1); then
echo "$HOST: $TYPE configuration is valid."
else
echo "$HOST: $TYPE configuration check failed!"
echo "🔍 Error output:"
echo "$OUTPUT"
fi
echo
done

15
scripts/nix-maintain.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/usr/bin/env bash
set -e
HOST=$(hostname)
FLAKE_PATH="${HOME}/nixConfig"
echo "🔁 Rebuilding system for host: $HOST"
sudo nixos-rebuild switch --flake "$FLAKE_PATH#$HOST"
echo "🧹 Collecting garbage..."
sudo nix-collect-garbage -d
nix store gc
echo "✅ System rebuilt and cleaned."