about summary refs log tree commit diff
path: root/templates/go/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--templates/go/flake.nix132
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};
-      };
     };
 }