aboutsummaryrefslogtreecommitdiff
path: root/templates/go/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'templates/go/flake.nix')
-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};
- };
};
}