diff --git a/nixGL.nix b/nixGL.nix new file mode 100644 index 0000000..dc7c644 --- /dev/null +++ b/nixGL.nix @@ -0,0 +1,34 @@ +# Call once on import to load global context +{ pkgs, config }: + +let nixGL = import {}; in + +# Wrap a single package +pkg: + +# Wrap the package's binaries with nixGL, while preserving the rest of +# the outputs and derivation attributes. + (pkg.overrideAttrs (old: { + name = "nixGL-${pkg.name}"; + buildCommand = '' + set -eo pipefail + + ${ + # Heavily inspired by https://stackoverflow.com/a/68523368/6259505 + pkgs.lib.concatStringsSep "\n" (map (outputName: '' + echo "Copying output ${outputName}" + set -x + cp -rs --no-preserve=mode "${pkg.${outputName}}" "''$${outputName}" + set +x + '') (old.outputs or [ "out" ]))} + + rm -rf $out/bin/* + shopt -s nullglob # Prevent loop from running if no files + for file in ${pkg.out}/bin/*; do + echo "#!${pkgs.bash}/bin/bash" > "$out/bin/$(basename $file)" + echo "exec -a \"\$0\" ${nixGL.auto.nixGLDefault}/bin/nixGL $file \"\$@\"" >> "$out/bin/$(basename $file)" + chmod +x "$out/bin/$(basename $file)" + done + shopt -u nullglob # Revert nullglob back to its normal default state + ''; + })) diff --git a/packages.nix b/packages.nix index ad84661..327a299 100644 --- a/packages.nix +++ b/packages.nix @@ -1,4 +1,6 @@ { config, pkgs, ... }: +let nixGL = import ./nixGL.nix { inherit pkgs config; }; +in { home.packages = with pkgs; [ mullvad-vpn @@ -7,6 +9,7 @@ htop ollama wget + (nixGL firefox) ripgrep bat monolith @@ -18,6 +21,7 @@ obsidian dfc anki + (nixGL digikam) deno nodejs_21 ];