Convert applications using Go modules to Nix expressions
Find a file
adisbladis 442b4154e2
Add support for local replace directives
This fixes relative path modules not being correctly vendored by
parsing go.mod in Nix and vendoring them into the correct directory in
the Nix sandbox.

Ideally this should also come with a pluggable source filtering
mechanism and/or maybe use any present gitignore files like
poetry2nix does.

To use this new feature you have to pass a new `pwd` param to
`buildGoApplication` as such:
```
buildGoApplication {
  pname = "foo";
  version = "bar";
  pwd = ./.;
  src = lib.cleanSource ./.;
}
```

Fixes #2
2021-03-29 17:20:50 +02:00
.github/workflows Format with nixpkgs-fmt 2020-12-03 16:23:40 +01:00
builder Add support for local replace directives 2021-03-29 17:20:50 +02:00
fetch Fix relative paths inside sources 2020-10-29 13:26:17 +01:00
formats Fix relative paths inside sources 2020-10-29 13:26:17 +01:00
tests Add python test script 2020-12-03 16:23:39 +01:00
types Add vendorPath to correctly link the vendor directory in the nix build 2020-10-29 13:26:17 +01:00
.envrc Add python test script 2020-12-03 16:23:39 +01:00
.gitignore Add gitignore 2020-12-03 16:23:39 +01:00
check-fmt Expose gomod2nix package in the overlay 2020-12-03 16:23:39 +01:00
default.nix default.nix: Filter tests 2021-01-12 17:55:00 +01:00
flake.lock Add flake.nix to root 2020-12-03 16:23:39 +01:00
flake.nix Fix: flake overlay 2021-03-16 16:08:52 -07:00
go.mod Add comprehensive logging 2020-10-29 13:26:16 +01:00
go.sum Add comprehensive logging 2020-10-29 13:26:16 +01:00
gomod2nix.toml Add gomod2nix.toml to repo 2020-12-03 16:23:39 +01:00
LICENSE Add README file 2020-12-03 16:23:39 +01:00
main.go Add comprehensive logging 2020-10-29 13:26:16 +01:00
Makefile Add python test script 2020-12-03 16:23:39 +01:00
overlay.nix Expose gomod2nix package in the overlay 2020-12-03 16:23:39 +01:00
README.md Add README file 2020-12-03 16:23:39 +01:00
shell.nix Add python test script 2020-12-03 16:23:39 +01: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.