nixos-config/lib/env-specific/wrapper-manager.nix

44 lines
1.3 KiB
Nix

{ pkgs, lib, self }:
rec {
/* Given a Blender package and its addons to be wrapped, create a derivation
containing all of the addons properly placed as a system resource folder.
*/
wrapBlenderAddons = { blenderPackage, addons }:
let
blenderVersion = lib.versions.majorMinor blenderPackage.version;
in
pkgs.runCommand "blender-system-resources"
{
passAsFile = [ "paths" ];
paths = addons ++ [ blenderPackage ];
nativeBuildInputs = with pkgs; [ outils ];
} ''
mkdir -p $out
for i in $(cat $pathsPath); do
resourcesPath="$i/share/blender"
if [ -d $i/share/blender/${blenderVersion} ]; then
resourcesPath="$i/share/blender/${blenderVersion}";
fi
lndir -silent $resourcesPath $out
done
'';
makeBlenderWrapper = module@{ blenderPackage, blenderArgs ? [ ] , addons ? [ ], ... }:
let
blenderAddons = wrapBlenderAddons { inherit blenderPackage addons; };
in
lib.mkMerge [
{
arg0 = lib.getExe' blenderPackage "blender";
prependArgs = lib.mkBefore blenderArgs;
}
(lib.mkIf (builtins.length addons > 0) {
env.BLENDER_SYSTEM_RESOURCES.value = blenderAddons;
})
(lib.removeAttrs module [ "blenderPackage" "blenderArgs" "addons" ])
];
}