nixos-config/home/modules/nixvim.nix
2024-09-19 18:24:14 +02:00

602 lines
23 KiB
Nix
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
pkgs,
lib,
config,
inputs,
outputs,
...
}: {
programs.nixvim = {
enable = true;
globals.mapleader = " ";
extraConfigLua = builtins.readFile ../config-files/nvim/init.lua;
opts = {
colorcolumn = "80";
};
# extraPlugins = with pkgs.vimPlugins; [headlines-nvim];
extraPlugins = with pkgs.vimPlugins; [
aerial-nvim
];
clipboard.providers.wl-copy.enable = true;
options = {
number = true; # Show line numbers
relativenumber = true; # Show relative line numbers
shiftwidth = 2; # Tab width should be 2
};
colorschemes.catppuccin.enable = true;
plugins = {
persistence = {
enable = true;
};
navic = {
enable = true;
settings = {
highlight = true;
lsp = {
auto_attach = true;
};
};
};
trouble = {
enable = true;
};
wakatime.enable = true;
headlines.enable = true;
twilight.enable = true;
comment-nvim = {
enable = true;
};
indent-blankline.enable = true;
lualine = {
enable = true;
disabledFiletypes.statusline = ["neo-tree"];
componentSeparators = {
left = "";
right = "";
};
sectionSeparators = {
left = "";
right = "";
};
settings = {
sections = {
lualine_y = [
{
__unkeyed-1 = "aerial";
colored = true;
cond = {
__raw = ''
function()
local buf_size_limit = 1024 * 1024
if vim.api.nvim_buf_get_offset(0, vim.api.nvim_buf_line_count(0)) > buf_size_limit then
return false
end
return true
end
'';
};
dense = false;
dense_sep = ".";
depth = {
__raw = "nil";
};
sep = " ";
}
];
};
winbar = {
lualine_c = [
{
__unkeyed-1 = "aerial";
colored = true;
cond = {
__raw = ''
function()
local buf_size_limit = 1024 * 1024
if vim.api.nvim_buf_get_offset(0, vim.api.nvim_buf_line_count(0)) > buf_size_limit then
return false
end
return true
end
'';
};
dense = false;
dense_sep = ".";
depth = {
__raw = "nil";
};
sep = " ";
}
];
# lualine_x = [
# {
# __unkeyed-1 = "filename";
# newfile_status = true;
# path = 3;
# shorting_target = 150;
# }
# ];
};
};
};
lsp-format = {enable = true;};
copilot-lua = {
enable = false;
suggestion = {
enabled = false;
};
panel.enabled = false;
};
copilot-cmp.enable = false;
neocord.enable = true;
rustaceanvim = {
enable = true;
settings = {
dap.autoloadConfigurations = true;
dap.adapter = let
code-lldb = pkgs.vscode-extensions.vadimcn.vscode-lldb;
in {
executable.command = "${code-lldb}/share/vscode/extensions/vadimcn.vscode-lldb/adapter/codelldb";
executable.args = [
"--liblldb"
"${code-lldb}/share/vscode/extensions/vadimcn.vscode-lldb/lldb/lib/liblldb.dylib"
"--port"
"31337"
];
type = "server";
port = "31337";
host = "127.0.0.1";
};
};
server = {
settings = {
inlayHints = {
closureStyle = "rust_analyzer";
};
typing.autoClosingAngleBrackets.enable = true;
};
};
};
rustaceanvim.settings.server.default_settings.rust-analyzer.diagnostics.disabled = ["inactive-code"];
lsp = {
enable = true;
inlayHints = true;
servers = {
# disabled due to compile error
# typst-lsp.enable = true;
typos-lsp.enable = true;
docker-compose-language-service.enable = true;
pylsp.enable = true;
bashls.enable = true;
lua-ls.enable = true;
gopls.enable = true;
nushell.enable = true;
clangd.enable = true;
svelte.enable = true;
tsserver.enable = true;
java-language-server.enable = true;
hls.enable = true;
eslint.enable = true;
# rust-analyzer = {
# enable = true;
# installCargo = false;
# installRustc = false;
# };
nil_ls.enable = true;
};
};
dap = {
enable = true;
extensions = {
dap-virtual-text.enable = true;
dap-ui.enable = true;
};
};
gitsigns.enable = true;
fugitive.enable = true;
nix-develop.enable = true;
treesitter = {
enable = true;
folding = true;
indent = true;
nixvimInjections = true;
settings = {
ensure_installed = "all";
highlight.enable = true;
};
};
treesitter-refactor = {
enable = true;
smartRename.enable = true;
highlightCurrentScope.enable = true;
navigation.enable = true;
};
cursorline.enable = true;
cmp = {
enable = true;
autoEnableSources = true;
settings = {
snippet = {
expand = "function(args) require('luasnip').lsp_expand(args.body) end";
};
sources = [
{name = "nvim_lsp";}
{name = "path";}
{name = "buffer";}
{name = "luasnip";}
# {name = "copilot";}
];
#mapping = {
# __raw = ''
# cmp.mapping.preset.insert({
# ['<Tab>'] =
# })
# '';
#};
mapping = {
"<CR>" = ''
cmp.mapping.confirm({ select = true })
'';
"<Tab>" = ''
function(fallback)
local luasnip = require('luasnip')
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expandable() then
luasnip.expand()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end
'';
};
};
};
telescope.enable = true;
telescope.extensions = {file-browser.enable = true;};
which-key.enable = true;
cmp-nvim-lsp.enable = true;
cmp-nvim-lua.enable = true;
noice.enable = true;
notify.enable = true;
luasnip.enable = true;
cmp_luasnip.enable = true;
neo-tree.enable = true;
# presence-nvim.enable = true;
crates-nvim.enable = true;
fidget.enable = true;
alpha = {
enable = true;
theme = null;
iconsEnabled = true;
layout = [
{
type = "padding";
val = 4;
}
{
type = "text";
# val = [
# " ▒██ ██▒ █████ ▄▄▄█████▓ ▄████▄ "
# " ▒▒ █ █ ▒░▒██▓ ██▒▓ ██▒ ▓▒▒██▀ ▀█ "
# " ░░ █ ░▒██▒ ██░▒ ▓██░ ▒░▒▓█ ▄ "
# " ░ █ █ ▒ ░██ █▀ ░░ ▓██▓ ░ ▒▓▓▄ ▄██▒ "
# " ▒██▒ ▒██▒░▒███▒█▄ ▒██▒ ░ ▒ ▓███▀ ░ "
# " ▒▒ ░ ░▓ ░░░ ▒▒░ ▒ ▒ ░░ ░ ░▒ ▒ ░ "
# " ░░ ░▒ ░ ░ ▒░ ░ ░ ░ ▒ "
# " ░ ░ ░ ░ ░ ░ "
# " ░ ░ ░ ░ ░ "
# " ░ "
# ];
val = [
" "
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
" "
];
#val = [
# " ███████████████ ██████████████████"
# " ███████████████ ██ "
# " ███████████████ ██████████████████"
# " ███████████████ ██ ██"
# " ███████████████ ██████████████████"
# " ███████████████ █ ██ █ "
# " ███████████████ █ ██ █ "
# " ███████████████ █ ██ █ "
# " ███████████████ "
# " ███████████████ ██████████████████"
# " ███████████████ ██ ██ "
# " ██████████████████████████ ██████████████████"
# " ██████████████████████████ ██ ██"
# " ██████████████████████████ ██████████████████"
# " ██████████████████████████ ██ ██ "
# " ██████████████████████████ ██████████████████"
# " ██████████████████████████ "
# " ██████████████████████████ ▀▀▀▀▀▀▀▀██▀▀▀▀▀▀▀▀"
# " ██████████████████████████ ▀▀▀▀▀▀▀▀██▀▀▀▀▀▀▀▀"
# " ██████████████████████████ ██████████████████"
# " ███████████████▀▀▀▀▀▀▀▀▀▀▀ ██ ██"
# " ███████████████ ██████████████████"
# " ███████████████ ▄▄▄▄▄▄▄▄██▄▄▄▄▄▄▄▄"
# " ████████████████ ▄▄▄▄▄▄▄▄██▄▄▄▄▄▄▄▄"
# " █████████████████ "
# " ██████████████████ ██████████████████"
# " ███████████████████ ██ "
# " ████████████████████ ██ "
# " █████████████████████ ██ "
# " ██████████████████████ ██ "
# " ███████████████████████ ██ "
# " ████████████████████████ ██████████████████"
#];
opts = {
position = "center";
hl = "Type";
};
}
{
type = "text";
# val = [
# " ███▄ █ ██▓▒██ ██▒ ██▒ █▓ ██▓ ███▄ ▄███▓"
# " ██ ▀█ █ ▓██▒▒▒ █ █ ▒░▓██░ █▒▓██▒▓██▒▀█▀ ██▒"
# "▓██ ▀█ ██▒▒██▒░░ █ ░ ▓██ █▒░▒██▒▓██ ▓██░"
# "▓██▒ ▐▌██▒░██░ ░ █ █ ▒ ▒██ █░░░██░▒██ ▒██ "
# "▒██░ ▓██░░██░▒██▒ ▒██▒ ▒▀█░ ░██░▒██▒ ░██▒"
# "░ ▒░ ▒ ▒ ░▓ ▒▒ ░ ░▓ ░ ░ ▐░ ░▓ ░ ▒░ ░ ░"
# "░ ░░ ░ ▒░ ▒ ░░░ ░▒ ░ ░ ░░ ▒ ░░ ░ ░"
# " ░ ░ ░ ▒ ░ ░ ░ ░░ ▒ ░░ ░ "
# " ░ ░ ░ ░ ░ ░ ░ "
# " ░ "
# ];
#val = [
# "TOHA HEAVY INDUSTRIES"
#];
val = [
"git@git.sr.ht:xqtc"
];
opts = {
position = "center";
hl = "Keyword";
};
}
{
type = "padding";
val = 8;
}
{
type = "group";
val = [
{
type = "text";
val = " To browse files press '<leader>ff'";
opts = {
position = "center";
};
}
];
opts = {
position = "center";
};
}
{
type = "padding";
val = 2;
}
{
type = "text";
val = "uwu";
opts = {
position = "center";
hl = "Keyword";
};
}
{
type = "padding";
val = 4;
}
#{
# type = "text";
# val = [
# "      />》, -―‐‐<^}"
# "     ./:::/,≠´::::::ヽ."
# "    /::::〃::::}::丿ハ"
# "   ./:::::i{l|/ ノ/ }::}"
# "   /:::::::瓜イ> ´< ,:ノ"
# "  ./::::::|ノヘ.{、 (_フ_ノイ_"
# "  |:::::::|}`ス / /"
# ". |::::::|(_:::つ/ ThinkPad / neovim!"
# ". ̄ ̄ ̄ ̄ ̄ ̄ ̄\/_____/ ̄ ̄ ̄ ̄ ̄"
# ];
# opts = {
# position = "center";
# hl = "Type";
# };
#}
];
opts = {
#noautocmd = true;
keymap = {
press = "<CR>";
press_queue = "<M-CR>";
};
};
};
bufferline.enable = true;
};
keymaps = [
{
mode = "n";
key = "<leader>ff";
options.silent = true;
action = "<cmd>Telescope find_files theme=ivy<CR>";
}
{
mode = "n";
key = "<leader>fe";
options.silent = true;
action = "<cmd>Telescope file_browser theme=ivy<CR>";
}
{
mode = "n";
key = "<leader>fss";
options.silent = true;
action = "<cmd>Telescope live_grep theme=ivy<CR>";
}
{
mode = "n";
key = "<leader>fsw";
options.silent = true;
action = "<cmd>Telescope lsp_dynamic_workspace_symbols theme=ivy<CR>";
}
{
mode = "n";
key = "<leader>fd";
options.silent = true;
action = "<cmd>Telescope diagnostics theme=ivy<CR>";
}
{
mode = "n";
key = "<leader>hh";
options.silent = true;
action = "<cmd>Alpha<CR>";
}
{
mode = "n";
key = "<leader>bb";
options.silent = true;
action = "<cmd>Telescope buffers theme=ivy<CR>";
}
{
mode = "n";
key = "<leader>Gp";
action = "<cmd>Git pull<CR>";
}
{
mode = "n";
key = "<leader>GP";
action = "<cmd>Git push<CR>";
}
{
mode = "n";
key = "<leader>Gc";
action = "<cmd>Git commit<CR>";
}
{
mode = "n";
key = "<leader>Ga";
action = "<cmd>Git add .<CR>";
}
{
mode = "n";
key = "<leader>Gd";
action = "<cmd>Git diff<CR>";
}
{
mode = "n";
key = "<leader>nt";
action = "<cmd>Neotree toggle left<CR>";
}
{
mode = "n";
key = "<leader>P";
action = ''"+P'';
}
{
mode = ["n" "v"];
key = "<leader>y";
action = ''"+y'';
}
{
mode = ["n"];
key = "<leader>Y";
action = ''"+Y'';
}
{
mode = ["n"];
key = "<leader>sr";
action = ''
function()
vim.lsp.buf.rename()
end
'';
lua = true;
}
{
mode = ["n"];
key = "<leader>qs";
action = ''
function()
require("persistence").load()
end
'';
lua = true;
options.desc = "Load the session for the current directory";
}
{
mode = ["n"];
key = "<leader>qS";
action = ''
function()
require("persistence").select()
end
'';
lua = true;
options.desc = "Select a session to load";
}
{
mode = ["n"];
key = "<leader>ql";
action = ''
function()
require("persistence").load({ last = true })
end
'';
lua = true;
options.desc = "Load the last session";
}
{
mode = ["n"];
key = "<leader>qd";
action = ''
function()
require("persistence").stop()
end
'';
lua = true;
options.desc = "Stop persistence";
}
];
};
}