Files
dotfiles/config/modules/obs.nix
T

90 lines
2.9 KiB
Nix

{
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"];
};
};
};
}