diff --git a/modules/misc/news/2026/03/2026-03-20_00-51-15.nix b/modules/misc/news/2026/03/2026-03-20_00-51-15.nix new file mode 100644 index 000000000..2558dc250 --- /dev/null +++ b/modules/misc/news/2026/03/2026-03-20_00-51-15.nix @@ -0,0 +1,11 @@ +{ + time = "2026-03-20T04:51:15+00:00"; + condition = true; + message = '' + A new module is available: 'programs.nom'. + + Nom is a terminal-based, rss feed reader that looks like + the markdown reader glow and supports defining different + openers for different url regex patterns. + ''; +} diff --git a/modules/programs/nom.nix b/modules/programs/nom.nix new file mode 100644 index 000000000..a9fd0293a --- /dev/null +++ b/modules/programs/nom.nix @@ -0,0 +1,58 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.programs.nom; +in +{ + meta.maintainers = [ lib.hm.maintainers.oneorseveralcats ]; + + options.programs.nom = { + enable = lib.mkEnableOption "nom a terminal, rss feed reader."; + + package = lib.mkPackageOption pkgs "nom" { nullable = true; }; + + settings = lib.mkOption { + type = lib.types.attrsOf lib.types.anything; + default = { }; + example = { + autoread = true; + showread = false; + ordering = "desc"; + openers = [ + { + regex = "youtube"; + cmd = "mpv %s"; + } + ]; + theme = { + glamour = "dark"; + }; + feeds = [ + { + name = "Jeff Geerling"; + url = "https://www.youtube.com/feeds/videos.xml?channel_id=UCR-DXc1voovS8nhAvccRZhg"; + } + ]; + }; + description = '' + Settings for nom including themes, rss feeds, and openers for specific url regexes. + + Options are listed on the github: . + ''; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = lib.mkIf (cfg.package != null) [ + cfg.package + ]; + + xdg.configFile."nom/config.yml" = lib.mkIf (cfg.settings != { }) { + source = pkgs.writeText "config.yml" (lib.generators.toYAML { } cfg.settings); + }; + }; +} diff --git a/tests/modules/programs/nom/config-exists.nix b/tests/modules/programs/nom/config-exists.nix new file mode 100644 index 000000000..24be12c50 --- /dev/null +++ b/tests/modules/programs/nom/config-exists.nix @@ -0,0 +1,13 @@ +{ ... }: +{ + programs.nom = { + enable = true; + settings = { + autoread = true; + }; + }; + + nmt.script = '' + assertFileExists "home-files/.config/nom/config.yml" + ''; +} diff --git a/tests/modules/programs/nom/default.nix b/tests/modules/programs/nom/default.nix new file mode 100644 index 000000000..241cfe580 --- /dev/null +++ b/tests/modules/programs/nom/default.nix @@ -0,0 +1,4 @@ +{ + nom-config-exists = ./config-exists.nix; + nom-disabled = ./disabled.nix; +} diff --git a/tests/modules/programs/nom/disabled.nix b/tests/modules/programs/nom/disabled.nix new file mode 100644 index 000000000..a719f0561 --- /dev/null +++ b/tests/modules/programs/nom/disabled.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + programs.nom.enable = false; + + nmt.script = '' + assertPathNotExists "home-files/.config/nom" + ''; +}