From e1ba15f5f9aad34544a0b265d801d69c8ca770e3 Mon Sep 17 00:00:00 2001 From: Max Hohlfeld Date: Fri, 23 Dec 2022 16:26:14 +0100 Subject: [PATCH] update README, include compiledoc script and integration into nvim --- README.md | 14 ++++++ roles/nvim/files/init_pc.lua | 49 +++++++++----------- roles/nvim/files/lua/compileDoc.lua | 34 ++++++++++++++ roles/nvim/files/lua/snippets/all.lua | 23 +++++++++ roles/nvim/files/lua/snippets/tex.lua | 54 ++++++++++++++++++++++ roles/nvim/files/lua/telescope_customs.lua | 17 +++++++ roles/nvim/tasks/main.yml | 6 +++ roles/scripts/files/compiledoc | 9 ++-- 8 files changed, 175 insertions(+), 31 deletions(-) create mode 100644 roles/nvim/files/lua/compileDoc.lua create mode 100644 roles/nvim/files/lua/snippets/all.lua create mode 100644 roles/nvim/files/lua/snippets/tex.lua create mode 100644 roles/nvim/files/lua/telescope_customs.lua diff --git a/README.md b/README.md index e69de29..7ea1bdf 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,14 @@ +# alkaa +`alkaa` - finnish `to start`, `to begin` + +This project contains my dotfiles and scripts for daily usage. In addition to that, it is organised into [Ansible](https://docs.ansible.com/ansible/latest/index.html) roles for managing the deployment of those files. [Just](https://github.com/casey/just), a modern make replacement, is used too, so I don't need to remember all the Ansible commands. + +## Included Software +- xmonad + - alacritty + - xmobar + - dunst +- neovim +- git +- scripts + - `compiledoc` - compile a markdown or latex file into pdf using pandoc and tectonic diff --git a/roles/nvim/files/init_pc.lua b/roles/nvim/files/init_pc.lua index 58ffa10..37d631f 100644 --- a/roles/nvim/files/init_pc.lua +++ b/roles/nvim/files/init_pc.lua @@ -1,8 +1,8 @@ local fn = vim.fn local opt = vim.opt local map = vim.api.nvim_set_keymap +local buf_map = vim.api.nvim_buf_set_keymap local unmap = vim.api.nvim_del_keymap -local augroup = vim.api.nvim_create_augroup local autocmd = vim.api.nvim_create_autocmd local install_path = fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim' @@ -42,8 +42,6 @@ require('packer').startup(function() use 'nvim-telescope/telescope.nvim' -- Fuzzy Finder use 'tamago324/lir.nvim' -- Filebrowser use 'jakewvincent/mkdnflow.nvim' -- Notetaking - use 'davidgranstrom/nvim-markdown-preview' -- Markdown Livepreview - use 'xuhdev/vim-latex-live-preview' -- Latex Livepreview use 'norcalli/nvim-colorizer.lua' -- render Color Codes use 'aklt/plantuml-syntax' -- Plantuml Syntax, till treesitter supports Plantuml use { @@ -73,10 +71,7 @@ opt.completeopt = 'menuone,noinsert,noselect' map('n', 'w', 'w', { noremap = true }) map('n', 'q', 'wq', { noremap = true }) -map('n', 'ZO', '!compiler %', { noremap = true }) -map('n', 'ZK', '!kdeconnect-cli -d 3993d52f1018a472 --share %', { noremap = true }) map('n', '', 'let @/ = ""', { noremap = true }) -map('n', 'plp', '!feh %:s?pu?png? &', { noremap = true }) -- Splits map('n', '', 'h', { noremap = true }) @@ -87,14 +82,22 @@ map('n', '', 'l', { noremap = true }) opt.splitbelow = true opt.splitright = true --- Identation with autocmd -augroup('programming', {}) +-- Autocommands autocmd({ 'BufNewFile', 'BufRead' }, { - group = 'programming', desc = 'Set Filetype to sailfish for .stpl files', pattern = { '*stpl' }, command = 'setlocal filetype=sailfish' }) + +autocmd({ 'BufNewFile', 'BufRead' }, { + desc = 'When editing .md and .tex files, register commands for live preview', + pattern = { '*.md', '*.tex' }, + callback = function() + buf_map(0, 'n', 'p', 'lua require("compileDoc").open_document_preview()', { noremap = true }) + buf_map(0, 'n', 'P', 'lua require("compileDoc").close_document_preview()', { noremap = true }) + end +}) + vim.cmd("au BufRead *.yaml,*.yml if search('hosts:\\|tasks:\\|ansible.builtin', 'nw') | set ft=yaml.ansible | endif") -- Spellcheck @@ -281,7 +284,6 @@ cmp.setup.cmdline({ '/', '?' }, { } }) --- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline(':', { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ @@ -325,24 +327,17 @@ require('mkdnflow').setup({ } }) -autocmd('FileType', { - desc = 'Set auto write all for markdown files', - pattern = { 'markdown' }, - command = 'set awa' +autocmd({ 'BufRead', 'BufNewFile' }, { + desc = 'Set note taking settings for nvim in vimwiki directory', + pattern = { '*/vimwiki/**' }, + callback = function() + vim.cmd('set awa') + vim.wo.conceallevel = 2 + vim.keymap.set('n', '', ':edit #', { silent = true }) + map('n', 'wf', 'lua require("telescope_customs").find_wiki()', { noremap = true }) + map('n', 'wg', 'lua require("telescope_customs").grep_wiki()', { noremap = true }) + end }) -vim.wo.conceallevel = 2 -vim.keymap.set('n', '', ':edit #', { silent = true }) -map('n', 'wf', 'lua require("telescope_customs").find_wiki()', { noremap = true }) -map('n', 'wg', 'lua require("telescope_customs").grep_wiki()', { noremap = true }) - --- Markdown Live Preview -vim.g.nvim_markdown_preview_format = 'markdown' -map('n', 'mlp', 'MarkdownPreview', { noremap = true }) - --- Latex Live Preview -vim.g.livepreview_previewer = 'zathura' -vim.g.livepreview_use_biber = 1 -map('n', 'llp', 'LLPStartPreview', { noremap = true }) -- Lir Filebrowser local actions = require('lir.actions') diff --git a/roles/nvim/files/lua/compileDoc.lua b/roles/nvim/files/lua/compileDoc.lua new file mode 100644 index 0000000..cd82271 --- /dev/null +++ b/roles/nvim/files/lua/compileDoc.lua @@ -0,0 +1,34 @@ +local M = {} + +local pdf_viewer_pid = 0 + +local compile = function(file) + vim.fn.jobstart({ "compiledoc", file }, { + on_exit = function() print("Finished compiling.") end + }) +end + +M.open_document_preview = function() + local filename = vim.api.nvim_buf_get_name(0) + compile(filename) + + vim.api.nvim_create_augroup("compileDoc", {}) + + vim.api.nvim_create_autocmd("BufWritePost", { + group = "compileDoc", + pattern = { "*.tex", "*.md" }, + callback = function() compile(filename) end + }) + + local pdf_filename = string.gsub(filename, "%..+$", ".pdf") + pdf_viewer_pid = vim.fn.jobstart({ "zathura", pdf_filename }) +end + +M.close_document_preview = function() + vim.api.nvim_del_augroup_by_name("compileDoc") + if (pdf_viewer_pid ~= 0) then + vim.fn.jobstop(pdf_viewer_pid) + end +end + +return M diff --git a/roles/nvim/files/lua/snippets/all.lua b/roles/nvim/files/lua/snippets/all.lua new file mode 100644 index 0000000..f0bb107 --- /dev/null +++ b/roles/nvim/files/lua/snippets/all.lua @@ -0,0 +1,23 @@ +local ls = require("luasnip") +local s = ls.snippet +local sn = ls.snippet_node +local t = ls.text_node +local i = ls.insert_node +local f = ls.function_node +local c = ls.choice_node +local d = ls.dynamic_node +local l = require("luasnip.extras").lambda +local r = require("luasnip.extras").rep +local p = require("luasnip.extras").partial +local m = require("luasnip.extras").match +local n = require("luasnip.extras").nonempty +local dl = require("luasnip.extras").dynamic_lambda +local types = require("luasnip.util.types") + +return { + s({ trig = "date", dscr = "Print current date"}, + f(function(args) + return os.date("%F") + end, {}) + ) +} diff --git a/roles/nvim/files/lua/snippets/tex.lua b/roles/nvim/files/lua/snippets/tex.lua new file mode 100644 index 0000000..be4a85a --- /dev/null +++ b/roles/nvim/files/lua/snippets/tex.lua @@ -0,0 +1,54 @@ +local ls = require("luasnip") +local s = ls.snippet +local sn = ls.snippet_node +local t = ls.text_node +local i = ls.insert_node +local f = ls.function_node +local c = ls.choice_node +local d = ls.dynamic_node +local l = require("luasnip.extras").lambda +local r = require("luasnip.extras").rep +local p = require("luasnip.extras").partial +local m = require("luasnip.extras").match +local n = require("luasnip.extras").nonempty +local dl = require("luasnip.extras").dynamic_lambda +local types = require("luasnip.util.types") + +local rec_ls +rec_ls = function() + return sn( + nil, + c(1, { + -- Order is important, sn(...) first would cause infinite loop of expansion. + t(""), + sn(nil, { t({ "", "\t\\item " }), i(1), d(2, rec_ls, {}) }), + }) + ) +end + +return { + s({trig = "ul", dscr = "Itemize with endless items"}, { + t({ "\\begin{itemize}", "\t\\item " }), + i(1), + d(2, rec_ls, {}), + t({ "", "\\end{itemize}" }), + }), + s({trig = "ol", dscr = "Enumerate with endless items"}, { + t({ "\\begin{enumerate}", "\t\\item " }), + i(1), + d(2, rec_ls, {}), + t({ "", "\\end{enumerate}" }), + }), + s({trig = "sec", dscr = "Section" }, { + c(1, { + t '\\section{', + t '\\subsection{', + t '\\subsubsection{' + }), i(2), t '}', i(0) + }), + s({trig = "bf", dscr = "textbf"}, { t({"\\textbf{"}), i(1), t({"}"}), i(0) }), + s({trig = "it", dscr = "textit"}, { t({"\\textit{"}), i(1), t({"}"}), i(0) }), + s({trig = "rm", dscr = "textrm"}, { t({"\\textrm{"}), i(1), t({"}"}), i(0) }), + s({trig = "verb", dscr = "verb"}, { t({"\\verb|"}), i(1), t({"|"}), i(0) }), + s({trig = "frame", dscr="New frame"}, {t {'\\begin{frame}', '\t'}, i(0), t {'', '\\end{frame}'}}) +} diff --git a/roles/nvim/files/lua/telescope_customs.lua b/roles/nvim/files/lua/telescope_customs.lua new file mode 100644 index 0000000..173d772 --- /dev/null +++ b/roles/nvim/files/lua/telescope_customs.lua @@ -0,0 +1,17 @@ +local M = {} + +local wiki_opts = { + search_dirs = { + [1] = "~/.local/share/vimwiki" + } +} + +M.find_wiki = function() + require'telescope.builtin'.find_files(wiki_opts) +end + +M.grep_wiki = function() + require'telescope.builtin'.live_grep(wiki_opts) +end + +return M diff --git a/roles/nvim/tasks/main.yml b/roles/nvim/tasks/main.yml index bba5c13..8d15df6 100644 --- a/roles/nvim/tasks/main.yml +++ b/roles/nvim/tasks/main.yml @@ -48,6 +48,12 @@ dest: ~/.config/nvim/init.lua mode: '0755' + - name: Copy over lua modules + ansible.builtin.copy: + src: lua + dest: ~/.config/nvim/ + mode: '0755' + - name: Install language servers become: true ansible.builtin.package: diff --git a/roles/scripts/files/compiledoc b/roles/scripts/files/compiledoc index bd8f453..27ae918 100644 --- a/roles/scripts/files/compiledoc +++ b/roles/scripts/files/compiledoc @@ -10,12 +10,13 @@ ext="${file##*.}" cd "$dir" || exit 1 compile_tex() { \ - if [ -e "$dir/Tectonic.toml"]; then + if [ -e "$dir/../Tectonic.toml" -o -e "$dir/../../Tectonic.toml" ]; then tectonic -X build else params="" - ( grep -q minted $file) && params="$params -Z shell-escape" - tectonic -X compile "$params" $file + ( grep -q minted $file) && params="$params -Z shell-escape-cwd=$dir" + tectonic -X compile$params $file + rm "$base.aux" "$base.bbl" "$base.bcf" "$base.blg" "$base.log" "$base.out" "$base.run.xml" "$base.toc" "$base.xdv" fi } @@ -29,5 +30,5 @@ case "$ext" in -V mainfont="Liberation Sans" \ -V monofont="Liberation Mono" \ -o "$base".pdf "$file" ;; - tex) textype "$file" ;; + tex) compile_tex ;; esac