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

54 lines
1.6 KiB
Nix

{ config, options, lib, pkgs, ... }:
let
cfg = config.programs.blender;
addons = pkgs.symlinkJoin {
name = "blender-${lib.majorMinor cfg.package.version}-addons";
paths = builtins.map (p: "${p}/share/blender") cfg.addons;
};
in
{
options.programs.blender = {
enable = lib.mkEnableOption "Blender, a 3D computer graphics tool";
package = lib.mkPackageOption pkgs "blender" {
example = ''
pkgs.blender-with-packages {
name = "sample-studio-wrapped";
packages = with pkgs.pythonPackages; [ pandas ];
}
'';
};
addons = lib.mkOption {
type = with lib.types; listOf package;
description = lib.mdDoc ''
List of packages to be added to Blender system resources. The addon
packages are expected to be in {file}`$out/share/blender`.
'';
default = [ ];
defaultText = "[]";
example = lib.literalExpression ''
with pkgs; [
blender-addons-machin3tools
blender-addons-glslTexture
]
'';
};
};
cfg = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
# Modify the search path of the Blender addons. Since the default path is
# on `/usr/share/blender/$MAJOR.$MINOR`, we'll have to modify it with an
# environment variable. This means in a NixOS system, it is only expected
# to have one instance of the system resources.
environment.sessionVariables.BLENDER_SYSTEM_RESOURCES = lib.mkIf (builtins.length cfg.addons > 0) "/etc/blender";
# It is acceptable to have this as a read-only directory, right?
environment.etc.blender.source = addons;
};
}