For various reasons I have the situation that the values of a few envvars must be a embedded in the output during a CI build. Doing this when using developPackage
in nixpkgs
is straight forward using the modifiers
argument, but I’m struggling with finding a way to do this using haskell.nix.
Added to this is the somewhat added complication of having to do this in a flake.
What I have so far is basically what’s found in the docs.
-
an overlay of the project with some tools
appOverlay = final: _prev: { project = final.haskell-nix.project { compiler-nix-name = "ghc96"; src = lib.sourceFilesBySuffices ./. [ ".cabal" ".hs" "LICENSE" ]; shell.tools = { cabal = "latest"; cabal-fmt = "latest"; haskell-language-server = "latest"; hlint = "latest"; implicit-hie = "latest"; ormolu = "latest"; }; }; };
-
a list of overlays
overlays = [ haskell-nix.overlay appOverlay ];
-
definition of
pkags
andflake
pkgs = import nixpkgs { inherit system overlays; inherit (haskell-nix) config; }; flake = pkgs.project.flake { };
-
For some reason I’m having problems using the full
flake
like in the example, so instead I’ve defined explicitly what I want like this (this is a slightly shortened version)in { proj.pkg = flake.packages."foo:exe:bar"; proj.shell = flake.devShell; packages.default = self.proj.${system}.pkg; devShells.default = self.proj.${system}.shell; });
I know that flake.packages."foo:exe:bar"
is a derivation and that I can use its overrideAttrs
to inject the envvars I want. That’s not quite enough though as the package comprices both an executable and a library, and as haskell.nix creates a package for each I need to inject the envvars in both.
Am I missing something in the documentation for haskell.nix, or is there a common pattern for doing this that I haven’t learned yet?