aboutsummaryrefslogtreecommitdiff
path: root/nvim
diff options
context:
space:
mode:
authorDaniil Rozanov <dev@drozanov.info>2024-11-11 10:28:46 +0400
committerDaniil Rozanov <dev@drozanov.info>2024-11-11 10:28:46 +0400
commitc7e9ba4c96f73b650d5a1831f934ddac90cd019a (patch)
tree90e79c9a0d3d708f2937373c2b2d555c42cdd77a /nvim
parent2262cbc7f4d6d05ce4932af8b586ea8455361eda (diff)
neovim init
Diffstat (limited to 'nvim')
-rw-r--r--nvim/.config/nvim/after/ftplugin/dbui.lua4
-rw-r--r--nvim/.config/nvim/after/ftplugin/sql.lua1
-rw-r--r--nvim/.config/nvim/init.lua25
-rw-r--r--nvim/.config/nvim/lua/custom/autopairs.lua5
-rw-r--r--nvim/.config/nvim/lua/custom/cmake.lua1
-rw-r--r--nvim/.config/nvim/lua/custom/cmp.lua69
-rw-r--r--nvim/.config/nvim/lua/custom/gitsigns.lua60
-rw-r--r--nvim/.config/nvim/lua/custom/harpoon.lua25
-rw-r--r--nvim/.config/nvim/lua/custom/init.lua5
-rw-r--r--nvim/.config/nvim/lua/custom/leap.lua3
-rw-r--r--nvim/.config/nvim/lua/custom/lsp.lua134
-rw-r--r--nvim/.config/nvim/lua/custom/mini.lua0
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/autopairs.lua9
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/bqf.lua1
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/celluar.lua1
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/cmake.lua17
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/cmp.lua22
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/comment.lua1
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/conform.lua36
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/dadbod.lua16
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/gitsigns.lua6
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/harpoon.lua8
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/leap.lua7
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/lsp.lua22
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/lualine.lua5
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/mini.lua8
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/rest.lua16
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/sort.lua1
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/substitude.lua6
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/surround.lua6
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/telescope.lua16
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/textcase.lua6
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/themes.lua7
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/todo-comments.lua6
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/toggleterm.lua7
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/treesitter.lua7
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/vim-sleuth.lua1
-rw-r--r--nvim/.config/nvim/lua/custom/plugins/which-key.lua15
-rw-r--r--nvim/.config/nvim/lua/custom/rest.lua14
-rw-r--r--nvim/.config/nvim/lua/custom/substitude.lua6
-rw-r--r--nvim/.config/nvim/lua/custom/telescope.lua41
-rw-r--r--nvim/.config/nvim/lua/custom/toggleterm.lua41
-rw-r--r--nvim/.config/nvim/lua/custom/treesitter.lua51
-rw-r--r--nvim/.config/nvim/plugin/autocmds.lua51
-rw-r--r--nvim/.config/nvim/plugin/keymaps.lua57
-rw-r--r--nvim/.config/nvim/plugin/netrw.lua0
-rw-r--r--nvim/.config/nvim/plugin/options.lua41
-rw-r--r--nvim/.config/nvim/plugin/terminal.lua14
-rw-r--r--nvim/.config/nvim/stylua.toml3
49 files changed, 904 insertions, 0 deletions
diff --git a/nvim/.config/nvim/after/ftplugin/dbui.lua b/nvim/.config/nvim/after/ftplugin/dbui.lua
new file mode 100644
index 0000000..dccca2f
--- /dev/null
+++ b/nvim/.config/nvim/after/ftplugin/dbui.lua
@@ -0,0 +1,4 @@
+local opt = vim.opt_local
+
+opt.shiftwidth = 2
+opt.cursorline = true
diff --git a/nvim/.config/nvim/after/ftplugin/sql.lua b/nvim/.config/nvim/after/ftplugin/sql.lua
new file mode 100644
index 0000000..cb4775f
--- /dev/null
+++ b/nvim/.config/nvim/after/ftplugin/sql.lua
@@ -0,0 +1 @@
+vim.opt_local.commentstring = "-- %s"
diff --git a/nvim/.config/nvim/init.lua b/nvim/.config/nvim/init.lua
new file mode 100644
index 0000000..d3ebf8f
--- /dev/null
+++ b/nvim/.config/nvim/init.lua
@@ -0,0 +1,25 @@
+vim.g.mapleader = " "
+vim.g.maplocalleader = " "
+
+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
+
+-- Add lazy to the `runtimepath`, this allows us to `require` it.
+---@diagnostic disable-next-line: undefined-field
+vim.opt.rtp:prepend(lazypath)
+
+-- Set up lazy, and load my `lua/custom/plugins/` folder
+require("lazy").setup({ import = "custom/plugins" }, {
+ change_detection = {
+ notify = false,
+ },
+})
diff --git a/nvim/.config/nvim/lua/custom/autopairs.lua b/nvim/.config/nvim/lua/custom/autopairs.lua
new file mode 100644
index 0000000..00c7812
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/autopairs.lua
@@ -0,0 +1,5 @@
+require("nvim-autopairs").setup {}
+-- Automatically add `(` after selecting a function or method
+local cmp_autopairs = require "nvim-autopairs.completion.cmp"
+local cmp = require "cmp"
+cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done())
diff --git a/nvim/.config/nvim/lua/custom/cmake.lua b/nvim/.config/nvim/lua/custom/cmake.lua
new file mode 100644
index 0000000..bef1fc7
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/cmake.lua
@@ -0,0 +1 @@
+require("cmake").setup { cmake = { parallel_jobs = #vim.uv.cpu_info() } }
diff --git a/nvim/.config/nvim/lua/custom/cmp.lua b/nvim/.config/nvim/lua/custom/cmp.lua
new file mode 100644
index 0000000..5cbb2e8
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/cmp.lua
@@ -0,0 +1,69 @@
+vim.opt.completeopt = { "menu", "menuone", "noselect" }
+vim.opt.shortmess:append "c"
+
+local lspkind = require "lspkind"
+lspkind.init {}
+
+local luasnip = require "luasnip"
+luasnip.config.setup {}
+require("luasnip.loaders.from_vscode").lazy_load()
+
+local cmp = require "cmp"
+
+cmp.setup {
+ snippet = {
+ expand = function(args)
+ luasnip.lsp_expand(args.body)
+ end,
+ },
+ completion = { completeopt = "menu,menuone,noinsert" },
+ mapping = cmp.mapping.preset.insert {
+ -- ["<C-n>"] = cmp.mapping.select_next_item { behavior = cmp.SelectBehavior.Insert },
+ -- ["<C-p>"] = cmp.mapping.select_prev_item { behavior = cmp.SelectBehavior.Insert },
+ ["<C-y>"] = cmp.mapping(
+ cmp.mapping.confirm {
+ behavior = cmp.ConfirmBehavior.Insert,
+ select = true,
+ },
+ { "i", "c" }
+ ),
+ ["<C-b>"] = cmp.mapping.scroll_docs(-4),
+ ["<C-f>"] = cmp.mapping.scroll_docs(4),
+ -- ["<C-y>"] = cmp.mapping.confirm { select = true },
+ -- -- Will move you to the right of each of the snippet's expansion locations.
+ ["<C-l>"] = cmp.mapping(function()
+ if luasnip.expand_or_locally_jumpable() then
+ luasnip.expand_or_jump()
+ end
+ end, { "i", "s" }),
+ -- Will move you to the left of each of the snippet's expansion locations.
+ ["<C-h>"] = cmp.mapping(function()
+ if luasnip.locally_jumpable(-1) then
+ luasnip.jump(-1)
+ end
+ end, { "i", "s" }),
+ },
+ sources = {
+ { name = "nvim_lsp" },
+ { name = "luasnip" },
+ { name = "path" },
+ { name = "buffer" },
+ },
+}
+
+-- Setup up vim-dadbod
+cmp.setup.filetype({ "sql" }, {
+ sources = {
+ { name = "vim-dadbod-completion" },
+ { name = "buffer" },
+ },
+})
+
+luasnip.config.set_config {
+ history = false,
+ updateevents = "TextChanged,TextChangedI",
+}
+
+for _, ft_path in ipairs(vim.api.nvim_get_runtime_file("lua/custom/snippets/*.lua", true)) do
+ loadfile(ft_path)()
+end
diff --git a/nvim/.config/nvim/lua/custom/gitsigns.lua b/nvim/.config/nvim/lua/custom/gitsigns.lua
new file mode 100644
index 0000000..2a12ebb
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/gitsigns.lua
@@ -0,0 +1,60 @@
+local gitsigns = require "gitsigns"
+
+local on_attach = function(bufnr)
+ local function map(mode, l, r, opts)
+ opts = opts or {}
+ opts.buffer = bufnr
+ vim.keymap.set(mode, l, r, opts)
+ end
+
+ -- Navigation
+ map("n", "]c", function()
+ if vim.wo.diff then
+ vim.cmd.normal { "]c", bang = true }
+ else
+ gitsigns.nav_hunk "next"
+ end
+ end)
+
+ map("n", "[c", function()
+ if vim.wo.diff then
+ vim.cmd.normal { "[c", bang = true }
+ else
+ gitsigns.nav_hunk "prev"
+ end
+ end)
+
+ -- Actions
+ map("n", "<leader>gs", gitsigns.stage_hunk, { desc = "Stage hunk" })
+ map("n", "<leader>gr", gitsigns.reset_hunk, { desc = "Reset hunk" })
+ map("v", "<leader>gs", function()
+ gitsigns.stage_hunk { vim.fn.line ".", vim.fn.line "v" }
+ end, { desc = "Stage hunk" })
+ map("v", "<leader>gr", function()
+ gitsigns.reset_hunk { vim.fn.line ".", vim.fn.line "v" }
+ end, { desc = "Reset hunk" })
+ map("n", "<leader>gS", gitsigns.stage_buffer, { desc = "Stage buffer" })
+ map("n", "<leader>gu", gitsigns.undo_stage_hunk, { desc = "Undo stage hunk" })
+ map("n", "<leader>gR", gitsigns.reset_buffer, { desc = "Reset buffer" })
+ map("n", "<leader>gp", gitsigns.preview_hunk, { desc = "Preview hunk" })
+ map("n", "<leader>gb", function()
+ gitsigns.blame_line { full = true }
+ end, { desc = "Blame line" })
+ map("n", "<leader>Tb", gitsigns.toggle_current_line_blame, { desc = "Toggle blame line" })
+ map("n", "<leader>Td", gitsigns.toggle_deleted, { desc = "Toggle deleted" })
+ map("n", "<leader>gd", gitsigns.diffthis, { desc = "Diff this" })
+ map("n", "<leader>gD", function()
+ gitsigns.diffthis "~"
+ end, { desc = "Diff this ~" })
+end
+
+gitsigns.setup {
+ signs = {
+ add = { text = "+" },
+ change = { text = "~" },
+ delete = { text = "_" },
+ topdelete = { text = "‾" },
+ changedelete = { text = "~" },
+ },
+ on_attach = on_attach,
+}
diff --git a/nvim/.config/nvim/lua/custom/harpoon.lua b/nvim/.config/nvim/lua/custom/harpoon.lua
new file mode 100644
index 0000000..06a20d7
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/harpoon.lua
@@ -0,0 +1,25 @@
+local harpoon = require "harpoon"
+harpoon:setup()
+
+vim.keymap.set("n", "<leader>a", function()
+ harpoon:list():add()
+end)
+
+vim.keymap.set("n", "<leader><leader>", function()
+ harpoon.ui:toggle_quick_menu(harpoon:list())
+end)
+
+vim.keymap.set("n", "<c-n>", function()
+ require("harpoon"):list():next()
+end)
+
+vim.keymap.set("n", "<c-p>", function()
+ require("harpoon"):list():prev()
+end)
+
+-- Set <space>1..<space>5 be my shortcuts to moving to the files
+for _, idx in ipairs { 1, 2, 3, 4, 5 } do
+ vim.keymap.set("n", string.format("<leader>%d", idx), function()
+ harpoon:list():select(idx)
+ end)
+end
diff --git a/nvim/.config/nvim/lua/custom/init.lua b/nvim/.config/nvim/lua/custom/init.lua
new file mode 100644
index 0000000..9e39d84
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/init.lua
@@ -0,0 +1,5 @@
+require("chell.globals")
+require("chell.options")
+require("chell.keymaps")
+require("chell.autocmds")
+require("chell.lazy")
diff --git a/nvim/.config/nvim/lua/custom/leap.lua b/nvim/.config/nvim/lua/custom/leap.lua
new file mode 100644
index 0000000..5f25e50
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/leap.lua
@@ -0,0 +1,3 @@
+vim.keymap.set("n", "s", "<Plug>(leap)", { desc = "Leap" })
+vim.keymap.set("n", "S", "<Plug>(leap-from-window)", { desc = "Leap other window" })
+require("leap").setup { safe_labels = {} }
diff --git a/nvim/.config/nvim/lua/custom/lsp.lua b/nvim/.config/nvim/lua/custom/lsp.lua
new file mode 100644
index 0000000..0944ff5
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/lsp.lua
@@ -0,0 +1,134 @@
+--TODO: make it prettier
+
+require("neodev").setup {
+ library = {
+ plugins = { "nvim-dap-ui" },
+ types = true,
+ },
+}
+
+local capabilities = nil
+if pcall(require, "cmp_nvim_lsp") then
+ capabilities = require("cmp_nvim_lsp").default_capabilities()
+end
+
+local lspconfig = require "lspconfig"
+
+local servers = {
+ bashls = true,
+ gopls = true,
+ lua_ls = true,
+ rust_analyzer = true,
+
+ jsonls = {
+ settings = {
+ json = {
+ schemas = require("schemastore").json.schemas(),
+ validate = { enable = true },
+ },
+ },
+ },
+
+ yamlls = {
+ settings = {
+ yaml = {
+ schemaStore = {
+ enable = false,
+ url = "",
+ },
+ schemas = require("schemastore").yaml.schemas(),
+ },
+ },
+ },
+
+ clangd = {
+ init_options = { clangdFileStatus = true },
+ },
+}
+
+local servers_to_install = vim.tbl_filter(function(key)
+ local t = servers[key]
+ if type(t) == "table" then
+ return not t.manual_install
+ else
+ return t
+ end
+end, vim.tbl_keys(servers))
+
+require("mason").setup()
+local ensure_installed = {
+ "stylua",
+ "lua_ls",
+ "clangd",
+ "clang-format",
+ "neocmake",
+}
+
+vim.list_extend(ensure_installed, servers_to_install)
+require("mason-tool-installer").setup { ensure_installed = ensure_installed }
+
+for name, config in pairs(servers) do
+ if config == true then
+ config = {}
+ end
+ config = vim.tbl_deep_extend("force", {}, {
+ capabilities = capabilities,
+ }, config)
+
+ lspconfig[name].setup(config)
+end
+
+local disable_semantic_tokens = {
+ lua = true,
+}
+
+vim.api.nvim_create_autocmd("LspAttach", {
+ callback = function(args)
+ local bufnr = args.buf
+ local client = assert(vim.lsp.get_client_by_id(args.data.client_id), "must have valid client")
+ local builtin = require "telescope.builtin"
+
+ vim.opt_local.omnifunc = "v:lua.vim.lsp.omnifunc"
+ vim.keymap.set("n", "gd", vim.lsp.buf.definition, { buffer = 0 })
+ vim.keymap.set("n", "gr", vim.lsp.buf.references, { buffer = 0 })
+ vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { buffer = 0 })
+ vim.keymap.set("n", "gT", vim.lsp.buf.type_definition, { buffer = 0 })
+ vim.keymap.set("n", "<leader>lr", vim.lsp.buf.rename, { buffer = 0 })
+ vim.keymap.set("n", "<leader>la", vim.lsp.buf.code_action, { buffer = 0 })
+ vim.keymap.set("n", "<leader>ls", builtin.lsp_document_symbols, { desc = "[D]ocument [S]ymbols" })
+ vim.keymap.set("n", "<leader>lw", builtin.lsp_dynamic_workspace_symbols, { desc = "[W]orkspace Symbols" })
+ -- nmap("gd", builtin.lsp_definitions, { desc = "[G]oto [D]efinition" })
+ -- nmap("gr", builtin.lsp_references, { desc = "[G]oto [R]eferences" })
+ -- nmap("gI", builtin.lsp_implementations, { desc = "[G]oto [I]mplementation" })
+
+ local filetype = vim.bo[bufnr].filetype
+ if disable_semantic_tokens[filetype] then
+ client.server_capabilities.semanticTokensProvider = nil
+ end
+
+ if client and client.server_capabilities.inlayHintProvider and vim.lsp.inlay_hint then
+ vim.keymap.set("n", "<leader>Th", function()
+ vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
+ end, { desc = "[T]oggle Inlay [H]ints" })
+ end
+ end,
+})
+
+-- Autoformatting Setup
+require("conform").setup {
+ formatters_by_ft = {
+ lua = { "stylua" },
+ cpp = { "clang-format" },
+ c = { "clang-format" },
+ },
+}
+
+vim.api.nvim_create_autocmd("BufWritePre", {
+ callback = function(args)
+ require("conform").format {
+ bufnr = args.buf,
+ lsp_fallback = true,
+ quiet = true,
+ }
+ end,
+})
diff --git a/nvim/.config/nvim/lua/custom/mini.lua b/nvim/.config/nvim/lua/custom/mini.lua
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/mini.lua
diff --git a/nvim/.config/nvim/lua/custom/plugins/autopairs.lua b/nvim/.config/nvim/lua/custom/plugins/autopairs.lua
new file mode 100644
index 0000000..170b337
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/autopairs.lua
@@ -0,0 +1,9 @@
+return {
+ "windwp/nvim-autopairs",
+ event = "InsertEnter",
+ -- Optional dependency
+ dependencies = { "hrsh7th/nvim-cmp" },
+ config = function()
+ require "custom.autopairs"
+ end,
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/bqf.lua b/nvim/.config/nvim/lua/custom/plugins/bqf.lua
new file mode 100644
index 0000000..92630a8
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/bqf.lua
@@ -0,0 +1 @@
+return { "kevinhwang91/nvim-bqf", ft = "qf" }
diff --git a/nvim/.config/nvim/lua/custom/plugins/celluar.lua b/nvim/.config/nvim/lua/custom/plugins/celluar.lua
new file mode 100644
index 0000000..f90161e
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/celluar.lua
@@ -0,0 +1 @@
+return { "Eandrju/cellular-automaton.nvim" }
diff --git a/nvim/.config/nvim/lua/custom/plugins/cmake.lua b/nvim/.config/nvim/lua/custom/plugins/cmake.lua
new file mode 100644
index 0000000..8bd0207
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/cmake.lua
@@ -0,0 +1,17 @@
+if vim.loop.os_uname().sysname ~= "Darwin" then
+ return {
+ "daniilrozanov/cmake.nvim",
+ lazy = false,
+ config = function()
+ require "custom.cmake"
+ end,
+ }
+else
+ return {
+ dir = "~/repositories/cmake.nvim",
+ lazy = false,
+ config = function()
+ require "custom.cmake"
+ end,
+ }
+end
diff --git a/nvim/.config/nvim/lua/custom/plugins/cmp.lua b/nvim/.config/nvim/lua/custom/plugins/cmp.lua
new file mode 100644
index 0000000..83fb5a2
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/cmp.lua
@@ -0,0 +1,22 @@
+return {
+ {
+ "hrsh7th/nvim-cmp",
+ event = "InsertEnter",
+ priority = 100,
+ dependencies = {
+ "onsails/lspkind.nvim",
+ "hrsh7th/cmp-nvim-lsp",
+ "hrsh7th/cmp-path",
+ "hrsh7th/cmp-buffer",
+ {
+ "L3MON4D3/LuaSnip",
+ build = "make install_jsregexp",
+ dependencies = { "rafamadriz/friendly-snippets" },
+ },
+ "saadparwaiz1/cmp_luasnip",
+ },
+ config = function()
+ require "custom.cmp"
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/comment.lua b/nvim/.config/nvim/lua/custom/plugins/comment.lua
new file mode 100644
index 0000000..46f5032
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/comment.lua
@@ -0,0 +1 @@
+return { 'numToStr/Comment.nvim' }
diff --git a/nvim/.config/nvim/lua/custom/plugins/conform.lua b/nvim/.config/nvim/lua/custom/plugins/conform.lua
new file mode 100644
index 0000000..542434e
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/conform.lua
@@ -0,0 +1,36 @@
+return { -- Autoformat
+ "stevearc/conform.nvim",
+ lazy = false,
+ keys = {
+ {
+ "<leader>lf",
+ function()
+ require("conform").format({ async = true, lsp_fallback = true })
+ end,
+ mode = "",
+ desc = "Format buffer",
+ },
+ },
+ opts = {
+ notify_on_error = false,
+ format_on_save = function(bufnr)
+ -- Disable "format_on_save lsp_fallback" for languages that don't
+ -- have a well standardized coding style. You can add additional
+ -- languages here or re-enable it for the disabled ones.
+ local disable_filetypes = { c = true, cpp = true }
+ return {
+ timeout_ms = 500,
+ lsp_fallback = not disable_filetypes[vim.bo[bufnr].filetype],
+ }
+ end,
+ formatters_by_ft = {
+ lua = { "stylua" },
+ -- Conform can also run multiple formatters sequentially
+ -- python = { "isort", "black" },
+ --
+ -- You can use a sub-list to tell conform to run *until* a formatter
+ -- is found.
+ -- javascript = { { "prettierd", "prettier" } },
+ },
+ },
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/dadbod.lua b/nvim/.config/nvim/lua/custom/plugins/dadbod.lua
new file mode 100644
index 0000000..8411fa5
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/dadbod.lua
@@ -0,0 +1,16 @@
+return {
+ "kristijanhusak/vim-dadbod-ui",
+ dependencies = {
+ { "tpope/vim-dadbod", lazy = true },
+ { "kristijanhusak/vim-dadbod-completion", ft = { "sql", "mysql", "plsql" }, lazy = true },
+ },
+ cmd = {
+ "DBUI",
+ "DBUIToggle",
+ "DBUIAddConnection",
+ "DBUIFindBuffer",
+ },
+ init = function()
+ vim.g.db_ui_use_nerd_fonts = 1
+ end,
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/gitsigns.lua b/nvim/.config/nvim/lua/custom/plugins/gitsigns.lua
new file mode 100644
index 0000000..3da8ed4
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/gitsigns.lua
@@ -0,0 +1,6 @@
+return {
+ "lewis6991/gitsigns.nvim",
+ config = function()
+ require "custom.gitsigns"
+ end,
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/harpoon.lua b/nvim/.config/nvim/lua/custom/plugins/harpoon.lua
new file mode 100644
index 0000000..aa8dae8
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/harpoon.lua
@@ -0,0 +1,8 @@
+return {
+ "ThePrimeagen/harpoon",
+ branch = "harpoon2",
+ dependencies = { "nvim-lua/plenary.nvim" },
+ config = function()
+ require "custom.harpoon"
+ end,
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/leap.lua b/nvim/.config/nvim/lua/custom/plugins/leap.lua
new file mode 100644
index 0000000..5566ecc
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/leap.lua
@@ -0,0 +1,7 @@
+return {
+ "ggandor/leap.nvim",
+ lazy = false, --TODO: lazy
+ config = function()
+ require "custom.leap"
+ end,
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/lsp.lua b/nvim/.config/nvim/lua/custom/plugins/lsp.lua
new file mode 100644
index 0000000..ac87b84
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/lsp.lua
@@ -0,0 +1,22 @@
+return {
+ {
+ "neovim/nvim-lspconfig",
+ dependencies = {
+ "folke/neodev.nvim",
+ "williamboman/mason.nvim",
+ "williamboman/mason-lspconfig.nvim",
+ "WhoIsSethDaniel/mason-tool-installer.nvim",
+
+ { "j-hui/fidget.nvim", opts = {} },
+
+ -- Autoformatting
+ "stevearc/conform.nvim",
+
+ -- Schema information
+ "b0o/SchemaStore.nvim",
+ },
+ config = function()
+ require "custom.lsp"
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/lualine.lua b/nvim/.config/nvim/lua/custom/plugins/lualine.lua
new file mode 100644
index 0000000..661f7fc
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/lualine.lua
@@ -0,0 +1,5 @@
+return {
+ "nvim-lualine/lualine.nvim",
+ dependencies = { "nvim-tree/nvim-web-devicons" },
+ config = true,
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/mini.lua b/nvim/.config/nvim/lua/custom/plugins/mini.lua
new file mode 100644
index 0000000..654222e
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/mini.lua
@@ -0,0 +1,8 @@
+return { -- Collection of various small independent plugins/modules
+ "echasnovski/mini.nvim",
+ dependencies = "nvim-treesitter/nvim-treesitter",
+ config = function()
+ -- Better Around/Inside textobjects
+ require("mini.ai").setup { n_lines = 500 }
+ end,
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/rest.lua b/nvim/.config/nvim/lua/custom/plugins/rest.lua
new file mode 100644
index 0000000..2d53a70
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/rest.lua
@@ -0,0 +1,16 @@
+return {
+ {
+ "vhyrro/luarocks.nvim",
+ priority = 1000,
+ config = true,
+ opts = { rocks = { "lua-curl", "nvim-nio", "mimetypes", "xml2lua" } },
+ },
+ {
+ "rest-nvim/rest.nvim",
+ ft = "http",
+ dependencies = { "luarocks.nvim", "nvim-treesitter/nvim-treesitter" },
+ config = function()
+ require "custom.rest"
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/sort.lua b/nvim/.config/nvim/lua/custom/plugins/sort.lua
new file mode 100644
index 0000000..f5483e6
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/sort.lua
@@ -0,0 +1 @@
+return { "sQVe/sort.nvim" }
diff --git a/nvim/.config/nvim/lua/custom/plugins/substitude.lua b/nvim/.config/nvim/lua/custom/plugins/substitude.lua
new file mode 100644
index 0000000..bb8bd9f
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/substitude.lua
@@ -0,0 +1,6 @@
+return {
+ "gbprod/substitute.nvim",
+ config = function()
+ require "custom.substitude"
+ end,
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/surround.lua b/nvim/.config/nvim/lua/custom/plugins/surround.lua
new file mode 100644
index 0000000..e3c3c6c
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/surround.lua
@@ -0,0 +1,6 @@
+return {
+ "kylechui/nvim-surround",
+ event = { "BufReadPre", "BufNewFile" },
+ version = "*",
+ config = true,
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/telescope.lua b/nvim/.config/nvim/lua/custom/plugins/telescope.lua
new file mode 100644
index 0000000..19790dd
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/telescope.lua
@@ -0,0 +1,16 @@
+return {
+ "nvim-telescope/telescope.nvim",
+ event = "VimEnter",
+ branch = "0.1.x",
+ dependencies = {
+ "nvim-lua/plenary.nvim",
+ { "nvim-telescope/telescope-fzf-native.nvim", build = "make" },
+ { "nvim-telescope/telescope-smart-history.nvim" },
+ { "nvim-telescope/telescope-ui-select.nvim" },
+ { "nvim-tree/nvim-web-devicons" },
+ "rest-nvim/rest.nvim",
+ },
+ config = function()
+ require "custom.telescope"
+ end,
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/textcase.lua b/nvim/.config/nvim/lua/custom/plugins/textcase.lua
new file mode 100644
index 0000000..e335b38
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/textcase.lua
@@ -0,0 +1,6 @@
+return {
+ "johmsalas/text-case.nvim",
+ dependencies = { "nvim-telescope/telescope.nvim" },
+ config = true,
+ lazy = false,
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/themes.lua b/nvim/.config/nvim/lua/custom/plugins/themes.lua
new file mode 100644
index 0000000..0f9ca03
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/themes.lua
@@ -0,0 +1,7 @@
+return {
+ { "ellisonleao/gruvbox.nvim", priority = 1000, config = function()
+ require("gruvbox").setup({})
+ vim.cmd([[colorscheme gruvbox]])
+ end
+ },
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/todo-comments.lua b/nvim/.config/nvim/lua/custom/plugins/todo-comments.lua
new file mode 100644
index 0000000..4b46f89
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/todo-comments.lua
@@ -0,0 +1,6 @@
+return {
+ "folke/todo-comments.nvim",
+ event = "VimEnter",
+ dependencies = { "nvim-lua/plenary.nvim" },
+ opts = { signs = false },
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/toggleterm.lua b/nvim/.config/nvim/lua/custom/plugins/toggleterm.lua
new file mode 100644
index 0000000..8775389
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/toggleterm.lua
@@ -0,0 +1,7 @@
+return {
+ "akinsho/toggleterm.nvim",
+ version = "*",
+ config = function()
+ require "custom.toggleterm"
+ end,
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/treesitter.lua b/nvim/.config/nvim/lua/custom/plugins/treesitter.lua
new file mode 100644
index 0000000..dd37a3a
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/treesitter.lua
@@ -0,0 +1,7 @@
+return {
+ "nvim-treesitter/nvim-treesitter",
+ build = ":TSUpdate",
+ config = function()
+ require "custom.treesitter"
+ end,
+}
diff --git a/nvim/.config/nvim/lua/custom/plugins/vim-sleuth.lua b/nvim/.config/nvim/lua/custom/plugins/vim-sleuth.lua
new file mode 100644
index 0000000..a564707
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/vim-sleuth.lua
@@ -0,0 +1 @@
+return {}
diff --git a/nvim/.config/nvim/lua/custom/plugins/which-key.lua b/nvim/.config/nvim/lua/custom/plugins/which-key.lua
new file mode 100644
index 0000000..8ac7387
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/plugins/which-key.lua
@@ -0,0 +1,15 @@
+return {
+ "folke/which-key.nvim",
+ event = "VimEnter",
+ config = function()
+ --TODO: move this to files where it is declared
+ require("which-key").register {
+ ["<leader>f"] = { name = "Find", _ = "which_key_ignore" },
+ ["<leader>T"] = { name = "Toggle options", _ = "which_key_ignore" },
+ ["<leader>t"] = { name = "ToggleTerm", _ = "which_key_ignore" },
+ ["<leader>g"] = { name = "Git", _ = "which_key_ignore" },
+ ["<leader>l"] = { name = "LSP", _ = "which_key_ignore" },
+ ["<leader><tab>"] = { name = "Tab pages", _ = "which_key_ignore" },
+ }
+ end,
+}
diff --git a/nvim/.config/nvim/lua/custom/rest.lua b/nvim/.config/nvim/lua/custom/rest.lua
new file mode 100644
index 0000000..b058279
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/rest.lua
@@ -0,0 +1,14 @@
+require("rest-nvim").setup {
+ keybinds = {
+ {
+ "<leader>rr",
+ "<cmd>Rest run<cr>",
+ "Run requesti under the cursor",
+ },
+ {
+ "<leader>rl",
+ "<cmd>Rest run last<cr>",
+ "Re-run latest request",
+ },
+ },
+}
diff --git a/nvim/.config/nvim/lua/custom/substitude.lua b/nvim/.config/nvim/lua/custom/substitude.lua
new file mode 100644
index 0000000..e666195
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/substitude.lua
@@ -0,0 +1,6 @@
+require("substitute").setup {}
+
+vim.keymap.set("n", ",", require("substitute").operator, { noremap = true })
+vim.keymap.set("n", ",,", require("substitute").line, { noremap = true })
+-- vim.keymap.set("n", "", require("substitute").eol, { noremap = true })
+vim.keymap.set("x", ",", require("substitute").visual, { noremap = true })
diff --git a/nvim/.config/nvim/lua/custom/telescope.lua b/nvim/.config/nvim/lua/custom/telescope.lua
new file mode 100644
index 0000000..ffe6ac0
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/telescope.lua
@@ -0,0 +1,41 @@
+-- local data = assert(vim.fn.stdpath "data") --[[@as string]]
+
+require("telescope").setup {
+ extensions = {
+ fzf = {},
+ wrap_results = true,
+ history = {
+ -- path = vim.fs.joinpath(data, "telescope_history.sqlite3"),
+ limit = 100,
+ },
+ ["ui-select"] = {
+ require("telescope.themes").get_dropdown(),
+ },
+ },
+}
+
+pcall(require("telescope").load_extension, "fzf")
+pcall(require("telescope").load_extension, "smart_history")
+pcall(require("telescope").load_extension, "rest")
+pcall(require("telescope").load_extension, "ui-select")
+
+local builtin = require "telescope.builtin"
+
+vim.keymap.set("n", "<leader>fh", builtin.help_tags, { desc = "Search [H]elp" })
+vim.keymap.set("n", "<leader>fk", builtin.keymaps, { desc = "Search [K]eymaps" })
+vim.keymap.set("n", "<leader>ff", builtin.find_files, { desc = "Search [F]iles" })
+vim.keymap.set("n", "<leader>fs", builtin.builtin, { desc = "Search [S]elect Telescope" })
+vim.keymap.set("n", "<leader>fw", builtin.grep_string, { desc = "Search current [W]ord" })
+vim.keymap.set("n", "<leader>fg", builtin.live_grep, { desc = "Search by [G]rep" })
+vim.keymap.set("n", "<leader>fd", builtin.diagnostics, { desc = "Search [D]iagnostics" })
+vim.keymap.set("n", "<leader>fr", builtin.resume, { desc = "Search [R]esume" })
+vim.keymap.set("n", "<leader>f.", builtin.oldfiles, { desc = 'Search Recent Files ("." for repeat)' })
+vim.keymap.set("n", "<leader>fb", builtin.buffers, { desc = "[ ] Find existing buffers" })
+vim.keymap.set("n", "<leader>fn", function()
+ require("telescope.builtin").find_files { cwd = vim.fn.stdpath "config" }
+end, { desc = "Search [N]eovim files" })
+
+vim.keymap.set("n", "<leader>fa", function()
+ ---@diagnostic disable-next-line: param-type-mismatch
+ builtin.find_files { cwd = vim.fs.joinpath(vim.fn.stdpath "data", "lazy") }
+end)
diff --git a/nvim/.config/nvim/lua/custom/toggleterm.lua b/nvim/.config/nvim/lua/custom/toggleterm.lua
new file mode 100644
index 0000000..6aafb2f
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/toggleterm.lua
@@ -0,0 +1,41 @@
+require("toggleterm").setup {
+ size = function(term)
+ if term.direction == "horizontal" then
+ return 15
+ elseif term.direction == "vertical" then
+ return vim.o.columns * 0.33
+ end
+ end,
+}
+
+local Terminal = require("toggleterm.terminal").Terminal
+local on_open = function(_)
+ vim.cmd "startinsert!"
+ -- vim.keymap.set("n", "q", "<cmd>close<CR>", { noremap = true, silent = true, buffer = term.bufnr })
+end
+local on_close = function(_)
+ vim.cmd "startinsert!"
+end
+if vim.fn.executable "lazygit" then
+ local lazygit = Terminal:new {
+ cmd = "lazygit",
+ dir = "git_dir",
+ direction = "float",
+ on_open = on_open,
+ on_close = on_close,
+ count = 999,
+ }
+ vim.keymap.set("n", "<leader>gg", function()
+ lazygit:toggle()
+ end, { desc = "ToggleTerm LazyGit" })
+end
+
+vim.keymap.set("n", "<leader>tf", function()
+ Terminal:new({ count = vim.v.count1, on_open = on_open, on_close = on_close }):toggle(nil, "float")
+end)
+vim.keymap.set("n", "<leader>tv", function()
+ Terminal:new({ count = vim.v.count1, on_open = on_open, on_close = on_close }):toggle(nil, "vertical")
+end)
+vim.keymap.set("n", "<leader>th", function()
+ Terminal:new({ count = vim.v.count1, on_open = on_open, on_close = on_close }):toggle(nil, "horizontal")
+end)
diff --git a/nvim/.config/nvim/lua/custom/treesitter.lua b/nvim/.config/nvim/lua/custom/treesitter.lua
new file mode 100644
index 0000000..5f8e8fb
--- /dev/null
+++ b/nvim/.config/nvim/lua/custom/treesitter.lua
@@ -0,0 +1,51 @@
+local M = {}
+
+M.setup = function()
+ local group = vim.api.nvim_create_augroup("custom-treesitter", { clear = true })
+
+ require("nvim-treesitter.configs").setup {
+ ensure_installed = {
+ "bash",
+ "c",
+ "diff",
+ "html",
+ "lua",
+ "luadoc",
+ "json",
+ "markdown",
+ "vim",
+ "vimdoc",
+ "cpp",
+ "cmake",
+ "query",
+ "http",
+ "proto",
+ "xml",
+ "graphql",
+ },
+ highlight = { enable = true },
+ indent = { enable = true },
+ }
+
+ local syntax_on = {
+ -- elixir = true,
+ -- php = true,
+ }
+
+ vim.api.nvim_create_autocmd("FileType", {
+ group = group,
+ callback = function(args)
+ local bufnr = args.buf
+ local ft = vim.bo[bufnr].filetype
+ pcall(vim.treesitter.start)
+
+ -- if syntax_on[ft] then
+ -- vim.bo[bufnr].syntax = "on"
+ -- end
+ end,
+ })
+end
+
+M.setup()
+
+return M
diff --git a/nvim/.config/nvim/plugin/autocmds.lua b/nvim/.config/nvim/plugin/autocmds.lua
new file mode 100644
index 0000000..6349fb8
--- /dev/null
+++ b/nvim/.config/nvim/plugin/autocmds.lua
@@ -0,0 +1,51 @@
+local aucmd = vim.api.nvim_create_autocmd
+local function augroup(name)
+ return vim.api.nvim_create_augroup("chell_" .. name, {})
+end
+
+-- highlight after yank
+aucmd("TextYankPost", {
+ desc = "Highlight when yanking (copying) text",
+ group = augroup "highlight_yank",
+ callback = function()
+ vim.highlight.on_yank()
+ end,
+})
+
+-- resize splits if window got resized
+aucmd({ "VimResized" }, {
+ group = augroup "resize_splits",
+ callback = function()
+ local current_tab = vim.fn.tabpagenr()
+ vim.cmd "tabdo wincmd ="
+ vim.cmd("tabnext " .. current_tab)
+ end,
+})
+
+-- Auto create dir when saving a file, in case some intermediate directory does not exist
+aucmd({ "BufWritePre" }, {
+ group = augroup "auto_create_dir",
+ callback = function(event)
+ if event.match:match "^%w%w+:[\\/][\\/]" then
+ return
+ end
+ local file = vim.uv.fs_realpath(event.match) or event.match
+ vim.fn.mkdir(vim.fn.fnamemodify(file, ":p:h"), "p")
+ end,
+})
+
+-- Show cursor line only in active window
+vim.api.nvim_create_autocmd({ "InsertLeave", "WinEnter" }, {
+ group = augroup "auto_cursorline_show",
+ callback = function(event)
+ if vim.bo[event.buf].buftype == "" then
+ vim.opt_local.cursorline = true
+ end
+ end,
+})
+vim.api.nvim_create_autocmd({ "InsertEnter", "WinLeave" }, {
+ group = augroup "auto_cursorline_hide",
+ callback = function()
+ vim.opt_local.cursorline = false
+ end,
+})
diff --git a/nvim/.config/nvim/plugin/keymaps.lua b/nvim/.config/nvim/plugin/keymaps.lua
new file mode 100644
index 0000000..8e24efb
--- /dev/null
+++ b/nvim/.config/nvim/plugin/keymaps.lua
@@ -0,0 +1,57 @@
+local set = vim.keymap.set
+
+set("n", "<leader>w", "<cmd>w<cr>", { desc = "Write buffer" })
+
+set("n", "<leader>e", vim.diagnostic.open_float, { desc = "Show diagnostic [E]rror messages" })
+
+-- ui navigation
+set("n", "<m-j>", "<c-w><c-j>")
+set("n", "<m-k>", "<c-w><c-k>")
+set("n", "<m-l>", "<c-w><c-l>")
+set("n", "<m-h>", "<c-w><c-h>")
+
+set("n", "<m-<>", "<c-w>5<")
+set("n", "<m->>", "<c-w>5>")
+set("n", "<m-+>", "<c-w>4+")
+set("n", "<m-->", "<c-w>4-")
+
+set("n", "<m-v>", "<cmd>vsplit<cr>")
+set("n", "<m-s>", "<cmd>split<cr>")
+
+set("n", "<m-q>", "<cmd>q<cr>", { desc = "Quit window" })
+
+set("n", "<m-t>", "<cmd>tabnew<cr>", { desc = "New Tab" })
+set("n", "<s-m-t>", "<cmd>tabclose<cr>", { desc = "Close Tab" })
+set("n", "<m-n>", "<cmd>tabnext<cr>", { desc = "Next Tab" })
+set("n", "<m-p>", "<cmd>tabprevious<cr>", { desc = "Previous Tab" })
+
+-- Toggle hlsearch if it's on, otherwise just do "enter"
+set("n", "<cr>", function()
+ ---@diagnostic disable-next-line: undefined-field
+ if vim.opt.hlsearch:get() then
+ vim.cmd.nohl()
+ return ""
+ else
+ return "<cr>"
+ end
+end, { expr = true })
+
+-- useful for indent text
+set("v", ">", ">gv")
+set("v", "<", "<gv")
+
+--swap lines
+set("n", "<c-j>", function()
+ if vim.opt.diff:get() then
+ vim.cmd [[normal! ]c]]
+ else
+ vim.cmd [[m .+1<CR>==]]
+ end
+end)
+set("n", "<c-k>", function()
+ if vim.opt.diff:get() then
+ vim.cmd [[normal! [c]]
+ else
+ vim.cmd [[m .-2<cr>==]]
+ end
+end)
diff --git a/nvim/.config/nvim/plugin/netrw.lua b/nvim/.config/nvim/plugin/netrw.lua
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/nvim/.config/nvim/plugin/netrw.lua
diff --git a/nvim/.config/nvim/plugin/options.lua b/nvim/.config/nvim/plugin/options.lua
new file mode 100644
index 0000000..cc3016c
--- /dev/null
+++ b/nvim/.config/nvim/plugin/options.lua
@@ -0,0 +1,41 @@
+local opt = vim.opt
+
+opt.number = true
+opt.relativenumber = true
+
+opt.mouse = "a"
+
+opt.clipboard = "unnamedplus" -- Sync clipboard between OS and Neovim.
+
+opt.breakindent = true -- Enable break indent
+
+opt.undofile = true -- Save undo history
+
+opt.ignorecase = true -- Case-insensitive searching UNLESS \C or one or more capital letters in the search term
+opt.smartcase = true
+
+opt.signcolumn = "yes" -- Keep signcolumn on by default
+
+opt.updatetime = 250 -- Decrease update time
+
+opt.timeoutlen = 300 -- Decrease mapped sequence wait time
+
+opt.splitright = true -- Configure how new splits should be opened
+opt.splitbelow = true
+
+opt.list = true -- Sets how neovim will display certain whitespace characters in the editor.
+opt.listchars = { tab = "» ", trail = "·", nbsp = "␣" }
+
+-- opt.inccommand = "split" -- Preview substitutions live
+
+opt.cursorline = true -- Show which line your cursor is on
+
+opt.scrolloff = 10 -- Minimal number of screen lines to keep above and below the cursor.
+opt.sidescrolloff = 5
+
+opt.hlsearch = true -- Set highlight on search
+opt.incsearch = true
+
+opt.background = "dark"
+
+opt.laststatus = 3
diff --git a/nvim/.config/nvim/plugin/terminal.lua b/nvim/.config/nvim/plugin/terminal.lua
new file mode 100644
index 0000000..0249feb
--- /dev/null
+++ b/nvim/.config/nvim/plugin/terminal.lua
@@ -0,0 +1,14 @@
+local opt = vim.opt_local
+
+-- Set local settings for terminal buffers
+vim.api.nvim_create_autocmd("TermOpen", {
+ group = vim.api.nvim_create_augroup("custom-term-open", {}),
+ callback = function()
+ opt.number = false
+ opt.relativenumber = false
+ opt.scrolloff = 0
+ end,
+})
+
+-- Easily hit escape in terminal mode.
+vim.keymap.set("t", "<esc><esc>", "<c-\\><c-n>")
diff --git a/nvim/.config/nvim/stylua.toml b/nvim/.config/nvim/stylua.toml
new file mode 100644
index 0000000..364ef9c
--- /dev/null
+++ b/nvim/.config/nvim/stylua.toml
@@ -0,0 +1,3 @@
+indent_type = "Spaces"
+indent_width = 2
+no_call_parentheses = true