diff options
Diffstat (limited to '')
-rw-r--r-- | templates/go/flake.nix | 132 |
1 files changed, 63 insertions, 69 deletions
diff --git a/templates/go/flake.nix b/templates/go/flake.nix index ce7fa0d..4746a98 100644 --- a/templates/go/flake.nix +++ b/templates/go/flake.nix @@ -1,83 +1,77 @@ { - description = "Go project template"; - inputs = { - futils.url = "github:numtide/flake-utils"; - nixpkgs.url = "github:NixOS/nixpkgs"; - pre-commit-hooks = { - url = "github:cachix/pre-commit-hooks.nix"; - inputs = { - flake-utils.follows = "futils"; - nixpkgs.follows = "nixpkgs"; - }; - }; + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + flake-parts = { url = "github:hercules-ci/flake-parts"; inputs.nixpkgs-lib.follows = "nixpkgs"; }; + treefmt-nix = { url = "github:numtide/treefmt-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; + devshell.url = "github:numtide/devshell"; + pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix"; }; - outputs = - { self - , futils - , nixpkgs - , pre-commit-hooks - }: - futils.lib.eachDefaultSystem - (system: - let - pkgs = import nixpkgs { - inherit system; - }; - pname = "project-name"; - version = "0.0.1"; - tools = with pkgs; [ - # https://github.com/golang/vscode-go/blob/master/docs/tools.md - delve - golangci-lint - gopls - ]; - in - rec { - # `nix build` - packages."${pname}" = pkgs.buildGoModule { - inherit pname version; - src = ./.; - vendorSha256 = null; - }; - defaultPackage = packages."${pname}"; + outputs = inputs: + inputs.flake-parts.lib.mkFlake { inherit inputs; } { + systems = [ "x86_64-linux" "aarch64-darwin" ]; + imports = [ + inputs.treefmt-nix.flakeModule + inputs.pre-commit-hooks.flakeModule + inputs.devshell.flakeModule + ]; - # `nix run` - apps = { - "${pname}" = futils.lib.mkApp { - drv = packages."${pname}"; - exePath = "/bin/changeme"; + perSystem = { pkgs, config, ... }: + let + src = ./.; + package = { + # Replace the following throws with strings with the appropriate values + name = throw "package.name: missing value"; + version = throw "package.name: missing value"; + vendorHash = null; }; - default = apps."${pname}"; - }; + in + { + packages = { + ${package.name} = pkgs.buildGoModule { + pname = package.name; + inherit (package) + version + vendorHash; + inherit src; + }; + default = config.packages.${package.name}; + }; + + formatter = pkgs.treefmt; - # `nix develop` - checks = { - pre-commit = pre-commit-hooks.lib.${system}.run { - src = ./.; - hooks = { - nixpkgs-fmt.enable = true; - yamllint.enable = true; - govet.enable = true; - gotest.enable = true; - gofmt.enable = true; - staticcheck.enable = true; + devshells.default = { + commands = [ + { + name = "build"; + category = "dev"; + help = "Build the binary"; + command = "make"; + } + ]; + packages = with pkgs; [ + go_1_21 + gopls + golangci-lint + ]; + devshell.startup = { + pre-commit.text = config.pre-commit.installationScript; }; + }; + + treefmt = { + projectRootFile = "go.mod"; + programs.gofmt.enable = true; + programs.nixpkgs-fmt.enable = true; + }; + + pre-commit = { settings = { - yamllint.relaxed = true; + hooks = { + treefmt.enable = true; + }; }; }; }; - - devShell = pkgs.mkShell { - buildInputs = with pkgs; [ go ] ++ tools; - inherit (self.checks.${system}.pre-commit) shellHook; - }; - }) - // { - overlay = _: prev: { - XXX = self.defaultPackage.${prev.system}; - }; }; } |