--[[ speedie's neovim configuration -- https://git.speedie.site/speedie/speedie-nvim -- ]]-- local cmd = vim.cmd -- Convenient alias local opt = vim.opt -- Convenient alias local o = vim.o -- Convenient alias local keymap = vim.api.nvim_set_keymap -- Convenient alias local autocmd = vim.api.nvim_create_autocmd -- Convenient alias local sessionFile = '~/.config/nvim/.session.nvim' -- File where the previous buffer is stored Theme = 'doom-one' -- Theme to use Languages = { -- Used to configure highlighting 'html', 'css', 'c', 'cpp', -- The best language 'php', 'lua', 'vim', 'vimdoc', 'markdown', } -- Languages to support Plugins = { -- Plugins to use { 'nvim-telescope/telescope.nvim', dependencies = { 'nvim-lua/plenary.nvim', } }, -- Fuzzy-finding { 'nvim-treesitter/nvim-treesitter' }, -- Better syntax highlighting { 'nvim-lualine/lualine.nvim' }, -- Status line { 'm4xshen/autoclose.nvim' }, -- Autoclose brackets { 'romgrk/doom-one.vim' }, -- Doom-One theme { 'stevearc/conform.nvim' }, -- Formatting { 'NeogitOrg/neogit', dependencies = { 'nvim-lua/plenary.nvim', 'sindrets/diffview.nvim', 'nvim-telescope/telescope.nvim', }, }, -- Git integration { 'romgrk/barbar.nvim', dependencies = { 'lewis6991/gitsigns.nvim', 'nvim-tree/nvim-web-devicons', }, opts = { clickable = true, animation = true, focus_on_close = 'left', } }, -- Tabs { 'williamboman/mason.nvim', dependencies = { 'williamboman/mason-lspconfig.nvim', } }, -- Server auto-install { 'VonHeikemen/lsp-zero.nvim', branch = 'v3.x', dependencies = { 'neovim/nvim-lspconfig', 'hrsh7th/cmp-nvim-lsp', 'hrsh7th/nvim-cmp', 'L3MON4D3/LuaSnip', } }, -- LSP { 'nvim-tree/nvim-tree.lua' }, -- File manager } require('bootstrap') -- Set up Lazy and plugins. opt.title = true -- Display title opt.spelllang = 'en_us' -- Use English (United States) as spellcheck language by default opt.relativenumber = true -- Show relative line numbers opt.mouse = 'a' -- Enable mouse opt.clipboard = 'unnamedplus' -- Use system clipboard opt.hidden = true -- Hides buffers opt.smarttab = true -- Enable smart tab opt.ignorecase = true -- Enable case insensitivity when searching opt.smartcase = true -- Pretty much same for this one opt.hlsearch = false -- Don't highlight searches opt.smartindent = true -- Automatically indent the next line opt.autoindent = true -- Pretty much same for this one opt.expandtab = true -- Replace tabs with spaces automatically opt.swapfile = false -- Don't use a swapfile opt.cursorline = true -- Show the cursor line opt.undolevels = 10000 -- Allow up to 10000 undos opt.tabstop = 4 -- Display a tab (\t) as 4 spaces opt.softtabstop = 4 -- Display a tab (\t) as 4 spaces opt.shiftwidth = 4 -- Indents for << or >> opt.spellsuggest = 'best,5' -- Prefer the best suggestions opt.foldmethod = 'indent' -- Fold based on indents opt.laststatus = 0 -- Don't display file information opt.termguicolors = true -- Enable true color opt.autochdir = true -- Automatically change directory to the file we're editing opt.background = 'dark' -- Set background to dark o.t_8f = '\27[38;2;%lu;%lu;%lum' -- To be honest, I don't know what this does but if I remember correctly it's something good. o.t_8b = '\27[48;2;%lu;%lu;%lum' -- To be honest, I don't know what this does but if I remember correctly it's something good. cmd([[ highlight Normal ctermfg=grey ctermbg=lightgray guifg=#ffffff guibg=#222222 highlight EndOfBuffer ctermfg=grey ctermbg=lightgray guifg=#ffffff guibg=#222222 highlight Folded ctermfg=grey ctermbg=lightgray guifg=#afeeee guibg=#333333 highlight SpellBad guisp=red gui=undercurl guifg=none guibg=none ctermfg=none ctermbg=none term=underline cterm=undercurl highlight SpellCap guisp=yellow gui=undercurl guifg=none guibg=none ctermfg=none ctermbg=none term=underline cterm=undercurl ]]) keymap('n', '', 'h', { noremap = true, silent = true }) keymap('n', '', 'j', { noremap = true, silent = true }) keymap('n', '', 'k', { noremap = true, silent = true }) keymap('n', '', 'l', { noremap = true, silent = true }) keymap('n', '', ':split', { noremap = true, silent = true }) keymap('n', '', ':vsplit', { noremap = true, silent = true }) keymap('n', '', ':only', { noremap = true, silent = true }) keymap('n', '', ':term', { noremap = true, silent = true }) keymap('n', '', ':Telescope fd', { noremap = true, silent = true }) keymap('n', '', ':set spell!', { noremap = true, silent = true }) keymap('n', '', ':set spelllang=en_us', { noremap = true, silent = true }) keymap('n', '', ':set spelllang=sv_se', { noremap = true, silent = true }) keymap('n', '', ':silent execute "!setxkbmap us"', { noremap = true, silent = true }) keymap('n', '', ':silent execute "!setxkbmap se"', { noremap = true, silent = true }) keymap('n', '', ':NvimTreeToggle', { noremap = true, silent = true }) keymap('n', 'ca', 'z=', { noremap = true, silent = true }) keymap('n', '', ':!ninja -C build', { noremap = true, silent = true }) keymap('n', 'H', ':vertical resize -10', { noremap = true, silent = true }) keymap('n', 'J', ':resize -10', { noremap = true, silent = true }) keymap('n', 'K', ':resize +10', { noremap = true, silent = true }) keymap('n', 'L', ':vertical resize +10', { noremap = true, silent = true }) keymap('n', 'd', '"_d', { noremap = true, silent = true }) keymap('x', 'd', '"_d', { noremap = true, silent = true }) keymap('x', 'p', '"_dP', { noremap = true, silent = true }) keymap('n', 'c', '"_c', { noremap = true, silent = true }) keymap('n', '', 'v/{%', { noremap = true, silent = true }) keymap('n', '', 'BufferPrevious', { noremap = true, silent = true }) keymap('n', '', 'BufferNext', { noremap = true, silent = true }) keymap('n', '', 'BufferMovePrevious', { noremap = true, silent = true }) keymap('n', '>', 'BufferMoveNext', { noremap = true, silent = true }) keymap('n', '', 'BufferGoto 1', { noremap = true, silent = true }) keymap('n', '', 'BufferGoto 2', { noremap = true, silent = true }) keymap('n', '', 'BufferGoto 3', { noremap = true, silent = true }) keymap('n', '', 'BufferGoto 4', { noremap = true, silent = true }) keymap('n', '', 'BufferGoto 5', { noremap = true, silent = true }) keymap('n', '', 'BufferGoto 6', { noremap = true, silent = true }) keymap('n', '', 'BufferGoto 7', { noremap = true, silent = true }) keymap('n', '', 'BufferGoto 8', { noremap = true, silent = true }) keymap('n', '', 'BufferGoto 9', { noremap = true, silent = true }) keymap('n', '', 'BufferLast', { noremap = true, silent = true }) keymap('n', '', 'BufferPin', { noremap = true, silent = true }) keymap('n', '', 'BufferClose', { noremap = true, silent = true }) keymap('n', 'bb', 'BufferOrderByBufferNumber', { noremap = true, silent = true }) keymap('n', 'bd', 'BufferOrderByDirectory', { noremap = true, silent = true }) keymap('n', 'bl', 'BufferOrderByLanguage', { noremap = true, silent = true }) keymap('n', 'bw', 'BufferOrderByWindowNumber', { noremap = true, silent = true }) autocmd('BufWritePre', { -- Remove trailing spaces pattern = { '*' }, callback = function() vim.cmd("%s/\\s\\+$//e") end, }) autocmd('BufReadPre', { -- Enable spell check for all Markdown files pattern = { '*.md' }, callback = function() vim.cmd("set spell") end, }) autocmd('BufWritePre', { -- Replace four spaces with tabs in Makefiles pattern = { 'Makefile' }, callback = function() vim.cmd("autocmd BufWritePre Makefile %s/ /\t/e") end, }) autocmd('VimEnter', { -- Restore session on load pattern = { '*' }, callback = function() local _sessionFile = vim.fn.expand(sessionFile) if vim.fn.argc() == 0 then if vim.fn.filereadable(_sessionFile) == 1 then vim.cmd('source ' .. _sessionFile) vim.cmd("filetype detect") end end end, }) autocmd('VimLeave', { -- Save session on exit pattern = { '*' }, callback = function() local _sessionFile = vim.fn.expand(sessionFile) vim.cmd('mksession! ' .. _sessionFile) end, }) -- Set up various plugins require('conform_config') require('autoclose_config') require('lsp_config') require('neogit_config') require('lualine_config') require('tree_config') require('ts_config') require('theme_config')