[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