{ config, pkgs, lib, vimplugin-easytables-src, ... }: let inherit (config.vars) neovimIde; inherit (pkgs) vimPlugins; buildPlugin = pname: src: pkgs.vimUtils.buildVimPlugin { inherit pname src; version = src.shortRev; }; in lib.mkIf neovimIde { programs = { # TODO: add syntax highlighting for markdown sioyek = { enable = true; config = let # TODO: put this with the rest of the themes dracula-theme = pkgs.fetchFromGitHub { owner = "dracula"; repo = "sioyek"; rev = "b832ab04d880fbe243c0fe9043612be61226426e"; hash = "sha256-+HzxZA8Bb+cGogK+w4JES4ZFG+ueXEAuLu+0T18fvbc="; }; in { startup_commands = "toggle_custom_color"; ui_font = "JetBrainsMono Nerd Font Mono Regular"; font_size = "24"; source = "${dracula-theme}/dracula.config"; }; }; neovim = { extraPackages = [ pkgs.pandoc # LaTeX packages pkgs.texlab pkgs.texliveFull pkgs.rubber ]; extraLuaConfig = /* lua */ '' local lsp = require('lspconfig'); local coq = require('coq'); lsp.texlab.setup(coq.lsp_ensure_capabilities({ settings = { texlab = { formatterLineLength = 100, latexFormatter = 'latexindent', latexindent = { modifyLineBreaks = false, ["local"] = '.indentconfig.yaml'; }, }, }, })); ''; plugins = [ { plugin = buildPlugin "easytables-nvim" vimplugin-easytables-src; type = "lua"; config = /* lua */ '' require('easytables').setup(); ''; } { plugin = vimPlugins.knap; type = "lua"; config = /* lua */ '' vim.api.nvim_create_autocmd('FileType', { pattern = 'tex', command = 'setlocal ts=4 sw=4 sts=0 expandtab', }); local gknapsettings = { -- HTML htmloutputext = "html", htmltohtml = "none", htmltohtmlviewerlaunch = "", htmltohtmlviewerrefresh = "none", -- Markdown mdoutputext = 'pdf', markdownoutputext = 'pdf', mdtopdf = 'pandoc %docroot% -o /tmp/%outputfile%', markdowntopdf = "pandoc %docroot% -o /tmp/%outputfile%", mdtopdfviewerlaunch = 'sioyek /tmp/%outputfile%', markdowntopdfviewerlaunch = "sioyek /tmp/%outputfile%", mdtopdfviewerrefresh = 'none', markdowntopdfviewerrefresh = "none", mdtohtml = "", markdowntohtml = "", mdtohtmlviewerlaunch = "", markdowntohtmlviewerlaunch = "", mdtohtmlviewerrefresh = 'none', markdowntohtmlviewerrefresh = 'none', -- LaTeX -- TODO: stop from polluting workspace }; vim.g.knap_settings = gknapsettings; local kmap = vim.keymap.set -- F4 processes the document once, and refreshes the view kmap({ 'n', 'v', 'i' }, '', function() require('knap').process_once(); end); -- F5 closes the viewer application, and -- allows settings to be reset kmap({ 'n', 'v', 'i' }, '', function() require('knap').close_viewer(); end); -- F6 toggles the auto-processing on and off kmap({ 'n', 'v', 'i' }, '', function() require('knap').toggle_autopreviewing(); end); -- F7 invokes a SyncTeX forward search, or similar, -- where appropriate kmap({ 'n', 'v', 'i' }, '', function() require('knap').forward_jump(); end); ''; } ]; }; }; }