diff --git a/.dotter/global.toml b/.dotter/global.toml index 6c2ae8c..d2e309e 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -24,7 +24,6 @@ vcs = "~" [nvim.files] "nvim/.config/nvim/spell/de.utf-8.add.spl" = { target = "~/.config/nvim/spell/de.utf-8.add.spl", type = "symbolic" } "nvim/.config/nvim/spell/en.utf-8.add.spl" = { target = "~/.config/nvim/spell/en.utf-8.add.spl", type = "symbolic" } -"nvim/.config/nvim/snippets/quarto.snippets" = { target = "~/.config/nvim/snippets/quarto.snippets", type = "symbolic" } nvim = "~" [scripts.files] diff --git a/nvim/.config/nvim/lazy-lock.json b/nvim/.config/nvim/lazy-lock.json index 263c56a..9cea8da 100644 --- a/nvim/.config/nvim/lazy-lock.json +++ b/nvim/.config/nvim/lazy-lock.json @@ -35,13 +35,14 @@ "magick": { "branch": "master", "commit": "aa96e77b6d08983707941727a574752445de0d70" }, "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" }, "markmap.nvim": { "branch": "main", "commit": "5fb6755cf5434511cc23a4936c9eb76b9142fba5" }, - "mason-conform.nvim": { "branch": "main", "commit": "1983f353b29d8716751665c18d57e1ac0473a59a" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" }, + "mason-conform.nvim": { "branch": "main", "commit": "f3b96fa2217fcb1513301eefbe10ea0e765e33eb" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "5477d67a5ca12b704f2a8a55a057fc79750f3dbb" }, "mason-nvim-lint": { "branch": "main", "commit": "b579a00ee39dcd590b1023028dc8fb3d203a67b0" }, - "mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" }, + "mason.nvim": { "branch": "main", "commit": "7f265cd6ae56cecdd0aa50c8c73fc593b0604801" }, "mdeval.nvim": { "branch": "master", "commit": "0e1b248db174a9659a9ab16eb8c90ff3aec55264" }, "mini.nvim": { "branch": "main", "commit": "0420076298c4457f200c2de468f65d080597a347" }, "molten-nvim": { "branch": "main", "commit": "a286aa914d9a154bc359131aab788b5a077a5a99" }, + "neo-tree-jj.nvim": { "branch": "main", "commit": "c6534930c6f79893e12eafbb722ee23e6a83e80e" }, "neo-tree.nvim": { "branch": "main", "commit": "1ef260eb4f54515fe121a2267b477efb054d108a" }, "neogen": { "branch": "main", "commit": "b2e78708876f4da507839726816010a68e33fec8" }, "neotest": { "branch": "master", "commit": "d66cf4e05a116957f0d3a7755a24291c7d1e1f72" }, @@ -52,7 +53,7 @@ "nvim-colorizer.lua": { "branch": "master", "commit": "517df88cf2afb36652830df2c655df2da416a0ae" }, "nvim-coverage": { "branch": "main", "commit": "a939e425e363319d952a6c35fb3f38b34041ded2" }, "nvim-lint": { "branch": "master", "commit": "9dfb77ef6c5092a19502883c02dc5a02ec648729" }, - "nvim-lspconfig": { "branch": "master", "commit": "fa2662510d30b06168b6e2e6915518decde6bbac" }, + "nvim-lspconfig": { "branch": "master", "commit": "3ea99227e316c5028f57a4d86a1a7fd01dd876d0" }, "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, "nvim-surround": { "branch": "main", "commit": "0e62500b98f4513feaaf7425c135472457ea5b7d" }, "nvim-toggleterm.lua": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" }, @@ -87,5 +88,5 @@ "which-key.nvim": { "branch": "main", "commit": "fcbf4eea17cb299c02557d576f0d568878e354a4" }, "wrapping.nvim": { "branch": "master", "commit": "3a823200c297885b70515fa8d974e1763c578e26" }, "zen-mode.nvim": { "branch": "main", "commit": "04b52674b8c800f8b7d4609e8bd8d0212e3ffa79" }, - "zk-nvim": { "branch": "main", "commit": "8fdd7032633045ece559273370fc0ec75ee8ffce" } + "zk-nvim": { "branch": "main", "commit": "fd1ab2239ed85ca51051c094a49a280f4ed76bb2" } } diff --git a/nvim/.config/nvim/lua/core/languages.lua b/nvim/.config/nvim/lua/core/languages.lua index 755fb8c..d604954 100644 --- a/nvim/.config/nvim/lua/core/languages.lua +++ b/nvim/.config/nvim/lua/core/languages.lua @@ -1,8 +1,8 @@ -- A list of all languages for which I have support for any of: --- an LSP --- Treesitter --- linting --- formatting +-- an LSP (lsp) +-- Treesitter (ts) +-- linting (lint) +-- formatting (format) -- -- with their respective names used by lspconfig, nvim-treesitter, nvim-lint and conform. -- @@ -12,6 +12,16 @@ if vim.fn.executable("nufmt") == 1 then nushell.format = { nu = { "nufmt" } } end +-- FIXME: This does not work for populating LSP config, +-- never gets set MASON env var. Executing too early? +local function mason_dir() + local dir = vim.fn.getenv("MASON") + if dir ~= vim.NIL then + return dir + end + return vim.fn.getenv("HOME") .. "/.local/share/nvim/mason" +end + local languages = { arduino = { lsp = { arduino_language_server = {} }, ts = { "arduino" } }, awk = { ts = { "awk" }, format = { awk = { "gawk" } } }, @@ -107,7 +117,11 @@ local languages = { lsp = { tinymist = { settings = { formatterMode = "typstyle" } } }, ts = { "typst" }, }, - vue = { format = { vue = { "prettier", "rustywind" } } }, + vue = { + lsp = { vue_ls = {} }, + ts = { "typescript", "vue" }, + format = { vue = { "prettier", "rustywind" } }, + }, yaml = { lsp = { yamlls = {}, ansiblels = {} }, ts = { "yaml" }, format = { yaml = { "prettier" } } }, zsh = { format = { zsh = { "shfmt" } } }, @@ -358,7 +372,6 @@ local languages = { "vim", "vimdoc", "vrl", - "vue", "wgsl", "wgsl_bevy", "wing", diff --git a/nvim/.config/nvim/lua/plugins/git.lua b/nvim/.config/nvim/lua/plugins/git.lua index bf443ca..d466133 100644 --- a/nvim/.config/nvim/lua/plugins/git.lua +++ b/nvim/.config/nvim/lua/plugins/git.lua @@ -1,15 +1,4 @@ return { - { - "julienvincent/hunk.nvim", - dependencies = { - "MunifTanjim/nui.nvim", - { "nvim-tree/nvim-web-devicons", optional = true }, - }, - cmd = { "DiffEditor" }, - config = function() - require("hunk").setup() - end, - }, { "akinsho/git-conflict.nvim", event = { "InsertEnter", "CursorHold", "VeryLazy" }, @@ -106,4 +95,17 @@ return { }) end, }, + + -- jj diffing + { + "julienvincent/hunk.nvim", + dependencies = { + "MunifTanjim/nui.nvim", + { "nvim-tree/nvim-web-devicons", optional = true }, + }, + cmd = { "DiffEditor" }, + config = function() + require("hunk").setup() + end, + }, } diff --git a/nvim/.config/nvim/lua/plugins/linting.lua b/nvim/.config/nvim/lua/plugins/linting.lua index 6a14c4c..173520a 100644 --- a/nvim/.config/nvim/lua/plugins/linting.lua +++ b/nvim/.config/nvim/lua/plugins/linting.lua @@ -19,7 +19,9 @@ return { "mfussenegger/nvim-lint", config = function() require("lint").linters_by_ft = linters - require("lint").linters.markdownlint.args = { "--stdin", "--disable", "MD013", "--" } + if require("lint").linters["markdownlint"] ~= nil then + require("lint").linters.markdownlint.args = { "--stdin", "--disable", "MD013", "--" } + end vim.api.nvim_create_autocmd({ "BufWritePost", "InsertLeave" }, { callback = function() if not vim.g.disable_autolint then diff --git a/nvim/.config/nvim/lua/plugins/lsp.lua b/nvim/.config/nvim/lua/plugins/lsp.lua index 84bcf26..a1c56ae 100644 --- a/nvim/.config/nvim/lua/plugins/lsp.lua +++ b/nvim/.config/nvim/lua/plugins/lsp.lua @@ -1,12 +1,15 @@ -local servers = {} -for _, lang in pairs(Languages) do - if not lang.lsp then - goto continue +local function get_all_servers() + local servers = {} + for _, lang in pairs(Languages) do + if not lang.lsp then + goto continue + end + for name, conf in pairs(lang.lsp) do + servers[name] = vim.tbl_deep_extend("force", servers[name] or {}, conf) + end + ::continue:: end - for name, conf in pairs(lang.lsp) do - servers[name] = conf - end - ::continue:: + return servers end local lsp = { @@ -27,10 +30,8 @@ local lsp = { { "saghen/blink.cmp", optional = true }, }, event = { "BufReadPost", "BufNewFile", "BufWritePre" }, - opts = { servers = servers }, + opts = { servers = get_all_servers() }, config = function(_, lspconfig_opts) - local lspconfig = require("lspconfig") - -- Display diagnostics as virtual text only if not in insert mode -- /r/neovim/comments/12inp4c/disable_diagnostics_virtual_text_when_in_insert/jqqifwk/ vim.diagnostic.config({ virtual_text = true }) @@ -50,16 +51,22 @@ local lsp = { vim.fn.sign_define("DiagnosticSignInfo", { text = "", texthl = "DiagnosticSignInfo" }) vim.fn.sign_define("DiagnosticSignHint", { text = "", texthl = "DiagnosticSignHint" }) - for server, config in pairs(lspconfig_opts.servers) do - if vim.fn.has("nvim-0.11") == false then - config.capabilities = require("blink.cmp").get_lsp_capabilities(config.capabilities) + local function register(server_name, config) + if vim.fn.has("nvim-0.11") == 1 then + vim.lsp.config(server_name, config) + else + require("lspconfig")[server_name].setup(config) end - lspconfig[server].setup(config) end - lspconfig.nushell.setup({}) + for server_name, config in pairs(lspconfig_opts.servers) do + register(server_name, config) + if vim.fn.has("nvim-0.11") == 0 then + config.capabilities = require("blink.cmp").get_lsp_capabilities(config.capabilities) + end + end - lspconfig.marksman.setup({ + register("marksman", { filetypes = { "markdown", "quarto" }, on_attach = function(client, _) -- TODO: for some reason this stays true even after rootdir switch? @@ -112,7 +119,7 @@ local lsp = { local python_path -- ensure python virtualenv is determined automatically on lsp start -- we primarily use pyright for cmp lsp completion & hover info - lspconfig.basedpyright.setup({ + register("basedpyright", { on_attach = function(client, _) require("core.util").set_python_env() if python_path == nil then @@ -134,7 +141,7 @@ local lsp = { }, }, }) - lspconfig.ruff.setup({ + register("ruff", { on_attach = function(client, _) require("core.util").set_python_env() client.server_capabilities.hoverProvider = false -- we use pyright for hover info @@ -148,16 +155,33 @@ local lsp = { -- set up arduino with the help of arduino.nvim plugin if require("core.util").is_available("arduino") then - lspconfig.arduino_language_server.setup({ + register("arduino_language_server", { on_new_config = require("arduino").on_new_config, }) end + if vim.lsp.is_enabled("vue_ls") then + register("ts_ls", { + init_options = { + plugins = { + { + name = "@vue/typescript-plugin", + location = vim.fn.expand("$MASON/packages") + .. "/vue-language-server" + .. "/node_modules/@vue/language-server", + languages = { "vue" }, + }, + }, + }, + filetypes = { "typescript", "javascript", "javascriptreact", "typescriptsreact", "vue" }, + }) + end + -- attach ltex for fitting ft only when spell checking becomes enabled vim.api.nvim_create_autocmd("User", { pattern = "SpellEnable", callback = function() - lspconfig.ltex.setup({ + register("ltex", { on_attach = function(_, _) if require("core.util").is_available("ltex_extra") then require("ltex_extra").setup() diff --git a/nvim/.config/nvim/lua/plugins/pickers.lua b/nvim/.config/nvim/lua/plugins/pickers.lua index 3682999..120ac26 100644 --- a/nvim/.config/nvim/lua/plugins/pickers.lua +++ b/nvim/.config/nvim/lua/plugins/pickers.lua @@ -38,13 +38,54 @@ return { -- file/item pickers and managers }) end, cmd = "Neotree", - opts = { - source_selector = { winbar = true }, - }, + opts = function(_, opts) + opts.sources = { "filesystem", "git_status", "buffers" } + opts.source_selector = { + winbar = true, + sources = { + { source = "filesystem" }, + { source = "git_status" }, + }, + } + opts.close_if_last_window = true + opts.enable_cursor_hijack = true + end, keys = { { "se", "Neotree toggle left", desc = "filetree", silent = true }, }, }, + { -- substituting git tree listing with jj listing if in jj repo + dependencies = { "Cretezy/neo-tree-jj.nvim" }, + "nvim-neo-tree/neo-tree.nvim", + optional = true, + opts = function(_, opts) + opts.sources = opts.sources or {} + opts.source_selector = opts.source_selector or {} + -- Add jj source as available + table.insert(opts.sources, "jj") + -- If there is a git tab in neo-tree replace it when in jj repo + if require("neo-tree.sources.jj.utils").get_repository_root() then + -- Remove git tab + if opts.source_selector.sources then + for i, source in ipairs(opts.source_selector.sources) do + if source.source == "git_status" then + table.remove(opts.source_selector.sources, i) + break + end + end + else + opts.source_selector.sources = {} + end + + -- Add jj tab + table.insert(opts.source_selector.sources, { + display_name = "󰊢 JJ", + source = "jj", + }) + end + end, + }, + { "MagicDuck/grug-far.nvim", opts = {}, cmd = "GrugFar" }, { "ibhagwan/fzf-lua", diff --git a/nvim/.config/nvim/lua/plugins/prose.lua b/nvim/.config/nvim/lua/plugins/prose.lua index 7d502ec..58480c9 100644 --- a/nvim/.config/nvim/lua/plugins/prose.lua +++ b/nvim/.config/nvim/lua/plugins/prose.lua @@ -70,6 +70,7 @@ local prose_plugs = { "MeanderingProgrammer/render-markdown.nvim", main = "render-markdown", opts = { + file_types = { "markdown", "codecompanion" }, render_modes = { "n", "c", "i" }, code = { sign = false, @@ -212,9 +213,11 @@ local prose_plugs = { require("zk").setup({ picker = picker, lsp = { + config = { + filetypes = { "markdown", "quarto", "djot" }, + }, auto_attach = { enabled = true, - filteypes = { "markdown", "quarto", "djot" }, }, }, }) diff --git a/nvim/.config/nvim/lua/plugins/testing.lua b/nvim/.config/nvim/lua/plugins/testing.lua index 4da2e00..1062823 100644 --- a/nvim/.config/nvim/lua/plugins/testing.lua +++ b/nvim/.config/nvim/lua/plugins/testing.lua @@ -104,7 +104,7 @@ return { }, }, -- TODO: needs to pick up poetry env for python, - -- currently just hard-codes running through poetry + -- currently just hard-codes running through uv { "andythigpen/nvim-coverage", dependencies = { @@ -112,7 +112,7 @@ return { }, config = function() require("coverage").setup({ - lang = { python = { coverage_command = "poetry run coverage json -q -o -" } }, + lang = { python = { coverage_command = "uv run coverage json -q -o -" } }, }) end, ft = { "python" }, diff --git a/terminal/.config/wezterm/wezterm.lua b/terminal/.config/wezterm/wezterm.lua index 8fa9cf3..d945718 100644 --- a/terminal/.config/wezterm/wezterm.lua +++ b/terminal/.config/wezterm/wezterm.lua @@ -24,6 +24,9 @@ if file_exists(colorsfile) == true then end local settings = { + unix_domains = { + { name = "unix" }, + }, enable_wayland = true, -- sadface :-( xcursor_theme = "Adwaita", enable_tab_bar = true, diff --git a/vcs/jj/config/jj/config.toml b/vcs/jj/config/jj/config.toml index 8bfa504..134f553 100644 --- a/vcs/jj/config/jj/config.toml +++ b/vcs/jj/config/jj/config.toml @@ -18,6 +18,10 @@ pager = "delta" [ui.diff] format = "git" # for the time being to use delta well +[aliases] +# see: https://shaddy.dev/notes/jj-tug/, update most recent bookmark +tug = ["bookmark", "move", "--from", "heads(::@- & bookmarks())", "--to", "@-"] + [templates] # Add git diffs to commit drafts draft_commit_description = ''' @@ -46,7 +50,6 @@ if(root, if(conflict, label("conflict", "conflict")), bookmarks, tags, - if(git_head, label("git_head", "git_head()")), if(description, description.first_line(), label(if(empty, "empty"), description_placeholder), @@ -58,6 +61,7 @@ if(root, if(config("ui.show-cryptographic-signatures").as_boolean(), format_short_cryptographic_signature(signature)), if(empty, label("empty", "(empty)")), + if(git_head, label("git_head", "git_head()")), ) ++ "\n", ), ) diff --git a/writing/papis/config/papis/config b/writing/papis/config/papis/config index e865dc9..0289ac5 100644 --- a/writing/papis/config/papis/config +++ b/writing/papis/config/papis/config @@ -1,6 +1,6 @@ [settings] default-library = main -formater = bbt +formatter = bbt local-config-file = .papis.config opentool = sioyek