2024-01-18 22:04:54 +01:00
|
|
|
--[[
|
|
|
|
speedie's neovim configuration
|
|
|
|
-- https://git.speedie.site/speedie/speedie-nvim --
|
2024-01-19 18:24:07 +01:00
|
|
|
|
|
|
|
Dependencies:
|
|
|
|
|
|
|
|
- Neovim 0.9 or later
|
2024-01-18 22:04:54 +01:00
|
|
|
]]--
|
|
|
|
|
2024-01-19 13:50:47 +01:00
|
|
|
local cmd = vim.cmd -- Convenient alias
|
|
|
|
local opt = vim.opt -- Convenient alias
|
2024-01-19 16:53:11 +01:00
|
|
|
local highlight = vim.api.nvim_set_hl -- Convenient alias
|
2024-01-19 13:50:47 +01:00
|
|
|
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
|
2024-01-19 11:29:06 +01:00
|
|
|
|
2024-01-19 13:50:47 +01:00
|
|
|
Theme = 'doom-one' -- Theme to use
|
2024-01-19 21:27:15 +01:00
|
|
|
Languages = { -- Languages to support - Used to configure highlighting
|
|
|
|
'html', -- For HTML
|
|
|
|
'css', -- For CSS
|
|
|
|
'c', -- For C
|
|
|
|
'cpp', -- For C++
|
|
|
|
'php', -- For PHP
|
|
|
|
'lua', -- For Lua
|
|
|
|
'markdown', -- For Markdown
|
|
|
|
}
|
|
|
|
LanguageServers = { -- Language servers to use for LSP, run LspInstall <lang> to see available servers
|
|
|
|
'html', -- For HTML
|
|
|
|
'cssls', -- For CSS
|
|
|
|
'clangd', -- For C and C++
|
|
|
|
'phpactor', -- For PHP
|
|
|
|
'lua_ls', -- For Lua
|
|
|
|
'marksman', -- For Markdown
|
|
|
|
}
|
2024-01-19 13:50:47 +01:00
|
|
|
Plugins = { -- Plugins to use
|
2024-01-19 16:02:38 +01:00
|
|
|
{ 'nvim-telescope/telescope.nvim',
|
|
|
|
dependencies = {
|
|
|
|
'nvim-lua/plenary.nvim',
|
|
|
|
},
|
|
|
|
}, -- Fuzzy-finding
|
2024-01-19 13:50:47 +01:00
|
|
|
{ 'nvim-treesitter/nvim-treesitter' }, -- Better syntax highlighting
|
2024-01-19 11:29:06 +01:00
|
|
|
{ 'nvim-lualine/lualine.nvim' }, -- Status line
|
|
|
|
{ 'm4xshen/autoclose.nvim' }, -- Autoclose brackets
|
|
|
|
{ 'romgrk/doom-one.vim' }, -- Doom-One theme
|
|
|
|
{ 'stevearc/conform.nvim' }, -- Formatting
|
2024-01-19 16:02:38 +01:00
|
|
|
{ 'tpope/vim-fugitive' }, -- Git integration
|
2024-01-19 11:29:06 +01:00
|
|
|
{ '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',
|
2024-01-19 16:02:38 +01:00
|
|
|
},
|
|
|
|
}, -- Server auto-install
|
|
|
|
{ 'VonHeikemen/lsp-zero.nvim', branch = 'v3.x',
|
|
|
|
dependencies = {
|
|
|
|
'neovim/nvim-lspconfig',
|
|
|
|
'hrsh7th/cmp-nvim-lsp',
|
|
|
|
'hrsh7th/nvim-cmp',
|
|
|
|
'L3MON4D3/LuaSnip',
|
|
|
|
},
|
|
|
|
}, -- LSP
|
2024-01-19 13:50:47 +01:00
|
|
|
{ 'nvim-tree/nvim-tree.lua' }, -- File manager
|
2024-01-19 16:02:38 +01:00
|
|
|
{ 'lukas-reineke/indent-blankline.nvim',
|
|
|
|
dependencies = {
|
|
|
|
'nvim-treesitter/nvim-treesitter',
|
|
|
|
},
|
|
|
|
}, -- Indentation blankline
|
2024-01-19 18:24:07 +01:00
|
|
|
{ 'folke/trouble.nvim' }, -- Display warnings and errors neatly
|
|
|
|
{ 'uga-rosa/translate.nvim' }, -- Built in translate
|
2024-01-19 13:50:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
require('bootstrap') -- Set up Lazy and plugins.
|
2024-01-19 11:29:06 +01:00
|
|
|
|
2024-01-18 22:04:54 +01:00
|
|
|
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
|
2024-01-19 11:29:06 +01:00
|
|
|
opt.cursorline = true -- Show the cursor line
|
2024-01-18 22:04:54 +01:00
|
|
|
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
|
|
|
|
|
2024-01-19 16:53:11 +01:00
|
|
|
-- Fallback colors and undercurl, if supported
|
|
|
|
highlight(0, 'Normal', { fg='#ffffff', bg='#222222' })
|
|
|
|
highlight(0, 'EndOfBuffer', { fg='#ffffff', bg='#222222' })
|
|
|
|
highlight(0, 'Folded', { fg='#afeeee', bg='#333333' })
|
2024-01-19 18:42:01 +01:00
|
|
|
highlight(0, 'SpellBad', { undercurl=true, fg='#ff0000' })
|
|
|
|
highlight(0, 'SpellCap', { undercurl=true, fg='#ffff00' })
|
2024-01-18 22:04:54 +01:00
|
|
|
|
2024-01-19 11:29:06 +01:00
|
|
|
keymap('n', '<C-h>', '<C-w>h', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<C-j>', '<C-w>j', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<C-k>', '<C-w>k', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<C-l>', '<C-w>l', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<C-s>', ':split<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<C-w>', ':vsplit<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<C-q>', ':only<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<C-t>', ':term<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<C-f>', ':Telescope fd<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<F2>', ':set spell!<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<F3>', ':set spelllang=en_us<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<F4>', ':set spelllang=sv_se<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<F7>', ':silent execute "!setxkbmap us"<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<F8>', ':silent execute "!setxkbmap se"<cr>', { noremap = true, silent = true })
|
2024-01-19 13:50:47 +01:00
|
|
|
keymap('n', '<C-e>', ':NvimTreeToggle<cr>', { noremap = true, silent = true })
|
2024-01-19 18:24:07 +01:00
|
|
|
keymap('n', '<C-b>', ':TroubleToggle<cr>', { noremap = true, silent = true })
|
2024-01-19 13:50:47 +01:00
|
|
|
keymap('n', 'ca', 'z=', { noremap = true, silent = true })
|
2024-01-19 11:29:06 +01:00
|
|
|
keymap('n', 'H', ':vertical resize -10<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', 'J', ':resize -10<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', 'K', ':resize +10<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', 'L', ':vertical resize +10<cr>', { 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', '<C-A>', 'v/{<cr>%', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-,>', '<Cmd>BufferPrevious<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-.>', '<Cmd>BufferNext<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-<>', '<Cmd>BufferMovePrevious<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A->>', '<Cmd>BufferMoveNext<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-1>', '<Cmd>BufferGoto 1<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-2>', '<Cmd>BufferGoto 2<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-3>', '<Cmd>BufferGoto 3<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-4>', '<Cmd>BufferGoto 4<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-5>', '<Cmd>BufferGoto 5<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-6>', '<Cmd>BufferGoto 6<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-7>', '<Cmd>BufferGoto 7<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-8>', '<Cmd>BufferGoto 8<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-9>', '<Cmd>BufferGoto 9<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-0>', '<Cmd>BufferLast<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-p>', '<Cmd>BufferPin<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<A-c>', '<Cmd>BufferClose<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<Space>bb', '<Cmd>BufferOrderByBufferNumber<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<Space>bd', '<Cmd>BufferOrderByDirectory<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<Space>bl', '<Cmd>BufferOrderByLanguage<cr>', { noremap = true, silent = true })
|
|
|
|
keymap('n', '<Space>bw', '<Cmd>BufferOrderByWindowNumber<cr>', { noremap = true, silent = true })
|
2024-01-18 22:04:54 +01:00
|
|
|
|
2024-01-19 11:29:06 +01:00
|
|
|
|
2024-01-18 22:04:54 +01:00
|
|
|
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()
|
2024-01-19 13:50:47 +01:00
|
|
|
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
|
2024-01-18 22:04:54 +01:00
|
|
|
end,
|
|
|
|
})
|
|
|
|
autocmd('VimLeave', { -- Save session on exit
|
|
|
|
pattern = { '*' },
|
|
|
|
callback = function()
|
2024-01-19 13:50:47 +01:00
|
|
|
local _sessionFile = vim.fn.expand(sessionFile)
|
|
|
|
vim.cmd('mksession! ' .. _sessionFile)
|
2024-01-18 22:04:54 +01:00
|
|
|
end,
|
|
|
|
})
|
2024-01-19 11:29:06 +01:00
|
|
|
|
2024-01-19 13:50:47 +01:00
|
|
|
-- Set up various plugins
|
|
|
|
require('conform_config')
|
|
|
|
require('autoclose_config')
|
2024-01-19 11:29:06 +01:00
|
|
|
require('lsp_config')
|
|
|
|
require('lualine_config')
|
2024-01-19 16:02:38 +01:00
|
|
|
require('ibl_config')
|
2024-01-19 13:50:47 +01:00
|
|
|
require('tree_config')
|
|
|
|
require('ts_config')
|
|
|
|
require('theme_config')
|
2024-01-19 18:24:07 +01:00
|
|
|
require('trouble_config')
|
|
|
|
require('translate_config')
|