feat: neovim configuration with nvf

This commit is contained in:
Jay Looney 2025-11-25 11:53:26 -06:00
parent b8cd94925e
commit ad89d183fe

View file

@ -1,4 +1,10 @@
{ username, pkgs, lib, ... }: {
username,
pkgs,
lib,
inputs,
...
}:
{ {
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
# The following line is needed if I start using hyprland Home Manager Module # The following line is needed if I start using hyprland Home Manager Module
@ -10,8 +16,8 @@
sessionVariables = { sessionVariables = {
EDITOR = "hx"; EDITOR = "hx";
}; };
homeDirectory = homeDirectory =
if pkgs.stdenv.isLinux then if pkgs.stdenv.isLinux then
lib.mkDefault "/home/${username}" lib.mkDefault "/home/${username}"
else if pkgs.stdenv.isDarwin then else if pkgs.stdenv.isDarwin then
@ -19,24 +25,26 @@
else else
abort "Unsupported OS"; abort "Unsupported OS";
}; };
home.packages = with pkgs; [ ] home.packages =
# linux only with pkgs;
# TODO: Add a test for linux + desktop environment [ ]
++ (lib.optionals pkgs.stdenv.isLinux [ # linux only
cfspeedtest # TODO: Add a test for linux + desktop environment
helix ++ (lib.optionals pkgs.stdenv.isLinux [
nil cfspeedtest
]) helix
# linux + desktop manager nil
#++ (lib.optionals (pkgs.stdenv.isLinux && osConfig.services.desktopManager.enabled != null) ])
#[ # linux + desktop manager
# firefox #++ (lib.optionals (pkgs.stdenv.isLinux && osConfig.services.desktopManager.enabled != null)
#]) #[
# darwin only # firefox
++ (lib.optionals pkgs.stdenv.isDarwin [ #])
cfspeedtest # darwin only
ripgrep ++ (lib.optionals pkgs.stdenv.isDarwin [
]); cfspeedtest
ripgrep
]);
programs = { programs = {
fish.enable = true; fish.enable = true;
@ -100,7 +108,7 @@
Cryptomining = true; Cryptomining = true;
Fingerprinting = true; Fingerprinting = true;
}; };
Homepage.StartPage = "previous-session"; Homepage.StartPage = "previous-session";
FirefoxHome = { FirefoxHome = {
Search = true; Search = true;
@ -133,12 +141,12 @@
id = 0; id = 0;
name = "default"; name = "default";
isDefault = true; isDefault = true;
settings = { settings = {
"widget.disable-workspace-management" = true; "widget.disable-workspace-management" = true;
}; };
search = { search = {
force = true; force = true;
default = "ddg"; # DuckDuckGo default = "ddg"; # DuckDuckGo
}; };
}; };
}; };
@ -147,6 +155,7 @@
# TODO: figure out how to get config.programs.<name>.enable style # TODO: figure out how to get config.programs.<name>.enable style
# internal references inside this file. # internal references inside this file.
# There's some quirks with how this is used in lib/default.nix # There's some quirks with how this is used in lib/default.nix
# TODO: Use mergiraf for conflict resolution in jj too.
programs.jujutsu = { programs.jujutsu = {
enable = true; enable = true;
#enableFishIntegration = true; #enableFishIntegration = true;
@ -158,6 +167,8 @@
}; };
}; };
# TODO: Configure Mergiraf
# https://mergiraf.org/introduction.html
programs.git = { programs.git = {
enable = true; enable = true;
settings = { settings = {
@ -191,6 +202,7 @@
init.defaultBranch = "main"; init.defaultBranch = "main";
log.decorate = "full"; log.decorate = "full";
log.date = "iso"; log.date = "iso";
# NOTE: Initially diff3 was for me, now it's for me and mergiraf automation.
merge.conflictStyle = "diff3"; merge.conflictStyle = "diff3";
}; };
# Cribbed from: https://github.com/gitattributes/gitattributes # Cribbed from: https://github.com/gitattributes/gitattributes
@ -304,9 +316,212 @@
''; '';
}; };
# TODO: Implement support for at least
# Nix, Python, Rust, Golang
# TODO: Sort out why TF, `.nix` files tabs are cooked in neovim rn.
# It corrects things on document save, but this line for example started with an 8-long tabstop
programs.nvf = {
enable = true;
# When using the Home-Manager Module for nvf, the settings go into the following attribute set.
# https://notashelf.github.io/nvf/index.xhtml#sec-hm-flakes
settings.vim = {
viAlias = true;
vimAlias = true;
# TODO: For some reason spellcheck is having a very difficult time getting
# a wordlist.
#spellcheck = {
# enable = true;
# programmingWordlist.enable = true;
#};
lsp = {
enable = true;
formatOnSave = true;
lspkind.enable = false;
lightbulb.enable = true;
lspsaga.enable = false;
trouble.enable = true;
lspSignature.enable = false;
otter-nvim.enable = true;
nvim-docs-view.enable = true;
};
languages = {
enableDAP = true;
enableExtraDiagnostics = true;
enableFormat = true;
enableTreesitter = true;
nix = {
enable = true;
lsp.enable = true;
lsp.server = "nixd";
extraDiagnostics.enable = true;
format.enable = true;
format.type = "nixfmt";
treesitter.enable = true;
};
markdown.enable = true;
typst.enable = true;
assembly.enable = true;
bash.enable = true;
clang.enable = true;
python.enable = true;
rust = {
enable = true;
# TODO: null_ls is now deprecated.
# https://github.com/NotAShelf/nvf/issues/1175
# https://github.com/NotAShelf/nvf/blob/main/.github/CONTRIBUTING.md
crates.enable = true;
};
go.enable = true;
zig.enable = true;
ts.enable = true;
html.enable = true;
css.enable = true;
sql.enable = true;
};
visuals = {
nvim-scrollbar.enable = true; # Configurable Visual Scrollbar (Can pair with Cursor, ALE, Diagnostics, Gitsigns, and hlslens)
nvim-web-devicons.enable = true; # Nerdfont Icons for use by other plugins
nvim-cursorline.enable = true; # Highlight Words & Lines on the cursor
cinnamon-nvim.enable = true; # Smooth Scrolling for any movement command.
fidget-nvim.enable = true; # UI for Notifications & LSP Progress Messages
highlight-undo.enable = true; # Highlight changed text after any non-insert actions
indent-blankline.enable = true; # Indentation Guides
};
statusline = {
lualine = {
# Fancy Status Line
enable = true;
theme = "catppuccin";
};
};
theme = {
enable = true;
name = "catppuccin";
style = "mocha";
transparent = false;
};
autopairs.nvim-autopairs.enable = true; # Pair up ", {, (, etc.
# blink-cmp is a compiled rust binary while nvim-cmp is a pure lua plugin...
autocomplete.blink-cmp.enable = true;
# Code Snippets Engine /w support for Lua, VSCode, and SnipMate snippets.
snippets.luasnip.enable = true;
filetree.neo-tree.enable = true; # Filesystem tree sidebar...
tabline.nvimBufferline.enable = true; # Shows buffers as tabs at the top.
treesitter.context.enable = true;
binds = {
whichKey.enable = true; # Shows your available keybindings in a popup
cheatsheet.enable = true; # Searchable in-editor cheatsheet that uses Telescope
};
telescope.enable = true; # Fuzzy Finder, central to many other plugins.
git = {
enable = true;
gitsigns.enable = true; # Git Info in Buffers + Gutters
gitsigns.codeActions.enable = false;
neogit.enable = true; # Interactive Git
};
# TODO: Consider switching to `minimap-nvim` for rust-based minimap.
# codewindow may be tightly integrated with treesitter though...
minimap.codewindow.enable = true;
dashboard.alpha.enable = true; # Greeter
notify.nvim-notify.enable = true; # Fancy Configurable Notification Manager
projects.project-nvim.enable = true;
utility = {
ccc.enable = true; # Color Picker
diffview-nvim.enable = true;
icon-picker.enable = true;
surround.enable = true; # Change Surrounding Delimiter pairs `ysiw)`
leetcode-nvim.enable = true; # Allow solving LeetCode problems directly inside neovim
multicursors.enable = true; # Edit with multiple cursors simultaneously
smart-splits.enable = true; # Split-Pane Management
undotree.enable = true; # Undo history visualizer
nvim-biscuits.enable = true; # Shows the start of a code block from the bottom
motion = {
# NOTE: https://github.com/smoka7/hop.nvim
hop.enable = true; # EasyMotion like, allowing you to jump anywhere in the document with as few keystrokes as possible
leap.enable = true; # Jump to anywhere visible
# TODO: I sort of hate how precognition injects itself in virtual
# lines, but I do like that it can be used to give a reminder.
precognition.enable = false; # Helps with discovering motions to navigate your current buffer
};
images.img-clip.enable = true;
};
# TODO: Get Obsidian Working.
notes = {
# obsidian.enable = true; # neovim fails to build with this enabled.
mind-nvim.enable = true;
todo-comments.enable = true;
};
terminal = {
toggleterm = {
enable = true;
lazygit.enable = true;
};
};
ui = {
borders.enable = true;
noice.enable = true;
colorizer.enable = true;
modes-nvim.enable = false; # this looks terrible with catppuccin
illuminate.enable = true;
breadcrumbs = {
enable = true;
navbuddy.enable = true;
};
smartcolumn = {
enable = true;
setupOpts.custom_colorcolumn = {
nix = "110";
ruby = "120";
java = "130";
go = [
"90"
"130"
];
};
};
fastaction.enable = true;
};
assistant = {
chatgpt.enable = false;
copilot = {
enable = false;
cmp.enable = true;
};
codecompanion-nvim.enable = false;
# avante-nvim.enable = true;
};
session.nvim-session-manager.enable = true; # Save sessions to reopen later
gestures.gesture-nvim.enable = false; # mouse gesture support?
comments.comment-nvim.enable = true; # Fancy commenting
presence.neocord.enable = true; # Discord Rich Presence
};
};
programs.vscode = { programs.vscode = {
enable = true; enable = true;
mutableExtensionsDir = true; # mutually exclusive to programs.vscode.profiles mutableExtensionsDir = true; # mutually exclusive to programs.vscode.profiles
profiles.default.userSettings = { profiles.default.userSettings = {
"[nix]"."editor.tabSize" = 2; "[nix]"."editor.tabSize" = 2;
}; };