From cfd4b61262eb7f96947b3de6396c55eb33cb5728 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Sun, 6 Apr 2025 17:17:51 +0200 Subject: [PATCH] modules/dependencies: init + add curl --- lib/default.nix | 1 + lib/deprecation.nix | 12 ++++++++ modules/default.nix | 1 + modules/dependencies.nix | 30 +++++++++++++++++++ plugins/by-name/chatgpt/default.nix | 15 +++++----- plugins/by-name/image/default.nix | 16 ++++------ plugins/by-name/image/deprecations.nix | 5 ++++ plugins/by-name/rest/default.nix | 12 ++++---- plugins/by-name/tinygit/default.nix | 6 +--- tests/test-sources/modules/dependencies.nix | 23 ++++++++++++++ .../plugins/by-name/image/default.nix | 4 ++- 11 files changed, 97 insertions(+), 28 deletions(-) create mode 100644 modules/dependencies.nix create mode 100644 tests/test-sources/modules/dependencies.nix diff --git a/lib/default.nix b/lib/default.nix index 448d2f8d..51dc36c8 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -40,6 +40,7 @@ lib.makeExtensible ( inherit (self.deprecation) getOptionRecursive mkDeprecatedSubOptionModule + mkRemovedPackageOptionModule mkSettingsRenamedOptionModules transitionType ; diff --git a/lib/deprecation.nix b/lib/deprecation.nix index 35188954..9a36822b 100644 --- a/lib/deprecation.nix +++ b/lib/deprecation.nix @@ -122,4 +122,16 @@ rec { nestedTypes.coercedType = oldType; nestedTypes.finalType = newType; }; + + mkRemovedPackageOptionModule = + { + plugin, + packageName, + oldPackageName ? packageName, + }: + lib.mkRemovedOptionModule [ "plugins" plugin "${oldPackageName}Package" ] '' + Please use the `dependencies.${packageName}` top-level option instead: + - `dependencies.${packageName}.enable = false` to disable installing `${packageName}` + - `dependencies.${packageName}.package` to choose which package to install for `${packageName}`. + ''; } diff --git a/modules/default.nix b/modules/default.nix index 49c2ddf6..91977e66 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -9,6 +9,7 @@ ./clipboard.nix ./colorscheme.nix ./commands.nix + ./dependencies.nix ./diagnostics.nix ./doc.nix ./editorconfig.nix diff --git a/modules/dependencies.nix b/modules/dependencies.nix new file mode 100644 index 00000000..e6493dc1 --- /dev/null +++ b/modules/dependencies.nix @@ -0,0 +1,30 @@ +{ + lib, + config, + pkgs, + ... +}: +let + cfg = config.dependencies; + + packages = { + curl.default = "curl"; + }; + + mkDependencyOption = name: properties: { + enable = lib.mkEnableOption "Add ${name} to dependencies."; + + package = lib.mkPackageOption pkgs name properties; + }; +in +{ + options.dependencies = lib.mapAttrs mkDependencyOption packages; + + config = { + extraPackages = lib.pipe cfg [ + builtins.attrValues + (builtins.filter (p: p.enable)) + (builtins.map (p: p.package)) + ]; + }; +} diff --git a/plugins/by-name/chatgpt/default.nix b/plugins/by-name/chatgpt/default.nix index 8cea857c..8c478f78 100644 --- a/plugins/by-name/chatgpt/default.nix +++ b/plugins/by-name/chatgpt/default.nix @@ -1,7 +1,6 @@ { lib, helpers, - pkgs, ... }: with lib; @@ -12,13 +11,15 @@ lib.nixvim.plugins.mkNeovimPlugin { maintainers = [ maintainers.GaetanLepage ]; - extraOptions = { - curlPackage = lib.mkPackageOption pkgs "curl" { - nullable = true; - }; - }; + # TODO: added 2025-04-06, remove after 25.05 + imports = [ + (lib.nixvim.mkRemovedPackageOptionModule { + plugin = "chatgpt"; + packageName = "curl"; + }) + ]; - extraConfig = cfg: { extraPackages = [ cfg.curlPackage ]; }; + extraConfig = cfg: { dependencies.curl.enable = lib.mkDefault true; }; settingsOptions = { api_key_cmd = helpers.defaultNullOpts.mkStr null '' diff --git a/plugins/by-name/image/default.nix b/plugins/by-name/image/default.nix index 025435e7..de736049 100644 --- a/plugins/by-name/image/default.nix +++ b/plugins/by-name/image/default.nix @@ -14,7 +14,8 @@ lib.nixvim.plugins.mkNeovimPlugin { maintainers = [ lib.maintainers.GaetanLepage ]; - # TODO: Added 2025-03-20. Remove after 25.05 + # TODO: option deprecations added 2025-03-20. Remove after 25.05 + # TODO: curlPackage deprecation added 2025-04-06. Remove after 25.05 inherit (import ./deprecations.nix lib) deprecateExtraOptions optionsRenamedToSettings @@ -22,10 +23,6 @@ lib.nixvim.plugins.mkNeovimPlugin { ; extraOptions = { - curlPackage = lib.mkPackageOption pkgs "curl" { - nullable = true; - }; - ueberzugPackage = lib.mkOption { type = with types; nullOr package; default = pkgs.ueberzugpp; @@ -140,11 +137,10 @@ lib.nixvim.plugins.mkNeovimPlugin { }; extraConfig = cfg: { - extraPackages = [ - # In theory, we could remove that if the user explicitly disables `downloadRemoteImages` for - # all integrations but shipping `curl` is not too heavy. - cfg.curlPackage + # In theory, we could remove that if the user explicitly disables `downloadRemoteImages` for + # all integrations but shipping `curl` is not too heavy. + dependencies.curl.enable = lib.mkDefault true; - ] ++ lib.optional (cfg.settings.backend == "ueberzug") cfg.ueberzugPackage; + extraPackages = lib.optional (cfg.settings.backend == "ueberzug") cfg.ueberzugPackage; }; } diff --git a/plugins/by-name/image/deprecations.nix b/plugins/by-name/image/deprecations.nix index c8772071..6fbd4203 100644 --- a/plugins/by-name/image/deprecations.nix +++ b/plugins/by-name/image/deprecations.nix @@ -17,5 +17,10 @@ lib: { Nixvim(plugins.image): The option `integrations` has been renamed to `settings.integrations`. Warning: sub-options now have the same name as upstream (`clear_in_insert_mode`...). '') + + (lib.nixvim.mkRemovedPackageOptionModule { + plugin = "image"; + packageName = "curl"; + }) ]; } diff --git a/plugins/by-name/rest/default.nix b/plugins/by-name/rest/default.nix index c61c9235..bd29e7f5 100644 --- a/plugins/by-name/rest/default.nix +++ b/plugins/by-name/rest/default.nix @@ -40,6 +40,12 @@ lib.nixvim.plugins.mkNeovimPlugin { Refer to the documentation for more information. '' ) + + # TODO: added 2025-04-06: remove after 25.05 + (lib.nixvim.mkRemovedPackageOptionModule { + plugin = "rest"; + packageName = "curl"; + }) ] ++ map @@ -207,10 +213,6 @@ lib.nixvim.plugins.mkNeovimPlugin { }; extraOptions = { - curlPackage = lib.mkPackageOption pkgs "curl" { - nullable = true; - }; - enableHttpFiletypeAssociation = lib.mkOption { type = types.bool; default = true; @@ -300,7 +302,7 @@ lib.nixvim.plugins.mkNeovimPlugin { globals.rest_nvim = cfg.settings; - extraPackages = [ cfg.curlPackage ]; + dependencies.curl.enable = lib.mkDefault true; filetype = lib.mkIf cfg.enableHttpFiletypeAssociation { extension.http = "http"; diff --git a/plugins/by-name/tinygit/default.nix b/plugins/by-name/tinygit/default.nix index 7762f3e6..472c603d 100644 --- a/plugins/by-name/tinygit/default.nix +++ b/plugins/by-name/tinygit/default.nix @@ -11,10 +11,6 @@ lib.nixvim.plugins.mkNeovimPlugin { maintainers = [ lib.maintainers.GaetanLepage ]; extraOptions = { - curlPackage = lib.mkPackageOption pkgs "curl" { - nullable = true; - }; - gitPackage = lib.mkPackageOption pkgs "git" { nullable = true; }; @@ -22,9 +18,9 @@ lib.nixvim.plugins.mkNeovimPlugin { extraConfig = cfg: { extraPackages = [ - cfg.curlPackage cfg.gitPackage ]; + dependencies.curl.enable = lib.mkDefault true; }; settingsExample = { diff --git a/tests/test-sources/modules/dependencies.nix b/tests/test-sources/modules/dependencies.nix new file mode 100644 index 00000000..1d88eb2d --- /dev/null +++ b/tests/test-sources/modules/dependencies.nix @@ -0,0 +1,23 @@ +{ + override = + { pkgs, ... }: + { + dependencies.git = { + enable = true; + package = pkgs.gitMinimal; + }; + }; + + all = + { + lib, + pkgs, + options, + ... + }: + { + dependencies = lib.mapAttrs (_: depOption: { + enable = lib.meta.availableOn pkgs.stdenv.hostPlatform depOption.package.default; + }) options.dependencies; + }; +} diff --git a/tests/test-sources/plugins/by-name/image/default.nix b/tests/test-sources/plugins/by-name/image/default.nix index f4e770e0..6007a72f 100644 --- a/tests/test-sources/plugins/by-name/image/default.nix +++ b/tests/test-sources/plugins/by-name/image/default.nix @@ -92,10 +92,12 @@ no-packages = { test.runNvim = false; + dependencies = { + curl.enable = false; + }; plugins.image = { enable = true; settings.backend = "kitty"; - curlPackage = null; ueberzugPackage = null; }; };