dotfiles/nvim/.config/nvim/init.lua
2022-11-01 21:41:37 -04:00

274 lines
7 KiB
Lua

local ensure_packer = function()
local fn = vim.fn
local install_path = fn.stdpath("data").."/site/pack/packer/start/packer.nvim"
if fn.empty(fn.glob(install_path)) > 0 then
fn.system({"git", "clone", "--depth", "1", "https://github.com/wbthomason/packer.nvim", install_path})
vim.cmd [[packadd packer.nvim]]
return true
end
return false
end
local packer_bootstrap = ensure_packer()
require("packer").startup(function(use)
local use = use
use "wbthomason/packer.nvim"
-- TODO: autoupdate (but after plugins separate file
-- augroup packer_user_config
-- autocmd!
-- autocmd BufWritePost plugins.lua source <afile> | PackerCompile
-- augroup end
use "nvim-lua/plenary.nvim"
use "nvim-telescope/telescope.nvim"
use "nvim-treesitter/nvim-treesitter"
use "nvim-treesitter/nvim-treesitter-context"
use "famiu/bufdelete.nvim"
use "gpanders/editorconfig.nvim"
use "johnfrankmorgan/whitespace.nvim"
use "kylechui/nvim-surround"
use "L3MON4D3/LuaSnip"
use "lewis6991/gitsigns.nvim"
use "nyngwang/NeoZoom.lua" -- TODO: Floating window background color
use "ruifm/gitlinker.nvim"
use "neovim/nvim-lspconfig"
use "hrsh7th/nvim-cmp"
use "hrsh7th/cmp-nvim-lsp"
use "hrsh7th/cmp-buffer"
use "hrsh7th/cmp-path"
use "hrsh7th/cmp-nvim-lua"
use 'saadparwaiz1/cmp_luasnip'
use "gruvbox-community/gruvbox"
end)
--- SETTING CONFIGURATION
vim.opt.autowrite = true
-- vim.opt.backspace = 2 -- default in neovim?
vim.opt.cpoptions:append("$")
-- vim.opt.endofline -- default in neovim?
-- vim.opt.laststatus = 2 -- default in neovim?
-- vim.opt.backup = false -- default in neovim?
vim.opt.swapfile = false
vim.opt.wrap = false
vim.opt.scrolloff = 3
vim.opt.showmatch = true
-- vim.opt.showmode = true -- default in neovim?
-- vim.opt.showmode = true -- default in neovim?
vim.opt.timeoutlen = 500
vim.opt.virtualedit = "all"
-- vim.opt.hlsearch = true -- default in neovim?
vim.opt.ignorecase = true
-- vim.opt.incsearch = true -- default in neovim?
vim.opt.smartcase = true
-- vim.opt.wrapscan = true -- default in neovim?
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.textwidth = 80
vim.opt.colorcolumn = {80, 120}
-- Tabs are 2 spaces
vim.opt.tabstop = 2
vim.opt.softtabstop = 2
vim.opt.shiftwidth = 2
vim.opt.expandtab = true
vim.opt.shiftround = true -- make >> go to next tab
-- undo
vim.opt.undolevels = 5000
vim.opt.undofile = true
vim.opt.undodir = os.getenv("HOME") .. "/.config/nvim/undo"
-- REMAP CONFIGURATION
--- Stay in visual mode while tabbing
vim.keymap.set("v", ">", ">gv")
vim.keymap.set("v", "<", "<gv")
--- quick replacement
vim.keymap.set("n", "S", ":%s//g<LEFT><LEFT>")
vim.keymap.set("v", "S", 'y:%s/<C-r><C-r>"//g<Left><Left>')
--- COMMAND CONFIGURATION
--- Avoid typos
vim.api.nvim_create_user_command("W", "w", {})
vim.api.nvim_create_user_command("Wq", "wq", {})
-- CUSTOM CONFIGURATION
--- Targetting!
local reticle = vim.api.nvim_create_augroup("Reticle", {
clear = true
})
vim.api.nvim_create_autocmd({"VimEnter", "WinEnter", "BufWinEnter"}, {
group = reticle,
callback = function()
vim.opt_local.cursorline = true
vim.opt_local.cursorcolumn = true
end
})
vim.api.nvim_create_autocmd({"WinLeave"}, {
group = reticle,
callback = function()
vim.opt_local.cursorline = false
vim.opt_local.cursorcolumn = false
end
})
--- background matching terminal
function ChangeBackground()
local file = io.open(os.getenv("HOME") .. "/.config/atomaka/color.yml", "rb")
local background = file:read()
file:close()
vim.opt.background = background
end
ChangeBackground()
-- LEADER CONFIGURATION
vim.g.mapleader = ","
vim.keymap.set("n", "<leader>sz", ":luafile ~/.config/nvim/init.lua<cr>")
vim.keymap.set({ "n", "v" }, "<leader>cp", '"+y')
vim.keymap.set({ "n", "v" }, "<leader>pa", '"+P')
vim.keymap.set("n", "<leader>cs", ":let @/ = ''<cr>")
vim.keymap.set("n", "<leader>fj", ":%!jq .<cr>")
vim.keymap.set("n", "<leader>gg", ":exe '!gh gist create -w %:p'<cr><cr>")
--- tabs
vim.keymap.set("n", "<Leader>2", function()
print("Setting tabstop to 2")
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.expandtab = true
end)
vim.keymap.set("n", "<Leader>4", function()
print("Setting tabstop to 4")
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.expandtab = true
end)
vim.keymap.set("n", "<Leader>a", function()
print("Setting tabstop to tab")
vim.opt.tabstop = 8
vim.opt.shiftwidth = 8
vim.opt.expandtab = false
end)
vim.keymap.set("n", "<Leader>st", ':let @/ = "\t"<cr>')
-- COLOR CONFIGURATION
vim.cmd("colorscheme gruvbox")
vim.api.nvim_create_autocmd({"ColorScheme", "BufWinEnter"}, {
callback = function()
vim.cmd("hi Normal ctermbg=NONE guibg=NONE")
end,
})
-- PLUGIN CONFIGURATION
--- bufdelete.nvim
vim.keymap.set("n", "<Leader>bd", function()
require("bufdelete").bufdelete(0, true)
end)
--- gitlinker.nvim
require"gitlinker".setup()
vim.keymap.set("n", "<Leader>gh", function()
require"gitlinker".get_buf_range_url(
"n",
{ action_callback = require"gitlinker.actions".open_in_browser }
)
end, { silent = true })
vim.keymap.set("v", "<leader>gh", function()
require"gitlinker".get_buf_range_url(
"v",
{ action_callback = require"gitlinker.actions".open_in_browser }
)
end)
--- gitsigns.nvim
require("gitsigns").setup()
vim.keymap.set("n", "<leader>gb", require("gitsigns").toggle_current_line_blame)
--- NeoZoom.lua
require("neo-zoom").setup({
left_ratio = 0,
top_ratio = 0,
width_ratio = 1,
height_ratio = 1,
border = "none",
})
vim.keymap.set("n", "<C-w>z", require("neo-zoom").neo_zoom)
--- nvim-cmp
require("cmp").setup({ -- TODO: More incoming
snippet = {
expand = function(args)
require("luasnip").lsp_expand(args.body)
end,
}
})
--- nvim-lspconfig
require("lspconfig").rust_analyzer.setup({
capabilities = require("cmp_nvim_lsp").update_capabilities(
vim.lsp.protocol.make_client_capabilities()
),
})
--- nvim-surround
require("nvim-surround").setup()
--- nvim-treesitter
require"nvim-treesitter.configs".setup {
ensure_installed = "all",
sync_install = false,
ignore_install = { "phpdoc" }, -- TODO: https://github.com/claytonrcarter/tree-sitter-phpdoc/issues/15
highlight = {
enable = true,
additional_vim_regex_highlighting = false,
},
}
-- nvim-treesitter-context
require("treesitter-context").setup({
patterns = {
rust = {
-- default rust
"impl_item",
"struct",
"enum",
-- substrate xD
"macro_invocation",
},
},
})
--- packer.nvim
vim.keymap.set("n", "<Leader>pi", function()
vim.cmd("PackerCompile")
vim.cmd("PackerInstall")
end)
vim.keymap.set("n", "<Leader>pu", ":PackerSync<CR>")
vim.keymap.set("n", "<Leader>pc", ":PackerClean<CR>")
--- telescope.nvim
vim.keymap.set("n", "<C-p>", function()
require("telescope.builtin").git_files()
end)
--- whitespace.nvim
require("whitespace-nvim").setup({
hightlight = "red"
})
vim.keymap.set("n", "<Leader>fw", function()
require("whitespace-nvim").trim()
end, { silent = true })