feat(init): first init

This commit is contained in:
darwincereska
2025-10-29 15:58:28 -04:00
commit 5a5c81eb60
34 changed files with 713 additions and 0 deletions

BIN
lua/.DS_Store vendored Normal file

Binary file not shown.

37
lua/config/keymap.lua Normal file
View File

@@ -0,0 +1,37 @@
-- Clear search if in NORMAL mode
vim.keymap.set('n', "<Esc>", "<CMD>noh<CR><Esc>", { silent = true, desc = "Clear search" })
-- Add Shift+Tab support
vim.keymap.set("n", "<Tab>", ">>", { silent = true })
vim.keymap.set("n", "<S-Tab>", "<<", { silent = true })
vim.keymap.set("v", "<Tab>", ">gv", { silent = true })
vim.keymap.set("v", "<S-Tab>", "<gv", { silent = true })
vim.keymap.set("i", "<S-Tab>", "<C-d>", { silent = true })
-- File tree keybinds
vim.keymap.set("n", "<D-b>", "<CMD>Neotree toggle<CR>", { silent = true, desc = "Open file tree" })
vim.keymap.set("n", "<D-S-e>", "<CMD>Neotree focus<CR>", { silent = true, desc = "Focus on file tree" })
-- Telescope keybinds
vim.keymap.set("n", "<D-p>", "<CMD>Telescope find_files<CR>", { silent = true, desc = "Open fuzzy finder" })
-- Tabs
vim.keymap.set("n", "<A-Tab>", "<CMD>BufferNext<CR>", { silent = true, desc = "Cycle to next tab"})
vim.keymap.set("n", "<A-S-Tab>", "<CMD>BufferPrevious<CR>", { silent = true, desc = "Cycle to previous tab" })
vim.keymap.set("n", "<A-w>", "<CMD>BufferClose<CR>", { silent = true, desc = "Close tab" })
-- File manager
vim.keymap.set("n", "<D-o>", "<CMD>Oil<CR>", { silent = true , desc = "Open parent directory" })
-- Comment toggle
vim.keymap.set("n", "<D-/>", "gcc", { remap = true, desc = "Toggle comment" })
vim.keymap.set("v", "<D-/>", "gc", { remap = true, desc = "Toggle comment" })
vim.keymap.set("i", "<D-/>", "<C-o>gcc", { remap = true, desc = "Toggle comment" })
-- Small text shortcuts
vim.keymap.set("i", "<D-Del>", "<C-u>", { desc = "Clear Line" })
vim.keymap.set("i", "<A-BS>", "<C-w>", { desc = "Delete word backwards" })
-- Terminal
vim.keymap.set({ "n", "i", "v", "t" }, "<D-y>", "<CMD>ToggleTerm<CR>", { remap = true, silent = true, desc = "Toggle terminal" })

41
lua/config/lazy.lua Normal file
View File

@@ -0,0 +1,41 @@
-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
-- Make sure to setup `mapleader` and `maplocalleader` before
-- loading lazy.nvim so that mappings are correct.
-- This is also a good place to setup other settings (vim.opt)
vim.opt.relativenumber = true
vim.opt.clipboard = "unnamedplus"
vim.opt.tabstop = 4
vim.opt.softtabstop = 4
vim.opt.shiftwidth = 4
vim.opt.expandtab = true
vim.g.mapleader = " "
vim.g.maplocalleader = "\\"
vim.o.foldenable = true
-- Setup lazy.nvim
require("lazy").setup({
spec = {
{ import = "plugins" },
},
-- Configure any other settings here. See the documentation for more details.
-- colorscheme that will be used when installing plugins.
install = { colorscheme = { "nord" } },
-- automatically check for plugin updates
checker = { enabled = true },
})

View File

@@ -0,0 +1,29 @@
require("Comment").setup({
-- Add a space b/w comment and the line
padding = true,
-- Whether the cursor should stay at its position
sticky = true,
-- Lines to be ignored while (un)comment
ignore = nil,
-- LHS of toggle mappings in NORMAL mode
toggler = {
line = 'gcc', -- Line-comment toggle keymap
block = 'gbc', -- Block-comment toggle keymap
},
-- LHS of operator-pending mappings in NORMAL and VISUAL mode
opleader = {
line = 'gc', -- Line-comment keymap
block = 'gb', -- Block-comment keymap
},
-- LHS of extra mappings
extra = {
above = 'gcO', -- Add comment on the line above
below = 'gco', -- Add comment on the line below
eol = 'gcA', -- Add comment at the end of line
},
-- Enable keybindings
mappings = {
basic = true, -- Operator-pending mapping; `gcc` `gbc` `gc[count]{motion}` `gb[count]{motion}`
extra = true, -- Extra mapping; `gco`, `gcO`, `gcA`
},
})

View File

@@ -0,0 +1,27 @@
require("neo-tree").setup({
close_if_last_window = true,
hijack_netrw_behavior = "disabled",
filesystem = {
filtered_items = {
hide_gitignored = true,
hide_hidden = true,
},
follow_current_file = { enabled = true },
},
git_status = {
enable = true,
},
window = {
position = "left",
auto_expand_width = false,
hijack_netrw_behavior = "disabled",
width = 35,
mappings = {
["<space>"] = "toggle_node",
["<2-LeftMouse>"] = "open",
["e"] = function() vim.api.nvim_exec("Neotree focus filesystem", true) end,
["g"] = function() vim.api.nvim_exec("Neotree focus git_status", true) end,
},
},
})

10
lua/config/plugin/oil.lua Normal file
View File

@@ -0,0 +1,10 @@
require("oil").setup({
default_file_explorer = true,
columns = {
"icon",
},
keymaps = {
["g."] = { "actions.toggle_hidden", mode = "n"}
}
})

View File

@@ -0,0 +1,73 @@
require("render-markdown").setup({
completions = { lsp = { enabled = true } },
heading = {
enabled = true,
sign = false,
icons = { "󰲡 ", "󰲣 ", "󰲥 ", "󰲧 ", "󰲩 ", "󰲫 " },
signs = { ""},
left_pad = 0,
right_pad = 0,
width = "full",
min_width = 0,
border = true,
border_virtual = true,
above = "",
below = "",
},
code = {
enabled = true,
sign = true,
style = "full",
position = "left",
language_pad = 2,
disable_background = { "diff" },
width = "full",
left_pad = 0,
right_pad = 0,
min_width = 0,
border = "thin",
above = "",
below = "",
highlight = "RenderMarkdownCode",
highlight_inline = "RenderMarkdownCodeInline",
},
win_options = {
conceallevel = {
default = vim.o.conceallevel,
rendered = 3,
},
concealcursor = {
default = vim.o.concealcursor,
rendered = "n",
},
},
})
-- Fix tab behavior in markdown files
vim.api.nvim_create_autocmd("FileType", {
pattern = "markdown",
callback = function()
-- Override tab mapping in markdown files
vim.keymap.set("i", "<Tab>", function()
-- Check if we're in a code block
local line = vim.api.nvim_get_current_line()
local col = vim.api.nvim_win_get_cursor(0)[2]
-- If we're at the beginning of a line or after whitespace, insert tab
if col == 0 or line:sub(1, col):match("^%s*$") then
return "<Tab>"
else
-- Otherwise, let completion handle it if available
if vim.fn.pumvisible() == 1 then
return "<C-n>"
else
return "<Tab>"
end
end
end, { expr = true, buffer = true })
end,
})

View File

@@ -0,0 +1,49 @@
require("lualine").setup {
options = {
icons_enabled = true,
theme = "auto",
component_separators = { left = "", right = "" },
section_separators = { left = "", right = "" },
disabled_filetypes = {
statusline = { "NvimTree", "neo-tree", "alpha", "dashboard" },
winbar = { "NvimTree", "neo-tree", "alpha", "dashboard" },
},
ignore_focus = { "NvimTree", "neo-tree" },
always_divide_middle = true,
globalstatus = true, -- This makes lualine span the entire bottom
refresh = {
statusline = 1000,
tabline = 1000,
winbar = 1000,
}
},
sections = {
lualine_a = { "mode" }, -- Shows full text like "NORMAL", "INSERT", "VISUAL"
lualine_b = { "branch", "diff", "diagnostics" },
lualine_c = {
"filename",
{
function()
return vim.b.table_mode_active == 1 and "[TABLE]" or ""
end,
color = { fg = "#98c379" }, -- Green color
},
},
lualine_x = { "encoding", "fileformat", "filetype" },
lualine_y = { "progress" },
lualine_z = { "location" }
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = { "filename" },
lualine_x = { "location" },
lualine_y = {},
lualine_z = {}
},
tabline = {},
winbar = {},
inactive_winbar = {},
extensions = { "nvim-tree", "neo-tree" }
}

View File

@@ -0,0 +1,5 @@
require("telescope").setup({
defaults = {
file_ignore_patterns = { "node_modules", ".git/" },
},
})

View File

@@ -0,0 +1,27 @@
require("nvim-treesitter.configs").setup({
ensure_installed = {
"markdown",
"markdown_inline",
"lua",
"python",
"javascript",
"typescript",
"html",
"css",
"json",
"yaml",
"bash",
"vim",
"c",
"cpp",
"lua",
"go",
},
highlight = {
enable = true,
additional_vim_regex_highlighting = { "markdown" },
},
indent = {
enable = true,
},
})

22
lua/config/plugin/ufo.lua Normal file
View File

@@ -0,0 +1,22 @@
-- Basic fold UI
vim.o.foldcolumn = '1'
vim.o.foldlevel = 99
vim.o.foldlevelstart = 99
vim.o.foldenable = true
-- Triangles for folds
vim.opt.fillchars = {
foldopen = "",
foldclose = "",
foldsep = " ",
}
require("ufo").setup({
provider_selector = function(bufnr, filetype, buftype)
if filetype == "markdown" then
return { "treesitter", "indent" }
end
return { "lsp", "indent" }
end,
})

View File

@@ -0,0 +1,7 @@
return {
"windwp/nvim-autopairs",
lazy = false,
priority = 1000,
event = "InsertEnter",
config = true,
}

View File

@@ -0,0 +1,3 @@
return {
"swaits/universal-clipboard.nvim",
}

View File

@@ -0,0 +1,9 @@
return {
"gbprod/nord.nvim",
lazy=false,
priority=1000,
config = function()
require("nord").setup({})
vim.cmd.colorscheme("nord")
end,
}

7
lua/plugins/comment.lua Normal file
View File

@@ -0,0 +1,7 @@
return {
"numToStr/Comment.nvim",
event = { "BufReadPre", "BufNewFile" },
config = function()
require("config.plugin.comment")
end,
}

115
lua/plugins/completions.lua Normal file
View File

@@ -0,0 +1,115 @@
return {
{
"hrsh7th/nvim-cmp",
event = "InsertEnter",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"hrsh7th/cmp-cmdline",
"L3MON4D3/LuaSnip",
"saadparwaiz1/cmp_luasnip",
"f3fora/cmp-spell",
"rafamadriz/friendly-snippets",
},
config = function()
local cmp = require("cmp")
local luasnip = require("luasnip")
require("luasnip.loaders.from_vscode").lazy_load()
vim.api.nvim_set_hl(0, "CmpBorder", { link = "FloatBorder" })
vim.api.nvim_set_hl(0, "CmpDocBorder", { link = "FloatBorder" })
vim.api.nvim_set_hl(0, "CmpDocNormal", { link = "NormalFloat" })
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.abort(),
["<CR>"] = cmp.mapping.confirm({ select = true }),
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
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" }),
}),
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "luasnip" },
{ name = "buffer" },
{ name = "path" },
{ name = "spell" },
}),
window = {
completion = cmp.config.window.bordered({
border = "rounded",
winhighlight = "Normal:NormalFloat,FloatBorder:CmpBorder",
scrollbar = true,
winblend = 8,
}),
documentation = cmp.config.window.bordered({
border = "rounded",
winhighlight = "Normal:CmpDocNormal,FloatBorder:CmpDocBorder",
winblend = 8,
max_width = 60,
max_height = 20,
}),
},
formatting = {
format = function(entry, vim_item)
vim_item.menu = ({
nvim_lsp = "[LSP]",
luasnip = "[Snippet]",
buffer = "[Buffer]",
path = "[Path]",
spell = "[Spell]",
})[entry.source.name]
return vim_item
end,
},
})
cmp.setup.cmdline({ "/", "?" }, {
mapping = cmp.mapping.preset.cmdline(),
sources = {
{ name = "buffer" },
},
})
cmp.setup.cmdline(":", {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({
{ name = "path" },
}, {
{ name = "cmdline" },
}),
})
end,
},
}

10
lua/plugins/dropbar.lua Normal file
View File

@@ -0,0 +1,10 @@
return {
"Bekaboo/dropbar.nvim",
dependencies = {
"nvim-telescope/telescope-fzf-native.nvim",
build = "make"
},
config = function()
local dropbar_api = require("dropbar.api")
end
}

25
lua/plugins/image.lua Normal file
View File

@@ -0,0 +1,25 @@
return {
"3rd/image.nvim",
config = function()
require("image").setup({
backend = "kitty",
processor = "magick_cli",
integrations = {
markdown = {
enabled = true,
clear_in_insert_mode = true,
download_remote_images = true,
only_render_image_at_cursor = true,
floating_windows = false,
filetypes = { "markdown", "vimwiki"},
}
},
scale_factor = 1.0,
max_width = nil,
max_height = nil,
max_height_window_percentage = 50,
max_width_window_percentage = nil,
window_overlap_clear_enabled = false
})
end
}

44
lua/plugins/lsp.lua Normal file
View File

@@ -0,0 +1,44 @@
return {
{
"mason-org/mason.nvim",
config = function()
require("mason").setup()
end,
},
{
"mason-org/mason-lspconfig.nvim",
dependencies = { "mason-org/mason.nvim" },
config = function()
require("mason-lspconfig").setup({
ensure_installed = {
"gopls",
"clangd",
"pyright",
"lua_ls",
"ts_ls",
},
automatic_installation = true,
})
end,
},
{
"neovim/nvim-lspconfig",
dependencies = {
"mason-org/mason-lspconfig.nvim",
"hrsh7th/cmp-nvim-lsp",
},
config = function()
local lspconfig = require("lspconfig")
local cmp_nvim_lsp = require("cmp_nvim_lsp")
local capabilities = cmp_nvim_lsp.default_capabilities()
-- Setup each server
vim.lsp.enable("gopls")
vim.lsp.enable("clangd")
vim.lsp.enable("pyright")
vim.lsp.enable("lua_ls")
vim.lsp.enable("ts_ls")
end,
},
}

28
lua/plugins/markdown.lua Normal file
View File

@@ -0,0 +1,28 @@
return {
{
"MeanderingProgrammer/render-markdown.nvim",
dependencies = {
"nvim-treesitter/nvim-treesitter",
"nvim-mini/mini.nvim",
},
config = function()
require("config.plugin.render-markdown")
vim.api.nvim_create_autocmd("FileType", {
pattern = "markdown",
callback = function()
vim.opt_local.spell = true
vim.opt_local.spelllang = "en_us"
end,
})
end,
},
{
"dhruvasagar/vim-table-mode",
ft = "markdown",
config = function()
vim.g.table_mode_corner = "|"
vim.api.nvim_set_keymap("n", "<leader>tm", ":TableModeToggle<CR>", { noremap = true, silent = true })
end,
},
}

8
lua/plugins/notes.lua Normal file
View File

@@ -0,0 +1,8 @@
return {
"darwincereska/notes.nvim",
config = function()
require("notes").setup({
git_remote = "git@github.com:darwincereska/notes.git"
})
end
}

11
lua/plugins/oil.lua Normal file
View File

@@ -0,0 +1,11 @@
return {
"stevearc/oil.nvim",
---@module "oil"
---@module oil.setupOpts
opts = {},
dependencies = { "nvim-mini/mini.icons" },
lazy = false,
config = function()
require("config.plugin.oil")
end,
}

View File

@@ -0,0 +1,5 @@
return {
"sotte/presenting.nvim",
opts = {},
cmd = { "Presenting" }
}

View File

@@ -0,0 +1,7 @@
return {
"nvim-lualine/lualine.nvim",
dependencies = { "nvim-tree/nvim-web-devicons" },
config = function()
require("config.plugin.statusbar")
end,
}

16
lua/plugins/tabs.lua Normal file
View File

@@ -0,0 +1,16 @@
return {
"romgrk/barbar.nvim",
dependencies = {
"nvim-tree/nvim-web-devicons"
},
init = function() vim.g.barbar_auto_setup = false end,
opts = {
insert_at_start = true,
animation = false,
auto_hide = false,
sidebar_filetypes = {
NvimTree = true,
NeoTree = false,
},
}
}

View File

@@ -0,0 +1,7 @@
return {
"nvim-telescope/telescope.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
config = function()
require("config.plugin.telescope")
end,
}

15
lua/plugins/terminal.lua Normal file
View File

@@ -0,0 +1,15 @@
return {
"akinsho/toggleterm.nvim",
version = "*",
opt = {
},
config = function()
require("toggleterm").setup({
direction = "float",
close_on_exit = true,
shell = "/bin/zsh -l",
shade_in_terminals = true,
})
end,
}

View File

@@ -0,0 +1,7 @@
return {
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate",
config = function()
require("config.plugin.treesitter")
end,
}

8
lua/plugins/ufo.lua Normal file
View File

@@ -0,0 +1,8 @@
return {
"kevinhwang91/nvim-ufo",
dependencies = "kevinhwang91/promise-async",
lazy = false,
config = function()
require("config.plugin.ufo")
end
}

15
lua/plugins/ui.lua Normal file
View File

@@ -0,0 +1,15 @@
return {
{
"nvim-neo-tree/neo-tree.nvim", -- NVim File Tree
lazy = false,
priority = 1000,
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-web-devicons",
"MunifTanjim/nui.nvim",
},
config = function()
require("config.plugin.neo-tree")
end,
},
}

View File

@@ -0,0 +1,3 @@
return {
"ThePrimeagen/vim-be-good"
}