1

Current state of nixvim config

This commit is contained in:
2024-05-31 02:57:58 +02:00
parent 31cda88034
commit bc3d125f97

View File

@ -14,12 +14,14 @@ in {
config = mkIf cfg.enable {
# TODO: Configure by option
# home.sessionVariables = {
# EDITOR = "nvim";
# VISUAL = "nvim";
# };
home.sessionVariables = {
EDITOR = "nvim";
VISUAL = "nvim";
};
home.packages = with pkgs; [
(pkgs.ripgrep.override {withPCRE2 = true;})
# Linters
vale
@ -34,39 +36,99 @@ in {
defaultEditor = true;
enableMan = true;
colorschemes.catppuccin.enable = true;
viAlias = cfg.alias;
vimAlias = cfg.alias;
globals = {
mapleader = " ";
mallocalleader = " ";
};
opts = {
ruler = true; # Show cursor position in status line
number = true;
relativenumber = false;
showmode = false; # Status line already shows this
backspace = ["indent" "eol" "start"];
undofile = true;
undodir = "~/.vim/undo";
encoding = "utf-8";
termguicolors = true; # Required by multiple plugins
hidden = true; # Don't unload buffers immediately
mouse = "a";
completeopt = ["menuone" "noselect" "noinsert"];
timeoutlen = 100;
pumheight = 0;
formatexpr = "v:lua.require'conform'.formatexpr()";
laststatus = 3;
# TODO: Move neovide config to this module
# printfont = "JetBrainsMono Nerd Font Mono:h10";
# guifont = "JetBrainsMono Nerd Font Mono:h12";
# Cursor
ruler = true; # Show cursor position in status line
number = true;
relativenumber = true;
signcolumn = "yes";
cursorline = true;
scrolloff = 10;
# Folding
foldcolumn = "0";
foldlevel = 99;
foldlevelstart = 99;
foldenable = true;
# Files
encoding = "utf-8";
fileencoding = "utf-8";
swapfile = false;
backup = false;
undofile = true;
undodir = "/home/christoph/.vim/undo";
# autochdir = true;
# Search
incsearch = true; # Already highlight results while typing
hlsearch = true;
ignorecase = true;
laststatus = 2;
hidden = true; # Don't unload buffers immediately
smartcase = true;
grepprg = "rg --vimgrep";
grepformat = "%f:%l:%c:%m";
# Indentation
autoindent = true;
expandtab = true;
smartindent = true;
autoindent = false; # Might mess up comment indentation
smartindent = false; # Might mess up comment indentation
cindent = true;
cinkeys = "0{,0},0),0],:,!^F,o,O,e"; # Fix comment (#) indentation and intellitab (somehow)
smarttab = true;
expandtab = true;
shiftwidth = 4;
tabstop = 4;
softtabstop = 4;
termguicolors = true; # For bufferline
splitbelow = true;
splitright = true;
};
# TODO: Use conform-nvim.formatOnSave, also make this toggleable and add a "Format" command
# TODO: Half of the neovide config doesn't work
extraConfigLua = ''
local opt = vim.opt
local g = vim.g
local o = vim.o
-- Neovide
if g.neovide then
-- Neovide options
g.neovide_fullscreen = false
g.neovide_hide_mouse_when_typing = false
g.neovide_refresh_rate = 144
-- g.neovide_cursor_vfx_mode = "ripple"
g.neovide_cursor_animate_command_line = true
g.neovide_cursor_animate_in_insert_mode = true
g.neovide_cursor_vfx_particle_lifetime = 5.0
g.neovide_cursor_vfx_particle_density = 14.0
g.neovide_cursor_vfx_particle_speed = 12.0
-- g.neovide_transparency = 0.8
g.neovide_theme = 'light'
-- Neovide Fonts
o.guifont = "JetBrainsMono Nerd Font:h13:Medium:i"
end
'';
extraLuaPackages = with pkgs.lua51Packages; [
# lua-curl # For rest
# xml2lua # For rest
@ -79,28 +141,349 @@ in {
# nvim-nio # For rest
];
plugins = {
# TODO: Fix the terribly ugly right side with the line numbers etc.
# Status line, alternative to lualine
airline = {
enable = false;
keymaps = [
# {
# action = "<cmd>make<CR>";
# key = "<C-m>";
# options = {
# silent = true;
# };
# }
settings = {
powerline_fonts = true;
theme = "catppuccin";
};
};
# Disable arrow keys
# {
# mode = ["n" "i"];
# key = "<Up>";
# action = "<Nop>";
# options = {
# silent = true;
# noremap = true;
# desc = "Disable Up arrow key";
# };
# }
# {
# mode = ["n" "i"];
# key = "<Down>";
# action = "<Nop>";
# options = {
# silent = true;
# noremap = true;
# desc = "Disable Down arrow key";
# };
# }
# {
# mode = ["n" "i"];
# key = "<Right>";
# action = "<Nop>";
# options = {
# silent = true;
# noremap = true;
# desc = "Disable Right arrow key";
# };
# }
# {
# mode = ["n" "i"];
# key = "<Left>";
# action = "<Nop>";
# options = {
# silent = true;
# noremap = true;
# desc = "Disable Left arrow key";
# };
# }
# No Leader
{
mode = "v";
key = "<";
action = "<gv";
options.desc = "Outdent";
}
{
mode = "v";
key = ">";
action = ">gv";
options.desc = "Indent";
}
{
mode = "n";
key = "<C-d>";
action = "<C-d>zz";
options.desc = "Jump down";
}
{
mode = "n";
key = "<C-u>";
action = "<C-u>zz";
options.desc = "Jump up";
}
{
mode = "n";
key = "n";
action = "nzzzv";
options.desc = "Next match";
}
{
mode = "n";
key = "N";
action = "Nzzzv";
options.desc = "Previous match";
}
# { # Already included in intellitab config
# mode = "i";
# key = "<Tab>";
# action = "<cmd>lua require('intellitab').indent()<CR>";
# options.desc = "Indent";
# }
{
mode = "i";
key = "<C-BS>";
action = "<C-w>";
options.desc = "Delete previous word";
}
{
mode = "i";
key = "<M-BS>";
action = "<C-w>";
options.desc = "Delete previous word";
}
# General <leader>
{
mode = "n";
key = "<leader>f";
action = "<cmd>Telescope find_files<CR>";
options.desc = "Find file";
}
{
mode = "n";
key = "<leader>u";
action = "<cmd>Telescope undo<CR>";
options.desc = "View undo history";
}
{
mode = "n";
key = "<leader>/";
action = "<cmd>Telescope current_buffer_fuzzy_find<CR>";
options.desc = "Find in current buffer";
}
{
mode = "n";
key = "<leader>s";
action = "<cmd>Telescope live_grep<CR>";
options.desc = "Find in working directory";
}
{
mode = "n";
key = "<leader>d";
action = "<cmd>Telescope diagnostics<CR>";
options.desc = "View diagnostics";
}
{
mode = "n";
key = "<leader>?";
action = "<cmd>Telescope keymaps<CR>";
options.desc = "View keymaps";
}
{
mode = "n";
key = "<leader>:";
action = "<cmd>Telescope commands<CR>";
options.desc = "Execute command";
}
# Buffers <leader>b
{
mode = "n";
key = "<leader>b";
action = "+buffers";
}
{
mode = "n";
key = "<leader>bb";
action = "<cmd>Telescope buffers<CR>";
options.desc = "View open buffers";
}
{
mode = "n";
key = "<leader>bn";
action = "<cmd>bnext<CR>";
options.desc = "Goto next buffer";
}
{
mode = "n";
key = "<leader>bp";
action = "<cmd>bprevious<CR>";
options.desc = "Goto previous buffer";
}
{
mode = "n";
key = "<leader>bq";
action = "<cmd>Bdelete<CR>";
options.desc = "Close current buffer";
}
# Windows <leader>w
{
mode = "n";
key = "<leader>w";
action = "+windows";
}
{
mode = "n";
key = "<leader>ws";
action = "<C-w>v";
options.desc = "Split window vertically";
}
{
mode = "n";
key = "<leader>wq";
action = "<C-w>c";
options.desc = "Close current window";
}
# {
# mode = "n";
# key = "<leader>wh";
# action = "<C-W>s";
# options.desc = "Split window horizontally";
# }
{
mode = "n";
key = "<leader>wh";
action = "<C-w>h";
options.desc = "Goto left window";
}
{
mode = "n";
key = "<leader>wl";
action = "<C-w>l";
options.desc = "Goto right window";
}
{
mode = "n";
key = "<leader>wj";
action = "<C-w>j";
options.desc = "Goto bottom window";
}
{
mode = "n";
key = "<leader>wk";
action = "<C-w>k";
options.desc = "Goto top window";
}
{
mode = "n";
key = "<leader>ww";
action = "<C-w>p";
options.desc = "Goto other window";
}
# Toggles <leader>t
{
mode = "n";
key = "<leader>t";
action = "+toggle";
}
{
mode = "n";
key = "<leader>tt";
action = "<cmd>Neotree toggle<CR>";
options.desc = "Toggle NeoTree";
}
# {
# mode = "n";
# key = "<leader>tg";
# action = "<cmd>LazyGit<CR>";
# }
# {
# mode = "n";
# key = "<leader>tp";
# action = "<cmd>TroubleToggle<CR>";
# }
# Git <leader>g
{
mode = "n";
key = "<leader>g";
action = "+git";
}
{
mode = "n";
key = "<leader>gg";
action = "<cmd>LazyGit<CR>";
options.desc = "Toggle LazyGit";
}
{
mode = "n";
key = "<leader>gm";
action = "<cmd>GitMessenger<CR>";
options.desc = "Toggle GitMessenger";
}
# {
# mode = "n";
# key = "<leader>gs";
# action = "<cmd>Git status<CR>";
# }
{
mode = "n";
key = "<leader>gs";
action = "<cmd>Telescope git_status<CR>";
options.desc = "View Git status";
}
{
mode = "n";
key = "<leader>gc";
action = "<cmd>Telescope git_commits<CR>";
options.desc = "View Git log";
}
{
mode = "n";
key = "<leader>gb";
action = "<cmd>Telescope git_branches<CR>";
options.desc = "View Git branches";
}
{
mode = "n";
key = "<leader>gf";
action = "<cmd>Telescope git_bcommits<CR>";
options.desc = "View Git log for current file";
}
# Code <leader>c
{
mode = "n";
key = "<leader>c";
action = "+code";
}
# TODO: Autoformat https://github.com/redyf/Neve/blob/main/config/lsp/conform.nix
{
mode = "n";
key = "<leader>cf";
action = "<cmd>lua require('conform').format()<CR>";
options.desc = "Format current buffer";
}
];
plugins = {
# Status line, alternative to lualine
# airline = {
# enable = false;
#
# settings = {
# powerline_fonts = true;
# theme = "catppuccin";
# };
# };
# Auto-close parenthesis, alternative to nvim-autopairs
autoclose = {
enable = true;
};
# autoclose = {
# enable = true;
# };
# TODO: Remove once I have telescope
# Alternative to bufferline
barbar = {
enable = true;
};
# barbar = {
# enable = true;
# };
# Escape insert mode by pressing jk
better-escape = {
@ -120,38 +503,74 @@ in {
# };
# Directory tree
chadtree = {
enable = true;
};
# chadtree = {
# enable = true;
# };
# TODO: Requires LSP
clangd-extensions = {
enable = false;
};
# clangd-extensions = {
# enable = false;
# };
# Completion engine
cmp = {
enable = true;
autoEnableSources = false;
settings = {
sources = [
{ name = "async_path"; }
{ name = "emoji"; }
{ name = "nvim_lsp"; }
{ name = "nvim_lsp_signature_help"; }
{name = "async_path";}
{name = "emoji";}
{name = "nvim_lsp";}
{name = "nvim_lsp_signature_help";}
{name = "luasnip";}
# {name = "cmdline";}
];
snippet.expand = ''
function(args)
require('luasnip').lsp_expand(args.body)
end
'';
window = {
completion.border = "rounded";
completion.winhighlight = "Normal:Normal,FloatBorder:FloatBorder,CursorLine:Visual,Search:None";
documentation.border = "rounded";
};
mapping = {
__raw = ''
cmp.mapping.preset.insert({
['<Down>'] = cmp.mapping.select_next_item(),
['<Up>'] = cmp.mapping.select_prev_item(),
['<C-e>'] = cmp.mapping.abort(),
['<Esc>'] = cmp.mapping.abort(),
['<C-Up>'] = cmp.mapping.scroll_docs(-4),
['<C-Down>'] = cmp.mapping.scroll_docs(4),
['<CR>'] = cmp.mapping.confirm({ select = true }),
})
'';
};
};
};
# TODO: Add snippet engine completion
cmp-async-path.enable = true;
cmp-emoji.enable = true;
cmp-nvim-lsp.enable = true;
cmp-nvim-lsp-signature-help.enable = true;
cmp_luasnip.enable = true;
# cmp-cmdline.enable = true;
# Comment/Uncomment line/selection etc.
comment = {
enable = true;
settings = {
mappings.extra = false;
opleader.line = "<C-c>";
toggler.line = "<C-c>";
};
};
# TODO: Setup formatters
@ -160,50 +579,55 @@ in {
enable = true;
formattersByFt = {
nix = [ "alejandra" ];
c = ["clang-format"];
h = ["clang-format"];
cpp = ["clang-format"];
hpp = ["clang-format"];
css = [["prettierd" "prettier"]];
html = [["prettierd" "prettier"]];
java = ["google-java-format"];
javascript = [["prettierd" "prettier"]];
markdown = [["prettierd" "prettier"]];
nix = ["alejandra"];
python = ["black"];
rust = ["rustfmt"];
};
# TODO: formatOnSave = " [???] ";
};
# TODO: Doesn't work, need LSP/treesitter?
# Highlight words under cursor, alternative to illuminate
cursorline = {
enable = false;
};
# TODO: Figure out how debugging from nvim works...
# Debug-Adapter-Protocol
dap = {
enable = false;
};
# dap = {
# enable = false;
# };
# TODO: Figure out how diff-mode works...
diffview = {
enable = false;
};
# diffview = {
# enable = false;
# };
# TODO: Compare after telescope etc. are enabled
# Changes nvim UI components, alternative to Noice
dressing = {
enable = false;
};
# dressing = {
# enable = false;
# };
# Notifications + LSP progress, alternative to Noice
fidget = {
enable = false;
};
# fidget = {
# enable = true;
# };
# TODO: Doesn't work
# Search labels
flash = {
enable = true;
};
# flash = {
# enable = true;
# };
# Git client
fugitive = {
enable = true;
};
# fugitive = {
# enable = true;
# };
# Alternative to gitsigns
# gitgutter = {
@ -227,22 +651,21 @@ in {
};
# Vim habit trainer, blocks keys
hardtime = {
enable = false;
};
# hardtime = {
# enable = false;
# };
# TODO: Maybe, don't know yet (also, telescope)
# Mark files and jump to them
harpoon = {
enable = false;
};
# harpoon = {
# enable = false;
# };
# Markdown etc. heading highlights
headlines = {
enable = true;
};
# TODO:
# Alternative to cursorline
illuminate = {
enable = true;
@ -253,7 +676,6 @@ in {
enable = true;
};
# TODO: Shortcut compatible with cmp
# Indent to current level on empty line
intellitab = {
enable = true;
@ -284,26 +706,35 @@ in {
};
};
# TODO: Maybe too much?
# Render diagnostics as virtual line overlay
lsp-lines = {
enable = true;
};
# lsp-lines = {
# enable = true;
# };
# Statusline, alternative to airline
lualine = {
enable = true;
globalstatus = true;
sectionSeparators = { left = ""; right = ""; };
componentSeparators = { left = ""; right = ""; };
sectionSeparators = {
left = "";
right = "";
};
componentSeparators = {
left = "";
right = "";
};
};
luasnip = {
enable = true;
};
# TODO: When I start actually using marks
# Show marks in the gutter
marks = {
enable = false;
};
# marks = {
# enable = false;
# };
# Structural overview
navbuddy = {
@ -313,28 +744,81 @@ in {
};
# Generate doc comments
neogen = {
enable = true;
};
# neogen = {
# enable = true;
# };
# TODO: When I need this
# Interact with test frameworks
neotest = {
enable = false;
# neotest = {
# enable = false;
# };
neo-tree = {
enable = true;
enableDiagnostics = true;
enableGitStatus = true;
enableModifiedMarkers = true;
enableRefreshOnWrite = true;
closeIfLastWindow = true;
popupBorderStyle = "rounded";
buffers = {
bindToCwd = false;
followCurrentFile = {
enabled = true;
};
};
window = {
width = 40;
height = 15;
autoExpandWidth = false;
mappings = {
"<space>" = "none";
};
};
};
# NeoVim UI refresh, alternative to fidget and dressing
# NeoVim UI refresh, alternative to fidget, dressing and notify
noice = {
enable = true;
lsp.override = {
"vim.lsp.util.convert_input_to_markdown_lines" = true;
"vim.lsp.util.stylize_markdown" = true;
"cmp.entry.get_documentation" = true;
};
notify = {
enabled = true;
};
popupmenu = {
enabled = true;
backend = "cmp";
};
routes = [
{
filter = {
event = "msg_show";
kind = "search_count";
};
opts = { skip = true; };
}
];
};
# Alternative to noice.notify
notify = {
enable = true;
};
# Alternative to autoclose
nvim-autopairs = {
enable = false;
enable = true;
};
# Colorize color hex codes etc.
@ -345,13 +829,13 @@ in {
# TODO: Folds the entire code at startup???
# Code folding
nvim-ufo = {
enable = false;
enable = true;
};
# File system explorer that is editable like a normal buffer
oil = {
enable = true;
};
# oil = {
# enable = true;
# };
# Colorize paranthesis
rainbow-delimiters = {
@ -360,14 +844,14 @@ in {
# TODO: Lua deps not found
# REST/HTTP client
rest = {
enable = false;
};
# rest = {
# enable = false;
# };
# TODO:
rustaceanvim = {
enable = false;
};
# rustaceanvim = {
# enable = false;
# };
# Work with pairs of delimiters
sandwich = {
@ -381,9 +865,9 @@ in {
# TODO: Doesn't show up
# Left-hand side status column with folding markers
statuscol = {
enable = false;
};
# statuscol = {
# enable = false;
# };
# Select something
telescope = {
@ -396,13 +880,16 @@ in {
};
};
# TODO: Folds at startup
toggleterm = {
enable = true;
};
treesitter = {
enable = true;
ensureInstalled = "all";
folding = false;
indent = true;
folding = true; # TODO: Folds at startup
indent = true; # Required by intellitab
incrementalSelection = {
enable = true;
@ -415,9 +902,9 @@ in {
};
# Window listing detected linting/lsp problems
trouble = {
enable = true;
};
# trouble = {
# enable = true;
# };
# Don't mess up splits when closing buffers
vim-bbye = {
@ -426,11 +913,11 @@ in {
# TODO: Setup
# LaTeX
vimtex = {
enable = true;
texlivePackage = null; # Don't auto-install
};
# vimtex = {
# enable = true;
#
# texlivePackage = null; # Don't auto-install
# };
# Display keybindings help
which-key = {
@ -443,19 +930,6 @@ in {
enable = true;
};
};
# TODO: Use conform-nvim.formatOnSave, also make this toggleable and add a "Format" command
extraConfigLua = ''
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = "*",
callback = function(args)
require("conform").format({ bufnr = args.buf })
end,
})
'';
viAlias = cfg.alias;
vimAlias = cfg.alias;
};
};
}