diff --git a/modules/misc/news/2025/09/2025-09-15_18-14-27.nix b/modules/misc/news/2025/09/2025-09-15_18-14-27.nix new file mode 100644 index 000000000..767077c3f --- /dev/null +++ b/modules/misc/news/2025/09/2025-09-15_18-14-27.nix @@ -0,0 +1,9 @@ +{ + time = "2025-09-15T22:14:27+00:00"; + condition = true; + message = '' + A new module is available: `programs.nvchecker`. + + `nvchecker` checks if a new version of some software was released. + ''; +} diff --git a/modules/modules.nix b/modules/modules.nix index caa8a257f..21d644d84 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -213,6 +213,7 @@ let ./programs/notmuch.nix ./programs/numbat.nix ./programs/nushell.nix + ./programs/nvchecker.nix ./programs/obs-studio.nix ./programs/octant.nix ./programs/offlineimap.nix diff --git a/modules/programs/nvchecker.nix b/modules/programs/nvchecker.nix new file mode 100644 index 000000000..2f908ed5c --- /dev/null +++ b/modules/programs/nvchecker.nix @@ -0,0 +1,113 @@ +{ + lib, + pkgs, + config, + ... +}: +let + tomlFormat = pkgs.formats.toml { }; + cfg = config.programs.nvchecker; + configDir = + if pkgs.stdenv.hostPlatform.isDarwin then + "${config.home.homeDirectory}/Library/Application Support/nvchecker" + else + "${config.xdg.configHome}/nvchecker"; +in +{ + meta.maintainers = [ lib.maintainers.mdaniels5757 ]; + options.programs.nvchecker = { + enable = lib.mkEnableOption "nvchecker"; + package = lib.mkPackageOption pkgs "nvchecker" { nullable = true; }; + settings = + let + envDocs = '' + Environment variables and `~` are expanded, + and relative paths are relative to + {file}`''${config.home.homeDirectory}/Library/Application Support/nvchecker/nvchecker/` (on Darwin) + or {file}`''${config.xdg.configHome}/nvchecker/` (otherwise). + ''; + in + lib.mkOption { + type = lib.types.submodule { + freeformType = tomlFormat.type; + options.__config__ = lib.mkOption { + type = lib.types.submodule { + freeformType = tomlFormat.type; + options = { + oldver = lib.mkOption { + # doesn't matter if absolute/relative or (not) in store + type = lib.types.pathWith { }; + default = "old_ver.json"; + description = '' + The file to store 'old' (i.e. installed) version information in. + + ${envDocs} + ''; + }; + newver = lib.mkOption { + # doesn't matter if absolute/relative or (not) in store + type = lib.types.pathWith { }; + default = "new_ver.json"; + description = '' + The file to store 'new' (i.e. available) versions in. + + ${envDocs} + ''; + }; + }; + }; + default = { }; + defaultText = lib.literalExpression '' + { + oldver = "old_ver.json"; + newver = "new_ver.json"; + }; + ''; + description = '' + See . + + ${envDocs} + ''; + }; + }; + default = { }; + defaultText = lib.literalExpression '' + __config__ = { + oldver = "old_ver.json"; + newver = "new_ver.json"; + }; + ''; + example = lib.literalExpression '' + { + __config__ = { + oldver = "my_custom_oldver.json"; + newver = "~/seperately_placed_newver.json"; + keyfile = "keyfile.toml"; + }; + + nvchecker = { + source = "github"; + github = "lilydjwg/nvchecker"; + }; + } + ''; + description = '' + Configuration written to + {file}`$HOME/Library/Application Support/nvchecker/nvchecker.toml` (on Darwin) or + {file}`$XDG_CONFIG_HOME/nvchecker/nvchecker.toml` (otherwise). + See + for the full list of options. + + ${envDocs} + ''; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = lib.mkIf (cfg.package != null) [ cfg.package ]; + + home.file."${configDir}/nvchecker.toml".source = lib.mkIf (cfg.settings != { }) ( + tomlFormat.generate "nvchecker.toml" cfg.settings + ); + }; +} diff --git a/tests/default.nix b/tests/default.nix index 1b5d3ad8c..db84d0ffc 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -393,6 +393,7 @@ import nmtSrc { ./modules/programs/mpvpaper ./modules/programs/ncmpcpp-linux ./modules/programs/nh + ./modules/programs/nvchecker ./modules/programs/onagre ./modules/programs/onedrive ./modules/programs/pqiv diff --git a/tests/modules/programs/nvchecker/basic-config.nix b/tests/modules/programs/nvchecker/basic-config.nix new file mode 100644 index 000000000..d65971223 --- /dev/null +++ b/tests/modules/programs/nvchecker/basic-config.nix @@ -0,0 +1,27 @@ +{ pkgs, ... }: +let + configDir = + if pkgs.stdenv.hostPlatform.isDarwin then + "Library/Application Support/nvchecker" + else + ".config/nvchecker"; +in +{ + programs.nvchecker = { + enable = true; + settings = { + __config__ = { + keyfile = "keyfile.toml"; + }; + nvchecker = { + source = "github"; + github = "lilydjwg/nvchecker"; + }; + }; + }; + + nmt.script = '' + assertFileExists "home-files/${configDir}/nvchecker.toml" + assertFileContent "home-files/${configDir}/nvchecker.toml" "${./basic-config.toml}" + ''; +} diff --git a/tests/modules/programs/nvchecker/basic-config.toml b/tests/modules/programs/nvchecker/basic-config.toml new file mode 100644 index 000000000..6a509e046 --- /dev/null +++ b/tests/modules/programs/nvchecker/basic-config.toml @@ -0,0 +1,8 @@ +[__config__] +keyfile = "keyfile.toml" +newver = "new_ver.json" +oldver = "old_ver.json" + +[nvchecker] +github = "lilydjwg/nvchecker" +source = "github" diff --git a/tests/modules/programs/nvchecker/default.nix b/tests/modules/programs/nvchecker/default.nix new file mode 100644 index 000000000..5c2ead531 --- /dev/null +++ b/tests/modules/programs/nvchecker/default.nix @@ -0,0 +1,4 @@ +{ + nvchecker-basic-config = ./basic-config.nix; + nvchecker-empty-config = ./empty-config.nix; +} diff --git a/tests/modules/programs/nvchecker/empty-config.nix b/tests/modules/programs/nvchecker/empty-config.nix new file mode 100644 index 000000000..5c722b675 --- /dev/null +++ b/tests/modules/programs/nvchecker/empty-config.nix @@ -0,0 +1,16 @@ +{ pkgs, ... }: +let + configDir = + if pkgs.stdenv.hostPlatform.isDarwin then + "Library/Application Support/nvchecker" + else + ".config/nvchecker"; +in +{ + programs.nvchecker.enable = true; + + nmt.script = '' + assertFileExists "home-files/${configDir}/nvchecker.toml" + assertFileContent "home-files/${configDir}/nvchecker.toml" "${./empty-config.toml}" + ''; +} diff --git a/tests/modules/programs/nvchecker/empty-config.toml b/tests/modules/programs/nvchecker/empty-config.toml new file mode 100644 index 000000000..134f0b6bd --- /dev/null +++ b/tests/modules/programs/nvchecker/empty-config.toml @@ -0,0 +1,3 @@ +[__config__] +newver = "new_ver.json" +oldver = "old_ver.json"