default.nix 7.65 KB
Newer Older
Valentin Reis's avatar
Valentin Reis committed
1 2 3 4 5 6
{ # host package set (unused except for fetching nixpkgs)
  hostPkgs        ? import <nixpkgs> {}

, # versioned nixpkgs
  pkgs            ? import (hostPkgs.nix-update-source.fetch ./pkgs.json).src {}

Valentin Reis's avatar
Valentin Reis committed
7 8 9
, # versioned nixpkgs-older version for zmcat
  pkgs-old        ? import (hostPkgs.nix-update-source.fetch ./pkgs-old.json).src {}

Valentin Reis's avatar
Valentin Reis committed
10
, # fetcher alias for the remaining arguments
Valentin Reis's avatar
Valentin Reis committed
11
  fetched         ? s: (pkgs.nix-update-source.fetch s).src
Valentin Reis's avatar
Valentin Reis committed
12 13

, #source overrides: core nrm components
Valentin Reis's avatar
Valentin Reis committed
14 15 16 17
  aml-src         ? fetched aml/pin.json
, libnrm-src      ? fetched libnrm/pin.json
, nrm-src         ? fetched nrm/pin.json
, containers-src  ? fetched containers/pin.json
Valentin Reis's avatar
Valentin Reis committed
18 19

, #source overrides: applications
Valentin Reis's avatar
Valentin Reis committed
20 21 22 23 24
  amg-src         ? fetched amg/pin.json
, qmcpack-src     ? fetched qmcpack/pin.json
, openmc-src      ? fetched openmc/pin.json
, stream-src      ? fetched stream/pin.json
, lammps-src      ? fetched lammps/pin.json
Valentin Reis's avatar
Valentin Reis committed
25 26

, #source overrides :tooling
27 28 29 30 31 32
  argotk-src       ? builtins.fetchGit {inherit (fetched argotk/pin.json) url rev;}
, repoquality-src  ? builtins.fetchGit {inherit (fetched repoquality/pin.json) url rev;}
, argonix-src      ? builtins.fetchGit {inherit (fetched argonix/pin.json) url rev;}

, #used for hardware experiments.
  sudoPath ? null
Valentin Reis's avatar
.  
Valentin Reis committed
33 34
}:
let
Valentin Reis's avatar
Valentin Reis committed
35
  callPackage = pkgs.lib.callPackageWith (pkgs // argopkgs);
36

Valentin Reis's avatar
Valentin Reis committed
37
  argopkgs = rec {
38
    # library of nix expressions
Valentin Reis's avatar
Valentin Reis committed
39
    argolib     = import ../lib/utils.nix;
40
    # Argo components (source overridabel via argument)
41 42 43 44
    aml        = callPackage ./aml        {src=aml-src;};
    nrm        = callPackage ./nrm        {src=nrm-src;};
    containers = callPackage ./containers {src=containers-src;};
    libnrm     = callPackage ./libnrm     {src=libnrm-src;};
Valentin Reis's avatar
Valentin Reis committed
45 46 47 48
    libnrm-pmpi = libnrm.overrideAttrs (oldAttrs: rec {
      configureFlags = "--enable-pmpi";
      buildInputs = oldAttrs.buildInputs ++ [ pkgs.mpich2 ];
    });
49

50
    # applications (source overridable via argument)
51 52 53 54 55
    amg     = callPackage ./amg     {nrmSupport=true;src=amg-src;};
    qmcpack = callPackage ./qmcpack {nrmSupport=true;src=qmcpack-src;};
    openmc  = callPackage ./openmc  {nrmSupport=true;src=openmc-src;};
    stream  = callPackage ./stream  {nrmSupport=true;src=stream-src;};
    lammps  = callPackage ./lammps  {nrmSupport=true;src=lammps-src;};
Valentin Reis's avatar
Valentin Reis committed
56

57
    # data (static, non source overridable via arguments)
Valentin Reis's avatar
Valentin Reis committed
58
    openmc-data = fetched openmc/data.json;
Valentin Reis's avatar
Valentin Reis committed
59

60 61 62 63
    # tools
    zymake = callPackage ./zymake {
      inherit (pkgs.ocamlPackages) findlib ocamlbuild topkg batteries;
    };
Valentin Reis's avatar
Valentin Reis committed
64 65
    haskellPackages = pkgs.haskellPackages.override {
      overrides = self: super: with pkgs.haskell.lib;
Valentin Reis's avatar
Valentin Reis committed
66
      rec {
Valentin Reis's avatar
Valentin Reis committed
67
        panpipe        = (pkgs.haskell.lib.doJailbreak super.panpipe);
Valentin Reis's avatar
Valentin Reis committed
68
        spdx           = (pkgs.haskell.lib.doJailbreak super.spdx);
Valentin Reis's avatar
Valentin Reis committed
69
        generic-pretty = doJailbreak super.generic-pretty;
Valentin Reis's avatar
Valentin Reis committed
70

Valentin Reis's avatar
Valentin Reis committed
71 72 73 74 75
        #minor cabal and version fix
        panhandle    = (self.callCabal2nix "panhandle" (builtins.fetchGit {
                      inherit (panhandle-src) url rev; })) {};

        #argo tools
Valentin Reis's avatar
Valentin Reis committed
76 77 78
        argotk = (self.callCabal2nix "argotk" argotk-src) {};
        argonix = (self.callCabal2nix "argonix" argonix-src) {};
        repoquality = (self.callCabal2nix "repoquality" repoquality-src) {};
79
      };
Valentin Reis's avatar
Valentin Reis committed
80
    };
Valentin Reis's avatar
Valentin Reis committed
81

82
    # re-export from hpkgs and add non-haskell build rule specialization
Valentin Reis's avatar
Valentin Reis committed
83 84 85
    inherit (haskellPackages) repoquality;

    argotk = haskellPackages.argotk.overrideAttrs (old:{
Valentin Reis's avatar
Valentin Reis committed
86 87 88 89 90 91 92 93 94 95 96 97
        buildInputs=old.buildInputs ++ [pkgs.hwloc];
        installPhase = old.installPhase + ''
          mkdir $out/share/
          ARGOTK_SHARE=share $out/bin/argotk --bash-completion-script argotk > $out/share/argotk.sh
          cp -r share/* $out/share/
          substituteInPlace $out/share/simple-H2O.xml --replace \
                H2O.HF.wfs.xml $out/share/H2O.HF.wfs.xml
          substituteInPlace $out/share/simple-H2O.xml --replace \
                O.BFD.xml $out/share/O.BFD.xml
          substituteInPlace $out/share/simple-H2O.xml --replace \
                H.BFD.xml $out/share/H.BFD.xml
        '';
Valentin Reis's avatar
Valentin Reis committed
98 99 100 101 102 103 104 105
      });

    argonix = haskellPackages.argonix.overrideAttrs (old:{
        installPhase = old.installPhase + ''
          mkdir $out/share/
          $out/bin/argonix --bash-completion-script argonix > $out/share/argonix.sh
        '';
      });
106

107
    # fix for nrm
Valentin Reis's avatar
Valentin Reis committed
108
    pyzmq = pkgs.pythonPackages.pyzmq.override { zeromq3 = pkgs.zeromq; };
Valentin Reis's avatar
Valentin Reis committed
109

110
    # archived for sake of the simplicity of this file
Valentin Reis's avatar
Valentin Reis committed
111 112
    zmcat = pkgs-old.haskellPackages.callPackage ./zmcat {};
    zmqat = pkgs-old.haskellPackages.zmqat;
113

114
    # ci/experimental environments
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
    testBuildInputs =  [
      # argotk runs mpiexec:
      pkgs.mpich2
      # argotk uses hwloc to choose CPU counts:
      pkgs.hwloc
      # these are needed for some reason:
      pkgs.coreutils
      pkgs.utillinux
      pkgs.git
      # argo tools
      argotk
      # argo components
      containers
      nrm
    ];

Valentin Reis's avatar
Valentin Reis committed
131 132
    test = pkgs.stdenv.mkDerivation rec {
      name = "testEnv";
133

134 135
      buildInputs = testBuildInputs ++ [ stream ];

Valentin Reis's avatar
Valentin Reis committed
136
      #required to be able to build the drv.
137
      installPhase = "mkdir $out";
Valentin Reis's avatar
Valentin Reis committed
138
      unpackPhase = "true";
Valentin Reis's avatar
Valentin Reis committed
139

140 141 142 143 144 145 146
      __noChroot = true;
      shellHook =''
        echo ""
        echo "ENTERING ENVIRONMENT: Sources of impurity for this build are: /tmp/ /etc/argo/ /var/run/ /var/lock/".
        echo "ENTERING ENVIRONMENT: Moreover, sandboxing is disabled, in particular because of:"
        echo "ENTERING ENVIRONMENT: /tmp/nrm-* sockets, /etc/argo, /var/run/, /var/lock/ which all need read access. "
        echo "ENTERING ENVIRONMENT: until these components are patched to allow for alternative paths, no sandbox use is possible."
147
        source ${argotk}/share/argotk.sh # bash completion
148
        echo ""
149
      '';
150
      #argotk uses this environment variable.
151
      ARGOTK_SHARE = "${argotk}/share";
Valentin Reis's avatar
Valentin Reis committed
152
    };
Valentin Reis's avatar
Valentin Reis committed
153

Valentin Reis's avatar
Valentin Reis committed
154
    expe = test.overrideAttrs (old:{
155 156 157
      buildInputs = testBuildInputs ++ [
        #debug tools
        pkgs.which
Valentin Reis's avatar
Valentin Reis committed
158
        zmcat
159 160 161 162 163 164

        #experiment tools
        zymake

        #applications
        (stream.override {iterationCount = "20000";})
Valentin Reis's avatar
bumps.  
Valentin Reis committed
165
        #lammps
166
        qmcpack
Valentin Reis's avatar
bumps.  
Valentin Reis committed
167 168
        #openmc
        #openmc-data
Valentin Reis's avatar
Valentin Reis committed
169 170
        ## amg is not ready, its progress report loop isn't tight enough.
        #amg
171
      ];
Valentin Reis's avatar
Valentin Reis committed
172 173 174
      OPENMC_CROSS_SECTIONS = "${openmc-data}/cross_sections.xml";
      OPENMC_PWD = "${argotk}/share/openmc";
    });
Valentin Reis's avatar
Valentin Reis committed
175

Valentin Reis's avatar
Valentin Reis committed
176 177
    analysis =
    pkgs.rWrapper.override{ packages = with pkgs.rPackages; [
Valentin Reis's avatar
Valentin Reis committed
178 179
      pkgs.rlwrap
      pkgs.pandoc
Valentin Reis's avatar
Valentin Reis committed
180 181 182 183 184 185 186 187 188 189 190 191 192 193
      docopt
      formatR
      purrr
      knitr
      cowplot
      plotly
      lubridate
      dplyr
      ggplot2
      xtable
      ggthemes
      data_table
    ];};

194 195 196 197 198 199 200 201 202 203 204
    jupyter =
      let
        jupyter = import (fetched jupyter/pin.json) {};
      in
       (jupyter.jupyterlabWith {
          kernels = [
            (jupyter.kernels.juniperWith {
              name = "analysis";
              packages = p: with p; [ ggplot2
                  pkgs.which
                  docopt
Valentin Reis's avatar
Valentin Reis committed
205
                  purrr
206 207
                  knitr
                  cowplot
Valentin Reis's avatar
Valentin Reis committed
208
                  plotly
209 210 211 212 213 214 215 216 217 218 219
                  lubridate
                  dplyr
                  ggplot2
                  xtable
                  ggthemes
                  data_table
              ];
            })
          ];
         }).env;

Valentin Reis's avatar
Valentin Reis committed
220 221 222 223 224 225 226 227 228 229 230 231 232 233
    doArgotk = command: test.overrideAttrs (old:{
      buildPhase = "argotk "+command;
      installPhase = ''
        mkdir $out
        cp _output/* $out/
      '';
    });
    testHello       = doArgotk "TestHello";
    testListen      = doArgotk "TestListen";
    testPerfwrapper = doArgotk "TestPerfwrapper";
    testPower       = doArgotk "TestPower";
    testSTREAM      = doArgotk "TestSTREAM";
    testAll         = doArgotk "tests";

234
  };
235
# re-exporting a full nixpkgs-like package set
236
in pkgs // argopkgs