From a87456789844e9eddc1d0e5d7362ea53bce924f2 Mon Sep 17 00:00:00 2001 From: Gabriel Arazas Date: Sat, 23 Sep 2023 22:21:18 +0800 Subject: [PATCH] programs/blender: init NixOS module --- modules/nixos/default.nix | 1 + modules/nixos/programs/blender.nix | 53 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 modules/nixos/programs/blender.nix diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix index ada984c7..ed43619f 100644 --- a/modules/nixos/default.nix +++ b/modules/nixos/default.nix @@ -6,6 +6,7 @@ let modules = [ + ./programs/blender.nix ./programs/cardboard-wm.nix ./programs/kiwmi.nix ./programs/pop-launcher.nix diff --git a/modules/nixos/programs/blender.nix b/modules/nixos/programs/blender.nix new file mode 100644 index 00000000..8401e309 --- /dev/null +++ b/modules/nixos/programs/blender.nix @@ -0,0 +1,53 @@ +{ 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; + }; +}