103 lines
2.1 KiB
Makefile
103 lines
2.1 KiB
Makefile
#
|
|
# 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 '<nixpkgs/nixos>'
|
|
|
|
result/bin/switch-to-configuration switch
|
|
EOF
|
|
|
|
.PHONY: eval
|
|
eval:
|
|
@nix-instantiate \
|
|
--json \
|
|
--eval \
|
|
--strict \
|
|
-A "$$get" \
|
|
-E '
|
|
import <nixpkgs/nixos/lib/eval-config.nix> {
|
|
system = builtins.currentSystem;
|
|
modules = [ ./1systems/$(LOGNAME)/$(system).nix ];
|
|
}
|
|
' | jq -r .
|
|
else
|
|
$(error unbound variable: system[s])
|
|
endif
|