summary refs log tree commit diff
path: root/nixos/modules/programs/nix-ld.nix
diff options
context:
space:
mode:
authorJörg Thalheim <joerg@thalheim.io>2022-12-18 01:35:04 +0100
committerJörg Thalheim <joerg@thalheim.io>2022-12-19 17:06:41 +0100
commit4ce47012a6f5f6c1c65f370fd06d33a81c2df332 (patch)
treed79eff23a37ee892d7fd3d2957a6a01b868454f1 /nixos/modules/programs/nix-ld.nix
parenta4807c14ff849569d243a187ed01c2ff0cec92fc (diff)
downloadnixpkgs-4ce47012a6f5f6c1c65f370fd06d33a81c2df332.tar
nixpkgs-4ce47012a6f5f6c1c65f370fd06d33a81c2df332.tar.gz
nixpkgs-4ce47012a6f5f6c1c65f370fd06d33a81c2df332.tar.bz2
nixpkgs-4ce47012a6f5f6c1c65f370fd06d33a81c2df332.tar.lz
nixpkgs-4ce47012a6f5f6c1c65f370fd06d33a81c2df332.tar.xz
nixpkgs-4ce47012a6f5f6c1c65f370fd06d33a81c2df332.tar.zst
nixpkgs-4ce47012a6f5f6c1c65f370fd06d33a81c2df332.zip
nixos/nix-ld: set NIX_LD by default
Diffstat (limited to 'nixos/modules/programs/nix-ld.nix')
-rw-r--r--nixos/modules/programs/nix-ld.nix62
1 files changed, 60 insertions, 2 deletions
diff --git a/nixos/modules/programs/nix-ld.nix b/nixos/modules/programs/nix-ld.nix
index 602278d1ba9..f753cf5f97e 100644
--- a/nixos/modules/programs/nix-ld.nix
+++ b/nixos/modules/programs/nix-ld.nix
@@ -1,10 +1,68 @@
 { pkgs, lib, config, ... }:
+let
+  cfg = config.programs.nix-ld;
+
+  # TODO make glibc here configureable?
+  nix-ld-so = pkgs.runCommand "ld.so" {} ''
+    ln -s "$(cat '${pkgs.stdenv.cc}/nix-support/dynamic-linker')" $out
+  '';
+
+  nix-ld-libraries = pkgs.buildEnv {
+    name = "lb-library-path";
+    pathsToLink = [ "/lib" ];
+    paths = map lib.getLib cfg.libraries;
+    extraPrefix = "/share/nix-ld";
+    ignoreCollisions = true;
+  };
+
+  # We currently take all libraries from systemd and nix as the default.
+  # Is there a better list?
+  baseLibraries = with pkgs; [
+    zlib
+    zstd
+    stdenv.cc.cc
+    curl
+    openssl
+    attr
+    libssh
+    bzip2
+    libxml2
+    acl
+    libsodium
+    util-linux
+    xz
+    systemd
+  ];
+in
 {
   meta.maintainers = [ lib.maintainers.mic92 ];
   options = {
-    programs.nix-ld.enable = lib.mkEnableOption (lib.mdDoc ''nix-ld, Documentation: <https://github.com/Mic92/nix-ld>'');
+    programs.nix-ld = {
+      enable = lib.mkEnableOption (lib.mdDoc ''nix-ld, Documentation: <https://github.com/Mic92/nix-ld>'');
+      package = lib.mkOption {
+        type = lib.types.package;
+        description = lib.mdDoc "Which package to use for the nix-ld.";
+        default = pkgs.nix-ld;
+        defaultText = lib.mdDoc "pkgs.nix-ld";
+      };
+      libraries = lib.mkOption {
+        type = lib.types.listOf lib.types.package;
+        description = lib.mdDoc "Libraries that automatically become available to all programs. The default set includes common libraries.";
+        default = baseLibraries;
+        defaultText = lib.mdDoc "baseLibraries";
+      };
+    };
   };
   config = lib.mkIf config.programs.nix-ld.enable {
-    systemd.tmpfiles.packages = [ pkgs.nix-ld ];
+    systemd.tmpfiles.packages = [ cfg.package ];
+
+    environment.systemPackages = [ nix-ld-libraries ];
+
+    environment.pathsToLink = [ "/share/nix-ld" ];
+
+    environment.variables = {
+      NIX_LD = toString nix-ld-so;
+      NIX_LD_LIBRARY_PATH = "/run/current-system/sw/share/nix-ld/lib";
+    };
   };
 }