Commit 5a26904dded6

Vincent Demeester <vincent@sbr.pm>
2025-12-08 10:10:42
chore(make): add comprehensive help system and reorganize targets
- Add `make help` as default target with organized documentation - Group targets into logical sections (Host, Local, Development, etc.) - Improve discoverability with inline help comments - Simplify keyboard and DNS target delegation Signed-off-by: Vincent Demeester <vincent@sbr.pm>
1 parent 24eb9e3
Changed files (2)
CLAUDE.md
@@ -31,15 +31,11 @@ Each host has a dedicated directory in `/systems/<hostname>` containing:
 - `extra.nix` (optional): Additional host-specific configuration
 - `home.nix` (optional): Host-specific home-manager configuration
 
-The `mkHost` function in `/lib/default.nix` combines these with common modules and applies overlays.
-
 ### System Types
 
 - **Unstable systems** (kyushu, aomi, sakhalin, foobar): Use `nixpkgs` (nixos-unstable)
 - **Stable systems** (athena, demeter, aix, aion, rhea, kerkouane): Use `nixpkgs-25_05` with specific hardware types like "rpi4" for Raspberry Pi 4
 
-Desktop systems can use either "sway" or "niri" window managers, specified in the `mkHost` call.
-
 ### Package Management
 
 Custom packages are defined in `/pkgs/default.nix` and exposed through the `additions` overlay. They are built using standard Nix packaging functions (`pkgs.callPackage`). The repository provides packages for both x86_64-linux and aarch64-linux architectures.
@@ -53,6 +49,8 @@ Secrets are managed using agenix:
 
 ## Common Commands
 
+Everything should happen using `make` (and `Makefile` accross the repository). You can use `make help` to figure out what it does.
+
 ### Building and Deploying Systems
 
 ```bash
Makefile
@@ -3,20 +3,30 @@ HOSTS          = $(shell nix flake show --json --all-systems 2>/dev/null | yq '.
 HOSTS_BUILD    = $(addprefix host/, $(addsuffix /build,$(HOSTS)))
 
 .PHONY: all
-all: dry-build
+all: help
+
+.PHONY: help
+help: ## Show this help message
+	@echo 'Usage: make [target]'
+	@echo ''
+	@echo 'Available targets:'
+	@awk 'BEGIN {FS = ":.*##"} \
+		/^[a-zA-Z_\/%-]+:.*?##/ { printf "  %-30s %s\n", $$1, $$2 } \
+		/^##@/ { printf "\n%s\n", substr($$0, 5) }' $(MAKEFILE_LIST)
+
+##@ Host Operations (Remote)
 
-# Host operations
 .PHONY: hosts
-hosts: ${HOSTS_BUILD}
+hosts: ${HOSTS_BUILD} ## List and build all hosts
 	echo ${HOSTS_BUILD} ${HOSTS}
 
-host/%/build: FORCE
+host/%/build: FORCE ## Build a specific remote host (e.g., make host/demeter/build)
 	nix build .#nixosConfigurations.$*.config.system.build.toplevel --no-link
 
-host/%/boot: FORCE
+host/%/boot: FORCE ## Deploy to remote host and activate on next boot (e.g., make host/demeter/boot)
 	nixos-rebuild --target-host root@$*.sbr.pm --flake .#$* boot
 
-host/%/switch: FORCE
+host/%/switch: FORCE ## Deploy to remote host and activate immediately (e.g., make host/demeter/switch)
 	nixos-rebuild --target-host root@$*.sbr.pm --flake .#$* switch
 
 # Host-specific overrides (non-standard DNS/network)
@@ -40,131 +50,104 @@ host/kerkouane/boot:
 host/kerkouane/switch:
 	nixos-rebuild --target-host root@kerkouane.vpn --flake .#kerkouane switch
 
-# Local system operations
+##@ Local System Operations
+
 .PHONY: boot
-boot:
+boot: ## Build and activate local system on next boot
 	sudo nixos-rebuild --flake .# boot
 
 .PHONY: switch
-switch:
+switch: ## Build and activate local system immediately
 	sudo nixos-rebuild --flake .# switch
 
 .PHONY: dry-build
-dry-build:
+dry-build: ## Test build local system without activating
 	nixos-rebuild --flake .# dry-build
 
 .PHONY: build
-build:
+build: ## Build local system without activating
 	nixos-rebuild --flake .# build
 
-# Development
+##@ Development
+
 .PHONY: pre-commit
-pre-commit: fmt
+pre-commit: fmt ## Run pre-commit checks (formatting)
 
 .PHONY: fmt
-fmt:
+fmt: ## Format Nix files
 	nixfmt-plus
 
-# Dotfiles
+##@ Dotfiles
+
 .PHONY: dots
-dots:
+dots: ## Build dotfiles
 	@$(MAKE) -C dots
 
-# Keyboards
+##@ Keyboards
+
 .PHONY: keyboards keyboards/moonlander/build keyboards/moonlander/flash keyboards/moonlander/update keyboards/moonlander/clean
 .PHONY: keyboards/eyelash_corne/build keyboards/eyelash_corne/flash
 .PHONY: keyboards/draw keyboards/moonlander/draw keyboards/eyelash_corne/draw
 
-keyboards/moonlander/build:
-	@$(MAKE) -C keyboards moonlander/build
-
-keyboards/moonlander/flash:
-	@$(MAKE) -C keyboards moonlander/flash
-
-keyboards/moonlander/update:
-	@$(MAKE) -C keyboards moonlander/update
-
-keyboards/moonlander/clean:
-	@$(MAKE) -C keyboards moonlander/clean
-
-keyboards/eyelash_corne/build:
-	@$(MAKE) -C keyboards eyelash_corne/build
-
-keyboards/eyelash_corne/flash:
-	@$(MAKE) -C keyboards eyelash_corne/flash
-
-keyboards/draw:
-	@$(MAKE) -C keyboards draw
-
-keyboards/moonlander/draw:
-	@$(MAKE) -C keyboards moonlander/draw
-
-keyboards/eyelash_corne/draw:
-	@$(MAKE) -C keyboards eyelash_corne/draw
-
-keyboards:
+keyboards: ## Show keyboard-specific help
 	@$(MAKE) -C keyboards help
 
-# DNS
+keyboards/moonlander/build: ## Build Moonlander QMK firmware
+	@$(MAKE) -C keyboards moonlander/build
+
+keyboards/moonlander/flash: ## Flash Moonlander firmware
+	@$(MAKE) -C keyboards moonlander/flash
+
+keyboards/moonlander/update: ## Update Moonlander QMK repository
+	@$(MAKE) -C keyboards moonlander/update
+
+keyboards/moonlander/clean: ## Clean Moonlander build artifacts
+	@$(MAKE) -C keyboards moonlander/clean
+
+keyboards/eyelash_corne/build: ## Build Eyelash Corne ZMK firmware
+	@$(MAKE) -C keyboards eyelash_corne/build
+
+keyboards/eyelash_corne/flash: ## Flash Eyelash Corne firmware
+	@$(MAKE) -C keyboards eyelash_corne/flash
+
+keyboards/draw: ## Generate keymap SVGs for all keyboards
+	@$(MAKE) -C keyboards draw
+
+keyboards/moonlander/draw: ## Generate Moonlander keymap SVG
+	@$(MAKE) -C keyboards moonlander/draw
+
+keyboards/eyelash_corne/draw: ## Generate Eyelash Corne keymap SVG
+	@$(MAKE) -C keyboards eyelash_corne/draw
+
+##@ DNS Management
+
 .PHONY: dns-show
-dns-show:
+dns-show: ## Show current DNS records
 	@bash tools/show-dns.sh
 
 .PHONY: dns-update-gandi
-dns-update-gandi:
+dns-update-gandi: ## Update Gandi DNS records
 	@bash tools/update-gandi-dns.sh
 
 .PHONY: dns-update-gandi-dry-run
-dns-update-gandi-dry-run:
+dns-update-gandi-dry-run: ## Dry-run Gandi DNS update
 	@bash tools/update-gandi-dns.sh --dry-run
 
-# Media Management (*arr Stack)
-# Default values (can be overridden via environment or make arguments)
-LIDARR_URL ?= https://lidarr.sbr.pm
-LIDARR_API_KEY ?= $(shell passage show home/services/lidarr)
-SONARR_URL ?= https://sonarr.sbr.pm
-SONARR_API_KEY ?= $(shell passage show home/services/sonarr)
-RADARR_URL ?= https://radarr.sbr.pm
-RADARR_API_KEY ?= $(shell passage show home/services/radarr)
-EXTRA_ARGS ?=
+##@ Maintenance
 
-.PHONY: lidarr-rename lidarr-retag lidarr-update-paths
-.PHONY: sonarr-rename
-.PHONY: radarr-rename
-
-# Lidarr
-lidarr-rename:
-	@tools/lidarr-rename-albums.py $(LIDARR_URL) $(LIDARR_API_KEY) $(EXTRA_ARGS)
-
-lidarr-retag:
-	@tools/lidarr-retag-albums.py $(LIDARR_URL) $(LIDARR_API_KEY) $(EXTRA_ARGS)
-
-lidarr-update-paths:
-	@tools/lidarr-update-paths.py $(LIDARR_URL) $(LIDARR_API_KEY) $(LIDARR_ROOT_PATH) $(EXTRA_ARGS)
-
-# Sonarr
-sonarr-rename:
-	@tools/sonarr-rename-series.py $(SONARR_URL) $(SONARR_API_KEY) $(EXTRA_ARGS)
-
-# Radarr
-radarr-rename:
-	@tools/radarr-rename-movies.py $(RADARR_URL) $(RADARR_API_KEY) $(EXTRA_ARGS)
-
-# Maintenance
 .PHONY: clean
-clean: clean-system clean-results
+clean: clean-system clean-results ## Clean old generations and build results
 
 .PHONY: clean-system
-clean-system:
+clean-system: ## Delete system generations older than 15 days
 	sudo nix-env --profile /nix/var/nix/profiles/system --delete-generations 15d
 
 .PHONY: clean-results
-clean-results:
+clean-results: ## Remove build result symlinks
 	rm -f result result-*
 
-# Update flake inputs
 .PHONY: update
-update:
+update: ## Update flake inputs
 	nix flake update
 
 FORCE: