nixos-configs/homeManagerModules/neovim/langs/markdown/default.nix

168 lines
5.3 KiB
Nix
Raw Normal View History

self: {
config,
lib,
osConfig,
pkgs,
self,
...
}: let
inherit (self.inputs) vimplugin-easytables-src;
inherit (self.lib.${pkgs.system}) buildPlugin;
inherit (lib) attrValues concatStringsSep mkIf;
cfg = config.programs.neovim;
isServer = osConfig.roles.server.sshd.enable or false;
githubCSS = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/OzakIOne/markdown-github-dark/5bd0bcf3ad20cf9f58591f97a597fd68fc699f8e/style.css";
hash = "sha256-deQvQOOyK6iP7kjVrgEdFTyOP80RWXMrETs6gi7DTmo=";
};
in {
config = mkIf cfg.enable {
programs = {
neovim = {
2024-12-16 17:44:17 -05:00
extraPackages = attrValues {
inherit
(pkgs)
pandoc
texlab
texliveFull
rubber
;
};
2024-06-01 17:41:48 -04:00
extraLuaConfig =
2024-06-09 22:49:30 -04:00
# lua
2024-06-01 17:41:48 -04:00
''
local lsp = require('lspconfig');
2024-05-11 20:10:45 -04:00
lsp.texlab.setup({
capabilities = require('cmp_nvim_lsp').default_capabilities(),
settings = {
texlab = {
formatterLineLength = 100,
latexFormatter = 'latexindent',
latexindent = {
modifyLineBreaks = false,
["local"] = '.indentconfig.yaml';
},
},
},
});
2024-06-01 17:41:48 -04:00
'';
plugins = [
{
plugin = buildPlugin "easytables-nvim" vimplugin-easytables-src;
type = "lua";
config =
2024-06-09 22:49:30 -04:00
# lua
''
require('easytables').setup();
'';
}
2024-06-01 17:41:48 -04:00
{
plugin = pkgs.vimPlugins.knap;
2024-06-01 17:41:48 -04:00
type = "lua";
config = let
mdToPDF = "pandoc --css ${githubCSS} %docroot% -o /tmp/%outputfile%";
mdToPDFViewer = "sioyek /tmp/%outputfile%";
mdToHTML = "pandoc --standalone --embed-resource --highlight-style=breezedark --css ${githubCSS} %docroot% -o /tmp/%outputfile%";
mdToHTMLViewer =
if isServer
then
concatStringsSep " " [
"${pkgs.nodePackages.live-server}/bin/live-server"
"--host=0.0.0.0"
"--port=6565"
"--quiet"
"--no-browser"
"--watch=%outputfile%"
"--entry-file=%outputfile%"
"--wait=800"
"/tmp"
]
else "firefox -new-window /tmp/%outputfile%";
in
2024-06-09 22:49:30 -04:00
# lua
2024-06-01 17:41:48 -04:00
''
2024-06-09 22:49:30 -04:00
--
vim.api.nvim_create_autocmd('FileType', {
pattern = 'tex',
command = 'setlocal ts=4 sw=4 sts=0 expandtab',
});
vim.g.knap_settings = {
2024-06-01 17:41:48 -04:00
-- HTML
htmloutputext = 'html',
htmltohtml = 'none',
2024-06-01 17:41:48 -04:00
htmltohtmlviewerlaunch = "",
htmltohtmlviewerrefresh = 'none',
2024-06-01 17:41:48 -04:00
-- Markdown
mdoutputext = 'html',
markdownoutputext = 'html',
-- Markdown to PDF
mdtopdf = '${mdToPDF}',
markdowntopdf = '${mdToPDF}',
mdtopdfviewerlaunch = '${mdToPDFViewer}',
markdowntopdfviewerlaunch = '${mdToPDFViewer}',
2024-06-01 17:41:48 -04:00
mdtopdfviewerrefresh = 'none',
markdowntopdfviewerrefresh = 'none',
-- Markdown to HTML
mdtohtml = '${mdToHTML}',
markdowntohtml = '${mdToHTML}',
mdtohtmlviewerlaunch = '${mdToHTMLViewer}',
markdowntohtmlviewerlaunch = '${mdToHTMLViewer}',
2024-06-01 17:41:48 -04:00
mdtohtmlviewerrefresh = 'none',
markdowntohtmlviewerrefresh = 'none',
-- LaTeX
-- TODO: stop from polluting workspace
};
vim.api.nvim_create_autocmd('BufUnload', {
pattern = '*',
callback = function()
2024-12-17 18:15:10 -05:00
os.execute("killall -qr live-server");
end,
});
2024-06-01 17:41:48 -04:00
-- F4 processes the document once, and refreshes the view
vim.keymap.set({ 'n', 'v', 'i' }, '<F4>', function()
2024-06-01 17:41:48 -04:00
require('knap').process_once();
end);
-- F5 closes the viewer application, and
-- allows settings to be reset
vim.keymap.set({ 'n', 'v', 'i' }, '<F5>', function()
2024-06-01 17:41:48 -04:00
require('knap').close_viewer();
end);
-- F6 toggles the auto-processing on and off
vim.keymap.set({ 'n', 'v', 'i' }, '<F6>', function()
2024-06-01 17:41:48 -04:00
require('knap').toggle_autopreviewing();
end);
-- F7 invokes a SyncTeX forward search, or similar,
-- where appropriate
vim.keymap.set({ 'n', 'v', 'i' }, '<F7>', function()
2024-06-01 17:41:48 -04:00
require('knap').forward_jump();
end);
'';
}
];
};
};
};
# For accurate stack trace
_file = ./default.nix;
}