units.si: add four new si units
[factor.git] / shell.nix
1 { pkgs ? import <nixpkgs> {} }:
2 with pkgs;
3 let
4   mkClangShell = mkShell.override { stdenv = clangStdenv; };
5   runtimeLibs = with xorg; [
6     glib
7     pango cairo
8     pcre
9     libGL
10     libGLU
11     freealut
12     openssl
13     udis86 # available since NixOS 19.09
14     openal
15     libogg
16     libvorbis
17     zlib
18   ] ++ (if stdenv.isDarwin then [] else [
19     gtk2-x11
20     gdk_pixbuf
21     gnome2.gtkglext
22   ]);
23   runtimeLibPath = "/run/opengl-driver/lib:" + lib.makeLibraryPath runtimeLibs;
24 in
25 (mkClangShell {
26   name = "factor-shell-env";
27   LD_LIBRARY_PATH = runtimeLibPath ;
28   buildInputs = runtimeLibs ++ [
29     # for building factor
30     git
31     curl
32     makeWrapper
33   ] ++ (if stdenv.isDarwin then [darwin.apple_sdk.frameworks.Cocoa] else []);
34   shellHook = ''
35     # Set Gdk pixbuf loaders file to the one from the build dependencies here
36     unset GDK_PIXBUF_MODULE_FILE
37     # Defined in gdk-pixbuf setup hook
38     findGdkPixbufLoaders "${pkgs.librsvg}"
39
40     wrapFactor () {
41     [ -n "$1" ] || { printf "Usage: wrapFactor <factor-root>" ; return; }
42     local root="$(realpath $1)"
43     local binary="''${root}/factor"
44     local wrapped="''${root}/.factor-wrapped"
45     # Remove the wrapped binary if a new VM has been compiled
46     ${lib.getBin file}/bin/file "$binary" |grep ELF >/dev/null && rm -f "$wrapped"
47     # Restore the factor binary if it was already wrapped
48     [ -e "$wrapped" ] && { mv "$wrapped" "$binary" ; }
49     wrapProgram "$binary" --prefix LD_LIBRARY_PATH : ${runtimeLibPath} \
50       --set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE" \
51       --argv0 factor
52     ln -sf "''${root}/factor.image" "''${root}/.factor-wrapped.image"
53     }
54   '';
55 })