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>")