mirror of
https://github.com/Swarsel/.dotfiles.git
synced 2025-12-06 17:17:22 +01:00
87 lines
2 KiB
Nix
87 lines
2 KiB
Nix
# Build a reproducible latex document with latexmk, based on:
|
|
# https://flyx.org/nix-flakes-latex/
|
|
|
|
{ pkgs
|
|
# Document source
|
|
, src ? ./.
|
|
|
|
# Name of the final pdf file
|
|
, name ? "document.pdf"
|
|
|
|
# Use -shell-escape
|
|
, shellEscape ? false
|
|
|
|
# Use minted (requires shellEscape)
|
|
, minted ? false
|
|
|
|
# Additional flags for latexmk
|
|
, extraFlags ? [ ]
|
|
|
|
# Do not use the default latexmk flags. Usefull if you have a .latexmkrc or you
|
|
# don't want to use lualatex
|
|
, dontUseDefaultFlags ? false
|
|
|
|
# texlive packages needed to build the document
|
|
# you can also include other packages as a list.
|
|
, texlive ? pkgs.texlive.combined.scheme-full
|
|
|
|
# Pygments package to use (needed for minted)
|
|
, pygments ? pkgs.python39Packages.pygments
|
|
|
|
# Add system fonts
|
|
# you can specify one font directly with: pkgs.fira-code
|
|
# of join multiple fonts using symlinJoin:
|
|
# pkgs.symlinkJoin { name = "fonts"; paths = with pkgs; [ fira-code souce-code-pro ]; }
|
|
, fonts ? null
|
|
|
|
# Date for the document in unix time. You can change it
|
|
# to "$(date -r . +%s)" , "$(date -d "2022/02/22" +%s)", toString
|
|
# self.lastModified
|
|
, SOURCE_DATE_EPOCH ? "$(git log -1 --pretty=%ct)"
|
|
}:
|
|
|
|
let
|
|
inherit (pkgs) lib;
|
|
defaultFlags = [
|
|
"-interaction=nonstopmode"
|
|
"-pdf"
|
|
"-lualatex"
|
|
"-pretex='\\pdfvariable suppressoptionalinfo 512\\relax'"
|
|
"-usepretex"
|
|
];
|
|
flags = lib.concatLists [
|
|
(lib.optional (!dontUseDefaultFlags) defaultFlags)
|
|
extraFlags
|
|
(lib.optional shellEscape [ "-shell-escape" ])
|
|
];
|
|
in
|
|
|
|
assert minted -> shellEscape;
|
|
|
|
pkgs.stdenvNoCC.mkDerivation rec {
|
|
inherit src name;
|
|
|
|
buildInputs = [ texlive pkgs.git ] ++
|
|
lib.optional minted [ pkgs.which pygments ];
|
|
|
|
TEXMFHOME = "./cache";
|
|
TEXMFVAR = "./cache/var";
|
|
|
|
OSFONTDIR = lib.optionalString (fonts != null) "${fonts}/share/fonts";
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH}" latexmk ${toString flags}
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
install -m644 -D *.pdf $out/${name}
|
|
|
|
runHook postInstall
|
|
'';
|
|
}
|