From 6a526620e25a349642b161eb687dec2e005360e5 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Mon, 9 Dec 2019 00:51:27 +0000 Subject: [PATCH] feat(buildGo): Add 'overrideGo' argument overriding function This makes it possible to override arguments to the Go builders downstream in the style of `overrideAttrs` from standard nixpkgs derivations. For example, given a Nix value `foo` that builds a binary called `foo` the name of this binary could be changed and a new dependency on `somelib` added like so: foo.overrideGo(old: { name = "bar"; deps = old.deps ++ [ somelib ]; }) --- buildGo.nix | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/buildGo.nix b/buildGo.nix index fba4e18e9..5f5118e8c 100644 --- a/buildGo.nix +++ b/buildGo.nix @@ -48,6 +48,13 @@ let pathToName = p: replaceStrings ["/"] ["_"] (toString p); + # Add an `overrideGo` attribute to a function result that works + # similar to `overrideAttrs`, but is used specifically for the + # arguments passed to Go builders. + makeOverridable = f: orig: (f orig) // { + overrideGo = new: makeOverridable f (orig // (new orig)); + }; + # High-level build functions # Build a Go program out of the specified files and dependencies. @@ -130,6 +137,11 @@ let inherit external; }; in { - # Only the high-level builder functions are exposed - inherit program package proto grpc external; + # Only the high-level builder functions are exposed, but made + # overrideable. + program = makeOverridable program; + package = makeOverridable package; + proto = makeOverridable proto; + grpc = makeOverridable grpc; + external = makeOverridable external; }