165 lines
7.8 KiB
Makefile
165 lines
7.8 KiB
Makefile
export GUM_CHOOSE_HEIGHT := "15"
|
|
export GUM_FILTER_HEIGHT := "15"
|
|
|
|
#export hosts_nixos := `2>/dev/null nix eval .\#nixosConfigurations --apply builtins.attrNames --json`
|
|
#export hosts_fhs := `2>/dev/null nix eval .\#systemConfigs --apply builtins.attrNames --json`
|
|
|
|
@_default:
|
|
just "$(gum filter --placeholder "Pick a recipie..." $(just --summary --unsorted))"
|
|
|
|
eval hostname=`just _a_host`:
|
|
nix eval .#nixosConfigurations."{{hostname}}".config.system.build.toplevel.outPath --show-trace
|
|
eval-vm hostname=`just _a_host`:
|
|
nix eval .#nixosConfigurations."{{hostname}}".config.system.build.vm.outPath --show-trace
|
|
|
|
repl $hostname=`just _a_host`:
|
|
NIX_NO_NOM=1 nixos-rebuild --flake .#"$hostname" repl
|
|
|
|
report hostname=`just _a_host`:
|
|
nix eval .#nixosReports."{{hostname}}" --json --show-trace | yq . --yaml-output --width=999999 | bat --language yaml --style plain --paging never
|
|
|
|
reports:
|
|
nix eval .#nixosReports --json --show-trace | yq . --yaml-output --width=999999 | bat --language yaml --style plain --paging never
|
|
|
|
update:
|
|
git reset flake.lock
|
|
git restore flake.lock
|
|
git pull --rebase --autostash
|
|
nix flake update --commit-lock-file
|
|
@mkdir -p .direnv/
|
|
@printf "%s\n" "$(date +%Y-%m-%d)" > .direnv/pull-date
|
|
|
|
@update-select:
|
|
git reset flake.lock
|
|
git restore flake.lock
|
|
nix eval .#inputs --apply builtins.attrNames --json 2>/dev/null \
|
|
| (printf "%s\n" --commit-lock-file; jq '.[]' -r | tr '0123456789' '9876543210' | sort | tr '0123456789' '9876543210' | grep -v "^self$") \
|
|
| gum choose --no-limit \
|
|
| xargs nix flake update
|
|
git add flake.lock
|
|
|
|
#build hostname=`if test -z "${IS_REMOTE_ENV:-}"; then just _a_host_timeout; else printf "\n"; fi`:
|
|
build hostname="":
|
|
nixos-rebuild build --accept-flake-config --show-trace --flake .#"{{hostname}}"
|
|
|
|
#build-no-remote-builders hostname=`if test -z "$IS_REMOTE_ENV"; then just _a_host_timeout; else printf "\n"; fi`:
|
|
build-no-remote-builders hostname="":
|
|
nixos-rebuild build --accept-flake-config --show-trace --flake .#"{{hostname}}" --builders ""
|
|
|
|
build-vm hostname=`just _a_host`:
|
|
nixos-rebuild build-vm --accept-flake-config --show-trace --flake .#"{{hostname}}"
|
|
|
|
build-vm-and-run $hostname=`just _a_host`:
|
|
@just build-vm "$hostname"
|
|
./result/bin/run-"$hostname"-vm
|
|
|
|
test:
|
|
sudo nixos-rebuild test --accept-flake-config --show-trace --flake .
|
|
|
|
switch:
|
|
sudo nixos-rebuild switch --accept-flake-config --show-trace --flake .
|
|
|
|
boot:
|
|
sudo nixos-rebuild boot --accept-flake-config --show-trace --flake .
|
|
|
|
boot-and-reboot:
|
|
sudo nixos-rebuild boot --accept-flake-config --show-trace --flake .
|
|
sudo reboot
|
|
|
|
push hostname=`just _a_host` cmd=`gum choose test switch boot --header "Select mode..."`:
|
|
nixos-rebuild build --flake .#{{hostname}}
|
|
@printf "%s\n" pushing...
|
|
NIX_NO_NOM=1 nixos-rebuild {{cmd}} --flake .#{{hostname}} --target-host root@$(nix eval .#nixosConfigurations."{{hostname}}".config.networking.fqdn --json | jq . -r) --use-substitutes
|
|
#NIX_NO_NOM=1 NIX_SSHOPTS="-tt" nixos-rebuild {{cmd}} --flake .#"{{hostname}}" --use-remote-sudo --target-host $(nix eval .#nixosReports."{{hostname}}".fqdn --json | jq . -r) --use-substitutes
|
|
|
|
inspect:
|
|
nix run -- nixpkgs#nix-inspect -p .
|
|
|
|
inspect-config host=`just _a_host` prefix="":
|
|
nix run -- nixpkgs#nix-inspect -e '(builtins.getFlake "'"$PWD"'").nixosConfigurations."{{host}}".config{{ if prefix == "" { "" } else { "." + prefix } }}'
|
|
|
|
@_a_host:
|
|
hostnames="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json 2>/dev/null | jq '.[]' -r)"; \
|
|
if test "$(grep <<<"$hostnames" "^$(just remote-current)$" | wc -l)" -eq 1; then hostnames="$(just remote-current; grep <<<"$hostnames" -v "^$(just remote-current)$")"; fi; \
|
|
if test "$(grep <<<"$hostnames" "^$(hostname)$" | wc -l)" -eq 1; then hostnames="$(hostname; grep <<<"$hostnames" -v "^$(hostname)$")"; fi; \
|
|
gum <<<"$hostnames" filter --placeholder "Pick a host..."
|
|
|
|
# ctrl-c is counted as a timeout...
|
|
@_a_host_timeout:
|
|
hostnames="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json 2>/dev/null | jq '.[]' -r)"; \
|
|
if test "$(grep <<<"$hostnames" "^$(hostname)$" | wc -l)" -eq 1; then hostnames="$(hostname; grep <<<"$hostnames" -v "^$(hostname)$")"; fi; \
|
|
gum <<<"$hostnames" filter --placeholder "Pick a host..." --timeout 5s || hostname
|
|
|
|
@_some_hosts:
|
|
hostnames="$(nix eval .#nixosConfigurations --apply builtins.attrNames --json 2>/dev/null | jq '.[]' -r)"; \
|
|
if test "$(grep <<<"$hostnames" "^$(hostname)$" | wc -l)" -eq 1; then hostnames="$(hostname; grep <<<"$hostnames" -v "^$(hostname)$")"; fi; \
|
|
gum <<<"$hostnames" filter --placeholder "Pick a host..." --no-limit
|
|
|
|
@_a_fqdn:
|
|
hostnames="$(nix eval .#nixosConfigurations --apply 'c: builtins.attrValues (builtins.mapAttrs (_: x: x.config.networking.fqdn) c)' --json 2>/dev/null | jq '.[]' -r)"; \
|
|
if test "$(grep <<<"$hostnames" "^$(hostname --fqdn)$" | wc -l)" -eq 1; then hostnames="$(hostname --fqdn; grep <<<"$hostnames" -v "^$(hostname --fqdn)$")"; fi; \
|
|
gum <<<"$hostnames" filter --placeholder "Pick a host..."
|
|
|
|
@_some_fqdns:
|
|
hostnames="$(nix eval .#nixosConfigurations --apply 'c: builtins.attrValues (builtins.mapAttrs (_: x: x.config.networking.fqdn) c)' --json 2>/dev/null | jq '.[]' -r)"; \
|
|
if test "$(grep <<<"$hostnames" "^$(hostname --fqdn)$" | wc -l)" -eq 1; then hostnames="$(hostname --fqdn; grep <<<"$hostnames" -v "^$(hostname --fqdn)$")"; fi; \
|
|
gum <<<"$hostnames" filter --placeholder "Pick a host..." --no-limit
|
|
|
|
@remote-current:
|
|
# remote-host # slow
|
|
test ! -s .remote.toml || \
|
|
printf "%s\n" "$(tomlq <.remote.toml '.hosts | to_entries[] | select(.value.default==true) | .value.host' -r)"
|
|
|
|
@remote-list:
|
|
tomlq <.remote.toml '.hosts | to_entries[] | "remote-set \(.key+1) # -> \(.value.host)"' -r
|
|
|
|
@remote-set remote=`just remote-current >&2 && just _a_remote_label`:
|
|
remote-set "{{remote}}"
|
|
|
|
@motd:
|
|
printf "%s\n" "Current remote: $(just remote-current)"
|
|
just remote-list
|
|
printf "\n"; \
|
|
todos=$(rg 'TODO' | wc -l); \
|
|
if [[ "$todos" -gt 10 ]]; then \
|
|
printf "%s\n" "There are $todos 'TODO's"; \
|
|
fi
|
|
|
|
@_a_remote_label:
|
|
just remote-list | gum filter --placeholder "Pick a remote..." | cut -d' ' -f2
|
|
|
|
@_some_remote_labels:
|
|
just remote-list | gum filter --placeholder "Pick remotes..." --no-limit | cut -d' ' -f2
|
|
|
|
@_a_remote_fqdn:
|
|
just remote-list | gum filter --placeholder "Pick a remote..." | cut -d' ' -f5-
|
|
|
|
@_some_remote_fqdns:
|
|
just remote-list | gum filter --placeholder "Pick remote..." --no-limit | cut -d' ' -f5-
|
|
|
|
@_remote_ensure hostname=`just _a_fqdn`:
|
|
if test ! -s .remote.toml; then remote-init "{{ hostname }}"; \
|
|
elif tomlq <.remote.toml '.hosts | to_entries[] |.value.host' -r | grep -q "{{ hostname }}"; then true; \
|
|
else remote-add "{{ hostname }}"; \
|
|
fi
|
|
|
|
@_remote_label_from_fqdn hostname=`just _a_fqdn`:
|
|
tomlq <.remote.toml '.hosts | to_entries[] | select(.value.host == "{{ hostname }}") | .key+1' -r
|
|
|
|
# TODO: 'tmux new $cmd \; set-option destroy-unattached' instead of NIX_NO_NOM
|
|
@remote-mprocs +$cmd=`printf "just %s\n" $(just --summary --unsorted) | gum filter --placeholder "Pick a recipie..."`:
|
|
just _some_remote_labels | sed -E 's/(.*)/remote --label="\1" "env NIX_NO_NOM=1 $cmd"/g' | xargs -d'\n' mprocs
|
|
|
|
@remote-mprocs-new +$cmd=`printf "just %s\n" $(just --summary --unsorted) | gum filter --placeholder "Pick a recipie..."`:
|
|
just _some_fqdns | xe -s 'just _remote_ensure "$1"; just _remote_label_from_fqdn "$1"' | sed -E 's/(.*)/remote --label="\1" "env NIX_NO_NOM=1 $cmd"/g' | xargs -d'\n' mprocs
|
|
|
|
# TODO: support multiple labels, run in tmux
|
|
#remote label=`just _a_remote_label` cmd=`printf "just %s\n" $(just --summary --unsorted) | gum filter --placeholder "Pick a recipie..."`:
|
|
# remote --label={{label}} {{cmd}}
|
|
|
|
# TODO: packaged as nix-web
|
|
@gorgon:
|
|
# https://codeberg.org/gorgon/gorgon/src/branch/main/nix-web
|
|
# https://discourse.nixos.org/t/a-web-ui-for-the-nix-store-early-beta/35762
|
|
nix run 'git+https://codeberg.org/gorgon/gorgon#nix-web'
|