Add Neovim config

This commit is contained in:
Lexi / Zoe 2026-08-06 23:56:13 +02:00
parent 5a2f500fca
commit 29e053af75
Signed by: binaryDiv
GPG key ID: F8D4956E224DA232
6 changed files with 352 additions and 103 deletions

128
.config/nvim/init.lua Normal file
View file

@ -0,0 +1,128 @@
-- Config shortcuts
local o = vim.o
local opt = vim.opt
local keymap = vim.keymap
------------------
-- GENERAL OPTIONS
------------------
-- Line numbers
o.number = true
o.relativenumber = true
-- Highlight the cursor line
o.cursorline = true
-- Amount of screen lines that should be visible above/below the cursor
o.scrolloff = 8
-- Show tabs and trailing spaces
o.list = true
-- Wrap lines at word boundaries
o.linebreak = true
-- Case insensitive search (except when explicitly using uppercase letters)
o.ignorecase = true
o.smartcase = true
-- Indentation settings
o.smartindent = true
o.expandtab = true
o.shiftwidth = 4
o.softtabstop = -1
-- Don't auto-insert comment leader when entering insert mode with o/O
vim.api.nvim_create_autocmd('FileType', {
command = 'set formatoptions-=o',
})
-------------
-- FILE TYPES
-------------
vim.filetype.add {
extension = {
gitconfig = 'gitconfig',
},
}
-- HTML formatting
vim.g.html_indent_autotags = 'html,body'
vim.g.html_indent_inctags = 'p'
-----------
-- MAPPINGS
-----------
-- For keys that are safe to be mapped, see: https://vim.fandom.com/wiki/Unused_keys
-- Exit insert mode with jk
keymap.set('i', 'jk', '<Esc>')
-- Quick exit with Ctrl-q
keymap.set('n', '<C-q>', ':q<CR>')
-- Quick save all open buffers with Ctrl-s
keymap.set('n', '<C-s>', ':wall<CR>')
keymap.set('i', '<C-s>', '<C-o>:wall<CR>')
-- Simple copy and paste to/from system clipboard with Ctrl-c in visual mode
-- and Ctrl-v in insert mode
keymap.set('v', '<C-c>', '"+y')
keymap.set('i', '<C-v>', '<C-\\><C-o>"+P')
-- Navigate between windows with Alt and hjkl
keymap.set('n', '<A-h>', '<C-w>h')
keymap.set('n', '<A-j>', '<C-w>j')
keymap.set('n', '<A-k>', '<C-w>k')
keymap.set('n', '<A-l>', '<C-w>l')
-- Resize windows with Alt and arrow keys
keymap.set('n', '<A-Up>', '<C-w>2-')
keymap.set('n', '<A-Down>', '<C-w>2+')
keymap.set('n', '<A-Left>', '<C-w>4<')
keymap.set('n', '<A-Right>', '<C-w>4>')
-- Shortcuts for jumping to start of line (H) or end of line (L)
keymap.set({'n', 'x'}, 'H', '^')
keymap.set({'n', 'x'}, 'L', '$')
-- Use comma (,) as a "modifier prefix" for alternative functions of regular
-- commands (e.g. yank to system clipboard) or for random shortcuts.
-- TODO: Comma or semicolon or single quote?
keymap.set({'n', 'x'}, ',', '<Nop>')
-- Prefix yank/delete/change/paste commands with "," to use system clipboard
keymap.set({'n', 'x'}, ',y', '"+y')
keymap.set({'n', 'x'}, ',Y', '"+y$')
keymap.set({'n', 'x'}, ',d', '"+d')
keymap.set({'n', 'x'}, ',D', '"+D')
keymap.set({'n', 'x'}, ',c', '"+c')
keymap.set({'n', 'x'}, ',C', '"+C')
keymap.set({'n', 'x'}, ',p', '"+p')
keymap.set({'n', 'x'}, ',P', '"+P')
-- Insert empty line(s) below or above current line without moving the cursor
keymap.set('n', ',o', function()
local line = vim.api.nvim_win_get_cursor(0)[1]
local repeated = vim.fn['repeat']({''}, vim.v.count1)
vim.api.nvim_buf_set_lines(0, line, line, true, repeated)
end)
keymap.set('n', ',O', function()
local line = vim.api.nvim_win_get_cursor(0)[1] - 1
local repeated = vim.fn['repeat']({''}, vim.v.count1)
vim.api.nvim_buf_set_lines(0, line, line, true, repeated)
end)
----------
-- PLUGINS
----------
require('init.theme')
require('init.plugins')

View file

@ -0,0 +1,103 @@
-- Config shortcuts
local keymap = vim.keymap
local vr = vim.version.range
------------------
-- INSTALL PLUGINS
------------------
vim.pack.add {
-- Better code completion
{ src = 'https://github.com/saghen/blink.cmp', version = vr '1.*' },
-- Better marks
'https://github.com/chentoast/marks.nvim',
-- Surround selections with quotes etc.
{ src = 'https://github.com/kylechui/nvim-surround', version = vr '4.*' },
-- Substitute and exchange operator
'https://github.com/gbprod/substitute.nvim',
-- Highlight todo comments
'https://github.com/folke/todo-comments.nvim',
-- Highlight colors (hex codes etc.)
'https://github.com/brenoprata10/nvim-highlight-colors',
}
---------------------
-- INITIALIZE PLUGINS
---------------------
-- Better code completion
require('blink.cmp').setup {
keymap = {
preset = 'super-tab',
},
cmdline = {
keymap = {
preset = 'inherit',
['<Tab>'] = {
'show',
'select_and_accept',
'fallback',
},
},
completion = {
menu = { auto_show = true },
},
},
}
-- Better marks
require('marks').setup {
-- Show builtin marks in gutter: last jump position (`), last change (.),
-- last selection in visual mode (</>).
-- TODO: See which of those are really helpful and remove the others.
builtin_marks = { '`', '.', '<', '>' },
}
-- Surround selections with quotes etc.
require('nvim-surround').setup {}
-- Substitute and exchange operator
local substitute = require('substitute')
substitute.setup {}
-- ... Use "s" key for substitute (by default "s" is equivalent to "cl")
keymap.set('n', 's', substitute.operator)
keymap.set('n', 'ss', substitute.line)
keymap.set('n', 'S', substitute.eol)
keymap.set('x', 's', substitute.visual)
-- ... Prefix with "," to use system clipboard (remap to use the substitute mappings above)
keymap.set({'n', 'x'}, ',s', '"+s', { remap = true })
keymap.set({'n', 'x'}, ',S', '"+S', { remap = true })
-- Highlight todo comments
require('todo-comments').setup {
-- Disable gutter icons
signs = false,
-- Customize highlighting
highlight = {
before = '',
-- By default ("wide"), the surrounding space and colon are highlighted too,
-- which makes the colon invisible
keyword = 'bg',
after = 'fg',
-- Highlight keywords always, not just when followed by a colon (the default)
pattern = '<(KEYWORDS)>',
},
}
-- Highlight colors (hex codes etc.)
require('nvim-highlight-colors').setup {}

View file

@ -0,0 +1,36 @@
-- Install theme plugins
vim.pack.add {
{ src = 'https://github.com/rebelot/kanagawa.nvim', name = 'kanagawa' },
-- { src = 'https://github.com/rose-pine/neovim', name = 'rose-pine' },
-- { src = 'https://github.com/nickkadutskyi/jb.nvim', name = 'jetbrains-theme' },
}
-- Initialize and customize themes
require('kanagawa').setup {
-- Compile colorscheme for fast startup times.
-- Note: When changing the theme, make sure to run `:KanagawaCompile` afterwards!
compile = true,
-- Dim inactive windows
dimInactive = true,
-- Customize colors
colors = {
theme = {
all = {
ui = {
-- Disable background of gutter (line numbers etc.)
bg_gutter = 'none',
},
},
},
},
}
--require('rose-pine').setup {}
--require('jb').setup {}
-- Enable theme
vim.cmd.colorscheme('kanagawa')
--vim.cmd.colorscheme('rose-pine')
--vim.cmd.colorscheme('jb')

View file

@ -0,0 +1,34 @@
{
"plugins": {
"blink.cmp": {
"rev": "78336bc89ee5365633bcf754d93df01678b5c08f",
"src": "https://github.com/saghen/blink.cmp",
"version": "1.0.0 - 2.0.0"
},
"kanagawa": {
"rev": "bb85e4bfc8d89b0e62c8fa53ccdd13d12e2f77b3",
"src": "https://github.com/rebelot/kanagawa.nvim"
},
"marks.nvim": {
"rev": "f353e8c08c50f39e99a9ed474172df7eddd89b72",
"src": "https://github.com/chentoast/marks.nvim"
},
"nvim-highlight-colors": {
"rev": "e4c7af0211866162d999ce0bdd6a029302e19139",
"src": "https://github.com/brenoprata10/nvim-highlight-colors"
},
"nvim-surround": {
"rev": "2e93e154de9ff326def6480a4358bfc149d5da2c",
"src": "https://github.com/kylechui/nvim-surround",
"version": "4.0.0 - 5.0.0"
},
"substitute.nvim": {
"rev": "0d2077398552f069abccbd964a26dd7cd26882cd",
"src": "https://github.com/gbprod/substitute.nvim"
},
"todo-comments.nvim": {
"rev": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668",
"src": "https://github.com/folke/todo-comments.nvim"
}
}
}