diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix index 80c349cb..11a85254 100644 --- a/modules/home-manager/default.nix +++ b/modules/home-manager/default.nix @@ -1,6 +1,7 @@ { imports = [ ./files/mutable-files.nix + ./programs/pipewire.nix ./programs/pop-launcher.nix ./services/archivebox.nix ./services/activitywatch.nix diff --git a/modules/home-manager/programs/pipewire.nix b/modules/home-manager/programs/pipewire.nix new file mode 100644 index 00000000..fdbf6bed --- /dev/null +++ b/modules/home-manager/programs/pipewire.nix @@ -0,0 +1,46 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.programs.pipewire; + settingsFormat = pkgs.formats.json { }; + + generatePipewireConfig = name: settings: { + "pipewire/pipewire.conf.d/${name}.conf" = settingsFormat.generate "hm-pipewire-override-settings-${name}" settings; + }; +in +{ + options.programs.pipewire = { + enable = lib.mkEnableOption "Pipewire configuration"; + settings = { + type = settingsFormat.type; + default = { }; + description = '' + The configuration file to be generated at + {file}`$XDG_CONFIG_HOME/pipewire/pipewire.conf`. For more details, + please see {manpage}`pipewire.conf(5)`. + ''; + }; + overrides = { + type = with lib.types; attrsOf settingsFormat.type; + default = { }; + description = '' + A set of user overrides to be generated in + {file}`$XDG_CONFIG_HOME/pipewire/pipewire.conf.d/$OVERRIDE.conf`. + + ::: {.note} + Both the `settings` and `overrides` can be used at the same time but + they will be merged in some order. You can see more details about it in + {manpage}`pipewire.conf(5)`. + ::: + ''; + }; + }; + + config = lib.mkIf cfg.enable { + xdg.configFile = + lib.optionalAttrs (cfg.settings != { }) { + "pipewire/pipewire.conf" = settingsFormat.generate "hm-pipewire-settings" cfg.settings; + } + // lib.mapAttrs generatePipewireConfig cfg.overrides; + }; +}