{ lib, flake-parts-lib, ... }: let inherit (lib) mkIf mkOption mkEnableOption types ; inherit (flake-parts-lib) mkPerSystemOption; in { options.perSystem = mkPerSystemOption ( { config, pkgs, ... }: { options = { texShell = { scheme = mkOption { type = types.packages; default = pkgs.texliveSmall; description = '' The base texlive scheme to use. Choose between: - pkgs.texliveSmall - pkgs.texliveMedium - pkgs.texliveFull - pkgs.texliveBasic - pkgs.texliveMinimal - pkgs.texliveTeTex ''; }; extraPackages = mkOption { type = types.functionTo (types.listOf types.package); description = '' Extra packages to add to the texlive scheme. Unlike more sophisticated projects such as [latex-utils](https://github.com/jmmaloney4/latex-utils), there is no auto-discovery of necessary packages. ''; default = _: [ ]; }; latexmk = { enable = mkEnableOption "latexmk"; rc = mkOption { type = types.lines; description = "contents of the .latexmkrc file"; default = /* perl */ '' $out_dir = '.latex-build'; $pdf_mode = 1; $pdflatex = 'lualatex -interaction=nonstopmode -file-line-error -synctex=1 %O %S'; ''; }; rcFile = mkOption { type = types.path; default = pkgs.writeText "latexmkrc" config.texShell.latexmk.rc; description = "the .latexmkrc file"; }; _wrapper = mkOption { type = types.functionTo types.package; readOnly = true; internal = true; description = "A wrapper derivation to add the rc file to latexmk"; default = tex: pkgs.symlinkJoin { inherit (tex) name; nativeBuildInputs = [ pkgs.makeWrapper ]; paths = [ tex ]; postBuild = '' wrapProgram $out/bin/latexmk --add-flags "-r" --add-flags "${config.texShell.latexmk.rcFile}" ''; }; }; }; build = { package = mkOption { type = types.package; readOnly = true; description = "The final texlive package"; default = let wrapper = if config.texShell.latexmk.enable then config.texShell.latexmk._wrapper else x: x; in wrapper (config.texShell.scheme.withPackages config.texShell.extraPackages); }; devShell = mkOption { type = types.package; readOnly = true; description = "The final texlive shell"; default = pkgs.mkShellNoCC { buildInputs = [ config.texShell.build.package ]; }; }; }; }; }; config = { texShell.extraPackages = mkIf config.texShell.latexmk.enable (ps: [ ps.latexmk ]); }; } ); }