diff --git a/justfile b/justfile index 633263c..31aa607 100644 --- a/justfile +++ b/justfile @@ -1,25 +1,56 @@ +set positional-arguments # makes variables accesible as $1 $2 $@ export GUM_FILTER_HEIGHT := "15" -nom := `if command -v nom >/dev/null; then echo nom; else echo nix; fi` +nom := `if [[ -t 1 ]] && command -v nom >/dev/null; then echo nom; else echo nix; fi` +nix_eval_opts := "--log-format raw --option warn-dirty false" @_default: just "$(gum choose --ordered --header "Pick a recipie..." $(just --summary --unsorted))" -check: - nix flake check --keep-going +check *_: + nix flake check --keep-going "$@" -build-machine machine=`just _a_machine`: - {{nom}} build .#nixosConfigurations.{{ machine }}.config.system.build.toplevel +build-machine machine=`just _a_machine` *_: + {{nom}} build .#nixosConfigurations.{{ machine }}.config.system.build.toplevel "${@:2}" -run-vm machine=`just _a_machine`: - nixos-rebuild build-vm --flake .#{{ machine }} +run-vm machine=`just _a_machine` *_: + nixos-rebuild build-vm --flake .#{{ machine }} "${@:2}" QEMU_NET_OPTS="hostfwd=tcp::8080-:80,hostfwd=tcp::8081-:443,hostfwd=tcp::2222-:22" ./result/bin/run-*-vm -@update-inputs: - nix eval .#inputs --apply builtins.attrNames --json \ - | jq '.[]' -r \ - | gum choose --no-limit --height=15 \ - | xargs -L 1 nix flake lock --update-input +@update-inputs *_: + @git reset flake.lock + @git restore flake.lock + nix eval {{nix_eval_opts}} --file flake.nix --apply 'x: builtins.attrNames x.inputs' --json \ + | { printf "%s\n" --commit-lock-file; jq '.[]' -r | grep -vxF "self" ||:; } \ + | gum choose --no-limit --header "Choose extra arguments:" \ + | tee >(xargs -d'\n' echo + nix flake update "$@" >&2) \ + | xargs -d'\n' nix flake update "$@" + +@repl $machine=`just _a_machine` *_: + set -v; nixos-rebuild --flake .#"$machine" repl "${@:2}" + +@eval $machine=`just _a_machine` $attrpath="system.build.toplevel.outPath" *_: + set -v; nix eval {{nix_eval_opts}} ".#nixosConfigurations.\"$machine\".config.$attrpath" --show-trace "${@:3}" + +@eval-vm $machine=`just _a_machine` $attrpath="system.build.toplevel.outPath" *_: + just eval "$machine" "virtualisation.vmVariant.$attrpath" "${@:3}" +# helpers + +[no-exit-message] _a_machine: - nix eval .#nixosConfigurations --apply builtins.attrNames --json | jq .[] -r | gum filter + #!/usr/bin/env -S sh -euo pipefail + machines="$( + nix eval {{nix_eval_opts}} .#nixosConfigurations --apply builtins.attrNames --json | jq .[] -r + )" + [ -n "$machines" ] || { echo >&2 "ERROR: no machines found"; false; } + if [ -s .direnv/vars/last-machine.txt ]; then + machines="$( + grep <<<"$machines" -xF "$(cat .direnv/vars/last-machine.txt)" ||: + grep <<<"$machines" -xFv "$(cat .direnv/vars/last-machine.txt)" ||: + )" + fi + choice="$(gum filter <<<"$machines")" + mkdir -p .direnv/vars + cat <<<"$choice" >.direnv/vars/last-machine.txt + cat <<<"$choice"