diff --git a/hosts/MONSTER/default.nix b/hosts/MONSTER/default.nix index 34bcc4e..cb68312 100644 --- a/hosts/MONSTER/default.nix +++ b/hosts/MONSTER/default.nix @@ -44,9 +44,8 @@ }; shell.components = { - #dunst.enable = true; firefox-pip.enable = true; - flameshot.enable = true; + grimblast.enable = true; gnome-keyring.enable = true; hyprpicker.enable = true; kde-connect.enable = true; @@ -90,6 +89,7 @@ audio.preset.pipewire.enable = true; cc1.enable = true; fv43u.enable = true; + astro-a50.enable = true; # virtual-camera.enable = true; # hid-fanatecff.enable = true; diff --git a/hosts/aero/default.nix b/hosts/aero/default.nix index 82c3adf..a967fb4 100644 --- a/hosts/aero/default.nix +++ b/hosts/aero/default.nix @@ -55,8 +55,8 @@ shell.components = { firefox-pip.enable = true; - flameshot.enable = true; gnome-keyring.enable = true; + grimblast.enable = true; hyprpicker.enable = true; kde-connect.enable = true; kitty.enable = true; diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix index ca25b68..c3884fc 100644 --- a/modules/nixos/default.nix +++ b/modules/nixos/default.nix @@ -10,6 +10,7 @@ ./fonts/nerd-fonts.nix ./hardware/hid-fanatecff.nix + ./hardware/astro-a50.nix ./hardware/audio.nix ./hardware/gbmonctl.nix ./hardware/nvidia-proprietary.nix @@ -33,6 +34,7 @@ ./shell/firefox-pip.nix ./shell/flameshot.nix ./shell/gnome-keyring.nix + ./shell/grimblast.nix ./shell/hyprpicker.nix ./shell/kde-connect.nix ./shell/kitty.nix diff --git a/modules/nixos/hardware/astro-a50-harman.txt b/modules/nixos/hardware/astro-a50-harman.txt new file mode 100644 index 0000000..e6e59d5 --- /dev/null +++ b/modules/nixos/hardware/astro-a50-harman.txt @@ -0,0 +1,11 @@ +Preamp: -4.08 dB +Filter 1: ON LSC Fc 105.0 Hz Gain 3.9 dB Q 0.70 +Filter 2: ON PK Fc 51.8 Hz Gain -4.3 dB Q 0.81 +Filter 3: ON PK Fc 1118.3 Hz Gain -2.5 dB Q 3.36 +Filter 4: ON PK Fc 2620.0 Hz Gain -0.9 dB Q 3.24 +Filter 5: ON PK Fc 3300.0 Hz Gain 0.9 dB Q 5.82 +Filter 6: ON PK Fc 3859.3 Hz Gain 4.1 dB Q 3.08 +Filter 7: ON PK Fc 5115.7 Hz Gain 0.8 dB Q 5.14 +Filter 8: ON PK Fc 6116.7 Hz Gain -3.4 dB Q 3.42 +Filter 9: ON PK Fc 7416.1 Hz Gain -0.8 dB Q 4.16 +Filter 10: ON HSC Fc 10000.0 Hz Gain 0.3 dB Q 0.70 diff --git a/modules/nixos/hardware/astro-a50.nix b/modules/nixos/hardware/astro-a50.nix new file mode 100644 index 0000000..59fc86d --- /dev/null +++ b/modules/nixos/hardware/astro-a50.nix @@ -0,0 +1,73 @@ +{ + lib, + config, + username, + pkgs, + ... +}: +with lib; + +let + cfg = config.hardware.astro-a50; +in +{ + options.hardware.astro-a50 = { + enable = mkEnableOption "Enable optimisations for the Logitech Astro A50 headset"; + }; + + config = mkIf cfg.enable { + home-manager.users.${username} = + let + name = "Astro A50"; + nick = "A50"; + filter = bitrate: { + "media.class" = "Audio/Sink"; + "alsa.components" = "USB046d:0b1c"; + "alsa.resolution_bits" = bitrate; + }; + nodeNameIn = "astro-a50-eq-harman-in"; + in + { + home.packages = with pkgs; [ zam-plugins ]; + xdg.configFile = { + "wireplumber/wireplumber.conf.d/51-astro-a50.conf".text = builtins.toJSON { + "monitor.alsa.rules" = [ + { + matches = [ (filter 16) ]; + actions.update-props = { + "node.description" = "${name} Chat"; + "node.nick" = "${nick} Chat"; + }; + } + { + matches = [ (filter 24) ]; + actions.update-props = { + "node.description" = name; + "node.nick" = nick; + }; + } + ]; + }; + "pipewire/pipewire.conf.d/51-a50-eq.conf".text = builtins.toJSON { + "context.modules" = [ + { + name = "libpipewire-module-parametric-equalizer"; + args = { + "equalizer.filepath" = builtins.toString ./astro-a50-harman.txt; + "equalizer.description" = "${name} (Harman EQ)"; + "capture.props" = { + "node.name" = nodeNameIn; + "filter.smart" = true; + "filter.smart.target" = filter 24; + }; + "playback.props" = { + "node.name" = "EQ Output"; + }; + }; + } + ]; + }; + }; + }; + }; +} diff --git a/modules/nixos/shell/grimblast.nix b/modules/nixos/shell/grimblast.nix new file mode 100644 index 0000000..aceda89 --- /dev/null +++ b/modules/nixos/shell/grimblast.nix @@ -0,0 +1,36 @@ +{ + config, + lib, + pkgs, + username, + ... +}: + +let + cfg = config.shell.components.grimblast; +in +{ + options.shell.components.grimblast = { + enable = lib.mkEnableOption (lib.mdDoc "Enable pre-configured grimblast"); + }; + + config = lib.mkIf cfg.enable { + home-manager.users.${username} = { + wayland.windowManager.hyprland = { + settings = { + bind = [ + "SUPER_SHIFT,V,exec,uwsm app -- ${lib.getExe pkgs.grimblast} --freeze copy area" + ]; + }; + }; + home = { + # bugged, freezes + sessionVariables.GRIMBLAST_EDITOR = "${lib.getExe pkgs.annotator}"; + packages = with pkgs; [ + grimblast + annotator + ]; + }; + }; + }; +}