main
 1{
 2  den.aspects.desktop.app.obs-studio = {
 3    persistHome = {config, ...}: {
 4      directories = [
 5        "${config.xdg.config.directory}/obs-studio"
 6      ];
 7    };
 8
 9    nixos = {config, ...}: {
10      # From https://github.com/NixOS/nixpkgs/blob/f8cc9d1b80b6c75fec21ecc549f631c3eed5a5e1/nixos/modules/programs/obs-studio.nix
11      boot = {
12        kernelModules = ["v4l2loopback"];
13        # TODO: Remove workaround after https://github.com/NixOS/nixpkgs/pull/575861 merged
14        # extraModulePackages = [config.boot.kernelPackages.v4l2loopback];
15        extraModulePackages = [
16          (config.boot.kernelPackages.v4l2loopback.overrideAttrs (old: {
17            preBuild = "";
18            installFlags = [
19              "DEPMOD=true"
20              "INSTALL_MOD_PATH=${placeholder "out"}"
21            ];
22          }))
23        ];
24
25        extraModprobeConfig = ''
26          options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1
27        '';
28      };
29    };
30
31    hjem = {pkgs, ...}: {
32      packages = [
33        (pkgs.wrapOBS {
34          plugins = with pkgs.obs-studio-plugins; [
35            input-overlay
36            obs-pipewire-audio-capture
37            obs-vkcapture
38            obs-backgroundremoval
39          ];
40        })
41      ];
42    };
43  };
44
45  den.aspects.desktop.app.obs-studio.themes = {
46    catppuccin = {
47      hjem = {pkgs, ...}: let
48        catppuccin-obs = pkgs.fetchFromGitHub {
49          owner = "catppuccin";
50          repo = "obs";
51          rev = "054a297d303a5bac4f1652a13b17d78a13201c0e";
52          hash = "sha256-zFg7dgxLIK3K1KpLdEgphH2JpdMwVTovr+oKiAqdLEE=";
53        };
54      in {
55        xdg.config.files."obs-studio/themes".source = "${catppuccin-obs}/themes";
56      };
57    };
58  };
59}