nixos-config/modules/wrapper-manager/programs/blender.nix

68 lines
1.7 KiB
Nix
Raw Normal View History

{ config, lib, pkgs, ... }:
let
cfg = config.programs.blender;
blenderVersion = lib.versions.majorMinor cfg.package.version;
addons =
pkgs.runCommand "blender-system-resources"
{
passAsFile = [ "paths" ];
paths = cfg.addons ++ [ cfg.package ];
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
'';
in
{
options.programs.blender = {
enable = lib.mkEnableOption "Blender, a 3D computer graphics tool";
package = lib.mkPackageOption pkgs "blender" {
2024-10-11 05:40:57 +00:00
example = ''
pkgs.blender-with-packages {
name = "sample-studio-wrapped";
packages = with pkgs.python3Packages; [ pandas ];
}
'';
};
addons = lib.mkOption {
type = with lib.types; listOf package;
description = lib.mdDoc ''
List of packages providing Blender system resources at
{file}`/share/blender` or at {file}`/share/blender/$MAJORMINORVERSION`.
'';
default = [ ];
defaultText = "[]";
example = lib.literalExpression ''
with pkgs; [
blender-addons-machin3tools
blender-addons-glslTexture
]
'';
};
};
config = lib.mkIf cfg.enable (lib.mkMerge [
{
basePackages = [ cfg.package ];
wrappers.blender = {
arg0 = lib.getExe' cfg.package "blender";
};
}
(lib.mkIf (builtins.length cfg.addons > 0) {
wrappers.blender.env.BLENDER_SYSTEM_RESOURCES.value = addons;
})
]);
}