at master 1.8 kB view raw
1{ 2 pkgs, 3 lib, 4 config, 5 ... 6}: 7let 8 cfg = config.programs.nix-ld; 9 10 nix-ld-libraries = pkgs.buildEnv { 11 name = "ld-library-path"; 12 pathsToLink = [ "/lib" ]; 13 paths = map lib.getLib cfg.libraries; 14 # TODO make glibc here configurable? 15 postBuild = '' 16 ln -s ${pkgs.stdenv.cc.bintools.dynamicLinker} $out/share/nix-ld/lib/ld.so 17 ''; 18 extraPrefix = "/share/nix-ld"; 19 ignoreCollisions = true; 20 }; 21in 22{ 23 meta.maintainers = [ lib.maintainers.mic92 ]; 24 options.programs.nix-ld = { 25 enable = lib.mkEnableOption ''nix-ld, Documentation: <https://github.com/nix-community/nix-ld>''; 26 package = lib.mkPackageOption pkgs "nix-ld" { }; 27 libraries = lib.mkOption { 28 type = lib.types.listOf lib.types.package; 29 description = "Libraries that automatically become available to all programs. The default set includes common libraries."; 30 default = [ ]; 31 defaultText = lib.literalExpression "baseLibraries derived from systemd and nix dependencies."; 32 }; 33 }; 34 35 config = lib.mkIf config.programs.nix-ld.enable { 36 environment.ldso = "${cfg.package}/libexec/nix-ld"; 37 38 environment.systemPackages = [ nix-ld-libraries ]; 39 40 environment.pathsToLink = [ "/share/nix-ld" ]; 41 42 environment.sessionVariables = { 43 NIX_LD = "/run/current-system/sw/share/nix-ld/lib/ld.so"; 44 NIX_LD_LIBRARY_PATH = "/run/current-system/sw/share/nix-ld/lib"; 45 }; 46 47 # We currently take all libraries from systemd and nix as the default. 48 # Is there a better list? 49 programs.nix-ld.libraries = with pkgs; [ 50 zlib 51 zstd 52 stdenv.cc.cc 53 curl 54 openssl 55 attr 56 libssh 57 bzip2 58 libxml2 59 acl 60 libsodium 61 util-linux 62 xz 63 systemd 64 ]; 65 }; 66}