Search code examples
nixos

nix-shell: how to specify a custom environment variable?


I'm learning about nixos and nix expressions. In a project folder I created a shell.nix and I when I run nix-shell I want it to preset an environment variable for me. For example to set the PGDATA env var.

I know there are several ways to write nix expression files (I'm not yet used to most of them). Here is my sample:

shell.nix

let 
  pkgs = import <nixpkgs> {};
  name = "test";
in pkgs.myEnvFun {
  buildInputs = [
    pkgs.python
    pkgs.libxml2
  ];
  inherit name;
  extraCmds = ''
    export TEST="ABC"
  '';
 }

Solution

  • Use buildPythonPackage function (that uses mkDerivation). Passing anything to it will set env variables in bash shell:

    with import <nixpkgs> {};
    
    buildPythonPackage {
      name = "test";
    
      buildInputs = [ pkgs.python pkgs.libxml2 ];
    
      src = null;
    
      PGDATA = "...";
    }