feat: phase 2 migration

This commit is contained in:
Anup Sebastian 2025-11-01 01:37:23 -05:00
parent fc1fcc0c8c
commit c0c1148fde
20 changed files with 663 additions and 2645 deletions

203
init.lua
View file

@ -1,105 +1,53 @@
--[[
=====================================================================
==================== READ THIS BEFORE CONTINUING ====================
NEOVIM CONFIGURATION
=====================================================================
======== .-----. ========
======== .----------------------. | === | ========
======== |.-""""""""""""""""""-.| |-----| ========
======== || || | === | ========
======== || KICKSTART.NVIM || |-----| ========
======== || || | === | ========
======== || || |-----| ========
======== ||:Tutor || |:::::| ========
======== |'-..................-'| |____o| ========
======== `"")----------------(""` ___________ ========
======== /::::::::::| |::::::::::\ \ no mouse \ ========
======== /:::========| |==hjkl==:::\ \ required \ ========
======== '""""""""""""' '""""""""""""' '""""""""""' ========
======== ========
This configuration started from Kickstart.nvim and has been customized
and reorganized into a modular structure.
For help:
- Run `:Tutor` to learn Neovim basics
- Run `:help` to access built-in documentation
- Press `<space>sh` to search help with Telescope
- Run `:checkhealth` to diagnose issues
- See ORGANIZATION.md for structure details
This is YOUR config now! Customize it to your needs.
=====================================================================
=====================================================================
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:
- <escape key>
- :
- Tutor
- <enter key>
(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 "<space>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! :)
--]]
-- ========================================================================
-- MODULAR CONFIGURATION
-- MODULAR NEOVIM CONFIGURATION
-- ========================================================================
-- This init.lua has been split into modular pieces for better organization.
-- Each module is responsible for a specific aspect of the configuration:
-- This configuration has been organized into modular pieces for clarity
-- and maintainability. Each module handles a specific aspect:
--
-- lua/config/options.lua - Vim options (set, opt)
-- lua/config/keymaps.lua - Global keymaps
-- lua/config/autocmds.lua - Global autocommands
-- lua/config/lazy.lua - Plugin manager and all plugins
-- lua/config/
-- ├── options.lua - Vim settings (leader, mouse, clipboard, etc.)
-- ├── keymaps.lua - Global keymaps (window navigation, quit, etc.)
-- ├── autocmds.lua - Global autocommands (highlight yank, etc.)
-- └── lazy.lua - Plugin manager bootstrap (~50 lines)
--
-- Language-specific configurations are in:
-- lua/custom/plugins/ - Custom plugins (Flutter, Python, etc.)
-- lua/kickstart/plugins/ - Kickstart default plugins
-- lua/plugins/
-- ├── core/ - Always loaded plugins
-- │ ├── ui.lua - Colorscheme, statusline, treesitter
-- │ ├── editor.lua - Telescope, which-key
-- │ ├── git.lua - Gitsigns
-- │ ├── completion.lua - Blink.cmp, snippets
-- │ ├── session.lua - Auto-session
-- │ ├── extras.lua - Mini.animate, trouble, noice
-- │ └── neo-tree.lua - File explorer
-- │
-- ├── lsp/ - LSP infrastructure
-- │ └── init.lua - LSP config, mason, conform
-- │
-- └── lang/ - Language-specific (lazy-loaded by filetype)
-- ├── flutter.lua - Dart/Flutter (ft='dart')
-- ├── python.lua - Python (ft='python')
-- └── svelte.lua - Svelte (ft='svelte')
--
-- See ORGANIZATION.md for more details on the structure.
-- See ORGANIZATION.md for detailed information about the structure.
-- See MIGRATION.md for the migration guide from monolithic to modular.
-- ========================================================================
-- Load core configuration modules
@ -108,78 +56,5 @@ require 'config.keymaps' -- Global keymaps
require 'config.autocmds' -- Global autocommands
require 'config.lazy' -- Plugin manager and plugins
-- ========================================================================
-- LANGUAGE-SPECIFIC LSP SETUP (for lazy-loaded profiles)
-- ========================================================================
-- Python LSP - starts when opening .py files
vim.api.nvim_create_autocmd('FileType', {
pattern = 'python',
once = false,
callback = function(args)
-- Check if pyright is already attached
local clients = vim.lsp.get_clients { bufnr = args.buf, name = 'pyright' }
if #clients > 0 then
return
end
-- Get capabilities from blink.cmp
local capabilities = require('blink.cmp').get_lsp_capabilities()
local root_dir = vim.fs.root(args.buf, {
'pyproject.toml',
'setup.py',
'setup.cfg',
'requirements.txt',
'Pipfile',
'pyrightconfig.json',
'.git',
})
-- Find Python interpreter (prioritize virtual environments)
local function find_python()
if not root_dir then
return nil
end
-- Check common venv locations relative to project root
local venv_paths = {
root_dir .. '/.venv/bin/python',
root_dir .. '/venv/bin/python',
root_dir .. '/.env/bin/python',
root_dir .. '/env/bin/python',
}
for _, path in ipairs(venv_paths) do
if vim.fn.executable(path) == 1 then
return path
end
end
return nil
end
local python_path = find_python()
vim.lsp.start {
name = 'pyright',
cmd = { vim.fn.stdpath 'data' .. '/mason/bin/pyright-langserver', '--stdio' },
root_dir = root_dir or vim.fn.getcwd(),
capabilities = capabilities,
settings = {
python = {
pythonPath = python_path, -- Tell pyright which Python to use
analysis = {
typeCheckingMode = 'basic',
autoImportCompletions = true,
autoSearchPaths = true,
useLibraryCodeForTypes = true,
diagnosticMode = 'openFilesOnly',
},
},
},
}
end,
})
-- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et