Merge branch 'main' of ssh://codeberg.org/dnscio/nix-config

This commit is contained in:
Dennis 2025-05-30 09:57:22 +02:00
commit cccfc95a11
75 changed files with 395 additions and 128 deletions

View file

@ -0,0 +1,5 @@
setlocal expandtab
setlocal smartindent
setlocal tabstop=2
setlocal shiftwidth=2
setlocal conceallevel=2

View file

@ -0,0 +1,5 @@
setlocal expandtab
setlocal smartindent
setlocal tabstop=2
setlocal shiftwidth=2
setlocal conceallevel=2

View file

@ -0,0 +1,6 @@
setlocal expandtab
setlocal smartindent
setlocal tabstop=2
setlocal shiftwidth=2
setlocal conceallevel=2
setlocal nocompatible

View file

@ -0,0 +1,7 @@
au BufNewFile,BufRead Appfile set ft=ruby
au BufNewFile,BufRead Deliverfile set ft=ruby
au BufNewFile,BufRead Fastfile set ft=ruby
au BufNewFile,BufRead Gymfile set ft=ruby
au BufNewFile,BufRead Matchfile set ft=ruby
au BufNewFile,BufRead Snapfile set ft=ruby
au BufNewFile,BufRead Scanfile set ft=ruby

View file

@ -0,0 +1,17 @@
--[[
Config Author: Dennis Schoepf
Version: 1.0.0
]]
--
require("dnsc.lazy")
require("dnsc.utils")
require("dnsc.lsp")
require("dnsc.keymaps")

View file

@ -0,0 +1,34 @@
{
"barbar.nvim": { "branch": "master", "commit": "53b5a2f34b68875898f0531032fbf090e3952ad7" },
"blink.cmp": { "branch": "main", "commit": "4f38ce99a472932d5776337f08f7a8180f1f571a" },
"conform.nvim": { "branch": "master", "commit": "372fc521f8421b7830ea6db4d6ea3bae1c77548c" },
"flash.nvim": { "branch": "main", "commit": "3c942666f115e2811e959eabbdd361a025db8b63" },
"follow-md-links.nvim": { "branch": "main", "commit": "ce8735a15dc3e5fc5bb052ec51b849c03e57df53" },
"friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
"gitsigns.nvim": { "branch": "main", "commit": "43b0c856ae5f32a195d83f4a27fe21d63e6c966c" },
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
"lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
"lualine.nvim": { "branch": "master", "commit": "15884cee63a8c205334ab13ab1c891cd4d27101a" },
"mini.icons": { "branch": "main", "commit": "397ed3807e96b59709ef3292f0a3e253d5c1dc0a" },
"mini.pairs": { "branch": "main", "commit": "69864a2efb36c030877421634487fd90db1e4298" },
"nvim-surround": { "branch": "main", "commit": "0e62500b98f4513feaaf7425c135472457ea5b7d" },
"nvim-treesitter": { "branch": "master", "commit": "28d480e0624b259095e56f353ec911f9f2a0f404" },
"nvim-web-devicons": { "branch": "master", "commit": "2c2b4eafce6cdd0cb165036faa17396eff18f847" },
"oil.nvim": { "branch": "master", "commit": "685cdb4ffa74473d75a1b97451f8654ceeab0f4a" },
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
"render-markdown.nvim": { "branch": "main", "commit": "ff577b44bd3ab642acec0f134a7bf26b7278d137" },
"rose-pine": { "branch": "main", "commit": "491a0c77abc7ecb955c27a974091a5968232995f" },
"schemastore.nvim": { "branch": "main", "commit": "0cd099d94b1d61565ee1d44c4afad42f9a170ad1" },
"snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" },
"substitute.nvim": { "branch": "main", "commit": "9db749a880e3dd3b0eb57f698aa8f1e1630e1f25" },
"todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
"todo.txt-vim": { "branch": "master", "commit": "3bb5f9cf0d6c7ee91b476a97054c336104d2b6f5" },
"vim-cool": { "branch": "master", "commit": "9ea940c0d537e55de0de4c0298c04b976960fb12" },
"vim-dadbod": { "branch": "master", "commit": "fa31d0ffeebaa59cf97a81e7f92194cced54a13f" },
"vim-dadbod-completion": { "branch": "master", "commit": "a8dac0b3cf6132c80dc9b18bef36d4cf7a9e1fe6" },
"vim-dadbod-ssh": { "branch": "master", "commit": "9bce775ee76c3dd6d7508dcd9eb276b36133d710" },
"vim-dadbod-ui": { "branch": "master", "commit": "460432301a5cb280ea265ddfa15c9f3dcd1d26b7" },
"vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" },
"vimwiki": { "branch": "dev", "commit": "72792615e739d0eb54a9c8f7e0a46a6e2407c9e8" },
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" }
}

View file

@ -0,0 +1,160 @@
local lsp = vim.lsp
local function validate_bufnr(bufnr)
if nvim_eleven then
validate("bufnr", bufnr, "number")
end
return bufnr == 0 and api.nvim_get_current_buf() or bufnr
end
local function fix_all(opts)
opts = opts or {}
local eslint_lsp_client = vim.lsp.get_clients({ bufnr = opts.bufnr, name = "eslint" })[1]
if eslint_lsp_client == nil then
return
end
local request
if opts.sync then
request = function(bufnr, method, params)
eslint_lsp_client.request_sync(method, params, nil, bufnr)
end
else
request = function(bufnr, method, params)
eslint_lsp_client.request(method, params, nil, bufnr)
end
end
local bufnr = util.validate_bufnr(opts.bufnr or 0)
request(0, "workspace/executeCommand", {
command = "eslint.applyAllFixes",
arguments = {
{
uri = vim.uri_from_bufnr(bufnr),
version = lsp.util.buf_versions[bufnr],
},
},
})
end
return {
cmd = { "vscode-eslint-language-server", "--stdio" },
filetypes = {
"javascript",
"javascriptreact",
"javascript.jsx",
"typescript",
"typescriptreact",
"typescript.tsx",
"vue",
"svelte",
"astro",
},
root_markers = {
".eslintrc",
".eslintrc.js",
".eslintrc.cjs",
".eslintrc.yaml",
".eslintrc.yml",
".eslintrc.json",
"eslint.config.js",
"eslint.config.mjs",
"eslint.config.cjs",
"eslint.config.ts",
"eslint.config.mts",
"eslint.config.cts",
},
commands = {
EslintFixAll = {
function()
fix_all({ sync = true, bufnr = 0 })
end,
description = "Fix all eslint problems for this buffer",
},
},
settings = {
validate = "on",
packageManager = nil,
useESLintClass = false,
experimental = {
useFlatConfig = false,
},
codeActionOnSave = {
enable = true,
mode = "all",
},
format = true,
quiet = false,
onIgnoredFiles = "off",
rulesCustomizations = {},
run = "onType",
problems = {
shortenToSingleLine = false,
},
-- nodePath configures the directory in which the eslint server should start its node_modules resolution.
-- This path is relative to the workspace folder (root dir) of the server instance.
nodePath = "",
-- use the workspace folder location or the file location (if no workspace folder is open) as the working directory
workingDirectory = { mode = "location" },
codeAction = {
disableRuleComment = {
enable = true,
location = "separateLine",
},
showDocumentation = {
enable = true,
},
},
},
on_new_config = function(config, new_root_dir)
-- The "workspaceFolder" is a VSCode concept. It limits how far the
-- server will traverse the file system when locating the ESLint config
-- file (e.g., .eslintrc).
config.settings.workspaceFolder = {
uri = new_root_dir,
name = vim.fn.fnamemodify(new_root_dir, ":t"),
}
-- Support flat config
if
vim.fn.filereadable(new_root_dir .. "/eslint.config.js") == 1
or vim.fn.filereadable(new_root_dir .. "/eslint.config.mjs") == 1
or vim.fn.filereadable(new_root_dir .. "/eslint.config.cjs") == 1
or vim.fn.filereadable(new_root_dir .. "/eslint.config.ts") == 1
or vim.fn.filereadable(new_root_dir .. "/eslint.config.mts") == 1
or vim.fn.filereadable(new_root_dir .. "/eslint.config.cts") == 1
then
config.settings.experimental.useFlatConfig = true
end
-- Support Yarn2 (PnP) projects
local pnp_cjs = new_root_dir .. "/.pnp.cjs"
local pnp_js = new_root_dir .. "/.pnp.js"
if vim.loop.fs_stat(pnp_cjs) or vim.loop.fs_stat(pnp_js) then
config.cmd = vim.list_extend({ "yarn", "exec" }, config.cmd)
end
end,
handlers = {
["eslint/openDoc"] = function(_, result)
if result then
vim.ui.open(result.url)
end
return {}
end,
["eslint/confirmESLintExecution"] = function(_, result)
if not result then
return
end
return 4 -- approved
end,
["eslint/probeFailed"] = function()
vim.notify("[lspconfig] ESLint probe failed.", vim.log.levels.WARN)
return {}
end,
["eslint/noLibrary"] = function()
vim.notify("[lspconfig] Unable to find ESLint library.", vim.log.levels.WARN)
return {}
end,
},
}

View file

@ -0,0 +1,15 @@
return {
cmd = { "vscode-json-language-server", "--stdio" },
filetypes = { "json", "jsonc" },
init_options = {
provideFormatter = true,
},
root_markers = { ".git" },
single_file_support = true,
settings = {
json = {
schemas = require("schemastore").json.schemas(),
validate = { enable = true },
},
},
}

View file

@ -0,0 +1,46 @@
return {
cmd = { "lua-language-server" },
filetypes = { "lua" },
root_markers = {
".luarc.json",
".luarc.jsonc",
".luacheckrc",
".stylua.toml",
"stylua.toml",
"selene.toml",
"selene.yml",
".git",
},
single_file_support = true,
log_level = vim.lsp.protocol.MessageType.Warning,
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",
},
workspace = {
checkThirdParty = false,
library = {
vim.env.VIMRUNTIME,
},
},
})
end,
settings = {
Lua = {
diagnostics = {
globals = { "vim" },
},
},
},
}

View file

@ -0,0 +1,5 @@
return {
cmd = { "nil" },
filetypes = { "nix" },
root_markers = { "flake.nix", ".git" },
}

View file

@ -0,0 +1,20 @@
return {
cmd = { "typescript-language-server", "--stdio" },
filetypes = {
"javascript",
"javascriptreact",
"javascript.jsx",
"typescript",
"typescriptreact",
"typescript.tsx",
},
root_markers = { "tsconfig.json", "package.json", ".git" },
init_options = {
hostInfo = "neovim",
preferences = {
importModuleSpecifierPreference = "relative",
importModuleSpecifierEnding = "minimal",
},
},
single_file_support = true,
}

View file

@ -0,0 +1,10 @@
local opts = { noremap = true, silent = true, expr = true }
-- Non-leader general keybindings
vim.keymap.set("n", "k", "v:count == 0 ? 'gk' : 'k'", opts)
vim.keymap.set("n", "j", "v:count == 0 ? 'gj' : 'j'", opts)
vim.keymap.set("n", "<C-d>", "<C-d>zz", { desc = "Move down" })
vim.keymap.set("n", "<C-u>", "<C-u>zz", { desc = "Move up" })
vim.keymap.set("n", "n", "nzzzv", { desc = "Move to next occurence" })
vim.keymap.set("n", "N", "Nzzzv", { desc = "Move to next occurence" })
vim.keymap.set("n", "<C-f>", "<Nop>")

View file

@ -0,0 +1,76 @@
-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
vim.g.mapleader = " "
vim.g.maplocalleader = " "
local options = {
backup = false, -- creates a backup file
clipboard = "unnamedplus", -- allows neovim to access the system clipboard
cmdheight = 1, -- more space in the neovim command line for displaying messages
completeopt = { "menu", "menuone", "noselect" }, -- mostly just for cmp
conceallevel = 0, -- so that `` is visible in markdown files
fileencoding = "utf-8", -- the encoding written to a file
hlsearch = true, -- highlight all matches on previous search pattern
ignorecase = true, -- ignore case in search patterns
mouse = "a", -- allow the mouse to be used in neovim
pumheight = 10, -- pop up menu height
showmode = false, -- we don't need to see things like -- INSERT -- anymore
smartindent = true,
breakindent = true,
showtabline = 0, -- always show tabs
smartcase = true, -- smart case
splitbelow = true, -- force all horizontal splits to go below current window
splitright = true, -- force all vertical splits to go to the right of current window
swapfile = false, -- creates a swapfile
termguicolors = true, -- set term gui colors (most terminals support this)
timeoutlen = 600, -- time to wait for a mapped sequence to complete (in milliseconds)
undofile = true, -- enable persistent undo
updatetime = 230, -- faster completion (4000ms default)
writebackup = false, -- if a file is being edited by another program (or was written to file while editing with another program), it is not allowed to be edited
expandtab = true, -- convert tabs to spaces
shiftwidth = 2, -- the number of spaces inserted for each indentation
tabstop = 2, -- insert 2 spaces for a tab
cursorline = true, -- highlight the current line
number = true, -- set numbered lines
relativenumber = true, -- set relative numbered lines
numberwidth = 4, -- set number column width to 2 {default 4}
signcolumn = "yes", -- always show the sign column, otherwise it would shift the text each time
linebreak = true,
breakat = " ^I!@*-+;:,./?",
scrolloff = 6, -- is one of my fav
sidescrolloff = 4,
winbar = nil,
}
vim.opt.shortmess:append("c")
for k, v in pairs(options) do
vim.opt[k] = v
end
-- Setup lazy.nvim
require("lazy").setup({
spec = {
{ import = "plugins" },
},
-- Configure any other settings here. See the documentation for more details.
-- colorscheme that will be used when installing plugins.
install = { colorscheme = { "rose-pine" } },
-- automatically check for plugin updates
checker = { enabled = false },
})

View file

@ -0,0 +1,30 @@
vim.lsp.enable("ts_ls")
vim.lsp.enable("lua_ls")
vim.lsp.enable("eslint")
vim.lsp.enable("jsonls")
vim.lsp.enable("nil_ls")
vim.diagnostic.config({
virtual_text = false,
signs = true,
underline = true,
update_in_insert = false,
severity_sort = false,
})
vim.api.nvim_create_autocmd("LspAttach", {
callback = function(args)
vim.keymap.set(
"n",
"<leader>e",
"<cmd>lua vim.diagnostic.open_float()<cr>",
{ buffer = args.buf, desc = "Show diagnostics on current line" }
)
vim.keymap.set(
"n",
"<leader>ca",
"<cmd>lua vim.lsp.buf.code_action()<cr>",
{ buffer = args.buf, desc = "Code actions for current line" }
)
end,
})

View file

@ -0,0 +1,133 @@
-- Highlight on yank
local highlight_group = vim.api.nvim_create_augroup("YankHighlight", { clear = true })
vim.api.nvim_create_autocmd("TextYankPost", {
callback = function()
vim.highlight.on_yank()
end,
group = highlight_group,
pattern = "*",
})
function tbl_flatten(t)
--- @diagnostic disable-next-line:deprecated
return nvim_eleven and vim.iter(t):flatten(math.huge):totable() or vim.tbl_flatten(t)
end
function search_ancestors(startpath, func)
if nvim_eleven then
validate('func', func, 'function')
end
if func(startpath) then
return startpath
end
local guard = 100
for path in vim.fs.parents(startpath) do
-- Prevent infinite recursion if our algorithm breaks
guard = guard - 1
if guard == 0 then
return
end
if func(path) then
return path
end
end
end
local function escape_wildcards(path)
return path:gsub('([%[%]%?%*])', '\\%1')
end
function strip_archive_subpath(path)
-- Matches regex from zip.vim / tar.vim
path = vim.fn.substitute(path, 'zipfile://\\(.\\{-}\\)::[^\\\\].*$', '\\1', '')
path = vim.fn.substitute(path, 'tarfile:\\(.\\{-}\\)::.*$', '\\1', '')
return path
end
local function root_pattern(...)
local patterns = tbl_flatten({ ... })
return function(startpath)
startpath = strip_archive_subpath(startpath)
for _, pattern in ipairs(patterns) do
local match = search_ancestors(startpath, function(path)
for _, p in ipairs(vim.fn.glob(table.concat({ escape_wildcards(path), pattern }, "/"), true, true)) do
if vim.loop.fs_stat(p) then
return path
end
end
end)
if match ~= nil then
return match
end
end
end
end
local function filter(arr, fn)
if type(arr) ~= "table" then
return arr
end
local filtered = {}
for k, v in pairs(arr) do
if fn(v, k, arr) then
table.insert(filtered, v)
end
end
return filtered
end
local function filterReactDTS(value)
-- Depending on typescript version either uri or targetUri is returned
if value.uri then
return string.match(value.uri, "%.d.ts") == nil
elseif value.targetUri then
return string.match(value.targetUri, "%.d.ts") == nil
end
end
local project_types = {
["main.odin"] = "odin run .",
["package.json"] = "pnpm run dev",
["Makefile"] = "make",
}
local function find_project_type()
for marker, _ in pairs(project_types) do
if vim.fn.glob(marker) ~= "" then
return marker
end
end
return nil
end
local function compile_project()
local marker = find_project_type()
if not marker then
vim.notify("No recognized project type found", vim.log.levels.WARN)
return
end
local cmd = project_types[marker]
-- Create a new terminal buffer and run the command
vim.cmd("botright new") -- Create new window at bottom
vim.cmd("terminal " .. cmd)
-- Enter normal mode and hide the buffer number
vim.cmd("setlocal nonumber")
vim.cmd("setlocal norelativenumber")
vim.cmd("startinsert")
end
return {
compile_project = compile_project,
filter = filter,
filterReactDTS = filterReactDTS,
root_pattern = root_pattern
}

View file

@ -0,0 +1,18 @@
return {
"romgrk/barbar.nvim",
dependencies = {
"lewis6991/gitsigns.nvim", -- OPTIONAL: for git status
"nvim-tree/nvim-web-devicons", -- OPTIONAL: for file icons
},
init = function()
vim.g.barbar_auto_setup = false
end,
opts = {
animation = false,
auto_hide = false,
maximum_length = 35,
icons = { filetype = { enabled = false }, button = "", modified = { button = "m" } },
highlight_visible = false,
},
version = "^1.0.0", -- optional: only update when a new 1.x version is released
}

View file

@ -0,0 +1,47 @@
return {
"saghen/blink.cmp",
dependencies = { "rafamadriz/friendly-snippets" },
version = "1.*",
---@module 'blink.cmp'
---@type blink.cmp.Config
opts = {
keymap = {
preset = "enter",
["<Tab>"] = { "select_next", "fallback" },
["<S-Tab>"] = { "select_prev", "fallback" },
["<C-k>"] = { "show_documentation", "hide_documentation" },
},
appearance = {
nerd_font_variant = "mono",
},
completion = {
documentation = { auto_show = false },
list = {
selection = {
preselect = false,
auto_insert = true,
},
},
},
signature = {
enabled = true,
},
sources = {
default = { "lazydev", "lsp", "path", "snippets", "buffer" },
per_filetype = { sql = { "dadbod" } },
providers = {
dadbod = { module = "vim_dadbod_completion.blink" },
lazydev = {
name = "LazyDev",
module = "lazydev.integrations.blink",
score_offset = 100,
},
},
},
fuzzy = { implementation = "prefer_rust_with_warning" },
cmdline = {
completion = { menu = { auto_show = true } },
},
},
opts_extend = { "sources.default" },
}

View file

@ -0,0 +1,22 @@
return {
"stevearc/conform.nvim",
opts = {
formatters_by_ft = {
typescriptreact = { "prettierd" },
typescript = { "prettierd" },
javascript = { "prettierd" },
javascriptreact = { "prettierd" },
html = { "prettierd" },
css = { "prettierd" },
yaml = { "prettierd" },
markdown = { "prettierd" },
json = { "prettierd" },
lua = { "stylua" },
},
format_on_save = {
-- These options will be passed to conform.format()
timeout_ms = 300,
lsp_format = "fallback",
},
},
}

View file

@ -0,0 +1,9 @@
return {
"folke/flash.nvim",
event = "VeryLazy",
opts = {},
-- stylua: ignore
keys = {
{ "<CR>", mode = { "n", "x", "o" }, function() require("flash").jump() end, desc = "Flash" },
},
}

View file

@ -0,0 +1,4 @@
return {
"romainl/vim-cool",
"tpope/vim-sleuth",
}

View file

@ -0,0 +1,7 @@
return {
{
"folke/lazydev.nvim",
ft = "lua", -- only load on lua files
opts = {},
},
}

View file

@ -0,0 +1,20 @@
return {
"nvim-lualine/lualine.nvim",
opts = {
options = {
icons_enabled = false,
-- globalstatus = true
component_separators = { left = "|", right = "|" },
section_separators = { left = "", right = "" },
},
winbar = {},
sections = {
lualine_a = { "mode" },
lualine_b = { "branch" },
lualine_c = { "diff" },
lualine_x = { "diagnostics" },
lualine_y = { "location" },
lualine_z = { "filetype" },
},
},
}

View file

@ -0,0 +1,13 @@
return {
"MeanderingProgrammer/render-markdown.nvim",
dependencies = { "nvim-treesitter/nvim-treesitter", "echasnovski/mini.icons", "jghauser/follow-md-links.nvim" },
opts = {
file_types = { "markdown", "vimwiki" },
completions = { lsp = { enabled = true } },
heading = {
sign = false,
border = false,
position = "inline",
},
},
}

View file

@ -0,0 +1,4 @@
return {
"echasnovski/mini.pairs",
opts = {},
}

View file

@ -0,0 +1,8 @@
return {
"vimwiki/vimwiki",
dependencies = { "freitass/todo.txt-vim" },
init = function()
vim.g.vimwiki_list = { { path = "~/notes", syntax = "markdown", ext = "md" } }
vim.g.vimwiki_global_ext = 0
end,
}

View file

@ -0,0 +1,6 @@
return {
"kylechui/nvim-surround",
version = "*", -- Use for stability; omit to use `main` branch for the latest features
event = "VeryLazy",
opts = {},
}

View file

@ -0,0 +1,24 @@
return {
"stevearc/oil.nvim",
opts = {
keymaps = {
["q"] = "actions.close",
},
columns = {
"icon",
"permissions",
"size",
-- "mtime",
},
float = {
padding = 4,
border = "rounded",
preview_split = "auto",
},
},
-- stylua: ignore
keys = {
{ "<leader>n", "<cmd>Oil --float<cr>", desc = "Open file browser", mode = "n" },
}
,
}

View file

@ -0,0 +1,3 @@
return {
'b0o/schemastore.nvim'
}

View file

@ -0,0 +1,180 @@
---@module 'snacks'
local filter_lsp_definitions = function(item)
if item.file:match("/react/ts5.0/") or item.file:match("react.d.ts") then
return false
end
return true
end
return {
"folke/snacks.nvim",
priority = 1000,
lazy = false,
opts = {
bigfile = { enabled = true },
git = { enabled = true },
gitbrowse = {
enabled = true,
what = "commit",
},
indent = { enabled = true },
input = { enabled = true },
lazygit = {
enabled = true,
configure = true,
},
notifier = { enabled = true },
picker = {
enabled = true,
prompt = "λ ",
},
statuscolumn = { enabled = true },
zen = { enabled = true },
},
keys = {
-- Git
{
"<leader>gg",
function()
Snacks.lazygit()
end,
desc = "Lazygit",
},
{
"<leader>gb",
function()
Snacks.git.blame_line()
end,
desc = "Show git blame for current line",
},
{
"<leader>gl",
function()
Snacks.gitbrowse()
end,
desc = "Open link to line at git remote",
},
-- Zen Mode
{
"<leader>z",
function()
Snacks.zen()
end,
desc = "Toggle Zen Mode",
},
-- Picker
{
"<leader>.",
function()
Snacks.picker.files()
end,
desc = "",
},
{
"<leader><leader>",
function()
Snacks.picker.git_files()
end,
desc = "Git files",
},
-- Find
{
"<leader>fr",
function()
Snacks.picker.recent()
end,
desc = "Recent",
},
{
"<leader>fp",
function()
Snacks.picker.projects()
end,
desc = "Projects",
},
-- Search
{
"<leader>ss",
function()
Snacks.picker.grep()
end,
desc = "Grep",
},
{
"<leader>sw",
function()
Snacks.picker.grep_word()
end,
desc = "Visual selection or word",
mode = { "n", "x" },
},
{
"<leader>su",
function()
Snacks.picker.undo()
end,
desc = "Undo History",
},
-- Diagnostics
{
"<leader>td",
function()
Snacks.picker.diagnostics_buffer()
end,
desc = "Buffer Diagnostics",
},
{
"<leader>ta",
function()
Snacks.picker.diagnostics()
end,
desc = "Diagnostics",
},
-- LSP
{
"gd",
function()
Snacks.picker.lsp_definitions({ filter = { filter = filter_lsp_definitions } })
end,
desc = "Goto Definition",
},
{
"gD",
function()
Snacks.picker.lsp_declarations()
end,
desc = "Goto Declaration",
},
{
"grr",
function()
Snacks.picker.lsp_references()
end,
nowait = true,
desc = "References",
},
{
"gI",
function()
Snacks.picker.lsp_implementations()
end,
desc = "Goto Implementation",
},
{
"gy",
function()
Snacks.picker.lsp_type_definitions()
end,
desc = "Goto T[y]pe Definition",
},
{
"<leader>on",
function()
Snacks.notifier.show_history()
end,
desc = "Open notification history",
},
},
}

View file

@ -0,0 +1,13 @@
return {
"gbprod/substitute.nvim",
config = function()
local sub = require("substitute")
sub.setup()
vim.keymap.set("n", "s", sub.operator, { noremap = true })
vim.keymap.set("n", "ss", sub.line, { noremap = true })
vim.keymap.set("n", "S", sub.eol, { noremap = true })
vim.keymap.set("x", "s", sub.visual, { noremap = true })
end,
}

View file

@ -0,0 +1,58 @@
return {
{
"rose-pine/neovim",
name = "rose-pine",
config = function()
require("rose-pine").setup({
variant = "auto", -- auto, main, moon, or dawn
dark_variant = "main", -- main, moon, or dawn
dim_inactive_windows = false,
extend_background_behind_borders = true,
enable = {
terminal = true,
migrations = true,
},
styles = {
bold = true,
italic = false,
transparency = true,
},
groups = {
border = "muted",
link = "iris",
panel = "surface",
error = "love",
hint = "iris",
info = "foam",
note = "pine",
todo = "rose",
warn = "gold",
git_add = "foam",
git_change = "rose",
git_delete = "love",
git_dirty = "rose",
git_ignore = "muted",
git_merge = "iris",
git_rename = "pine",
git_stage = "iris",
git_text = "rose",
git_untracked = "subtle",
h1 = "iris",
h2 = "foam",
h3 = "rose",
h4 = "gold",
h5 = "pine",
h6 = "foam",
},
})
vim.cmd("colorscheme rose-pine")
end,
},
}

View file

@ -0,0 +1,7 @@
return {
"folke/todo-comments.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
opts = {
signs = false,
},
}

View file

@ -0,0 +1,100 @@
return {
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate",
config = function()
local configs = require("nvim-treesitter.configs")
configs.setup({
ensure_installed = {
"angular",
"bash",
"c",
"css",
"diff",
"html",
"javascript",
"jsdoc",
"json",
"jsonc",
"lua",
"luadoc",
"luap",
"markdown",
"markdown_inline",
"odin",
"printf",
"python",
"query",
"regex",
"toml",
"tsx",
"typescript",
"vim",
"vimdoc",
"xml",
"yaml",
},
auto_install = true,
sync_install = false,
ignore_install = {},
modules = {},
highlight = { enable = true },
indent = { enable = true },
incremental_selection = {
enable = true,
keymaps = {
init_selection = "<c-space>",
node_incremental = "<c-space>",
scope_incremental = "<c-s>",
node_decremental = "<M-space>",
},
},
textobjects = {
select = {
enable = true,
lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim
keymaps = {
-- You can use the capture groups defined in textobjects.scm
["aa"] = "@parameter.outer",
["ia"] = "@parameter.inner",
["af"] = "@function.outer",
["if"] = "@function.inner",
["ac"] = "@class.outer",
["ic"] = "@class.inner",
},
},
move = {
enable = true,
set_jumps = true, -- whether to set jumps in the jumplist
goto_next_start = {
["]m"] = "@function.outer",
["]]"] = "@class.outer",
},
goto_next_end = {
["]M"] = "@function.outer",
["]["] = "@class.outer",
},
goto_previous_start = {
["[m"] = "@function.outer",
["[["] = "@class.outer",
},
goto_previous_end = {
["[M"] = "@function.outer",
["[]"] = "@class.outer",
},
},
swap = {
enable = true,
swap_next = {
["<leader>a"] = "@parameter.inner",
},
swap_previous = {
["<leader>A"] = "@parameter.inner",
},
},
},
})
vim.treesitter.language.register("markdown", "vimwiki")
end,
}

View file

@ -0,0 +1,20 @@
return {
"kristijanhusak/vim-dadbod-ui",
dependencies = {
"pbogut/vim-dadbod-ssh",
{ "tpope/vim-dadbod", lazy = true },
{ "kristijanhusak/vim-dadbod-completion", ft = { "sql", "mysql", "plsql" }, lazy = true },
},
cmd = {
"DBUI",
"DBUIToggle",
"DBUIAddConnection",
"DBUIFindBuffer",
},
init = function()
vim.g.db_ui_use_nerd_fonts = 1
vim.g.dbs = {
{ name = "freed_dev", url = "sqlite:./freed.db" },
}
end,
}

View file

@ -0,0 +1,171 @@
local utils = require("dnsc.utils")
return {
"folke/which-key.nvim",
event = "VeryLazy",
config = function()
local wk = require("which-key")
---@class wk.Opts
local opts = {
icons = { mappings = false },
win = { border = "rounded" },
}
wk.setup(opts)
wk.add({
{ "<leader>o", group = "+open", mode = "n" },
{ "<leader>ot", ":e ~/notes/todo.txt<cr>", desc = "Open tasks", mode = "n" },
{ "<leader>od", ":80 vsplit | :VimwikiMakeDiaryNote<cr>", desc = "Open daily note", mode = "n" },
{ "<leader>b", group = "+buffer", mode = "n" },
{ "<leader>b,", "<Cmd>BufferMovePrevious<CR>", desc = "Move buffer backwards", mode = "n" },
{
"<leader>b.",
"<Cmd>BufferMoveNext<CR>",
desc = "Move buffer forward",
mode = "n",
},
{
"<leader>bD",
"<cmd>BufferCloseAllButCurrent<cr>",
desc = "Delete all buffers but current",
mode = "n",
},
{
"<leader>bd",
"<Cmd>BufferClose<CR>",
desc = "Delete current buffer",
mode = "n",
},
{
"<leader>bh",
"<Cmd>BufferPrevious<CR>",
desc = "Go to previous buffer",
mode = "n",
},
{
"<leader>bl",
"<Cmd>BufferNext<CR>",
desc = "Go to next buffer",
mode = "n",
},
{ "<leader>bp", "<cmd>BufferPick<cr>", desc = "Pick a buffer", mode = "n" },
{
"<leader>bx",
"<cmd>BufferCloseAllButPinned<cr>",
desc = "Delete all buffers",
mode = "n",
},
{ "<leader>c", group = "+code", mode = "n" },
{
"<leader>cr",
function()
utils.compile_project()
end,
desc = "Compile project",
mode = "n",
},
{ "<leader>f", group = "+file", mode = "n" },
{
"<leader>fn",
"<cmd>enew<cr>",
desc = "Create a new file",
mode = "n",
},
{
"<leader>fs",
"<cmd>w<cr>",
desc = "Save currently opened file",
mode = "n",
},
{ "<leader>qq", "<cmd>qa!<cr>", desc = "Leave neovim", mode = "n" },
{ "<leader>s", group = "+search", mode = "n" },
{ "<leader>g", group = "+git", mode = "n" },
{ "<leader>t", group = "+diagnostics", mode = "n" },
{ "<leader>ta", "<cmd>TodoQuickFix<cr>", desc = "Show all todo comments", mode = "n" },
{ "<leader>w", group = "+window", mode = "n" },
{
"<leader>w+",
":vertical resize +4<CR>",
desc = "Increase window size",
mode = "n",
},
{
"<leader>w-",
":vertical resize -4<CR>",
desc = "Decrease window size",
mode = "n",
},
{
"<leader>wx",
"<C-W>q",
desc = "Close active window",
mode = "n",
},
{
"<leader>wx",
":bd<CR>",
desc = "Kill active window and buffer",
mode = "n",
},
{
"<leader>wh",
"<C-W>h",
desc = "Move to window on left",
mode = "n",
},
{
"<leader>wj",
"<C-W>j",
desc = "Move to window on bottom",
mode = "n",
},
{
"<leader>wk",
"<C-W>k",
desc = "Move to window on top",
mode = "n",
},
{
"<leader>wl",
"<C-W>l",
desc = "Move to window on right",
mode = "n",
},
{
"<leader>ws",
"<cmd>sp<cr>",
desc = "Split windows horizontally",
mode = "n",
},
{
"<leader>wv",
"<cmd>vsp<cr>",
desc = "Split windows vertically",
mode = "n",
},
{
"<leader>wd",
"<cmd>bd<cr>",
desc = "Delete buffer and window",
mode = "n",
},
{ "<leader>x", group = "+config", mode = "n" },
{
"<leader>xn",
"<cmd>set number relativenumber<cr>",
desc = "Show relative numbers",
mode = "n",
},
{ "<leader>xr", "<cmd>source $MYVIMRC<cr>", desc = "Reload config", mode = "n" },
})
end,
}

View file

@ -0,0 +1,9 @@
column_width = 120
indent_type = "Spaces"
indent_width = 2
quote_style = "AutoPreferDouble"
call_parentheses = "Always"
collapse_simple_statement = "Never"
[sort_requires]
enabled = false