aboutsummaryrefslogtreecommitdiff
path: root/lib/cfgWrapper.nix
diff options
context:
space:
mode:
authorCollin Williams <96917990+bluedragon1221@users.noreply.github.com>2025-06-09 17:40:46 +0000
committerCollin Williams <96917990+bluedragon1221@users.noreply.github.com>2025-06-09 17:40:46 +0000
commita45c4551712c1ba5cb82eaf290f311ab0e8690e4 (patch)
treef62b23489fb31f8ea58fef77f99619efd784eb36 /lib/cfgWrapper.nix
big changes
Diffstat (limited to 'lib/cfgWrapper.nix')
-rw-r--r--lib/cfgWrapper.nix63
1 files changed, 63 insertions, 0 deletions
diff --git a/lib/cfgWrapper.nix b/lib/cfgWrapper.nix
new file mode 100644
index 0000000..2e57656
--- /dev/null
+++ b/lib/cfgWrapper.nix
@@ -0,0 +1,63 @@
+{pkgs}: {
+ pkg,
+ binName ? pkg.meta.mainProgram,
+ extraFlags ? [],
+ extraWrapperFlags ? [],
+ extraPkgs ? [],
+ extraEnv ? {},
+ postBuild ? "",
+ hidePkgs ? false,
+ reducePath ? false,
+}: let
+ extraFlagsArgs = pkgs.lib.pipe extraFlags [
+ (builtins.map (x: ''--add-flags "${x}" ''))
+ (builtins.concatStringsSep " ")
+ ];
+
+ extraWrapperFlagsArgs = builtins.concatStringsSep " " extraWrapperFlags;
+
+ pathArg =
+ if (extraPkgs != [])
+ then ''--prefix PATH : "${pkgs.lib.makeBinPath extraPkgs}"''
+ else "";
+
+ # Looks like {
+ # VAR = "value";
+ # VAR2 = "value_again";
+ # }
+ envArgs = pkgs.lib.pipe extraEnv [
+ (builtins.mapAttrs (k: v: ''--set ${k} "${v}"''))
+ builtins.attrValues
+ (builtins.concatStringsSep " ")
+ ];
+
+ extraPkgs2 =
+ if reducePath
+ then
+ (pkgs.symlinkJoin {
+ name = "${binName}-extra-pkgs";
+ paths = extraPkgs;
+ })
+ else extraPkgs;
+
+ wrapped-program = pkgs.symlinkJoin {
+ name = "${binName}-wrapped-program";
+ paths = [pkg] ++ extraPkgs2;
+
+ buildInputs = [pkgs.makeWrapper];
+ postBuild = ''
+ ${postBuild}
+
+ wrapProgram $out/bin/${binName} ${extraFlagsArgs} ${pathArg} ${envArgs} ${extraWrapperFlagsArgs}
+ '';
+ };
+in
+ if hidePkgs
+ then
+ (pkgs.linkFarm "${binName}-only-bin" [
+ {
+ name = "bin/${binName}";
+ path = "${wrapped-program}/bin/${binName}";
+ }
+ ])
+ else wrapped-program