final: prev: { nvidia-container-toolkit = final.stdenv.mkDerivation { pname = "nvidia-container-toolkit-debug"; version = prev.nvidia-container-toolkit.version; # This is key: multiple outputs, so you can reference them later as: # $out -> for main # $tools -> for the 'tools' output in your new derivation outputs = [ "out" "tools" ]; # No source required for a pure wrap src = null; dontUnpack = true; dontPatchShell = true; buildInputs = [ ]; # Create wrapper scripts for each set of binaries buildPhase = '' # --- Wrap binaries from the main output of the original toolkit --- mkdir -p wrapper-out if [ -d "${prev.nvidia-container-toolkit}/bin" ]; then for exe in $(ls ${prev.nvidia-container-toolkit}/bin); do cat > wrapper-out/$exe <> /var/log/nvidia-container-toolkit/$exe.startup.log 2>/dev/null || true # --- COMMAND INVOCATION LOG --- echo "\$(date '+%Y-%m-%d %H:%M:%S') - Executing $exe with args: \$@" \ >> /var/log/nvidia-container-toolkit/$exe.log 2>/dev/null || true # --- Run the real tool, piping stdout+stderr to tee --- ${prev.nvidia-container-toolkit}/bin/$exe "\$@" > \ >(tee -a /var/log/nvidia-container-toolkit/$exe.stdout.log) \ 2> >(tee -a /var/log/nvidia-container-toolkit/$exe.stderr.log >&2) exit_code=\$? # --- FINISHED LOG --- echo "\$(date '+%Y-%m-%d %H:%M:%S') - Finished $exe with exit code: \$exit_code" >> \ /var/log/nvidia-container-toolkit/$exe.log 2>/dev/null || true EOF chmod +x wrapper-out/$exe done fi # --- Wrap binaries from the 'tools' output of the original toolkit --- mkdir -p wrapper-tools if [ -d "${prev.nvidia-container-toolkit.tools}/bin" ]; then for exe in $(ls ${prev.nvidia-container-toolkit.tools}/bin); do cat > wrapper-tools/$exe <> /var/log/nvidia-container-toolkit/startup.log 2>/dev/null || true # --- COMMAND INVOCATION LOG --- echo "\$(date '+%Y-%m-%d %H:%M:%S') - Executing $exe with args: \$@" \ >> /var/log/nvidia-container-toolkit/tools.log 2>/dev/null || true # --- Run the real tool, piping stdout+stderr to tee --- exec ${prev.nvidia-container-toolkit.tools}/bin/$exe "\$@" 2>&1 | \ tee -a /var/log/nvidia-container-toolkit/tools.log EOF chmod +x wrapper-tools/$exe done fi ''; installPhase = '' # For the main output of our wrapper derivation mkdir -p $out/bin if [ -d wrapper-out ]; then cp wrapper-out/* $out/bin/ fi # For the 'tools' output of our wrapper derivation mkdir -p $tools/bin if [ -d wrapper-tools ]; then cp wrapper-tools/* $tools/bin/ fi ''; # If you need runtime dependencies, inherit them from the original package propagatedBuildInputs = prev.nvidia-container-toolkit.propagatedBuildInputs or []; propagatedUserEnvPkgs = prev.nvidia-container-toolkit.propagatedUserEnvPkgs or []; meta = { description = "Debug-wrapped NVIDIA Container Toolkit with separate tools output."; homepage = prev.nvidia-container-toolkit.meta.homepage; license = prev.nvidia-container-toolkit.meta.license; maintainers = prev.nvidia-container-toolkit.meta.maintainers; platforms = prev.nvidia-container-toolkit.meta.platforms; }; }; rofi-systemd = prev.rofi-systemd.overrideAttrs (_: { src = prev.fetchFromGitHub { repo = "rofi-systemd"; owner = "IvanMalison"; rev = "078bdb833a32cc84538d329085fbfe00c7d4d1b6"; sha256 = "sha256-ikwIc8vR2VV3bHXEtLrGgKklpz1NSRUJoJny0iRNViQ="; }; }); git-sync = prev.git-sync.overrideAttrs (_: { src = prev.fetchFromGitHub { repo = "git-sync"; owner = "IvanMalison"; rev = "92544e76553c25da2d40d06a230ecd0a6e13c114"; sha256 = "sha256-hBtdvxAtFUMtLqGmy1wbDk796LQcYCth29fv8L0WQyQ="; }; }); picom = prev.picom.overrideAttrs (old: { src = prev.fetchFromGitHub { repo = "picom"; owner = "dccsillag"; rev = "51b21355696add83f39ccdb8dd82ff5009ba0ae5"; sha256 = "sha256-crCwRJd859DCIC0pEerpDqdX2j8ZrNAzVaSSB3mTPN8=="; }; nativeBuildInputs = old.nativeBuildInputs ++ [final.pcre final.gnugrep.pcre2 final.asciidoc]; buildInputs = old.buildInputs ++ [final.pcre]; nativeInstallCheckInputs = []; doCheck = false; dontCheck = true; }); expressvpn = prev.expressvpn.overrideAttrs (_: { src = prev.fetchurl { url = "https://www.expressvpn.works/clients/linux/expressvpn_3.46.0.7-1_amd64.deb"; hash = "sha256-v0rr1s32jj79A8IGfJgSGJVlz7rSnZYn4ealOpqee0w="; }; }); gnupg_2_4_0 = prev.gnupg.overrideAttrs (_: rec { pname = "gnupg"; # 2.4.1 breaks emacs version = "2.4.0"; src = prev.fetchurl { url = "mirror://gnupg/gnupg/${pname}-${version}.tar.bz2"; hash = "sha256-HXkVjdAdmSQx3S4/rLif2slxJ/iXhOosthDGAPsMFIM="; }; }); emacs = prev.emacs29.override { withNativeCompilation = true; withTreeSitter = true; }; python-with-my-packages = let my-python-packages = python-packages: with python-packages; [ argcomplete appdirs ipdb ipython numpy openpyxl pip requests tox ]; in final.python311.withPackages my-python-packages; # gitea = prev.gitea.overrideAttrs(_: { # src = prev.fetchFromGitHub { # repo = "gitea"; # owner = "colonelpanic8"; # rev = "40e15b12bf104f8018f56e5b826d8a2f8e2587ea"; # sha256 = "sha256-VXP8Ga681rcKn548rOZq9I19abY0GzXRpdiYGpwyMJ4="; # }; # go = final.buildPackages.go_1_21; # }); }