set dotenv-load [macos] install: sudo nix run nix-darwin -- switch --flake . [linux] install cores='32': sudo nixos-rebuild switch --flake . --builders '' --max-jobs 1 --cores {{cores}} [linux] boot cores='32': sudo nixos-rebuild boot --flake . --builders '' --max-jobs 1 --cores {{cores}} [macos] build host=`hostname` cores='32': nix run nix-darwin -- build --flake .#{{host}} --show-trace --max-jobs 1 --cores {{cores}} [linux] build host=`hostname` cores='12': nixos-rebuild build --flake .#{{host}} --show-trace --max-jobs 1 --cores {{cores}} --substituters '' nix args: nix --extra-experimental-features "nix-command flakes" {{args}} home: nix --extra-experimental-features "nix-command flakes" run home-manager/master -- switch --flake . --show-trace nvim: nix run .#neovim [linux] rollback: sudo nixos-rebuild switch --rollback --flake . copy-closure src dst: #!/usr/bin/env bash set -euo pipefail path=$(nix --extra-experimental-features "nix-command flakes" \ eval --raw .#nixosConfigurations.{{src}}.config.system.build.toplevel) nix --extra-experimental-features "nix-command flakes" \ build .#nixosConfigurations.{{src}}.config.system.build.toplevel \ --builders '' --cores 32 --no-link nix --extra-experimental-features "nix-command flakes" \ copy --to ssh://{{dst}} "$path" add path name: #!/usr/bin/env bash set -euo pipefail machine=$(echo "{{path}}" | cut -d/ -f1) category=$(echo "{{path}}" | cut -d/ -f2) case "$machine" in ryu|tako|tsuba) dir="nixos/$machine/$category" ;; kuro|shiro) dir="darwin/$machine/$category" ;; home) dir="home/$category" ;; *) echo "Unknown machine/path: $machine"; exit 1 ;; esac echo '{...}: { }' > "$dir/{{name}}.nix" # https://ast-grep.github.io/advanced/pattern-parse.html#incomplete-pattern-code # imports doesn't match the whole pattern, use selector binding + attr expr. if [ -t 0 ] && [ -t 1 ]; then sg_flag=-i; else sg_flag=-U; fi # Bare `imports = [ ... ]`, falling back to `imports = lib.optionals [ ... ]`. ast-grep run -p '{ imports = [$$$ITEMS] }' --selector binding --rewrite 'imports = [$$$ITEMS ./{{name}}.nix ]' "$dir/default.nix" "$sg_flag" \ || ast-grep run -p '{ imports = lib.optionals $COND [$$$ITEMS] }' --selector binding --rewrite 'imports = lib.optionals $COND [$$$ITEMS ./{{name}}.nix ]' "$dir/default.nix" "$sg_flag" alejandra fmt "$dir/{{name}}.nix" "$dir/default.nix" git add "$dir/{{name}}.nix" add-secret secret: #!/usr/bin/env bash set -euo pipefail key=$(jq -rn --arg s "{{secret}}" '$s | split(".") | map("[" + tojson + "]") | join("")') openssl rand -hex 32 | tr -d '\n' | jq -sR | sops set --value-stdin secrets/secrets.yaml "$key"