main
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/carthage/boot
46host/carthage/boot:
47 nixos-rebuild --target-host root@carthage.vpn --flake .#carthage boot
48
49.PHONY: host/carthage/switch
50host/carthage/switch:
51 nixos-rebuild --target-host root@carthage.vpn --flake .#carthage switch
52
53##@ Home Manager (non-NixOS hosts)
54
55home/%/switch: FORCE ## Switch a home-manager config (e.g., make home/vdemeest@aomi/switch)
56 nix run home-manager -- switch --flake .#$* -b backup
57
58.PHONY: host/aomi/build
59host/aomi/build: ## Build home-manager + fedora configs for aomi
60 nix build .#homeConfigurations.vdemeest@aomi.activationPackage --no-link
61 nix build .#fedoraConfigs.aomi --no-link
62
63.PHONY: host/aomi/switch
64host/aomi/switch: home/vdemeest@aomi/switch ## Switch home-manager for aomi
65
66.PHONY: host/kyushu/build
67host/kyushu/build: ## Build home-manager + fedora configs for kyushu
68 nix build .#homeConfigurations.vdemeest@kyushu.activationPackage --no-link
69 nix build .#fedoraConfigs.kyushu --no-link
70
71.PHONY: host/kyushu/switch
72host/kyushu/switch: home/vdemeest@kyushu/switch ## Switch home-manager for kyushu
73
74##@ Local System Operations
75
76.PHONY: boot
77boot: ## Build and activate local system on next boot
78 sudo nixos-rebuild --flake .# boot
79
80.PHONY: switch
81switch: ## Build and activate local system immediately
82 sudo nixos-rebuild --flake .# switch
83
84.PHONY: dry-build
85dry-build: ## Test build local system without activating
86 nixos-rebuild --flake .# dry-build
87
88.PHONY: build
89build: ## Build local system without activating
90 nixos-rebuild --flake .# build
91
92##@ Development
93
94.PHONY: pre-commit
95pre-commit: fmt ## Run pre-commit checks (formatting)
96
97.PHONY: fmt
98fmt: ## Format Nix files
99 nixfmt-plus
100
101##@ Dotfiles
102
103.PHONY: dots
104dots: ## Build dotfiles
105 @$(MAKE) -C dots
106
107.PHONY: android/ssh-config
108android/ssh-config: ## Generate Android SSH config from globals.nix
109 nix eval --raw -f android/common/generate-ssh-config.nix > android/common/ssh_config
110 @echo "✅ android/common/ssh_config regenerated"
111
112##@ Keyboards
113
114.PHONY: keyboards keyboards/moonlander/build keyboards/moonlander/flash keyboards/moonlander/update keyboards/moonlander/clean
115.PHONY: keyboards/eyelash_corne/build keyboards/eyelash_corne/flash
116.PHONY: keyboards/draw keyboards/moonlander/draw keyboards/eyelash_corne/draw
117
118keyboards: ## Show keyboard-specific help
119 @$(MAKE) -C keyboards help
120
121keyboards/moonlander/build: ## Build Moonlander QMK firmware
122 @$(MAKE) -C keyboards moonlander/build
123
124keyboards/moonlander/flash: ## Flash Moonlander firmware
125 @$(MAKE) -C keyboards moonlander/flash
126
127keyboards/moonlander/update: ## Update Moonlander QMK repository
128 @$(MAKE) -C keyboards moonlander/update
129
130keyboards/moonlander/clean: ## Clean Moonlander build artifacts
131 @$(MAKE) -C keyboards moonlander/clean
132
133keyboards/eyelash_corne/build: ## Build Eyelash Corne ZMK firmware
134 @$(MAKE) -C keyboards eyelash_corne/build
135
136keyboards/eyelash_corne/flash: ## Flash Eyelash Corne firmware
137 @$(MAKE) -C keyboards eyelash_corne/flash
138
139keyboards/draw: ## Generate keymap SVGs for all keyboards
140 @$(MAKE) -C keyboards draw
141
142keyboards/moonlander/draw: ## Generate Moonlander keymap SVG
143 @$(MAKE) -C keyboards moonlander/draw
144
145keyboards/eyelash_corne/draw: ## Generate Eyelash Corne keymap SVG
146 @$(MAKE) -C keyboards eyelash_corne/draw
147
148##@ DNS Management
149
150.PHONY: dns-show
151dns-show: ## Show current DNS records
152 @bash tools/show-dns.sh
153
154.PHONY: dns-update-gandi
155dns-update-gandi: ## Update Gandi DNS records
156 @bash tools/update-gandi-dns.sh
157
158.PHONY: dns-update-gandi-dry-run
159dns-update-gandi-dry-run: ## Dry-run Gandi DNS update
160 @bash tools/update-gandi-dns.sh --dry-run
161
162##@ Alpine Diskless Appliances
163
164.PHONY: alpine/generate
165alpine/generate: ## Generate DNS zones and WireGuard configs from Nix
166 nix build .#dns-zones -o alpine/generated/zones
167 nix build .#wg-configs -o alpine/generated/wireguard
168
169alpine/build/%: alpine/generate ## Build Alpine appliance (e.g. alpine/build/athena)
170 ./alpine/build.sh $*
171
172alpine/deploy/%: ## Deploy Alpine appliance to host (e.g. alpine/deploy/athena)
173 ./alpine/deploy.sh $* update
174
175alpine/test/%: ## Test Alpine appliance in QEMU (e.g. alpine/test/athena)
176 ./alpine/test.sh $*
177
178alpine/stop/%: ## Stop QEMU test for a host (e.g. alpine/stop/athena)
179 ./alpine/test.sh $* stop
180
181alpine/validate/%: ## Validate running QEMU test (e.g. alpine/validate/athena)
182 ./alpine/test.sh $* validate
183
184alpine/flash/%: ## Flash SD card for a host (e.g. alpine/flash/athena DEVICE=/dev/sda)
185 ./alpine/flash.sh $* $(DEVICE)
186
187.PHONY: alpine/all
188alpine/all: alpine/build/athena alpine/build/demeter alpine/build/aix ## Build all Alpine appliances
189
190##@ Maintenance
191
192.PHONY: clean
193clean: clean-system clean-results ## Clean old generations and build results
194
195.PHONY: clean-system
196clean-system: ## Delete system generations older than 15 days
197 sudo nix-env --profile /nix/var/nix/profiles/system --delete-generations 15d
198
199.PHONY: clean-results
200clean-results: ## Remove build result symlinks
201 rm -f result result-*
202
203.PHONY: update
204update: ## Update flake inputs
205 nix flake update
206
207FORCE: