diff --git a/modules/collection/programs/tofi.nix b/modules/collection/programs/tofi.nix new file mode 100644 index 0000000..c89e832 --- /dev/null +++ b/modules/collection/programs/tofi.nix @@ -0,0 +1,40 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (lib.modules) mkIf; + inherit (lib.options) mkOption mkEnableOption mkPackageOption; + inherit (lib.generators) toKeyValue; + inherit (lib.rum.types) tofiSettingsType; + + cfg = config.rum.programs.tofi; +in { + options.rum.programs.tofi = { + enable = mkEnableOption "tofi"; + + package = mkPackageOption pkgs "tofi" {}; + + settings = mkOption { + type = tofiSettingsType; + default = {}; + example = { + text-color = "#FFFFFF"; + num-results = 0; + horizontal = false; + }; + description = '' + The configuration converted into "key = value" and written to + `${config.directory}/.config/tofi/config`. + Please reference tofi(5) (manpage) at https://github.com/philj56/tofi/blob/master/doc/tofi.5.md, + or see an example at https://github.com/philj56/tofi/blob/master/doc/config. + ''; + }; + }; + + config = mkIf cfg.enable { + packages = [cfg.package]; + files.".config/tofi/config".text = mkIf (cfg.settings != {}) (toKeyValue cfg.settings); + }; +} diff --git a/modules/lib/types/default.nix b/modules/lib/types/default.nix index 18e6b22..cccdae7 100644 --- a/modules/lib/types/default.nix +++ b/modules/lib/types/default.nix @@ -1,3 +1,4 @@ {lib}: { gtkType = import ./gtkType.nix {inherit lib;}; + tofiSettingsType = import ./tofiSettingsType.nix {inherit lib;}; } diff --git a/modules/lib/types/tofiSettingsType.nix b/modules/lib/types/tofiSettingsType.nix new file mode 100644 index 0000000..56b108a --- /dev/null +++ b/modules/lib/types/tofiSettingsType.nix @@ -0,0 +1,11 @@ +{lib}: let + inherit (lib.types) attrsOf oneOf str path bool int float; +in ( + attrsOf (oneOf [ + str + path + bool + int + float + ]) +)