{ description = "Put a short description here"; inputs = { nixpkgs = { type = "indirect"; id = "nixpkgs"; }; }; outputs = {self, nixpkgs} : let # name to be used as identifier for editor environments and such name = "Name"; #Generate a user-friendly version number. version = builtins.substring 0 8 self.lastModifiedDate; # System types to support. supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; # Helper function to generate an attrset '{ x86_64-linux = f "x86_64-linux"; ... }'. forAllSystems = nixpkgs.lib.genAttrs supportedSystems; # Nixpkgs instantiated for supported system types. nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); in { packages = forAllSystems (system: let pkgs = nixpkgsFor.${system}; # LaTex package dependencies latexdeps = {inherit (pkgs.texlive) scheme-full;}; latex = pkgs.texlive.combine latexdeps; latexrun = pkgs.latexrun; in { default = pkgs.stdenvNoCC.mkDerivation { name = "output.pdf"; buildInputs = [latex latexrun pkgs.biber pkgs.inkscape]; src = self; buildPhase = '' HOME=. cd src latexrun --latex-cmd lualatex --bibtex-cmd biber --latex-args '\-shell-escape' -o output.pdf Main.tex ''; installPhase = '' mkdir -p $out env > $out/env cp output.pdf $out/output.pdf ''; }; } ); devShells = forAllSystems (system: let pkgs = nixpkgsFor.${system}; in ( rec { # This sets the default devShell default = kakoune; kakoune = let texlab = pkgs.texlab; latexTmpDir = "latex.out/"; myKakoune = let # this could also be done by generating toml with the # nixpkgs lib, but I'm lazy kak-lsp-config = pkgs.writeTextFile { name = "kak-lsp-config.toml"; text = '' [language.latex] filetypes = ["latex"] roots = [".git", "Main.tex"] command = "texlab" args = ["-vvvv", "--log-file", "/tmp/texlabLog"] settings_section = "texlab" [language.latex.settings.texlab.build] onSave = true auxDirectory = "${latexTmpDir}" executable = "latexrun" args = ["--latex-cmd", "lualatex", "--bibtex-cmd", "biber", "--latex-args", "'-shell-escape -synctex=1'","%f"] # args = ["--latex-cmd", "lualatex", "--bibtex-cmd", "biber", "%f"] forwardSearchAfter = true [language.latex.settings.texlab.forwardSearch] executable = "zathura" args = ["--synctex-forward", "%l:1:%f", "%p"] ''; }; config = pkgs.writeTextFile (rec { name = "kakrc.kak"; destination = "/share/kak/autoload/${name}"; text = '' colorscheme solarized-dark set global tabstop 2 set global indentwidth 0 eval %sh{kak-lsp --kakoune --session $kak_session -c ${kak-lsp-config} --log /tmp/kak-lspLog -vvvv} # eval %sh{kak-lsp --kakoune --session $kak_session -c ${kak-lsp-config}} hook global WinSetOption filetype=(latex) %{ lsp-auto-hover-enable lsp-enable-window } add-highlighter global/ number-lines map global normal ': fzf-mode' ''; }); in pkgs.kakoune.override { plugins = with pkgs.kakounePlugins; [fzf-kak kak-lsp config]; }; in pkgs.mkShellNoCC { inputsFrom = [self.outputs.packages.${system}.default]; packages = [myKakoune texlab pkgs.git pkgs.zathura pkgs.fzf]; # TODO only try to start the kakoune session if no session with that # name exists shellHook = '' HOME=. # unset LANG # This is a very stupid idea but lualatex GRMBLFX!!! # argh this brakes kakoune unicode!!! alias ..="cd .." cd src mkdir -p ${latexTmpDir} export KAKOUNE_CONFIG_DIR="/dev/null/" kak -d -s ${name} & alias vim="kak -c ${name}" ''; }; texstudio = pkgs.mkShellNoCC { inputsFrom = [self.outputs.packages.${system}.default]; packages = [pkgs.texstudio pkgs.git]; shellHook = '' texstudio ''; }; texmaker = pkgs.mkShellNoCC { inputsFrom = [self.outputs.packages.${system}.default]; packages = [pkgs.texmaker pkgs.git]; shellHook = '' texmaker ''; }; }) ); }; }