fedora-csb-system-manager
  1# Makefile for home
  2HOSTS          = $(shell nix flake show --json --all-systems 2>/dev/null | yq '.nixosConfigurations.[] | key')
  3HOSTS_BUILD    = $(addprefix host/, $(addsuffix /build,$(HOSTS)))
  4
  5.PHONY: all
  6all: help
  7
  8.PHONY: help
  9help: ## Show this help message
 10	@echo 'Usage: make [target]'
 11	@echo ''
 12	@echo 'Available targets:'
 13	@awk 'BEGIN {FS = ":.*##"} \
 14		/^[a-zA-Z_\/%-]+:.*?##/ { printf "  %-30s %s\n", $$1, $$2 } \
 15		/^##@/ { printf "\n%s\n", substr($$0, 5) }' $(MAKEFILE_LIST)
 16
 17##@ Host Operations (Remote)
 18
 19.PHONY: hosts
 20hosts: ${HOSTS_BUILD} ## List and build all hosts
 21	echo ${HOSTS_BUILD} ${HOSTS}
 22
 23host/%/build: FORCE ## Build a specific remote host (e.g., make host/demeter/build)
 24	nix build .#nixosConfigurations.$*.config.system.build.toplevel --no-link
 25
 26host/%/boot: FORCE ## Deploy to remote host and activate on next boot (e.g., make host/demeter/boot)
 27	nixos-rebuild --target-host root@$*.sbr.pm --flake .#$* boot
 28
 29host/%/switch: FORCE ## Deploy to remote host and activate immediately (e.g., make host/demeter/switch)
 30	nixos-rebuild --target-host root@$*.sbr.pm --flake .#$* switch
 31
 32# Host-specific overrides (non-standard DNS/network)
 33.PHONY: host/nagoya/boot
 34host/nagoya/boot:
 35	nixos-rebuild --target-host root@192.168.1.80 --flake .#nagoya boot
 36
 37.PHONY: host/kobe/boot
 38host/kobe/boot:
 39	nixos-rebuild --target-host root@192.168.1.77 --flake .#kobe boot
 40
 41.PHONY: host/aix/boot
 42host/aix/boot:
 43	nixos-rebuild --target-host root@10.100.0.89 --flake .#aix boot
 44
 45.PHONY: host/kerkouane/boot
 46host/kerkouane/boot:
 47	nixos-rebuild --target-host root@kerkouane.vpn --flake .#kerkouane boot
 48
 49.PHONY: host/kerkouane/switch
 50host/kerkouane/switch:
 51	nixos-rebuild --target-host root@kerkouane.vpn --flake .#kerkouane switch
 52
 53##@ Local System Operations
 54
 55.PHONY: boot
 56boot: ## Build and activate local system on next boot
 57	sudo nixos-rebuild --flake .# boot
 58
 59.PHONY: switch
 60switch: ## Build and activate local system immediately
 61	sudo nixos-rebuild --flake .# switch
 62
 63.PHONY: dry-build
 64dry-build: ## Test build local system without activating
 65	nixos-rebuild --flake .# dry-build
 66
 67.PHONY: build
 68build: ## Build local system without activating
 69	nixos-rebuild --flake .# build
 70
 71##@ Development
 72
 73.PHONY: pre-commit
 74pre-commit: fmt ## Run pre-commit checks (formatting)
 75
 76.PHONY: fmt
 77fmt: ## Format Nix files
 78	nixfmt-plus
 79
 80##@ Dotfiles
 81
 82.PHONY: dots
 83dots: ## Build dotfiles
 84	@$(MAKE) -C dots
 85
 86##@ Keyboards
 87
 88.PHONY: keyboards keyboards/moonlander/build keyboards/moonlander/flash keyboards/moonlander/update keyboards/moonlander/clean
 89.PHONY: keyboards/eyelash_corne/build keyboards/eyelash_corne/flash
 90.PHONY: keyboards/draw keyboards/moonlander/draw keyboards/eyelash_corne/draw
 91
 92keyboards: ## Show keyboard-specific help
 93	@$(MAKE) -C keyboards help
 94
 95keyboards/moonlander/build: ## Build Moonlander QMK firmware
 96	@$(MAKE) -C keyboards moonlander/build
 97
 98keyboards/moonlander/flash: ## Flash Moonlander firmware
 99	@$(MAKE) -C keyboards moonlander/flash
100
101keyboards/moonlander/update: ## Update Moonlander QMK repository
102	@$(MAKE) -C keyboards moonlander/update
103
104keyboards/moonlander/clean: ## Clean Moonlander build artifacts
105	@$(MAKE) -C keyboards moonlander/clean
106
107keyboards/eyelash_corne/build: ## Build Eyelash Corne ZMK firmware
108	@$(MAKE) -C keyboards eyelash_corne/build
109
110keyboards/eyelash_corne/flash: ## Flash Eyelash Corne firmware
111	@$(MAKE) -C keyboards eyelash_corne/flash
112
113keyboards/draw: ## Generate keymap SVGs for all keyboards
114	@$(MAKE) -C keyboards draw
115
116keyboards/moonlander/draw: ## Generate Moonlander keymap SVG
117	@$(MAKE) -C keyboards moonlander/draw
118
119keyboards/eyelash_corne/draw: ## Generate Eyelash Corne keymap SVG
120	@$(MAKE) -C keyboards eyelash_corne/draw
121
122##@ DNS Management
123
124.PHONY: dns-show
125dns-show: ## Show current DNS records
126	@bash tools/show-dns.sh
127
128.PHONY: dns-update-gandi
129dns-update-gandi: ## Update Gandi DNS records
130	@bash tools/update-gandi-dns.sh
131
132.PHONY: dns-update-gandi-dry-run
133dns-update-gandi-dry-run: ## Dry-run Gandi DNS update
134	@bash tools/update-gandi-dns.sh --dry-run
135
136##@ Maintenance
137
138.PHONY: clean
139clean: clean-system clean-results ## Clean old generations and build results
140
141.PHONY: clean-system
142clean-system: ## Delete system generations older than 15 days
143	sudo nix-env --profile /nix/var/nix/profiles/system --delete-generations 15d
144
145.PHONY: clean-results
146clean-results: ## Remove build result symlinks
147	rm -f result result-*
148
149.PHONY: update
150update: ## Update flake inputs
151	nix flake update
152
153FORCE: