Refactor terminal development

This commit is contained in:
muon 2025-12-22 18:18:26 +00:00
parent 76d16b1348
commit 85c51ff9d0
7 changed files with 484 additions and 2133 deletions

View file

@ -0,0 +1,144 @@
{
lib,
config,
inputs,
...
}: {
options.mods.nvim.enable =
lib.mkEnableOption "enables nvim";
imports = [
inputs.nvf.homeManagerModules.default
./obsidian.nix
];
config = lib.mkIf config.mods.nvim.enable {
programs.nvf = {
enable = true;
settings = {
vim = {
viAlias = false;
vimAlias = true;
lsp = {
enable = true;
formatOnSave = true;
};
keymaps = [
{
key = "<leader>w";
mode = ["n"];
action = ":w<CR>";
silent = true;
desc = "Save file";
}
{
key = "<leader>q";
mode = ["n"];
action = ":q<CR>";
silent = false;
desc = "Quit";
}
{
key = "gd";
mode = "n";
silent = true;
action = "<cmd>lua vim.lsp.buf.definition()<CR>";
desc = "Go to Definition";
}
];
languages = {
enableFormat = true;
enableTreesitter = true;
enableExtraDiagnostics = true;
nix.enable = true;
nix.lsp.servers = ["nixd"];
markdown.enable = true;
bash.enable = true;
rust.enable = true;
rust.extensions.crates-nvim.enable = true;
python = {
enable = true;
lsp.servers = ["pyright"];
format.type = ["ruff" "black"];
};
clang = {
enable = true;
cHeader = true;
};
};
statusline.lualine.enable = true;
telescope.enable = true;
autocomplete.nvim-cmp.enable = true;
autopairs.nvim-autopairs.enable = true;
tabline.nvimBufferline.enable = true;
treesitter.context.enable = true;
dashboard.alpha.enable = true;
comments.comment-nvim.enable = true;
notes.todo-comments.enable = true;
clipboard = {
enable = true;
providers.xclip.enable = true;
};
options = {
tabstop = 2;
shiftwidth = 0;
conceallevel = 2;
};
spellcheck = {enable = true;};
binds = {
whichKey.enable = true;
cheatsheet.enable = true;
};
git = {
enable = true;
gitsigns.enable = true;
gitsigns.codeActions.enable =
false; # throws an annoying debug message
};
utility = {
diffview-nvim.enable = true;
surround.enable = true;
undotree.enable = true;
motion = {
hop.enable = true;
leap.enable = true;
};
};
visuals = {
nvim-web-devicons.enable = true;
nvim-cursorline.enable = true;
cinnamon-nvim.enable = true;
fidget-nvim.enable = true;
highlight-undo.enable = true;
indent-blankline.enable = true;
};
ui = {
borders.enable = true;
noice.enable = true;
colorizer.enable = true;
illuminate.enable = true;
smartcolumn.enable = true;
fastaction.enable = true;
};
};
};
};
};
}

View file

@ -0,0 +1,123 @@
{
lib,
config,
...
}: {
options.mods.obsidian.enable =
lib.mkEnableOption "enables obsidian";
config = lib.mkIf config.obsidian.enable {
programs.nvf.settings.vim.notes.obsidian = {
enable = true;
setupOpts = {
workspaces = [
{
name = "agentic";
path = "~/work/vaults/agentic";
}
];
completion.nvim_cmp = true;
note_id_func =
lib.generators.mkLuaInline
# lua
''
function(title)
local suffix = ""
if title ~= nil then
-- If title is given, transform it into valid file name.
suffix = title:gsub(" ", "-"):gsub("[^A-Za-z0-9-]", ""):lower()
else
-- If title is nil, just add 4 random uppercase letters to the suffix.
for _ = 1, 4 do
suffix = suffix .. string.char(math.random(65, 90))
end
end
return tostring(os.date("%Y%m%d%H%M%S")) .. "-" .. suffix
end
'';
ui = {
enable = true;
update_debounce = 200;
max_file_length = 5000;
checkboxes = {
" " = {
char = "󰄱";
hl_group = "ObsidianTodo";
};
"x" = {
char = "";
hl_group = "ObsidianDone";
};
">" = {
char = "";
hl_group = "ObsidianRightArrow";
};
"~" = {
char = "󰰱";
hl_group = "ObsidianTilde";
};
"!" = {
char = "";
hl_group = "ObsidianImportant";
};
};
bullets = {
char = "";
hl_group = "ObsidianBullet";
};
external_link_icon = {
char = "";
hl_group = "ObsidianExtLinkIcon";
};
reference_text = {hl_group = "ObsidianRefText";};
highlight_text = {hl_group = "ObsidianHighlightText";};
tags = {hl_group = "ObsidianTag";};
block_ids = {hl_group = "ObsidianBlockID";};
hl_groups = {
ObsidianTodo = {
bold = true;
fg = "#f78c6c";
};
ObsidianDone = {
bold = true;
fg = "#89ddff";
};
ObsidianRightArrow = {
bold = true;
fg = "#f78c6c";
};
ObsidianTilde = {
bold = true;
fg = "#ff5370";
};
ObsidianImportant = {
bold = true;
fg = "#d73128";
};
ObsidianBullet = {
bold = true;
fg = "#89ddff";
};
ObsidianRefText = {
underline = true;
fg = "#c792ea";
};
ObsidianExtLinkIcon = {fg = "#c792ea";};
ObsidianTag = {
italic = true;
fg = "#89ddff";
};
ObsidianBlockID = {
italic = true;
fg = "#89ddff";
};
ObsidianHighlightText = {bg = "#75662e";};
};
};
};
};
todo-comments.enable = true;
};
}