From a2d2991e3207214a3c7c57a830de27ed0d6a1791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Schr=C3=B6ter?= Date: Wed, 26 Apr 2023 00:11:42 +0200 Subject: [PATCH] feat(pkgs): add genericBinWrapper & mullvadExcludeWrapper These allow creating wrapped packages that passthrough their arguments, so `.override` can still be called on them with same arguments. --- flake.nix | 13 +++++++++- pkgs/generic-bin-wrapper/default.nix | 32 ++++++++++++++++++++++++ pkgs/mullvad-exclude-wrapper/default.nix | 7 ++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 pkgs/generic-bin-wrapper/default.nix create mode 100644 pkgs/mullvad-exclude-wrapper/default.nix diff --git a/flake.nix b/flake.nix index a80883c..9bbd8eb 100644 --- a/flake.nix +++ b/flake.nix @@ -68,6 +68,11 @@ deconz = final: prev: { deconz = final.qt5.callPackage ./pkgs/deconz { }; }; + wrappers = final: prev: { + genericBinWrapper = final.callPackage ./pkgs/generic-bin-wrapper { }; + mullvadExcludeWrapper = + final.callPackage ./pkgs/mullvad-exclude-wrapper { }; + }; }; nixosModules = { flakeDefaults = import ./modules/flakeDefaults.nix; @@ -80,7 +85,13 @@ }; systemDefaults = { modules = [ nixosModules.flakeDefaults agenix.nixosModules.default ]; - overlays = with overlays; [ unstable nur.overlay neovim deconz ]; + overlays = with overlays; [ + unstable + nur.overlay + neovim + deconz + wrappers + ]; }; lib = rec { createSystem = hostName: diff --git a/pkgs/generic-bin-wrapper/default.nix b/pkgs/generic-bin-wrapper/default.nix new file mode 100644 index 0000000..2ec07ce --- /dev/null +++ b/pkgs/generic-bin-wrapper/default.nix @@ -0,0 +1,32 @@ +{ stdenv, callPackage }: + +{ package # pkg must contain $out/bin with executables within. +, binPath ? + "bin/${package.meta.mainProgram or package.pname}" # path to look for binary +, wrapper # wrapper must contain @EXECUTABLE@ as a placeholder for the binary to run. +}: + +# pass through all arguments to wrapped package to allow overriding +# arguments in wrapped package +callPackage (args: + stdenv.mkDerivation { + name = "${package.name}-wrapped"; + inherit (package) version; + src = package.override args; + dontUnpack = true; + + # inherit passthru + inherit (package) passthru; + + installPhase = '' + local executable=$out/${binPath} + install -D ${wrapper} "$executable" + substituteInPlace "$executable" --subst-var-by EXECUTABLE "$f" + + # Symlink the share directory so that .desktop files and such continue to work. + if [[ -d $src/share ]] + then + ln -s $src/share $out/share + fi + ''; + }) { } diff --git a/pkgs/mullvad-exclude-wrapper/default.nix b/pkgs/mullvad-exclude-wrapper/default.nix new file mode 100644 index 0000000..abff3c3 --- /dev/null +++ b/pkgs/mullvad-exclude-wrapper/default.nix @@ -0,0 +1,7 @@ +{ writeShellScript, genericBinWrapper, mullvad-vpn }: +args: +let + wrapper = writeShellScript "mullvad-exclude" '' + ${mullvad-vpn}/bin/mullvad-exclude "@EXECUTABLE@" "$@" + ''; +in genericBinWrapper (args // { inherit wrapper; })