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