Convert applications using Go modules to Nix expressions
Find a file
adisbladis 86ee592eb2 Move internal packages to internal subdirectory
So they can't be imported from external repositories.

I'm not giving any stability guarantees on anything except the CLI.
2022-06-14 17:10:32 +08:00
.github/workflows github actions: Add golangci-lint 2022-05-30 18:38:04 +08:00
builder Build non-development packages in the same way as development packages 2022-06-14 08:19:42 +08:00
internal Move internal packages to internal subdirectory 2022-06-14 17:10:32 +08:00
templates/app templates: Add a flake template 2022-05-30 19:17:02 +08:00
tests Add package generation for non development packages 2022-06-14 05:15:43 +08:00
.envrc Add python test script 2020-12-03 16:23:39 +01:00
.gitignore Add package generation for non development packages 2022-06-14 05:15:43 +08:00
default.nix gomod2nix: Only generate completions if we are not cross compiling 2022-06-14 05:27:43 +08:00
flake.lock Bump flake inputs 2022-05-30 18:10:53 +08:00
flake.nix templates: Add a flake template 2022-05-30 19:17:02 +08:00
go.mod Add package generation for non development packages 2022-06-14 05:15:43 +08:00
go.sum Add package generation for non development packages 2022-06-14 05:15:43 +08:00
gomod2nix.toml Build non-development packages in the same way as development packages 2022-06-14 08:19:42 +08:00
LICENSE Add README file 2020-12-03 16:23:39 +01:00
main.go Move internal packages to internal subdirectory 2022-06-14 17:10:32 +08:00
overlay.nix Add mkGoEnv function 2022-06-13 20:37:42 +08:00
README.md Add README file 2020-12-03 16:23:39 +01:00
shell.nix shell.nix: Add golangci-lint 2022-05-30 18:34:43 +08:00

Gomod2nix

Convert applications using Go modules -> Nix

Usage

From the Go project directory execute:

$ gomod2nix

This will create gomod2nix.toml that's used like so

let
  pkgs = import <nixpkgs> {
    overlays = [
      (self: super: {
        buildGoApplication = super.callPackage ./builder { };
      })
    ];
  };
in pkgs.buildGoApplication {
  pname = "gomod2nix-example";
  version = "0.1";
  src = ./.;
  modules = ./gomod2nix.toml;
}

FAQ

Why not continue work on vgo2nix?

Vgo2nix was built on top of the old Nixpkgs build abstraction buildGoPackage, this abstraction was built pre-modules and suffered from some fundamental design issues with modules, such as only allowing a single version of a Go package path inside the same build closure, something that Go itself allows for.

We need a better build abstraction that takes Go modules into account, while remaining import from derivation-free.

Will this be included in Nixpkgs

Yes. Once the API is considered stable.

License

This project is licensed under the MIT License. See the LICENSE file for details.