diff --git a/modules/plugins/languages/tex/build/builders/builderTemplate.nix b/modules/plugins/languages/tex/build/builders/builderTemplate.nix deleted file mode 100644 index c9cc8163..00000000 --- a/modules/plugins/languages/tex/build/builders/builderTemplate.nix +++ /dev/null @@ -1,66 +0,0 @@ -# This function acts as a template for creating new builders. -# It enforces providing all the parameters required for creating -# a new builder for it to be able to work in the existing code. -# -# The first layer requirements are as follows: -{ - # This is the name of the builder, it will only be used internally and - # should match the .nix file that the builder is implemented in. - name, - # - # Module attribute set. This is the attribute set that the module that is - # defining a builder is passed as its input. - moduleInheritencePackage, - # - # These are the standard options for the builder just like creating any - # other module. Some options are required and are described below but - # it will also accept any other options that are provided to it. - options, - # - # These are the command line arguments that will accompany the executable - # when the build command is called. - # This is a function that will take in the cfg of its own builder. - # i.e. will be called as "args cfg.build.builders.${name}" - args, - ... -}: let - # Inherit the necessary variables available to any module. - inherit (moduleInheritencePackage) lib config; - # - # Inherit other useful functions. - inherit (lib.modules) mkIf; - # - # Set the cfg variable - cfg = config.vim.languages.tex; -in { - # These are the options for the builder. It will accept any options - # provided to it but some options are mandatory: - options.vim.languages.tex.build.builders.${name} = ({ - # The enable option. This one is self explanatory. - enable, - # - # This is the package option for the builder. - package, - # - # This is the executable that will be used to call the builder. - # It, along with package will result in: - # "/bin/" - executable, - # - # Any other options provided are accepted. - ... - } @ opts: - opts) - options; - - # Check that the language and this builder have been enabled - # before making any config. - config = mkIf (cfg.enable && cfg.build.builders.${name}.enable) { - vim.languages.tex.build.builder = { - inherit name; - package = cfg.build.builders.${name}.package; - executable = cfg.build.builders.${name}.executable; - args = args cfg.build.builders.${name}; - }; - }; -} diff --git a/modules/plugins/languages/tex/build/builders/custom.nix.bak b/modules/plugins/languages/tex/build/builders/custom.nix similarity index 85% rename from modules/plugins/languages/tex/build/builders/custom.nix.bak rename to modules/plugins/languages/tex/build/builders/custom.nix index 01b5913c..749bf6be 100644 --- a/modules/plugins/languages/tex/build/builders/custom.nix.bak +++ b/modules/plugins/languages/tex/build/builders/custom.nix @@ -6,8 +6,7 @@ }: let inherit (lib.options) mkOption; inherit (lib.modules) mkIf; - inherit (lib.types) bool listOf package str; - inherit (lib) mkDefault; + inherit (lib.types) bool listOf package str ; cfg = config.vim.languages.tex; @@ -57,10 +56,10 @@ in { config = mkIf (cfg.enable && cfg.build.builders.custom.enable) { vim.languages.tex.build.builder = { - name = mkDefault "custom"; - args = mkDefault (collateArgs cfg.build); - package = mkDefault (cfg.build.builders.custom.package); - executable = mkDefault (cfg.build.builders.custom.executable); + name = "custom"; + args = collateArgs cfg.build; + package = cfg.build.builders.custom.package; + executable = cfg.build.builders.custom.executable; }; }; } diff --git a/modules/plugins/languages/tex/build/builders/default.nix b/modules/plugins/languages/tex/build/builders/default.nix index 0e4eb8d8..d772bb04 100644 --- a/modules/plugins/languages/tex/build/builders/default.nix +++ b/modules/plugins/languages/tex/build/builders/default.nix @@ -1,6 +1,5 @@ { config, - pkgs, lib, ... }: @@ -13,57 +12,30 @@ let in { imports = [ - ./latexmk.nix + ./custom.nix ./tectonic.nix ]; options.vim.languages.tex.build.builder = { name = mkOption { type = enum (attrNames cfg.build.builders); - default = "latexmk"; - description = '' - The tex builder to use. - - This is just the default custom option. By setting any of the - builders to true, this will be overwritten by that builder's - parameters. - ''; + default = "tectonic"; + description = "The tex builder to use"; }; args = mkOption { type = listOf str; - default = [ - "-pdf" - "%f" - ]; - description = '' - The list of args to pass to the builder. - - This is just the default custom option. By setting any of the - builders to true, this will be overwritten by that builder's - parameters. - ''; + default = []; + description = "The list of args to pass to the builder"; }; package = mkOption { type = package; - default = (pkgs.texlive.withPackages (ps: [ ps.latexmk ])); - description = '' - The tex builder package to use. - - This is just the default custom option. By setting any of the - builders to true, this will be overwritten by that builder's - parameters. - ''; + default = cfg.build.builders.tectonic.package; + description = "The tex builder package to use"; }; executable = mkOption { type = str; - default = "latexmk"; - description = '' - The tex builder executable to use. - - This is just the default custom option. By setting any of the - builders to true, this will be overwritten by that builder's - parameters. - ''; + default = cfg.build.builders.tectonic.executable; + description = "The tex builder executable to use"; }; }; } diff --git a/modules/plugins/languages/tex/build/builders/latexmk.nix b/modules/plugins/languages/tex/build/builders/latexmk.nix deleted file mode 100644 index 1cc4eb51..00000000 --- a/modules/plugins/languages/tex/build/builders/latexmk.nix +++ /dev/null @@ -1,68 +0,0 @@ -# TODO: I need testing. -{ - config, - pkgs, - lib, - ... -} @ moduleInheritencePackage: let - # The name of the builder - name = "latexmk"; - - # The builder template - template = import ./builderTemplate.nix; - - inherit (lib.options) mkOption mkEnableOption; - inherit (lib.types) bool package str; - - cfg = config.vim.languages.tex; - - # --- Enable Options --- - mkEnableDefaultOption = default: description: (mkOption { - type = bool; - default = default; - example = !default; - description = description; - }); -in ( - template { - inherit name moduleInheritencePackage; - - options = { - enable = mkEnableOption "Whether to enable Tex Compilation Via latexmk"; - - package = mkOption { - type = package; - default = (pkgs.texlive.withPackages (ps: [ ps.latexmk ])); - description = "latexmk package"; - }; - - executable = mkOption { - type = str; - default = "latexmk"; - description = "The executable name from the build package that will be used to build/compile the tex."; - }; - - # Flag options - pdfOutput = mkOption { - type = bool; - default = true; - example = false; - description = "Insure the output file is a pdf."; - }; - }; - - args = builderCfg: ( - # Flags - ( - if builderCfg.pdfOutput - then ["-pdf"] - else [] - ) - # Base args - ++ [ - "-quiet" - "%f" - ] - ); - } -) diff --git a/modules/plugins/languages/tex/build/builders/tectonic.nix b/modules/plugins/languages/tex/build/builders/tectonic.nix index 71facf1e..82f4b8b2 100644 --- a/modules/plugins/languages/tex/build/builders/tectonic.nix +++ b/modules/plugins/languages/tex/build/builders/tectonic.nix @@ -3,15 +3,18 @@ pkgs, lib, ... -} @ moduleInheritencePackage: let - # The name of the builder - name = "tectonic"; - - # The builder template - template = import ./builderTemplate.nix; - +}: let inherit (lib.options) mkOption mkEnableOption; - inherit (lib.types) bool enum ints listOf package str; + inherit (lib.modules) mkIf; + inherit + (lib.types) + bool + enum + ints + listOf + package + str + ; inherit (builtins) concatLists elem map toString; cfg = config.vim.languages.tex; @@ -23,184 +26,192 @@ example = !default; description = description; }); -in ( - template { - inherit name moduleInheritencePackage; - options = { - enable = mkEnableOption "Whether to enable Tex Compilation Via Tectonic"; + # --- Arg Collation Functions -- + collateArgs = buildConfig: let + selfConfig = buildConfig.builders.tectonic; + in ( + # Base args + [ + "-X" + "compile" + "%f" + ] + # Flags + ++ ( + if selfConfig.keepIntermediates + then ["--keep-intermediates"] + else [] + ) + ++ ( + if selfConfig.keepLogs + then ["--keep-logs"] + else [] + ) + ++ ( + if selfConfig.onlyCached + then ["--only-cached"] + else [] + ) + ++ ( + if selfConfig.synctex + then ["--synctex"] + else [] + ) + ++ ( + if selfConfig.untrustedInput + then ["--untrusted"] + else [] + ) + # Options + ++ ( + if selfConfig.reruns > 0 + then ["--reruns" "${toString selfConfig.reruns}"] + else [] + ) + ++ ( + if selfConfig.bundle != "" + then ["--bundle" "${toString selfConfig.bundle}"] + else [] + ) + ++ ( + if selfConfig.webBundle != "" + then ["--web-bundle" "${toString selfConfig.webBundle}"] + else [] + ) + ++ ( + if selfConfig.outfmt != "" + then ["--outfmt" "${toString selfConfig.outfmt}"] + else [] + ) + ++ (concatLists (map (x: ["--hide" x]) selfConfig.hidePaths)) + ++ ( + if selfConfig.format != "" + then ["--format" "${toString selfConfig.format}"] + else [] + ) + ++ ( + if selfConfig.color != "" + then ["--color" "${toString selfConfig.color}"] + else [] + ) + # Still options but these are not defined by builder specific options but + # instead synchronize options between the global build options and builder + # specific options + ++ ( + if !(elem buildConfig.pdfDirectory ["." ""]) + then ["--outdir" "${buildConfig.pdfDirectory}"] + else [] + ) + ); +in { + options.vim.languages.tex.build.builders.tectonic = { + enable = mkEnableOption "Whether to enable Tex Compilation Via Tectonic"; - package = mkOption { - type = package; - default = pkgs.tectonic; - description = "tectonic package"; - }; - - executable = mkOption { - type = str; - default = "tectonic"; - description = "The executable name from the build package that will be used to build/compile the tex."; - }; - - # -- Flags -- - keepIntermediates = mkEnableDefaultOption false '' - Keep the intermediate files generated during processing. - - If texlab is reporting build errors when there shouldn't be, disable this option. - ''; - keepLogs = mkEnableDefaultOption true '' - Keep the log files generated during processing. - - Without the keepLogs flag, texlab won't be able to report compilation warnings. - ''; - onlyCached = mkEnableDefaultOption false "Use only resource files cached locally"; - synctex = mkEnableDefaultOption true "Generate SyncTeX data"; - untrustedInput = mkEnableDefaultOption false "Input is untrusted -- disable all known-insecure features"; - - # -- Options -- - reruns = mkOption { - type = ints.unsigned; - default = 0; - example = 2; - description = "Rerun the TeX engine exactly this many times after the first"; - }; - - bundle = mkOption { - type = str; - default = ""; - description = "Use this directory or Zip-format bundle file to find resource files instead of the default"; - }; - - webBundle = mkOption { - type = str; - default = ""; - description = "Use this URL to find resource files instead of the default"; - }; - - outfmt = mkOption { - type = enum [ - "pdf" - "html" - "xdv" - "aux" - "fmt" - "" - ]; - default = ""; - description = "The kind of output to generate"; - }; - - hidePaths = mkOption { - type = listOf str; - default = []; - example = [ - "./secrets.tex" - "./passwords.tex" - ]; - description = "Tell the engine that no file at exists, if it tries to read it."; - }; - - format = mkOption { - type = str; - default = ""; - description = "The name of the \"format\" file used to initialize the TeX engine"; - }; - - color = mkOption { - type = enum [ - "always" - "auto" - "never" - "" - ]; - default = ""; - example = "always"; - description = "Enable/disable colorful log output"; - }; - - extraOptions = { - type = listOf str; - default = []; - description = '' - Add extra command line options to include in the tectonic build command. - Extra options added here will not overwrite the options set in as nvf options. - ''; - }; + package = mkOption { + type = package; + default = pkgs.tectonic; + description = "tectonic package"; }; - args = builderCfg: ( - # Base args - [ - "-X" - "compile" - "%f" - ] - # Flags - ++ ( - if builderCfg.keepIntermediates - then ["--keep-intermediates"] - else [] - ) - ++ ( - if builderCfg.keepLogs - then ["--keep-logs"] - else [] - ) - ++ ( - if builderCfg.onlyCached - then ["--only-cached"] - else [] - ) - ++ ( - if builderCfg.synctex - then ["--synctex"] - else [] - ) - ++ ( - if builderCfg.untrustedInput - then ["--untrusted"] - else [] - ) - # Options - ++ ( - if builderCfg.reruns > 0 - then ["--reruns" "${toString builderCfg.reruns}"] - else [] - ) - ++ ( - if builderCfg.bundle != "" - then ["--bundle" "${toString builderCfg.bundle}"] - else [] - ) - ++ ( - if builderCfg.webBundle != "" - then ["--web-bundle" "${toString builderCfg.webBundle}"] - else [] - ) - ++ ( - if builderCfg.outfmt != "" - then ["--outfmt" "${toString builderCfg.outfmt}"] - else [] - ) - ++ (concatLists (map (x: ["--hide" x]) builderCfg.hidePaths)) - ++ ( - if builderCfg.format != "" - then ["--format" "${toString builderCfg.format}"] - else [] - ) - ++ ( - if builderCfg.color != "" - then ["--color" "${toString builderCfg.color}"] - else [] - ) - # Still options but these are not defined by builder specific options but - # instead synchronize options between the global build options and builder - # specific options - ++ ( - if !(elem cfg.build.pdfDirectory ["." ""]) - then ["--outdir" "${cfg.build.pdfDirectory}"] - else [] - ) - ); - } -) + executable = mkOption { + type = str; + default = "tectonic"; + description = "The executable name from the build package that will be used to build/compile the tex."; + }; + + # -- Flags -- + keepIntermediates = mkEnableDefaultOption false '' + Keep the intermediate files generated during processing. + + If texlab is reporting build errors when there shouldn't be, disable this option. + ''; + keepLogs = mkEnableDefaultOption true '' + Keep the log files generated during processing. + + Without the keepLogs flag, texlab won't be able to report compilation warnings. + ''; + onlyCached = mkEnableDefaultOption false "Use only resource files cached locally"; + synctex = mkEnableDefaultOption true "Generate SyncTeX data"; + untrustedInput = mkEnableDefaultOption false "Input is untrusted -- disable all known-insecure features"; + + # -- Options -- + reruns = mkOption { + type = ints.unsigned; + default = 0; + example = 2; + description = "Rerun the TeX engine exactly this many times after the first"; + }; + + bundle = mkOption { + type = str; + default = ""; + description = "Use this directory or Zip-format bundle file to find resource files instead of the default"; + }; + + webBundle = mkOption { + type = str; + default = ""; + description = "Use this URL to find resource files instead of the default"; + }; + + outfmt = mkOption { + type = enum [ + "pdf" + "html" + "xdv" + "aux" + "fmt" + "" + ]; + default = ""; + description = "The kind of output to generate"; + }; + + hidePaths = mkOption { + type = listOf str; + default = []; + example = [ + "./secrets.tex" + "./passwords.tex" + ]; + description = "Tell the engine that no file at exists, if it tries to read it."; + }; + + format = mkOption { + type = str; + default = ""; + description = "The name of the \"format\" file used to initialize the TeX engine"; + }; + + color = mkOption { + type = enum [ + "always" + "auto" + "never" + "" + ]; + default = ""; + example = "always"; + description = "Enable/disable colorful log output"; + }; + + extraOptions = { + type = listOf str; + default = []; + description = '' + Add extra command line options to include in the tectonic build command. + Extra options added here will not overwrite the options set in as nvf options. + ''; + }; + }; + + config = mkIf (cfg.enable && cfg.build.builders.tectonic.enable) { + vim.languages.tex.build.builder = { + name = "tectonic"; + args = collateArgs cfg.build; + package = cfg.build.builders.tectonic.package; + executable = cfg.build.builders.tectonic.executable; + }; + }; +} diff --git a/modules/plugins/languages/tex/build/builders/tectonic.nix.bak b/modules/plugins/languages/tex/build/builders/tectonic.nix.bak deleted file mode 100644 index 82f4b8b2..00000000 --- a/modules/plugins/languages/tex/build/builders/tectonic.nix.bak +++ /dev/null @@ -1,217 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: let - inherit (lib.options) mkOption mkEnableOption; - inherit (lib.modules) mkIf; - inherit - (lib.types) - bool - enum - ints - listOf - package - str - ; - inherit (builtins) concatLists elem map toString; - - cfg = config.vim.languages.tex; - - # --- Enable Options --- - mkEnableDefaultOption = default: description: (mkOption { - type = bool; - default = default; - example = !default; - description = description; - }); - - # --- Arg Collation Functions -- - collateArgs = buildConfig: let - selfConfig = buildConfig.builders.tectonic; - in ( - # Base args - [ - "-X" - "compile" - "%f" - ] - # Flags - ++ ( - if selfConfig.keepIntermediates - then ["--keep-intermediates"] - else [] - ) - ++ ( - if selfConfig.keepLogs - then ["--keep-logs"] - else [] - ) - ++ ( - if selfConfig.onlyCached - then ["--only-cached"] - else [] - ) - ++ ( - if selfConfig.synctex - then ["--synctex"] - else [] - ) - ++ ( - if selfConfig.untrustedInput - then ["--untrusted"] - else [] - ) - # Options - ++ ( - if selfConfig.reruns > 0 - then ["--reruns" "${toString selfConfig.reruns}"] - else [] - ) - ++ ( - if selfConfig.bundle != "" - then ["--bundle" "${toString selfConfig.bundle}"] - else [] - ) - ++ ( - if selfConfig.webBundle != "" - then ["--web-bundle" "${toString selfConfig.webBundle}"] - else [] - ) - ++ ( - if selfConfig.outfmt != "" - then ["--outfmt" "${toString selfConfig.outfmt}"] - else [] - ) - ++ (concatLists (map (x: ["--hide" x]) selfConfig.hidePaths)) - ++ ( - if selfConfig.format != "" - then ["--format" "${toString selfConfig.format}"] - else [] - ) - ++ ( - if selfConfig.color != "" - then ["--color" "${toString selfConfig.color}"] - else [] - ) - # Still options but these are not defined by builder specific options but - # instead synchronize options between the global build options and builder - # specific options - ++ ( - if !(elem buildConfig.pdfDirectory ["." ""]) - then ["--outdir" "${buildConfig.pdfDirectory}"] - else [] - ) - ); -in { - options.vim.languages.tex.build.builders.tectonic = { - enable = mkEnableOption "Whether to enable Tex Compilation Via Tectonic"; - - package = mkOption { - type = package; - default = pkgs.tectonic; - description = "tectonic package"; - }; - - executable = mkOption { - type = str; - default = "tectonic"; - description = "The executable name from the build package that will be used to build/compile the tex."; - }; - - # -- Flags -- - keepIntermediates = mkEnableDefaultOption false '' - Keep the intermediate files generated during processing. - - If texlab is reporting build errors when there shouldn't be, disable this option. - ''; - keepLogs = mkEnableDefaultOption true '' - Keep the log files generated during processing. - - Without the keepLogs flag, texlab won't be able to report compilation warnings. - ''; - onlyCached = mkEnableDefaultOption false "Use only resource files cached locally"; - synctex = mkEnableDefaultOption true "Generate SyncTeX data"; - untrustedInput = mkEnableDefaultOption false "Input is untrusted -- disable all known-insecure features"; - - # -- Options -- - reruns = mkOption { - type = ints.unsigned; - default = 0; - example = 2; - description = "Rerun the TeX engine exactly this many times after the first"; - }; - - bundle = mkOption { - type = str; - default = ""; - description = "Use this directory or Zip-format bundle file to find resource files instead of the default"; - }; - - webBundle = mkOption { - type = str; - default = ""; - description = "Use this URL to find resource files instead of the default"; - }; - - outfmt = mkOption { - type = enum [ - "pdf" - "html" - "xdv" - "aux" - "fmt" - "" - ]; - default = ""; - description = "The kind of output to generate"; - }; - - hidePaths = mkOption { - type = listOf str; - default = []; - example = [ - "./secrets.tex" - "./passwords.tex" - ]; - description = "Tell the engine that no file at exists, if it tries to read it."; - }; - - format = mkOption { - type = str; - default = ""; - description = "The name of the \"format\" file used to initialize the TeX engine"; - }; - - color = mkOption { - type = enum [ - "always" - "auto" - "never" - "" - ]; - default = ""; - example = "always"; - description = "Enable/disable colorful log output"; - }; - - extraOptions = { - type = listOf str; - default = []; - description = '' - Add extra command line options to include in the tectonic build command. - Extra options added here will not overwrite the options set in as nvf options. - ''; - }; - }; - - config = mkIf (cfg.enable && cfg.build.builders.tectonic.enable) { - vim.languages.tex.build.builder = { - name = "tectonic"; - args = collateArgs cfg.build; - package = cfg.build.builders.tectonic.package; - executable = cfg.build.builders.tectonic.executable; - }; - }; -}