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 | 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", "<", "") vim.keymap.set("v", "S", 'y:%s/"//g') --- 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", "sz", ":luafile ~/.config/nvim/init.lua") vim.keymap.set({ "n", "v" }, "cp", '"+y') vim.keymap.set({ "n", "v" }, "pa", '"+P') vim.keymap.set("n", "cs", ":let @/ = ''") vim.keymap.set("n", "fj", ":%!jq .") vim.keymap.set("n", "gg", ":exe '!gh gist create -w %:p'") --- tabs vim.keymap.set("n", "2", function() print("Setting tabstop to 2") vim.opt.tabstop = 2 vim.opt.shiftwidth = 2 vim.opt.expandtab = true end) vim.keymap.set("n", "4", function() print("Setting tabstop to 4") vim.opt.tabstop = 4 vim.opt.shiftwidth = 4 vim.opt.expandtab = true end) vim.keymap.set("n", "a", function() print("Setting tabstop to tab") vim.opt.tabstop = 8 vim.opt.shiftwidth = 8 vim.opt.expandtab = false end) vim.keymap.set("n", "st", ':let @/ = "\t"') -- 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", "bd", function() require("bufdelete").bufdelete(0, true) end) --- gitlinker.nvim require"gitlinker".setup() vim.keymap.set("n", "gh", function() require"gitlinker".get_buf_range_url( "n", { action_callback = require"gitlinker.actions".open_in_browser } ) end, { silent = true }) vim.keymap.set("v", "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", "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", "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", "pi", function() vim.cmd("PackerCompile") vim.cmd("PackerInstall") end) vim.keymap.set("n", "pu", ":PackerSync") vim.keymap.set("n", "pc", ":PackerClean") --- telescope.nvim vim.keymap.set("n", "", function() require("telescope.builtin").git_files() end) --- whitespace.nvim require("whitespace-nvim").setup({ hightlight = "red" }) vim.keymap.set("n", "fw", function() require("whitespace-nvim").trim() end, { silent = true })