-- use modern vim vim.o.compatible = false -- dont use backup files vim.o.backup = false vim.o.writebackup = false vim.o.swapfile = false -- allow unsaved buffers vim.o.hidden = true -- enable mouse vim.o.mouse = 'a' -- display tabs and trailing spaces vim.o.list = true vim.o.listchars = 'tab:»·,trail:·,nbsp:·' -- search options vim.o.incsearch = true vim.o.hlsearch = true -- backspace in insert mode vim.o.backspace = "indent,eol,start" -- no sound vim.o.visualbell = true -- set encoding vim.o.encoding = "utf-8" vim.o.fileencoding = "utf-8" -- show commands vim.o.showcmd = true -- file format vim.o.fileformats = "unix,dos" -- disable conceal vim.g.vim_json_conceal = 0 vim.g.markdown_syntax_conceal = 0 -- autocmd FileType json set conceallevel=0 -- show line numbers vim.o.number = true -- 80 character line length highlight vim.o.colorcolumn = "80" -- highlight current line vim.o.cursorline = true -- set tab width and use spaces for tabs vim.o.tabstop = 4 vim.o.shiftwidth = 4 vim.o.softtabstop = 4 vim.o.expandtab = true -- disable netrw vim.g.loaded_netrw = 1 vim.g.loaded_netrwPlugin = 1 -- set colours vim.opt.termguicolors = true -- use system clipboard vim.o.clipboard = '' vim.keymap.set('n', '""y', '""y') vim.keymap.set('n', '""yy', '""yy') vim.keymap.set('n', '""p', '""p') vim.keymap.set('n', '""P', '""P') vim.keymap.set('n', 'y', function() return (vim.v.register == '"' and '"+' or '') .. 'y' end, { expr = true }) vim.keymap.set('n', 'yy', function() return (vim.v.register == '"' and '"+' or '') .. 'yy' end, { expr = true }) vim.keymap.set('n', 'p', function() return (vim.v.register == '"' and '"+' or '') .. 'p' end, { expr = true }) vim.keymap.set('n', 'P', function() return (vim.v.register == '"' and '"+' or '') .. 'P' end, { expr = true }) -- copy/paste vim.keymap.set('n', '', '"+dd') vim.keymap.set('v', '', '"+d') vim.keymap.set('n', '', '"+yy') vim.keymap.set('v', '', '"+y') vim.keymap.set({'n', 'v'}, '', '"+p') vim.keymap.set('i', '', '+') -- make files use regular tabs vim.api.nvim_create_autocmd({"FileType"}, { pattern = "make", command = "set tabstop=4 shiftwidth=8 softtabstop=0 noexpandtab" }) -- reload vimrc on change vim.api.nvim_create_augroup("reload_vimrc", {}) vim.api.nvim_create_autocmd({"BufWritePost"}, { group = "reload_vimrc", pattern = vim.env.MYVIMRC, callback = function() vim.cmd "source $MYVIMRC" require('packer').sync() -- require('packer').compile() end }) -- gui settings vim.o.linespace = 4 vim.o.guifont = "Roboto_Mono:h12" -- neovide settings if vim.g.neovide then vim.g.neovide_cursor_animation_length = 0.01 vim.g.neovide_cursor_trail_length = 0.01 vim.g.neovide_cursor_vfx_mode = "" vim.g.neovide_remember_window_size = true vim.g.neovide_scale_factor = 1.0 vim.keymap.set('n', '', function() vim.g.neovide_scale_factor = vim.g.neovide_scale_factor * 1.1 end) vim.keymap.set('n', '', function() vim.g.neovide_scale_factor = vim.g.neovide_scale_factor / 1.1 end) end -- bootstrap packer local bootstrap_packer = (function() local packer_path = vim.fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim' if vim.fn.empty(vim.fn.glob(packer_path)) > 0 then vim.fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', packer_path}) vim.cmd('packadd packer.nvim') return true end return false end)() -- plugins require('packer').startup { function(use) use 'wbthomason/packer.nvim' use { 'tanvirtin/monokai.nvim', config = function() require('monokai').setup({}) end } use 'christoomey/vim-tmux-navigator' -- use 'jiangmiao/auto-pairs' use { 'majutsushi/tagbar', config = function() vim.keymap.set('', '', vim.cmd.TagbarToggle) end } use 'mg979/vim-visual-multi' use { 'nvim-tree/nvim-web-devicons', config = function() require('nvim-web-devicons').setup { color_icons = true } end } use { 'nvim-tree/nvim-tree.lua', requires = { 'nvim-lua/plenary.nvim' }, after = { 'nvim-web-devicons' }, config = function() require("nvim-tree").setup { filters = { dotfiles = true }, update_focused_file = { enable = true }, renderer = { icons = { webdev_colors = true, git_placement = 'signcolumn' }, highlight_opened_files = 'icon' }, view = { signcolumn = 'yes' }, actions = { change_dir = { global = true } }, live_filter = { always_show_folders = false } } vim.keymap.set('', '', vim.cmd.NvimTreeToggle) end } use { 'romgrk/barbar.nvim', after = { 'nvim-tree.lua', 'nvim-web-devicons' }, config = function() require('bufferline').setup { auto_hide = false } local tree_events = require('nvim-tree.events') local bufferline_api = require('bufferline.api') local function get_tree_size() return require('nvim-tree.view').View.width end tree_events.subscribe('TreeOpen', function() bufferline_api.set_offset(get_tree_size()) end) tree_events.subscribe('Resize', function() bufferline_api.set_offset(get_tree_size()) end) tree_events.subscribe('TreeClose', function() bufferline_api.set_offset(0) end) end } use { 'nvim-lualine/lualine.nvim', after = { 'monokai.nvim' }, config = function() require('lualine').setup() end } use { 'thaerkh/vim-indentguides', config = function() vim.g.indent_guides_enable_on_vim_startup = 1 vim.g.indent_guides_start_level = 2 vim.g.indent_guides_guide_size = 1 end } use { 'nvim-telescope/telescope.nvim', requires = { 'BurntSushi/ripgrep', 'nvim-lua/plenary.nvim', 'cljoly/telescope-repo.nvim' }, config = function() local telescope = require('telescope') local builtin = require('telescope.builtin') telescope.setup { extensions = { repo = { list = { search_dirs = { '~/repos' } } } } } telescope.load_extension("repo") vim.keymap.set('', '', builtin.builtin) vim.keymap.set('', 'ff', builtin.find_files) vim.keymap.set('', 'fg', builtin.live_grep) vim.keymap.set('', 'fb', builtin.buffers) vim.keymap.set('', 'fh', builtin.help_tags) vim.keymap.set('', 'fr', telescope.extensions.repo.list) end } use { 'mbbill/undotree', config = function() vim.g.undotree_WindowLayout = 4 vim.keymap.set('', '', vim.cmd.UndotreeToggle) end } use { 'lewis6991/gitsigns.nvim', config = function() require('gitsigns').setup() end } use { 'wfxr/minimap.vim', after = { 'monokai.nvim' }, config = function() vim.minimap_git_colors = 1 vim.keymap.set('', '', vim.cmd.MinimapToggle) end } use { 'numToStr/Comment.nvim', config = function() require('Comment').setup() end } use 'rafamadriz/neon' use { 'nvim-treesitter/nvim-treesitter', run = ':TSUpdate', config = function() require('nvim-treesitter.configs').setup { ensure_installed = { 'python', 'bash', 'lua', 'javascript', 'c', 'json', 'html' }, highlight = { enable = true } } end } if bootstrap_packer then require('packer').sync() end end, config = { compile_on_sync = true, auto_reload_compiled = true } }