mirror of
https://github.com/Cian-H/My_NixOS_Config.git
synced 2026-05-08 14:11:46 +01:00
133 lines
4.1 KiB
Makefile
133 lines
4.1 KiB
Makefile
set shell := ["bash", "-c"]
|
|
|
|
git := "true"
|
|
flake := "true"
|
|
flatpak := "true"
|
|
|
|
# Show this interactive menu
|
|
default:
|
|
@just --choose
|
|
|
|
_git-sync:
|
|
@if [ -n "$(git status --porcelain)" ]; then \
|
|
if git status --porcelain | grep -q "flake.lock"; then \
|
|
echo ">> flake.lock is dirty. Resetting to avoid pull conflicts..."; \
|
|
git checkout flake.lock; \
|
|
fi; \
|
|
if [ -n "$(git status --porcelain)" ]; then \
|
|
echo ">> Stashing remaining local changes..."; \
|
|
git stash; \
|
|
git pull --ff-only --recurse-submodules; \
|
|
git submodule update --remote --recursive; \
|
|
git stash pop; \
|
|
else \
|
|
git pull --ff-only --recurse-submodules; \
|
|
git submodule update --remote --recursive; \
|
|
fi; \
|
|
else \
|
|
git pull --ff-only --recurse-submodules; \
|
|
git submodule update --remote --recursive; \
|
|
fi
|
|
|
|
_flake-update:
|
|
nix flake update
|
|
|
|
# Safely commit the lockfile changes
|
|
commit-lock:
|
|
git add flake.lock
|
|
git commit -m "chore: update flake.lock" || echo "No changes to commit"
|
|
|
|
# Sync git and update flake inputs (override with git=false or flake=false)
|
|
prebuild:
|
|
@if [ "{{git}}" == "true" ]; then \
|
|
echo ">> Syncing Git..."; \
|
|
just _git-sync; \
|
|
fi
|
|
@if [ "{{flake}}" == "true" ]; then \
|
|
echo ">> Updating Flake..."; \
|
|
just _flake-update; \
|
|
fi
|
|
|
|
_update-root:
|
|
@if [ -f /etc/NIXOS ] && grep -q "nixos" /etc/os-release 2>/dev/null; then \
|
|
sudo nixos-rebuild switch --flake .?submodules=1#$(hostname); \
|
|
fi
|
|
|
|
# Rebuild and switch NixOS system configuration
|
|
update-root: prebuild _update-root
|
|
|
|
# Install Home Manager standalone (useful for initial non-NixOS setup)
|
|
install-home:
|
|
home-manager switch --flake .?submodules=1#$(whoami)@core \
|
|
--extra-experimental-features nix-command \
|
|
--extra-experimental-features flakes
|
|
|
|
_update-home:
|
|
home-manager switch --flake .?submodules=1#$(whoami)@$(hostname) \
|
|
|| home-manager switch --flake .?submodules=1#$(whoami)@core
|
|
|
|
# Rebuild and switch Home Manager configuration
|
|
update-home: prebuild _update-home
|
|
|
|
# Quick update skipping git and flake syncs
|
|
quick-update:
|
|
just git=false flake=false update
|
|
|
|
# Update the system without fetching the latest git commits
|
|
nogit-update:
|
|
just git=false update
|
|
|
|
# Update and clean up Flatpak packages
|
|
update-flatpaks:
|
|
@if [ "{{flatpak}}" == "true" ] && command -v flatpak &> /dev/null; then \
|
|
echo ">> Updating Flatpaks..."; \
|
|
flatpak update -y; \
|
|
flatpak uninstall --unused -y; \
|
|
else \
|
|
echo ">> Flatpak not found or disabled. Skipping."; \
|
|
fi
|
|
|
|
# View the 5 most recent NixOS and Home Manager generations
|
|
history:
|
|
@echo ">> System Generations:"
|
|
@nix-env -p /nix/var/nix/profiles/system --list-generations | tail -n 5
|
|
@echo "\n>> Home Manager Generations:"
|
|
@home-manager generations | head -n 5
|
|
|
|
# Open a Nix REPL loaded with the current flake
|
|
repl:
|
|
nix repl --file flake.nix
|
|
|
|
# Fully update the system, home-manager, and flatpaks
|
|
update: prebuild _update-root _update-home update-flatpaks
|
|
|
|
# Preview system changes without activating them
|
|
dry-run: prebuild
|
|
sudo nixos-rebuild dry-activate --flake .?submodules=1#$(hostname)
|
|
|
|
# Run Nix and Flatpak garbage collection. Optionally specify age (e.g., 'just cleanup 7d')
|
|
cleanup days="":
|
|
@if [ -n "{{days}}" ]; then \
|
|
echo ">> Deleting system generations older than {{days}}..."; \
|
|
sudo nix-collect-garbage --delete-older-than {{days}}; \
|
|
fi
|
|
@echo ">> Cleaning Nix Store..."
|
|
nix-store --gc
|
|
nix-store --optimise
|
|
@if command -v flatpak &> /dev/null; then \
|
|
echo ">> Cleaning unused Flatpaks..."; \
|
|
flatpak uninstall --unused -y; \
|
|
fi
|
|
|
|
# Open the editor (nvim, yazi, or heh) for a target
|
|
edit target:
|
|
@direnv exec . scripts/edit.py "{{target}}"
|
|
|
|
# Edit packages.nix for a specific system/user (run 'just packages help' for flags)
|
|
packages *flags:
|
|
@direnv exec . scripts/packages.bb {{flags}}
|
|
|
|
# Bootstrap a fresh system from the repo
|
|
bootstrap:
|
|
@direnv exec . scripts/bootstrap.py
|