Convert applications using Go modules to Nix expressions
Find a file
2022-08-24 15:01:08 +08:00
.github/workflows Github actions: Bump install-nix-action 2022-06-14 17:58:17 +08:00
builder Allow passing null as modules for packages that don't have dependencies or that vendor them 2022-08-24 15:01:08 +08:00
docs docs: Add Nix API reference docs 2022-06-14 18:26:50 +08:00
internal Move internal packages to internal subdirectory 2022-06-14 17:10:32 +08:00
templates/app Align flake template with recent API changes and improvements 2022-06-14 17:35:19 +08:00
tests Add test for repo using vendored modules 2022-08-24 15:01:08 +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 Bump version to 1.2.0 2022-08-24 12:05:27 +08:00
flake.lock requires a newer Apple SDK on macOS 2022-07-21 09:40:17 +08:00
flake.nix Refactor to generic builder expression 2022-08-23 22:48:09 +08:00
generic.nix Generate shell completions using process substitution 2022-08-24 11:57:43 +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 requires a newer Apple SDK on macOS 2022-07-21 09:40:17 +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 Refactor to generic builder expression 2022-08-23 22:48:09 +08:00
README.md README: Add link to Nix reference docs 2022-06-14 18:26:50 +08:00
shell.nix Fix Go compiler missing from mkGoEnv created environments 2022-08-23 21:11:28 +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;
}

For more in-depth usage check the Getting Started and the Nix API reference docs.

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.

Motivation

The announcement blog post contains comparisons with other Go build systems for Nix and additional notes on the design choices made.

License

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