nix/Taskfile.dist.yaml

140 lines
3.3 KiB
YAML

---
version: "3"
set: [errexit, pipefail, nounset]
shopt: [globstar]
env:
GENERATION_IN_DAYS: 20d
tasks:
check:sh:
desc: Check SH files, will call all check:sh:* tasks
cmds:
- task: check:sh:shellcheck
- task: check:sh:shfmt
check:sh:shellcheck:
desc: Pass Shellcheck on all *.sh files
cmds:
- find . -type f -name "*.sh" -exec shellcheck {} \;
sources:
- "**/*.sh"
check:sh:shfmt:
desc: Pass shfmt in check mode on all sh files
cmds:
- find . -type f -name "*.sh" -exec shfmt -d -ln bash -i 4 {} \;
sources:
- "**/*.sh"
check:typos:
desc: Check typos in all files
cmds:
- typos .
check:flake:
desc: Check flake
cmds:
- nix flake check
sources:
- "**/*.nix"
host:*:update:
desc: Update package version then build NixOS and Home-Manager
vars:
TARGET: "{{index .MATCH 0}}"
cmds:
- nix flake update
- task: nixos:build:{{.TARGET}}
- task: home:build:{{.TARGET}}
preconditions:
- sh: '[[ -d ./hosts/{{.TARGET}} ]]'
msg: host `{{.TARGET}}` not found in `hosts/` directory
host:*:switch:
desc: Switch both Home-Manager and NixOS generations
vars:
TARGET: "{{index .MATCH 0}}"
cmds:
- task: nixos:switch:{{.TARGET}}
- task: home:switch:{{.TARGET}}
preconditions:
- sh: '[[ -d ./hosts/{{.TARGET}} ]]'
msg: host `{{.TARGET}}` not found in `hosts/` directory
nixos:*:*:
desc: Manage NixOS build, use nixos:verb:target format
vars:
VERB: "{{index .MATCH 0}}"
TARGET: "{{index .MATCH 1}}"
preconditions:
- sh: '[[ {{.VERB}} = build || {{.VERB}} = test || {{.VERB}} = switch ]]'
msg: verb must be build, test or switch
cmds:
- task: nixos:{{.VERB}}
vars:
TARGET: "{{.TARGET}}"
nixos:build:
internal: true
cmds:
- nixos-rebuild --flake .#{{.TARGET}} build
requires:
vars: [TARGET]
nixos:switch:
internal: true
cmds:
- doas nixos-rebuild --flake .#{{.TARGET}} switch
requires:
vars: [TARGET]
nixos:test:
internal: true
cmds:
- doas nixos-rebuild --flake .#{{.TARGET}} test
requires:
vars: [TARGET]
nixos:list-gen:
desc: List Nixos generations
cmds:
- nixos-rebuild list-generations
nixos:gc:
desc: Garbage collect NixOS
cmds:
- doas nix-collect-garbage --delete-older-than {{.GENERATION_IN_DAYS}}
home:*:*:
desc: Manage Home-Manager configuration, use home:verb:target format
vars:
VERB: "{{index .MATCH 0}}"
TARGET: "{{index .MATCH 1}}"
preconditions:
- sh: '[[ {{.VERB}} = build || {{.VERB}} = switch ]]'
msg: verb must be build or switch
cmds:
- task: home:{{.VERB}}
vars:
TARGET: "{{.TARGET}}"
home:build:
internal: true
cmds:
- home-manager build --flake .#{{.TARGET}}
requires:
vars: [TARGET]
home:switch:
internal: true
cmds:
- home-manager switch --flake .#{{.TARGET}}
requires:
vars: [TARGET]
home:list-gen:
desc: List Home-Manager generations
cmds:
- home-manager generations
home:gc:
desc: Garbage collect Home-Manager packages
cmds:
- home-manager expire-generations {{.GENERATION_IN_DAYS}}
- nix store gc