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: prev: {
|
||||||
deconz = final.qt5.callPackage ./pkgs/deconz { };
|
deconz = final.qt5.callPackage ./pkgs/deconz { };
|
||||||
};
|
};
|
||||||
|
wrappers = final: prev: {
|
||||||
|
genericBinWrapper = final.callPackage ./pkgs/generic-bin-wrapper { };
|
||||||
|
mullvadExcludeWrapper =
|
||||||
|
final.callPackage ./pkgs/mullvad-exclude-wrapper { };
|
||||||
|
};
|
||||||
};
|
};
|
||||||
nixosModules = {
|
nixosModules = {
|
||||||
flakeDefaults = import ./modules/flakeDefaults.nix;
|
flakeDefaults = import ./modules/flakeDefaults.nix;
|
||||||
|
@ -80,7 +85,13 @@
|
||||||
};
|
};
|
||||||
systemDefaults = {
|
systemDefaults = {
|
||||||
modules = [ nixosModules.flakeDefaults agenix.nixosModules.default ];
|
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 {
|
lib = rec {
|
||||||
createSystem = hostName:
|
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