diff --git a/modules/misc/news/2025/09/2025-09-18_07-58-37.nix b/modules/misc/news/2025/09/2025-09-18_07-58-37.nix new file mode 100644 index 000000000..006b20bc4 --- /dev/null +++ b/modules/misc/news/2025/09/2025-09-18_07-58-37.nix @@ -0,0 +1,11 @@ +{ + time = "2025-09-18T14:46:18+00:00"; + condition = true; + message = '' + A new module is available: `programs.retext` + + ReText is a simple but powerful editor for markup languages. It is based on + Markups module which supports Markdown, reStructuredText, Textile and + AsciiDoc. One can also add support for custom markups using Python modules. + ''; +} diff --git a/modules/programs/retext.nix b/modules/programs/retext.nix new file mode 100644 index 000000000..ddc8c1a6d --- /dev/null +++ b/modules/programs/retext.nix @@ -0,0 +1,53 @@ +{ + lib, + pkgs, + config, + ... +}: +let + inherit (lib) + mkIf + mkEnableOption + mkPackageOption + mkOption + ; + + cfg = config.programs.retext; + iniFormat = pkgs.formats.ini { }; +in +{ + meta.maintainers = with lib.hm.maintainers; [ aguirre-matteo ]; + options.programs.retext = { + enable = mkEnableOption "retext"; + package = mkPackageOption pkgs "retext" { nullable = true; }; + settings = mkOption { + inherit (iniFormat) type; + default = { }; + example = { + General = { + documentStatsEnabled = true; + lineNumbersEnabled = true; + relativeLineNumbers = true; + useWebEngine = true; + }; + + ColorScheme = { + htmlTags = "green"; + htmlSymbols = "#ff8800"; + htmlComments = "#abc"; + }; + }; + description = '' + Configuration settings for retext. All the available options can be found + here: . + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + xdg.configFile."ReText Project/ReText.conf" = mkIf (cfg.settings != { }) { + source = iniFormat.generate "ReText.conf" cfg.settings; + }; + }; +} diff --git a/tests/modules/programs/retext/ReText.conf b/tests/modules/programs/retext/ReText.conf new file mode 100644 index 000000000..7387020b4 --- /dev/null +++ b/tests/modules/programs/retext/ReText.conf @@ -0,0 +1,10 @@ +[ColorScheme] +htmlComments=#abc +htmlSymbols=#ff8800 +htmlTags=green + +[General] +documentStatsEnabled=true +lineNumbersEnabled=true +relativeLineNumbers=true +useWebEngine=true diff --git a/tests/modules/programs/retext/default.nix b/tests/modules/programs/retext/default.nix new file mode 100644 index 000000000..22e7d6aab --- /dev/null +++ b/tests/modules/programs/retext/default.nix @@ -0,0 +1 @@ +{ retext-example-config = ./example-config.nix; } diff --git a/tests/modules/programs/retext/example-config.nix b/tests/modules/programs/retext/example-config.nix new file mode 100644 index 000000000..575f71720 --- /dev/null +++ b/tests/modules/programs/retext/example-config.nix @@ -0,0 +1,25 @@ +{ + programs.retext = { + enable = true; + settings = { + General = { + documentStatsEnabled = true; + lineNumbersEnabled = true; + relativeLineNumbers = true; + useWebEngine = true; + }; + + ColorScheme = { + htmlTags = "green"; + htmlSymbols = "#ff8800"; + htmlComments = "#abc"; + }; + }; + }; + + nmt.script = '' + assertFileExists "home-files/.config/ReText Project/ReText.conf" + assertFileContent "home-files/.config/ReText Project/ReText.conf" \ + ${./ReText.conf} + ''; +}