gabrielgio.lua @ fb3c96d50d625db725940625120012c75afc17f6

  1diff --git a/LICENSE b/LICENSE
  2new file mode 100644
  3index 0000000000000000000000000000000000000000..036d042add9efeb3c3e382eccc9c2a62d718fd12
  4--- /dev/null
  5+++ b/LICENSE
  6@@ -0,0 +1,22 @@
  7+MIT License
  8+
  9+Copyright (c) 2021 Gabriel Arakaki Giovanini
 10+
 11+Permission is hereby granted, free of charge, to any person obtaining a copy of
 12+this software and associated documentation files (the "Software"), to deal in
 13+the Software without restriction, including without limitation the rights to
 14+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 15+of the Software, and to permit persons to whom the Software is furnished to do
 16+so, subject to the following conditions:
 17+
 18+The above copyright notice and this permission notice (including the next
 19+paragraph) shall be included in all copies or substantial portions of the
 20+Software.
 21+
 22+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 23+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 24+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 25+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 26+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 27+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 28+SOFTWARE.
 29diff --git a/Makefile b/Makefile
 30new file mode 100644
 31index 0000000000000000000000000000000000000000..4aba75d21e54b4857c8cd0227693e2b7d8f33044
 32--- /dev/null
 33+++ b/Makefile
 34@@ -0,0 +1,16 @@
 35+PREFIX?=$(HOME)/.config/nvim
 36+FENNEL?=fennel
 37+SOURCES := $(shell find . -name '*.lua')
 38+
 39+install:
 40+	rm $(PREFIX)/lua/gabrielgio/*
 41+	mkdir -p $(PREFIX)/lua/gabrielgio/
 42+	for name in $(SOURCES); do\
 43+		install -m644 $${name} $(PREFIX)/$${name}; \
 44+	done
 45+
 46+format:
 47+	mkdir -p $(PREFIX)/lua/gabrielgio/
 48+	for name in $(SOURCES); do\
 49+		lua-format -i $${name}; \
 50+	done
 51diff --git a/README.md b/README.md
 52new file mode 100644
 53index 0000000000000000000000000000000000000000..b6c2f8057e08a316e2059861ef8a02cb7528d47d
 54--- /dev/null
 55+++ b/README.md
 56@@ -0,0 +1,3 @@
 57+# gabrielgio.lua
 58+
 59+Just a collection of lua scripts of my local neovim dotfiles.
 60diff --git a/init.lua b/init.lua
 61new file mode 100644
 62index 0000000000000000000000000000000000000000..d06a37fd8505a492ef755d3644bf017b58756737
 63--- /dev/null
 64+++ b/init.lua
 65@@ -0,0 +1,41 @@
 66+local packer = require("packer")
 67+
 68+local pkgs = {
 69+    "wbthomason/packer.nvim",                       -- packer manager
 70+    "folke/trouble.nvim",                           -- diagnostics
 71+    "mfussenegger/nvim-dap",                        -- add dap support
 72+    "leoluz/nvim-dap-go",                           -- add some utilites to go
 73+    "nvim-neotest/nvim-nio",                        -- async support library
 74+    "nvim-lua/plenary.nvim",                        -- base lib
 75+    "nvim-telescope/telescope.nvim",                -- telescope
 76+    "nvim-telescope/telescope-file-browser.nvim",   -- telescope file browser
 77+    "TimUntersberger/neogit",                       -- magit
 78+    "echasnovski/mini.nvim",                        -- provides many things
 79+    "jose-elias-alvarez/null-ls.nvim",              -- enriches lsp
 80+    "nvim-treesitter/nvim-treesitter-context",      -- show context of where it is at the code
 81+    "mbbill/undotree",                              -- keep track of undos
 82+    "simrat39/symbols-outline.nvim",                -- symbols tree (lsp aware)
 83+    "caenrique/nvim-toggle-terminal",               -- help with toggle from and to terminals [DEPRECATED]
 84+    "RRethy/vim-illuminate",                        -- hightlight use of the same word (lsp aware)
 85+    "sainnhe/edge",                                 -- light theme
 86+    "williamboman/mason.nvim",                      -- manages many things
 87+    "neovim/nvim-lspconfig",                        -- lsp support
 88+}
 89+
 90+local function startup(use)
 91+    use("nvim-treesitter/nvim-treesitter", {run = ":TSUpdate"})
 92+    use("fatih/vim-go", {run = ":GoUpdateBinaries"})
 93+    for _, value in ipairs(pkgs) do use(value) end
 94+end
 95+
 96+packer.startup(startup)
 97+
 98+local neogit = require("neogit")
 99+local null_ls = require("null-ls")
100+local mason = require("mason")
101+
102+null_ls.setup({sources = {null_ls.builtins.diagnostics.golangci_lint}})
103+neogit.setup()
104+mason.setup()
105+
106+require("gabrielgio")
107diff --git a/lua/gabrielgio/dap.lua b/lua/gabrielgio/dap.lua
108new file mode 100644
109index 0000000000000000000000000000000000000000..2534c7a17e9070d029d74f89d4422e19f726a854
110--- /dev/null
111+++ b/lua/gabrielgio/dap.lua
112@@ -0,0 +1,32 @@
113+local dap = require("dap")
114+local key = require("gabrielgio.key")
115+local dapgo = require("dap-go")
116+
117+dapgo.setup({delve = {build_flags = "-tags=unit,integration,e2e"}})
118+
119+key.nnoremap("<F5>", ":lua require'dap'.continue()<CR>")
120+key.nnoremap("<F10>", ":lua require'dap'.step_over()<CR>")
121+key.nnoremap("<F11>", ":lua require'dap'.step_into()<CR>")
122+key.nnoremap("<F12>", ":lua require'dap'.step_out()<CR>")
123+key.nnoremap("<leader>b", ":lua require'dap'.toggle_breakpoint()<CR>")
124+key.nnoremap("<leader>B", ":lua require'dap'.set_breakpoint(vim.fn.input('Condition: '))<CR>")
125+key.nnoremap("<leader>dt", ":lua require'dap-go'.debug_test()<CR>")
126+key.nnoremap("<leader>dr", ":lua require'dap'.repl.open()<CR>")
127+
128+dap.adapters.gdb = {
129+    type = "executable",
130+    command = "gdb",
131+    args = { "-i", "dap" }
132+}
133+
134+dap.configurations.c = {
135+    {
136+        name = "Launch",
137+        type = "gdb",
138+        request = "launch",
139+        program = function()
140+            return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file')
141+        end,
142+        cwd = "${workspaceFolder}",
143+    },
144+}
145diff --git a/lua/gabrielgio/gitsigns.lua b/lua/gabrielgio/gitsigns.lua
146new file mode 100644
147index 0000000000000000000000000000000000000000..306e65014b5f6f41976814bd208f6af0dc841094
148--- /dev/null
149+++ b/lua/gabrielgio/gitsigns.lua
150@@ -0,0 +1,4 @@
151+local gitsigns = require("gitsigns")
152+
153+
154+gitsigns.setup()
155diff --git a/lua/gabrielgio/go.lua b/lua/gabrielgio/go.lua
156new file mode 100644
157index 0000000000000000000000000000000000000000..ae442b42a433697d4484c76220047fb239705e8b
158--- /dev/null
159+++ b/lua/gabrielgio/go.lua
160@@ -0,0 +1,16 @@
161+local key = require("gabrielgio.key")
162+
163+vim.g["go_def_mode"] = "gopls"
164+vim.g["go_info_mode"] = "gopls"
165+key.nnoremap("<leader>r", ":GoReferrers<cr>")
166+key.nnoremap("<leader>a", ":GoAlternate<cr>")
167+key.nnoremap("<leader>s", ":GoRename<cr>")
168+key.nnoremap("<leader>i", ":GoImplements<cr>")
169+key.nnoremap("<leader>o", ":GoIfErr<cr>")
170+key.nnoremap("<leader>gs", ":GoDebugStart .<cr>")
171+key.nnoremap("<leader>gc", ":GoDebugContinue<cr>")
172+key.nnoremap("<leader>gb", ":GoBuild<cr>")
173+key.nnoremap("<leader>gr", ":GoDebugRestart<cr>")
174+key.nnoremap("<leader>gn", ":GoRun<cr>")
175+key.nnoremap("<leader>gt", ":GoTest<cr>")
176+key.nnoremap("<leader>ge", ":exec \":GoDebugPrint \".input(\"eval: \")<cr>")
177diff --git a/lua/gabrielgio/init.lua b/lua/gabrielgio/init.lua
178new file mode 100644
179index 0000000000000000000000000000000000000000..a00b425b70230edd856dd9c652ea16c000051dcb
180--- /dev/null
181+++ b/lua/gabrielgio/init.lua
182@@ -0,0 +1,12 @@
183+require("gabrielgio.lsp")
184+require("gabrielgio.settable")
185+require("gabrielgio.mini")
186+require("gabrielgio.go")
187+require("gabrielgio.telescope")
188+require("gabrielgio.treesitter")
189+require("gabrielgio.undotree")
190+require("gabrielgio.so")
191+require("gabrielgio.trouble")
192+require("gabrielgio.dap")
193+require("gabrielgio.term")
194+require("gabrielgio.neovide")
195diff --git a/lua/gabrielgio/key.lua b/lua/gabrielgio/key.lua
196new file mode 100644
197index 0000000000000000000000000000000000000000..ed683b12bb005a8676106dcaae8612b02af65ffc
198--- /dev/null
199+++ b/lua/gabrielgio/key.lua
200@@ -0,0 +1,24 @@
201+local function bind(op, outer_opts)
202+    local outer_opts0 = (outer_opts or {noremap = true})
203+    local function lo(lhs, rhs, opts)
204+        local opts0 = vim.tbl_extend("force", outer_opts0, (opts or {}))
205+        return vim.keymap.set(op, lhs, rhs, opts0)
206+    end
207+    return lo
208+end
209+
210+local nmap = bind("n", {noremap = false})
211+local nnoremap = bind("n")
212+local vnoremap = bind("v")
213+local xnoremap = bind("x")
214+local inoremap = bind("i")
215+local tnoremap = bind("t")
216+
217+return {
218+    nmap = nmap,
219+    nnoremap = nnoremap,
220+    tnoremap = tnoremap,
221+    vnoremap = vnoremap,
222+    xnoremap = xnoremap,
223+    inoremap = inoremap
224+}
225diff --git a/lua/gabrielgio/lsp.lua b/lua/gabrielgio/lsp.lua
226new file mode 100644
227index 0000000000000000000000000000000000000000..3856db96ffbe2805b5cc6f727a7343c8d6cb9625
228--- /dev/null
229+++ b/lua/gabrielgio/lsp.lua
230@@ -0,0 +1,45 @@
231+local lsp_config = require("lspconfig")
232+
233+local function set_key(mode, keys, v, opts)
234+    return vim.keymap.set(mode, keys, v, opts)
235+end
236+
237+local function on_attach(client, bufnr)
238+    do
239+        local bufopts = {noremap = true, silent = true, buffer = bufnr}
240+        set_key("n", "gD", vim.lsp.buf.declaration, bufopts)
241+        set_key("n", "gd", vim.lsp.buf.definition, bufopts)
242+        set_key("n", "K", vim.lsp.buf.hover, bufopts)
243+        set_key("n", "gi", vim.lsp.buf.implementation, bufopts)
244+        set_key("n", "<C-s>", vim.lsp.buf.signature_help, bufopts)
245+        set_key("n", "<space>rn", vim.lsp.buf.declaration, bufopts)
246+        set_key("n", "<space>ca", vim.lsp.buf.code_action, bufopts)
247+        set_key("n", "<space>f", vim.lsp.buf.formatting, bufopts)
248+    end
249+    return bufnr
250+end
251+
252+local function setup(f)
253+    return f({capabilities = capabilities, on_attach = on_attach})
254+end
255+
256+local function load_all(l)
257+    for _, v in ipairs(l) do setup(v) end
258+    return nil
259+end
260+
261+load_all({
262+    lsp_config.rust_analyzer.setup,
263+    lsp_config.clangd.setup,
264+    lsp_config.cssls.setup,
265+    lsp_config.html.setup,
266+    lsp_config.emmet_ls.setup,
267+    lsp_config.lua_ls.setup,
268+    lsp_config.pylsp.setup
269+})
270+
271+lsp_config.gopls.setup({
272+    capabilities = capabilities,
273+    cmd_env = {GOFLAGS = "-tags=unit,integration,e2e"},
274+    on_attach = on_attach
275+})
276diff --git a/lua/gabrielgio/mini.lua b/lua/gabrielgio/mini.lua
277new file mode 100644
278index 0000000000000000000000000000000000000000..28b49b03f30aede8c28f21f74b5458140d42420d
279--- /dev/null
280+++ b/lua/gabrielgio/mini.lua
281@@ -0,0 +1,11 @@
282+local cmp = require("mini.completion")
283+local diff = require("mini.diff")
284+local status = require("mini.statusline")
285+
286+cmp.setup()
287+diff.setup({
288+    view = {
289+        style = 'sign'
290+    }
291+})
292+status.setup()
293diff --git a/lua/gabrielgio/neovide.lua b/lua/gabrielgio/neovide.lua
294new file mode 100644
295index 0000000000000000000000000000000000000000..cb712435cfda1705851324d3ae66d8d0ed89f823
296--- /dev/null
297+++ b/lua/gabrielgio/neovide.lua
298@@ -0,0 +1,21 @@
299+local key = require("gabrielgio.key")
300+
301+if not vim.g.neovide then
302+    return
303+end
304+
305+vim.g.neovide_scale_factor = 1
306+vim.g.neovide_cursor_antialiasing = true
307+vim.o.guifont = "iosevka:h20:#e-subpixelantialias"
308+
309+local function change_scale_factor(delta)
310+  vim.g.neovide_scale_factor = vim.g.neovide_scale_factor * delta
311+end
312+
313+key.nnoremap("<leader>-", function()
314+  change_scale_factor(1.10)
315+end)
316+
317+key.nnoremap("<leader>=", function()
318+  change_scale_factor(1/1.10)
319+end)
320diff --git a/lua/gabrielgio/settable.lua b/lua/gabrielgio/settable.lua
321new file mode 100644
322index 0000000000000000000000000000000000000000..d70dfa12d231fe037dfd14915b15a46a85655bf3
323--- /dev/null
324+++ b/lua/gabrielgio/settable.lua
325@@ -0,0 +1,56 @@
326+local key = require("gabrielgio.key")
327+vim.opt.shiftwidth = 4
328+vim.opt.tabstop = 4
329+vim.opt.softtabstop = 4
330+vim.opt.shiftwidth = 4
331+vim.opt.expandtab = true
332+vim.opt.smartindent = true
333+vim.opt.hidden = true
334+vim.opt.errorbells = false
335+vim.opt.exrc = true
336+vim.opt.relativenumber = true
337+vim.opt.hlsearch = true
338+vim.opt.nu = true
339+vim.opt.wrap = false
340+vim.opt.smartcase = true
341+vim.opt.ignorecase = true
342+vim.opt.swapfile = false
343+vim.opt.backup = false
344+vim.opt.undodir = "/home/gabrielgio/.local/share/nvim/undodir"
345+vim.opt.undofile = true
346+vim.opt.incsearch = true
347+vim.opt.termguicolors = true
348+vim.opt.scrolloff = 8
349+vim.opt.showmode = false
350+vim.opt.colorcolumn = "80"
351+vim.opt.signcolumn = "yes"
352+vim.opt.background = "light"
353+vim.opt.completeopt = {"menu", "menuone", "noselect"}
354+vim.opt.clipboard = (vim.opt.clipboard + "unnamedplus")
355+vim.opt.spelllang = {"en", "pt_br", "de"}
356+vim.opt.list = true
357+vim.opt.listchars = {
358+    eol = "\194\172",
359+    tab = ">\194\183",
360+    trail = "~",
361+    extends = ">",
362+    precedes = "<",
363+    space = "."
364+}
365+vim.opt.wildignore = (vim.opt.wildignore + "**/.git/*")
366+vim.g.mapleader = " "
367+vim.opt.updatetime = 100
368+vim.opt.foldmethod = "expr"
369+vim.opt.foldexpr = "nvim_treesitter#foldexpr()"
370+vim.opt.foldenable = false
371+key.nnoremap("<leader>w", "<C-w>w")
372+vim.cmd("colorscheme edge")
373+vim.o.background = "light"
374+
375+vim.g.loaded = 1
376+vim.g.loaded_netrwPlugin = 1
377+vim.g.CtrlSpaceDefaultMappingKey = "<C-space> "
378+vim.g.maplocalleader = ";"
379+
380+vim.g.cmake_build_dir = "build"
381+vim.g.cmake_build_type = "Debug"
382diff --git a/lua/gabrielgio/so.lua b/lua/gabrielgio/so.lua
383new file mode 100644
384index 0000000000000000000000000000000000000000..df04319ba3d33feb24f54dca88172a346cdb89ce
385--- /dev/null
386+++ b/lua/gabrielgio/so.lua
387@@ -0,0 +1,6 @@
388+local key = require("gabrielgio.key")
389+local symbols = require("symbols-outline")
390+
391+key.nnoremap("<leader>to", ":SymbolsOutline<cr>")
392+
393+symbols.setup()
394diff --git a/lua/gabrielgio/telescope.lua b/lua/gabrielgio/telescope.lua
395new file mode 100644
396index 0000000000000000000000000000000000000000..257a42e4a9bddc7819373b43d1c8b0b207bc8a15
397--- /dev/null
398+++ b/lua/gabrielgio/telescope.lua
399@@ -0,0 +1,30 @@
400+local key = require("gabrielgio.key")
401+local builtins = require("telescope.builtin")
402+local telescope = require("telescope")
403+
404+telescope.setup{
405+    defaults = {
406+        file_ignore_patterns = {
407+            "vendor/",
408+            ".git/"
409+        },
410+        vimgrep_arguments = {
411+            "rg",
412+            "--color=never",
413+            "--no-heading",
414+            "--with-filename",
415+            "--line-number",
416+            "--column",
417+            "--smart-case",
418+            "--hidden"
419+        }
420+    },
421+}
422+
423+telescope.load_extension("file_browser")
424+
425+key.nnoremap("<leader>ff", builtins.find_files)
426+key.nnoremap("<leader>fs", builtins.live_grep)
427+key.nnoremap("<leader>fd", ":Telescope buffers<CR>")
428+key.nnoremap("<leader>n", ":Telescope file_browser<CR>")
429+key.nnoremap("<leader>m", ":Telescope file_browser path=%:p:h select_buffer=true<CR>")
430diff --git a/lua/gabrielgio/term.lua b/lua/gabrielgio/term.lua
431new file mode 100644
432index 0000000000000000000000000000000000000000..0172fbe9ef95fd557e5be61b57f0f245b7ec9f5c
433--- /dev/null
434+++ b/lua/gabrielgio/term.lua
435@@ -0,0 +1,7 @@
436+local key = require("gabrielgio.key")
437+
438+key.nnoremap("<C-n>", ":Neogit kind=replace<cr>")
439+key.nnoremap("<C-p>", ":ToggleTerminal<cr>")
440+key.tnoremap("<C-p>", "<C-\\><C-n>:ToggleTerminal<cr>")
441+key.tnoremap("<Esc>", "<C-\\><C-n>")
442+key.tnoremap("<C-n>", "<C-\\><C-n>:Neogit kind=replace<cr>")
443diff --git a/lua/gabrielgio/treesitter.lua b/lua/gabrielgio/treesitter.lua
444new file mode 100644
445index 0000000000000000000000000000000000000000..409180542a950f11ac939916d761c2b9515834ad
446--- /dev/null
447+++ b/lua/gabrielgio/treesitter.lua
448@@ -0,0 +1,6 @@
449+local tree_sitter = require("nvim-treesitter.configs")
450+
451+tree_sitter.setup({
452+    ensure_installed = {"c", "go"},
453+    highlight = {enable = true}
454+})
455diff --git a/lua/gabrielgio/trouble.lua b/lua/gabrielgio/trouble.lua
456new file mode 100644
457index 0000000000000000000000000000000000000000..67c4938e4d7a46e2a3afefe54e5147f311c79ab4
458--- /dev/null
459+++ b/lua/gabrielgio/trouble.lua
460@@ -0,0 +1,15 @@
461+local trouble = require("trouble")
462+
463+trouble.setup{
464+    fold_open = "v",
465+    fold_closed = ">",
466+    signs = {
467+        error = "error",
468+        warning = "warn",
469+        hint = "hint",
470+        information = "info"
471+    },
472+    indent_lines = false,
473+    icons = false,
474+    use_diagnostic_signs = false
475+}
476diff --git a/lua/gabrielgio/undotree.lua b/lua/gabrielgio/undotree.lua
477new file mode 100644
478index 0000000000000000000000000000000000000000..c117df2cfc3d5b30b800acf3a4d949cae66cf525
479--- /dev/null
480+++ b/lua/gabrielgio/undotree.lua
481@@ -0,0 +1,3 @@
482+local key = require("gabrielgio.key")
483+
484+key.nnoremap("<leader>ut", ":UndotreeToggle<cr>")