140 lines
3.3 KiB
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
|