{ pkgs, lib, config, enabled, ... }: let inherit (lib) mkEnableOption mkIf mkOption literalExpression types optionals ; cfg = config.oizys.nix-ld; # https://github.com/NixOS/nixpkgs/blob/a4f437f0f5db62e6bcd7979c10eab177dd0fa188/nixos/modules/programs/nix-ld.nix#L44-L59 defaultLibraries = with pkgs; [ zlib zstd stdenv.cc.cc curl openssl attr libssh bzip2 libxml2 acl libsodium util-linux xz systemd ]; # https://github.com/Mic92/dotfiles/blob/340152bdf4bd193269474426ca5d90c479aae0b7/nixos/modules/nix-ld.nix#L7-L58 overkillLibraries = with pkgs; [ alsa-lib at-spi2-atk at-spi2-core atk cairo cups curl dbus expat fontconfig freetype fuse3 gdk-pixbuf glib gtk3 icu libGL libappindicator-gtk3 libdrm libglvnd libnotify libpulseaudio libunwind libusb1 libuuid libxkbcommon mesa nspr nss openssl pango pipewire stdenv.cc.cc systemd vulkan-loader xorg.libX11 xorg.libXScrnSaver xorg.libXcomposite xorg.libXcursor xorg.libXdamage xorg.libXext xorg.libXfixes xorg.libXi xorg.libXrandr xorg.libXrender xorg.libXtst xorg.libxcb xorg.libxkbfile xorg.libxshmfence zlib ]; in { options.oizys.nix-ld = { enable = mkEnableOption "enable nix-ld support"; extra-libraries = mkOption { type = types.listOf types.package; description = "Libraries that automatically become available to all programs."; default = [ ]; defaultText = literalExpression "baseLibraries derived from systemd and nix dependencies."; }; overkill.enable = mkEnableOption "enable overkill list of libraries"; }; config = let libs = defaultLibraries ++ cfg.extra-libraries ++ (optionals cfg.overkill.enable overkillLibraries); in mkIf cfg.enable { programs.nix-ld = enabled // { package = pkgs.nix-ld-rs; libraries = libs; }; }; }