nix/home/modules/neovim.nix
2025-09-15 02:51:04 -06:00

109 lines
3.3 KiB
Nix

{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.local.programs.neovim;
in {
options.local.programs.neovim = {
enable = mkEnableOption "Neovim settings";
};
config = mkIf cfg.enable {
programs.neovim = {
enable = true;
viAlias = true;
vimAlias = true;
defaultEditor = true;
extraConfig = ''
set nobackup
set showmatch " show matching
set hlsearch " highlight search
set incsearch " incremental search
set tabstop=4 " number of columns occupied by a tab
set softtabstop=4 " see multiple spaces as tabstops so <BS> does the right thing
set shiftwidth=4 " width for autoindents
set autoindent " indent a new line the same amount as the line just typed
set number " add line numbers
set wildmode=longest,list " get bash-like tab completions
set cc=80 " set an 80 column border for good coding style
filetype plugin indent on " allow auto-indenting depending on file type
syntax on " syntax highlighting
set mouse=a " enable mouse click
set clipboard=unnamedplus " using system clipboard
filetype plugin on
set cursorline " highlight current cursorline
set ttyfast " Speed up scrolling in Vim
set noswapfile " disable creating swap file
'';
plugins = with pkgs.vimPlugins; [
barbar-nvim
nvim-web-devicons
vim-nix
vim-visual-multi
{
plugin = nvim-tree-lua;
type = "lua";
config = ''
require("nvim-tree").setup({
renderer = {
icons = {
show = {
file = true,
folder = true,
folder_arrow = true,
git = true,
},
glyphs = {
git = {
unstaged = "",
staged = "",
unmerged = "",
renamed = "",
untracked = "",
deleted = "",
ignored = "",
},
},
},
},
view = {
width = 30,
side = 'left',
},
sync_root_with_cwd = true, --fix to open cwd with tree
respect_buf_cwd = true,
update_cwd = true,
update_focused_file = {
enable = true,
update_cwd = true,
update_root = true,
},
})
vim.g.nvim_tree_respect_buf_cwd = 1
-- use g? for bindings help while in tree
'';
}
{
plugin = gruvbox-nvim;
type = "lua";
config = ''
require("gruvbox").setup({
contrast = "high",
})
vim.o.background = "dark"
vim.cmd([[colorscheme gruvbox]])
'';
}
];
};
home.sessionVariables = {
"EDITOR" = mkForce "neovim";
};
};
}