diff --git a/.gitignore b/.gitignore
index a52bd495579..8a192cab54d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,11 +4,3 @@ test.sh
nvim
spell/
-
-# In your personal fork, you likely want to comment this, since it's recommended to track
-# nvim-pack-lock.json in version control - see :help vim.pack-lockfile
-# For the official `nvim-lua/kickstart.nvim` git repository, we leave it ignored to avoid unneeded
-# merge conflicts.
-nvim-pack-lock.json
-
-.DS_Store
diff --git a/README.md b/README.md
index 7c62e907134..5f332e5c9b0 100644
--- a/README.md
+++ b/README.md
@@ -82,7 +82,7 @@ it's recommended to track it in version control (see `:help vim.pack-lockfile`).
Linux and Mac
```sh
-git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim
+git clone https://github.com/GuustTaillieu/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim
```
@@ -92,13 +92,13 @@ git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HO
If you're using `cmd.exe`:
```
-git clone https://github.com/nvim-lua/kickstart.nvim.git "%localappdata%\nvim"
+git clone https://github.com/GuustTaillieu/kickstart.nvim.git "%localappdata%\nvim"
```
If you're using `powershell.exe`
```
-git clone https://github.com/nvim-lua/kickstart.nvim.git "${env:LOCALAPPDATA}\nvim"
+git clone https://github.com/GuustTaillieu/kickstart.nvim.git "${env:LOCALAPPDATA}\nvim"
```
diff --git a/ftplugin/java.lua b/ftplugin/java.lua
new file mode 100644
index 00000000000..5b42dbf37ed
--- /dev/null
+++ b/ftplugin/java.lua
@@ -0,0 +1,157 @@
+-- JDTLS (Java LSP) configuration
+local home = vim.env.HOME -- Get the home directory
+
+local jdtls = require 'jdtls'
+local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ':p:h:t')
+local workspace_dir = home .. '/jdtls-workspace/' .. project_name
+
+local system_os = ''
+
+-- Determine OS
+if vim.fn.has 'mac' == 1 then
+ system_os = 'mac'
+elseif vim.fn.has 'unix' == 1 then
+ system_os = 'linux'
+elseif vim.fn.has 'win32' == 1 or vim.fn.has 'win64' == 1 then
+ system_os = 'win'
+else
+ print "OS not found, defaulting to 'linux'"
+ system_os = 'linux'
+end
+
+-- Needed for debugging
+local bundles = {
+ vim.fn.glob(home .. '/.local/share/nvim/mason/share/java-debug-adapter/com.microsoft.java.debug.plugin.jar'),
+}
+
+-- Needed for running/debugging unit tests
+vim.list_extend(bundles, vim.split(vim.fn.glob(home .. '/.local/share/nvim/mason/share/java-test/*.jar', 1), '\n'))
+
+-- See `:help vim.lsp.start_client` for an overview of the supported `config` options.
+local config = {
+ -- The command that starts the language server
+ -- See: https://github.com/eclipse/eclipse.jdt.ls#running-from-the-command-line
+ cmd = {
+ 'java',
+ '-Declipse.application=org.eclipse.jdt.ls.core.id1',
+ '-Dosgi.bundles.defaultStartLevel=4',
+ '-Declipse.product=org.eclipse.jdt.ls.core.product',
+ '-Dlog.protocol=true',
+ '-Dlog.level=ALL',
+ '-javaagent:' .. home .. '/.local/share/nvim/mason/share/jdtls/lombok.jar',
+ '-Xmx4g',
+ '--add-modules=ALL-SYSTEM',
+ '--add-opens',
+ 'java.base/java.util=ALL-UNNAMED',
+ '--add-opens',
+ 'java.base/java.lang=ALL-UNNAMED',
+
+ -- Eclipse jdtls location
+ '-jar',
+ home .. '/.local/share/nvim/mason/share/jdtls/plugins/org.eclipse.equinox.launcher.jar',
+ '-configuration',
+ home .. '/.local/share/nvim/mason/packages/jdtls/config_' .. system_os,
+ '-data',
+ workspace_dir,
+ },
+
+ -- This is the default if not provided, you can remove it. Or adjust as needed.
+ -- One dedicated LSP server & client will be started per unique root_dir
+ root_dir = require('jdtls.setup').find_root { '.git', 'mvnw', 'pom.xml', 'build.gradle' },
+
+ -- Here you can configure eclipse.jdt.ls specific settings
+ -- See https://github.com/eclipse/eclipse.jdt.ls/wiki/Running-the-JAVA-LS-server-from-the-command-line#initialize-request
+ settings = {
+ java = {
+ -- TODO Replace this with the absolute path to your main java version (JDTLS requires JDK 21 or higher)
+ home = '/usr/lib/jvm/java-21-openjdk',
+ eclipse = {
+ downloadSources = true,
+ },
+ configuration = {
+ updateBuildConfiguration = 'interactive',
+ -- TODO Update this by adding any runtimes that you need to support your Java projects and removing any that you don't have installed
+ -- The runtimes' name parameter needs to match a specific Java execution environments. See https://github.com/eclipse-jdtls/eclipse.jdt.ls/wiki/Running-the-JAVA-LS-server-from-the-command-line#initialize-request and search "ExecutionEnvironment".
+ runtimes = {
+ {
+ name = 'JavaSE-21',
+ path = '/usr/lib/jvm/java-21-openjdk',
+ },
+ {
+ name = 'JavaSE-25',
+ path = '/usr/lib/jvm/java-25-openjdk',
+ },
+ },
+ },
+ maven = {
+ downloadSources = true,
+ },
+ implementationsCodeLens = {
+ enabled = true,
+ },
+ referencesCodeLens = {
+ enabled = true,
+ },
+ references = {
+ includeDecompiledSources = true,
+ },
+ signatureHelp = { enabled = true },
+ format = {
+ enabled = true,
+ -- Formatting works by default, but you can refer to a specific file/URL if you choose
+ -- settings = {
+ -- url = "https://github.com/google/styleguide/blob/gh-pages/intellij-java-google-style.xml",
+ -- profile = "GoogleStyle",
+ -- },
+ },
+ completion = {
+ favoriteStaticMembers = {
+ 'org.hamcrest.MatcherAssert.assertThat',
+ 'org.hamcrest.Matchers.*',
+ 'org.hamcrest.CoreMatchers.*',
+ 'org.junit.jupiter.api.Assertions.*',
+ 'java.util.Objects.requireNonNull',
+ 'java.util.Objects.requireNonNullElse',
+ 'org.mockito.Mockito.*',
+ },
+ importOrder = {
+ 'java',
+ 'javax',
+ 'com',
+ 'org',
+ },
+ },
+ sources = {
+ organizeImports = {
+ starThreshold = 9999,
+ staticStarThreshold = 9999,
+ },
+ },
+ codeGeneration = {
+ toString = {
+ template = '${object.className}{${member.name()}=${member.value}, ${otherMembers}}',
+ },
+ useBlocks = true,
+ },
+ },
+ },
+ -- Needed for auto-completion with method signatures and placeholders
+ capabilities = require('blink-cmp').get_lsp_capabilities(),
+ flags = {
+ allow_incremental_sync = true,
+ },
+ init_options = {
+ -- References the bundles defined above to support Debugging and Unit Testing
+ bundles = bundles,
+ extendedClientCapabilities = jdtls.extendedClientCapabilities,
+ },
+}
+
+-- Needed for debugging
+config['on_attach'] = function(client, bufnr)
+ jdtls.setup_dap { hotcodereplace = 'auto' }
+ require('jdtls.dap').setup_dap_main_class_configs()
+end
+
+-- This starts a new client & server, or attaches to an existing client & server based on the `root_dir`.
+jdtls.start_or_attach(config)
diff --git a/init.lua b/init.lua
index aff5250e921..4d0d82df249 100644
--- a/init.lua
+++ b/init.lua
@@ -20,265 +20,487 @@
=====================================================================
=====================================================================
-What is Kickstart?
- Kickstart.nvim is *not* a distribution.
- Kickstart.nvim is a starting point for your own configuration.
- The goal is that you can read every line of code, top-to-bottom, understand
- what your configuration is doing, and modify it to suit your needs.
-
- Once you've done that, you can start exploring, configuring and tinkering to
- make Neovim your own! That might mean leaving Kickstart just the way it is for a while
- or immediately breaking it into modular pieces. It's up to you!
-
- If you don't know anything about Lua, I recommend taking some time to read through
- a guide. One possible example which will only take 10-15 minutes:
- - https://learnxinyminutes.com/docs/lua/
-
- After understanding a bit more about Lua, you can use `:help lua-guide` as a
- reference for how Neovim integrates Lua.
- - :help lua-guide
- - (or HTML version): https://neovim.io/doc/user/lua-guide.html
-
-Kickstart Guide:
-
- TODO: The very first thing you should do is to run the command `:Tutor` in Neovim.
-
- If you don't know what this means, type the following:
- -
- - :
- - Tutor
- -
-
- (If you already know the Neovim basics, you can skip this step.)
-
- Once you've completed that, you can continue working through **AND READING** the rest
- of the kickstart init.lua.
-
- Next, run AND READ `:help`.
- This will open up a help window with some basic information
- about reading, navigating and searching the builtin help documentation.
-
- This should be the first place you go to look when you're stuck or confused
- with something. It's one of my favorite Neovim features.
-
- MOST IMPORTANTLY, we provide a keymap "sh" to [s]earch the [h]elp documentation,
- which is very useful when you're not exactly sure of what you're looking for.
-
- I have left several `:help X` comments throughout the init.lua
- These are hints about where to find more information about the relevant settings,
- plugins or Neovim features used in Kickstart.
-
- NOTE: Look for lines like this
-
- Throughout the file. These are for you, the reader, to help you understand what is happening.
- Feel free to delete them once you know what you're doing, but they should serve as a guide
- for when you are first encountering a few different constructs in your Neovim config.
-
-If you experience any errors while trying to install kickstart, run `:checkhealth` for more info.
-
-I hope you enjoy your Neovim journey,
-- TJ
-
-P.S. You can delete this when you're done too. It's your config now! :)
---]]
+-- [[ Setting options ]]
+-- See `:help vim.o`
+
+-- Set to true if you have a Nerd Font installed and selected in the terminal
+vim.g.have_nerd_font = true
+
+-- Key mappings
+vim.g.mapleader = ' ' -- Set leader key to space
+vim.g.maplocalleader = ' ' -- Set local leader key (NEW)
+
+-- Make background transparent
+vim.api.nvim_set_hl(0, 'Normal', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NormalNC', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'EndOfBuffer', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'SignColumn', { bg = 'none' }) -- Make sign column transparent
+vim.opt.number = true -- Line numbers
+
+-- Basic settings
+vim.opt.relativenumber = true -- Relative line numbers
+vim.opt.cursorline = true -- Highlight current line
+vim.opt.wrap = false -- Don't wrap lines
+vim.opt.scrolloff = 10 -- Keep 10 lines above/below cursor
+vim.opt.sidescrolloff = 8 -- Keep 8 columns left/right of cursor
+
+-- Indentation
+vim.opt.tabstop = 2 -- Tab width
+vim.opt.shiftwidth = 2 -- Indent width
+vim.opt.softtabstop = 2 -- Soft tab stop
+vim.opt.expandtab = true -- Use spaces instead of tabs
+vim.opt.smartindent = true -- Smart auto-indenting
+vim.opt.autoindent = true -- Copy indent from current line
+vim.o.breakindent = true
+
+-- Search settings
+vim.opt.ignorecase = true -- Case insensitive search
+vim.opt.smartcase = true -- Case sensitive if uppercase in search
+vim.opt.hlsearch = false -- Don't highlight search results
+vim.opt.incsearch = true -- Show matches as you type
+
+-- Visual settings
+vim.opt.termguicolors = true -- Enable 24-bit colors
+vim.opt.signcolumn = 'yes' -- Always show sign column
+vim.opt.showmatch = true -- Highlight matching brackets
+vim.opt.matchtime = 2 -- How long to show matching bracket
+vim.opt.cmdheight = 1 -- Command line height
+vim.opt.completeopt = 'menuone,noinsert,noselect' -- Completion options
+vim.opt.showmode = false -- Don't show mode in command line
+vim.opt.pumheight = 10 -- Popup menu height
+vim.opt.pumblend = 10 -- Popup menu transparency
+vim.opt.winblend = 0 -- Floating window transparency
+vim.opt.concealcursor = '' -- Don't hide cursor line markup
+vim.opt.conceallevel = 0 -- Don't hide markup
+-- vim.opt.lazyredraw = true -- Don't redraw during macros
+vim.opt.synmaxcol = 300 -- Syntax highlighting limit
+vim.o.winborder = 'rounded' -- Make floating windows have a rounded border
+vim.o.list = true
+vim.opt.listchars = { tab = ' ', trail = '·', nbsp = '␣' } -- Sets how whitespace chars will be displayed
+
+-- Folding settings
+vim.opt.foldmethod = 'expr' -- Use expression for folding
+-- vim.wo.vim.foldexpr = 'v:lua.vim.treesitter.foldexpr()' -- Use treesitter for folding
+vim.opt.foldlevel = 99 -- Start with all folds open
+
+-- File handling
+vim.opt.backup = false -- Don't create backup files
+vim.opt.writebackup = false -- Don't create backup before writing
+vim.opt.swapfile = false -- Don't create swap files
+vim.opt.undofile = true -- Persistent undo
+vim.o.undofile = true -- Save undo history
+vim.opt.undodir = vim.fn.expand '~/.vim/undodir' -- Undo directory
+vim.opt.updatetime = 250 -- Faster completion
+vim.opt.timeoutlen = 500 -- Key timeout duration
+vim.opt.ttimeoutlen = 0 -- Key code timeout
+vim.opt.autoread = true -- Auto reload files changed outside vim
+vim.opt.autowrite = false -- Don't auto save
+
+-- Behavior settings
+vim.opt.hidden = true -- Allow hidden buffers
+vim.opt.errorbells = false -- No error bells
+vim.opt.backspace = 'indent,eol,start' -- Better backspace behavior
+vim.opt.autochdir = false -- Don't auto change directory
+vim.opt.iskeyword:append '-' -- Treat dash as part of word
+vim.opt.path:append '**' -- include subdirectories in search
+vim.opt.selection = 'exclusive' -- Selection behavior
+vim.opt.mouse = 'a' -- Enable mouse support
+vim.opt.clipboard:append 'unnamedplus' -- Use system clipboard
+vim.opt.modifiable = true -- Allow buffer modifications
+vim.opt.encoding = 'UTF-8' -- Set encoding
+vim.opt.splitbelow = true -- Horizontal splits go below
+vim.opt.splitright = true -- Vertical splits go right
+vim.o.inccommand = 'split'
+vim.o.confirm = true -- Ask before closing (unsaved changes)
+
+-- Sync clipboard between OS and Neovim.
+-- Schedule the setting after `UiEnter` because it can increase startup-time.
+-- Remove this option if you want your OS clipboard to remain independent.
+-- See `:help 'clipboard'`
+vim.schedule(function() vim.o.clipboard = 'unnamedplus' end)
+
+-- Don't show the mode, since it's already in the status line
+vim.o.showmode = false
+
+-- [[ Basic Keymaps ]]
+
+vim.keymap.set('n', 'Ss', 'SessionSave', { desc = 'Save session' })
+vim.keymap.set('n', 'Sl', 'SessionLoad', { desc = 'Load session' })
+
+vim.keymap.set('n', '', 'w', { desc = 'Save file' })
+
+-- Clear highlights on search when pressing in normal mode
+vim.keymap.set('n', '', 'nohlsearch', { desc = 'Clear search highlights' })
+vim.keymap.set('n', '', 'nohlsearch', { desc = 'Clear search highlights' })
+
+-- Diagnostic keymaps
+-- vim.keymap.set('n', 'dq', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' })
+
+-- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier
+-- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping
+-- or just use to exit terminal mode
+vim.keymap.set('t', '', '', { desc = 'Exit terminal mode' })
+
+-- Keybinds to make split navigation easier.
+-- Use CTRL+ to switch between windows
+--
+-- See `:help wincmd` for a list of all window commands
+vim.keymap.set('n', '', '', { desc = 'Move focus to the left window' })
+vim.keymap.set('n', '', '', { desc = 'Move focus to the right window' })
+vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' })
+vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' })
+
+-- Splitting & Resizing
+vim.keymap.set('n', 'w|', 'vsplit', { desc = 'Split window vertically' })
+vim.keymap.set('n', 'w-', 'split', { desc = 'Split window horizontally' })
+
+vim.keymap.set('n', '', 'resize +2', { desc = 'Increase window height' })
+vim.keymap.set('n', '', 'resize -2', { desc = 'Decrease window height' })
+vim.keymap.set('n', '', 'vertical resize +2', { desc = 'Increase window width' })
+vim.keymap.set('n', '', 'vertical resize -2', { desc = 'Decrease window width' })
+
+-- Ctrl-Shift-letter doesnt work with my setup -> Fixed by using xxd and using litteral input str
+vim.keymap.set('n', '^[[1;9h', 'H', { desc = 'Move window to the left' })
+vim.keymap.set('n', '^[[1;9l', 'L', { desc = 'Move window to the right' })
+vim.keymap.set('n', '^[[1;9j', 'J', { desc = 'Move window to the lower' })
+vim.keymap.set('n', '^[[1;9k', 'K', { desc = 'Move window to the upper' })
+
+vim.diagnostic.config {
+ update_in_insert = false,
+ severity_sort = true,
+ float = { border = 'rounded', source = 'if_many' },
+ underline = { severity = { min = vim.diagnostic.severity.WARN } },
+
+ -- Can switch between these as you prefer
+ virtual_text = true, -- Text shows up at the end of the line
+ virtual_lines = false, -- Text shows up underneath the line, with virtual lines
+
+ -- Auto open the float, so you can easily read the errors when jumping with `[d` and `]d`
+ jump = {
+ on_jump = function(_, bufnr)
+ vim.diagnostic.open_float {
+ bufnr = bufnr,
+ scope = 'cursor',
+ focus = false,
+ }
+ end,
+ },
+}
+
+vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' })
+
+-- Center screen when jumping
+vim.keymap.set('n', 'n', 'nzzzv', { desc = 'Next search result (centered)' })
+vim.keymap.set('n', 'N', 'Nzzzv', { desc = 'Previous search result (centered)' })
+vim.keymap.set('n', '', 'zz', { desc = 'Half page down (centered)' })
+vim.keymap.set('n', '', 'zz', { desc = 'Half page up (centered)' })
+
+-- Delete without yanking
+vim.keymap.set({ 'n', 'v' }, 'D', '"_d', { desc = 'Delete without yanking' })
+
+-- Paste without yanking
+vim.keymap.set('x', 'p', [["_dP]], { desc = 'Paste without yanking' })
+
+-- Buffer navigation
+vim.keymap.set('n', 'bn', 'bnext', { desc = 'Next buffer' })
+vim.keymap.set('n', 'bp', 'bprevious', { desc = 'Previous buffer' })
+
+-- Move lines up/down
+vim.keymap.set('n', '', 'm .+1==', { desc = 'Move line down' })
+vim.keymap.set('n', '', 'm .-2==', { desc = 'Move line up' })
+vim.keymap.set('v', '', "m '>+1gv=gv", { desc = 'Move selection down' })
+vim.keymap.set('v', '', "m '<-2gv=gv", { desc = 'Move selection up' })
+
+-- Better indenting in visual mode
+vim.keymap.set('v', '<', '', '>gv', { desc = 'Indent right and reselect' })
+
+-- Better J behavior
+vim.keymap.set('n', 'J', 'mzJ`z', { desc = 'Join lines and keep cursor position' })
+
+-- ============================================================================
+-- USEFUL FUNCTIONS
+-- ============================================================================
+
+-- Copy Full File-Path
+vim.keymap.set('n', 'yp', function()
+ local path = vim.fn.expand '%:p'
+ vim.fn.setreg('+', path)
+ print('file:', path)
+end)
+
+-- Copy all content of the current buffer
+vim.keymap.set('n', 'ya', function()
+ vim.fn.setreg('+', vim.api.nvim_buf_get_lines(0, 0, -1, false))
+ vim.notify 'Copied all content of the current buffer'
+end)
+
+-- Delete all content of the current buffer
+vim.keymap.set('n', 'da', function() vim.api.nvim_buf_set_lines(0, 0, -1, false, {}) end)
+
+-- Select all content of the current buffer
+vim.keymap.set('n', 'sa', function() vim.api.nvim_feedkeys('ggVG', 'n', false) end)
+
+-- Basic autocommands
+local augroup = vim.api.nvim_create_augroup('UserConfig', {})
+
+-- Highlight yanked text
+vim.api.nvim_create_autocmd('TextYankPost', {
+ desc = 'Highlight when yanking (copying) text',
+ group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }),
+ callback = function() vim.hl.on_yank() end,
+})
+
+-- Return to last edit position when opening files
+vim.api.nvim_create_autocmd('BufReadPost', {
+ group = augroup,
+ callback = function()
+ local mark = vim.api.nvim_buf_get_mark(0, '"')
+ local lcount = vim.api.nvim_buf_line_count(0)
+ if mark[1] > 0 and mark[1] <= lcount then pcall(vim.api.nvim_win_set_cursor, 0, mark) end
+ end,
+})
+
+-- Set filetype-specific settings
+vim.api.nvim_create_autocmd('FileType', {
+ group = augroup,
+ pattern = { 'lua', 'python' },
+ callback = function()
+ vim.opt_local.tabstop = 4
+ vim.opt_local.shiftwidth = 4
+ end,
+})
+
+vim.api.nvim_create_autocmd('FileType', {
+ group = augroup,
+ pattern = { 'javascript', 'typescript', 'javascriptreact', 'typescriptreact', 'json', 'html', 'css', 'go' },
+ callback = function()
+ vim.opt_local.tabstop = 2
+ vim.opt_local.shiftwidth = 2
+ end,
+})
+
+-- Auto-close terminal when process exits
+vim.api.nvim_create_autocmd('TermClose', {
+ group = augroup,
+ callback = function()
+ if vim.v.event.status == 0 then vim.api.nvim_buf_delete(0, {}) end
+ end,
+})
+
+-- Disable line numbers in terminal
+vim.api.nvim_create_autocmd('TermOpen', {
+ group = augroup,
+ callback = function()
+ vim.opt_local.number = false
+ vim.opt_local.relativenumber = false
+ vim.opt_local.signcolumn = 'no'
+ end,
+})
+
+-- Auto-resize splits when window is resized
+vim.api.nvim_create_autocmd('VimResized', {
+ group = augroup,
+ callback = function() vim.cmd 'tabdo wincmd =' end,
+})
+
+-- Create directories when saving files
+vim.api.nvim_create_autocmd('BufWritePre', {
+ callback = function()
+ local filepath = vim.fn.expand ':p:h'
+ if filepath:match '^oil://' or vim.uv.fs_realpath(filepath) == nil then return end
+ if vim.fn.isdirectory(filepath) == 0 then vim.fn.mkdir(filepath, 'p') end
+ end,
+})
+
+-- Command-line completion
+vim.opt.wildmenu = true
+vim.opt.wildmode = 'longest:full,full'
+vim.opt.wildignore:append { '*.o', '*.obj', '*.pyc', '*.class', '*.jar' }
+
+-- Better diff options
+vim.opt.diffopt:append 'linematch:60'
+
+-- Performance improvements
+vim.opt.redrawtime = 10000
+vim.opt.maxmempattern = 20000
+
+-- Create undo directory if it doesn't exist
+local undodir = vim.fn.expand '~/.vim/undodir'
+if vim.fn.isdirectory(undodir) == 0 then vim.fn.mkdir(undodir, 'p') end
+
+-- ============================================================================
+-- FLOATING TERMINAL
+-- ============================================================================
+
+-- terminal
+local terminal_state = {
+ buf = nil,
+ win = nil,
+ is_open = false,
+}
+
+local function FloatingTerminal()
+ -- If terminal is already open, close it (toggle behavior)
+ if terminal_state.is_open and vim.api.nvim_win_is_valid(terminal_state.win) then
+ vim.api.nvim_win_close(terminal_state.win, false)
+ terminal_state.is_open = false
+ return
+ end
--- ============================================================
--- SECTION 1: OPTIONS
--- Core Neovim settings, leaders, options, basic keymaps, basic autocmds
--- ============================================================
-do
- -- Enable faster startup by caching compiled Lua modules
- vim.loader.enable()
+ -- Create buffer if it doesn't exist or is invalid
+ if not terminal_state.buf or not vim.api.nvim_buf_is_valid(terminal_state.buf) then
+ terminal_state.buf = vim.api.nvim_create_buf(false, true)
+ -- Set buffer options for better terminal experience
+ vim.api.nvim_buf_set_option(terminal_state.buf, 'bufhidden', 'hide')
+ end
- -- Set as the leader key
- -- See `:help mapleader`
- -- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used)
- vim.g.mapleader = ' '
- vim.g.maplocalleader = ' '
+ -- Calculate window dimensions
+ local width = math.floor(vim.o.columns * 0.8)
+ local height = math.floor(vim.o.lines * 0.8)
+ local row = math.floor((vim.o.lines - height) / 2)
+ local col = math.floor((vim.o.columns - width) / 2)
+
+ -- Create the floating window
+ terminal_state.win = vim.api.nvim_open_win(terminal_state.buf, true, {
+ relative = 'editor',
+ width = width,
+ height = height,
+ row = row,
+ col = col,
+ style = 'minimal',
+ border = 'rounded',
+ })
- -- Set to true if you have a Nerd Font installed and selected in the terminal
- vim.g.have_nerd_font = false
+ -- Set transparency for the floating window
+ vim.api.nvim_win_set_option(terminal_state.win, 'winblend', 0)
- -- [[ Setting options ]]
- -- See `:help vim.o`
- -- NOTE: You can change these options as you wish!
- -- For more options, you can see `:help option-list`
+ -- Set transparent background for the window
+ vim.api.nvim_win_set_option(terminal_state.win, 'winhighlight', 'Normal:FloatingTermNormal,FloatBorder:FloatingTermBorder')
- -- Make line numbers default
- vim.o.number = true
- -- You can also add relative line numbers, to help with jumping.
- -- Experiment for yourself to see if you like it!
- -- vim.o.relativenumber = true
+ -- Define highlight groups for transparency
+ vim.api.nvim_set_hl(0, 'FloatingTermNormal', { bg = 'none' })
+ vim.api.nvim_set_hl(0, 'FloatingTermBorder', { bg = 'none' })
- -- Enable mouse mode, can be useful for resizing splits for example!
- vim.o.mouse = 'a'
+ -- Start terminal if not already running
+ local has_terminal = false
+ local lines = vim.api.nvim_buf_get_lines(terminal_state.buf, 0, -1, false)
+ for _, line in ipairs(lines) do
+ if line ~= '' then
+ has_terminal = true
+ break
+ end
+ end
- -- Don't show the mode, since it's already in the status line
- vim.o.showmode = false
+ if not has_terminal then vim.fn.termopen(os.getenv 'SHELL') end
- -- Sync clipboard between OS and Neovim.
- -- Schedule the setting after `UiEnter` because it can increase startup-time.
- -- Remove this option if you want your OS clipboard to remain independent.
- -- See `:help 'clipboard'`
- vim.schedule(function() vim.o.clipboard = 'unnamedplus' end)
+ terminal_state.is_open = true
+ vim.cmd 'startinsert'
- -- Enable break indent
- vim.o.breakindent = true
+ -- Set up auto-close on buffer leave
+ vim.api.nvim_create_autocmd('BufLeave', {
+ buffer = terminal_state.buf,
+ callback = function()
+ if terminal_state.is_open and vim.api.nvim_win_is_valid(terminal_state.win) then
+ vim.api.nvim_win_close(terminal_state.win, false)
+ terminal_state.is_open = false
+ end
+ end,
+ once = true,
+ })
+end
- -- Enable undo/redo changes even after closing and reopening a file
- vim.o.undofile = true
+-- Function to explicitly close the terminal
+local function CloseFloatingTerminal()
+ if terminal_state.is_open and vim.api.nvim_win_is_valid(terminal_state.win) then
+ vim.api.nvim_win_close(terminal_state.win, false)
+ terminal_state.is_open = false
+ end
+end
- -- Case-insensitive searching UNLESS \C or one or more capital letters in the search term
- vim.o.ignorecase = true
- vim.o.smartcase = true
+-- Key mappings
+vim.keymap.set('n', 'tft', FloatingTerminal, { noremap = true, silent = true, desc = 'Toggle floating terminal' })
+vim.keymap.set('n', 'tt', 'horizontal terminal', { noremap = true, silent = true, desc = 'Toggle terminal' })
+vim.keymap.set('t', '', function()
+ if terminal_state.is_open then
+ vim.api.nvim_win_close(terminal_state.win, false)
+ terminal_state.is_open = false
+ end
+end, { noremap = true, silent = true, desc = 'Close floating terminal from terminal mode' })
+
+-- ============================================================================
+-- TABS
+-- ============================================================================
+
+-- Tab display settings
+vim.opt.showtabline = 1 -- Always show tabline (0=never, 1=when multiple tabs, 2=always)
+vim.opt.tabline = '' -- Use default tabline (empty string uses built-in)
+
+-- Transparent tabline appearance
+vim.cmd [[
+ hi TabLineFill guibg=NONE ctermfg=242 ctermbg=NONE
+]]
+
+-- Alternative navigation (more intuitive)
+vim.keymap.set('n', 'tn', 'tabnew', { desc = 'New tab' })
+vim.keymap.set('n', 'tx', 'tabclose', { desc = 'Close tab' })
+
+-- Tab moving
+vim.keymap.set('n', 'tm', 'tabmove', { desc = 'Move tab' })
+vim.keymap.set('n', 't>', 'tabmove +1', { desc = 'Move tab right' })
+vim.keymap.set('n', 't<', 'tabmove -1', { desc = 'Move tab left' })
+
+-- Function to open file in new tab
+local function open_file_in_tab()
+ vim.ui.input({ prompt = 'File to open in new tab: ', completion = 'file' }, function(input)
+ if input and input ~= '' then vim.cmd('tabnew ' .. input) end
+ end)
+end
- -- Keep signcolumn on by default
- vim.o.signcolumn = 'yes'
+-- Function to duplicate current tab
+local function duplicate_tab()
+ local current_file = vim.fn.expand '%:p'
+ if current_file ~= '' then
+ vim.cmd('tabnew ' .. current_file)
+ else
+ vim.cmd 'tabnew'
+ end
+end
- -- Decrease update time
- vim.o.updatetime = 250
+-- Function to close tabs to the right
+local function close_tabs_right()
+ local current_tab = vim.fn.tabpagenr()
+ local last_tab = vim.fn.tabpagenr '$'
- -- Decrease mapped sequence wait time
- vim.o.timeoutlen = 300
+ for i = last_tab, current_tab + 1, -1 do
+ vim.cmd(i .. 'tabclose')
+ end
+end
- -- Configure how new splits should be opened
- vim.o.splitright = true
- vim.o.splitbelow = true
+-- Function to close tabs to the left
+local function close_tabs_left()
+ local current_tab = vim.fn.tabpagenr()
- -- Sets how neovim will display certain whitespace characters in the editor.
- -- See `:help 'list'`
- -- and `:help 'listchars'`
- --
- -- Notice listchars is set using `vim.opt` instead of `vim.o`.
- -- It is very similar to `vim.o` but offers an interface for conveniently interacting with tables.
- -- See `:help lua-options`
- -- and `:help lua-guide-options`
- vim.o.list = true
- vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' }
-
- -- Preview substitutions live, as you type!
- vim.o.inccommand = 'split'
-
- -- Show which line your cursor is on
- vim.o.cursorline = true
-
- -- Minimal number of screen lines to keep above and below the cursor.
- vim.o.scrolloff = 10
-
- -- if performing an operation that would fail due to unsaved changes in the buffer (like `:q`),
- -- instead raise a dialog asking if you wish to save the current file(s)
- -- See `:help 'confirm'`
- vim.o.confirm = true
+ for i = current_tab - 1, 1, -1 do
+ vim.cmd '1tabclose'
+ end
end
--- ============================================================
--- SECTION 2: KEYMAPS
--- basic keymaps
--- ============================================================
-do
- -- [[ Basic Keymaps ]]
- -- See `:help vim.keymap.set()`
-
- -- Clear highlights on search when pressing in normal mode
- -- See `:help hlsearch`
- vim.keymap.set('n', '', 'nohlsearch')
-
- -- Diagnostic Config & Keymaps
- -- See `:help vim.diagnostic.Opts`
- vim.diagnostic.config {
- update_in_insert = false,
- severity_sort = true,
- float = { border = 'rounded', source = 'if_many' },
- underline = { severity = { min = vim.diagnostic.severity.WARN } },
-
- -- Can switch between these as you prefer
- virtual_text = true, -- Text shows up at the end of the line
- virtual_lines = false, -- Text shows up underneath the line, with virtual lines
-
- -- Auto open the float, so you can easily read the errors when jumping with `[d` and `]d`
- jump = {
- on_jump = function(_, bufnr)
- vim.diagnostic.open_float {
- bufnr = bufnr,
- scope = 'cursor',
- focus = false,
- }
- end,
- },
- }
-
- vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' })
-
- -- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier
- -- for people to discover. Otherwise, you normally need to press , which
- -- is not what someone will guess without a bit more experience.
- --
- -- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping
- -- or just use to exit terminal mode
- vim.keymap.set('t', '', '', { desc = 'Exit terminal mode' })
-
- -- TIP: Disable arrow keys in normal mode
- -- vim.keymap.set('n', '', 'echo "Use h to move!!"')
- -- vim.keymap.set('n', '', 'echo "Use l to move!!"')
- -- vim.keymap.set('n', '', 'echo "Use k to move!!"')
- -- vim.keymap.set('n', '', 'echo "Use j to move!!"')
-
- -- Keybinds to make split navigation easier.
- -- Use CTRL+ to switch between windows
- --
- -- See `:help wincmd` for a list of all window commands
- vim.keymap.set('n', '', '', { desc = 'Move focus to the left window' })
- vim.keymap.set('n', '', '', { desc = 'Move focus to the right window' })
- vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' })
- vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' })
-
- -- NOTE: Some terminals have colliding keymaps or are not able to send distinct keycodes
- -- vim.keymap.set("n", "", "H", { desc = "Move window to the left" })
- -- vim.keymap.set("n", "", "L", { desc = "Move window to the right" })
- -- vim.keymap.set("n", "", "J", { desc = "Move window to the lower" })
- -- vim.keymap.set("n", "", "K", { desc = "Move window to the upper" })
-
- -- [[ Basic Autocommands ]]
- -- See `:help lua-guide-autocommands`
-
- -- Highlight when yanking (copying) text
- -- Try it with `yap` in normal mode
- -- See `:help vim.hl.on_yank()`
- vim.api.nvim_create_autocmd('TextYankPost', {
- desc = 'Highlight when yanking (copying) text',
- group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }),
- callback = function() vim.hl.on_yank() end,
- })
-end
+-- Enhanced keybindings
+vim.keymap.set('n', 'tO', open_file_in_tab, { desc = 'Open file in new tab' })
+vim.keymap.set('n', 'td', duplicate_tab, { desc = 'Duplicate current tab' })
+vim.keymap.set('n', 'tr', close_tabs_right, { desc = 'Close tabs to the right' })
+vim.keymap.set('n', 'tL', close_tabs_left, { desc = 'Close tabs to the left' })
+
+vim.keymap.set('n', 'x', 'q', { desc = 'Smart close buffer/tab' })
-- ============================================================
-- SECTION 3: PLUGIN MANAGER INTRO
-- vim.pack intro, build hooks
-- ============================================================
do
- -- [[ Intro to `vim.pack` ]]
- -- `vim.pack` is a new plugin manager built into Neovim,
- -- which provides a Lua interface for installing and managing plugins.
- --
- -- See `:help vim.pack`, `:help vim.pack-examples` or the
- -- excellent blog post from the creator of vim.pack and mini.nvim:
- -- https://echasnovski.com/blog/2026-03-13-a-guide-to-vim-pack
- --
- -- To inspect plugin state and pending updates, run
- -- :lua vim.pack.update(nil, { offline = true })
- --
- -- To update plugins, run
- -- :lua vim.pack.update()
- --
- --
- -- Throughout the rest of the config there will be examples
- -- of how to install and configure plugins using `vim.pack`.
- --
- -- In this section we set up some autocommands to run build
- -- steps for certain plugins after they are installed or updated.
-
local function run_build(name, cmd, cwd)
local result = vim.system(cmd, { cwd = cwd }):wait()
if result.code ~= 0 then
@@ -319,665 +541,11 @@ do
})
end
----Because most plugins are hosted on GitHub, you can use the helper
----function to have less repetition in the following sections.
----@param repo string
----@return string
-local function gh(repo) return 'https://github.com/' .. repo end
+-- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going.
+require 'kickstart.plugins'
+require 'custom.plugins'
--- ============================================================
--- SECTION 4: UI / CORE UX PLUGINS
--- guess-indent, gitsigns, which-key, colorscheme, todo-comments, mini modules
--- ============================================================
-do
- -- [[ Installing and Configuring Plugins ]]
- --
- -- To install a plugin simply call `vim.pack.add` with its git url.
- -- This will download the default branch of the plugin, which will usually be `main` or `master`
- -- You can also have more advanced specs, which we will talk about later.
- --
- -- For most plugins its not enough to install them, you also need to call their `.setup()` to start them.
- --
- -- For example, lets say we want to install `guess-indent.nvim` - a plugin for
- -- automatically detecting and setting the indentation.
- --
- -- We first install it from https://github.com/NMAC427/guess-indent.nvim
- -- and then call its `setup()` function to start it with default settings.
- vim.pack.add { gh 'NMAC427/guess-indent.nvim' }
- require('guess-indent').setup {}
-
- -- Here is a more advanced configuration example that passes options to `gitsigns.nvim`
- --
- -- See `:help gitsigns` to understand what each configuration key does.
- -- Adds git related signs to the gutter, as well as utilities for managing changes
- vim.pack.add { gh 'lewis6991/gitsigns.nvim' }
- require('gitsigns').setup {
- signs = {
- add = { text = '+' }, ---@diagnostic disable-line: missing-fields
- change = { text = '~' }, ---@diagnostic disable-line: missing-fields
- delete = { text = '_' }, ---@diagnostic disable-line: missing-fields
- topdelete = { text = '‾' }, ---@diagnostic disable-line: missing-fields
- changedelete = { text = '~' }, ---@diagnostic disable-line: missing-fields
- },
- }
-
- -- Useful plugin to show you pending keybinds.
- vim.pack.add { gh 'folke/which-key.nvim' }
- require('which-key').setup {
- -- Delay between pressing a key and opening which-key (milliseconds)
- delay = 0,
- icons = { mappings = vim.g.have_nerd_font },
- -- Document existing key chains
- spec = {
- { 's', group = '[S]earch', mode = { 'n', 'v' } },
- { 't', group = '[T]oggle' },
- { 'h', group = 'Git [H]unk', mode = { 'n', 'v' } }, -- Enable gitsigns recommended keymaps first
- { 'gr', group = 'LSP Actions', mode = { 'n' } },
- },
- }
-
- -- [[ Colorscheme ]]
- -- You can easily change to a different colorscheme.
- -- Change the name of the colorscheme plugin below, and then
- -- change the command under that to load whatever the name of that colorscheme is.
- --
- -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
- vim.pack.add { gh 'folke/tokyonight.nvim' }
- ---@diagnostic disable-next-line: missing-fields
- require('tokyonight').setup {
- styles = {
- comments = { italic = false }, -- Disable italics in comments
- },
- }
-
- -- Load the colorscheme here.
- -- Like many other themes, this one has different styles, and you could load
- -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'.
- vim.cmd.colorscheme 'tokyonight-night'
-
- -- Highlight todo, notes, etc in comments
- vim.pack.add { gh 'folke/todo-comments.nvim' }
- require('todo-comments').setup { signs = false }
-
- -- [[ mini.nvim ]]
- -- A collection of various small independent plugins/modules
- vim.pack.add { gh 'nvim-mini/mini.nvim' }
-
- -- If a nerd font is available, load the icons module for pretty icons in various plugins.
- if vim.g.have_nerd_font then
- require('mini.icons').setup()
- -- Used for backwards compatibility with plugins that require `nvim-web-devicons` (e.g. telescope.nvim)
- MiniIcons.mock_nvim_web_devicons()
- end
-
- -- Better Around/Inside textobjects
- --
- -- Examples:
- -- - va) - [V]isually select [A]round [)]paren
- -- - yiiq - [Y]ank [I]nside [I]+1 [Q]uote
- -- - ci' - [C]hange [I]nside [']quote
- require('mini.ai').setup {
- -- NOTE: Avoid conflicts with the built-in incremental selection mappings on Neovim>=0.12 (see `:help treesitter-incremental-selection`)
- mappings = {
- around_next = 'aa',
- inside_next = 'ii',
- },
- n_lines = 500,
- }
-
- -- Add/delete/replace surroundings (brackets, quotes, etc.)
- --
- -- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
- -- - sd' - [S]urround [D]elete [']quotes
- -- - sr)' - [S]urround [R]eplace [)] [']
- require('mini.surround').setup()
-
- -- Simple and easy statusline.
- -- You could remove this setup call if you don't like it,
- -- and try some other statusline plugin
- local statusline = require 'mini.statusline'
- -- Set `use_icons` to true if you have a Nerd Font
- statusline.setup { use_icons = vim.g.have_nerd_font }
-
- -- You can configure sections in the statusline by overriding their
- -- default behavior. For example, here we set the section for
- -- cursor location to LINE:COLUMN
- ---@diagnostic disable-next-line: duplicate-set-field
- statusline.section_location = function() return '%2l:%-2v' end
-
- -- ... and there is more!
- -- Check out: https://github.com/nvim-mini/mini.nvim
-end
-
--- ============================================================
--- SECTION 5: SEARCH & NAVIGATION
--- Telescope setup, keymaps, LSP picker mappings
--- ============================================================
-do
- -- [[ Fuzzy Finder (files, lsp, etc) ]]
- --
- -- Telescope is a fuzzy finder that comes with a lot of different things that
- -- it can fuzzy find! It's more than just a "file finder", it can search
- -- many different aspects of Neovim, your workspace, LSP, and more!
- --
- -- There are lots of other alternative pickers (like snacks.picker, or fzf-lua)
- -- so feel free to experiment and see what you like!
- --
- -- The easiest way to use Telescope, is to start by doing something like:
- -- :Telescope help_tags
- --
- -- After running this command, a window will open up and you're able to
- -- type in the prompt window. You'll see a list of `help_tags` options and
- -- a corresponding preview of the help.
- --
- -- Two important keymaps to use while in Telescope are:
- -- - Insert mode:
- -- - Normal mode: ?
- --
- -- This opens a window that shows you all of the keymaps for the current
- -- Telescope picker. This is really useful to discover what Telescope can
- -- do as well as how to actually do it!
-
- ---@type (string|vim.pack.Spec)[]
- local telescope_plugins = {
- gh 'nvim-lua/plenary.nvim',
- gh 'nvim-telescope/telescope.nvim',
- gh 'nvim-telescope/telescope-ui-select.nvim',
- }
- if vim.fn.executable 'make' == 1 then table.insert(telescope_plugins, gh 'nvim-telescope/telescope-fzf-native.nvim') end
-
- -- NOTE: You can install multiple plugins at once
- vim.pack.add(telescope_plugins)
-
- -- See `:help telescope` and `:help telescope.setup()`
- require('telescope').setup {
- -- You can put your default mappings / updates / etc. in here
- -- All the info you're looking for is in `:help telescope.setup()`
- --
- -- defaults = {
- -- mappings = {
- -- i = { [''] = 'to_fuzzy_refine' },
- -- },
- -- },
- -- pickers = {}
- extensions = {
- ['ui-select'] = { require('telescope.themes').get_dropdown() },
- },
- }
-
- -- Enable Telescope extensions if they are installed
- pcall(require('telescope').load_extension, 'fzf')
- pcall(require('telescope').load_extension, 'ui-select')
-
- -- See `:help telescope.builtin`
- local builtin = require 'telescope.builtin'
- vim.keymap.set('n', 'sh', builtin.help_tags, { desc = '[S]earch [H]elp' })
- vim.keymap.set('n', 'sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' })
- vim.keymap.set('n', 'sf', builtin.find_files, { desc = '[S]earch [F]iles' })
- vim.keymap.set('n', 'ss', builtin.builtin, { desc = '[S]earch [S]elect Telescope' })
- vim.keymap.set({ 'n', 'v' }, 'sw', builtin.grep_string, { desc = '[S]earch current [W]ord' })
- vim.keymap.set('n', 'sg', builtin.live_grep, { desc = '[S]earch by [G]rep' })
- vim.keymap.set('n', 'sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' })
- vim.keymap.set('n', 'sr', builtin.resume, { desc = '[S]earch [R]esume' })
- vim.keymap.set('n', 's.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' })
- vim.keymap.set('n', 'sc', builtin.commands, { desc = '[S]earch [C]ommands' })
- vim.keymap.set('n', '', builtin.buffers, { desc = '[ ] Find existing buffers' })
-
- -- Add Telescope-based LSP pickers when an LSP attaches to a buffer.
- -- If you later switch picker plugins, this is where to update these mappings.
- vim.api.nvim_create_autocmd('LspAttach', {
- group = vim.api.nvim_create_augroup('telescope-lsp-attach', { clear = true }),
- callback = function(event)
- local buf = event.buf
-
- -- Find references for the word under your cursor.
- vim.keymap.set('n', 'grr', builtin.lsp_references, { buffer = buf, desc = '[G]oto [R]eferences' })
-
- -- Jump to the implementation of the word under your cursor.
- -- Useful when your language has ways of declaring types without an actual implementation.
- vim.keymap.set('n', 'gri', builtin.lsp_implementations, { buffer = buf, desc = '[G]oto [I]mplementation' })
-
- -- Jump to the definition of the word under your cursor.
- -- This is where a variable was first declared, or where a function is defined, etc.
- -- To jump back, press .
- vim.keymap.set('n', 'grd', builtin.lsp_definitions, { buffer = buf, desc = '[G]oto [D]efinition' })
-
- -- Fuzzy find all the symbols in your current document.
- -- Symbols are things like variables, functions, types, etc.
- vim.keymap.set('n', 'gO', builtin.lsp_document_symbols, { buffer = buf, desc = 'Open Document Symbols' })
-
- -- Fuzzy find all the symbols in your current workspace.
- -- Similar to document symbols, except searches over your entire project.
- vim.keymap.set('n', 'gW', builtin.lsp_dynamic_workspace_symbols, { buffer = buf, desc = 'Open Workspace Symbols' })
-
- -- Jump to the type of the word under your cursor.
- -- Useful when you're not sure what type a variable is and you want to see
- -- the definition of its *type*, not where it was *defined*.
- vim.keymap.set('n', 'grt', builtin.lsp_type_definitions, { buffer = buf, desc = '[G]oto [T]ype Definition' })
- end,
- })
-
- -- Override default behavior and theme when searching
- vim.keymap.set('n', '/', function()
- -- You can pass additional configuration to Telescope to change the theme, layout, etc.
- builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown {
- winblend = 10,
- previewer = false,
- })
- end, { desc = '[/] Fuzzily search in current buffer' })
-
- -- It's also possible to pass additional configuration options.
- -- See `:help telescope.builtin.live_grep()` for information about particular keys
- vim.keymap.set(
- 'n',
- 's/',
- function()
- builtin.live_grep {
- grep_open_files = true,
- prompt_title = 'Live Grep in Open Files',
- }
- end,
- { desc = '[S]earch [/] in Open Files' }
- )
-
- -- Shortcut for searching your Neovim configuration files
- vim.keymap.set('n', 'sn', function() builtin.find_files { cwd = vim.fn.stdpath 'config', follow = true } end, { desc = '[S]earch [N]eovim files' })
-end
-
--- ============================================================
--- SECTION 6: LSP
--- LSP keymaps, server configuration, Mason tools installations
--- ============================================================
-do
- -- [[ LSP Configuration ]]
- -- Brief aside: **What is LSP?**
- --
- -- LSP is an initialism you've probably heard, but might not understand what it is.
- --
- -- LSP stands for Language Server Protocol. It's a protocol that helps editors
- -- and language tooling communicate in a standardized fashion.
- --
- -- In general, you have a "server" which is some tool built to understand a particular
- -- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers
- -- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone
- -- processes that communicate with some "client" - in this case, Neovim!
- --
- -- LSP provides Neovim with features like:
- -- - Go to definition
- -- - Find references
- -- - Autocompletion
- -- - Symbol Search
- -- - and more!
- --
- -- Thus, Language Servers are external tools that must be installed separately from
- -- Neovim. This is where `mason` and related plugins come into play.
- --
- -- If you're wondering about lsp vs treesitter, you can check out the wonderfully
- -- and elegantly composed help section, `:help lsp-vs-treesitter`
-
- -- Useful status updates for LSP.
- vim.pack.add { gh 'j-hui/fidget.nvim' }
- require('fidget').setup {}
-
- -- This function gets run when an LSP attaches to a particular buffer.
- -- That is to say, every time a new file is opened that is associated with
- -- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this
- -- function will be executed to configure the current buffer
- vim.api.nvim_create_autocmd('LspAttach', {
- group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }),
- callback = function(event)
- -- NOTE: Remember that Lua is a real programming language, and as such it is possible
- -- to define small helper and utility functions so you don't have to repeat yourself.
- --
- -- In this case, we create a function that lets us more easily define mappings specific
- -- for LSP related items. It sets the mode, buffer and description for us each time.
- local map = function(keys, func, desc, mode)
- mode = mode or 'n'
- vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
- end
-
- -- Rename the variable under your cursor.
- -- Most Language Servers support renaming across files, etc.
- map('grn', vim.lsp.buf.rename, '[R]e[n]ame')
-
- -- Execute a code action, usually your cursor needs to be on top of an error
- -- or a suggestion from your LSP for this to activate.
- map('gra', vim.lsp.buf.code_action, '[G]oto Code [A]ction', { 'n', 'x' })
-
- -- WARN: This is not Goto Definition, this is Goto Declaration.
- -- For example, in C this would take you to the header.
- map('grD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
-
- -- The following two autocommands are used to highlight references of the
- -- word under your cursor when your cursor rests there for a little while.
- -- See `:help CursorHold` for information about when this is executed
- --
- -- When you move your cursor, the highlights will be cleared (the second autocommand).
- local client = vim.lsp.get_client_by_id(event.data.client_id)
- if client and client:supports_method('textDocument/documentHighlight', event.buf) then
- local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false })
- vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
- buffer = event.buf,
- group = highlight_augroup,
- callback = vim.lsp.buf.document_highlight,
- })
-
- vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
- buffer = event.buf,
- group = highlight_augroup,
- callback = vim.lsp.buf.clear_references,
- })
-
- vim.api.nvim_create_autocmd('LspDetach', {
- group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }),
- callback = function(event2)
- vim.lsp.buf.clear_references()
- vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf }
- end,
- })
- end
-
- -- The following code creates a keymap to toggle inlay hints in your
- -- code, if the language server you are using supports them
- --
- -- This may be unwanted, since they displace some of your code
- if client and client:supports_method('textDocument/inlayHint', event.buf) then
- map('th', function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf }) end, '[T]oggle Inlay [H]ints')
- end
- end,
- })
-
- -- Enable the following language servers
- -- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
- -- See `:help lsp-config` for information about keys and how to configure
- ---@type table
- local servers = {
- -- clangd = {},
- -- gopls = {},
- -- pyright = {},
- -- rust_analyzer = {},
- --
- -- Some languages (like typescript) have entire language plugins that can be useful:
- -- https://github.com/pmizio/typescript-tools.nvim
- --
- -- But for many setups, the LSP (`ts_ls`) will work just fine
- -- ts_ls = {},
-
- stylua = {}, -- Used to format Lua code
-
- -- Special Lua Config, as recommended by neovim help docs
- lua_ls = {
- on_init = function(client)
- client.server_capabilities.documentFormattingProvider = false -- Disable formatting (formatting is done by stylua)
-
- if client.workspace_folders then
- local path = client.workspace_folders[1].name
- if path ~= vim.fn.stdpath 'config' and (vim.uv.fs_stat(path .. '/.luarc.json') or vim.uv.fs_stat(path .. '/.luarc.jsonc')) then return end
- end
-
- client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, {
- runtime = {
- version = 'LuaJIT',
- path = { 'lua/?.lua', 'lua/?/init.lua' },
- },
- workspace = {
- checkThirdParty = false,
- -- NOTE: this is a lot slower and will cause issues when working on your own configuration.
- -- See https://github.com/neovim/nvim-lspconfig/issues/3189
- library = vim.tbl_extend('force', vim.api.nvim_get_runtime_file('', true), {
- '${3rd}/luv/library',
- '${3rd}/busted/library',
- }),
- },
- })
- end,
- ---@type lspconfig.settings.lua_ls
- settings = {
- Lua = {
- format = { enable = false }, -- Disable formatting (formatting is done by stylua)
- },
- },
- },
- }
-
- vim.pack.add {
- gh 'neovim/nvim-lspconfig',
- gh 'mason-org/mason.nvim',
- gh 'mason-org/mason-lspconfig.nvim',
- gh 'WhoIsSethDaniel/mason-tool-installer.nvim',
- }
-
- -- Automatically install LSPs and related tools to stdpath for Neovim
- require('mason').setup {}
-
- -- Ensure the servers and tools above are installed
- --
- -- To check the current status of installed tools and/or manually install
- -- other tools, you can run
- -- :Mason
- --
- -- You can press `g?` for help in this menu.
- local ensure_installed = vim.tbl_keys(servers or {})
- vim.list_extend(ensure_installed, {
- -- You can add other tools here that you want Mason to install
- })
-
- require('mason-tool-installer').setup { ensure_installed = ensure_installed }
-
- for name, server in pairs(servers) do
- vim.lsp.config(name, server)
- vim.lsp.enable(name)
- end
-end
-
--- ============================================================
--- SECTION 7: FORMATTING
--- conform.nvim setup and keymap
--- ============================================================
-do
- -- [[ Formatting ]]
- vim.pack.add { gh 'stevearc/conform.nvim' }
- require('conform').setup {
- notify_on_error = false,
- format_on_save = function(bufnr)
- -- You can specify filetypes to autoformat on save here:
- local enabled_filetypes = {
- -- lua = true,
- -- python = true,
- }
- if enabled_filetypes[vim.bo[bufnr].filetype] then
- return { timeout_ms = 500 }
- else
- return nil
- end
- end,
- default_format_opts = {
- lsp_format = 'fallback', -- Use external formatters if configured below, otherwise use LSP formatting. Set to `false` to disable LSP formatting entirely.
- },
- -- You can also specify external formatters in here.
- formatters_by_ft = {
- -- rust = { 'rustfmt' },
- -- Conform can also run multiple formatters sequentially
- -- python = { "isort", "black" },
- --
- -- You can use 'stop_after_first' to run the first available formatter from the list
- -- javascript = { "prettierd", "prettier", stop_after_first = true },
- },
- }
-
- vim.keymap.set({ 'n', 'v' }, 'f', function() require('conform').format { async = true } end, { desc = '[F]ormat buffer' })
-end
-
--- ============================================================
--- SECTION 8: AUTOCOMPLETE & SNIPPETS
--- blink.cmp and luasnip setup
--- ============================================================
-do
- -- [[ Snippet Engine ]]
-
- -- NOTE: You can also specify plugin using a version range for its git tag.
- -- See `:help vim.version.range()` for more info
- vim.pack.add { { src = gh 'L3MON4D3/LuaSnip', version = vim.version.range '2.*' } }
- require('luasnip').setup {}
-
- -- `friendly-snippets` contains a variety of premade snippets.
- -- See the README about individual language/framework/plugin snippets:
- -- https://github.com/rafamadriz/friendly-snippets
- --
- -- vim.pack.add { gh 'rafamadriz/friendly-snippets' }
- -- require('luasnip.loaders.from_vscode').lazy_load()
-
- -- [[ Autocomplete Engine ]]
- vim.pack.add { { src = gh 'saghen/blink.cmp', version = vim.version.range '1.*' } }
- require('blink.cmp').setup {
- keymap = {
- -- 'default' (recommended) for mappings similar to built-in completions
- -- to accept ([y]es) the completion.
- -- This will auto-import if your LSP supports it.
- -- This will expand snippets if the LSP sent a snippet.
- -- 'super-tab' for tab to accept
- -- 'enter' for enter to accept
- -- 'none' for no mappings
- --
- -- For an understanding of why the 'default' preset is recommended,
- -- you will need to read `:help ins-completion`
- --
- -- No, but seriously. Please read `:help ins-completion`, it is really good!
- --
- -- All presets have the following mappings:
- -- /: move to right/left of your snippet expansion
- -- : Open menu or open docs if already open
- -- / or /: Select next/previous item
- -- : Hide menu
- -- : Toggle signature help
- --
- -- See `:help blink-cmp-config-keymap` for defining your own keymap
- preset = 'default',
-
- -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
- -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
- },
-
- appearance = {
- -- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
- -- Adjusts spacing to ensure icons are aligned
- nerd_font_variant = 'mono',
- },
-
- completion = {
- -- By default, you may press `` to show the documentation.
- -- Optionally, set `auto_show = true` to show the documentation after a delay.
- documentation = { auto_show = false, auto_show_delay_ms = 500 },
- },
-
- sources = {
- default = { 'lsp', 'path', 'snippets' },
- },
-
- snippets = { preset = 'luasnip' },
-
- -- Blink.cmp includes an optional, recommended rust fuzzy matcher,
- -- which automatically downloads a prebuilt binary when enabled.
- --
- -- By default, we use the Lua implementation instead, but you may enable
- -- the rust implementation via `'prefer_rust_with_warning'`
- --
- -- See `:help blink-cmp-config-fuzzy` for more information
- fuzzy = { implementation = 'lua' },
-
- -- Shows a signature help window while you type arguments for a function
- signature = { enabled = true },
- }
-end
-
--- ============================================================
--- SECTION 9: TREESITTER
--- Parser installation, syntax highlighting, folds, indentation
--- ============================================================
-do
- -- [[ Configure Treesitter ]]
- -- Used to highlight, edit, and navigate code
- --
- -- See `:help nvim-treesitter-intro`
-
- -- NOTE: You can also specify a branch or a specific commit
- vim.pack.add { { src = gh 'nvim-treesitter/nvim-treesitter', version = 'main' } }
-
- -- Ensure basic parsers are installed
- local parsers = { 'bash', 'c', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'markdown_inline', 'query', 'vim', 'vimdoc' }
- require('nvim-treesitter').install(parsers)
-
- ---@param buf integer
- ---@param language string
- local function treesitter_try_attach(buf, language)
- -- Check if a parser exists and load it
- if not vim.treesitter.language.add(language) then return end
- -- Enable syntax highlighting and other treesitter features
- vim.treesitter.start(buf, language)
-
- -- Enable treesitter based folds
- -- For more info on folds see `:help folds`
- -- vim.wo.foldexpr = 'v:lua.vim.treesitter.foldexpr()'
- -- vim.wo.foldmethod = 'expr'
-
- -- Check if treesitter indentation is available for this language, and if so enable it
- -- in case there is no indent query, the indentexpr will fallback to the vim's built in one
- local has_indent_query = vim.treesitter.query.get(language, 'indents') ~= nil
-
- -- Enable treesitter based indentation
- if has_indent_query then vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" end
- end
-
- local available_parsers = require('nvim-treesitter').get_available()
- vim.api.nvim_create_autocmd('FileType', {
- callback = function(args)
- local buf, filetype = args.buf, args.match
-
- local language = vim.treesitter.language.get_lang(filetype)
- if not language then return end
-
- local installed_parsers = require('nvim-treesitter').get_installed 'parsers'
-
- if vim.tbl_contains(installed_parsers, language) then
- -- Enable the parser if it is already installed
- treesitter_try_attach(buf, language)
- elseif vim.tbl_contains(available_parsers, language) then
- -- If a parser is available in `nvim-treesitter`, auto-install it and enable it after the installation is done
- require('nvim-treesitter').install(language):await(function() treesitter_try_attach(buf, language) end)
- else
- -- Try to enable treesitter features in case the parser exists but is not available from `nvim-treesitter`
- treesitter_try_attach(buf, language)
- end
- end,
- })
-end
-
--- ============================================================
--- SECTION 10: OPTIONAL EXAMPLES / NEXT STEPS
--- kickstart.plugins.* examples
--- ============================================================
-do
- -- The following comments only work if you have downloaded the kickstart repo, not just copy pasted the
- -- init.lua. If you want these files, they are in the repository, so you can just download them and
- -- place them in the correct locations.
-
- -- NOTE: Next step on your Neovim journey: Add/Configure additional plugins for Kickstart
- --
- -- Here are some example plugins that I've included in the Kickstart repository.
- -- Uncomment any of the lines below to enable them (you will need to restart nvim).
- --
- -- require 'kickstart.plugins.debug'
- -- require 'kickstart.plugins.indent_line'
- -- require 'kickstart.plugins.lint'
- -- require 'kickstart.plugins.autopairs'
- -- require 'kickstart.plugins.neo-tree'
- -- require 'kickstart.plugins.gitsigns' -- adds gitsigns recommended keymaps
-
- -- NOTE: You can add your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
- --
- -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going.
- -- require 'custom.plugins'
-end
+require 'custom.after.transparency'
-- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et
diff --git a/lua/custom/after/transparency.lua b/lua/custom/after/transparency.lua
new file mode 100644
index 00000000000..59845a3469b
--- /dev/null
+++ b/lua/custom/after/transparency.lua
@@ -0,0 +1,45 @@
+-- transparent background
+vim.api.nvim_set_hl(0, 'Normal', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NormalFloat', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'FloatBorder', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'Pmenu', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'Terminal', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'EndOfBuffer', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'FoldColumn', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'Folded', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'SignColumn', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NormalNC', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'WhichKeyFloat', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'TelescopeBorder', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'TelescopeNormal', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'TelescopePromptBorder', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'TelescopePromptTitle', { bg = 'none' })
+
+-- transparent background for neotree
+vim.api.nvim_set_hl(0, 'NeoTreeNormal', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NeoTreeNormalNC', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NeoTreeVertSplit', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NeoTreeWinSeparator', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NeoTreeEndOfBuffer', { bg = 'none' })
+
+-- transparent background for nvim-tree
+vim.api.nvim_set_hl(0, 'NvimTreeNormal', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NvimTreeVertSplit', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NvimTreeEndOfBuffer', { bg = 'none' })
+
+-- transparent notify background
+vim.api.nvim_set_hl(0, 'NotifyINFOBody', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NotifyERRORBody', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NotifyWARNBody', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NotifyTRACEBody', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NotifyDEBUGBody', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NotifyINFOTitle', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NotifyERRORTitle', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NotifyWARNTitle', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NotifyTRACETitle', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NotifyDEBUGTitle', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NotifyINFOBorder', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NotifyERRORBorder', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NotifyWARNBorder', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NotifyTRACEBorder', { bg = 'none' })
+vim.api.nvim_set_hl(0, 'NotifyDEBUGBorder', { bg = 'none' })
diff --git a/lua/custom/plugins/autotags.lua b/lua/custom/plugins/autotags.lua
new file mode 100644
index 00000000000..74083516d43
--- /dev/null
+++ b/lua/custom/plugins/autotags.lua
@@ -0,0 +1,25 @@
+-- return {
+-- 'windwp/nvim-ts-autotag',
+-- dependencies = { 'nvim-treesitter/nvim-treesitter' },
+-- config = function()
+-- require('nvim-ts-autotag').setup {
+-- autotag = {
+-- enable = true,
+-- enable_rename = true,
+-- enable_close = true,
+-- enable_close_on_slash = true,
+-- filetypes = {
+-- 'html',
+-- 'xml',
+-- 'javascript',
+-- 'javascriptreact',
+-- 'typescript',
+-- 'typescriptreact',
+-- 'vue',
+-- 'svelte',
+-- },
+-- },
+-- }
+-- end,
+-- event = 'InsertEnter',
+-- }
diff --git a/lua/custom/plugins/color-picker.lua b/lua/custom/plugins/color-picker.lua
new file mode 100644
index 00000000000..80aeca950c9
--- /dev/null
+++ b/lua/custom/plugins/color-picker.lua
@@ -0,0 +1,5 @@
+local function gh(repo) return 'https://github.com/' .. repo end
+do
+ vim.pack.add { gh 'eero-lehtinen/oklch-color-picker.nvim' }
+ require('oklch-color-picker').setup {}
+end
diff --git a/lua/custom/plugins/harpoon.lua b/lua/custom/plugins/harpoon.lua
new file mode 100644
index 00000000000..d41b5e9b189
--- /dev/null
+++ b/lua/custom/plugins/harpoon.lua
@@ -0,0 +1,78 @@
+-- local function gh(repo) return 'https://github.com/' .. repo end
+-- do
+-- vim.pack.add { { src = gh 'ThePrimeagen/harpoon', branch = "harpoon2" }, gh "nvim-lua/plenary.nvim" }
+-- require('harpoon').setup {
+-- keys = {
+-- {
+-- 'hh',
+-- 'lua require("harpoon.ui").toggle_quick_menu()',
+-- desc = 'Toggle Harpoon Quick Menu',
+-- },
+-- {
+-- 'ha',
+-- 'lua require("harpoon.mark").add_file()',
+-- desc = 'Mark Current File',
+-- },
+-- {
+-- 'hr',
+-- 'lua require("harpoon.mark").clear_file()',
+-- desc = 'Remove Current File',
+-- },
+-- {
+-- 'hn',
+-- 'lua require("harpoon.ui").nav_next()',
+-- desc = 'Next Harpoon',
+-- },
+-- {
+-- 'hp',
+-- 'lua require("harpoon.ui").nav_prev()',
+-- desc = 'Previous Harpoon',
+-- },
+-- {
+-- 'h&',
+-- 'lua require("harpoon.ui").nav_file(1)',
+-- desc = 'Go to 1st Mark',
+-- },
+-- {
+-- 'hé',
+-- 'lua require("harpoon.ui").nav_file(2)',
+-- desc = 'Go to 2nd Mark',
+-- },
+-- {
+-- 'h"',
+-- 'lua require("harpoon.ui").nav_file(3)',
+-- desc = 'Go to 3rd Mark',
+-- },
+-- {
+-- "h'",
+-- 'lua require("harpoon.ui").nav_file(4)',
+-- desc = 'Go to 4th Mark',
+-- },
+-- {
+-- 'h(',
+-- 'lua require("harpoon.ui").nav_file(5)',
+-- desc = 'Go to 5th Mark',
+-- },
+-- {
+-- 'h§',
+-- 'lua require("harpoon.ui").nav_file(6)',
+-- desc = 'Go to 6th Mark',
+-- },
+-- {
+-- 'hè',
+-- 'lua require("harpoon.ui").nav_file(7)',
+-- desc = 'Go to 7th Mark',
+-- },
+-- {
+-- 'h!',
+-- 'lua require("harpoon.ui").nav_file(8)',
+-- desc = 'Go to 8th Mark',
+-- },
+-- {
+-- 'hç',
+-- 'lua require("harpoon.ui").nav_file(9)',
+-- desc = 'Go to 9th Mark',
+-- },
+-- }
+-- }
+-- end
diff --git a/lua/custom/plugins/hidden-diagnostic.lua b/lua/custom/plugins/hidden-diagnostic.lua
new file mode 100644
index 00000000000..940a46e920b
--- /dev/null
+++ b/lua/custom/plugins/hidden-diagnostic.lua
@@ -0,0 +1,11 @@
+-- return {
+-- 'rachartier/tiny-inline-diagnostic.nvim',
+-- event = 'VeryLazy',
+-- priority = 1000,
+-- config = function()
+-- require('tiny-inline-diagnostic').setup()
+-- vim.diagnostic.config {
+-- virtual_text = false,
+-- } -- Only if needed in your configuration, if you already have native LSP diagnostics
+-- end,
+-- }
diff --git a/lua/custom/plugins/markdown.lua b/lua/custom/plugins/markdown.lua
new file mode 100644
index 00000000000..5bfec172b72
--- /dev/null
+++ b/lua/custom/plugins/markdown.lua
@@ -0,0 +1,8 @@
+local function gh(repo) return 'https://github.com/' .. repo end
+do
+ vim.pack.add {
+ gh 'OXY2DEV/markview.nvim',
+ gh 'saghen/blink.lib',
+ gh 'saghen/blink.cmp',
+ }
+end
diff --git a/lua/custom/plugins/supermaven.lua b/lua/custom/plugins/supermaven.lua
new file mode 100644
index 00000000000..f2a8d5bc90f
--- /dev/null
+++ b/lua/custom/plugins/supermaven.lua
@@ -0,0 +1,19 @@
+local function gh(repo) return 'https://github.com/' .. repo end
+do
+ vim.pack.add { gh 'supermaven-inc/supermaven-nvim' }
+ require('supermaven-nvim').setup {
+ keymaps = {
+ accept_suggestion = '',
+ clear_suggestion = '',
+ accept_word = '',
+ },
+ ignore_filetypes = { cpp = true }, -- or { "cpp", }
+ color = {
+ cterm = 244,
+ },
+ log_level = 'info', -- set to "off" to disable logging completely
+ disable_inline_completion = false, -- disables inline completion for use with cmp
+ disable_keymaps = false, -- disables built in keymaps for more manual control
+ condition = function() return false end, -- condition to check for stopping supermaven, `true` means to stop supermaven when the condition is true.}
+ }
+end
diff --git a/lua/custom/plugins/tmux-navigator.lua b/lua/custom/plugins/tmux-navigator.lua
new file mode 100644
index 00000000000..e5d2856af3a
--- /dev/null
+++ b/lua/custom/plugins/tmux-navigator.lua
@@ -0,0 +1,9 @@
+local function gh(repo) return 'https://github.com/' .. repo end
+do
+ vim.pack.add { gh 'christoomey/vim-tmux-navigator' }
+ vim.keymap.set('n', '', 'TmuxNavigateLeft')
+ vim.keymap.set('n', '', 'TmuxNavigateDown')
+ vim.keymap.set('n', '', 'TmuxNavigateUp