]> gitweb.factorcode.org Git - factor.git/blob - shell.nix
webapps.help: whoops, fix using
[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     gtk2-x11
9     gdk_pixbuf
10     gnome2.gtkglext
11     pcre
12     libGL
13     libGLU
14     freealut
15     openssl
16     udis86 # available since NixOS 19.09
17     openal
18     libogg
19     libvorbis
20     zlib
21   ];
22   runtimeLibPath = "/run/opengl-driver/lib:" + lib.makeLibraryPath runtimeLibs;
23 in
24 (mkClangShell {
25   name = "factor-shell-env";
26   LD_LIBRARY_PATH = runtimeLibPath ;
27   buildInputs = runtimeLibs ++ [
28     # for building factor
29     git
30     curl
31     makeWrapper
32   ];
33   shellHook = ''
34     # Set Gdk pixbuf loaders file to the one from the build dependencies here
35     unset GDK_PIXBUF_MODULE_FILE
36     # Defined in gdk-pixbuf setup hook
37     findGdkPixbufLoaders "${pkgs.librsvg}"
38
39     wrapFactor () {
40     [ -n "$1" ] || { printf "Usage: wrapFactor <factor-root>" ; return; }
41     local root="$(realpath $1)"
42     local binary="''${root}/factor"
43     local wrapped="''${root}/.factor-wrapped"
44     # Remove the wrapped binary if a new VM has been compiled
45     ${lib.getBin file}/bin/file "$binary" |grep ELF >/dev/null && rm -f "$wrapped"
46     # Restore the factor binary if it was already wrapped
47     [ -e "$wrapped" ] && { mv "$wrapped" "$binary" ; }
48     wrapProgram "$binary" --prefix LD_LIBRARY_PATH : ${runtimeLibPath} \
49       --set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE" \
50       --argv0 factor
51     ln -sf "''${root}/factor.image" "''${root}/.factor-wrapped.image"
52     }
53   '';
54 })