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.
This commit is contained in:
parent
3f41074f15
commit
a2d2991e32
13
flake.nix
13
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:
|
||||
|
|
32
pkgs/generic-bin-wrapper/default.nix
Normal file
32
pkgs/generic-bin-wrapper/default.nix
Normal file
|
@ -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
|
||||
'';
|
||||
}) { }
|
7
pkgs/mullvad-exclude-wrapper/default.nix
Normal file
7
pkgs/mullvad-exclude-wrapper/default.nix
Normal file
|
@ -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; })
|
Loading…
Reference in a new issue