forked from mirrors/gomod2nix
Convert applications using Go modules to Nix expressions
442b4154e2
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 |
||
---|---|---|
.github/workflows | ||
builder | ||
fetch | ||
formats | ||
tests | ||
types | ||
.envrc | ||
.gitignore | ||
check-fmt | ||
default.nix | ||
flake.lock | ||
flake.nix | ||
go.mod | ||
go.sum | ||
gomod2nix.toml | ||
LICENSE | ||
main.go | ||
Makefile | ||
overlay.nix | ||
README.md | ||
shell.nix |
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.