From 3d367b0230419250c3768af20ebb31d6340bb7fd Mon Sep 17 00:00:00 2001 From: matt1432 Date: Sat, 1 Jun 2024 17:41:48 -0400 Subject: [PATCH] feat(nvim): add latex support --- common/home/neovim/langs/markdown.nix | 108 +++++++++++++++++++++++++- 1 file changed, 105 insertions(+), 3 deletions(-) diff --git a/common/home/neovim/langs/markdown.nix b/common/home/neovim/langs/markdown.nix index 2fc713f..8027dca 100644 --- a/common/home/neovim/langs/markdown.nix +++ b/common/home/neovim/langs/markdown.nix @@ -16,10 +16,49 @@ in lib.mkIf neovimIde { programs = { - neovim = { - plugins = [ - vimPlugins.markdown-preview-nvim + # 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"; + # TODO: make sure the font is applied + 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({})); + ''; + + plugins = [ { plugin = buildPlugin "easytables-nvim" vimplugin-easytables-src; type = "lua"; @@ -31,6 +70,69 @@ in require('easytables').setup(); ''; } + + { + plugin = vimPlugins.knap; + type = "lua"; + config = + /* + lua + */ + '' + 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); + ''; + } ]; }; };