Files
nix-home-manager/scripts/check-home-manager.sh

121 lines
4.7 KiB
Bash
Executable File

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