diff --git a/modules/lib/maintainers.nix b/modules/lib/maintainers.nix index 1e988cc2e..7dbb397ce 100644 --- a/modules/lib/maintainers.nix +++ b/modules/lib/maintainers.nix @@ -548,4 +548,10 @@ github = "zorrobert"; githubId = 118135271; }; + knoc-off = { + name = "Niko Selby"; + email = "selby@niko.ink"; + github = "knoc-off"; + githubId = 36494048; + }; } diff --git a/modules/services/pyprland.nix b/modules/services/pyprland.nix new file mode 100644 index 000000000..7499a5ced --- /dev/null +++ b/modules/services/pyprland.nix @@ -0,0 +1,57 @@ +{ options, config, lib, pkgs, ... }: +let + cfg = config.services.pyprland; + settingsFormat = pkgs.formats.toml { }; +in with lib; { + + meta.maintainers = [ hm.maintainers.knoc-off ]; + options.services.pyprland = { + enable = mkEnableOption "pyprland"; + + package = mkOption { + default = pkgs.pyprland; + type = types.package; + description = "The pyprland package to use"; + }; + + extraPlugins = mkOption { + default = [ ]; + type = with types; listOf str; + description = "Additional plugins to enable"; + }; + + settings = mkOption { + type = types.submodule { + freeformType = settingsFormat.type; + + options.scratchpads = mkOption { + default = { }; + type = with types; attrsOf attrs; + description = "Scratchpad configurations"; + }; + }; + default = { }; + description = '' + Configuration for pyprland, see + + for supported values. + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ cfg.package ]; + + services.pyprland.settings = { + pyprland = { + plugins = cfg.extraPlugins + ++ (optional (cfg.settings.scratchpads != { }) "scratchpads"); + }; + }; + + wayland.windowManager.hyprland.settings.exec-once = [(getExe cfg.package)]; + home.file.".config/hypr/pyprland.toml".source = + settingsFormat.generate "pyprland-config.toml" cfg.settings; + }; +} +