change from mono-home-manager to full flake multi-system configuration
This commit is contained in:
120
scripts/check-home-manager.sh
Executable file
120
scripts/check-home-manager.sh
Executable 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
|
||||
Reference in New Issue
Block a user