feat(lua): add configuration files for catppuccino theme, cheatsheet, comment, conform, dap, flutter-tools, gitignore, gitsigns, highlight-colors, image, incline, and indent-blank-line plugins.

feat(lsp-config.lua): Add configurations for various language servers and setup custom key mappings and settings for improved development experience.

feat(lualine.lua, mason.lua, mini-diff.lua, mini.lua, notify.lua, nvim-bqf.lua, nvim-cmp.lua, nvim-silicon.lua, nvim-surround.lua): Add new Lua files and configurations for lualine theme, mason setup, mini-diff, mini map integrations, notify setup, nvim-bqf, nvim-cmp autocompletion, nvim-silicon screenshot, and nvim-surround setup.

feat(nvim-tree.lua): add custom configurations for Nvim Tree plugin
feat(nvim-treesitter-context.lua): implement Treesitter Context plugin setup
feat(nvim-treesitter.lua): configure Nvim Treesitter with specific parsers and features
feat(poet-v.lua): set up Poet-V plugin with custom settings
feat(smear-cursor.lua): integrate Smear Cursor plugin with defined options
feat(tailwind-sorter.lua): initialize Tailwind Sorter plugin with save patterns and settings

feat(telescope.lua): add custom settings and extensions to improve Telescope functionality

feat(venv-selector.lua): add venv-selector setup and key mappings for VenvSelector and VenvSelectCached to enhance venv management.
This commit is contained in:
David Ibia
2025-07-21 17:01:26 +01:00
parent e9d9d2ac3b
commit 32d652a93f
35 changed files with 1327 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
local theme = require("catppuccino")
theme.setup({
flavour = "mocha",
transparent_background = true,
dim_inactive = {
enabled = true,
shade = "dark",
percentage = 0.50,
},
})

View File

@@ -0,0 +1,9 @@
local cheatsheet = require("cheatsheet")
cheatsheet.setup({})
local opts = { noremap = true, silent = true }
opts.desc = "Show Cheatsheet"
vim.keymap.set("n", "<leader>\\", "<cmd>Cheatsheet<CR>", opts) -- toggle file explorer

View File

@@ -0,0 +1,3 @@
local comment = require("Comment")
comment.setup()

View File

@@ -0,0 +1,33 @@
local conform = require("conform")
conform.setup({
format_on_save = function(bufnr)
local disable_filetypes = {}
return {
timeout_ms = 500,
lsp_fallback = not disable_filetypes[vim.bo[bufnr].filetype],
}
end,
formatters_by_ft = {
sh = { "shfmt" },
lua = { "stylua" },
-- Conform will run multiple formatters sequentially
python = {
-- To fix auto-fixable lint errors.
"ruff_fix",
-- To run the Ruff formatter.
"ruff_format",
-- To organize the imports.
"ruff_organize_imports",
},
-- Use a sub-list to run only the first available formatter
javascript = { "biome" },
astro = { "prettierd", "prettier", "biome" },
vue = { "prettierd", "prettier" },
proto = { "buf" },
yaml = { "prettierd", "prettier" },
},
})
-- vim.o.formatexpr = "v:lua.require'conform'.formatexpr()"

View File

@@ -0,0 +1,31 @@
local dap = require("dap")
local dapui = require("dapui")
local virtual_text = require("nvim-dap-virtual-text")
-- Setup Virtual Text
virtual_text.setup({
prefix = "",
hl = "Comment",
lines = 3,
enabled = true,
})
dapui.setup()
dap.listeners.after.event_initialized["dapui_config"] = function()
dapui.open()
end
dap.listeners.before.event_terminated["dapui_config"] = function()
dapui.close()
end
dap.listeners.before.event_exited["dapui_config"] = function()
dapui.close()
end
-- Setup Mappings
local opts = { noremap = true, silent = true }
opts.desc = "Toggle breakpoint"
vim.keymap.set("n", "<leader>db", "<cmd> DapToggleBreakpoint<CR>", opts)

View File

@@ -0,0 +1,12 @@
local flutter_tools = require('flutter-tools')
flutter_tools.setup({
decorations = {
statusline = {
app_version = true,
device = true,
project_config = true,
}
},
fvm = true,
})

View File

@@ -0,0 +1,18 @@
local gitignore = require("gitignore")
local GetProjectRoot = require("absolute.utils.get-git-root")
-- Keymaps
local opts = { noremap = true, silent = true }
opts.desc = "GitIgnore: Generate .gitignore"
vim.keymap.set("n", "<leader>gi", function()
local path = GetProjectRoot()
gitignore.generate(path)
end, opts)
-- Global Settings
vim.g.gitignore_nvim_overwrite = true

View File

@@ -0,0 +1,3 @@
local gitsigns = require("gitsigns")
gitsigns.setup()

View File

@@ -0,0 +1,7 @@
local highlight = require("nvim-highlight-colors")
highlight.setup({
enable_tailwind = true,
})
highlight.turnOn()

View File

@@ -0,0 +1,37 @@
require("image").setup({
backend = "kitty",
processor = "magick_rock", -- or "magick_cli"
integrations = {
markdown = {
enabled = true,
clear_in_insert_mode = false,
download_remote_images = true,
only_render_image_at_cursor = false,
floating_windows = true, -- if true, images will be rendered in floating markdown windows
filetypes = { "markdown", "vimwiki" }, -- markdown extensions (ie. quarto) can go here
},
neorg = {
enabled = true,
filetypes = { "norg" },
},
typst = {
enabled = true,
filetypes = { "typst" },
},
html = {
enabled = false,
},
css = {
enabled = false,
},
},
max_width = nil,
max_height = nil,
max_width_window_percentage = nil,
max_height_window_percentage = 50,
window_overlap_clear_enabled = true, -- toggles images when windows are overlapped
window_overlap_clear_ft_ignore = { "cmp_menu", "cmp_docs", "snacks_notif", "scrollview", "scrollview_sign" },
editor_only_render_when_focused = true, -- auto show/hide images when the editor gains/looses focus
tmux_show_only_in_active_window = true, -- auto show/hide images in the correct Tmux window (needs visual-activity off)
hijack_file_patterns = { "*.png", "*.jpg", "*.jpeg", "*.gif", "*.webp", "*.avif", "*.svg" }, -- render image files as images when opened
})

View File

@@ -0,0 +1,45 @@
local incline = require("incline")
local helpers = require("incline.helpers")
local devicons = require("nvim-web-devicons")
local function shortenPath(str, max)
if #str > max then
local start = #str - max + 1
return "..." .. string.sub(str, start)
end
return str
end
incline.setup({
hide = {
cursorline = true,
},
window = {
padding = 0,
margin = { horizontal = 0 },
placement = {
horizontal = "right",
},
},
render = function(props)
local filename = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(props.buf), ":t")
local filepath = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(props.buf), ":p")
local ft_icon, ft_color = devicons.get_icon_color(filename)
local modified = vim.bo[props.buf].modified
local path = vim.fn.fnamemodify(filepath, ":~:.") -- Get relative path
path = shortenPath(path, 30)
-- Shorten path from the left if the entire line is longer than 100 characters
--
return {
ft_icon and { " ", ft_icon, " ", guibg = ft_color, guifg = helpers.contrast_color(ft_color) } or "",
" ",
{ path, gui = modified and "bold,italic" or "bold" },
" ",
guibg = "#44406e",
}
end,
})

View File

@@ -0,0 +1 @@
require("ibl").setup()

View File

@@ -0,0 +1,336 @@
-- Setup language servers.
local conform = require("conform")
local lspconfig = require("lspconfig")
local cmp_nvim_lsp = require("cmp_nvim_lsp")
local opts = { noremap = true, silent = true }
local global_node_modules = vim.fn.system("npm root -g")
-- client, buffer
local on_attach = function(client, bufnr)
opts.buffer = bufnr
-- Enable completion triggered by <c-x><c-o>
vim.bo[opts.buffer].omnifunc = "v:lua.vim.lsp.omnifunc"
opts.desc = "Go to declaration"
vim.keymap.set("n", "gD", vim.lsp.buf.declaration, opts)
opts.desc = "Go to definitions"
vim.keymap.set("n", "gd", "<cmd>Telescope lsp_definitions<CR>", opts)
opts.desc = "Show documentation for what is under cursor"
vim.keymap.set("n", "K", vim.lsp.buf.hover, opts)
opts.desc = "Show LSP Implementation"
vim.keymap.set("n", "gi", "<cmd>Telescope lsp_implementations<CR>", opts)
opts.desc = "Get Help"
vim.keymap.set("n", "<leader>gh", vim.lsp.buf.signature_help, opts)
-- vim.keymap.set('n', '<leader>wa', vim.lsp.buf.add_workspace_folder, opts)
-- vim.keymap.set('n', '<leader>wr', vim.lsp.buf.remove_workspace_folder, opts)
-- vim.keymap.set('n', '<leader>wl', function()
-- print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
-- end, opts)
opts.desc = "Show LSP type definitions"
vim.keymap.set("n", "gt", "<cmd>Telescope lsp_type_definitions<CR>", opts)
opts.desc = "Smart rename"
vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts)
opts.desc = "See available code actions"
vim.keymap.set({ "n", "v" }, "<leader>ca", vim.lsp.buf.code_action, opts)
opts.desc = "Show LSP references"
vim.keymap.set("n", "<leader>cr", "<cmd>Telescope lsp_references<CR>", opts)
opts.desc = "Format File"
vim.keymap.set({ "n", "v" }, "<leader>f", function()
-- vim.lsp.buf.format({ async = true })
conform.format({
bufnr = opts.buffer,
async = true,
lsp_fallback = true,
})
end, opts)
opts.desc = "Restart LSP"
vim.keymap.set("n", "<leader>rs", "<cmd>LspRestart<CR>", opts)
-- LSP Only Settings
-- Ruff & Pyright behaviour
if client.name == "ruff" then
-- Disable hover in favor of Pyright
client.server_capabilities.hoverProvider = false
end
end
local capabilities = cmp_nvim_lsp.default_capabilities()
-- Change the Diagnostic symbols in the sign column (gutter)
local signs = {
Error = "",
Warn = "",
Hint = "󰠠 ",
Info = "",
}
for type, icon in pairs(signs) do
local hl = "DiagnosticSign" .. type
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" })
end
-- configure html server
lspconfig["html"].setup({
capabilities = capabilities,
on_attach = on_attach,
})
-- configure typescript server with plugin
lspconfig["ts_ls"].setup({
capabilities = capabilities,
on_attach = on_attach,
init_options = {
plugins = {
{
name = "@vue/typescript-plugin",
location = global_node_modules .. "@vue/typescript-plugin",
languages = { "vue" },
},
},
},
filetypes = { "typescript", "javascript", "javascriptreact", "typescriptreact", "vue" },
})
-- configure css server
lspconfig["cssls"].setup({
capabilities = capabilities,
on_attach = on_attach,
})
-- configure tailwindcss server
lspconfig["tailwindcss"].setup({
capabilities = capabilities,
on_attach = on_attach,
filetypes = { "html", "svelte", "vue", "astro" },
})
-- configure svelte server
lspconfig["svelte"].setup({
capabilities = capabilities,
on_attach = function(client, bufnr)
on_attach(client, bufnr)
vim.api.nvim_create_autocmd("BufWritePost", {
pattern = { "*.js", "*.ts" },
callback = function(ctx)
if client.name == "svelte" then
client.notify("$/onDidChangeTsOrJsFile", { uri = ctx.file })
end
end,
})
end,
})
-- configure emmet language server
lspconfig["emmet_ls"].setup({
capabilities = capabilities,
on_attach = on_attach,
filetypes = {
"html",
"typescriptreact",
"javascriptreact",
"astro",
"css",
"sass",
"scss",
"less",
"svelte",
"vue",
},
})
-- configure ruff server
lspconfig["ruff"].setup({
capabilities = capabilities,
on_attach = on_attach,
})
-- configure pyright server
lspconfig["pyright"].setup({
capabilities = capabilities,
on_attach = on_attach,
filetypes = { "python" },
settings = {
python = {
analysis = {
autoSearchPaths = true,
useLibraryCodeForTypes = true,
diagnosticMode = "workspace",
},
},
},
})
-- configure docker server
lspconfig["dockerls"].setup({
capabilities = capabilities,
on_attach = on_attach,
})
-- configure json server
lspconfig["jsonls"].setup({
capabilities = capabilities,
on_attach = on_attach,
})
-- configure vue server
lspconfig["volar"].setup({
capabilities = capabilities,
on_attach = on_attach,
filetypes = { "vue" },
init_options = {
vue = {
hybridMode = false,
},
},
settings = {
typescript = {
inlayHints = {
enumMemberValues = {
enabled = true,
},
functionLikeReturnTypes = {
enabled = true,
},
propertyDeclarationTypes = {
enabled = true,
},
parameterTypes = {
enabled = true,
suppressWhenArgumentMatchesName = true,
},
variableTypes = {
enabled = true,
},
},
},
},
})
-- configure rust server
lspconfig.rust_analyzer.setup({
-- Server-specific settings. See `:help lspconfig-setup`
on_attach = on_attach,
capabilities = capabilities,
settings = {
["rust-analyzer"] = {},
},
})
-- configure lua server (with special settings)
lspconfig["lua_ls"].setup({
capabilities = capabilities,
on_attach = on_attach,
settings = { -- custom settings for lua
Lua = {
-- make the language server recognize "vim" global
diagnostics = {
globals = { "vim" },
},
workspace = {
-- make language server aware of runtime files
library = {
[vim.fn.expand("$VIMRUNTIME/lua")] = true,
[vim.fn.stdpath("config") .. "/lua"] = true,
},
},
},
},
})
-- configure css server
lspconfig["cssls"].setup({
capabilities = capabilities,
on_attach = on_attach,
})
--configure docker file server
lspconfig["dockerls"].setup({
capabilities = capabilities,
on_attach = on_attach,
})
-- configure docker compose server
lspconfig["docker_compose_language_service"].setup({
capabilities = capabilities,
on_attach = on_attach,
})
-- configure eslint server
lspconfig["eslint"].setup({
capabilities = capabilities,
on_attach = on_attach,
})
-- configure astro server
lspconfig["astro"].setup({
capabilities = capabilities,
on_attach = on_attach,
-- init_options = {
-- typescript = {
-- tsdk = ResolveTypescriptServer(),
-- },
-- },
})
-- configure kotlin server
lspconfig["kotlin_language_server"].setup({
capabilities = capabilities,
on_attach = on_attach,
})
-- configure clang server
lspconfig["clangd"].setup({
cmd = { "clangd", "--compile-commands-dir=./", "--background-index=false" },
capabilities = capabilities,
on_attach = on_attach,
filetypes = { "c", "cpp", "objc", "objcpp" },
})
-- configure bufls server
lspconfig["buf_ls"].setup({
capabilities = capabilities,
on_attach = on_attach,
filetypes = { "proto" },
})
-- configure arduino language server
lspconfig["arduino_language_server"].setup({
capabilities = capabilities,
on_attach = on_attach,
})
-- configure biome server
lspconfig["biome"].setup({
capabilities = capabilities,
on_attach = on_attach,
filetypes = {
"javascript",
"javascriptreact",
"json",
"jsonc",
"typescript",
"typescript.tsx",
"typescriptreact",
"astro",
"svelte",
"vue",
},
})

View File

@@ -0,0 +1,97 @@
local lualine = require("lualine")
local lazy_status = require("lazy.status") -- to configure lazy pending updates count
local colors = {
blue = "#65D1FF",
green = "#3EFFDC",
violet = "#FF61EF",
yellow = "#FFDA7B",
red = "#FF4A4A",
fg = "#c3ccdc",
bg = "#112638",
inactive_bg = "#2c3043",
}
local my_lualine_theme = {
normal = {
a = { bg = colors.blue, fg = colors.bg, gui = "bold" },
b = { bg = colors.bg, fg = colors.fg },
c = { bg = colors.bg, fg = colors.fg },
},
insert = {
a = { bg = colors.green, fg = colors.bg, gui = "bold" },
b = { bg = colors.bg, fg = colors.fg },
c = { bg = colors.bg, fg = colors.fg },
},
visual = {
a = { bg = colors.violet, fg = colors.bg, gui = "bold" },
b = { bg = colors.bg, fg = colors.fg },
c = { bg = colors.bg, fg = colors.fg },
},
command = {
a = { bg = colors.yellow, fg = colors.bg, gui = "bold" },
b = { bg = colors.bg, fg = colors.fg },
c = { bg = colors.bg, fg = colors.fg },
},
replace = {
a = { bg = colors.red, fg = colors.bg, gui = "bold" },
b = { bg = colors.bg, fg = colors.fg },
c = { bg = colors.bg, fg = colors.fg },
},
inactive = {
a = { bg = colors.inactive_bg, fg = colors.semilightgray, gui = "bold" },
b = { bg = colors.inactive_bg, fg = colors.semilightgray },
c = { bg = colors.inactive_bg, fg = colors.semilightgray },
},
}
function GetPoetvStatusLine()
-- Get the poetv statusline
-- If poetv is not active, return empty string
if IsPoetvActive() then
local poetv_name = vim.g.poetv_name
local poetv_statusline_symbol = vim.g.poetv_statusline_symbol
local result = string.sub(poetv_name, 1, 20) .. " " .. poetv_statusline_symbol
return result
else
return ""
end
end
function IsPoetvActive()
-- Check if vim.g.poetv_name exists
-- If it does, then poetv is active
if vim.g.poetv_name ~= nil then
return true
else
return false
end
end
-- configure lualine with modified theme
lualine.setup({
options = {
theme = my_lualine_theme,
},
sections = {
lualine_x = {
{
GetPoetvStatusLine,
cond = IsPoetvActive,
color = { fg = "#ff9e64" },
},
{
lazy_status.updates,
cond = lazy_status.has_updates,
color = { fg = "#ff9e64" },
},
{ "encoding" },
{ "fileformat" },
{ "filetype" },
},
},
})

View File

@@ -0,0 +1,20 @@
require("mason").setup()
require("mason-lspconfig").setup({
ensure_installed = {
"ts_ls",
"astro",
"biome",
"rust_analyzer",
"html",
"emmet_ls",
"lua_ls",
"arduino_language_server",
"clangd",
"tailwindcss",
"svelte",
"cssls",
"jedi_language_server",
"kotlin_language_server",
},
automatic_enable = false,
})

View File

@@ -0,0 +1,6 @@
local diff = require("mini.diff")
diff.setup({
-- Disabled by default
source = diff.gen_source.none(),
})

View File

@@ -0,0 +1,11 @@
local map = require("mini.map")
require("mini.map").setup({
integrations = {
map.gen_integration.builtin_search(),
map.gen_integration.gitsigns(),
map.gen_integration.diagnostic()
},
})
vim.keymap.set("n", "<leader>mc", map.close)
vim.keymap.set("n", "<leader>mo", map.open)

View File

@@ -0,0 +1,25 @@
local notify = require("notify")
notify.setup({
background_colour = "#000000",
fps = 15,
icons = {
DEBUG = "",
ERROR = "",
INFO = "",
TRACE = "",
WARN = "",
},
level = 2,
minimum_width = 50,
render = "default",
stages = "static",
time_formats = {
notification = "%T",
notification_history = "%FT%T",
},
timeout = 3000,
top_down = true,
})
vim.notify = notify

View File

View File

@@ -0,0 +1,72 @@
local cmp = require("cmp")
local types = require("cmp.types")
local luasnip = require("luasnip")
local lspkind = require("lspkind")
-- loads vscode style snippets from installed plugins (e.g. friendly-snippets)
require("luasnip.loaders.from_vscode").lazy_load()
cmp.setup({
completion = {
completeopt = "menu,menuone,preview,noinsert,noselect",
autocomplete = { types.cmp.TriggerEvent.TextChanged },
},
window = {
documentation = {
border = { "", "", "", "", "", "", "", "" },
winhighlight = "Normal:CmpPmenu,FloatBorder:CmpPmenuBorder,CursorLine:PmenuSel,Search:None",
},
completion = {
side_padding = 1,
border = { "", "", "", "", "", "", "", "" },
winhighlight = "Normal:CmpPmenu,FloatBorder:CmpPmenuBorder,CursorLine:PmenuSel,Search:None",
scrollbar = false,
},
},
snippet = { -- configure how nvim-cmp interacts with snippet engine
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
["<C-.>"] = cmp.mapping.complete(), -- show completion suggestions
["C-<BS>"] = cmp.mapping.abort(), -- close completion menu
["<CR>"] = cmp.mapping.confirm({ select = true }), -- accept current selection
}),
-- sources for autocompletion
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "codecompanion" }, -- code companion for AI-assisted coding
{ name = "luasnip" }, -- snippets
{ name = "buffer" }, -- text within current buffer
{ name = "path" }, -- file system paths,
{ name = "nvim_lsp_signature_help" },
}),
-- configure lspkind for vs-code like pictograms in completion menu
formatting = {
format = lspkind.cmp_format({
maxwidth = 50,
ellipsis_char = "...",
}),
},
})
-- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline({ "/", "?" }, {
mapping = cmp.mapping.preset.cmdline(),
sources = {
{ name = "buffer" },
},
})
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline(":", {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({
{ name = "path" },
}, {
{ name = "cmdline" },
}),
matching = { disallow_symbol_nonprefix_matching = false },
})

View File

@@ -0,0 +1,57 @@
local silicon = require("silicon")
local current_os = require("absolute.utils.detect-os")
local get_git_root = require("absolute.utils.get-git-root")
local os_name = current_os.detect()
local supported_os = current_os.supported
local function generate_file_name()
-- Generate a file name
local file_name = os.date("!%Y-%m-%dT%H-%M-%S") .. "_code.png"
-- Project root
local project_root = get_git_root()
-- Create screenshots directory if it doesn't exist in the local directory
local screenshot_dir = project_root .. "/Screenshots"
if vim.fn.isdirectory(screenshot_dir) == 0 then
vim.fn.mkdir(screenshot_dir, "p")
end
-- Return the full path to the file
return screenshot_dir .. "/" .. file_name
end
function Open_local_screenshot_folder()
local project_root = get_git_root()
local screenshot_dir = project_root .. "/Screenshots"
if os_name == supported_os.MACOS then
vim.fn.jobstart("open " .. screenshot_dir, { detach = true })
return
end
if os_name == supported_os.UNIX then
vim.fn.jobstart("xdg-open " .. screenshot_dir, { detach = true })
return
end
if os_name == supported_os.WINDOWS then
vim.fn.jobstart("explorer " .. screenshot_dir, { detach = true })
return
end
end
-- Keymaps
local opts = { noremap = true, silent = true }
opts.desc = "Silicon: Create screenshot of highlighted code"
vim.api.nvim_set_keymap("v", "<leader>sc", ":'<,'>Silicon<CR>", opts)
opts.desc = "Silicon: Open screenshots directory"
vim.api.nvim_set_keymap("n", "<leader>so", "<cmd>lua Open_local_screenshot_folder()<cr>", opts)
silicon.setup({
font = "JetBrains Mono=34;Noto Emoji",
output = generate_file_name,
})

View File

@@ -0,0 +1,3 @@
local surround = require("nvim-surround")
surround.setup({})

View File

@@ -0,0 +1,49 @@
local nvimtree = require("absolute.disabled.nvim-tree")
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
vim.cmd([[ highlight NvimTreeIndentMarker guifg=#3FC5FF ]])
vim.cmd([[ highlight NvimTreeFolderArrowClosed guifg=#3FC5FF ]])
vim.cmd([[ highlight NvimTreeFolderArrowOpen guifg=#3FC5FF ]])
nvimtree.setup({
view = {
width = 45,
relativenumber = true,
},
update_focused_file = {
enable = true,
},
renderer = {
indent_markers = {
enable = true,
},
icons = {
glyphs = {
folder = {
arrow_closed = "", -- arrow when folder is closed
arrow_open = "", -- arrow when folder is open
},
},
},
},
-- disable window_picker for
-- explorer to work well with
-- window splits
actions = {
open_file = {
window_picker = {
enable = false,
},
},
},
filters = {
custom = { ".DS_Store" },
},
git = {
ignore = false,
},
})

View File

@@ -0,0 +1,24 @@
local treesittercontext = require("treesitter-context")
treesittercontext.setup({
enable = true, -- Enable this plugin (Can be enabled/disabled later via commands)
max_lines = 5, -- How many lines the window should span. Values <= 0 mean no limit.
min_window_height = 0, -- Minimum editor window height to enable context. Values <= 0 mean no limit.
line_numbers = true,
multiline_threshold = 20, -- Maximum number of lines to show for a single context
trim_scope = "outer", -- Which context lines to discard if `max_lines` is exceeded. Choices: 'inner', 'outer'
mode = "cursor", -- Line used to calculate context. Choices: 'cursor', 'topline'
-- Separator between context and content. Should be a single character string, like '-'.
-- When separator is set, the context will only show up when there are at least 2 lines above cursorline.
separator = nil,
zindex = 20, -- The Z-index of the context window
on_attach = nil, -- (fun(buf: integer): boolean) return false to disable attaching
})
local opts = { silent = true }
opts.desc = "Treesitter Context: Go to Previous Context"
vim.keymap.set("n", "[c", function()
treesittercontext.go_to_context(vim.v.count1)
end, opts)

View File

@@ -0,0 +1,71 @@
require("nvim-treesitter.configs").setup({
-- A list of parser names, or "all" (the five listed parsers should always be installed)
ensure_installed = {
"rust",
"javascript",
"typescript",
"python",
"proto",
"c",
"lua",
"vim",
"vimdoc",
"query",
"markdown_inline",
"markdown",
},
-- Install parsers synchronously (only applied to `ensure_installed`)
sync_install = false,
-- Automatically install missing parsers when entering buffer
-- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally
auto_install = true,
---- If you need to change the installation directory of the parsers (see -> Advanced Setup)
-- parser_install_dir = "/some/path/to/store/parsers", -- Remember to run vim.opt.runtimepath:append("/some/path/to/store/parsers")!
highlight = {
enable = true,
-- Set this to `true` if you depend on 'syntax' being enabled (like for indentation).
-- Using this option may slow down your editor, and you may see some duplicate highlights.
-- Instead of true it can also be a list of languages
additional_vim_regex_highlighting = false,
disable = { "php" },
},
textobjects = {
move = {
enable = true,
set_jumps = false, -- you can change this if you want.
goto_next_start = {
--- ... other keymaps
["]b"] = { query = "@code_cell.inner", desc = "next code block" },
},
goto_previous_start = {
--- ... other keymaps
["[b"] = { query = "@code_cell.inner", desc = "previous code block" },
},
},
select = {
enable = true,
lookahead = true, -- you can change this if you want
keymaps = {
--- ... other keymaps
["ib"] = { query = "@code_cell.inner", desc = "in block" },
["ab"] = { query = "@code_cell.outer", desc = "around block" },
},
},
swap = { -- Swap only works with code blocks that are under the same
-- markdown header
enable = true,
swap_next = {
--- ... other keymap
["<leader>sbl"] = "@code_cell.outer",
},
swap_previous = {
--- ... other keymap
["<leader>sbh"] = "@code_cell.outer",
},
},
},
})

View File

@@ -0,0 +1,20 @@
vim.g.poetv_executables = { "poetry" }
vim.g.poetv_auto_activate = 0
vim.g.poetv_set_environment = 1
vim.g.poetv_statusline_symbol = "🐍"
-- Setup Autocommands
vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, {
pattern = { "*/.venv/*", "*.py" },
callback = function()
-- check if poetv is activated
if vim.g.poetv_name ~= nil then
return
else
vim.cmd([[ PoetvActivate ]])
vim.cmd([[ LspRestart ]])
end
end,
})

View File

@@ -0,0 +1,10 @@
local smear_cursor = require("smear_cursor")
smear_cursor.setup({
stiffness = 0.5,
trailing_stiffness = 0.49,
never_draw_over_target = false,
smear_insert_mode = false,
smear_between_buffers = true,
cursor_color = "#7DF9FF",
})

View File

@@ -0,0 +1,6 @@
local tws = require("tailwind-sorter")
tws.setup({
on_save_enabled = true,
on_save_pattern = { "*.html", "*.js", "*.jsx", "*.tsx", "*.twig", "*.hbs", "*.php", "*.heex", "*.astro", "*.vue" }, -- T
})

View File

@@ -0,0 +1,182 @@
local telescope = require("telescope")
local builtin = require("telescope.builtin")
local actions = require("telescope.actions")
local trouble = require("trouble.sources.telescope")
local file_browser_actions = require("telescope._extensions.file_browser.actions")
local live_grep_shortcuts = require("telescope-live-grep-args.shortcuts")
local live_grep_actions = require("telescope-live-grep-args.actions")
local image_preview = require("absolute.utils.telescope_image_preview")
-- local function chafa_previewer_mime_hook(filepath, bufnr, opts)
-- local is_image = function(current_filepath)
-- local image_extensions = { "png", "jpg", "jpeg", "gif" } -- Supported image formats
-- local split_path = vim.split(current_filepath:lower(), ".", { plain = true })
-- local extension = split_path[#split_path]
-- return vim.tbl_contains(image_extensions, extension)
-- end
-- if is_image(filepath) then
-- local term = vim.api.nvim_open_term(bufnr, {})
-- local function send_output(_, data, _)
-- for _, d in ipairs(data) do
-- vim.api.nvim_chan_send(term, d .. "\r\n")
-- end
-- end
-- vim.fn.jobstart("chafa --passthrough tmux --exact-size off --format=symbols " .. filepath, {
-- on_stdout = send_output,
-- stdout_buffered = true,
-- })
-- else
-- require("telescope.previewers.utils").set_preview_message(bufnr, opts.winid, "Binary cannot be previewed")
-- end
-- end
telescope.setup({
defaults = {
file_previewer = image_preview.file_previewer,
buffer_previewer_maker = image_preview.buffer_previewer_maker,
vimgrep_arguments = {
"rg",
"--color=never",
"--no-heading",
"--with-filename",
"--line-number",
"--column",
"--smart-case",
"--follow",
"--hidden",
"--glob=!.git/",
},
mappings = {
i = {
["<C-t>"] = trouble.open,
["<C-q>"] = actions.send_to_qflist,
},
n = {
["<C-t>"] = trouble.open,
["<C-q>"] = actions.send_to_qflist,
},
},
},
extensions = {
media_files = {
filetypes = { "png", "webp", "jpg", "jpeg", "svg" },
find_cmd = "rg",
},
live_grep_args = {
auto_quoting = false,
mappings = {
i = {
["C-space"] = live_grep_actions.to_fuzzy_refine,
},
},
},
file_browser = {
hijack_netrw = true,
hide_parent_dir = true,
depth = 1,
respect_gitignore = vim.fn.executable("fd") == 1,
hidden = { file_browser = true, folder_browser = false },
auto_depth = false,
browse_files = require("telescope._extensions.file_browser.finders").browse_files,
display_stat = {
date = true,
size = true,
mode = false,
},
use_fd = true,
git_status = true,
mappings = {
["i"] = {
["<A-c>"] = file_browser_actions.create,
["<S-CR>"] = file_browser_actions.create_from_prompt,
["<A-r>"] = file_browser_actions.rename,
["<A-m>"] = file_browser_actions.move,
["<A-y>"] = file_browser_actions.copy,
["<A-d>"] = file_browser_actions.remove,
["<C-o>"] = file_browser_actions.open,
["<C-g>"] = file_browser_actions.goto_parent_dir,
["<C-e>"] = file_browser_actions.goto_home_dir,
["<C-w>"] = file_browser_actions.goto_cwd,
["<C-t>"] = file_browser_actions.change_cwd,
["<C-f>"] = file_browser_actions.toggle_browser,
["<C-h>"] = file_browser_actions.toggle_hidden,
["<C-s>"] = file_browser_actions.toggle_all,
["<bs>"] = file_browser_actions.backspace,
},
["n"] = {
["c"] = file_browser_actions.create,
["r"] = file_browser_actions.rename,
["m"] = file_browser_actions.move,
["y"] = file_browser_actions.copy,
["d"] = file_browser_actions.remove,
["o"] = file_browser_actions.open,
["g"] = file_browser_actions.goto_parent_dir,
["e"] = file_browser_actions.goto_home_dir,
["w"] = file_browser_actions.goto_cwd,
["t"] = file_browser_actions.change_cwd,
["f"] = file_browser_actions.toggle_browser,
["h"] = file_browser_actions.toggle_hidden,
["s"] = file_browser_actions.toggle_all,
},
},
},
},
})
telescope.load_extension("live_grep_args")
telescope.load_extension("file_browser")
telescope.load_extension("media_files")
telescope.load_extension("themes")
telescope.load_extension("dap")
local find_files = function()
builtin.find_files({
find_command = { "rg", "--files", "--hidden", "--glob", "!.git" },
})
end
local default_grep_files = function()
local input = vim.fn.input("[Global Search]: ")
local trimmed_input = vim.fn.trim(input)
-- Check the length of the input
local live_grep_args = telescope.extensions.live_grep_args
-- If the input is empty open the search prompt
if trimmed_input == "" then
live_grep_args.live_grep_args()
return
end
builtin.grep_string({ search = trimmed_input })
end
-- Function to get the visually selected text
-- Pipe the visual selection into Telescope find_files
local opts = { noremap = true, silent = true }
opts.desc = "Open file browser (cwd)"
vim.keymap.set("n", "<leader>pf", "<cmd>Telescope file_browser<CR>", opts)
opts.desc = "Open file browser (current file)"
vim.keymap.set("n", "<leader>cf", "<cmd>Telescope file_browser path=%:p:h select_buffer=true<CR>", opts)
opts.desc = "Fuzzy find files (cwd)"
vim.keymap.set("n", "<C-p>", find_files, opts)
opts.desc = "Fuzzy find recent files"
vim.keymap.set("n", "<leader>pr", builtin.oldfiles, opts)
opts.desc = "Fuzzy find files in git in cwd"
vim.keymap.set("n", "<leader>gf", builtin.git_files, opts)
opts.desc = "Fuzzy find files in cwd"
vim.keymap.set("n", "<leader>ps", default_grep_files, opts)
opts.desc = "Fuzzy find word under cursor in cwd"
vim.keymap.set("n", "<leader>sb", live_grep_shortcuts.grep_word_under_cursor, opts)

View File

@@ -0,0 +1,25 @@
local todo_comments = require("todo-comments")
todo_comments.setup({})
local opts = { noremap = true, silent = true }
opts.desc = "Jump to previous comment"
vim.keymap.set("n", "[t", function()
todo_comments.jump_prev()
end, opts)
opts.desc = "Jump to next todo comment"
vim.keymap.set("n", "]t", function()
todo_comments.jump_next()
end, opts)
opts.desc = "Open Comments in Telescope"
vim.keymap.set("n", "<leader>pt", function()
vim.cmd([[TodoTelescope]])
end, opts)
opts.desc = "Open Comments in Trouble"
vim.keymap.set("n", "<leader>tt", function()
vim.cmd([[TodoTrouble]])
end, opts)

View File

@@ -0,0 +1,62 @@
local toggle_term = require("toggleterm")
local Terminal = require("toggleterm.terminal").Terminal
toggle_term.setup({
direction = "float",
})
local opts = { noremap = true, silent = true }
local lazygit = Terminal:new({
cmd = "lazygit",
dir = "git_dir",
direction = "float",
float_opts = {
border = "double",
},
-- function to run on opening the terminal
on_open = function(term)
vim.cmd("startinsert!")
vim.api.nvim_buf_set_keymap(term.bufnr, "n", "q", "<cmd>close<CR>", opts)
end,
-- function to run on closing the terminal
on_close = function(term)
vim.cmd("startinsert!")
end,
})
function _LAZYGIT_TOGGLE()
lazygit:toggle()
end
-- Todo prompt model to run
local ollama = Terminal:new({
cmd = "ollama run llama3",
dir = "git_dir",
direction = "float",
float_opts = {
border = "double",
},
-- function to run on opening the terminal
on_open = function(term)
vim.cmd("startinsert!")
vim.api.nvim_buf_set_keymap(term.bufnr, "n", "q", "<cmd>close<CR>", opts)
end,
-- function to run on closing the terminal
on_close = function(term)
vim.cmd("startinsert!")
end,
})
function _OLLAMA_TOGGLE()
ollama:toggle()
end
opts.desc = "Open lazygit"
vim.api.nvim_set_keymap("n", "<leader>gs", "<cmd>lua _LAZYGIT_TOGGLE()<CR>", opts)
opts.desc = "Open ollama"
vim.api.nvim_set_keymap("n", "<leader>ol", "<cmd>lua _OLLAMA_TOGGLE()<CR>", opts)
-- opts.desc = "Open a terminal"
-- vim.api.nvim_set_keymap("n", "<C-`>", "<cmd>ToggleTerm<CR>", opts)

View File

@@ -0,0 +1,7 @@
local theme = require("tokyonight")
theme.setup({
style = "night",
transparent = true,
dim_inactive = true,
})

View File

@@ -0,0 +1,16 @@
local tsj = require("treesj")
local langs = {}
tsj.setup({
use_default_keymaps = false,
max_join_length = 1000,
langs = langs,
})
local opts = { silent = true, noremap = true }
opts.desc = "Toggle Treesitter Join"
vim.keymap.set("n", "<leader>m", "<cmd>TSJToggle<CR>", opts)

View File

@@ -0,0 +1,4 @@
vim.opt.undodir = os.getenv("HOME") .. "/.vim/undodir"
vim.opt.undofile = true
vim.keymap.set("n", "<leader>u", vim.cmd.UndotreeToggle)

View File

@@ -0,0 +1,14 @@
local venvSelector = require("venv-selector")
venvSelector.setup({
-- name = "venv",
auto_refresh = false,
})
local opts = { noremap = true, silent = true }
opts.desc = "Open VenvSelector to pick a venv."
vim.api.nvim_set_keymap("n", "<leader>vs", "<cmd>VenvSelect<cr>", opts)
opts.desc = "Retrieve the venv from a cache."
vim.api.nvim_set_keymap("n", "<leader>vc", "<cmd>VenvSelectCached<cr>", opts)