refactor(nvim): move config out of module
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
vim.cmd([[
|
||||
function GetClozeNumber()
|
||||
let REGEX_CLOZE_START = '{{c\d\+::'
|
||||
|
||||
" Find previous cloze match
|
||||
let prev_match = searchpos(REGEX_CLOZE_START, 'bW', line("gg"))
|
||||
" Only get number if cloze was matched (i.e. when cursor does not end up at
|
||||
" start of file)
|
||||
if max(prev_match) != 0
|
||||
" Get word under cursor (ignoring curly braces and `::`),
|
||||
" get the second character of the word and cast it to an int
|
||||
" add one for the next cloze number
|
||||
return str2nr(expand("<cword>")[1]) + 1
|
||||
else
|
||||
return 1
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Wrap the next cloze number
|
||||
function GetClozeStart()
|
||||
return "{{c" . GetClozeNumber() . "::"
|
||||
endfunction
|
||||
|
||||
function GetClozeEnd()
|
||||
return "}}"
|
||||
endfunction
|
||||
|
||||
let g:sandwich#recipes += [
|
||||
\ {
|
||||
\ 'buns': ['GetClozeStart()', 'GetClozeEnd()'],
|
||||
\ 'expr' : 1,
|
||||
\ 'filetype': ['pandoc'],
|
||||
\ 'input': ['c'],
|
||||
\ 'nesting': 1
|
||||
\ }
|
||||
\ ]
|
||||
]])
|
||||
@@ -0,0 +1,3 @@
|
||||
require("auto-session").setup({
|
||||
auto_session_enabled = vim.env.KITTY_SCROLLBACK_NVIM ~= "true", -- See kitty-scrollback.nvim
|
||||
})
|
||||
@@ -0,0 +1,26 @@
|
||||
require("claudecode").setup({
|
||||
-- terminal = {
|
||||
-- provider = "snacks",
|
||||
-- snacks_win_opts = {
|
||||
-- position = "float",
|
||||
-- width = 0.8,
|
||||
-- height = 0.8,
|
||||
-- border = "rounded",
|
||||
-- },
|
||||
-- },
|
||||
-- diff_opts = {
|
||||
-- layout = "vertical",
|
||||
-- },
|
||||
})
|
||||
|
||||
local map = vim.keymap.set
|
||||
|
||||
map({ "n", "t" }, "<C-_>", "<cmd>ClaudeCode<cr>", { desc = "Toggle Claude Code" })
|
||||
map("n", "<leader>cf", "<cmd>ClaudeCodeFocus<cr>", { desc = "Focus Claude Code" })
|
||||
map("n", "<leader>cC", "<cmd>ClaudeCode --continue<cr>", { desc = "Claude Code (continue)" })
|
||||
map("n", "<leader>cr", "<cmd>ClaudeCode --resume<cr>", { desc = "Claude Code (resume)" })
|
||||
map("n", "<leader>cm", "<cmd>ClaudeCodeSelectModel<cr>", { desc = "Claude Code select model" })
|
||||
map("n", "<leader>cb", "<cmd>ClaudeCodeAdd %<cr>", { desc = "Add buffer to Claude Code" })
|
||||
map("v", "<leader>cs", "<cmd>ClaudeCodeSend<cr>", { desc = "Send selection to Claude Code" })
|
||||
map("n", "<leader>co", "<cmd>ClaudeCodeDiffAccept<cr>", { desc = "Accept Claude Code diff" })
|
||||
map("n", "<leader>cd", "<cmd>ClaudeCodeDiffDeny<cr>", { desc = "Deny Claude Code diff" })
|
||||
@@ -0,0 +1,7 @@
|
||||
require("codecompanion").setup({
|
||||
ignore_warnings = true,
|
||||
strategies = {
|
||||
chat = { adapter = "openai" },
|
||||
inline = { adapter = "openai" },
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,30 @@
|
||||
require("conform").setup({
|
||||
format_after_save = {
|
||||
lsp_fallback = false,
|
||||
async = false,
|
||||
timeout_ms = 500,
|
||||
},
|
||||
formatters_by_ft = {
|
||||
awk = { "awk" },
|
||||
bash = { "shellcheck" },
|
||||
c = { "clang-format" },
|
||||
cpp = { "clang-format" },
|
||||
css = { "prettierd", "prettier", stop_after_first = true },
|
||||
gdscript = { "gdformat" },
|
||||
haskell = { "ormolu" },
|
||||
html = { "prettierd", "prettier", stop_after_first = true },
|
||||
javascript = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },
|
||||
javascriptreact = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },
|
||||
json = { "prettierd", "prettier", stop_after_first = true },
|
||||
jsonc = { "prettierd", "prettier", stop_after_first = true },
|
||||
lua = { "stylua" }, -- configured in stylua.toml
|
||||
markdown = { "prettierd", "prettier", stop_after_first = true },
|
||||
nix = { "nixfmt" },
|
||||
python = { "isort", "black" },
|
||||
rust = { "rustfmt", lsp_fallback = "fallback" },
|
||||
svelte = { "eslint_d", "prettierd", "prettier", stop_after_first = true },
|
||||
typescript = { "eslint_d", "prettierd", "prettier", stop_after_first = true },
|
||||
typescriptreact = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },
|
||||
-- yaml = { "prettierd", "prettier", stop_after_first = true },
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,7 @@
|
||||
require("eyeliner").setup({
|
||||
highlight_on_key = true,
|
||||
dim = true,
|
||||
})
|
||||
|
||||
vim.api.nvim_set_hl(0, "EyelinerPrimary", { bold = true, underline = true })
|
||||
vim.api.nvim_set_hl(0, "EyelinerSecondary", { underline = true })
|
||||
@@ -0,0 +1 @@
|
||||
require("fidget").setup()
|
||||
@@ -0,0 +1,16 @@
|
||||
local fzf = require("fzf-lua")
|
||||
|
||||
fzf.setup({ "max-perf" })
|
||||
|
||||
vim.keymap.set("n", "<leader>f<leader>", fzf.builtin) -- Help
|
||||
vim.keymap.set("n", "<leader>fc", fzf.commands)
|
||||
vim.keymap.set("n", "<leader>ff", fzf.files)
|
||||
vim.keymap.set("n", "<leader>fg", fzf.live_grep_native)
|
||||
vim.keymap.set("n", "<leader>fb", fzf.buffers)
|
||||
vim.keymap.set("n", "<leader>fd", fzf.diagnostics_workspace)
|
||||
vim.keymap.set("n", "<leader>fhe", fzf.help_tags)
|
||||
vim.keymap.set("n", "<leader>fhi", fzf.search_history)
|
||||
vim.keymap.set("n", "<leader>fma", fzf.marks)
|
||||
vim.keymap.set("n", "<leader>fmp", fzf.man_pages)
|
||||
|
||||
vim.keymap.set("i", "<c-f>", fzf.complete_path)
|
||||
@@ -0,0 +1,12 @@
|
||||
local gitsigns = require("gitsigns")
|
||||
|
||||
gitsigns.setup({
|
||||
current_line_blame_formatter = "<author>, <author_time:%R> - <summary>",
|
||||
-- linehl = true,
|
||||
current_line_blame_opts = {
|
||||
delay = 0,
|
||||
virt_text_pos = "right_align",
|
||||
},
|
||||
})
|
||||
|
||||
vim.api.nvim_create_user_command("Blame", gitsigns.toggle_current_line_blame, { nargs = "?" })
|
||||
@@ -0,0 +1,35 @@
|
||||
local hydra_repl = "hydra-repl"
|
||||
|
||||
if not vim.fn.executable(hydra_repl) then
|
||||
return
|
||||
end
|
||||
|
||||
local function send(lines)
|
||||
vim.system({ hydra_repl, table.concat(lines, "\n") })
|
||||
end
|
||||
|
||||
local function get_paragraph(buf)
|
||||
local start_ = vim.fn.search("^$", "bnW")
|
||||
local end_ = vim.fn.search("^$", "nW") - 1
|
||||
if end_ < vim.api.nvim_win_get_cursor(0)[1] then
|
||||
end_ = vim.api.nvim_buf_line_count(buf)
|
||||
end
|
||||
return vim.api.nvim_buf_get_lines(buf, start_, end_, false)
|
||||
end
|
||||
|
||||
local function get_selection(buf)
|
||||
return vim.api.nvim_buf_get_lines(buf, vim.fn.line("'<") - 1, vim.fn.line("'>"), false)
|
||||
end
|
||||
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = "javascript",
|
||||
callback = function(e)
|
||||
if vim.fn.fnamemodify(vim.api.nvim_buf_get_name(e.buf), ":e") ~= "hydra" then
|
||||
return
|
||||
end
|
||||
|
||||
local buf = e.buf
|
||||
vim.keymap.set("n", "<CR>", function() send(get_paragraph(buf)) end, { buffer = buf, desc = "hydra: send block" })
|
||||
vim.keymap.set("v", "<CR>", function() send(get_selection(buf)) end, { buffer = buf, desc = "hydra: send selection" })
|
||||
end,
|
||||
})
|
||||
@@ -0,0 +1,12 @@
|
||||
if not vim.env.KITTY_WINDOW_ID then return end
|
||||
|
||||
require("image").setup({
|
||||
backend = "kitty",
|
||||
kitty_method = "normal",
|
||||
processor = "magick_cli",
|
||||
integrations = {
|
||||
markdown = {
|
||||
filetypes = { "markdown", "pandoc" },
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1 @@
|
||||
require("kitty-scrollback").setup()
|
||||
@@ -0,0 +1,7 @@
|
||||
require("lsp_lines").setup()
|
||||
|
||||
vim.diagnostic.config({
|
||||
virtual_text = false,
|
||||
})
|
||||
|
||||
vim.keymap.set("", "<leader>dd", require("lsp_lines").toggle, { desc = "Toggle lsp_lines" })
|
||||
@@ -0,0 +1,196 @@
|
||||
require("neodev").setup() -- should setup before lspconfig
|
||||
|
||||
local cmp_nvim_lsp = require("cmp_nvim_lsp")
|
||||
local capabilities = cmp_nvim_lsp.default_capabilities()
|
||||
|
||||
local servers = {
|
||||
bashls = {},
|
||||
eslint = {
|
||||
settings = {
|
||||
--Assuming prettier/prettierd will handle formatting, we don't need to see these errors
|
||||
rulesCustomizations = {
|
||||
{ rule = "prettier/prettier", severity = "off" },
|
||||
},
|
||||
format = false,
|
||||
},
|
||||
},
|
||||
emmet_language_server = {},
|
||||
gdscript = {},
|
||||
helm_ls = {
|
||||
filetypes = { "yaml", "helm", "yaml.helm-values" },
|
||||
},
|
||||
hls = { filetypes = { "haskell", "lhaskell", "cabal" } },
|
||||
html = {},
|
||||
jsonls = {
|
||||
settings = {
|
||||
json = {
|
||||
schemas = require("schemastore").json.schemas(),
|
||||
validate = { enable = true },
|
||||
},
|
||||
},
|
||||
},
|
||||
lua_ls = {
|
||||
on_init = function(client)
|
||||
if client.workspace_folders then
|
||||
local path = client.workspace_folders[1].name
|
||||
if
|
||||
path ~= vim.fn.stdpath("config")
|
||||
and (vim.uv.fs_stat(path .. "/.luarc.json") or vim.uv.fs_stat(path .. "/.luarc.jsonc"))
|
||||
then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
client.config.settings.Lua = vim.tbl_deep_extend("force", client.config.settings.Lua, {
|
||||
runtime = {
|
||||
version = "LuaJIT",
|
||||
path = {
|
||||
"lua/?.lua",
|
||||
"lua/?/init.lua",
|
||||
},
|
||||
},
|
||||
workspace = {
|
||||
checkThirdParty = false,
|
||||
library = {
|
||||
vim.env.VIMRUNTIME,
|
||||
},
|
||||
},
|
||||
})
|
||||
end,
|
||||
settings = {
|
||||
Lua = {},
|
||||
},
|
||||
},
|
||||
nixd = {
|
||||
settings = {
|
||||
nixd = {
|
||||
nixpkgs = {
|
||||
expr = "import <nixpkgs> { }",
|
||||
expr = 'import (builtins.getFlake ("git+file://" + toString ../../../../../.)).inputs.nixpkgs { }',
|
||||
},
|
||||
},
|
||||
options = {
|
||||
nixos = {
|
||||
expr = '(builtins.getFlake ("git+file://" + toString ../../../../../.)).nixosConfigurations."'
|
||||
.. vim.fn.hostname()
|
||||
.. '".options',
|
||||
},
|
||||
home_manager = {
|
||||
expr = '(builtins.getFlake ("git+file://" + toString ../../../../../.)).homeConfigurations."'
|
||||
.. vim.fn.expand("$USER")
|
||||
.. "@"
|
||||
.. vim.fn.hostname()
|
||||
.. '".options',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
openscad_ls = {},
|
||||
pyright = {},
|
||||
svelte = {
|
||||
plugin = {
|
||||
svelte = {
|
||||
defaultScriptLanguage = "ts",
|
||||
},
|
||||
},
|
||||
},
|
||||
tailwindcss = {},
|
||||
ts_ls = {},
|
||||
-- vtsls = {
|
||||
-- maxTsServerMemory = 16384,
|
||||
-- filetypes = {
|
||||
-- "javascript",
|
||||
-- "javascriptreact",
|
||||
-- "javascript.jsx",
|
||||
-- "typescript",
|
||||
-- "typescriptreact",
|
||||
-- "typescript.tsx",
|
||||
-- },
|
||||
-- settings = {
|
||||
-- complete_function_calls = true,
|
||||
-- vtsls = {
|
||||
-- enableMoveToFileCodeAction = true,
|
||||
-- autoUseWorkspaceTsdk = true,
|
||||
-- experimental = {
|
||||
-- completion = {
|
||||
-- enableServerSideFuzzyMatch = true,
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
-- typescript = {
|
||||
-- updateImportsOnFileMove = { enabled = "always" },
|
||||
-- suggest = {
|
||||
-- completeFunctionCalls = true,
|
||||
-- },
|
||||
-- inlayHints = {
|
||||
-- enumMemberValues = { enabled = true },
|
||||
-- functionLikeReturnTypes = { enabled = true },
|
||||
-- parameterNames = { enabled = "literals" },
|
||||
-- parameterTypes = { enabled = true },
|
||||
-- propertyDeclarationTypes = { enabled = true },
|
||||
-- variableTypes = { enabled = false },
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
yamlls = {
|
||||
settings = {
|
||||
yaml = {
|
||||
schemaStore = {
|
||||
-- You must disable built-in schemaStore support if you want to use
|
||||
-- this plugin and its advanced options like `ignore`.
|
||||
enable = false,
|
||||
-- Avoid TypeError: Cannot read properties of undefined (reading 'length')
|
||||
url = "",
|
||||
},
|
||||
schemas = require("schemastore").yaml.schemas(),
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for server, config in pairs(servers) do
|
||||
config.capabilities = capabilities
|
||||
vim.lsp.config(server, config)
|
||||
end
|
||||
|
||||
vim.lsp.enable(vim.tbl_keys(servers))
|
||||
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
callback = function(e)
|
||||
local opts = { buffer = e.bufnr }
|
||||
local set = vim.keymap.set
|
||||
local lsp_buf = vim.lsp.buf
|
||||
set("n", "gD", lsp_buf.declaration, opts)
|
||||
set("n", "gd", lsp_buf.definition, opts)
|
||||
set("n", "K", lsp_buf.hover, opts)
|
||||
set("n", "gi", lsp_buf.implementation, opts)
|
||||
set("n", "<C-k>", lsp_buf.signature_help, opts)
|
||||
set("n", "<space>wa", lsp_buf.add_workspace_folder, opts)
|
||||
set("n", "<space>wr", lsp_buf.remove_workspace_folder, opts)
|
||||
set("n", "<space>wl", function()
|
||||
print(vim.inspect(lsp_buf.list_workspace_folders()))
|
||||
end, opts)
|
||||
set("n", "<space>D", lsp_buf.type_definition, opts)
|
||||
set("n", "<space>rn", lsp_buf.rename, opts)
|
||||
set({ "n", "v" }, "<space>ca", lsp_buf.code_action, opts)
|
||||
set("n", "gr", lsp_buf.references, opts)
|
||||
|
||||
-- Taken from https://blog.viktomas.com/graph/neovim-lsp-rename-normal-mode-keymaps/
|
||||
set("n", "<leader>r", vim.lsp.buf.rename)
|
||||
-- function()
|
||||
-- -- Automatically switch to `cmdwin` for normal mode renaming
|
||||
-- -- (normally you would have to press <C-f> to open the `cmdwin`)
|
||||
-- vim.api.nvim_create_autocmd({ "CmdlineEnter" }, {
|
||||
-- callback = function()
|
||||
-- local key = vim.api.nvim_replace_termcodes("<C-f>", true, false, true)
|
||||
-- vim.api.nvim_feedkeys(key, "c", false)
|
||||
-- vim.api.nvim_feedkeys("0", "n", false)
|
||||
-- return true
|
||||
-- end,
|
||||
-- })
|
||||
-- vim.lsp.buf.rename()
|
||||
-- end, bufoptsWithDesc("Rename symbol")
|
||||
-- )
|
||||
end,
|
||||
})
|
||||
@@ -0,0 +1,13 @@
|
||||
local ls = require("luasnip")
|
||||
|
||||
ls.config.set_config({
|
||||
history = true,
|
||||
update_events = "TextChanged,TextChangedI",
|
||||
delete_check_events = "TextChanged",
|
||||
ext_prio_increase = 1,
|
||||
enable_autosnippets = true,
|
||||
store_selection_keys = "<Tab>",
|
||||
})
|
||||
|
||||
require("luasnip.loaders.from_lua").lazy_load({ paths = { "~/.config/nvim/snips" } })
|
||||
require("luasnip.loaders.from_vscode").lazy_load({ paths = { "~/.config/Code - Insiders/User/snippets" } })
|
||||
@@ -0,0 +1,5 @@
|
||||
vim.cmd([[
|
||||
" Paste clipboard images
|
||||
au FileType pandoc nmap <buffer><silent> <leader>v :call mdip#MarkdownClipboardImage()<CR>
|
||||
au FileType markdown nmap <buffer><silent> <leader>v :call mdip#MarkdownClipboardImage()<CR>
|
||||
]])
|
||||
@@ -0,0 +1,94 @@
|
||||
local cmp = require("cmp")
|
||||
local luasnip = require("luasnip")
|
||||
|
||||
-- TODO: Fix command mode completion (should behave similar to insert mode)
|
||||
|
||||
local c_j = cmp.mapping(function()
|
||||
if cmp.visible() then
|
||||
cmp.select_next_item()
|
||||
else
|
||||
cmp.complete()
|
||||
cmp.select_next_item()
|
||||
end
|
||||
end, { "i", "s" })
|
||||
|
||||
local c_k = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_prev_item()
|
||||
else
|
||||
-- NOTE: Keep <C-k> fallback for digraphs
|
||||
-- ```lua
|
||||
-- cmp.complete()
|
||||
-- cmp.select_prev_item()
|
||||
-- ```
|
||||
fallback()
|
||||
end
|
||||
end, { "i", "s" })
|
||||
|
||||
local c_h = cmp.mapping(function(fallback)
|
||||
if luasnip.jumpable(-1) then
|
||||
luasnip.jump(-1)
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, { "i", "s" })
|
||||
|
||||
local c_l = cmp.mapping(function(fallback)
|
||||
if cmp.visible() and cmp.get_active_entry() then
|
||||
cmp.confirm()
|
||||
elseif luasnip.expand_or_jumpable() then
|
||||
luasnip.expand_or_jump()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, { "i", "s" })
|
||||
|
||||
cmp.setup({
|
||||
completion = {
|
||||
autocomplete = false,
|
||||
},
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
luasnip.lsp_expand(args.body)
|
||||
end,
|
||||
},
|
||||
-- See `:h luasnip` for the commands
|
||||
-- Note: have not added choice note mappings yet
|
||||
mapping = cmp.mapping.preset.insert({
|
||||
["<C-j>"] = c_j,
|
||||
["<C-k>"] = c_k,
|
||||
["<C-h>"] = c_h,
|
||||
["<C-l>"] = c_l,
|
||||
["<CR>"] = c_l,
|
||||
}),
|
||||
sources = {
|
||||
{ name = "zk" },
|
||||
{ name = "nvim_lsp" },
|
||||
{ name = "luasnip", max_item_count = 16 },
|
||||
{ name = "path" },
|
||||
{ name = "buffer", max_item_count = 8 },
|
||||
},
|
||||
window = {
|
||||
completion = cmp.config.window.bordered({ border = { "┌", "─", "┐", "│", "┘", "─", "└", "│" } }),
|
||||
documentation = cmp.config.window.bordered({ border = { "┌", "─", "┐", "│", "┘", "─", "└", "│" } }),
|
||||
},
|
||||
formatting = {
|
||||
fields = {
|
||||
"abbr",
|
||||
"menu",
|
||||
"kind",
|
||||
},
|
||||
format = function(entry, item)
|
||||
-- Rename kind to shorthand
|
||||
item.menu = ({
|
||||
nvim_lsp = "[lsp]",
|
||||
luasnip = "[snip]",
|
||||
path = "[path]",
|
||||
buffer = "[buf]",
|
||||
})[entry.source.name]
|
||||
|
||||
return item
|
||||
end,
|
||||
expandable_indicator = true,
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1 @@
|
||||
require("dbee").setup()
|
||||
@@ -0,0 +1 @@
|
||||
require("nvim-highlight-colors").setup({})
|
||||
@@ -0,0 +1,35 @@
|
||||
vim.env.ESLINT_D_PPID = vim.fn.getpid()
|
||||
|
||||
local eslint_linter = "eslint_d"
|
||||
|
||||
require("lint").linters_by_ft = {
|
||||
bash = { "shellcheck" },
|
||||
c = { "clangtidy", "flawfinder" },
|
||||
cmake = { "cmakelint" },
|
||||
cpp = { "clangtidy", "flawfinder" }, -- "cpplint", "cppcheck", "flawfinder"
|
||||
css = { "stylelint" },
|
||||
dockerfile = { "hadolint" },
|
||||
editorconfig = { "editorconfig-checker" },
|
||||
haskell = { "hlint" },
|
||||
-- html = { "htmlhint" },
|
||||
-- javascript = { eslint_linter },
|
||||
-- javascriptreact = { eslint_linter },
|
||||
gdscript = { "gdlint" },
|
||||
latex = { "chktex" },
|
||||
-- lua = { "luacheck", "selene" },
|
||||
make = { "checkmake" },
|
||||
-- pandoc = { "proselint", "woke" },
|
||||
-- python = { "pylint" },
|
||||
sh = { "shellcheck" },
|
||||
svelte = { eslint_linter },
|
||||
systemd = { "systemdlint" },
|
||||
-- typescript = { eslint_linter },
|
||||
-- typescriptreact = { eslint_linter },
|
||||
yaml = { "yamllint" },
|
||||
}
|
||||
|
||||
vim.api.nvim_create_autocmd({ "BufEnter", "BufWritePost", "InsertLeave" }, {
|
||||
callback = function()
|
||||
require("lint").try_lint()
|
||||
end,
|
||||
})
|
||||
@@ -0,0 +1,8 @@
|
||||
require("ts_context_commentstring").setup({ enable_autocmd = false })
|
||||
|
||||
-- https://github.com/JoosepAlviste/nvim-ts-context-commentstring/issues/109
|
||||
local get_option = vim.filetype.get_option
|
||||
vim.filetype.get_option = function(filetype, option)
|
||||
return option == "commentstring" and require("ts_context_commentstring.internal").calculate_commentstring()
|
||||
or get_option(filetype, option)
|
||||
end
|
||||
@@ -0,0 +1,5 @@
|
||||
vim.cmd([[
|
||||
nmap s <Nop>
|
||||
xmap s <Nop>
|
||||
let g:sandwich#recipes = deepcopy(g:sandwich#default_recipes)
|
||||
]])
|
||||
@@ -0,0 +1,4 @@
|
||||
require("sniprun").setup({
|
||||
selected_interpreters = { "JS_TS_deno" },
|
||||
repl_enable = { "JS_TS_deno" },
|
||||
})
|
||||
@@ -0,0 +1 @@
|
||||
require("tailwind-fold").setup({ ft = { "html", "svelte", "tsx" } })
|
||||
@@ -0,0 +1,125 @@
|
||||
local vim = vim
|
||||
local api = vim.api
|
||||
local keymap = vim.keymap
|
||||
local opt = vim.opt
|
||||
local treesitter = require("nvim-treesitter")
|
||||
local textobjects = require("nvim-treesitter-textobjects")
|
||||
local select = require("nvim-treesitter-textobjects.select")
|
||||
local treesj = require("treesj")
|
||||
|
||||
local is_nix = require("nixCatsUtils").isNixCats
|
||||
|
||||
if not is_nix then
|
||||
treesitter.install({
|
||||
"awk",
|
||||
"bash",
|
||||
"bibtex",
|
||||
"c",
|
||||
"cmake",
|
||||
"comment",
|
||||
"cpp",
|
||||
"css",
|
||||
"csv",
|
||||
"diff",
|
||||
"dockerfile",
|
||||
"dot",
|
||||
"gdscript",
|
||||
"gdshader",
|
||||
"git_config",
|
||||
"git_rebase",
|
||||
"gitattributes",
|
||||
"gitcommit",
|
||||
"gitignore",
|
||||
"glsl",
|
||||
"gnuplot",
|
||||
"go",
|
||||
"godot_resource",
|
||||
"gpg",
|
||||
"graphql",
|
||||
"haskell",
|
||||
"html",
|
||||
"java",
|
||||
"javascript",
|
||||
"jq",
|
||||
"jsdoc",
|
||||
"json",
|
||||
"jsonc",
|
||||
"latex",
|
||||
"lua",
|
||||
"luadoc",
|
||||
"make",
|
||||
"python",
|
||||
"query",
|
||||
"r",
|
||||
"racket",
|
||||
"readline",
|
||||
"regex",
|
||||
"requirements",
|
||||
"scheme",
|
||||
"scss",
|
||||
"sql",
|
||||
"ssh_config",
|
||||
"supercollider",
|
||||
"svelte",
|
||||
"tmux",
|
||||
"toml",
|
||||
"tsv",
|
||||
"tsx",
|
||||
"typescript",
|
||||
"udev",
|
||||
"vim",
|
||||
"vimdoc",
|
||||
"xml",
|
||||
"yaml",
|
||||
"zathurarc",
|
||||
})
|
||||
end
|
||||
|
||||
-- https://github.com/MeanderingProgrammer/treesitter-modules.nvim#implementing-yourself
|
||||
api.nvim_create_autocmd("FileType", {
|
||||
group = api.nvim_create_augroup("treesitter.setup", {}),
|
||||
callback = function(args)
|
||||
local buf = args.buf
|
||||
local filetype = args.match
|
||||
local language = vim.treesitter.language.get_lang(filetype) or filetype
|
||||
if not (language and vim.treesitter.language.add(language)) then
|
||||
return
|
||||
end
|
||||
-- fold
|
||||
vim.wo.foldmethod = "expr"
|
||||
vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()"
|
||||
-- highlight
|
||||
vim.treesitter.start(buf, language)
|
||||
-- indent
|
||||
vim.bo[buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
||||
vim.bo[buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
||||
end,
|
||||
})
|
||||
|
||||
opt.foldmethod = "expr"
|
||||
opt.foldexpr = "v:lua.vim.treesitter.foldexpr()"
|
||||
opt.foldenable = false
|
||||
|
||||
-- https://github.com/nvim-treesitter/nvim-treesitter-textobjects/blob/main/README.md#text-objects-select
|
||||
textobjects.setup({
|
||||
select = {
|
||||
lookahead = true,
|
||||
},
|
||||
})
|
||||
|
||||
local function select_textobject(capture)
|
||||
return function()
|
||||
select.select_textobject(capture, "textobjects")
|
||||
end
|
||||
end
|
||||
|
||||
keymap.set({ "x", "o" }, "if", select_textobject("@function.inner"), { desc = "Inner function" })
|
||||
keymap.set({ "x", "o" }, "af", select_textobject("@function.outer"), { desc = "A function" })
|
||||
keymap.set({ "x", "o" }, "ip", select_textobject("@parameter.inner"), { desc = "Inner parameter" })
|
||||
keymap.set({ "x", "o" }, "ap", select_textobject("@parameter.outer"), { desc = "A parameter" })
|
||||
|
||||
treesj.setup({
|
||||
use_default_keymaps = false,
|
||||
})
|
||||
|
||||
keymap.set("n", ";", treesj.toggle, { desc = "Toggle join/split (TreeSJ)" })
|
||||
@@ -0,0 +1 @@
|
||||
require("trouble").setup()
|
||||
@@ -0,0 +1,8 @@
|
||||
vim.cmd([[
|
||||
let g:javascript_plugin_jsdoc = 1 " jsdoc syntax highlighting
|
||||
let g:javascript_plugin_flow = 1 " flow syntax highlighting
|
||||
let g:javascript_conceal_function = "ƒ"
|
||||
let g:javascript_conceal_return = "⇖"
|
||||
let g:svelte_indent_script = 0
|
||||
let g:svelte_indent_style = 0
|
||||
]])
|
||||
@@ -0,0 +1,17 @@
|
||||
vim.cmd([[
|
||||
let g:pandoc#syntax#conceal#urls=1
|
||||
let g:pandoc#syntax#codeblocks#embeds#langs=[
|
||||
\ 'python',
|
||||
\ 'bash',
|
||||
\ 'javascript',
|
||||
\ 'typescript',
|
||||
\ 'html',
|
||||
\ 'css',
|
||||
\ 'scss',
|
||||
\ 'json',
|
||||
\ 'yaml'
|
||||
\ ]
|
||||
let g:pandoc#syntax#style#emphases=0 " Bug workaround
|
||||
let g:pandoc#syntax#conceal#cchar_overrides = { "atx": " ", "li": "·" }
|
||||
let g:pandoc#syntax#conceal#blacklist=[]
|
||||
]])
|
||||
@@ -0,0 +1,9 @@
|
||||
vim.cmd([[
|
||||
au FileType pandoc call pandoc#completion#Init()
|
||||
let g:pandoc#filetypes#pandoc_markdown=0
|
||||
let g:pandoc#spell#enabled=0
|
||||
let g:pandoc#spell#default_langs=['en_us', 'nl_be']
|
||||
let g:pandoc#formatting#mode='a'
|
||||
let g:pandoc#formatting#textwidth=90
|
||||
let g:pandoc#modules#disabled = ["formatting", "dashes", "yaml", "metadata"]
|
||||
]])
|
||||
@@ -0,0 +1,28 @@
|
||||
vim.g.tidal_default_config = { socket_name = "default", target_pane = "tidal:1.1" }
|
||||
vim.g.tidal_no_mappings = 1
|
||||
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = "tidal",
|
||||
callback = function(e)
|
||||
local buf = e.buf
|
||||
vim.keymap.set("n", "<leader>ep", "<Plug>TidalParagraphSend", { buffer = buf, desc = "Tidal: send paragraph" })
|
||||
vim.keymap.set("n", "<leader>ee", "<Plug>TidalLineSend", { buffer = buf, desc = "Tidal: send line" })
|
||||
vim.keymap.set("n", "<leader>h", ":TidalHush<cr>", { buffer = buf, desc = "Tidal: hush" })
|
||||
vim.api.nvim_buf_create_user_command(buf, "S", "TidalSilence <args>", { nargs = 1 })
|
||||
vim.api.nvim_buf_create_user_command(buf, "P", "TidalPlay <args>", { nargs = 1 })
|
||||
vim.api.nvim_buf_create_user_command(buf, "H", "TidalHush", { nargs = 0 })
|
||||
end,
|
||||
})
|
||||
|
||||
-- SuperCollider
|
||||
vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter", "BufNewFile", "BufRead" }, {
|
||||
pattern = { "*.sc", "*.scd" },
|
||||
callback = function()
|
||||
vim.bo.filetype = "supercollider"
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = "supercollider",
|
||||
command = "packadd scvim",
|
||||
})
|
||||
@@ -0,0 +1,6 @@
|
||||
vim.cmd([[
|
||||
let g:vimtex_view_method='zathura'
|
||||
let g:tex_flavor='latex'
|
||||
let g:tex_conceal='abdmgs'
|
||||
let g:vimtex_quickfix_mode=0
|
||||
]])
|
||||
@@ -0,0 +1,14 @@
|
||||
local function overrides()
|
||||
local colors = require("vscode.colors").get_colors()
|
||||
vim.api.nvim_set_hl(0, "NormalFloat", { bg = colors.vscLeftDark })
|
||||
vim.api.nvim_set_hl(0, "FloatBorder", { fg = colors.vscSplitDark, bg = colors.vscLeftDark })
|
||||
end
|
||||
|
||||
vim.api.nvim_create_autocmd("ColorScheme", {
|
||||
pattern = "vscode",
|
||||
callback = overrides,
|
||||
})
|
||||
|
||||
if vim.g.colors_name == "vscode" then
|
||||
overrides()
|
||||
end
|
||||
@@ -0,0 +1,117 @@
|
||||
require("zk.utils")
|
||||
|
||||
vim.cmd([[
|
||||
" Change local buffer to directory of current file after the plugin has loaded
|
||||
execute 'autocmd BufEnter' g:zk_path . '/*.md' 'silent lcd %:p:h'
|
||||
|
||||
" " Override wiki index mapping to also cd into the wiki
|
||||
nm <leader>ww <plug>(wiki-index)
|
||||
" nm <leader>l <plug>(wiki-next-link)
|
||||
" nm <leader>h <plug>(wiki-prev-link)
|
||||
" nm <leader>j <plug>(wiki-link-follow)
|
||||
" nm <leader>k <plug>(wiki-link-return)
|
||||
" nm <leader>s <plug>(wiki-link-follow-split)
|
||||
" nm <leader>v <plug>(wiki-link-follow-vsplit)
|
||||
|
||||
function! ZKContextualEcho()
|
||||
let l:name = expand('%:t')
|
||||
if l:name =~ '_' | echo 'hierarchical relation'
|
||||
elseif l:name =~ '--' | echo 'relation'
|
||||
elseif l:name =~ '<>' | echo 'dichotomy'
|
||||
elseif l:name =~ 'my-' | echo 'personal file'
|
||||
elseif l:name =~ 'project_' | echo 'project file'
|
||||
endif
|
||||
endfunction
|
||||
execute 'autocmd BufEnter' g:zk_path . '/*.md' 'call ZKContextualEcho()'
|
||||
|
||||
" Only load wiki.vim for zk directory
|
||||
let g:wiki_index_name='index'
|
||||
|
||||
" Links
|
||||
let g:wiki_link_extension=''
|
||||
" Do not automatically transform to link, use `<leader>wf` for this
|
||||
let g:wiki_link_target_type='md'
|
||||
|
||||
vmap <leader>wf <plug>(wiki-link-toggle-visual)
|
||||
|
||||
"
|
||||
" Links
|
||||
"
|
||||
|
||||
"
|
||||
" Options
|
||||
"
|
||||
|
||||
"
|
||||
" Events
|
||||
"
|
||||
|
||||
"
|
||||
" Mappings and commands
|
||||
"
|
||||
|
||||
"
|
||||
" Completion
|
||||
"
|
||||
|
||||
let g:wiki_completion_enabled=1
|
||||
let g:wiki_completion_case_sensitive=0
|
||||
|
||||
"
|
||||
" Tags
|
||||
"
|
||||
|
||||
"
|
||||
" Templates
|
||||
"
|
||||
|
||||
let g:wiki_templates = [
|
||||
\ { 'match_re': '^my-',
|
||||
\ 'source_filename': '.my.md'},
|
||||
\ { 'match_re': '^project[-_]',
|
||||
\ 'source_filename': '.project.md'},
|
||||
\ { 'match_re': '^blog[-_]',
|
||||
\ 'source_filename': '.blog.md'},
|
||||
\ { 'match_re': '^journal[-_]',
|
||||
\ 'source_filename': '.journal.md'},
|
||||
\ { 'match_func': { x -> v:true },
|
||||
\ 'source_filename': '.md'},
|
||||
\]
|
||||
|
||||
"
|
||||
" Advanced configuration
|
||||
"
|
||||
|
||||
let g:wiki_filetypes=['md']
|
||||
let g:wiki_root=g:zk_path
|
||||
let g:wiki_global_load=0
|
||||
let g:wiki_link_creation = {
|
||||
\ 'md': {
|
||||
\ 'link_type': 'md',
|
||||
\ 'url_extension': '',
|
||||
\ 'url_transform': { x -> substitute(tolower(x), '\s\+', '-', 'g') },
|
||||
\ },
|
||||
\ '_': {
|
||||
\ 'link_type': 'wiki',
|
||||
\ 'url_extension': '',
|
||||
\ },
|
||||
\}
|
||||
|
||||
" let g:wiki_link_default_schemes
|
||||
" let g:wiki_link_schemes
|
||||
let g:wiki_link_toggle_on_follow=0
|
||||
" let g:wiki_link_transforms
|
||||
" let g:wiki_mappings_use_defaults
|
||||
" let g:wiki_mappings_global
|
||||
" let g:wiki_mappings_local
|
||||
" let g:wiki_mappings_local_journal
|
||||
" ... tags
|
||||
" let g:wiki_template_month_names
|
||||
" let g:wiki_template_title_month =
|
||||
" let g:wiki_template_title_week
|
||||
" let g:wiki_ui_method
|
||||
let g:wiki_write_on_nav=1
|
||||
let g:wiki_zotero_root='~/.local/share/zotero'
|
||||
" ... mappings and commands
|
||||
" ...
|
||||
]])
|
||||
@@ -0,0 +1,7 @@
|
||||
vim.cmd([[
|
||||
syn match Todo /TODO/
|
||||
syn match Todo /FIXME/
|
||||
syn match Todo /FIX/
|
||||
syn match Todo /QUESTION/
|
||||
syn match Todo /NOTE/
|
||||
]])
|
||||
@@ -0,0 +1,19 @@
|
||||
vim.cmd([[
|
||||
" Override the pandoc-syntax highlighting colors for more subtle citations
|
||||
hi! link pandocPCite Comment
|
||||
hi! link pandocICite Comment
|
||||
hi! link pandocCiteKey Comment
|
||||
hi! link pandocCiteAnchor Comment
|
||||
hi! link pandocCiteLocator Comment
|
||||
|
||||
" Match cloze delimiters e.g. `{{c1::` and `}}`
|
||||
syn match ClozeDelimiter /{{c\d\+::/ conceal containedin=pandocUListItem,pandocListItem
|
||||
syn match ClozeDelimiter /}}/ conceal containedin=pandocUListItem,pandocListItem
|
||||
" Match text between cloze delimiters
|
||||
syn match Cloze /\({{c\d\+::\)\@<=\(\_[A-Za-z0-9$\ \\\-\*,_`()]*\)\(}}\)\@=/ containedin=pandocUListItem,pandocListItem
|
||||
|
||||
hi! link ClozeDelimiter Special
|
||||
hi! link Cloze Special
|
||||
]])
|
||||
|
||||
vim.cmd.runtime("syntax/_comment_keywords.lua")
|
||||
@@ -0,0 +1,7 @@
|
||||
vim.cmd([[
|
||||
syn keyword Operator \+ conceal cchar=¬
|
||||
syn keyword Operator , conceal cchar=∧
|
||||
syn keyword Operator ; conceal cchar=∨
|
||||
]])
|
||||
|
||||
vim.cmd.runtime("syntax/_comment_keywords.lua")
|
||||
@@ -0,0 +1,41 @@
|
||||
vim.cmd([[
|
||||
syntax keyword Statement define conceal cchar=≔
|
||||
|
||||
syn keyword Operator not conceal cchar=¬
|
||||
syn keyword Operator and conceal cchar=∧
|
||||
syn keyword Operator or conceal cchar=∨
|
||||
|
||||
syn keyword Operator mod conceal cchar=%
|
||||
syn keyword Operator exp conceal cchar=^
|
||||
syn keyword Operator sqrt conceal cchar=√
|
||||
|
||||
syn keyword Operator quote conceal cchar='
|
||||
|
||||
" Conceal greek letters
|
||||
syn keyword Operator alpha conceal cchar=α
|
||||
syn keyword Operator beta conceal cchar=β
|
||||
syn keyword Operator gamma conceal cchar=γ
|
||||
syn keyword Operator delta conceal cchar=δ
|
||||
syn keyword Operator epsilon conceal cchar=ε
|
||||
syn keyword Operator zeta conceal cchar=ζ
|
||||
syn keyword Operator eta conceal cchar=η
|
||||
syn keyword Operator theta conceal cchar=θ
|
||||
syn keyword Operator iota conceal cchar=ι
|
||||
syn keyword Operator kappa conceal cchar=κ
|
||||
syn keyword Operator lambda conceal cchar=λ
|
||||
syn keyword Operator mu conceal cchar=μ
|
||||
syn keyword Operator nu conceal cchar=ν
|
||||
syn keyword Operator xi conceal cchar=ξ
|
||||
syn keyword Operator omicron conceal cchar=ο
|
||||
syn keyword Operator pi conceal cchar=π
|
||||
syn keyword Operator rho conceal cchar=ρ
|
||||
syn keyword Operator sigma conceal cchar=σ
|
||||
syn keyword Operator tau conceal cchar=τ
|
||||
syn keyword Operator upsilon conceal cchar=υ
|
||||
syn keyword Operator phi conceal cchar=φ
|
||||
syn keyword Operator chi conceal cchar=χ
|
||||
syn keyword Operator psi conceal cchar=ψ
|
||||
syn keyword Operator omega conceal cchar=ω
|
||||
]])
|
||||
|
||||
vim.cmd.runtime("syntax/_comment_keywords.lua")
|
||||
Reference in New Issue
Block a user