[Nix-dev] Project environment setup

Ryan Eckbo eckbo at cim.mcgill.ca
Tue Jul 19 06:47:00 CEST 2016


Ok I figured it out, sorry for the public conversation with myself but I
hope that it can help other new Nix users.  The use case is: you have 
some
private nix expressions and would like to configure a project 
environment
that includes those as well as some modified packages provided by 
nixpkgs.
Here's an example how to do it:

# nixpkgs-custom.nix - add your custom expressions to nixpkgs
{ system ? builtins.currentSystem }:

let
     pkgs = import <nixpkgs> { inherit system; };
     callPackage = pkgs.lib.callPackageWith (pkgs // self);
     self = {
       ITK = callPackage ./ITK { };
       SlicerExecutionModel = callPackage ./SlicerExecutionModel { };
       DWIConvert = callPackage ./DWIConvert { };
       teem = callPackage ./teem { };
   };
in
   pkgs // self


# shell.nix - the environment you want for a project
{ pkgs ? import <nixpkgs> {} }:

let
   mygradle = pkgs.gradleGen.override  {
         jdk = pkgs.openjdk8;  // build a gradle that uses JDK 8
         };
in
pkgs.stdenv.mkDerivation {
     name = "myproject";
     src = ./.;
     buildInputs = [ mygradle.gradle25 pkgs.DWIConvert pkgs.teem ];  // 
your software environment
}

# Run as
nix-shell --arg pkgs 'import path/to/nixpkgs-custom.nix {}'

And don't be surprised when you wait over 2 minutes for the nix shell 
prompt when
you're running it in a directory that's 900M -- nix will load it all 
into memory!

cheers,
Ryan


On 19 Jul 2016, at 13:17, Ryan Eckbo wrote:

> For example, the shell.nix I wrote below doesn't make a gradle
> available with openjdk8, and also takes 2m20s to load (!) when
> I run `nix-shell`:
>
> # shell.nix
> # nix-shell prints 'warning: dumping very large path (> 256 MiB); this 
> may run out of memory'
> { pkgs ? import <nixpkgs> {} }:
>
> let
>   mygradle = pkgs.lib.overrideDerivation pkgs.gradle25 (oldAttrs: {
>         jdk = pkgs.openjdk8;
>         });
> in
> pkgs.stdenv.mkDerivation {
>     name = "myproject";
>     src = ./.;
>     buildInputs = [ mygradle ];
> }
>
>
>
> On 19 Jul 2016, at 10:53, Ryan Eckbo wrote:
>
>> I've been reading the docs and blog posts but I'm still unsure on the 
>> proper
>> way to configure a local shell.nix with my required modified 
>> packages.
>> Specifically, I need gradle built with jdk 8, something like
>>
>>    pkgs.gradle25.override { jdk = pkgs.openjdk8; }
>>
>> and I also have some local nix expressions. But I only want this for 
>> one project (so no
>> setting of .nixpkgs/config.nix).  Can someone point me in the right 
>> direction?
>>
>> Thanks!
>> Ryan
>>
>> _______________________________________________
>> nix-dev mailing list
>> nix-dev at lists.science.uu.nl
>> http://lists.science.uu.nl/mailman/listinfo/nix-dev
> _______________________________________________
> nix-dev mailing list
> nix-dev at lists.science.uu.nl
> http://lists.science.uu.nl/mailman/listinfo/nix-dev


More information about the nix-dev mailing list