Convert applications using Go modules to Nix expressions
Find a file
adisbladis 4d9ea46f79 Copy vendor directory instead of symlinking to it
As pointed out in
https://github.com/NixOS/nixpkgs/pull/188035#discussion_r953044264
this can be a source of errors when builders do things they shouldn't.

I'm not really happy about this change as it causes quite a bit more
IO for larger dependency graphs.
2022-08-24 08:05:37 +08:00
.github/workflows Github actions: Bump install-nix-action 2022-06-14 17:58:17 +08:00
builder Copy vendor directory instead of symlinking to it 2022-08-24 08:05:37 +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 Fix Go compiler missing from mkGoEnv created environments 2022-08-23 21:11:28 +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 Refactor to generic builder expression 2022-08-23 22:48:09 +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 Refactor to generic builder expression 2022-08-23 22:48:09 +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.