{ inputs, ... }: { imports = [ inputs.devshell.flakeModule inputs.treefmt-nix.flakeModule inputs.pre-commit-hooks.flakeModule ]; perSystem = { config , pkgs , ... }: { devshells.default = { name = "world"; packages = with pkgs; [ (config.treefmt.build.wrapper) go_1_21 gopls golangci-lint goreleaser ]; devshell.startup = { pre-commit.text = config.pre-commit.installationScript; }; commands = [ { package = config.treefmt.build.wrapper; } { name = "update"; help = "Update + Commit the Lock File"; command = "nix flake update --commit-lock-file"; category = "nix"; } { name = "build-darwin"; category = "darwin"; help = "Build the current darwin configuration"; command = "darwin-rebuild build --flake .#"; } { name = "switch-darwin"; category = "darwin"; help = "Switch to the current darwin configuration"; command = "darwin-rebuild switch --flake .#"; } { name = "build-commands"; category = "cmd"; help = "Build all the commands"; command = "make build-binaries"; } { name = "clean"; category = "cmd"; help = "Delete all the artifacts in bin/"; command = "make clean"; } ]; }; treefmt = { projectRootFile = ".git/config"; # list of supported programs # https://github.com/numtide/treefmt-nix programs = { gofmt.enable = true; gofumpt.enable = true; nixpkgs-fmt.enable = true; shellcheck.enable = true; shfmt.enable = true; taplo.enable = true; # I don't understand why this is causing issues in CI. When # I run `nix flake check` locally I don't get any issues but # CI is failing with errors in some of the workflows. # Commenting this until I have a proper solution # yamlfmt.enable = true; }; }; pre-commit = { settings = { hooks = { deadnix.enable = true; treefmt.enable = true; }; }; }; }; }