# # usage: # make system=foo # make systems='foo bar' # make eval system=foo get=config.networking.extraHosts # .ONESHELL: .SHELLFLAGS := -eufc ifdef systems $(systems): parallel \ --line-buffer \ -j0 \ --no-notice \ --tagstring {} \ -q make systems= system={} ::: $(systems) else ifdef system include 0make/$(LOGNAME)/$(system).makefile .PHONY: deploy deploy:;@ system_name=$(system) deploy_host=$(deploy_host) nixpkgs_url=$(nixpkgs_url) nixpkgs_rev=$(nixpkgs_rev) secrets_dir=$(secrets_dir) prepush(){( dst=$$1 src=$$2 rsync \ --exclude .git \ --exclude .graveyard \ --exclude old \ --rsync-path="mkdir -p \"$$dst\" && rsync" \ --usermap=\*:0 \ --groupmap=\*:0 \ --delete-excluded \ -vrLptgoD \ "$$src/" "$$deploy_host:$$dst" )} prepush /root/src/shitment "$$PWD" prepush /root/src/secrets "$$secrets_dir" ssh -S none "$$deploy_host" -T env \ nixpkgs_url="$$nixpkgs_url" \ nixpkgs_rev="$$nixpkgs_rev" \ system_name="$$system_name" \ sh -euf \ <<-\EOF prefetch(){( dst=$$1 url=$$2 rev=$$3 mkdir -p "$$dst" cd "$$dst" if ! test -e .git; then git init fi if ! cur_url=$$(git config remote.origin.url 2>/dev/null); then git remote add origin "$$url" elif test "$$cur_url" != "$$url"; then git remote set-url origin "$$url" fi if test "$$(git rev-parse --verify HEAD 2>/dev/null)" != "$$rev"; then git fetch origin git checkout "$$rev" -- . git checkout -q "$$rev" git submodule init git submodule update fi git clean -dxf )} prefetch /root/src/nixpkgs "$$nixpkgs_url" "$$nixpkgs_rev" echo build system... NIXOS_CONFIG=/root/src/shitment/1systems/$(LOGNAME)/$$system_name.nix \ NIX_PATH=src \ nix-build -Q -A system '' result/bin/switch-to-configuration switch EOF .PHONY: eval eval: @nix-instantiate \ --json \ --eval \ --strict \ -A "$$get" \ -E ' import { system = builtins.currentSystem; modules = [ ./1systems/$(LOGNAME)/$(system).nix ]; } ' | jq -r . else $(error unbound variable: system[s]) endif