feat(nix): nix and back again

I tried Nix, but it had too many downsides so I removed it.

1. Didn't like that all files are immutable and simple config changes
need a complete rebuild.
2. Setting up a new Mac didn't work as smoothly as promised. Not worth
the effort.
3. It sucked a lot to always have to type in the password twice on each
darwin-rebuild
4. It solves problems I never had.
This commit is contained in:
Stefan Imhoff
2024-08-05 20:55:54 +02:00
parent 2d3988b7e6
commit a41290c297
285 changed files with 6965 additions and 2517 deletions

View File

@@ -0,0 +1,55 @@
-- Autocmds are automatically loaded on the VeryLazy event
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
-- Add any additional autocmds here
-- Reload tmux config on save
vim.api.nvim_create_autocmd("BufWritePost", {
pattern = { "*tmux.conf" },
command = "execute 'silent !tmux source <afile> --silent'",
})
-- Reload gitmux config on save
vim.api.nvim_create_autocmd({ "BufRead" }, {
pattern = { "gitmux.conf" },
callback = function()
vim.cmd([[set filetype=sh]])
end,
})
-- Restart yabai on config save
vim.api.nvim_create_autocmd("BufWritePost", {
pattern = { ".yabairc" },
command = "!yabai --restart-service",
})
-- Add specific settings for Markdown files
vim.api.nvim_create_autocmd({ "BufNewFile", "BufFilePre", "BufRead" }, {
pattern = { "*.mdx", "*.md" },
callback = function()
vim.cmd([[set wrap linebreak nolist]])
vim.cmd([[SoftWrapMode]])
end,
})
-- Evenly resize windows after resizing
vim.api.nvim_create_autocmd({ "VimResized" }, {
pattern = { "*" },
callback = function()
vim.cmd([[tabdo wincmd =]])
end,
})
-- Turn off paste mode when leaving insert mode
vim.api.nvim_create_autocmd("InsertLeave", {
pattern = { "*" },
command = "set nopaste",
})
-- Change conceallevel for JSON files
vim.api.nvim_create_autocmd("FileType", {
pattern = { "json", "jsonc" },
callback = function()
vim.wo.spell = false
vim.wo.conceallevel = 0
end,
})

View File

@@ -0,0 +1,51 @@
-- Keymaps are automatically loaded on the VeryLazy event
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
-- Add any additional keymaps here
rawset(_G, "vim", vim or {})
vim.keymap.set("n", "<leader>j", ":b#<CR>", { desc = "Toggle between buffers", noremap = true, silent = true })
vim.keymap.set("n", ";;", "A;<ESC>", { desc = "Add semicolon to the end of the line", noremap = true, silent = true })
vim.keymap.set("n", ",,", "A,<ESC>", { desc = "Add comma to the end of the line", noremap = true, silent = true })
-- stylua: ignore
vim.keymap.set("v", "y", "myy`y", { desc = "Maintain the cursor position when yanking a visual selection", noremap = true, silent = true })
vim.keymap.set("n", "+", "<C-a>", { desc = "Increment", noremap = true, silent = true })
vim.keymap.set("n", "-", "<C-x>", { desc = "Decrement", noremap = true, silent = true })
vim.keymap.set("n", "<leader>bx", ":bufdo bdelete<CR>", { desc = "Delete all buffers", noremap = true, silent = true })
vim.keymap.set("n", "<leader>bsd", "<cmd>%bd|e#|bd#<cr>|'<cr>", { desc = "Delete surrounding buffers" })
vim.keymap.set("n", "<leader>ut", ":set list!<CR>", { desc = "Toggle list", noremap = true, silent = true })
vim.keymap.set("n", "Y", "yg$", { desc = "Copy to the end of the line", noremap = true, silent = true })
-- stylua: ignore
vim.keymap.set("n", "n", "nzzzv", { desc = "Keep the window centered (next search result)", noremap = true, silent = true })
-- stylua: ignore
vim.keymap.set("n", "N", "Nzzzv", { desc = "Keep the window centered (previous search result)", noremap = true, silent = true })
-- stylua: ignore
vim.keymap.set("n", "<expr> j", "(v:count == 0 ? 'gj' : 'j')", { desc = "Move by rows in wrapped mode (down)", noremap = true, silent = true })
-- stylua: ignore
vim.keymap.set("n", "<expr> k", "(v:count == 0 ? 'gk' : 'k')", { desc = "Move by rows in wrapped mode (up)", noremap = true, silent = true })
vim.keymap.set("n", "gP", "`[v`]", { desc = "Visually select of just pasted content", noremap = true, silent = true })
vim.keymap.set("n", "gy", "`[v`]y", { desc = "Visually select of just pasted content", noremap = true, silent = true })
-- stylua: ignore
vim.keymap.set("n", "<leader>wi", ":silent !open -a iA\\ Writer.app '%:p'<CR>", { desc = "Open in iA Writer", noremap = true, silent = true })
vim.keymap.set("n", "-", "<CMD>foldclose<CR>", { desc = "Close code fold" })
vim.keymap.set("n", "+", "<CMD>foldopen<CR>", { desc = "Open code fold" })
vim.keymap.set("n", "<C-h>", function()
require("smart-splits").move_cursor_left()
end)
vim.keymap.set("n", "<C-j>", function()
require("smart-splits").move_cursor_down()
end)
vim.keymap.set("n", "<C-k>", function()
require("smart-splits").move_cursor_up()
end)
vim.keymap.set("n", "<C-l>", function()
require("smart-splits").move_cursor_right()
end)
vim.keymap.set("n", "[b", "<cmd>bprevious<cr>", { desc = "Prev buffer" })
vim.keymap.set("n", "]b", "<cmd>bnext<cr>", { desc = "Next buffer" })
-- Visual Mode
vim.keymap.set("v", "<", "<gv", { desc = "Stay in indent mode (left)", noremap = true, silent = true })
vim.keymap.set("v", ">", ">gv", { desc = "Stay in indent mode (right)", noremap = true, silent = true })

View File

@@ -0,0 +1,67 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
-- bootstrap lazy.nvim
-- stylua: ignore
vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath })
end
vim.opt.rtp:prepend(vim.env.LAZY or lazypath)
vim.cmd([[command! -nargs=0 GoToFile :Telescope find_files]])
vim.cmd([[command! -nargs=0 GoToCommand :Telescope commands]])
vim.cmd([[command! -nargs=0 Grep :Telescope live_grep]])
require("lazy").setup({
spec = {
-- add LazyVim and import its plugins
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
-- import any extras modules here
{ import = "lazyvim.plugins.extras.coding.codeium" },
{ import = "lazyvim.plugins.extras.coding.copilot" },
{ import = "lazyvim.plugins.extras.coding.mini-surround" },
{ import = "lazyvim.plugins.extras.dap.core" },
{ import = "lazyvim.plugins.extras.editor.aerial" },
{ import = "lazyvim.plugins.extras.editor.harpoon2" },
{ import = "lazyvim.plugins.extras.formatting.prettier" },
{ import = "lazyvim.plugins.extras.lang.go" },
{ import = "lazyvim.plugins.extras.lang.json" },
{ import = "lazyvim.plugins.extras.lang.ruby" },
{ import = "lazyvim.plugins.extras.lang.tailwind" },
{ import = "lazyvim.plugins.extras.lang.typescript" },
{ import = "lazyvim.plugins.extras.lang.yaml" },
{ import = "lazyvim.plugins.extras.linting.eslint" },
{ import = "lazyvim.plugins.extras.test.core" },
{ import = "lazyvim.plugins.extras.ui.mini-animate" },
-- import/override with your plugins
{ import = "plugins" },
},
defaults = {
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
lazy = false,
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
-- have outdated releases, which may break your Neovim install.
version = false, -- always use the latest git commit
-- version = "*", -- try installing the latest stable version for plugins that support semver
},
install = { colorscheme = { "tokyonight", "habamax" } },
checker = {
enabled = true,
notify = false,
frequency = 86400,
},
performance = {
rtp = {
-- disable some rtp plugins
disabled_plugins = {
"gzip",
-- "matchit",
-- "matchparen",
-- "netrwPlugin",
"tarPlugin",
"tohtml",
"tutor",
"zipPlugin",
},
},
},
})

View File

@@ -0,0 +1,48 @@
-- Options are automatically loaded before lazy.nvim startup
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
-- Add any additional options here
vim.opt.autowrite = true
vim.opt.backspace = { "indent", "eol", "start" } -- Intuitive backspacing
vim.opt.copyindent = true
vim.opt.foldlevel = 2
vim.opt.fillchars = "fold: "
vim.opt.cursorline = false
vim.opt.foldlevelstart = 99
vim.opt.foldmethod = "indent"
vim.opt.foldnestmax = 10
vim.opt.grepprg = "rg --vimgrep --no-heading --smart-case"
vim.opt.listchars = { tab = "", trail = "·", nbsp = ".", extends = "", precedes = "" }
vim.opt.showbreak = ""
vim.opt.shiftwidth = 2
vim.opt.softtabstop = 2
vim.opt.tabstop = 2
vim.opt.title = true
vim.opt.swapfile = false
vim.opt.virtualedit = "block,insert"
vim.opt.conceallevel = 2
vim.opt.iskeyword:append("-") -- Add dashes to words
vim.opt.wildignore:append({ "*/node_modules/*" }) -- Wildignore
vim.opt.complete:append({ "i", "k", "s", "kspell" })
-- Only the project root should be the root
vim.g.root_spec = { ".git" }
-- Undercurl
vim.cmd([[let &t_Cs = "\e[4:3m"]])
vim.cmd([[let &t_Ce = "\e[4:0m"]])
-- FIXME: When using "vim.opt.spellfile:append("~/.config/…) the file is not writable"
vim.cmd([[
" Spell Checker
set spellfile+=~/.config/nvim/spell/en.utf-8.add
" Custom Dictionaries (<C-x> <C-k>)
set dictionary+=~/.config/nvim/dictionary/de_user.txt
set dictionary+=~/.config/nvim/dictionary/de_neu.txt
set dictionary+=~/.config/nvim/dictionary/en_us.txt
" Custom Thesauri (Synonyms) (<C-x> <C-t>)
set thesaurus+=~/.config/nvim/thesaurus/de_user.txt
set thesaurus+=~/.config/nvim/thesaurus/de_openthesaurus.txt
]])

View File

@@ -0,0 +1,177 @@
-- Copyright (c) 2020-2021 shadmansaleh
-- MIT license, see LICENSE for more details.
local utils = require("lualine.utils.utils")
local loader = require("lualine.utils.loader")
local custom = {
A = "#1F2335",
B = "#24283B",
}
local color_name = vim.g.colors_name
if color_name then
-- All base16 colorschemes share the same theme
if "base16" == color_name:sub(1, 6) then
color_name = "base16"
end
-- Check if there's a theme for current colorscheme
-- If there is load that instead of generating a new one
local ok, theme = pcall(loader.load_theme, color_name)
if ok and theme then
return theme
end
end
---------------
-- Constants --
---------------
-- fg and bg must have this much contrast range 0 < contrast_threshold < 0.5
local contrast_threshold = 0.3
-- how much brightness is changed in percentage for light and dark themes
local brightness_modifier_parameter = 10
-- Turns #rrggbb -> { red, green, blue }
local function rgb_str2num(rgb_color_str)
if rgb_color_str:find("#") == 1 then
rgb_color_str = rgb_color_str:sub(2, #rgb_color_str)
end
local red = tonumber(rgb_color_str:sub(1, 2), 16)
local green = tonumber(rgb_color_str:sub(3, 4), 16)
local blue = tonumber(rgb_color_str:sub(5, 6), 16)
return { red = red, green = green, blue = blue }
end
-- Turns { red, green, blue } -> #rrggbb
local function rgb_num2str(rgb_color_num)
local rgb_color_str = string.format("#%02x%02x%02x", rgb_color_num.red, rgb_color_num.green, rgb_color_num.blue)
return rgb_color_str
end
-- Returns brightness level of color in range 0 to 1
-- arbitrary value it's basically an weighted average
local function get_color_brightness(rgb_color)
local color = rgb_str2num(rgb_color)
local brightness = (color.red * 2 + color.green * 3 + color.blue) / 6
return brightness / 256
end
-- returns average of colors in range 0 to 1
-- used to determine contrast level
local function get_color_avg(rgb_color)
local color = rgb_str2num(rgb_color)
return (color.red + color.green + color.blue) / 3 / 256
end
-- Clamps the val between left and right
local function clamp(val, left, right)
if val > right then
return right
end
if val < left then
return left
end
return val
end
-- Changes brightness of rgb_color by percentage
local function brightness_modifier(rgb_color, parcentage)
local color = rgb_str2num(rgb_color)
color.red = clamp(color.red + (color.red * parcentage / 100), 0, 255)
color.green = clamp(color.green + (color.green * parcentage / 100), 0, 255)
color.blue = clamp(color.blue + (color.blue * parcentage / 100), 0, 255)
return rgb_num2str(color)
end
-- Changes contrast of rgb_color by amount
local function contrast_modifier(rgb_color, amount)
local color = rgb_str2num(rgb_color)
color.red = clamp(color.red + amount, 0, 255)
color.green = clamp(color.green + amount, 0, 255)
color.blue = clamp(color.blue + amount, 0, 255)
return rgb_num2str(color)
end
-- Changes brightness of foreground color to achieve contrast
-- without changing the color
local function apply_contrast(highlight)
local hightlight_bg_avg = get_color_avg(highlight.bg)
local contrast_threshold_config = clamp(contrast_threshold, 0, 0.5)
local contranst_change_step = 5
if hightlight_bg_avg > 0.5 then
contranst_change_step = -contranst_change_step
end
-- Don't waste too much time here max 25 iteration should be more than enough
local iteration_count = 1
while math.abs(get_color_avg(highlight.fg) - hightlight_bg_avg) < contrast_threshold_config and iteration_count < 25 do
highlight.fg = contrast_modifier(highlight.fg, contranst_change_step)
iteration_count = iteration_count + 1
end
end
-- Get the colors to create theme
-- stylua: ignore
local colors = {
normal = utils.extract_color_from_hllist('bg', { 'PmenuSel', 'PmenuThumb', 'TabLineSel' }, '#000000'),
insert = utils.extract_color_from_hllist('fg', { 'String', 'MoreMsg' }, '#000000'),
replace = utils.extract_color_from_hllist('fg', { 'Number', 'Type' }, '#000000'),
visual = utils.extract_color_from_hllist('fg', { 'Special', 'Boolean', 'Constant' }, '#000000'),
command = utils.extract_color_from_hllist('fg', { 'Identifier' }, '#000000'),
back1 = utils.extract_color_from_hllist('bg', { 'Normal', 'StatusLineNC' }, '#000000'),
fore = utils.extract_color_from_hllist('fg', { 'Normal', 'StatusLine' }, '#000000'),
back2 = utils.extract_color_from_hllist('bg', { 'StatusLine' }, '#000000'),
}
-- Change brightness of colors
-- Darken if light theme (or) Lighten if dark theme
local normal_color = utils.extract_highlight_colors("Normal", "bg")
if normal_color ~= nil then
if get_color_brightness(normal_color) > 0.5 then
brightness_modifier_parameter = -brightness_modifier_parameter
end
for name, color in pairs(colors) do
colors[name] = brightness_modifier(color, brightness_modifier_parameter)
end
end
-- Basic theme definition
local M = {
normal = {
a = { bg = colors.normal, fg = colors.back1, gui = "bold" },
b = { bg = custom.B, fg = colors.normal },
c = { bg = custom.A, fg = colors.fore },
},
insert = {
a = { bg = colors.insert, fg = colors.back1, gui = "bold" },
b = { bg = custom.B, fg = colors.insert },
c = { bg = colors.back2, fg = colors.fore },
},
replace = {
a = { bg = colors.replace, fg = colors.back1, gui = "bold" },
b = { bg = custom.B, fg = colors.replace },
c = { bg = colors.back2, fg = colors.fore },
},
visual = {
a = { bg = colors.visual, fg = colors.back1, gui = "bold" },
b = { bg = custom.B, fg = colors.visual },
c = { bg = colors.back2, fg = colors.fore },
},
command = {
a = { bg = colors.command, fg = colors.back1, gui = "bold" },
b = { bg = custom.B, fg = colors.command },
c = { bg = colors.back2, fg = colors.fore },
},
}
M.terminal = M.command
M.inactive = M.normal
-- Apply proper contrast so text is readable
for _, section in pairs(M) do
for _, highlight in pairs(section) do
apply_contrast(highlight)
end
end
return M

View File

@@ -0,0 +1,42 @@
local colors = {
white = "#ffffff",
blue = "#88A1BB",
green = "#b7d670",
magenta = "#a889d2",
orange = "#fd9f4d",
yellow = "#f3fa9b",
transparent = "None",
}
return {
normal = {
a = { bg = colors.transparent, fg = colors.blue, gui = "bold" },
b = { bg = colors.transparent, fg = colors.white },
c = { bg = colors.transparent, fg = colors.white },
},
insert = {
a = { bg = colors.transparent, fg = colors.green, gui = "bold" },
b = { bg = colors.transparent, fg = colors.white },
c = { bg = colors.transparent, fg = colors.white },
},
visual = {
a = { bg = colors.transparent, fg = colors.magenta, gui = "bold" },
b = { bg = colors.transparent, fg = colors.white },
c = { bg = colors.transparent, fg = colors.white },
},
replace = {
a = { bg = colors.transparent, fg = colors.orange, gui = "bold" },
b = { bg = colors.transparent, fg = colors.white },
c = { bg = colors.transparent, fg = colors.white },
},
command = {
a = { bg = colors.transparent, fg = colors.yellow, gui = "bold" },
b = { bg = colors.transparent, fg = colors.white },
c = { bg = colors.transparent, fg = colors.white },
},
inactive = {
a = { bg = colors.transparent, fg = colors.white, gui = "bold" },
b = { bg = colors.transparent, fg = colors.white },
c = { bg = colors.transparent, fg = colors.white },
},
}

View File

@@ -0,0 +1,9 @@
-- Automatically fix spelling mistakes
-- https://github.com/tpope/vim-abolish
return {
"tpope/vim-abolish",
config = function()
vim.api.nvim_command("Abolish teh the")
vim.api.nvim_command("Abolish {despa,sepe}rat{e,es,ed,ing,ely,ion,ions,or} {despe,sepa}rat{}")
end,
}

View File

@@ -0,0 +1,22 @@
-- aerical.nvim
-- https://github.com/stevearc/aerial.nvim
return {
"stevearc/aerial.nvim",
event = "VeryLazy",
dependencies = {
"nvim-treesitter/nvim-treesitter",
"nvim-tree/nvim-web-devicons",
},
config = function()
require("aerial").setup({
on_attach = function(bufnr)
-- Jump forwards/backwards with '{' and '}'
vim.keymap.set("n", "{", "<cmd>AerialPrev<CR>", { buffer = bufnr })
vim.keymap.set("n", "}", "<cmd>AerialNext<CR>", { buffer = bufnr })
end,
})
end,
keys = {
{ "<leader>A", "<cmd>AerialToggle!<CR>", desc = "Aerial" },
},
}

View File

@@ -0,0 +1,8 @@
-- Astro support
-- https://github.com/wuelnerdotexe/vim-astro
return {
"wuelnerdotexe/vim-astro",
config = function()
vim.g.astro_typescript = "enable"
end,
}

View File

@@ -0,0 +1,8 @@
-- 🧶 Automatically save your changes in NeoVim
-- https://github.com/pocco81/auto-save.nvim
return {
"Pocco81/auto-save.nvim",
keys = {
{ "<leader>as", "<Cmd>ASToggle<CR>", desc = "Autosave Toggle" },
},
}

View File

@@ -0,0 +1,10 @@
-- Use treesitter to auto close and auto rename HTML tags
-- https://github.com/windwp/nvim-ts-autotag
return {
"windwp/nvim-ts-autotag",
config = function()
require("nvim-ts-autotag").setup({
disable_filetype = { "TelescopePrompt", "vim" },
})
end,
}

View File

@@ -0,0 +1,15 @@
-- barbecue.nvim
-- https://github.com/utilyre/barbecue.nvim
return {
"utilyre/barbecue.nvim",
name = "barbecue",
version = "*",
dependencies = {
"SmiteshP/nvim-navic",
"nvim-tree/nvim-web-devicons",
},
config = function()
require("barbecue").setup()
require("barbecue.ui").toggle(true)
end,
}

View File

@@ -0,0 +1,4 @@
-- https://github.com/chriskempson/base16-vim
return {
"chriskempson/base16-vim",
}

View File

@@ -0,0 +1,14 @@
-- Show Git blame inline
-- https://github.com/APZelos/blamer.nvim
return {
"APZelos/blamer.nvim",
keys = {
-- stylua: ignore
{ "<leader>gB", "<cmd>BlamerToggle<cr>", desc = "Git Blame" },
},
config = function()
vim.g.blamer_enabled = 0
vim.g.blamer_relative_time = 1
vim.g.blamer_delay = 200
end,
}

View File

@@ -0,0 +1,5 @@
-- Vim bookmark plugin
-- https://github.com/MattesGroeger/vim-bookmarks
return {
"MattesGroeger/vim-bookmarks",
}

View File

@@ -0,0 +1,17 @@
-- A snazzy bufferline for Neovim
-- https://github.com/akinsho/bufferline.nvim
return {
"akinsho/bufferline.nvim",
dependencies = "nvim-tree/nvim-web-devicons",
keys = {
{ "<Tab>", "<Cmd>BufferLineCycleNext<CR>", desc = "Next tab" },
{ "<S-Tab>", "<Cmd>BufferLineCyclePrev<CR>", desc = "Prev tab" },
},
opts = {
options = {
mode = "tabs",
show_buffer_close_icons = false,
show_close_icon = false,
},
},
}

View File

@@ -0,0 +1,7 @@
-- https://github.com/catppuccin/nvim
return {
{
"catppuccin/nvim",
name = "catppuccin",
},
}

View File

@@ -0,0 +1,20 @@
-- View images in Neovim
-- https://github.com/princejoogie/chafa.nvim
return {
"princejoogie/chafa.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
"m00qek/baleia.nvim",
},
config = function()
require("chafa").setup({
render = {
min_padding = 5,
show_label = true,
},
events = {
update_on_nvim_resize = true,
},
})
end,
}

View File

@@ -0,0 +1,29 @@
-- ChatGPT Neovim Plugin
-- https://github.com/jackMort/ChatGPT.nvim
return {
"jackMort/ChatGPT.nvim",
event = "VeryLazy",
keys = {
{
mode = "v",
"<leader>e",
function()
require("chatgpt").edit_with_instructions()
end,
desc = "Edit with instructions",
},
},
config = function()
local home = vim.fn.expand("$HOME")
local file_path = home .. "/.config/nvim/lua/plugins/chatgpg.txt.gpg"
require("chatgpt").setup({
api_key_cmd = "gpg --decrypt --use-agent " .. file_path,
})
end,
dependencies = {
"MunifTanjim/nui.nvim",
"nvim-lua/plenary.nvim",
"folke/trouble.nvim",
"nvim-telescope/telescope.nvim",
},
}

Binary file not shown.

View File

@@ -0,0 +1,16 @@
-- Searchable Cheatsheet
-- https://github.com/sudormrfbin/cheatsheet.nvim
return {
"sudormrfbin/cheatsheet.nvim",
dependencies = {
"nvim-telescope/telescope.nvim",
"nvim-lua/popup.nvim",
"nvim-lua/plenary.nvim",
},
keys = {
{ "<leader>C", "<cmd>Cheatsheet<cr>", desc = "Cheatsheet" },
},
config = function()
require("cheatsheet").setup()
end,
}

View File

@@ -0,0 +1,47 @@
return {
"hrsh7th/nvim-cmp",
dependencies = {
{ "roobert/tailwindcss-colorizer-cmp.nvim", config = true },
"zbirenbaum/copilot-cmp",
"David-Kunz/cmp-npm",
},
opts = function(_, opts)
local cmp = require("cmp")
opts.sources = cmp.config.sources(vim.list_extend(opts.sources, {
{ name = "copilot" },
{ name = "npm", keyword_length = 4 },
}))
opts.formatting = {
fields = { "kind", "abbr", "menu" },
format = function(_, item)
local icons = require("lazyvim.config").icons.kinds
if icons[item.kind] then
item.kind = icons[item.kind]
end
return item
end,
}
opts.window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
}
vim.api.nvim_set_hl(0, "CmpItemKindCopilot", { fg = "#6CC644" })
vim.api.nvim_set_hl(0, "CmpItemAbbrMatch", { fg = "NONE", bg = "#000000" })
vim.cmd([[highlight! link CmpItemAbbrMatchFuzzy CmpItemAbbrMatch]])
vim.cmd([[highlight! CmpItemAbbrDeprecated guibg=NONE gui=strikethrough guifg=#808080]])
vim.cmd([[highlight! CmpItemAbbrMatch guibg=NONE guifg=#569CD6]])
vim.cmd([[highlight! link CmpItemAbbrMatchFuzzy CmpItemAbbrMatch]])
vim.cmd([[highlight! CmpItemKindVariable guibg=NONE guifg=#9CDCFE]])
vim.cmd([[highlight! link CmpItemKindInterface CmpItemKindVariable]])
vim.cmd([[highlight! link CmpItemKindText CmpItemKindVariable]])
vim.cmd([[highlight! CmpItemKindFunction guibg=NONE guifg=#C586C0]])
vim.cmd([[highlight! link CmpItemKindMethod CmpItemKindFunction]])
vim.cmd([[highlight! CmpItemKindKeyword guibg=NONE guifg=#D4D4D4]])
vim.cmd([[highlight! link CmpItemKindProperty CmpItemKindKeyword]])
vim.cmd([[highlight! link CmpItemKindUnit CmpItemKindKeyword]])
end,
}

View File

@@ -0,0 +1,12 @@
-- Minimap
-- https://github.com/gorbit99/codewindow.nvim
return {
"gorbit99/codewindow.nvim",
config = function()
local codewindow = require("codewindow")
codewindow.setup({
window_border = "none",
})
codewindow.apply_default_keybinds()
end,
}

View File

@@ -0,0 +1,29 @@
-- The fastest Neovim colorizer
-- https://github.com/NvChad/nvim-colorizer.lua
return {
"NvChad/nvim-colorizer.lua",
opts = {
filetypes = {
"css",
"html",
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"yaml",
"conf",
"lua",
},
user_default_options = {
RGB = true,
RRGGBB = true,
names = true,
RRGGBBAA = true,
rgb_fn = true,
hsl_fn = true,
css = true,
css_fn = true,
mode = "background",
},
},
}

View File

@@ -0,0 +1,7 @@
-- https://github.com/catppuccin/nvim
return {
"catppuccin/nvim",
lazy = false,
priority = 1000,
name = "catppuccin",
}

View File

@@ -0,0 +1,10 @@
-- 🦉 🌌 Night Owl colorscheme implementation for Neovim with support for Treesitter and semantic tokens
-- https://github.com/oxfist/night-owl.nvim
return {
"oxfist/night-owl.nvim",
lazy = true,
config = function()
require("night-owl").setup()
vim.cmd.colorscheme("night-owl")
end,
}

View File

@@ -0,0 +1,6 @@
-- https://github.com/folke/tokyonight.nvim
return {
"folke/tokyonight.nvim",
lazy = true,
opts = { style = "night" },
}

View File

@@ -0,0 +1,9 @@
-- Configure LazyVim to load colorscheme
return {
{
"LazyVim/LazyVim",
opts = {
colorscheme = "catppuccin",
},
},
}

View File

@@ -0,0 +1,5 @@
-- More pleasant editing on commit messages
-- https://github.com/rhysd/committia.vim
return {
"rhysd/committia.vim",
}

View File

@@ -0,0 +1,13 @@
-- Chat with GitHub Copilot in Neovim
-- https://github.com/CopilotC-Nvim/CopilotChat.nvim
return {
{
"CopilotC-Nvim/CopilotChat.nvim",
branch = "canary",
dependencies = {
{ "zbirenbaum/copilot.lua" }, -- or github/copilot.vim
{ "nvim-lua/plenary.nvim" }, -- for curl, log wrapper
},
opts = {},
},
}

View File

@@ -0,0 +1,10 @@
-- Copilot replacement
-- https://github.com/zbirenbaum/copilot.lua
-- https://github.com/zbirenbaum/copilot-cmp
return {
"zbirenbaum/copilot-cmp",
dependencies = "zbirenbaum/copilot.lua",
opts = function()
require("copilot").setup()
end,
}

View File

@@ -0,0 +1,19 @@
-- Highlight cursor words and lines
-- https://github.com/yamatsum/nvim-cursorline
return {
"yamatsum/nvim-cursorline",
config = function()
require("nvim-cursorline").setup({
cursorline = {
enable = false,
timeout = 1000,
number = false,
},
cursorword = {
enable = true,
min_length = 3,
hl = { underline = true },
},
})
end,
}

View File

@@ -0,0 +1,110 @@
return {
"nvimdev/dashboard-nvim",
event = "VimEnter",
opts = function()
local logo = "\n"
.. "\n"
.. "┌─╮╭─╮╭─╮▖ ▖▖▄▄▗▄ \n"
.. "│ │├─┘│ │▝▖▞ ▌▌ ▌ ▌\n"
.. "╵ ╵╰─╯╰─╯ ▝ ▘▘ ▘ ▘\n"
.. "\n"
logo = string.rep("\n", 5) .. logo .. "\n\n"
local opts = {
theme = "doom",
hide = {
statusline = false,
},
config = {
header = vim.split(logo, "\n"),
center = {
{
action = "Telescope find_files",
desc = " Find file",
icon = "",
key = "f",
},
{
action = "ene | startinsert",
desc = " New file",
icon = "",
key = "n",
},
{
action = "Telescope oldfiles",
desc = " Recent files",
icon = "",
key = "r",
},
{
action = "Telescope live_grep",
desc = " Find text",
icon = "",
key = "g",
},
{
action = "Telescope projects",
desc = " Find project",
icon = "",
key = "p",
},
{
action = 'lua require("persistence").load()',
desc = " Restore Session",
icon = "",
key = "s",
},
{
action = "LazyExtras",
desc = " Lazy Extras",
icon = "",
key = "e",
},
{
action = "Lazy",
desc = " Lazy",
icon = "󰒲 ",
key = "l",
},
{
action = "Mason",
desc = " Mason",
icon = "󱊈 ",
key = "m",
},
{
action = "qa",
desc = " Quit",
icon = "",
key = "q",
},
},
footer = function()
local stats = require("lazy").stats()
local ms = (math.floor(stats.startuptime * 100 + 0.5) / 100)
return {
"⚡ Neovim loaded " .. stats.loaded .. "/" .. stats.count .. " plugins in " .. ms .. "ms",
}
end,
},
}
for _, button in ipairs(opts.config.center) do
button.desc = button.desc .. string.rep(" ", 43 - #button.desc)
end
-- close Lazy and re-open when the dashboard is ready
if vim.o.filetype == "lazy" then
vim.cmd.close()
vim.api.nvim_create_autocmd("User", {
pattern = "DashboardLoaded",
callback = function()
require("lazy").show()
end,
})
end
return opts
end,
}

View File

@@ -0,0 +1,32 @@
-- Enhanced increment/decrement
-- https://github.com/monaqa/dial.nvim
return {
"monaqa/dial.nvim",
config = function()
local augend = require("dial.augend")
local opts = { noremap = true, silent = true }
require("dial.config").augends:register_group({
default = {
augend.constant.alias.bool,
augend.constant.alias.de_weekday,
augend.constant.alias.de_weekday_full,
augend.constant.new({ elements = { "before", "after" } }),
augend.constant.new({ elements = { "left", "right" } }),
augend.constant.new({ elements = { "let", "const" } }),
augend.constant.new({ elements = { "start", "end" } }),
augend.date.alias["%d.%m.%Y"],
augend.hexcolor.new({ case = "lower" }),
augend.integer.alias.decimal_int,
augend.semver.alias.semver,
},
})
vim.keymap.set("n", "<C-a>", require("dial.map").inc_normal(), opts)
vim.keymap.set("n", "<C-x>", require("dial.map").dec_normal(), opts)
vim.keymap.set("v", "<C-a>", require("dial.map").inc_visual(), opts)
vim.keymap.set("v", "<C-x>", require("dial.map").dec_visual(), opts)
vim.keymap.set("v", "g<C-a>", require("dial.map").inc_gvisual(), opts)
vim.keymap.set("v", "g<C-x>", require("dial.map").dec_gvisual(), opts)
end,
}

View File

@@ -0,0 +1,20 @@
-- Easily cycle through diffs
-- https://github.com/sindrets/diffview.nvim
return {
"sindrets/diffview.nvim",
lazy = false,
dependencies = "nvim-lua/plenary.nvim",
keys = {
{ "<leader>gd", "<cmd>DiffviewOpen<cr>", desc = "Diffview Open" },
{ "<leader>gD", "<cmd>DiffviewClose<cr>", desc = "Diffview Close" },
},
opts = {
view = {
use_icons = true,
default = {
layout = "diff2_horizontal",
winbar_info = false,
},
},
},
}

View File

@@ -0,0 +1,5 @@
-- Editorconfig
-- https://github.com/editorconfig/editorconfig-vim
return {
"editorconfig/editorconfig-vim",
}

View File

@@ -0,0 +1,6 @@
-- Emmet
-- https://github.com/mattn/emmet-vim
-- <c-y>, to extend
return {
"mattn/emmet-vim",
}

View File

@@ -0,0 +1,267 @@
-- since this is just an example spec, don't actually load anything here and return an empty spec
-- stylua: ignore
if true then return {} end
-- every spec file under config.plugins will be loaded automatically by lazy.nvim
--
-- In your plugin files, you can:
-- * add extra plugins
-- * disable/enabled LazyVim plugins
-- * override the configuration of LazyVim plugins
return {
-- add gruvbox
{ "ellisonleao/gruvbox.nvim" },
-- Configure LazyVim to load gruvbox
{
"LazyVim/LazyVim",
opts = {
colorscheme = "gruvbox",
},
},
-- change trouble config
{
"folke/trouble.nvim",
-- opts will be merged with the parent spec
opts = { use_diagnostic_signs = true },
},
-- disable trouble
{ "folke/trouble.nvim", enabled = false },
-- add symbols-outline
{
"simrat39/symbols-outline.nvim",
cmd = "SymbolsOutline",
keys = { { "<leader>cs", "<cmd>SymbolsOutline<cr>", desc = "Symbols Outline" } },
config = true,
},
-- override nvim-cmp and add cmp-emoji
{
"hrsh7th/nvim-cmp",
dependencies = { "hrsh7th/cmp-emoji" },
---@param opts cmp.ConfigSchema
opts = function(_, opts)
local cmp = require("cmp")
opts.sources = cmp.config.sources(vim.list_extend(opts.sources, { { name = "emoji" } }))
end,
},
-- change some telescope options and a keymap to browse plugin files
{
"nvim-telescope/telescope.nvim",
keys = {
-- add a keymap to browse plugin files
-- stylua: ignore
{
"<leader>fp",
function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
desc = "Find Plugin File",
},
},
-- change some options
opts = {
defaults = {
layout_strategy = "horizontal",
layout_config = { prompt_position = "top" },
sorting_strategy = "ascending",
winblend = 0,
},
},
},
-- add telescope-fzf-native
{
"telescope.nvim",
dependencies = {
"nvim-telescope/telescope-fzf-native.nvim",
build = "make",
config = function()
require("telescope").load_extension("fzf")
end,
},
},
-- add pyright to lspconfig
{
"neovim/nvim-lspconfig",
---@class PluginLspOpts
opts = {
---@type lspconfig.options
servers = {
-- pyright will be automatically installed with mason and loaded with lspconfig
pyright = {},
},
},
},
-- add tsserver and setup with typescript.nvim instead of lspconfig
{
"neovim/nvim-lspconfig",
dependencies = {
"jose-elias-alvarez/typescript.nvim",
init = function()
require("lazyvim.util").lsp.on_attach(function(_, buffer)
-- stylua: ignore
vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
end)
end,
},
---@class PluginLspOpts
opts = {
---@type lspconfig.options
servers = {
-- tsserver will be automatically installed with mason and loaded with lspconfig
tsserver = {},
},
-- you can do any additional lsp server setup here
-- return true if you don't want this server to be setup with lspconfig
---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
setup = {
-- example to setup with typescript.nvim
tsserver = function(_, opts)
require("typescript").setup({ server = opts })
return true
end,
-- Specify * to use this function as a fallback for any server
-- ["*"] = function(server, opts) end,
},
},
},
-- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
-- treesitter, mason and typescript.nvim. So instead of the above, you can use:
{ import = "lazyvim.plugins.extras.lang.typescript" },
-- add more treesitter parsers
{
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = {
"bash",
"help",
"html",
"javascript",
"json",
"lua",
"markdown",
"markdown_inline",
"python",
"query",
"regex",
"tsx",
"typescript",
"vim",
"yaml",
},
},
},
-- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
-- would overwrite `ensure_installed` with the new value.
-- If you'd rather extend the default config, use the code below instead:
{
"nvim-treesitter/nvim-treesitter",
opts = function(_, opts)
-- add tsx and treesitter
vim.list_extend(opts.ensure_installed, {
"tsx",
"typescript",
})
end,
},
-- the opts function can also be used to change the default opts:
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function(_, opts)
table.insert(opts.sections.lualine_x, "😄")
end,
},
-- or you can return new options to override all the defaults
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function()
return {
--[[add your custom lualine config here]]
}
end,
},
-- use mini.starter instead of alpha
{ import = "lazyvim.plugins.extras.ui.mini-starter" },
-- add jsonls and schemastore ans setup treesitter for json, json5 and jsonc
{ import = "lazyvim.plugins.extras.lang.json" },
-- add any tools you want to have installed below
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"stylua",
"shellcheck",
"shfmt",
"flake8",
},
},
},
-- Use <tab> for completion and snippets (supertab)
-- first: disable default <tab> and <s-tab> behavior in LuaSnip
{
"L3MON4D3/LuaSnip",
keys = function()
return {}
end,
},
-- then: setup supertab in cmp
{
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-emoji",
},
---@param opts cmp.ConfigSchema
opts = function(_, opts)
local has_words_before = function()
unpack = unpack or table.unpack
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
local luasnip = require("luasnip")
local cmp = require("cmp")
opts.mapping = vim.tbl_extend("force", opts.mapping, {
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
-- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable()
-- they way you will only jump inside the snippet region
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
elseif has_words_before() then
cmp.complete()
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "s" }),
})
end,
},
}

View File

@@ -0,0 +1,9 @@
-- Export active buffers to VS Code
-- https://github.com/elijahmanor/export-to-vscode.nvim
return {
"elijahmanor/export-to-vscode.nvim",
keys = {
-- stylua: ignore
{ "<leader>code", function() require("export-to-vscode").launch() end, desc = "Export to VS Code" },
},
}

View File

@@ -0,0 +1,33 @@
-- flash.nvim
-- https://github.com/folke/flash.nvim
return {
"folke/flash.nvim",
event = "VeryLazy",
opts = {},
keys = {
{
"s",
mode = { "n", "x", "o" },
function()
require("flash").jump()
end,
desc = "Flash",
},
{
"S",
mode = { "n", "o", "x" },
function()
require("flash").treesitter()
end,
desc = "Flash Treesitter",
},
{
"r",
mode = "o",
function()
require("flash").remote()
end,
desc = "Remote Flash",
},
},
}

View File

@@ -0,0 +1,60 @@
-- Use favorite terminal file managers in Neovim
-- https://github.com/is0n/fm-nvim
return {
"is0n/fm-nvim",
keys = {
{ "<M-g>", "<cmd>Lazygit<cr>", desc = "Lazygit" },
{ "<M-l>", "<cmd>Lf<cr>", desc = "Lf" },
},
opts = {
edit_cmd = "edit",
on_close = {},
on_open = {},
ui = {
default = "float",
float = {
border = "rounded",
float_hl = "Normal",
border_hl = "FloatBorder",
blend = 0,
height = 0.9,
width = 0.9,
x = 0.5,
y = 0.5,
},
split = {
direction = "topleft",
size = 24,
},
},
cmds = {
lf_cmd = "lf",
fm_cmd = "fm",
nnn_cmd = "nnn",
fff_cmd = "fff",
twf_cmd = "twf",
fzf_cmd = "fzf",
fzy_cmd = "find . | fzy",
xplr_cmd = "xplr",
vifm_cmd = "vifm",
skim_cmd = "sk",
broot_cmd = "broot",
gitui_cmd = "gitui",
ranger_cmd = "ranger",
joshuto_cmd = "joshuto",
lazygit_cmd = "lazygit",
neomutt_cmd = "neomutt",
taskwarrior_cmd = "taskwarrior-tui",
},
mappings = {
vert_split = "<C-v>",
horz_split = "<C-h>",
tabedit = "<C-t>",
edit = "<C-e>",
ESC = "<ESC>",
},
},
config = function()
require("fm-nvim").setup()
end,
}

View File

@@ -0,0 +1,56 @@
-- Lightweight yet powerful formatter plugin for Neovim
-- https://github.com/stevearc/conform.nvim
return {
"stevearc/conform.nvim",
event = { "BufWritePre", "BufNewFile" },
keys = {
{
"<leader>mp",
mode = { "n", "v" },
function()
require("conform").format({
lsp_fallback = true,
async = false,
timeout_ms = 500,
})
end,
desc = "Format file or range (in visual mode)",
},
},
opts = {
formatters = {
eslint_d = {
command = "eslint_d",
args = { "--fix-to-stdout", "--stdin", "--stdin-filename", "$FILENAME" },
stdin = true,
},
nixpkgs_fmt = {
command = "nixpkgs-fmt",
},
},
formatters_by_ft = {
-- ["*"] = { "codespell" },
["_"] = { "trim_whitespace" },
astro = { { "prettierd", "prettier" } },
css = { { "prettierd", "prettier" }, "stylelint" },
fish = { "fish_indent" },
go = { "goimports", "gofumpt" },
graphql = { { "prettierd", "prettier" } },
html = { { "prettierd", "prettier" } },
javascript = { { "prettierd", "prettier" }, "eslint_d" },
javascriptreact = { { "prettierd", "prettier" }, "eslint_d" },
json = { { "prettierd", "prettier" } },
lua = { "stylua" },
markdown = { { "prettierd", "prettier" } },
mdx = { { "prettierd", "prettier" } },
nix = { "nixpkgs_fmt" },
python = { "isort", "black" },
ruby = { "rubyfmt", "rubocop" },
eruby = { "htmlbeautifier" },
svelte = { { "prettierd", "prettier" } },
typescript = { { "prettierd", "prettier" }, "eslint_d" },
typescriptreact = { { "prettierd", "prettier" }, "eslint_d" },
yaml = { { "prettierd", "prettier" } },
},
},
}

View File

@@ -0,0 +1,5 @@
-- fugitive.vim: A Git wrapper so awesome, it should be illegal
-- https://github.com/tpope/vim-fugitive
return {
"tpope/vim-fugitive",
}

View File

@@ -0,0 +1,9 @@
-- Open the link of current line on GitHub
-- https://github.com/ruanyl/vim-gh-line
-- <leader>gh (line) or <leader>gb (blame)
return {
"ruanyl/vim-gh-line",
config = function()
vim.g.gh_github_domain = "source.xing.com"
end,
}

View File

@@ -0,0 +1,28 @@
-- A fully featured GitHub integration for performing code reviews
-- https://github.com/ldelossa/gh.nvim
return {
"ldelossa/gh.nvim",
dependencies = { "ldelossa/litee.nvim" },
config = function()
require("litee.lib").setup()
require("litee.gh").setup({
jump_mode = "invoking",
map_resize_keys = false,
disable_keymaps = false,
icon_set = "default",
icon_set_custom = nil,
git_buffer_completion = true,
keymaps = {
open = "<CR>",
expand = "zo",
collapse = "zc",
goto_issue = "gd",
details = "d",
submit_comment = "<C-s>",
actions = "<C-a>",
resolve_thread = "<C-r>",
goto_web = "gx",
},
})
end,
}

View File

@@ -0,0 +1,5 @@
-- A powerful grammar checker using LanguageTool
-- https://github.com/rhysd/vim-grammarous
return {
"rhysd/vim-grammarous",
}

View File

@@ -0,0 +1,11 @@
-- Harpoon2 for lualine
-- https://github.com/letieu/harpoon-lualine
return {
"letieu/harpoon-lualine",
dependencies = {
{
"ThePrimeagen/harpoon",
branch = "harpoon2",
},
},
}

View File

@@ -0,0 +1,63 @@
-- Getting you where you want with the fewest keystrokes
-- https://github.com/ThePrimeagen/harpoon
return {
"ThePrimeagen/harpoon",
branch = "harpoon2",
keys = {
{
"<leader>a",
function()
require("harpoon"):list():add()
end,
desc = "Harpoon Add File",
},
{
"<leader>;",
function()
local harpoon = require("harpoon")
harpoon.ui:toggle_quick_menu(harpoon:list())
end,
desc = "Harpoon Quickmenu",
},
{
"<leader>1",
function()
require("harpoon"):list():select(1)
end,
desc = "Harpoon Buffer 1",
},
{
"<leader>2",
function()
require("harpoon"):list():select(2)
end,
desc = "Harpoon Buffer 2",
},
{
"<leader>3",
function()
require("harpoon"):list():select(3)
end,
desc = "Harpoon Buffer 3",
},
{
"<leader>4",
function()
require("harpoon"):list():select(4)
end,
desc = "Harpoon Buffer 4",
},
{
"<leader>5",
function()
require("harpoon"):list():select(5)
end,
desc = "Harpoon Buffer 5",
},
},
opts = {
menu = {
width = vim.api.nvim_win_get_width(0) - 4,
},
},
}

View File

@@ -0,0 +1,15 @@
-- highlight-undo.nvim
-- https://github.com/tzachar/highlight-undo.nvim
return {
"tzachar/highlight-undo.nvim",
config = function()
require("highlight-undo").setup({
hlgroup = "HighlightUndo",
duration = 300,
keymaps = {
{ "n", "u", "undo", {} },
{ "n", "<C-r>", "redo", {} },
},
})
end,
}

View File

@@ -0,0 +1,7 @@
-- Incremental LSP renaming based on Neovim's command-preview feature.
-- https://github.com/smjonas/inc-rename.nvim
return {
"smjonas/inc-rename.nvim",
cmd = "IncRename",
config = true,
}

View File

@@ -0,0 +1,18 @@
-- Plugin for calling lazygit from within neovim.
-- https://github.com/kdheepak/lazygit.nvim
return {
"kdheepak/lazygit.nvim",
cmd = {
"LazyGit",
"LazyGitConfig",
"LazyGitCurrentFile",
"LazyGitFilter",
"LazyGitFilterCurrentFile",
},
dependencies = {
"nvim-lua/plenary.nvim",
},
keys = {
{ "<leader>lg", "<cmd>LazyGit<cr>", desc = "LazyGit" },
},
}

View File

@@ -0,0 +1,17 @@
-- A legend for your keymaps, commands, and autocmds
-- https://github.com/mrjones2014/legendary.nvim
return {
"mrjones2014/legendary.nvim",
dependencies = {
"kkharji/sqlite.lua",
},
keys = {
-- stylua: ignore
-- { "<leader>L", "<cmd>Legendary<cr>", desc = "Legendary" },
},
config = function()
require("legendary").setup({
which_key = { auto_register = true },
})
end,
}

View File

@@ -0,0 +1,19 @@
-- Lf file manager for Neovim
-- https://github.com/lmburns/lf.nvim
return {
"lmburns/lf.nvim",
cmd = "Lf",
dependencies = {
"nvim-lua/plenary.nvim",
"akinsho/toggleterm.nvim",
},
keys = {
{ "<leader>fl", "<cmd>Lf<cr>", desc = "Lf File Manager" },
},
opts = {
winblend = 0,
highlights = { NormalFloat = { guibg = "NONE" } },
border = "curved",
escape_quit = true,
},
}

View File

@@ -0,0 +1,34 @@
-- Linting
-- https://github.com/mfussenegger/nvim-lint
return {
"mfussenegger/nvim-lint",
event = {
"BufWritePre",
"BufNewFile",
},
keys = {
{
"<leader>L",
mode = { "n" },
function()
require("lint").try_lint()
end,
desc = "Trigger linting for current file",
},
},
opts = {
events = { "BufEnter", "BufWritePost", "BufReadPost", "InsertLeave" },
linters_by_ft = {
["*"] = { "codespell" },
astro = { "eslint_d", "cspell" },
fish = { "fish" },
javascript = { "eslint_d", "cspell" },
javascriptreact = { "eslint_d", "cspell" },
python = { "pylint" },
ruby = { "rubocop" },
svelte = { "eslint_d" },
typescript = { "eslint_d", "cspell" },
typescriptreact = { "eslint_d", "cspell" },
},
},
}

View File

@@ -0,0 +1,7 @@
return {
"linrongbin16/lsp-progress.nvim",
dependencies = { "nvim-tree/nvim-web-devicons" },
config = function()
require("lsp-progress").setup()
end,
}

View File

@@ -0,0 +1,52 @@
-- Quickstart configs for Nvim LSP
-- https://github.com/neovim/nvim-lspconfig
return {
"neovim/nvim-lspconfig",
init = function()
require("lazyvim.util").lsp.on_attach(function(_, buffer)
-- stylua: ignore
vim.keymap.set("n", "g0", "<cmd>Telescope lsp_document_symbols<cr>", { buffer = buffer, desc = "Document Symbols" })
vim.keymap.set("n", "cc", "<cmd>lua vim.lsp.buf.code_action()<cr>", { buffer = buffer, desc = "Code Action" })
end)
end,
opts = {
inlay_hints = { enabled = false },
servers = {
astro = {},
cssls = {},
cssmodules_ls = {},
diagnosticls = {},
emmet_ls = {},
graphql = {},
html = {},
jsonls = {},
lua_ls = {},
nixd = {},
svelte = {},
tsserver = {},
yamlls = {},
},
},
setup = function()
local nvim_lsp = require("lspconfig")
nvim_lsp.nixd.setup({
cmd = { "nixd" },
setttings = {
nixd = {
expr = "import <nixpkgs> { }",
},
formattting = {
command = { "nixpkgs-fmt" },
},
options = {
nixos = {
expr = '(builtins.getFlake ("git+file://" + toString ./.)).nixosConfigurations.k-on.options',
},
home_manager = {
expr = '(builtins.getFlake ("git+file://" + toString ./.)).homeConfigurations."ruixi@k-on".options',
},
},
},
})
end,
}

View File

@@ -0,0 +1,105 @@
-- A blazing fast and easy to configure neovim statusline plugin written in pure lua.
-- https://github.com/nvim-lualine/lualine.nvim
return {
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
dependencies = {
"nvim-tree/nvim-web-devicons",
"linrongbin16/lsp-progress.nvim",
},
opts = function()
local icons = require("lazyvim.config").icons
local function fg(name)
return function()
---@type {foreground?:number}?
local hl = vim.api.nvim_get_hl_by_name(name, true)
return hl and hl.foreground and { fg = string.format("#%06x", hl.foreground) }
end
end
return {
options = {
icons_enabled = true,
theme = "transparent",
component_separators = { left = "", right = "" },
section_separators = { left = "", right = "" },
disabled_filetypes = { "alpha", "dashboard", "lazy " },
always_divide_middle = true,
globalstatus = true,
},
sections = {
lualine_a = { "mode" },
lualine_b = { "branch" },
lualine_c = {
{
"diagnostics",
symbols = {
error = icons.diagnostics.Error,
warn = icons.diagnostics.Warn,
info = icons.diagnostics.Info,
hint = icons.diagnostics.Hint,
},
},
{ "filetype", icon_only = true, separator = "", padding = { left = 1, right = 0 } },
{ "filename", path = 3, symbols = { modified = "", readonly = "", unnamed = "" } },
{
"harpoon2",
indicators = { "1", "2", "3", "4", "5" },
active_indicators = { "[1]", "[2]", "[3]", "[4]", "[5]" },
separator = " ",
},
},
lualine_x = {
{ require("lsp-progress").progress },
{
function()
return require("noice").api.status.command.get()
end,
cond = function()
return package.loaded["noice"] and require("noice").api.status.command.has()
end,
color = fg("Statement"),
},
{
function()
return require("noice").api.status.mode.get()
end,
cond = function()
return package.loaded["noice"] and require("noice").api.status.mode.has()
end,
color = fg("Constant"),
},
{ require("lazy.status").updates, cond = require("lazy.status").has_updates, color = fg("Special") },
{
"diff",
symbols = {
added = icons.git.added,
modified = icons.git.modified,
removed = icons.git.removed,
},
},
},
lualine_y = {
{ "progress", separator = "", padding = { left = 1, right = 0 } },
{ "location", padding = { left = 0, right = 1 } },
},
lualine_z = {
function()
return "" .. os.date("%R")
end,
},
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = { "filename" },
lualine_x = { "location" },
lualine_y = {},
lualine_z = {},
},
tabline = {},
extensions = { "neo-tree" },
}
end,
}

View File

@@ -0,0 +1,10 @@
-- Markdown Preview
-- https://github.com/iamcco/markdown-preview.nvim
return {
"iamcco/markdown-preview.nvim",
cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
ft = { "markdown" },
build = function()
vim.fn["mkdp#util#install"]()
end,
}

View File

@@ -0,0 +1,53 @@
-- Package manager for LSP servers, DAP servers, linters, and formatters
-- https://github.com/williamboman/mason.nvim
return {
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"astro-language-server",
"black",
"codespell",
"cspell",
"css-lsp",
"cssmodules-language-server",
"delve",
"diagnostic-languageserver",
"emmet-ls",
"eslint-lsp",
"eslint_d",
"gofumpt",
"goimports",
"gomodifytags",
"html-lsp",
"htmlbeautifier",
"impl",
"isort",
"json-lsp",
"lua-language-server",
"markdown-oxide",
"nixpkgs-fmt",
"prettier",
"prettierd",
"pyright",
"rubocop",
"rubyfmt",
"shellcheck",
"stylua",
"svelte-language-server",
"tailwindcss-language-server",
"typescript-language-server",
"typos-lsp",
"vale",
"yaml-language-server",
"yamlfmt",
},
ui = {
border = "rounded",
icons = {
package_installed = "",
package_pending = "",
package_uninstalled = "",
},
},
},
}

View File

@@ -0,0 +1,5 @@
-- Vim undo tree visualizer
-- https://github.com/simnalamburt/vim-mundo
return {
"simnalamburt/vim-mundo",
}

View File

@@ -0,0 +1,20 @@
-- An interactive and powerful Git interface for Neovim
-- https://github.com/NeogitOrg/neogit
return {
"NeogitOrg/neogit",
dependencies = {
"nvim-lua/plenary.nvim",
"sindrets/diffview.nvim",
"nvim-telescope/telescope.nvim",
},
keys = {
{
"<leader>gn",
function()
require("neogit").open()
end,
desc = "Neogit",
},
},
config = true,
}

View File

@@ -0,0 +1,56 @@
-- Neotest
-- https://github.com/nvim-neotest/neotest
return {
{
"nvim-neotest/neotest",
dependencies = {
"haydenmeade/neotest-jest",
"marilari88/neotest-vitest",
},
keys = {
{
"<leader>tl",
function()
require("neotest").run.run_last()
end,
desc = "Run Last Test",
},
{
"<leader>tL",
function()
require("neotest").run.run_last({
strategy = "dap",
})
end,
desc = "Debug Last Test",
},
{
"<leader>tw",
"<cmd>lua require('neotest').run.run({ jestCommand = 'jest --watch ' })<cr>",
desc = "Run Watch",
},
},
opts = function(_, opts)
table.insert(
opts.adapters,
require("neotest-jest")({
jestCommand = "npm test --",
jestConfigFile = "custom.jest.config.ts",
env = {
CI = true,
},
cwd = function()
return vim.fn.getcwd()
end,
})
)
table.insert(opts.adapters, require("neotest-vitest"))
table.insert(
opts.adapters,
require("neotest-go")({
recursive_run = true,
})
)
end,
},
}

View File

@@ -0,0 +1,7 @@
-- https://github.com/kartikp10/noctis.nvim
return {
{
"kartikp10/noctis.nvim",
dependencies = "rktjmp/lush.nvim",
}, -- Noctis color scheme
}

View File

@@ -0,0 +1,25 @@
-- Experimental UI plugin
-- https://github.com/folke/noice.nvim
return {
"folke/noice.nvim",
opts = {
lsp = {
progress = {
enabled = false,
},
},
routes = {
{
filter = {
event = "notify",
find = "No information available",
},
opts = { skip = true },
},
},
presets = {
inc_rename = true,
lsp_doc_border = true,
},
},
}

View File

@@ -0,0 +1,10 @@
-- A fancy, configurable notification manager
-- https://github.com/rcarriga/nvim-notify
return {
"rcarriga/nvim-notify",
opts = {
render = "minimal",
stages = "static",
timeout = 2000,
},
}

View File

@@ -0,0 +1,11 @@
return {
"dustinblackman/oatmeal.nvim",
cmd = { "Oatmeal" },
keys = {
{ "<leader>om", mode = "n", desc = "Start Oatmeal session" },
},
opts = {
backend = "ollama",
model = "codellama:latest",
},
}

View File

@@ -0,0 +1,71 @@
-- Obsidian
-- https://github.com/epwalsh/obsidian.nvim
return {
"epwalsh/obsidian.nvim",
version = "*",
lazy = true,
ft = "markdown",
dependencies = {
-- required
"nvim-lua/plenary.nvim",
-- optional
"hrsh7th/nvim-cmp",
"nvim-telescope/telescope.nvim",
"ibhagwan/fzf-lua",
"junegunn/fzf",
"junegunn/fzf.vim",
"godlygeek/tabular",
"preservim/vim-markdown",
},
opts = {
workspaces = {
{
name = "zettelkasten",
path = "~/Code/GitHub/obsidian/zettelkasten",
overrides = {
notes_subdir = "pages",
},
},
{
name = "highlights",
path = "~/Code/GitHub/obsidian/highlights",
},
},
completion = {
nvim_cmp = true,
min_chars = 2,
use_path_only = false,
},
mappings = {
-- Overrides the 'gf' mapping to work on markdown/wiki links within your vault.
["gf"] = {
action = function()
return require("obsidian").util.gf_passthrough()
end,
opts = { noremap = false, expr = true, buffer = true },
},
-- Toggle check-boxes.
["<leader>ch"] = {
action = function()
return require("obsidian").util.toggle_checkbox()
end,
opts = { buffer = true },
},
},
disable_frontmatter = true,
note_id_func = function(title)
local suffix = ""
if title ~= nil and title ~= "" then
suffix = title
else
suffix = tostring(os.date("%Y%m%d%H%M"))
end
return suffix
end,
templates = {
subdir = "templates",
date_format = "%Y-%m-%d",
time_format = "%H:%M",
},
},
}

View File

@@ -0,0 +1,11 @@
return {
"stevearc/oil.nvim",
opts = {},
dependencies = { "nvim-tree/nvim-web-devicons" },
keys = {
{ "<leader>-", "<CMD>lua require('oil').open()<CR>", desc = "Oil" },
},
config = function()
require("oil").setup()
end,
}

View File

@@ -0,0 +1,12 @@
-- Generate text using LLMs with customizable prompts
-- https://github.com/David-Kunz/gen.nvim
return {
"David-Kunz/gen.nvim",
opts = {
model = "codellama", -- The default model to use.
display_mode = "split", -- The display mode. Can be "float" or "split".
show_prompt = true, -- Shows the Prompt submitted to Ollama.
show_model = true, -- Displays which model you are using at the beginning of your chat session.
no_auto_close = false, -- Never closes the window automatically.
},
}

View File

@@ -0,0 +1,24 @@
-- The superior project management solution for neovim
-- https://github.com/ahmedkhalf/project.nvim
return {
"ahmedkhalf/project.nvim",
lazy = false,
keys = {
-- stylua: ignore
{ "<leader>p", ":Telescope projects<cr>", desc = "Search Projects" },
},
config = function()
require("project_nvim").setup({
active = true,
on_config_done = nil,
manual_mode = false,
detection_methods = { "pattern" },
patterns = { ".git", "Makefile", ".gitignore", "package.json", "!node_modules" },
show_hidden = false,
silent_chdir = true,
ignore_lsp = {},
datapath = vim.fn.stdpath("data"),
})
require("telescope").load_extension("projects")
end,
}

View File

@@ -0,0 +1,5 @@
-- Highlight columns in CSV files
-- https://github.com/mechatroner/rainbow_csv
return {
"mechatroner/rainbow_csv",
}

View File

@@ -0,0 +1,12 @@
-- Remote development in Neovim 🔥
-- https://github.com/amitds1997/remote-nvim.nvim?tab=readme-ov-file
return {
"amitds1997/remote-nvim.nvim",
version = "*", -- Pin to GitHub releases
dependencies = {
"nvim-lua/plenary.nvim", -- For standard functions
"MunifTanjim/nui.nvim", -- To build the plugin UI
"nvim-telescope/telescope.nvim", -- For picking b/w different remote methods
},
config = true,
}

View File

@@ -0,0 +1,33 @@
-- Create code images using the external silicon tool
-- https://github.com/michaelrommel/nvim-silicon
return {
"michaelrommel/nvim-silicon",
lazy = true,
cmd = "Silicon",
config = function()
require("silicon").setup({
font = "Fira Code=34;Noto Emoji=34",
theme = "Catppuccin-mocha",
background = "#68677b",
pad_horiz = 100,
pad_vert = 80,
no_round_corner = false,
no_window_controls = false,
no_line_number = false,
line_pad = 0,
tab_width = 2,
language = function()
return vim.bo.filetype
end,
shadow_blur_radius = 16,
shadow_offset_x = 8,
shadow_offset_y = 8,
shadow_color = "#100808",
gobble = true,
to_clipboard = true,
window_title = function()
return vim.fn.fnamemodify(vim.api.nvim_buf_get_name(vim.api.nvim_get_current_buf()), ":t")
end,
})
end,
}

View File

@@ -0,0 +1,36 @@
return {
"mrjones2014/smart-splits.nvim",
enabled = true,
event = "VeryLazy",
keys = {
{ "<leader>wr", "<cmd>SmartResizeMode<cr>", desc = "Toggle Smart Resize Mode" },
},
config = function()
require("smart-splits").setup({
ignored_filetypes = {
"nofile",
"quickfix",
"prompt",
},
ignored_buftypes = { "NvimTree" },
default_amount = 3,
at_edge = "wrap",
move_cursor_same_row = false,
resize_mode = {
quit_key = "<ESC>",
resize_keys = { "h", "j", "k", "l" },
silent = false,
hooks = {
on_enter = nil,
on_leave = nil,
},
},
ignored_events = {
"BufEnter",
"WinEnter",
},
multiplexer_integration = "tmux",
disable_multiplexer_nav_when_zoomed = true,
})
end,
}

View File

@@ -0,0 +1,10 @@
-- A tree view for symbols
-- https://github.com/simrat39/symbols-outline.nvim
return {
"simrat39/symbols-outline.nvim",
config = function()
require("symbols-outline").setup({
width = 25,
})
end,
}

View File

@@ -0,0 +1,5 @@
-- Table Mode for instant table creation
-- https://github.com/dhruvasagar/vim-table-mode
return {
"dhruvasagar/vim-table-mode",
}

View File

@@ -0,0 +1,48 @@
-- Tailwind CSS
return {
{
"neovim/nvim-lspconfig",
opts = {
servers = {
tailwindcss = {},
},
},
},
{
"NvChad/nvim-colorizer.lua",
opts = {
user_default_options = {
tailwind = true,
},
},
{
"hrsh7th/nvim-cmp",
dependencies = {
{ "roobert/tailwindcss-colorizer-cmp.nvim", config = true },
},
opts = function(_, opts)
-- original LazyVim kind icon formatter
local format_kinds = opts.formatting.format
opts.formatting.format = function(entry, item)
format_kinds(entry, item) -- add icons
return require("tailwindcss-colorizer-cmp").formatter(entry, item)
end
end,
},
"laytan/tailwind-sorter.nvim",
dependencies = {
"nvim-treesitter/nvim-treesitter",
"nvim-lua/plenary.nvim",
},
build = "cd formatter && npm i && npm run build",
config = {
on_save_enabled = true,
on_save_pattern = { "*.html", "*.jsx", "*.tsx", "*.astro", "*.svelte" },
},
},
{
"luckasRanarison/tailwind-tools.nvim",
dependencies = { "nvim-treesitter/nvim-treesitter" },
opts = {},
},
}

View File

@@ -0,0 +1,21 @@
-- Telescope extention to switch between Headlines
-- https://github.com/crispgm/telescope-heading.nvim
return {
"telescope.nvim",
dependencies = {
"crispgm/telescope-heading.nvim",
keys = {
{ ";h", "<cmd>Telescope heading<cr>", desc = "Headlines" },
},
opts = {
extensions = {
heading = {
treesitter = true,
},
},
},
config = function()
require("telescope").load_extension("heading")
end,
},
}

View File

@@ -0,0 +1,26 @@
-- Telescope extension for a File Browser
-- https://github.com/nvim-telescope/telescope-file-browser.nvim
return {
"telescope.nvim",
dependencies = {
"nvim-telescope/telescope-file-browser.nvim",
keys = {
{
";t",
"<cmd>Telescope file_browser respect_gitignore=false hidden=true grouped=true<cr>",
desc = "File Browser",
},
},
opts = {
extensions = {
file_browser = {
theme = "ivy",
hijack_netrw = true,
},
},
},
config = function()
require("telescope").load_extension("file_browser")
end,
},
}

View File

@@ -0,0 +1,27 @@
-- Telescope extensionn that offers intelligent priorization
-- https://github.com/nvim-telescope/telescope-frecency.nvim
return {
"telescope.nvim",
dependencies = {
"nvim-telescope/telescope-frecency.nvim",
dependencies = {
"kkharji/sqlite.lua",
},
keys = {
{ ";mr", "<cmd>Telescope frecency<cr>", desc = "Most recently used files" },
},
opts = {
extensions = {
frecency = {
show_scores = false,
show_unindexed = true,
ignore_patterns = { "*.git/*", "*/tmp/*" },
disable_devicons = false,
},
},
},
config = function()
require("telescope").load_extension("frecency")
end,
},
}

View File

@@ -0,0 +1,21 @@
-- Telescope extension for a FZY style sorter that is compiled
-- https://github.com/nvim-telescope/telescope-fzy-native.nvim
return {
"telescope.nvim",
dependencies = {
"nvim-telescope/telescope-fzy-native.nvim",
opts = {
extensions = {
fzy_native = {
fuzzy = true,
override_generic_sorter = true,
override_file_sorter = true,
case_mode = "smart_case",
},
},
},
config = function()
require("telescope").load_extension("fzy_native")
end,
},
}

View File

@@ -0,0 +1,15 @@
-- Telescope extension to integrate with GitHub CLI
-- https://github.com/nvim-telescope/telescope-github.nvim
return {
"telescope.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-telescope/telescope-github.nvim",
keys = {
{ ";p", "<cmd>Telescope gh pull_request<cr>", desc = "GitHub Pull Requests" },
},
config = function()
require("telescope").load_extension("gh")
end,
},
}

View File

@@ -0,0 +1,12 @@
-- Import modules with ease
-- https://github.com/piersolenski/telescope-import.nvim
return {
"piersolenski/telescope-import.nvim",
dependencies = "nvim-telescope/telescope.nvim",
keys = {
{ ";i", "<cmd>Telescope import<cr>", desc = "Import Modules" },
},
config = function()
require("telescope").load_extension("import")
end,
}

View File

@@ -0,0 +1,21 @@
-- Telescope extension to search with arguments
-- https://github.com/nvim-telescope/telescope-live-grep-args.nvim
return {
"telescope.nvim",
dependencies = {
"nvim-telescope/telescope-live-grep-args.nvim",
opts = {
extensions = {
live_grep_args = {
auto_quoting = true,
},
},
},
keys = {
{ ";s", "<cmd>Telescope live_grep_args<cr>", desc = "Live Grep" },
},
config = function()
require("telescope").load_extension("live_grep_args")
end,
},
}

View File

@@ -0,0 +1,14 @@
-- Telescope plugin to search the node_modules directory
-- https://github.com/nvim-telescope/telescope-node-modules.nvim
return {
"telescope.nvim",
dependencies = {
"nvim-telescope/telescope-node-modules.nvim",
keys = {
{ ";N", "<cmd>Telescope node_modules list<cr>", desc = "Node Modules" },
},
config = function()
require("telescope").load_extension("node_modules")
end,
},
}

View File

@@ -0,0 +1,16 @@
-- Neovim plugin for fast file-finding
-- https://github.com/danielfalk/smart-open.nvim
return {
"danielfalk/smart-open.nvim",
branch = "0.2.x",
keys = {
{ ";o", "<cmd>Telescope smart_open<cr>", desc = "Smart Open" },
},
config = function()
require("telescope").load_extension("smart_open")
end,
dependencies = {
"kkharji/sqlite.lua",
{ "nvim-telescope/telescope-fzy-native.nvim" },
},
}

View File

@@ -0,0 +1,26 @@
-- Telescope extension to view and search the undo tree
-- https://github.com/debugloop/telescope-undo.nvim
return {
"nvim-telescope/telescope.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
"debugloop/telescope-undo.nvim",
},
keys = {
{ ";u", "<cmd>Telescope undo<cr>", desc = "Undo Tree" },
},
opts = {
extensions = {
undo = {
side_by_side = true,
layout_strategy = "vertical",
layout_config = {
preview_height = 0.8,
},
},
},
},
config = function()
require("telescope").load_extension("undo")
end,
}

View File

@@ -0,0 +1,19 @@
-- Find, Filter, Preview, Pick
-- https://github.com/nvim-telescope/telescope.nvim
return {
"telescope.nvim",
keys = {
{ ";a", "<cmd>Telescope find_files hidden=true<cr>", desc = "Find Files (hidden)" },
{ ";b", "<cmd>Telescope buffers previewer=false shorten_path=true theme=dropdown<cr>", desc = "Buffers" },
{ ";cs", "<cmd>Telescope spell_suggest<cr>", desc = "Spell Suggest" },
{ ";d", "<cmd>Telescope diagnostics<cr>", desc = "Diagnostics" },
{ ";f", "<cmd>Telescope find_files<cr>", desc = "Find Files" },
{ ";n", "<cmd>Telescope notify<cr>", desc = "Notify" },
{ ";r", "<cmd>Telescope resume<cr>", desc = "Resume" },
{ "<C-p>", "<cmd>Telescope find_files<cr>", desc = "Find Files" },
{ "<C-t>", "<cmd>Telescope<cr>", desc = "Telescope" },
{ "<M-b>", "<cmd>Telescope buffers previewer=false shorten_path=true theme=dropdown<cr>", desc = "Buffers" },
{ "<M-p>", "<cmd>Telescope find_files hidden=true<cr>", desc = "Find Files (hidden)" },
{ "\\\\", "<cmd>Telescope buffers previewer=false shorten_path=true theme=dropdown<cr>", desc = "Buffers" },
},
}

View File

@@ -0,0 +1,28 @@
-- TMUX commands manager
-- https://github.com/otavioschwanck/tmux-awesome-manager.nvim
return {
"otavioschwanck/tmux-awesome-manager.nvim",
keys = {
-- stylua: ignore
{ "<leader>sT", function() vim.cmd(":Telescope tmux-awesome-manager list_terms") end, desc = "TMUX Awesome Manager" },
},
config = function()
local tmux = require("tmux-awesome-manager")
tmux.setup({
per_project_commands = {
astro = { { cmd = "pnpm dev", name = "Astro Dev" } },
},
session_name = "Neovim Terminals",
project_open_as = "window",
default_size = "30%",
open_new_as = "window",
})
tmux.run_wk({ cmd = "pnpm dev", name = "Astro Development Server" })
tmux.run_wk({ cmd = "yarn develop", name = "Brewery Server" })
tmux.run_wk({ cmd = "MD=${PWD}/packages/xdl/ yarn dev", name = "Brewery Fast Server" })
tmux.run_wk({ cmd = "yarn test:unit -u", name = "Brewery Unit Tests" })
end,
}

View File

@@ -0,0 +1,6 @@
-- Seamless navigation between tmux panes and vim splits
-- https://github.com/christoomey/vim-tmux-navigator
return {
"christoomey/vim-tmux-navigator",
event = "VeryLazy",
}

View File

@@ -0,0 +1,7 @@
return {
"folke/todo-comments.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
keys = {
{ ";O", "<cmd>TodoTelescope<cr>", desc = "Todo Comments" },
},
}

View File

@@ -0,0 +1,13 @@
-- Remove all background colors to make Neovim transparent
-- https://github.com/xiyaowong/nvim-transparent
return {
"xiyaowong/nvim-transparent",
opts = {
extra_groups = {
"TelescopeBorder",
"TelescopeNormal",
-- "NeoTreeNormal",
-- "NeoTreeNormalNC",
},
},
}

View File

@@ -0,0 +1,55 @@
-- Nvim Treesitter configurations
-- https://github.com/nvim-treesitter/nvim-treesitter
return {
"nvim-treesitter/nvim-treesitter",
depencendies = {
"nvim-treesitter/playground",
},
opts = {
indent = { enable = false },
ensure_installed = {
"astro",
"bash",
"css",
"fish",
"gitignore",
"go",
"gomod",
"gosum",
"gowork",
"graphql",
"html",
"http",
"javascript",
"json",
"lua",
"markdown",
"markdown_inline",
"python",
"query",
"regex",
"scss",
"sql",
"svelte",
"tsx",
"typescript",
"vim",
"vimdoc",
"yaml",
},
},
config = function(_, opts)
require("nvim-treesitter.configs").setup(opts)
-- Add custom filetypes
vim.filetype.add({
extension = {
mdx = "mdx",
rss = "rss",
},
})
vim.treesitter.language.register("markdown", "mdx")
vim.treesitter.language.register("xml", "rss")
end,
}

View File

@@ -0,0 +1,8 @@
-- Distraction-free coding
-- https://github.com/folke/zen-mode.nvim
return {
"folke/twilight.nvim",
config = function()
require("twilight").setup()
end,
}

View File

@@ -0,0 +1,79 @@
-- Not UFO in the sky, but an ultra fold in Neovim.
-- https://github.com/kevinhwang91/nvim-ufo
return {
"kevinhwang91/nvim-ufo",
dependencies = "kevinhwang91/promise-async",
config = function()
vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]
vim.o.foldcolumn = "0"
vim.o.foldlevel = 99
vim.o.foldlevelstart = 100
vim.o.foldenable = true
local handler = function(virtText, lnum, endLnum, width, truncate)
local newVirtText = {}
local suffix = (" 󰁂 %d "):format(endLnum - lnum)
local sufWidth = vim.fn.strdisplaywidth(suffix)
local targetWidth = width - sufWidth
local curWidth = 0
for _, chunk in ipairs(virtText) do
local chunkText = chunk[1]
local chunkWidth = vim.fn.strdisplaywidth(chunkText)
if targetWidth > curWidth + chunkWidth then
table.insert(newVirtText, chunk)
else
chunkText = truncate(chunkText, targetWidth - curWidth)
local hlGroup = chunk[2]
table.insert(newVirtText, { chunkText, hlGroup })
chunkWidth = vim.fn.strdisplaywidth(chunkText)
if curWidth + chunkWidth < targetWidth then
suffix = suffix .. (" "):rep(targetWidth - curWidth - chunkWidth)
end
break
end
curWidth = curWidth + chunkWidth
end
table.insert(newVirtText, { suffix, "MoreMsg" })
return newVirtText
end
require("ufo").setup({
fold_virt_text_handler = handler,
close_fold_kinds_for_ft = {
default = { "imports", "comment" },
},
open_fold_hl_timeout = 300,
enable_get_fold_virt_text = false,
preview = {},
provider_selector = function()
return { "lsp", "indent" }
end,
})
end,
keys = {
{
"zR",
function()
require("ufo").openAllFolds()
end,
desc = "Open all folds",
},
{
"zM",
function()
require("ufo").closeAllFolds()
end,
desc = "Close all folds",
},
{
"zK",
function()
local winid = require("ufo").peekFoldedLinesUnderCursor()
if not winid then
vim.lsp.buf.hover()
end
end,
desc = "Peek fold",
},
},
}

View File

@@ -0,0 +1,8 @@
return {
"chrisgrieser/nvim-various-textobjs",
config = function()
require("various-textobjs").setup({
useDefaultKeymaps = true,
})
end,
}

View File

@@ -0,0 +1,5 @@
-- Vim-Nix
-- https://github.com/LnL7/vim-nix
return {
"LnL7/vim-nix",
}

View File

@@ -0,0 +1,10 @@
-- Easily interact with tmux from vim
-- https://github.com/preservim/vimux
return {
"preservim/vimux",
config = function()
vim.g.VimuxHeight = "30"
vim.g.VimuxOrientation = "h"
vim.g.VimuxUseNearestPane = 0
end,
}

View File

@@ -0,0 +1,5 @@
-- vim-visincr
-- https://github.com/jikkujose/vim-visincr
return {
"jikkujose/vim-visincr",
}

View File

@@ -0,0 +1,5 @@
-- Multiple cursors
-- https://github.com/mg979/vim-visual-multi
return {
"mg979/vim-visual-multi",
}

Some files were not shown because too many files have changed in this diff Show More