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/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.PHONY: host/carthage/boot
54host/carthage/boot:
55 nixos-rebuild --target-host root@carthage.vpn --flake .#carthage boot
56
57.PHONY: host/carthage/switch
58host/carthage/switch:
59 nixos-rebuild --target-host root@carthage.vpn --flake .#carthage switch
60
61##@ Local System Operations
62
63.PHONY: boot
64boot: ## Build and activate local system on next boot
65 sudo nixos-rebuild --flake .# boot
66
67.PHONY: switch
68switch: ## Build and activate local system immediately
69 sudo nixos-rebuild --flake .# switch
70
71.PHONY: dry-build
72dry-build: ## Test build local system without activating
73 nixos-rebuild --flake .# dry-build
74
75.PHONY: build
76build: ## Build local system without activating
77 nixos-rebuild --flake .# build
78
79##@ Development
80
81.PHONY: pre-commit
82pre-commit: fmt ## Run pre-commit checks (formatting)
83
84.PHONY: fmt
85fmt: ## Format Nix files
86 nixfmt-plus
87
88##@ Dotfiles
89
90.PHONY: dots
91dots: ## Build dotfiles
92 @$(MAKE) -C dots
93
94.PHONY: android/ssh-config
95android/ssh-config: ## Generate Android SSH config from globals.nix
96 nix eval --raw -f android/common/generate-ssh-config.nix > android/common/ssh_config
97 @echo "✅ android/common/ssh_config regenerated"
98
99##@ Keyboards
100
101.PHONY: keyboards keyboards/moonlander/build keyboards/moonlander/flash keyboards/moonlander/update keyboards/moonlander/clean
102.PHONY: keyboards/eyelash_corne/build keyboards/eyelash_corne/flash
103.PHONY: keyboards/draw keyboards/moonlander/draw keyboards/eyelash_corne/draw
104
105keyboards: ## Show keyboard-specific help
106 @$(MAKE) -C keyboards help
107
108keyboards/moonlander/build: ## Build Moonlander QMK firmware
109 @$(MAKE) -C keyboards moonlander/build
110
111keyboards/moonlander/flash: ## Flash Moonlander firmware
112 @$(MAKE) -C keyboards moonlander/flash
113
114keyboards/moonlander/update: ## Update Moonlander QMK repository
115 @$(MAKE) -C keyboards moonlander/update
116
117keyboards/moonlander/clean: ## Clean Moonlander build artifacts
118 @$(MAKE) -C keyboards moonlander/clean
119
120keyboards/eyelash_corne/build: ## Build Eyelash Corne ZMK firmware
121 @$(MAKE) -C keyboards eyelash_corne/build
122
123keyboards/eyelash_corne/flash: ## Flash Eyelash Corne firmware
124 @$(MAKE) -C keyboards eyelash_corne/flash
125
126keyboards/draw: ## Generate keymap SVGs for all keyboards
127 @$(MAKE) -C keyboards draw
128
129keyboards/moonlander/draw: ## Generate Moonlander keymap SVG
130 @$(MAKE) -C keyboards moonlander/draw
131
132keyboards/eyelash_corne/draw: ## Generate Eyelash Corne keymap SVG
133 @$(MAKE) -C keyboards eyelash_corne/draw
134
135##@ DNS Management
136
137.PHONY: dns-show
138dns-show: ## Show current DNS records
139 @bash tools/show-dns.sh
140
141.PHONY: dns-update-gandi
142dns-update-gandi: ## Update Gandi DNS records
143 @bash tools/update-gandi-dns.sh
144
145.PHONY: dns-update-gandi-dry-run
146dns-update-gandi-dry-run: ## Dry-run Gandi DNS update
147 @bash tools/update-gandi-dns.sh --dry-run
148
149##@ Maintenance
150
151.PHONY: clean
152clean: clean-system clean-results ## Clean old generations and build results
153
154.PHONY: clean-system
155clean-system: ## Delete system generations older than 15 days
156 sudo nix-env --profile /nix/var/nix/profiles/system --delete-generations 15d
157
158.PHONY: clean-results
159clean-results: ## Remove build result symlinks
160 rm -f result result-*
161
162.PHONY: update
163update: ## Update flake inputs
164 nix flake update
165
166FORCE: