diff --git a/modules/programs/yofi.nix b/modules/programs/yofi.nix new file mode 100644 index 000000000..72f51bd39 --- /dev/null +++ b/modules/programs/yofi.nix @@ -0,0 +1,82 @@ +{ + lib, + pkgs, + config, + ... +}: +let + inherit (lib) + concatStringsSep + types + mkIf + mkEnableOption + mkPackageOption + mkOption + ; + + cfg = config.programs.yofi; + tomlFormat = pkgs.formats.toml { }; +in +{ + meta.maintainers = with lib.hm.maintainers; [ aguirre-matteo ]; + + options.programs.yofi = { + enable = mkEnableOption "yofi"; + package = mkPackageOption pkgs "yofi" { nullable = true; }; + settings = mkOption { + inherit (tomlFormat) type; + default = { }; + example = { + width = 400; + height = 512; + force_window = false; + corner_radius = "0"; + font_size = 24; + bg_color = "0x272822ee"; + bg_border_color = "0x131411ff"; + input_text = { + font_color = "0xf8f8f2ff"; + bg_color = "0x75715eff"; + margin = "5"; + padding = "1.7 -4"; + }; + }; + description = '' + Configuration settings for yofi. For all the available options + see: + ''; + }; + blacklist = mkOption { + type = with types; listOf str; + default = [ ]; + example = [ + "firefox" + "librewolf" + "com.obsproject.Studio" + "com.rtosta.zapzap" + "cups" + "kitty-open" + "nvim" + ]; + description = '' + List of .desktop files yofi should ignore. + ''; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + (lib.hm.assertions.assertPlatform "programs.yofi" pkgs lib.platforms.linux) + ]; + + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + xdg.configFile = { + "yofi/yofi.config" = mkIf (cfg.settings != { }) { + source = tomlFormat.generate "yofi-config" cfg.settings; + }; + "yofi/blacklist" = mkIf (cfg.blacklist != [ ]) { + text = concatStringsSep "\n" (map (x: x + ".desktop") cfg.blacklist); + }; + }; + }; +} diff --git a/tests/modules/programs/yofi/blacklist b/tests/modules/programs/yofi/blacklist new file mode 100644 index 000000000..9a1c7fdf2 --- /dev/null +++ b/tests/modules/programs/yofi/blacklist @@ -0,0 +1,7 @@ +firefox.desktop +librewolf.desktop +com.obsproject.Studio.desktop +com.rtosta.zapzap.desktop +cups.desktop +kitty-open.desktop +nvim.desktop \ No newline at end of file diff --git a/tests/modules/programs/yofi/default.nix b/tests/modules/programs/yofi/default.nix new file mode 100644 index 000000000..d39df63d7 --- /dev/null +++ b/tests/modules/programs/yofi/default.nix @@ -0,0 +1,5 @@ +{ lib, pkgs, ... }: + +lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux { + yofi-example-config = ./example-config.nix; +} diff --git a/tests/modules/programs/yofi/example-config.nix b/tests/modules/programs/yofi/example-config.nix new file mode 100644 index 000000000..974379c2d --- /dev/null +++ b/tests/modules/programs/yofi/example-config.nix @@ -0,0 +1,41 @@ +{ + programs.yofi = { + enable = true; + settings = { + width = 400; + height = 512; + force_window = false; + corner_radius = "0"; + font_size = 24; + bg_color = "0x272822ee"; + bg_border_color = "0x131411ff"; + input_text = { + font_color = "0xf8f8f2ff"; + bg_color = "0x75715eff"; + margin = "5"; + padding = "1.7 -4"; + }; + }; + + blacklist = [ + "firefox" + "librewolf" + "com.obsproject.Studio" + "com.rtosta.zapzap" + "cups" + "kitty-open" + "nvim" + ]; + }; + + nmt.script = '' + assertFileExists home-files/.config/yofi/yofi.config + assertFileExists home-files/.config/yofi/blacklist + + assertFileContent home-files/.config/yofi/yofi.config \ + ${./yofi.config} + + assertFileContent home-files/.config/yofi/blacklist \ + ${./blacklist} + ''; +} diff --git a/tests/modules/programs/yofi/yofi.config b/tests/modules/programs/yofi/yofi.config new file mode 100644 index 000000000..77c9e9780 --- /dev/null +++ b/tests/modules/programs/yofi/yofi.config @@ -0,0 +1,13 @@ +bg_border_color = "0x131411ff" +bg_color = "0x272822ee" +corner_radius = "0" +font_size = 24 +force_window = false +height = 512 +width = 400 + +[input_text] +bg_color = "0x75715eff" +font_color = "0xf8f8f2ff" +margin = "5" +padding = "1.7 -4"