diff --git a/config/modules/obs.nix b/config/modules/obs.nix index ba6f309..4389811 100644 --- a/config/modules/obs.nix +++ b/config/modules/obs.nix @@ -24,47 +24,72 @@ }; }; systemd.user.services = - lib.mkIf settings.virtual_audio_devices { - pw-discordaudio-virtual-device = { - Install = { - WantedBy = [ "hyprland-session.target" ]; - }; - Service = { - ExecStart = "${pkgs.writeShellScript "discord_audio_virt_device" '' - #!/run/current-system/sw/bin/bash - pw-loopback -m '[ FL FR]' --capture-props='media.class=Audio/Sink node.name=DiscordSink' -n DiscordSink - ''}"; - }; - }; - pw-gameaudio-virtual-device = { - Install = { - WantedBy = [ "hyprland-session.target" ]; - }; - Service = { - ExecStart = "${pkgs.writeShellScript "game_audio_virt_device" '' - #!/run/current-system/sw/bin/bash - pw-loopback -m '[ FL FR]' --capture-props='media.class=Audio/Sink node.name=GameAudioSink' -n GameAudioSink - ''}"; - }; - }; - } - // pkgs.lib.mkIf settings.autostart { - obs-autostart = { - Unit = { - Description = "OBS daemon"; - After = [ "hyprland-session.target" ]; - }; - Install = { - WantedBy = [ "default.target" ]; - }; - Service = { - # wait for hyprland to start - ExecStart = "${config.programs.obs-studio.finalPackage}/bin/obs --startreplaybuffer"; - Restart = "on-failure"; - RestartSec = "5s"; - }; - }; - }; + let + mergedSet = lib.mergeAttrsList [ + ( + let + set = lib.mkIf settings.virtual_audio_devices { + pw-discordaudio-virtual-device = { + Unit = { + Description = "OBS daemon"; + After = [ "hyprland-session.target" ]; + }; + Install = { + WantedBy = [ "hyprland-session.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 = [ "hyprland-session.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 + set + ) + ( + let + set = lib.mkIf settings.autostart { + obs-autostart = { + Unit = { + Description = "OBS daemon"; + After = [ "hyprland-session.target" ]; + }; + Install = { + WantedBy = [ "default.target" ]; + }; + Service = { + # wait for hyprland to start + ExecStart = "${config.programs.obs-studio.finalPackage}/bin/obs --startreplaybuffer"; + Restart = "on-failure"; + RestartSec = "5s"; + }; + }; + }; + in + set + ) + ]; + in + mergedSet; }; }; }