mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 00:25:42 +02:00
lib: Harmonize package options which may not exist in nixpkgs
This commit is contained in:
parent
eb611349a7
commit
a2f01876f7
6 changed files with 57 additions and 42 deletions
|
@ -54,6 +54,7 @@ lib.makeExtensible (
|
||||||
mkCompositeOption
|
mkCompositeOption
|
||||||
mkCompositeOption'
|
mkCompositeOption'
|
||||||
mkLazyLoadOption
|
mkLazyLoadOption
|
||||||
|
mkMaybeUnpackagedOption
|
||||||
mkNullOrLua
|
mkNullOrLua
|
||||||
mkNullOrLua'
|
mkNullOrLua'
|
||||||
mkNullOrLuaFn
|
mkNullOrLuaFn
|
||||||
|
@ -69,6 +70,7 @@ lib.makeExtensible (
|
||||||
mkPackageOption
|
mkPackageOption
|
||||||
mkPluginPackageOption
|
mkPluginPackageOption
|
||||||
mkSettingsOption
|
mkSettingsOption
|
||||||
|
mkUnpackagedOption
|
||||||
pluginDefaultText
|
pluginDefaultText
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
@ -403,5 +403,43 @@ rec {
|
||||||
if cfg ? lazyLoad then lib.literalMD "`false` when lazy-loading is enabled." else true;
|
if cfg ? lazyLoad then lib.literalMD "`false` when lazy-loading is enabled." else true;
|
||||||
example = false;
|
example = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create an option for a package not currently available in nixpkgs.
|
||||||
|
|
||||||
|
The option will throw an error if a value is not explicitly set by the end user.
|
||||||
|
*/
|
||||||
|
mkUnpackagedOption =
|
||||||
|
optionName: packageName:
|
||||||
|
lib.mkOption {
|
||||||
|
type = types.nullOr types.package;
|
||||||
|
description = ''
|
||||||
|
Package to use for ${packageName}.
|
||||||
|
Nixpkgs does not include this package, and as such an external derivation or null must be provided.
|
||||||
|
'';
|
||||||
|
default = throw ''
|
||||||
|
Nixvim (${optionName}): No package is known for ${packageName}, to resolve this either:
|
||||||
|
- install externally and set this option to `null`
|
||||||
|
- or provide a derviation to install this package
|
||||||
|
'';
|
||||||
|
defaultText = lib.literalMD "No package, throws when undefined";
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create an option for a package that may not be currently available in nixpkgs.
|
||||||
|
|
||||||
|
See `mkUnpackagedOption`
|
||||||
|
*/
|
||||||
|
mkMaybeUnpackagedOption =
|
||||||
|
optionName: pkgs: packageName: package:
|
||||||
|
if lib.isOption package then
|
||||||
|
package
|
||||||
|
else if package != null then
|
||||||
|
lib.mkPackageOption pkgs packageName {
|
||||||
|
nullable = true;
|
||||||
|
default = package;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mkUnpackagedOption optionName packageName;
|
||||||
}
|
}
|
||||||
// removed
|
// removed
|
||||||
|
|
|
@ -9,7 +9,6 @@ sourceType: sourceName:
|
||||||
let
|
let
|
||||||
inherit (import ./packages.nix lib) packaged;
|
inherit (import ./packages.nix lib) packaged;
|
||||||
pkg = packaged.${sourceName};
|
pkg = packaged.${sourceName};
|
||||||
loc = lib.toList pkg;
|
|
||||||
|
|
||||||
cfg = config.plugins.none-ls;
|
cfg = config.plugins.none-ls;
|
||||||
cfg' = config.plugins.none-ls.sources.${sourceType}.${sourceName};
|
cfg' = config.plugins.none-ls.sources.${sourceType}.${sourceName};
|
||||||
|
@ -41,27 +40,11 @@ in
|
||||||
}
|
}
|
||||||
# Only declare a package option if a package is required
|
# Only declare a package option if a package is required
|
||||||
// lib.optionalAttrs (packaged ? ${sourceName}) {
|
// lib.optionalAttrs (packaged ? ${sourceName}) {
|
||||||
package = lib.mkOption (
|
package =
|
||||||
{
|
lib.nixvim.mkMaybeUnpackagedOption "plugins.none-ls.sources.${sourceType}.${sourceName}.package"
|
||||||
type = lib.types.nullOr lib.types.package;
|
pkgs
|
||||||
description =
|
sourceName
|
||||||
"Package to use for ${sourceName}."
|
pkg;
|
||||||
+ (lib.optionalString (pkg == null) (
|
|
||||||
"\n\n"
|
|
||||||
+ ''
|
|
||||||
Currently not packaged in nixpkgs.
|
|
||||||
Either set this to `null` and install ${sourceName} outside of nix,
|
|
||||||
or set this to a custom nix package.
|
|
||||||
''
|
|
||||||
));
|
|
||||||
}
|
|
||||||
// lib.optionalAttrs (pkg != null) {
|
|
||||||
default =
|
|
||||||
lib.attrByPath loc (lib.warn "${lib.concatStringsSep "." loc} cannot be found in pkgs!" null)
|
|
||||||
pkgs;
|
|
||||||
defaultText = lib.literalExpression "pkgs.${lib.concatStringsSep "." loc}";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# TODO: Added 2024-07-16; remove after 24.11
|
# TODO: Added 2024-07-16; remove after 24.11
|
||||||
|
|
|
@ -37,7 +37,8 @@ in
|
||||||
{
|
{
|
||||||
meta.nixvimInfo = {
|
meta.nixvimInfo = {
|
||||||
# TODO: description
|
# TODO: description
|
||||||
url = args.url or opts.package.default.meta.homepage or null;
|
# The package default can throw when the server is unpackaged, so use tryEval
|
||||||
|
url = args.url or (builtins.tryEval opts.package.default).value.meta.homepage or null;
|
||||||
path = [
|
path = [
|
||||||
"plugins"
|
"plugins"
|
||||||
"lsp"
|
"lsp"
|
||||||
|
@ -51,21 +52,8 @@ in
|
||||||
enable = lib.mkEnableOption description;
|
enable = lib.mkEnableOption description;
|
||||||
|
|
||||||
package =
|
package =
|
||||||
if lib.isOption package then
|
lib.nixvim.mkMaybeUnpackagedOption "plugins.lsp.servers.${name}.package" pkgs name
|
||||||
package
|
package;
|
||||||
else if args ? package then
|
|
||||||
lib.mkPackageOption pkgs name {
|
|
||||||
nullable = true;
|
|
||||||
default = package;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
# If we're not provided a package, we should provide a no-default option
|
|
||||||
lib.mkOption {
|
|
||||||
type = types.nullOr types.package;
|
|
||||||
description = ''
|
|
||||||
The package to use for ${name}. Has no default, but can be set to null.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
cmd = mkOption {
|
cmd = mkOption {
|
||||||
type = with types; nullOr (listOf str);
|
type = with types; nullOr (listOf str);
|
||||||
|
|
|
@ -82,7 +82,10 @@ let
|
||||||
{
|
{
|
||||||
enable = !(lib.elem server disabled);
|
enable = !(lib.elem server disabled);
|
||||||
}
|
}
|
||||||
// lib.optionalAttrs (opts ? package && !(opts.package ? default)) { package = null; }
|
# Some servers are defined using mkUnpackagedOption whose default will throw
|
||||||
|
// lib.optionalAttrs (opts ? package && !(builtins.tryEval opts.package.default).success) {
|
||||||
|
package = null;
|
||||||
|
}
|
||||||
))
|
))
|
||||||
(lib.filterAttrs (server: _: !(lib.elem server renamed)))
|
(lib.filterAttrs (server: _: !(lib.elem server renamed)))
|
||||||
];
|
];
|
||||||
|
|
|
@ -100,7 +100,6 @@
|
||||||
|
|
||||||
with-sources =
|
with-sources =
|
||||||
{
|
{
|
||||||
config,
|
|
||||||
options,
|
options,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
|
@ -158,8 +157,10 @@
|
||||||
# Enable unless disabled above
|
# Enable unless disabled above
|
||||||
enable = !(lib.elem sourceName disabled);
|
enable = !(lib.elem sourceName disabled);
|
||||||
}
|
}
|
||||||
# Some sources have a package option with no default
|
# Some sources are defined using mkUnpackagedOption whose default will throw
|
||||||
// lib.optionalAttrs (opts ? package && !(opts.package ? default)) { package = null; }
|
// lib.optionalAttrs (opts ? package && !(builtins.tryEval opts.package.default).success) {
|
||||||
|
package = null;
|
||||||
|
}
|
||||||
)
|
)
|
||||||
) options.plugins.none-ls.sources;
|
) options.plugins.none-ls.sources;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue