From 62caa1282f44ca0518702315b9ae7be79f1db084 Mon Sep 17 00:00:00 2001 From: Matthias Puchstein Date: Wed, 12 Nov 2025 21:28:30 +0100 Subject: [PATCH] small updates --- .config/hypr/hyprland.conf | 2 +- .config/nvim/lua/plugins/md-kiss.lua | 147 +++++++++++++++++++-------- .profile##hostname.owlenpc00 | 3 + 3 files changed, 108 insertions(+), 44 deletions(-) diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf index dc2942a..66859d4 100644 --- a/.config/hypr/hyprland.conf +++ b/.config/hypr/hyprland.conf @@ -290,7 +290,7 @@ windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned workspace = special:keepass, on-created-empty:keepassxc windowrule = float, class:org.keepassxc.KeePassXC windowrule = noscreenshare, class:org.keepassxc.KeePassXC -windowrule = size 60%, 60%, class:org.keepassxc.KeePassXC +windowrule = size 60% 60%, class:org.keepassxc.KeePassXC windowrule = center, class:org.keepassxc.KeePassXC ## ========== Communication ========== diff --git a/.config/nvim/lua/plugins/md-kiss.lua b/.config/nvim/lua/plugins/md-kiss.lua index 5c61c8c..5900206 100644 --- a/.config/nvim/lua/plugins/md-kiss.lua +++ b/.config/nvim/lua/plugins/md-kiss.lua @@ -1,10 +1,9 @@ -- Minimal Markdown + math workflow (FOSS/KISS): -- - Blink completion of LaTeX symbols in Markdown --- - :MdPdf to compile current .md -> PDF via Pandoc (LuaLaTeX) and open in Zathura --- - Ensure Treesitter grammars for markdown - +-- - :MdPdf for one-shot Pandoc -> PDF (LuaLaTeX) and open in Zathura (auto-reload) +-- - :MdWatch / :MdWatchStop to rebuild on save via `entr` return { - -- Extend blink.cmp sources so Markdown gets LaTeX symbol completion (inserts \alpha, not α) + -- Markdown gets LaTeX symbol completion (inserts \alpha, not α) { "Saghen/blink.cmp", optional = true, @@ -17,7 +16,7 @@ return { end, }, - -- Ensure Treesitter grammars for better Markdown editing + -- Ensure Treesitter grammars for Markdown editing { "nvim-treesitter/nvim-treesitter", opts = function(_, opts) @@ -28,47 +27,109 @@ return { end, }, - -- Add a simple :MdPdf command and a keymap + -- Commands + keymaps { "AstroNvim/astrocore", - opts = { - commands = { - MdPdf = { - function() - local stem = vim.fn.expand "%:r" - local ext = vim.fn.expand "%:e" - if ext ~= "md" then - vim.notify("MdPdf: open a Markdown file (*.md)", vim.log.levels.WARN) - return + init = function() + local function have(bin) return vim.fn.executable(bin) == 1 end + + local function pandoc_cmd(input_md) + local stem = input_md:gsub("%.md$", "") + local md = vim.fn.shellescape(input_md) + local pdf = vim.fn.shellescape(stem .. ".pdf") + local cmd = ("pandoc %s -o %s --from=markdown+tex_math_dollars+raw_tex --pdf-engine=lualatex --citeproc"):format( + md, + pdf + ) + return cmd, (stem .. ".pdf") + end + + -- One-shot: build PDF and open Zathura once (it auto-reloads) + vim.api.nvim_create_user_command("MdPdf", function() + if not have "pandoc" then + vim.notify("MdPdf: pandoc not found. Install pandoc.", vim.log.levels.ERROR) + return + end + local name = vim.api.nvim_buf_get_name(0) + if name == "" or not name:match "%.md$" then + vim.notify("MdPdf: open a Markdown (*.md) file", vim.log.levels.WARN) + return + end + local cmd, pdf = pandoc_cmd(name) + vim.fn.jobstart({ "sh", "-c", cmd }, { + detach = true, + on_exit = function() + if have "zathura" and not vim.g._mdpdf_zathura_opened then + vim.g._mdpdf_zathura_opened = true + vim.fn.jobstart({ "zathura", "--fork", pdf }, { detach = true }) end - local cmd = { - "pandoc", - stem .. ".md", - "-o", - stem .. ".pdf", - "--from=markdown+tex_math_dollars+raw_tex", - "--pdf-engine=lualatex", - "--citeproc", - } - vim.fn.jobstart(cmd, { - detach = true, - on_exit = function() - -- Open Zathura only once per session; it will auto-reload on subsequent builds - if not vim.g._mdpdf_zathura_opened then - vim.g._mdpdf_zathura_opened = true - vim.fn.jobstart({ "zathura", "--fork", stem .. ".pdf" }, { detach = true }) - end - end, - }) end, - desc = "Pandoc → PDF (LuaLaTeX) and open in Zathura", - }, - }, - mappings = { - n = { - ["mp"] = { "MdPdf", desc = "Markdown → PDF (Pandoc)" }, - }, - }, - }, + }) + end, {}) + + -- Continuous: watch with entr and rebuild on change + vim.api.nvim_create_user_command("MdWatch", function() + if not have "pandoc" then + vim.notify("MdWatch: pandoc not found. Install pandoc.", vim.log.levels.ERROR) + return + end + if not have "entr" then + vim.notify("MdWatch: entr not found. Install entr.", vim.log.levels.ERROR) + return + end + local buf = vim.api.nvim_get_current_buf() + local name = vim.api.nvim_buf_get_name(buf) + if name == "" or not name:match "%.md$" then + vim.notify("MdWatch: open a Markdown (*.md) file", vim.log.levels.WARN) + return + end + + -- First build (also opens Zathura once) + vim.cmd "MdPdf" + + local cmd, _ = pandoc_cmd(name) + local qfile = vim.fn.shellescape(name) + local pipeline = ("printf %%s\\n %s | entr -r sh -c %s"):format(qfile, vim.fn.shellescape(cmd)) + local jobid = vim.fn.jobstart({ "sh", "-c", pipeline }, { detach = false }) + if jobid <= 0 then + vim.notify("MdWatch: failed to start entr", vim.log.levels.ERROR) + return + end + vim.b.md_kiss_watch_job = jobid + vim.notify("MdWatch: watching " .. name .. " (use :MdWatchStop to stop)", vim.log.levels.INFO) + + -- Auto-stop when buffer unloads + vim.api.nvim_create_autocmd({ "BufUnload", "BufWipeout" }, { + buffer = buf, + once = true, + callback = function() + if vim.b.md_kiss_watch_job then pcall(vim.fn.jobstop, vim.b.md_kiss_watch_job) end + end, + }) + end, {}) + + vim.api.nvim_create_user_command("MdWatchStop", function() + local job = vim.b.md_kiss_watch_job + if job then + pcall(vim.fn.jobstop, job) + vim.b.md_kiss_watch_job = nil + vim.notify("MdWatch: stopped", vim.log.levels.INFO) + else + vim.notify("MdWatch: no watcher running for this buffer", vim.log.levels.WARN) + end + end, {}) + + -- Buffer-local keymaps for Markdown + local group = vim.api.nvim_create_augroup("md_kiss_keys", { clear = true }) + vim.api.nvim_create_autocmd("FileType", { + group = group, + pattern = "markdown", + callback = function(args) + vim.keymap.set("n", "mP", "MdPdf", { buffer = args.buf, desc = "Markdown → PDF (Pandoc)" }) + vim.keymap.set("n", "mw", "MdWatch", { buffer = args.buf, desc = "Watch & rebuild (entr)" }) + vim.keymap.set("n", "mW", "MdWatchStop", { buffer = args.buf, desc = "Stop watch" }) + end, + }) + end, }, } diff --git a/.profile##hostname.owlenpc00 b/.profile##hostname.owlenpc00 index bbb79f1..d0a83c3 100644 --- a/.profile##hostname.owlenpc00 +++ b/.profile##hostname.owlenpc00 @@ -2,6 +2,7 @@ # Added by Toolbox App export PATH="${PATH}:/home/mpuchstein/.local/share/JetBrains/Toolbox/scripts" + export PATH="${PATH}:/home/mpuchstein/.local/bin" export PATH="${PATH}:/home/mpuchstein/.cargo/bin" @@ -41,3 +42,5 @@ export LD_LIBRARY_PATH=/opt/rocm/lib:$LD_LIBRARY_PATH export PYENV_ROOT="$HOME/.pyenv" [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init - zsh)" + +export MAMBA_ROOT_PREFIX="$HOME/.mamba