diff --git a/hosts/odyssey/audio.nix b/hosts/odyssey/audio.nix deleted file mode 100644 index 41cba3c..0000000 --- a/hosts/odyssey/audio.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ config, lib, pkgs, ... }: -let - snd-usb-audio-module = pkgs.callPackage ./snd-usb-audio.nix { - kernel = config.boot.kernelPackages.kernel; - }; - patched = snd-usb-audio-module.overrideAttrs (prev: { - patches = [ ./0001-Update-device-ID-for-PreSonus-1824c.patch ]; - }); - upmixConfig = '' - stream.properties = { - channelmix.upmix = true - channelmix.upmix-method = psd - } - ''; -in { - boot.kernelModules = [ "snd-usb-audio" ]; - boot.extraModulePackages = [ - (patched) - ]; - - environment.etc = { - "pipewire/pipewire.conf.d/surround.conf".text = '' - context.modules = [ - { - name = libpipewire-module-loopback - args = { - node.description = "Genelec 4.1 Surround" - capture.props = { - node.name = "Genelec_Speakers" - media.class = "Audio/Sink" - audio.position = [ FL FR SL SR LFE ] - } - playback.props = { - node.name = "playback.Genelec_Speakers" - audio.position = [ AUX0 AUX1 AUX3 AUX4 AUX5 ] - target.object = "alsa_output.usb-PreSonus_Studio_1824c_SC4E21110775-00.multichannel-output" - stream.dont-remix = true - node.passive = true - } - } - } - ] - ''; - "pipewire/pipewire-pulse.conf.d/40-upmix.conf".text = upmixConfig; - "pipewire/client-rt.conf.d/40-upmix.conf".text = upmixConfig; - }; - } diff --git a/hosts/odyssey/default.nix b/hosts/odyssey/default.nix index 2e5b78b..ab3fc83 100644 --- a/hosts/odyssey/default.nix +++ b/hosts/odyssey/default.nix @@ -3,7 +3,6 @@ { imports = [ ./hardware-configuration.nix - ./audio.nix ../desktop.nix ]; @@ -73,6 +72,7 @@ neovim.enable = true; vscode.enable = true; }; + hardware.presonus-studio.enable = true; security = { gpg.enable = true; pass.enable = true; diff --git a/modules/default.nix b/modules/default.nix index 2e6c80a..3c1fa02 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -25,6 +25,7 @@ ./dev/zig.nix ./editors/neovim ./editors/vscode.nix + ./hardware/presonus-studio.nix ./networking/tailscale.nix ./networking/wireless.nix ./security/gpg.nix diff --git a/hosts/odyssey/0001-Update-device-ID-for-PreSonus-1824c.patch b/modules/hardware/0001-Update-device-ID-for-PreSonus-1824c.patch similarity index 100% rename from hosts/odyssey/0001-Update-device-ID-for-PreSonus-1824c.patch rename to modules/hardware/0001-Update-device-ID-for-PreSonus-1824c.patch diff --git a/modules/hardware/presonus-studio.nix b/modules/hardware/presonus-studio.nix new file mode 100644 index 0000000..9832c92 --- /dev/null +++ b/modules/hardware/presonus-studio.nix @@ -0,0 +1,69 @@ +{ config, lib, pkgs, ... }: +let + cfg = config.modules.hardware.presonus-studio; + snd-usb-audio-module = pkgs.callPackage ./snd-usb-audio.nix { + kernel = config.boot.kernelPackages.kernel; + }; + patched = snd-usb-audio-module.overrideAttrs (prev: { + patches = [ ./0001-Update-device-ID-for-PreSonus-1824c.patch ]; + }); + upmixConfig = '' + stream.properties = { + channelmix.upmix = true + channelmix.upmix-method = psd + } + ''; +in { + options.modules.hardware.presonus-studio = { + enable = lib.mkOption { + default = false; + example = true; + }; + }; + + config = lib.mkIf cfg.enable { + boot.kernelModules = [ "snd-usb-audio" ]; + boot.extraModulePackages = [ + (patched) + ]; + + environment.etc = { + "pipewire/pipewire.conf.d/10-network.conf".text = '' + context.modules = [ + { + name = libpipewire-module-rtp-session + args = { + stream.props = { + node.name = "rtp-source" + } + } + } + ] + ''; + "pipewire/pipewire.conf.d/surround.conf".text = '' + context.modules = [ + { + name = libpipewire-module-loopback + args = { + node.description = "Genelec 4.1 Surround" + capture.props = { + node.name = "Genelec_Speakers" + media.class = "Audio/Sink" + audio.position = [ FL FR SL SR LFE ] + } + playback.props = { + node.name = "playback.Genelec_Speakers" + audio.position = [ AUX0 AUX1 AUX3 AUX4 AUX5 ] + target.object = "alsa_output.usb-PreSonus_Studio_1824c_SC4E21110775-00.multichannel-output" + stream.dont-remix = true + node.passive = true + } + } + } + ] + ''; + "pipewire/pipewire-pulse.conf.d/40-upmix.conf".text = upmixConfig; + "pipewire/client-rt.conf.d/40-upmix.conf".text = upmixConfig; + }; + }; + } diff --git a/hosts/odyssey/snd-usb-audio.nix b/modules/hardware/snd-usb-audio.nix similarity index 100% rename from hosts/odyssey/snd-usb-audio.nix rename to modules/hardware/snd-usb-audio.nix