Convert applications using Go modules to Nix expressions
Find a file
adisbladis 74a2950c64 buildGoApplication: Remove package from let binding
It's the thing we return so no point in binding it to a temporary variable.
2022-06-14 19:27:24 +08:00
.github/workflows Github actions: Bump install-nix-action 2022-06-14 17:58:17 +08:00
builder buildGoApplication: Remove package from let binding 2022-06-14 19:27:24 +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 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 README: Add link to Nix reference docs 2022-06-14 18:26:50 +08:00
shell.nix Align flake template with recent API changes and improvements 2022-06-14 17:35:19 +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.