diff --git a/modules/misc/news/2025-04-20_20-27-49.nix b/modules/misc/news/2025-04-20_20-27-49.nix new file mode 100644 index 000000000..d2b0fba32 --- /dev/null +++ b/modules/misc/news/2025-04-20_20-27-49.nix @@ -0,0 +1,10 @@ +{ + time = "2025-04-21T03:27:49+00:00"; + condition = true; + message = '' + A new module is available: `programs.television` + + television is a cross-platform, fast and extensible general purpose fuzzy + finder TUI. + ''; +} diff --git a/modules/modules.nix b/modules/modules.nix index 33aa9562f..8c1d1b16c 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -263,6 +263,7 @@ let ./programs/swayr.nix ./programs/taskwarrior.nix ./programs/tealdeer.nix + ./programs/television.nix ./programs/terminator.nix ./programs/termite.nix ./programs/tex-fmt.nix diff --git a/modules/programs/television.nix b/modules/programs/television.nix new file mode 100644 index 000000000..e6e0e3671 --- /dev/null +++ b/modules/programs/television.nix @@ -0,0 +1,48 @@ +{ + lib, + pkgs, + config, + ... +}: +let + tomlFormat = pkgs.formats.toml { }; + cfg = config.programs.television; +in +{ + meta.maintainers = [ lib.maintainers.awwpotato ]; + + options.programs.television = { + enable = lib.mkEnableOption "television"; + package = lib.mkPackageOption pkgs "television" { nullable = true; }; + settings = lib.mkOption { + type = tomlFormat.type; + default = { }; + example = lib.literalExpression '' + { + tick_rate = 50; + ui = { + use_nerd_font_icons = true; + ui_scale = 120; + show_preview_panel = false; + }; + keybindings = { + quit = [ "esc" "ctrl-c" ]; + }; + } + ''; + description = '' + Configuration written to {file}`$XDG_CONFIG_HOME/television/config.toml`. + See + for the full list of options. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = lib.mkIf (cfg.package != null) [ cfg.package ]; + + xdg.configFile."television/config.toml" = lib.mkIf (cfg.settings != { }) { + source = tomlFormat.generate "config.toml" cfg.settings; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index eb76a54df..44920ceca 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -460,6 +460,7 @@ import nmtSrc { ./modules/programs/superfile ./modules/programs/taskwarrior ./modules/programs/tealdeer + ./modules/programs/television ./modules/programs/tex-fmt ./modules/programs/texlive ./modules/programs/thefuck diff --git a/tests/modules/programs/television/basic-config.nix b/tests/modules/programs/television/basic-config.nix new file mode 100644 index 000000000..cd2f0a59c --- /dev/null +++ b/tests/modules/programs/television/basic-config.nix @@ -0,0 +1,27 @@ +{ pkgs, ... }: +{ + programs.television = { + enable = true; + settings = { + tick_rate = 50; + ui = { + use_nerd_font_icons = false; + show_preview_panel = true; + input_bar_position = "top"; + }; + }; + }; + + nmt.script = '' + assertFileExists home-files/.config/television/config.toml + assertFileContent home-files/.config/television/config.toml \ + ${pkgs.writeText "settings-expected" '' + tick_rate = 50 + + [ui] + input_bar_position = "top" + show_preview_panel = true + use_nerd_font_icons = false + ''} + ''; +} diff --git a/tests/modules/programs/television/default.nix b/tests/modules/programs/television/default.nix new file mode 100644 index 000000000..185deb95a --- /dev/null +++ b/tests/modules/programs/television/default.nix @@ -0,0 +1,3 @@ +{ + television-basic-config = ./basic-config.nix; +}