diff options
| -rw-r--r-- | init.lua | 175 |
1 files changed, 107 insertions, 68 deletions
| @@ -35,52 +35,69 @@ vim.opt.updatetime = 300 | |||
| 35 | vim.opt.timeoutlen = 500 | 35 | vim.opt.timeoutlen = 500 |
| 36 | 36 | ||
| 37 | -- -- Format on save if any attached LSP supports formatting | 37 | -- -- Format on save if any attached LSP supports formatting |
| 38 | vim.api.nvim_create_autocmd("BufWritePre", { | 38 | vim.api.nvim_create_autocmd( |
| 39 | callback = function() | 39 | "BufWritePre", |
| 40 | local buf = vim.api.nvim_get_current_buf() | 40 | { |
| 41 | local clients = vim.lsp.get_clients({ bufnr = buf }) | 41 | callback = function() |
| 42 | local buf = vim.api.nvim_get_current_buf() | ||
| 43 | local clients = vim.lsp.get_clients({bufnr = buf}) | ||
| 42 | 44 | ||
| 43 | for _, client in ipairs(clients) do | 45 | for _, client in ipairs(clients) do |
| 44 | if client.server_capabilities.documentFormattingProvider then | 46 | if client.server_capabilities.documentFormattingProvider then |
| 45 | vim.lsp.buf.format({ silent = true }) | 47 | vim.lsp.buf.format({silent = true}) |
| 46 | return | 48 | return |
| 49 | end | ||
| 47 | end | 50 | end |
| 51 | -- No formatting-capable client: do nothing | ||
| 48 | end | 52 | end |
| 49 | -- No formatting-capable client: do nothing | 53 | } |
| 50 | end, | 54 | ) |
| 51 | }) | ||
| 52 | |||
| 53 | 55 | ||
| 54 | local run_on_save = vim.api.nvim_create_augroup("RunPfOnSave", { clear = true }) | 56 | local run_on_save = vim.api.nvim_create_augroup("RunPfOnSave", {clear = true}) |
| 55 | local formatters = { | 57 | local formatters = { |
| 56 | { | 58 | { |
| 57 | patterns = { "*.js", "*.ts", "*.jsx", "*.json", "*.tsx", "*.css", "*.html", "*.yaml", "*.md", "*.svelte", "*.lua" }, | 59 | patterns = { |
| 60 | "*.js", | ||
| 61 | "*.ts", | ||
| 62 | "*.jsx", | ||
| 63 | "*.json", | ||
| 64 | "*.tsx", | ||
| 65 | "*.css", | ||
| 66 | "*.html", | ||
| 67 | "*.yaml", | ||
| 68 | "*.md", | ||
| 69 | "*.svelte", | ||
| 70 | "*.lua" | ||
| 71 | }, | ||
| 58 | command = function(file) | 72 | command = function(file) |
| 59 | vim.fn.system({ "prettier", "--write", file }) | 73 | vim.fn.system({"prettier", "--write", file}) |
| 60 | end | 74 | end |
| 61 | }, | 75 | }, |
| 62 | { | 76 | { |
| 63 | patterns = { "*.tex" }, | 77 | patterns = {"*.tex"}, |
| 64 | command = function(file) | 78 | command = function(file) |
| 65 | vim.fn.system({ "pdflatex", "--shell-escape", file }) | 79 | vim.fn.system({"pdflatex", "--shell-escape", file}) |
| 66 | end | 80 | end |
| 67 | }, | 81 | }, |
| 68 | { | 82 | { |
| 69 | patterns = { "*.c", "*.h" }, | 83 | patterns = {"*.c", "*.h"}, |
| 70 | command = function(file) | 84 | command = function(file) |
| 71 | vim.fn.system({ "clang-format", "-i", file }) | 85 | vim.fn.system({"clang-format", "-i", file}) |
| 72 | end | 86 | end |
| 73 | } | 87 | } |
| 74 | } | 88 | } |
| 75 | for _, fmt in ipairs(formatters) do | 89 | for _, fmt in ipairs(formatters) do |
| 76 | vim.api.nvim_create_autocmd("BufWritePost", { | 90 | vim.api.nvim_create_autocmd( |
| 77 | group = run_on_save, | 91 | "BufWritePost", |
| 78 | pattern = fmt.patterns, | 92 | { |
| 79 | callback = function(args) | 93 | group = run_on_save, |
| 80 | local filepath = args.match or args.file | 94 | pattern = fmt.patterns, |
| 81 | pcall(fmt.command, filepath) | 95 | callback = function(args) |
| 82 | end, | 96 | local filepath = args.match or args.file |
| 83 | }) | 97 | pcall(fmt.command, filepath) |
| 98 | end | ||
| 99 | } | ||
| 100 | ) | ||
| 84 | end | 101 | end |
| 85 | 102 | ||
| 86 | -- Auto-delete Netrw hidden buffers | 103 | -- Auto-delete Netrw hidden buffers |
| @@ -107,20 +124,20 @@ function ToggleVExplorer() | |||
| 107 | else | 124 | else |
| 108 | vim.cmd("topleft " .. (vim.g.netrw_winsize or 30) .. "vsplit") | 125 | vim.cmd("topleft " .. (vim.g.netrw_winsize or 30) .. "vsplit") |
| 109 | vim.cmd("Explore") | 126 | vim.cmd("Explore") |
| 110 | vim.t.expl_buf_num = vim.fn.bufnr('%') | 127 | vim.t.expl_buf_num = vim.fn.bufnr("%") |
| 111 | end | 128 | end |
| 112 | end | 129 | end |
| 113 | 130 | ||
| 114 | local autopairs = { | 131 | local autopairs = { |
| 115 | ["("] = ")", | 132 | ["("] = ")", |
| 116 | ["["] = "]", | 133 | ["["] = "]", |
| 117 | ["{"] = "}", | 134 | ["{"] = "}", |
| 118 | ["<"] = ">" | 135 | ["<"] = ">" |
| 119 | } | 136 | } |
| 120 | 137 | ||
| 121 | for open, close in pairs(autopairs) do | 138 | for open, close in pairs(autopairs) do |
| 122 | vim.api.nvim_set_keymap("i", open, open .. close .. "<Left>", {noremap = true, silent = true}) | 139 | vim.api.nvim_set_keymap("i", open, open .. close .. "<Left>", {noremap = true, silent = true}) |
| 123 | end | 140 | end |
| 124 | 141 | ||
| 125 | function set_highlights() | 142 | function set_highlights() |
| 126 | local highlights = { | 143 | local highlights = { |
| @@ -134,7 +151,6 @@ function set_highlights() | |||
| 134 | {"SignColumn", {bg = "none"}}, | 151 | {"SignColumn", {bg = "none"}}, |
| 135 | {"StatusLine", {bg = "none", fg = "none"}}, | 152 | {"StatusLine", {bg = "none", fg = "none"}}, |
| 136 | {"StatusLineNc", {bg = "none", fg = "none"}}, | 153 | {"StatusLineNc", {bg = "none", fg = "none"}}, |
| 137 | {"NvimTreeWinSeparator", {fg = "none"}}, | ||
| 138 | {"CursorColumn", {fg = "none"}}, | 154 | {"CursorColumn", {fg = "none"}}, |
| 139 | {"CursorLine", {bg = "none"}}, | 155 | {"CursorLine", {bg = "none"}}, |
| 140 | {"VertSplit", {bg = "none"}}, | 156 | {"VertSplit", {bg = "none"}}, |
| @@ -162,20 +178,19 @@ function set_highlights() | |||
| 162 | end | 178 | end |
| 163 | 179 | ||
| 164 | vim.cmd("colorscheme quiet") | 180 | vim.cmd("colorscheme quiet") |
| 165 | vim.api.nvim_set_hl(0, "Normal", { bg = "#000c18" }) | ||
| 166 | |||
| 167 | vim.o.background = "dark" | 181 | vim.o.background = "dark" |
| 182 | |||
| 168 | function color_mode() | 183 | function color_mode() |
| 169 | if vim.o.background == "dark" then | 184 | if vim.o.background == "dark" then |
| 170 | vim.o.background = "light" | 185 | vim.o.background = "light" |
| 171 | vim.api.nvim_set_hl(0, "Normal", {bg = "none"}) | 186 | vim.cmd("colorscheme zellner") |
| 172 | else | 187 | else |
| 173 | vim.o.background = "dark" | 188 | vim.o.background = "dark" |
| 189 | vim.cmd("colorscheme quiet") | ||
| 174 | end | 190 | end |
| 175 | set_highlights() | 191 | set_highlights() |
| 176 | end | 192 | end |
| 177 | 193 | ||
| 178 | |||
| 179 | local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" | 194 | local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" |
| 180 | if not vim.loop.fs_stat(lazypath) then | 195 | if not vim.loop.fs_stat(lazypath) then |
| 181 | vim.fn.system( | 196 | vim.fn.system( |
| @@ -211,7 +226,7 @@ require("lazy").setup( | |||
| 211 | auto_start = "shut-up", | 226 | auto_start = "shut-up", |
| 212 | display = { | 227 | display = { |
| 213 | icons = { | 228 | icons = { |
| 214 | mode="none" | 229 | mode = "none" |
| 215 | }, | 230 | }, |
| 216 | ghost_text = { | 231 | ghost_text = { |
| 217 | enabled = false | 232 | enabled = false |
| @@ -223,12 +238,11 @@ require("lazy").setup( | |||
| 223 | } | 238 | } |
| 224 | ) | 239 | ) |
| 225 | 240 | ||
| 226 | |||
| 227 | local lsp_servers = { | 241 | local lsp_servers = { |
| 228 | clangd = { filetypes = { "c", "h" } }, | 242 | clangd = {filetypes = {"c", "h"}}, |
| 229 | svelte = { filetypes = { "svelte" } }, | 243 | svelte = {filetypes = {"svelte"}}, |
| 230 | ts_ls = { filetypes = { "typescript", "typescriptreact", "javascript", "javascriptreact" } }, | 244 | ts_ls = {filetypes = {"typescript", "typescriptreact", "javascript", "javascriptreact"}}, |
| 231 | rust_analyzer = { filetypes = { "rust" } }, | 245 | rust_analyzer = {filetypes = {"rust"}} |
| 232 | } | 246 | } |
| 233 | 247 | ||
| 234 | local function server_maps(opts) | 248 | local function server_maps(opts) |
| @@ -237,17 +251,18 @@ end | |||
| 237 | 251 | ||
| 238 | for server_name, config in pairs(lsp_servers) do | 252 | for server_name, config in pairs(lsp_servers) do |
| 239 | require("lspconfig")[server_name].setup( | 253 | require("lspconfig")[server_name].setup( |
| 240 | coq.lsp_ensure_capabilities({ | 254 | coq.lsp_ensure_capabilities( |
| 241 | on_attach = function(client, bufnr) | 255 | { |
| 242 | server_maps({ buffer = bufnr }) | 256 | on_attach = function(client, bufnr) |
| 243 | end, | 257 | server_maps({buffer = bufnr}) |
| 244 | filetypes = config.filetypes, | 258 | end, |
| 245 | settings = config.settings or {}, | 259 | filetypes = config.filetypes, |
| 246 | }) | 260 | settings = config.settings or {} |
| 261 | } | ||
| 262 | ) | ||
| 247 | ) | 263 | ) |
| 248 | end | 264 | end |
| 249 | 265 | ||
| 250 | |||
| 251 | set_highlights() | 266 | set_highlights() |
| 252 | 267 | ||
| 253 | vim.g.mapleader = " " | 268 | vim.g.mapleader = " " |
| @@ -263,20 +278,44 @@ vim.keymap.set("n", "k", "5k") | |||
| 263 | vim.keymap.set("n", "<leader>f", "<cmd>FzfLua files<cr>") | 278 | vim.keymap.set("n", "<leader>f", "<cmd>FzfLua files<cr>") |
| 264 | vim.keymap.set("n", "<leader>F", "<cmd>FzfLua live_grep<cr>", {noremap = true, silent = true}) | 279 | vim.keymap.set("n", "<leader>F", "<cmd>FzfLua live_grep<cr>", {noremap = true, silent = true}) |
| 265 | vim.keymap.set("n", "<leader>b", "<cmd>FzfLua buffers<cr>") | 280 | vim.keymap.set("n", "<leader>b", "<cmd>FzfLua buffers<cr>") |
| 266 | vim.keymap.set("n", "<leader>d", vim.lsp.buf.definition, {silent=true}) | 281 | vim.keymap.set("n", "<leader>d", vim.lsp.buf.definition, {silent = true}) |
| 267 | vim.keymap.set("n", "<leader>df", function() vim.diagnostic.open_float() end, {silent=true}) | 282 | vim.keymap.set( |
| 268 | vim.keymap.set("n", "<leader>k", vim.lsp.buf.hover, {silent=true}) | 283 | "n", |
| 269 | vim.keymap.set("n", "<leader>ca", function() vim.lsp.buf.code_action() end, {silent=true}) | 284 | "<leader>df", |
| 285 | function() | ||
| 286 | vim.diagnostic.open_float() | ||
| 287 | end, | ||
| 288 | {silent = true} | ||
| 289 | ) | ||
| 290 | vim.keymap.set("n", "<leader>k", vim.lsp.buf.hover, {silent = true}) | ||
| 291 | vim.keymap.set( | ||
| 292 | "n", | ||
| 293 | "<leader>ca", | ||
| 294 | function() | ||
| 295 | vim.lsp.buf.code_action() | ||
| 296 | end, | ||
| 297 | {silent = true} | ||
| 298 | ) | ||
| 270 | vim.keymap.set("n", "<leader>r", color_mode, {desc = "Change mode light/dark"}) | 299 | vim.keymap.set("n", "<leader>r", color_mode, {desc = "Change mode light/dark"}) |
| 271 | vim.keymap.set("n", "<leader>t", function() | 300 | vim.keymap.set( |
| 272 | vim.cmd("terminal") | 301 | "n", |
| 273 | vim.cmd("startinsert") | 302 | "<leader>t", |
| 274 | end, {desc = "Open terminal in current window"}) | 303 | function() |
| 304 | vim.cmd("terminal") | ||
| 305 | vim.cmd("startinsert") | ||
| 306 | end, | ||
| 307 | {desc = "Open terminal in current window"} | ||
| 308 | ) | ||
| 275 | 309 | ||
| 276 | vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv") | 310 | vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv") |
| 277 | vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv") | 311 | vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv") |
| 278 | 312 | ||
| 279 | vim.keymap.set("t", "<Esc>", function() | 313 | vim.keymap.set( |
| 280 | vim.cmd([[stopinsert]]) | 314 | "t", |
| 281 | vim.cmd([[b#]]) | 315 | "<Esc>", |
| 282 | end, {noremap = true, silent = true}) | 316 | function() |
| 317 | vim.cmd([[stopinsert]]) | ||
| 318 | vim.cmd([[b#]]) | ||
| 319 | end, | ||
| 320 | {noremap = true, silent = true} | ||
| 321 | ) | ||
