nixos-config/home/modules/nixvim.nix

626 lines
24 KiB
Nix
Raw Normal View History

2024-02-12 20:08:44 +01:00
{
pkgs,
lib,
config,
inputs,
outputs,
...
}: {
programs.nixvim = {
enable = true;
globals.mapleader = " ";
extraConfigLua = builtins.readFile ../config-files/nvim/init.lua;
2024-09-03 12:37:56 +02:00
opts = {
colorcolumn = "80";
};
2024-06-03 17:55:51 +02:00
# extraPlugins = with pkgs.vimPlugins; [headlines-nvim];
2024-09-18 20:43:39 +02:00
extraPlugins = with pkgs.vimPlugins; [
aerial-nvim
];
2024-02-13 22:04:37 +01:00
clipboard.providers.wl-copy.enable = true;
2024-02-13 22:04:37 +01:00
opts = {
number = true; # Show line numbers
relativenumber = true; # Show relative line numbers
shiftwidth = 2; # Tab width should be 2
};
2024-02-13 22:04:37 +01:00
2024-10-23 21:04:35 +02:00
# colorschemes.catppuccin.enable = true;
colorschemes.base16 = {
enable = true;
colorscheme = "apathy";
settings = {
telescope_borders = true;
2024-10-23 21:04:35 +02:00
};
};
plugins = {
2024-10-19 14:15:19 +02:00
lspkind.enable = true;
2024-09-19 18:24:14 +02:00
persistence = {
2024-09-30 20:36:14 +02:00
enable = true;
2024-09-19 18:24:14 +02:00
};
2024-09-18 20:43:39 +02:00
navic = {
enable = true;
settings = {
2024-09-18 21:07:41 +02:00
highlight = true;
2024-09-18 20:43:39 +02:00
lsp = {
auto_attach = true;
};
};
};
2024-09-17 16:55:15 +02:00
trouble = {
enable = true;
};
2024-07-25 15:26:38 +02:00
wakatime.enable = true;
2024-06-03 17:55:51 +02:00
headlines.enable = true;
twilight.enable = true;
comment = {
2024-03-18 18:25:09 +01:00
enable = true;
2024-03-18 18:23:29 +01:00
};
indent-blankline.enable = true;
2024-07-25 15:26:38 +02:00
lualine = {
enable = true;
2024-09-18 20:43:39 +02:00
settings = {
disabled_filetypes.statusline = ["neo-tree"];
component_separators = {
left = "";
right = "";
};
section_separators = {
left = "";
right = "";
};
2024-09-18 20:43:39 +02:00
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 = [
{
2024-09-19 18:24:14 +02:00
__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 = " ";
2024-09-18 20:43:39 +02:00
}
];
# lualine_x = [
# {
# __unkeyed-1 = "filename";
# newfile_status = true;
# path = 3;
# shorting_target = 150;
# }
# ];
};
};
2024-07-25 15:26:38 +02:00
};
lsp-format = {enable = true;};
2024-07-09 15:22:02 +02:00
copilot-lua = {
enable = true;
2024-07-09 15:22:02 +02:00
suggestion = {
enabled = false;
};
panel.enabled = false;
};
copilot-cmp.enable = true;
2024-10-17 17:41:03 +02:00
copilot-chat = {
enable = true;
settings.context = "buffers";
};
2024-07-09 15:22:02 +02:00
neocord.enable = true;
rustaceanvim = {
2024-09-30 20:36:14 +02:00
enable = false;
settings = {
2024-09-30 20:36:14 +02:00
# 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 = {
2024-07-09 15:22:02 +02:00
inlayHints = {
closureStyle = "rust_analyzer";
};
2024-07-11 15:28:28 +02:00
typing.autoClosingAngleBrackets.enable = true;
2024-07-09 15:22:02 +02:00
};
};
};
2024-09-30 20:36:14 +02:00
# rustaceanvim.settings.server.default_settings.rust-analyzer.diagnostics.disabled = ["inactive-code"];
lsp = {
enable = true;
2024-07-11 15:28:28 +02:00
inlayHints = true;
servers = {
2024-08-23 17:42:21 +02:00
# disabled due to compile error
2024-08-16 19:11:36 +02:00
# typst-lsp.enable = true;
protols = {
enable = true;
package = pkgs.protols;
};
2024-10-17 17:41:03 +02:00
typos-lsp.enable = false;
2024-07-06 16:42:49 +02:00
docker-compose-language-service.enable = true;
2024-03-28 14:00:26 +01:00
pylsp.enable = true;
bashls.enable = true;
lua-ls.enable = true;
2024-04-12 12:50:19 +02:00
gopls.enable = true;
nushell.enable = true;
clangd = {
enable = true;
filetypes = ["c" "cpp" "objc" "objcpp" "cpp"];
};
svelte.enable = true;
ts-ls.enable = true;
java-language-server.enable = true;
hls.enable = true;
eslint.enable = true;
2024-09-30 20:36:14 +02:00
rust-analyzer = {
enable = true;
installCargo = false;
installRustc = false;
settings = {
inlayHints = {
closureStyle = "rust_analyzer";
};
typing.autoClosingAngleBrackets.enable = true;
};
};
nixd.enable = true;
};
};
dap = {
enable = true;
extensions = {
dap-virtual-text.enable = true;
dap-ui.enable = true;
};
};
gitsigns.enable = true;
fugitive.enable = true;
2024-05-03 10:08:16 +02:00
nix-develop.enable = true;
treesitter = {
enable = true;
folding = true;
nixvimInjections = true;
settings = {
ensure_installed = "all";
2024-09-30 20:36:14 +02:00
# highlight.enable = true;
2024-09-30 20:37:29 +02:00
highlight.enable = true;
indent.enable = true;
};
};
treesitter-refactor = {
enable = true;
smartRename.enable = true;
highlightCurrentScope.enable = true;
navigation.enable = true;
};
cursorline.enable = true;
cmp = {
enable = true;
autoEnableSources = true;
2024-02-13 22:04:37 +01:00
settings = {
snippet = {
2024-03-18 18:23:29 +01:00
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>" = ''
2024-03-18 18:23:29 +01:00
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;
web-devicons.enable = true; # required by telescope
2024-04-09 14:15:12 +02:00
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;
2024-07-09 15:22:02 +02:00
# presence-nvim.enable = true;
crates-nvim.enable = true;
fidget.enable = true;
alpha = {
enable = true;
theme = null;
layout = [
{
type = "padding";
val = 4;
}
{
type = "text";
# val = [
# " ▒██ ██▒ █████ ▄▄▄█████▓ ▄████▄ "
# " ▒▒ █ █ ▒░▒██▓ ██▒▓ ██▒ ▓▒▒██▀ ▀█ "
# " ░░ █ ░▒██▒ ██░▒ ▓██░ ▒░▒▓█ ▄ "
# " ░ █ █ ▒ ░██ █▀ ░░ ▓██▓ ░ ▒▓▓▄ ▄██▒ "
# " ▒██▒ ▒██▒░▒███▒█▄ ▒██▒ ░ ▒ ▓███▀ ░ "
# " ▒▒ ░ ░▓ ░░░ ▒▒░ ▒ ▒ ░░ ░ ░▒ ▒ ░ "
# " ░░ ░▒ ░ ░ ▒░ ░ ░ ░ ▒ "
# " ░ ░ ░ ░ ░ ░ "
# " ░ ░ ░ ░ ░ "
# " ░ "
# ];
2024-07-15 21:03:34 +02:00
val = [
" "
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
" "
];
2024-03-17 18:13:26 +01:00
#val = [
# " ███████████████ ██████████████████"
# " ███████████████ ██ "
# " ███████████████ ██████████████████"
# " ███████████████ ██ ██"
# " ███████████████ ██████████████████"
# " ███████████████ █ ██ █ "
# " ███████████████ █ ██ █ "
# " ███████████████ █ ██ █ "
# " ███████████████ "
# " ███████████████ ██████████████████"
# " ███████████████ ██ ██ "
# " ██████████████████████████ ██████████████████"
# " ██████████████████████████ ██ ██"
# " ██████████████████████████ ██████████████████"
# " ██████████████████████████ ██ ██ "
# " ██████████████████████████ ██████████████████"
# " ██████████████████████████ "
# " ██████████████████████████ ▀▀▀▀▀▀▀▀██▀▀▀▀▀▀▀▀"
# " ██████████████████████████ ▀▀▀▀▀▀▀▀██▀▀▀▀▀▀▀▀"
# " ██████████████████████████ ██████████████████"
# " ███████████████▀▀▀▀▀▀▀▀▀▀▀ ██ ██"
# " ███████████████ ██████████████████"
# " ███████████████ ▄▄▄▄▄▄▄▄██▄▄▄▄▄▄▄▄"
# " ████████████████ ▄▄▄▄▄▄▄▄██▄▄▄▄▄▄▄▄"
# " █████████████████ "
# " ██████████████████ ██████████████████"
# " ███████████████████ ██ "
# " ████████████████████ ██ "
# " █████████████████████ ██ "
# " ██████████████████████ ██ "
# " ███████████████████████ ██ "
# " ████████████████████████ ██████████████████"
#];
opts = {
position = "center";
hl = "Type";
};
}
{
type = "text";
# val = [
# " ███▄ █ ██▓▒██ ██▒ ██▒ █▓ ██▓ ███▄ ▄███▓"
# " ██ ▀█ █ ▓██▒▒▒ █ █ ▒░▓██░ █▒▓██▒▓██▒▀█▀ ██▒"
# "▓██ ▀█ ██▒▒██▒░░ █ ░ ▓██ █▒░▒██▒▓██ ▓██░"
# "▓██▒ ▐▌██▒░██░ ░ █ █ ▒ ▒██ █░░░██░▒██ ▒██ "
# "▒██░ ▓██░░██░▒██▒ ▒██▒ ▒▀█░ ░██░▒██▒ ░██▒"
# "░ ▒░ ▒ ▒ ░▓ ▒▒ ░ ░▓ ░ ░ ▐░ ░▓ ░ ▒░ ░ ░"
# "░ ░░ ░ ▒░ ▒ ░░░ ░▒ ░ ░ ░░ ▒ ░░ ░ ░"
# " ░ ░ ░ ▒ ░ ░ ░ ░░ ▒ ░░ ░ "
# " ░ ░ ░ ░ ░ ░ ░ "
# " ░ "
# ];
2024-03-17 18:13:26 +01:00
#val = [
# "TOHA HEAVY INDUSTRIES"
#];
val = [
2024-03-18 08:56:51 +01:00
"git@git.sr.ht:xqtc"
];
opts = {
position = "center";
hl = "Keyword";
};
}
{
type = "padding";
2024-03-17 18:13:26 +01:00
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>";
};
};
2024-02-12 20:08:44 +01:00
};
bufferline.enable = true;
2024-02-12 20:08:44 +01:00
};
keymaps = [
{
mode = "n";
key = "<leader>ff";
options.silent = true;
2024-08-04 20:57:21 +02:00
action = "<cmd>Telescope find_files theme=ivy<CR>";
2024-05-03 10:08:16 +02:00
}
{
mode = "n";
key = "<leader>fe";
options.silent = true;
2024-08-04 20:57:21 +02:00
action = "<cmd>Telescope file_browser theme=ivy<CR>";
}
2024-05-19 11:25:43 +02:00
{
mode = "n";
2024-07-12 22:52:26 +02:00
key = "<leader>fss";
2024-05-19 11:25:43 +02:00
options.silent = true;
2024-08-04 20:57:21 +02:00
action = "<cmd>Telescope live_grep theme=ivy<CR>";
2024-05-19 11:25:43 +02:00
}
2024-07-12 22:52:26 +02:00
{
mode = "n";
key = "<leader>fsw";
options.silent = true;
2024-08-04 20:57:21 +02:00
action = "<cmd>Telescope lsp_dynamic_workspace_symbols theme=ivy<CR>";
2024-07-12 22:52:26 +02:00
}
2024-07-09 15:22:02 +02:00
{
mode = "n";
key = "<leader>fd";
options.silent = true;
2024-08-04 20:57:21 +02:00
action = "<cmd>Telescope diagnostics theme=ivy<CR>";
2024-07-09 15:22:02 +02:00
}
{
mode = "n";
key = "<leader>hh";
options.silent = true;
action = "<cmd>Alpha<CR>";
}
{
mode = "n";
key = "<leader>bb";
options.silent = true;
2024-08-04 20:57:21 +02:00
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'';
}
2024-03-18 18:23:29 +01:00
{
mode = ["n"];
key = "<leader>sr";
2024-03-18 18:25:09 +01:00
action = ''
function()
vim.lsp.buf.rename()
end
2024-03-18 18:23:29 +01:00
'';
lua = true;
}
2024-09-19 18:24:14 +02:00
{
mode = ["n"];
key = "<leader>qs";
action = ''
2024-09-30 20:36:14 +02:00
function()
require("persistence").load()
end
2024-09-19 18:24:14 +02:00
'';
lua = true;
2024-09-30 20:36:14 +02:00
options.desc = "Load the session for the current directory";
2024-09-19 18:24:14 +02:00
}
{
mode = ["n"];
key = "<leader>qS";
action = ''
2024-09-30 20:36:14 +02:00
function()
require("persistence").select()
end
2024-09-19 18:24:14 +02:00
'';
lua = true;
2024-09-30 20:36:14 +02:00
options.desc = "Select a session to load";
2024-09-19 18:24:14 +02:00
}
{
mode = ["n"];
key = "<leader>ql";
action = ''
2024-09-30 20:36:14 +02:00
function()
require("persistence").load({ last = true })
end
2024-09-19 18:24:14 +02:00
'';
lua = true;
2024-09-30 20:36:14 +02:00
options.desc = "Load the last session";
2024-09-19 18:24:14 +02:00
}
{
mode = ["n"];
key = "<leader>qd";
action = ''
2024-09-30 20:36:14 +02:00
function()
require("persistence").stop()
end
2024-09-19 18:24:14 +02:00
'';
lua = true;
2024-09-30 20:36:14 +02:00
options.desc = "Stop persistence";
2024-09-19 18:24:14 +02:00
}
];
};
2024-02-12 20:08:44 +01:00
}