summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--neovim/.config/nvim/init.lua220
1 files changed, 220 insertions, 0 deletions
diff --git a/neovim/.config/nvim/init.lua b/neovim/.config/nvim/init.lua
new file mode 100644
index 0000000..1a7ffa3
--- /dev/null
+++ b/neovim/.config/nvim/init.lua
@@ -0,0 +1,220 @@
+--------------------------------------------------------------------------------
+-- Neovim Configuration
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- Options
+--------------------------------------------------------------------------------
+
+-- UI
+vim.opt.cursorline = true
+vim.opt.number = true
+vim.opt.scrolloff = 8
+vim.opt.signcolumn = "yes"
+vim.opt.termguicolors = true
+
+-- Tabs & Indentation
+vim.opt.expandtab = true
+vim.opt.shiftwidth = 4
+vim.opt.tabstop = 4
+
+-- Search
+vim.opt.ignorecase = true
+vim.opt.smartcase = true
+
+-- Splits
+vim.opt.splitbelow = true
+vim.opt.splitright = true
+
+-- Folding (treesitter-based)
+vim.opt.foldmethod = "expr"
+vim.opt.foldexpr = "nvim_treesitter#foldexpr()"
+vim.opt.foldenable = false
+
+-- Misc
+vim.opt.clipboard = "unnamedplus"
+vim.opt.undofile = true
+vim.opt.updatetime = 250
+
+--------------------------------------------------------------------------------
+-- Bootstrap lazy.nvim
+--------------------------------------------------------------------------------
+local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
+if not vim.uv.fs_stat(lazypath) then
+ vim.fn.system({
+ "git", "clone", "--filter=blob:none",
+ "https://github.com/folke/lazy.nvim.git",
+ "--branch=stable", lazypath,
+ })
+end
+vim.opt.rtp:prepend(lazypath)
+
+--------------------------------------------------------------------------------
+-- Plugins
+--------------------------------------------------------------------------------
+require("lazy").setup({
+
+ -- Colorscheme ---------------------------------------------------------------
+ {
+ "Shadorain/shadotheme",
+ lazy = false,
+ priority = 1000,
+ config = function() vim.cmd.colorscheme("shado") end,
+ },
+
+ -- Treesitter ----------------------------------------------------------------
+ {
+ "nvim-treesitter/nvim-treesitter",
+ build = ":TSUpdate",
+ dependencies = { "nvim-treesitter/nvim-treesitter-textobjects" },
+ config = function()
+ require("nvim-treesitter.configs").setup({
+ ensure_installed = { "bash", "lua", "python", "ruby" },
+ auto_install = true,
+ highlight = { enable = true },
+ indent = { enable = true },
+ incremental_selection = {
+ enable = true,
+ keymaps = {
+ init_selection = "<C-space>",
+ node_incremental = "<C-space>",
+ node_decremental = "<bs>",
+ },
+ },
+ textobjects = {
+ select = {
+ enable = true,
+ lookahead = true,
+ keymaps = {
+ ["af"] = "@function.outer", ["if"] = "@function.inner",
+ ["ac"] = "@class.outer", ["ic"] = "@class.inner",
+ ["aa"] = "@parameter.outer", ["ia"] = "@parameter.inner",
+ },
+ },
+ move = {
+ enable = true,
+ set_jumps = true,
+ goto_next_start = { ["]m"] = "@function.outer", ["]]"] = "@class.outer" },
+ goto_prev_start = { ["[m"] = "@function.outer", ["[["] = "@class.outer" },
+ },
+ },
+ })
+ end,
+ },
+
+ -- Completion ----------------------------------------------------------------
+ {
+ "saghen/blink.cmp",
+ version = "1.*",
+ opts = {
+ keymap = {
+ preset = "default",
+ ["<CR>"] = { "accept", "fallback" },
+ ["<Tab>"] = { "select_next", "fallback" },
+ ["<S-Tab>"] = { "select_prev", "fallback" },
+ },
+ sources = {
+ default = { "lsp", "path", "buffer" },
+ providers = { lsp = { timeout_ms = 2000 } },
+ },
+ completion = {
+ trigger = { show_in_snippet = false },
+ menu = { auto_show = true },
+ documentation = { auto_show = true, auto_show_delay_ms = 200 },
+ },
+ },
+ },
+
+ -- Auto-pairs & Tags ---------------------------------------------------------
+ { "windwp/nvim-autopairs", event = "InsertEnter", opts = {} },
+ { "windwp/nvim-ts-autotag", opts = {} },
+ { "tpope/vim-endwise" },
+
+ -- UI ------------------------------------------------------------------------
+ { "nvim-lualine/lualine.nvim", dependencies = { "nvim-tree/nvim-web-devicons" }, opts = {} },
+ { "lewis6991/gitsigns.nvim", opts = {} },
+ { "folke/which-key.nvim", event = "VeryLazy", opts = {} },
+
+ -- Navigation ----------------------------------------------------------------
+ {
+ "nvim-tree/nvim-tree.lua",
+ dependencies = { "nvim-tree/nvim-web-devicons" },
+ opts = {},
+ keys = { { "<leader>e", "<cmd>NvimTreeToggle<cr>", desc = "File tree" } },
+ },
+ {
+ "hedyhli/outline.nvim",
+ opts = {},
+ keys = { { "<leader>o", "<cmd>Outline<cr>", desc = "Code outline" } },
+ },
+ { "junegunn/fzf", build = "./install --bin" },
+ {
+ "junegunn/fzf.vim",
+ keys = {
+ { "<leader>ff", "<cmd>Files<cr>", desc = "Find files" },
+ { "<leader>fg", "<cmd>Rg<cr>", desc = "Live grep" },
+ { "<leader>fb", "<cmd>Buffers<cr>", desc = "Buffers" },
+ },
+ },
+
+ -- Editing -------------------------------------------------------------------
+ {
+ "numToStr/Comment.nvim",
+ opts = {},
+ keys = {
+ { "gcc", mode = "n", desc = "Comment line" },
+ { "gc", mode = "v", desc = "Comment selection" },
+ },
+ },
+
+ -- Notes ---------------------------------------------------------------------
+ { "vimwiki/vimwiki" },
+
+})
+
+--------------------------------------------------------------------------------
+-- LSP Configuration
+--------------------------------------------------------------------------------
+vim.lsp.config.pyright = {
+ cmd = { "pyright-langserver", "--stdio" },
+ filetypes = { "python" },
+ root_markers = { "pyproject.toml", "setup.py", "setup.cfg", "requirements.txt", ".git" },
+ single_file_support = true,
+ settings = {
+ python = {
+ analysis = {
+ typeCheckingMode = "basic",
+ autoSearchPaths = false,
+ diagnosticMode = "openFilesOnly",
+ useLibraryCodeForTypes = false,
+ },
+ },
+ },
+}
+
+vim.lsp.config.solargraph = {
+ cmd = { "solargraph", "stdio" },
+ filetypes = { "ruby" },
+ root_markers = { "Gemfile", ".git" },
+ single_file_support = true,
+}
+
+vim.lsp.enable("pyright")
+vim.lsp.enable("solargraph")
+
+--------------------------------------------------------------------------------
+-- Keymaps
+--------------------------------------------------------------------------------
+vim.api.nvim_create_autocmd("LspAttach", {
+ callback = function(args)
+ local map = function(key, fn, desc)
+ vim.keymap.set("n", key, fn, { buffer = args.buf, desc = desc })
+ end
+ map("gd", vim.lsp.buf.definition, "Go to definition")
+ map("gr", vim.lsp.buf.references, "References")
+ map("K", vim.lsp.buf.hover, "Hover docs")
+ map("<leader>rn", vim.lsp.buf.rename, "Rename symbol")
+ map("<leader>ca", vim.lsp.buf.code_action, "Code action")
+ map("<leader>ds", vim.lsp.buf.document_symbol, "Document symbols")
+ end,
+})