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