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@lists.science.uu.nl
http://lists.science.uu.nl/mailman/listinfo/nix-dev
_______________________________________________
nix-dev mailing list
nix-dev@lists.science.uu.nl
http://lists.science.uu.nl/mailman/listinfo/nix-dev
_______________________________________________
nix-dev mailing list
nix-dev@lists.science.uu.nl
http://lists.science.uu.nl/mailman/listinfo/nix-dev

Reply via email to