# hacc nixfiles

welcome to hacc nixfiles (haccfiles). this is the code describing our nix-based infrastructure.

## structure

- `default.nix`: Entrypoint to the config
- `common/`: configuration common to all hosts
- `desktop/`: desktop-relevant communication
- `modules/`: home-grown modules for hacc-specific services
- `nix/`: sources files, managed with niv
- `pkgs/`: packages we built and don't want to upstream

## working with the haccfiles

deploy:
``` shell
nix build -f . deploy.$hostname && ./result switch
```

`$hostname` can be replaced with any hostname or group

## committing to haccfiles
- Golden Rule: DO NOT COMMIT TO MAIN
  - exceptions apply, if you are not sure where to commit, don't commit to main
- split up commits, every commit is one atomic change
  - e.g. no big "did some changes" but instead "updated service x", "updated service y", "update service z"
- follow the commit format: "$prefix$place: $change"
  - prefix: one of fixup, nothing
  - place: one of "modules/$module", "$hostname/service", "common/($place)", "pkgs/$pkgs" or "sources"
  - change: describe your change, don't go over the character limit where git starts hiding/wrapping
- Exception: autogenerated messages (merge commits, reverts, etc)