{ lib, config, username, pkgs, ... }: let cfg = config.obs; in { options = { obs = { enable = lib.mkEnableOption "Enable obs in home-manager"; enableFlatpak = lib.mkOption { type = lib.types.bool; default = false; }; enableNative = lib.mkOption { type = lib.types.bool; default = true; }; silenceOutput = lib.mkOption { type = lib.types.bool; default = true; }; }; }; config = lib.mkIf cfg.enable { home-manager.users.${username} = { home = { packages = lib.mkIf cfg.enableNative [ pkgs.obs-cmd ]; sessionVariables = lib.mkIf cfg.silenceOutput { OBS_VKCAPTURE_QUIET = "1"; }; }; programs.obs-studio = { enable = cfg.enableNative; plugins = with pkgs.obs-studio-plugins; [ input-overlay looking-glass-obs obs-gstreamer obs-pipewire-audio-capture obs-vaapi obs-vkcapture ]; }; services.flatpak = { packages = lib.mkIf cfg.enableFlatpak [ "com.obsproject.Studio" "com.obsproject.Studio.Plugin.InputOverlay" "com.obsproject.Studio.Plugin.OBSVkCapture" "org.freedesktop.Platform.VulkanLayer.OBSVkCapture/x86_64/24.08" ]; }; xdg = { desktopEntries = { "com.obsproject.Studio" = lib.mkIf cfg.enableFlatpak { name = "OBS Studio"; comment = "Flatpak - Free and Open Source Streaming/Recording Software"; exec = "flatpak run --branch=stable --arch=x86_64 --command=obs com.obsproject.Studio --disable-shutdown-check"; terminal = false; icon = "com.obsproject.Studio"; type = "Application"; startupNotify = true; categories = [ "AudioVideo" "Recorder" ]; }; "obs" = lib.mkIf cfg.enableNative { name = "OBS Studio"; comment = "Free and Open Source Streaming/Recording Software"; exec = "obs --disable-shutdown-check"; terminal = false; icon = "com.obsproject.Studio"; type = "Application"; startupNotify = true; categories = [ "AudioVideo" "Recorder" ]; }; }; }; }; }; }