{ den, modules, ... }: { modules.obs = settings: { homeManager = { pkgs, lib, config, ... }: { programs = { obs-studio = { enable = true; # package = ( # (pkgs.obs-studio.overrideAttrs (old: { # version = "32.2.0-beta2-unstable"; # src = pkgs.fetchFromGitHub { # owner = "obsproject"; # repo = "obs-studio"; # rev = "27ac23ef750aafb2bb7ddd499ede5755a5a3087f"; # hash = "sha256-3wPHNgYzR+ZIbCYMh5ocyK/nsQxy24Wfa03kheYOU88="; # fetchSubmodules = true; # }; # cmakeFlags = (old.cmakeFlags or []) ++ [ # "-DOBS_VERSION_OVERRIDE=32.2.0-beta2" # ]; # })).override # { # cudaSupport = true; # } # ); package = pkgs.obs-studio.override { cudaSupport = true; }; plugins = with pkgs.obs-studio-plugins; [ obs-pipewire-audio-capture obs-vkcapture obs-gstreamer ]; }; }; systemd.user.services = let audio-set = lib.mkIf settings.audio { pw-discordaudio-virtual-device = { Unit = { Description = "OBS daemon"; After = [ "hyprland-session.target" ]; }; Install = { WantedBy = [ "default.target" ]; }; Service = { ExecStart = "${pkgs.writeShellScript "discord_audio_virt_device" '' pw-loopback -m '[ FL FR]' --capture-props='media.class=Audio/Sink node.name=DiscordSink' -n DiscordSink ''}"; Restart = "on-failure"; RestartSec = "5s"; }; }; pw-gameaudio-virtual-device = { Unit = { Description = "OBS daemon"; After = [ "hyprland-session.target" ]; }; Install = { WantedBy = [ "default.target" ]; }; Service = { ExecStart = "${pkgs.writeShellScript "game_audio_virt_device" '' pw-loopback -m '[ FL FR]' --capture-props='media.class=Audio/Sink node.name=GameAudioSink' -n GameAudioSink ''}"; Restart = "on-failure"; RestartSec = "5s"; }; }; }; in lib.mergeAttrsList [ audio-set ]; wayland.windowManager.hyprland.settings = { # exec-once = ["${config.programs.obs-studio.finalPackage}/bin/obs --startreplaybuffer"]; }; }; }; }