Refactored to use the nvf library toLuaObject as well as other improvements and cleanups

This commit is contained in:
isaacST08 2025-01-26 18:42:54 -07:00
commit 1bebf495dc
3 changed files with 119 additions and 129 deletions

View file

@ -3,15 +3,14 @@
pkgs,
lib,
...
}:
let
}: let
inherit (lib.options) mkOption;
inherit (lib.types) enum listOf package str;
inherit (builtins) attrNames;
inherit (lib.nvim.config) mkBool;
inherit (builtins) attrNames filter isAttrs hasAttr elemAt length;
cfg = config.vim.languages.tex;
in
{
in {
imports = [
./latexmk.nix
./tectonic.nix
@ -27,6 +26,8 @@ in
This is just the default custom option. By setting any of the
builders to true, this will be overwritten by that builder's
parameters.
Setting this parameter to the name of a declared builder will
not automatically enable that builder.
'';
};
args = mkOption {
@ -45,7 +46,7 @@ in
};
package = mkOption {
type = package;
default = (pkgs.texlive.withPackages (ps: [ ps.latexmk ]));
default = pkgs.texlive.withPackages (ps: [ps.latexmk]);
description = ''
The tex builder package to use.
@ -67,4 +68,3 @@ in
};
};
}

View file

@ -4,34 +4,71 @@
...
}: let
inherit (lib.options) mkOption;
inherit (lib.types) bool str;
inherit (lib.types) str nullOr;
inherit (builtins) filter isAttrs hasAttr attrNames length elemAt;
inherit (lib.nvim.config) mkBool;
cfg = config.vim.languages.tex;
enabledBuildersCount = let
# This function will sort through the builder options and count how many
# builders have been enabled.
getEnabledBuildersCount = {
enabledBuildersCount ? 0,
index ? 0,
builderNamesList ? (
filter (
x: let
y = cfg.build.builders.${x};
in (isAttrs y && hasAttr "enable" y)
) (attrNames cfg.build.builders)
),
}: let
currentBuilderName = elemAt builderNamesList index;
currentBuilder = cfg.build.builders.${currentBuilderName};
nextIndex = index + 1;
newEnabledBuildersCount =
if currentBuilder.enable
then enabledBuildersCount + 1
else enabledBuildersCount;
in
if length builderNamesList > nextIndex
then
getEnabledBuildersCount {
inherit builderNamesList;
enabledBuildersCount = newEnabledBuildersCount;
index = nextIndex;
}
else newEnabledBuildersCount;
in (getEnabledBuildersCount {});
in {
imports = [
./builders
];
options.vim.languages.tex.build = {
forwardSearchAfter = mkOption {
type = bool;
default = false;
description = "Set this property to true if you want to execute a forward search after a build.";
};
onSave = mkOption {
type = bool;
default = false;
description = "Set this property to true if you want to compile the project after saving a file.";
};
useFileList = mkOption {
type = bool;
default = false;
description = ''
When set to true, the server will use the .fls files produced by the TeX engine as an additional input for the project detection.
enable =
mkBool (
if enabledBuildersCount > 1
then throw "nvf-tex-language does not support having more than 1 builders enabled!"
else (enabledBuildersCount == 1)
) ''
Whether to enable configuring the builder.
Note that enabling this property might have an impact on performance.
By enabling any of the builders, this option will be automatically set.
If you enable more than one builder then an error will be thrown.
'';
};
forwardSearchAfter = mkBool false "Set this property to true if you want to execute a forward search after a build.";
onSave = mkBool false "Set this property to true if you want to compile the project after saving a file.";
useFileList = mkBool false ''
When set to true, the server will use the .fls files produced by the TeX engine as an additional input for the project detection.
Note that enabling this property might have an impact on performance.
'';
auxDirectory = mkOption {
type = str;
default = ".";
@ -42,6 +79,7 @@ in {
When using a latexmkrc file, texlab will automatically infer the correct setting.
'';
};
logDirectory = mkOption {
type = str;
default = ".";
@ -52,6 +90,7 @@ in {
When using a latexmkrc file, texlab will automatically infer the correct setting.
'';
};
pdfDirectory = mkOption {
type = str;
default = ".";
@ -62,9 +101,10 @@ in {
When using a latexmkrc file, texlab will automatically infer the correct setting.
'';
};
filename = mkOption {
type = str;
default = "";
type = nullOr str;
default = null;
description = ''
Allows overriding the default file name of the build artifact. This setting is used to find the correct PDF file to open during forward search.
'';