mirror of
https://github.com/oddlama/nix-config.git
synced 2025-10-11 07:10:39 +02:00
feat(neovim): finish transition to nixvim
This commit is contained in:
parent
052fded8e2
commit
2f4c2df735
31 changed files with 806 additions and 2131 deletions
84
flake.lock
generated
84
flake.lock
generated
|
@ -337,11 +337,11 @@
|
||||||
"systems": "systems_2"
|
"systems": "systems_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1698410321,
|
"lastModified": 1700815693,
|
||||||
"narHash": "sha256-MphuSlgpmKwtJncGMohryHiK55J1n6WzVQ/OAfmfoMc=",
|
"narHash": "sha256-JtKZEQUzosrCwDsLgm+g6aqbP1aseUl1334OShEAS3s=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "devshell",
|
"repo": "devshell",
|
||||||
"rev": "1aed986e3c81a4f6698e85a7452cbfcc4b31a36e",
|
"rev": "7ad1c417c87e98e56dcef7ecd0e0a2f2e5669d51",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -687,11 +687,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699783872,
|
"lastModified": 1700847865,
|
||||||
"narHash": "sha256-4zTwLT2LL45Nmo6iwKB3ls3hWodVP9DiSWxki/oewWE=",
|
"narHash": "sha256-uWaOIemGl9LF813MW0AEgCBpKwFo2t1Wv3BZc6e5Frw=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "280721186ab75a76537713ec310306f0eba3e407",
|
"rev": "8cedd63eede4c22deb192f1721dd67e7460e1ebe",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -721,11 +721,11 @@
|
||||||
"nixpkgs-lib": "nixpkgs-lib"
|
"nixpkgs-lib": "nixpkgs-lib"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699790908,
|
"lastModified": 1700395747,
|
||||||
"narHash": "sha256-8CO4KQhiEyO7rce4KVOq8arpk9802fVwxtN/oLeRFag=",
|
"narHash": "sha256-pzLYZGK34vhAFfyAJjcZYX3BK0Ap/QY/rd8B6Q30tHo=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "lib-aggregate",
|
"repo": "lib-aggregate",
|
||||||
"rev": "6c60a229fa422698325b2788e93dfeeba3f11391",
|
"rev": "474538707da35589543af5a1c8c31f9978841add",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -757,11 +757,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699214123,
|
"lastModified": 1700320345,
|
||||||
"narHash": "sha256-0vo6if/3dDTia6NJJT5zFjBuXFnMfPFUJxgjaWZRH24=",
|
"narHash": "sha256-HDBVj9gEOG2ZBGc+UGtjqDsOIvYOQtDxDRGrbiWOXl0=",
|
||||||
"owner": "astro",
|
"owner": "astro",
|
||||||
"repo": "microvm.nix",
|
"repo": "microvm.nix",
|
||||||
"rev": "4caeec0f24d416ce19c76754cae572f1e1882ffe",
|
"rev": "b16e6261ad2f0bca6ac2a4b7a4d3377cf5e3d95d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -778,11 +778,11 @@
|
||||||
"treefmt-nix": "treefmt-nix"
|
"treefmt-nix": "treefmt-nix"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699952346,
|
"lastModified": 1700459485,
|
||||||
"narHash": "sha256-l+8awD7Gq5iIZSbzC7BNO3e5sFBgm1Ivea8WyawRMlQ=",
|
"narHash": "sha256-vHE+wNz3o0ygEY/XIC4XrQq18DlC6Ek7zu8tSdUbVzk=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nix-eval-jobs",
|
"repo": "nix-eval-jobs",
|
||||||
"rev": "333af7cb0f3dc54e893d2032e4032821bc90e145",
|
"rev": "575ca7a957cfd49f3e82c5434ac8029e2e6519d3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -820,11 +820,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699760693,
|
"lastModified": 1700363379,
|
||||||
"narHash": "sha256-u/gkNUHQR/q23voqE5J4xmEWQIAqR+g3lUnCtzn0k7Y=",
|
"narHash": "sha256-fBEVPFwSZ6AmBE1s1oT7E9WVuqRghruxTnSQ8UUlMkw=",
|
||||||
"owner": "Mic92",
|
"owner": "Mic92",
|
||||||
"repo": "nix-index-database",
|
"repo": "nix-index-database",
|
||||||
"rev": "8aff4ca3dee60d1422489fe8d52c2f837b3ad113",
|
"rev": "27920146e671a0d565aaa7452907383be14d8d82",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -871,11 +871,11 @@
|
||||||
},
|
},
|
||||||
"nixos-hardware": {
|
"nixos-hardware": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699954245,
|
"lastModified": 1700559156,
|
||||||
"narHash": "sha256-CSnfeOHc/wco8amdA0j268OaLrMcI5gGtK6Zm+y3lT0=",
|
"narHash": "sha256-gL4epO/qf+wo30JjC3g+b5Bs8UrpxzkhNBBsUYxpw2g=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixos-hardware",
|
"repo": "nixos-hardware",
|
||||||
"rev": "df9bb8a436607da124e8cfa0fd19e70e9d9e0b7b",
|
"rev": "c3abafb01cd7045dba522af29b625bd1e170c2fb",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -908,11 +908,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699781429,
|
"lastModified": 1700612854,
|
||||||
"narHash": "sha256-UYefjidASiLORAjIvVsUHG6WBtRhM67kTjEY4XfZOFs=",
|
"narHash": "sha256-yrQ8osMD+vDLGFX7pcwsY/Qr5PUd6OmDMYJZzZi0+zc=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "e44462d6021bfe23dfb24b775cc7c390844f773d",
|
"rev": "19cbff58383a4ae384dea4d1d0c823d72b49d614",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -924,11 +924,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs-lib": {
|
"nixpkgs-lib": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699750082,
|
"lastModified": 1700354803,
|
||||||
"narHash": "sha256-4Vx6Vr975vPGzGACyu4u6JfWo2Auwy0AeC6sTSOXdTQ=",
|
"narHash": "sha256-kJYhswYp1XMdpI2p/2oRcZxvwW83e64r1av/9zypFLU=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixpkgs.lib",
|
"repo": "nixpkgs.lib",
|
||||||
"rev": "55682344eae38a1975ccd2cfac0dcb4197faedf8",
|
"rev": "07e160fb6ad2c4bcabecd43425ebaaa4336c5da2",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -995,11 +995,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699957017,
|
"lastModified": 1700910721,
|
||||||
"narHash": "sha256-KNhfptCyWg7+ztI9ChFCPgkCTh5qTOVtfN9UlMt9t10=",
|
"narHash": "sha256-FRsgqTA3s4CEbKqiWMhhg5g70HW319d2YoXJ/DclON4=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixpkgs-wayland",
|
"repo": "nixpkgs-wayland",
|
||||||
"rev": "ef494dc47eb77867fef9b71c74dc6f2ea0f9bc87",
|
"rev": "cb8cd2609efa3cb07c5ce9516bfa8eed9a9856c1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -1010,11 +1010,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699839047,
|
"lastModified": 1700444282,
|
||||||
"narHash": "sha256-FAoWKSDZ9vpd8sLeJYeVGUnSlOCqkSochTEvOA7+qeM=",
|
"narHash": "sha256-s/+tgT+Iz0LZO+nBvSms+xsMqvHt2LqYniG9r+CYyJc=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "8423b2dff7b10463eb97f9242bd62a1ff8d2ee3e",
|
"rev": "3f21a22b5aafefa1845dec6f4a378a8f53d8681c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -1061,11 +1061,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699958608,
|
"lastModified": 1700831612,
|
||||||
"narHash": "sha256-CZ8VtcpiReFsaCTfd8jjBP4wef2OUwT0aiIzsDe+l2c=",
|
"narHash": "sha256-4rjt03g847UpPYshwItJqFqxHJ6l4aoXqDVT9CNOCu4=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixvim",
|
"repo": "nixvim",
|
||||||
"rev": "a742bd1fc4e33b1dd1fdcafc914c5da601ba7b27",
|
"rev": "bacdae2c508defccdff1af8511e4d639d26d3d47",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -1170,11 +1170,11 @@
|
||||||
"nixpkgs-stable": "nixpkgs-stable_3"
|
"nixpkgs-stable": "nixpkgs-stable_3"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699271226,
|
"lastModified": 1700064067,
|
||||||
"narHash": "sha256-8Jt1KW3xTjolD6c6OjJm9USx/jmL+VVmbooADCkdDfU=",
|
"narHash": "sha256-1ZWNDzhu8UlVCK7+DUN9dVQfiHX1bv6OQP9VxstY/gs=",
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "pre-commit-hooks.nix",
|
"repo": "pre-commit-hooks.nix",
|
||||||
"rev": "ea758da1a6dcde6dc36db348ed690d09b9864128",
|
"rev": "e558068cba67b23b4fbc5537173dbb43748a17e8",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -1255,11 +1255,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699477454,
|
"lastModified": 1700302760,
|
||||||
"narHash": "sha256-PueVBJDRM+q/ONSwMptLH4i6cny7BnNcuBpjI2e5rYo=",
|
"narHash": "sha256-JpOJf9Nj260rTrVuYonP9CiGzj+43AGPOfhF72XkQvU=",
|
||||||
"owner": "danth",
|
"owner": "danth",
|
||||||
"repo": "stylix",
|
"repo": "stylix",
|
||||||
"rev": "5c6f7fd709be441505998fc51a25b645a44d359e",
|
"rev": "a15c3196c1d620c18cbee8229092598384a89fef",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
sharedModules = [
|
sharedModules = [
|
||||||
inputs.nix-index-database.hmModules.nix-index
|
inputs.nix-index-database.hmModules.nix-index
|
||||||
inputs.wired-notify.homeManagerModules.default
|
inputs.wired-notify.homeManagerModules.default
|
||||||
|
inputs.nixvim.homeManagerModules.nixvim
|
||||||
{
|
{
|
||||||
home.stateVersion = config.system.stateVersion;
|
home.stateVersion = config.system.stateVersion;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,5 +27,6 @@
|
||||||
redis-paperless = uidGid 982;
|
redis-paperless = uidGid 982;
|
||||||
nixseparatedebuginfod = uidGid 981;
|
nixseparatedebuginfod = uidGid 981;
|
||||||
msr = uidGid 980;
|
msr = uidGid 980;
|
||||||
|
fwupd-refresh = uidGid 979;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,72 +0,0 @@
|
||||||
local opt = vim.opt
|
|
||||||
local g = vim.g
|
|
||||||
|
|
||||||
g.mapleader = ","
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- General
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
opt.undolevels = 1000000 -- Set maximum undo levels
|
|
||||||
opt.undofile = true -- Enable persistent undo which persists undo history across vim sessions
|
|
||||||
opt.updatetime = 300 -- Save swap file after 300ms
|
|
||||||
opt.mouse = "a" -- Enable full mouse support
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Editor visuals
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
opt.termguicolors = true -- Enable true color in terminals
|
|
||||||
|
|
||||||
opt.splitkeep = "screen" -- Try not to move text when opening/closing splits
|
|
||||||
opt.wrap = false -- Do not wrap text longer than the window's width
|
|
||||||
opt.scrolloff = 2 -- Keep 2 lines above and below the cursor.
|
|
||||||
opt.sidescrolloff = 2 -- Keep 2 lines left and right of the cursor.
|
|
||||||
|
|
||||||
opt.number = true -- Show line numbers
|
|
||||||
opt.cursorline = true -- Enable cursorline, colorscheme only shows this in number column
|
|
||||||
opt.wildmode = { "list", "full" } -- Only complete the longest common prefix and list all results
|
|
||||||
opt.fillchars = { stlnc = "─" } -- Show separators in inactive window statuslines
|
|
||||||
|
|
||||||
-- FIXME: disabled because this really fucks everything up in the terminal.
|
|
||||||
opt.title = false -- Sets the window title
|
|
||||||
--opt.titlestring = "%t%( %M%)%( (%{expand(\"%:~:.:h\")})%) - nvim" -- The format for the window title
|
|
||||||
|
|
||||||
-- Hide line numbers in terminal windows
|
|
||||||
vim.api.nvim_create_autocmd("BufEnter", {
|
|
||||||
pattern = "term://*",
|
|
||||||
callback = function()
|
|
||||||
vim.bo.number = false
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Editing behavior
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
opt.whichwrap = "" -- Never let the curser switch to the next line when reaching line end
|
|
||||||
opt.ignorecase = true -- Ignore case in search by default
|
|
||||||
opt.smartcase = true -- Be case sensitive when an upper-case character is included
|
|
||||||
|
|
||||||
opt.expandtab = false
|
|
||||||
opt.tabstop = 4 -- Set indentation of tabs to be equal to 4 spaces.
|
|
||||||
opt.shiftwidth = 4
|
|
||||||
opt.softtabstop = 4
|
|
||||||
opt.shiftround = true -- Round indentation commands to next multiple of shiftwidth
|
|
||||||
|
|
||||||
-- r = insert comment leader when hitting <Enter> in insert mode
|
|
||||||
-- q = allow explicit formatting with gq
|
|
||||||
-- j = remove comment leaders when joining lines if it makes sense
|
|
||||||
opt.formatoptions = "rqj"
|
|
||||||
|
|
||||||
opt.virtualedit = "all" -- Allow the curser to be positioned on cells that have no actual character;
|
|
||||||
-- Like moving beyond EOL or on any visual 'space' of a tab character
|
|
||||||
opt.selection = "old" -- Do not include line ends in past the-line selections
|
|
||||||
opt.smartindent = true -- Use smart auto indenting for all file types
|
|
||||||
|
|
||||||
opt.timeoutlen = 20 -- Only wait 20 milliseconds for characters to arrive (see :help timeout)
|
|
||||||
opt.ttimeoutlen = 20
|
|
||||||
opt.timeout = false -- Disable timeout, but enable ttimeout (only timeout on keycodes)
|
|
||||||
opt.ttimeout = true
|
|
||||||
|
|
||||||
opt.grepprg = "rg --vimgrep --smart-case --follow" -- Replace grep with ripgrep
|
|
45
users/myuser/neovim/alpha.nix
Normal file
45
users/myuser/neovim/alpha.nix
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
{
|
||||||
|
programs.nixvim.plugins.alpha = {
|
||||||
|
enable = true;
|
||||||
|
layout = let
|
||||||
|
padding = val: {
|
||||||
|
type = "padding";
|
||||||
|
inherit val;
|
||||||
|
};
|
||||||
|
in [
|
||||||
|
(padding 2)
|
||||||
|
{
|
||||||
|
opts = {
|
||||||
|
hl = "Type";
|
||||||
|
position = "center";
|
||||||
|
};
|
||||||
|
type = "text";
|
||||||
|
val = [
|
||||||
|
" ███╗ ██╗██╗██╗ ██╗██╗ ██╗██╗███╗ ███╗ "
|
||||||
|
" ████╗ ██║██║╚██╗██╔╝██║ ██║██║████╗ ████║ "
|
||||||
|
" ██╔██╗ ██║██║ ╚███╔╝ ██║ ██║██║██╔████╔██║ "
|
||||||
|
" ██║╚██╗██║██║ ██╔██╗ ╚██╗ ██╔╝██║██║╚██╔╝██║ "
|
||||||
|
" ██║ ╚████║██║██╔╝ ██╗ ╚████╔╝ ██║██║ ╚═╝ ██║ "
|
||||||
|
" ╚═╝ ╚═══╝╚═╝╚═╝ ╚═╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ "
|
||||||
|
];
|
||||||
|
}
|
||||||
|
(padding 2)
|
||||||
|
{
|
||||||
|
type = "group";
|
||||||
|
opts.spacing = 1;
|
||||||
|
val = [
|
||||||
|
{
|
||||||
|
command = ":enew<CR>";
|
||||||
|
desc = " New file";
|
||||||
|
shortcut = "e";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = ":qa<CR>";
|
||||||
|
desc = " Quit Neovim";
|
||||||
|
shortcut = "q";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
44
users/myuser/neovim/appearance.nix
Normal file
44
users/myuser/neovim/appearance.nix
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
programs.nixvim.plugins = {
|
||||||
|
# Statusline
|
||||||
|
lualine = {
|
||||||
|
enable = true;
|
||||||
|
extensions = ["fzf" "nvim-dap-ui" "symbols-outline" "trouble" "neo-tree" "quickfix" "fugitive"];
|
||||||
|
componentSeparators = null;
|
||||||
|
# componentSeparators.left = "|";
|
||||||
|
# componentSeparators.right = "|";
|
||||||
|
# sectionSeparators.left = "";
|
||||||
|
# sectionSeparators.right = "";
|
||||||
|
sections = {
|
||||||
|
lualine_a = ["mode"];
|
||||||
|
lualine_b = ["branch" "filename"];
|
||||||
|
lualine_c = ["diff" "diagnostics"];
|
||||||
|
lualine_x = ["encoding" "fileformat" "filetype"];
|
||||||
|
lualine_y = ["progress"];
|
||||||
|
lualine_z = ["location"];
|
||||||
|
};
|
||||||
|
inactiveSections = {
|
||||||
|
lualine_a = ["filename"];
|
||||||
|
lualine_b = [];
|
||||||
|
lualine_c = ["diagnostics"];
|
||||||
|
lualine_x = [];
|
||||||
|
lualine_y = [];
|
||||||
|
lualine_z = ["location"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Line indentation markers
|
||||||
|
indent-blankline.enable = true;
|
||||||
|
|
||||||
|
# Rainbow parentheses
|
||||||
|
rainbow-delimiters.enable = true;
|
||||||
|
|
||||||
|
# Status updates for LSP progress in right bottom corner.
|
||||||
|
fidget.enable = true;
|
||||||
|
# Show colors
|
||||||
|
nvim-colorizer.enable = true;
|
||||||
|
|
||||||
|
# Breadcrumbs
|
||||||
|
# TODO navic.enable = true; or dropbar?
|
||||||
|
};
|
||||||
|
}
|
149
users/myuser/neovim/completion.nix
Normal file
149
users/myuser/neovim/completion.nix
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
{
|
||||||
|
programs.nixvim = {
|
||||||
|
plugins = {
|
||||||
|
luasnip = {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = {
|
||||||
|
history = true;
|
||||||
|
# Update dynamic snippets while typing
|
||||||
|
updateevents = "TextChanged,TextChangedI";
|
||||||
|
enable_autosnippets = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
cmp_luasnip.enable = true;
|
||||||
|
cmp-cmdline.enable = true;
|
||||||
|
cmp-cmdline-history.enable = true;
|
||||||
|
cmp-path.enable = true;
|
||||||
|
cmp-emoji.enable = true;
|
||||||
|
cmp-treesitter.enable = true;
|
||||||
|
cmp-nvim-lsp.enable = true;
|
||||||
|
cmp-nvim-lsp-document-symbol.enable = true;
|
||||||
|
cmp-nvim-lsp-signature-help.enable = true;
|
||||||
|
nvim-cmp = {
|
||||||
|
enable = true;
|
||||||
|
sources = [
|
||||||
|
{name = "nvim_lsp_signature_help";}
|
||||||
|
{name = "nvim_lsp";}
|
||||||
|
{name = "nvim_lsp_document_symbol";}
|
||||||
|
{name = "path";}
|
||||||
|
{name = "treesitter";}
|
||||||
|
{name = "luasnip";}
|
||||||
|
{name = "emoji";}
|
||||||
|
];
|
||||||
|
mappingPresets = ["insert"];
|
||||||
|
mapping = {
|
||||||
|
"<CR>" = ''
|
||||||
|
cmp.mapping.confirm({
|
||||||
|
behavior = cmp.ConfirmBehavior.Replace,
|
||||||
|
select = false,
|
||||||
|
})
|
||||||
|
'';
|
||||||
|
"<C-d>" = "cmp.mapping.scroll_docs(-4)";
|
||||||
|
"<C-f>" = "cmp.mapping.scroll_docs(4)";
|
||||||
|
"<C-e>" = "cmp.mapping.abort()";
|
||||||
|
"<Tab>" = {
|
||||||
|
modes = ["i" "s"];
|
||||||
|
action = ''
|
||||||
|
function(fallback)
|
||||||
|
local has_words_before = function()
|
||||||
|
local line, col = table.unpack(vim.api.nvim_win_get_cursor(0))
|
||||||
|
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match "%s" == nil
|
||||||
|
end
|
||||||
|
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_next_item()
|
||||||
|
elseif require("luasnip").expandable() then
|
||||||
|
require("luasnip").expand()
|
||||||
|
elseif require("luasnip").expand_or_locally_jumpable() then
|
||||||
|
require("luasnip").expand_or_jump()
|
||||||
|
elseif has_words_before() then
|
||||||
|
cmp.complete()
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
"<S-Tab>" = {
|
||||||
|
modes = ["i" "s"];
|
||||||
|
action = ''
|
||||||
|
function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_prev_item()
|
||||||
|
elseif luasnip.jumpable(-1) then
|
||||||
|
luasnip.jump(-1)
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
formatting.fields = ["abbr" "kind" "menu"];
|
||||||
|
formatting.format = ''
|
||||||
|
function(_, vim_item)
|
||||||
|
local icons = {
|
||||||
|
Namespace = "",
|
||||||
|
Text = "",
|
||||||
|
Method = "",
|
||||||
|
Function = "",
|
||||||
|
Constructor = "",
|
||||||
|
Field = "",
|
||||||
|
Variable = "",
|
||||||
|
Class = "",
|
||||||
|
Interface = "",
|
||||||
|
Module = "",
|
||||||
|
Property = "",
|
||||||
|
Unit = "",
|
||||||
|
Value = "",
|
||||||
|
Enum = "",
|
||||||
|
Keyword = "",
|
||||||
|
Snippet = "",
|
||||||
|
Color = "",
|
||||||
|
File = "",
|
||||||
|
Reference = "",
|
||||||
|
Folder = "",
|
||||||
|
EnumMember = "",
|
||||||
|
Constant = "",
|
||||||
|
Struct = "",
|
||||||
|
Event = "",
|
||||||
|
Operator = "",
|
||||||
|
TypeParameter = "",
|
||||||
|
Table = "",
|
||||||
|
Object = "",
|
||||||
|
Tag = "",
|
||||||
|
Array = "",
|
||||||
|
Boolean = "",
|
||||||
|
Number = "",
|
||||||
|
Null = "",
|
||||||
|
String = "",
|
||||||
|
Calendar = "",
|
||||||
|
Watch = "",
|
||||||
|
Package = "",
|
||||||
|
Copilot = "",
|
||||||
|
Codeium = "",
|
||||||
|
TabNine = "",
|
||||||
|
}
|
||||||
|
vim_item.kind = string.format("%s %s", icons[vim_item.kind], vim_item.kind)
|
||||||
|
return vim_item
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
snippet.expand = "luasnip";
|
||||||
|
};
|
||||||
|
|
||||||
|
# TODO use "ray-x/lsp_signature.nvim"
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfigLuaPost = ''
|
||||||
|
local cmp = require "cmp"
|
||||||
|
cmp.setup.cmdline(":", {
|
||||||
|
mapping = cmp.mapping.preset.cmdline(),
|
||||||
|
sources = {
|
||||||
|
{ name = "cmdline" },
|
||||||
|
{ name = "cmp-cmdline-history" },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,22 +1,28 @@
|
||||||
# TODO whichkey
|
|
||||||
# TODO vim illuminate
|
# TODO vim illuminate
|
||||||
# TODO keybinds
|
# TODO keybinds
|
||||||
# TODO dap dapui
|
# TODO dap dapui
|
||||||
# TODO neotree left darker
|
|
||||||
# TODO neotree focsed shows lualine wrongly (full instead of nothing)
|
# TODO neotree focsed shows lualine wrongly (full instead of nothing)
|
||||||
# TODO lualine inactive ------ is ugly
|
# TODO lualine inactive ------ is ugly
|
||||||
# TODO move lines. gomove again?
|
# TODO move lines. gomove again?
|
||||||
# TODO vim-wordmotion vs https://github.com/chrisgrieser/nvim-various-textobjs
|
# TODO vim-wordmotion vs https://github.com/chrisgrieser/nvim-various-textobjs
|
||||||
# TODO blankline cur indent too bright
|
# TODO blankline cur indent too bright
|
||||||
{
|
{
|
||||||
lib,
|
imports = [
|
||||||
pkgs,
|
./alpha.nix
|
||||||
...
|
./appearance.nix
|
||||||
}: {
|
./completion.nix
|
||||||
# TODO use programs.nixvim? and split stuff a little.
|
./git.nix
|
||||||
home.shellAliases.nixvim = lib.getExe (pkgs.nixvim.makeNixvim {
|
./globals.nix
|
||||||
# TODO away once we are ready to switch (prevents shada and undohist currently)
|
./languages.nix
|
||||||
package = pkgs.neovim-clean;
|
./lsp.nix
|
||||||
|
./misc.nix
|
||||||
|
./neo-tree.nix
|
||||||
|
./onedark.nix
|
||||||
|
./web-devicons.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.nixvim = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
# TODO for wayland:
|
# TODO for wayland:
|
||||||
# clipboard.providers.wl-copy.enable = true;
|
# clipboard.providers.wl-copy.enable = true;
|
||||||
|
@ -68,72 +74,7 @@
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
options = {
|
# TODO split into files
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
# General
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
undolevels = 1000000; # Set maximum undo levels
|
|
||||||
undofile = true; # Enable persistent undo which persists undo history across vim sessions
|
|
||||||
updatetime = 300; # Save swap file after 300ms
|
|
||||||
mouse = "a"; # Enable full mouse support
|
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
# Editor visuals
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
termguicolors = true; # Enable true color in terminals
|
|
||||||
|
|
||||||
splitkeep = "screen"; # Try not to move text when opening/closing splits
|
|
||||||
wrap = false; # Do not wrap text longer than the window's width
|
|
||||||
scrolloff = 2; # Keep 2 lines above and below the cursor.
|
|
||||||
sidescrolloff = 2; # Keep 2 lines left and right of the cursor.
|
|
||||||
|
|
||||||
number = true; # Show line numbers
|
|
||||||
cursorline = true; # Enable cursorline, colorscheme only shows this in number column
|
|
||||||
wildmode = ["list" "full"]; # Only complete the longest common prefix and list all results
|
|
||||||
fillchars = {stlnc = "─";}; # Show separators in inactive window statuslines
|
|
||||||
|
|
||||||
# FIXME: disabled because this really fucks everything up in the terminal.
|
|
||||||
title = false; # Sets the window title
|
|
||||||
# titlestring = "%t%( %M%)%( (%{expand(\"%:~:.:h\")})%) - nvim"; # The format for the window title
|
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
# Editing behavior
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
whichwrap = ""; # Never let the curser switch to the next line when reaching line end
|
|
||||||
ignorecase = true; # Ignore case in search by default
|
|
||||||
smartcase = true; # Be case sensitive when an upper-case character is included
|
|
||||||
|
|
||||||
expandtab = false;
|
|
||||||
tabstop = 4; # Set indentation of tabs to be equal to 4 spaces.
|
|
||||||
shiftwidth = 4;
|
|
||||||
softtabstop = 4;
|
|
||||||
shiftround = true; # Round indentation commands to next multiple of shiftwidth
|
|
||||||
|
|
||||||
# r = insert comment leader when hitting <Enter> in insert mode
|
|
||||||
# q = allow explicit formatting with gq
|
|
||||||
# j = remove comment leaders when joining lines if it makes sense
|
|
||||||
formatoptions = "rqj";
|
|
||||||
|
|
||||||
# Allow the curser to be positioned on cells that have no actual character;
|
|
||||||
# Like moving beyond EOL or on any visual 'space' of a tab character
|
|
||||||
virtualedit = "all";
|
|
||||||
selection = "old"; # Do not include line ends in past the-line selections
|
|
||||||
smartindent = true; # Use smart auto indenting for all file types
|
|
||||||
|
|
||||||
# Wait 500 milliseconds for characters to arrive in a mapped sequence.
|
|
||||||
# Afterwards, which-key will be opened
|
|
||||||
timeout = true;
|
|
||||||
timeoutlen = 500;
|
|
||||||
# Wait 20 (instead of 50) milliseconds for characters to arrive in the TUI.
|
|
||||||
ttimeout = true;
|
|
||||||
ttimeoutlen = 20;
|
|
||||||
|
|
||||||
grepprg = "rg --vimgrep --smart-case --follow"; # Replace grep with ripgrep
|
|
||||||
};
|
|
||||||
|
|
||||||
keymaps = let
|
keymaps = let
|
||||||
keymap = mode: key: action: desc: {
|
keymap = mode: key: action: desc: {
|
||||||
inherit action key mode;
|
inherit action key mode;
|
||||||
|
@ -262,677 +203,8 @@
|
||||||
|
|
||||||
# TODO: ... keybinds + telescope integration
|
# TODO: ... keybinds + telescope integration
|
||||||
];
|
];
|
||||||
|
|
||||||
plugins = {
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
# Library plugins
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
notify = {
|
|
||||||
enable = true;
|
|
||||||
stages = "static";
|
|
||||||
render.__raw = ''"compact"'';
|
|
||||||
icons = {
|
|
||||||
debug = "";
|
|
||||||
error = "";
|
|
||||||
info = "";
|
|
||||||
trace = "";
|
|
||||||
warn = "";
|
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
# Appearance
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# Statusline
|
|
||||||
lualine = {
|
|
||||||
enable = true;
|
|
||||||
extensions = ["fzf" "nvim-dap-ui" "symbols-outline" "trouble" "neo-tree" "quickfix" "fugitive"];
|
|
||||||
componentSeparators = null;
|
|
||||||
# componentSeparators.left = "|";
|
|
||||||
# componentSeparators.right = "|";
|
|
||||||
# sectionSeparators.left = "";
|
|
||||||
# sectionSeparators.right = "";
|
|
||||||
sections = {
|
|
||||||
lualine_a = ["mode"];
|
|
||||||
lualine_b = ["branch" "filename"];
|
|
||||||
lualine_c = ["diff" "diagnostics"];
|
|
||||||
lualine_x = ["encoding" "fileformat" "filetype"];
|
|
||||||
lualine_y = ["progress"];
|
|
||||||
lualine_z = ["location"];
|
|
||||||
};
|
|
||||||
inactiveSections = {
|
|
||||||
lualine_a = ["filename"];
|
|
||||||
lualine_b = [];
|
|
||||||
lualine_c = ["diagnostics"];
|
|
||||||
lualine_x = [];
|
|
||||||
lualine_y = [];
|
|
||||||
lualine_z = ["location"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Line indentation markers
|
|
||||||
indent-blankline.enable = true;
|
|
||||||
|
|
||||||
# Rainbow parentheses
|
|
||||||
rainbow-delimiters.enable = true;
|
|
||||||
|
|
||||||
# Status updates for LSP progress in right bottom corner.
|
|
||||||
fidget.enable = true;
|
|
||||||
# Show colors
|
|
||||||
nvim-colorizer.enable = true;
|
|
||||||
|
|
||||||
# Breadcrumbs
|
|
||||||
# TODO navic.enable = true; or dropbar?
|
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
# Language support
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
treesitter = {
|
|
||||||
enable = true;
|
|
||||||
# TODO (autocmd * zR needed) folding = true;
|
|
||||||
indent = true;
|
|
||||||
|
|
||||||
incrementalSelection = {
|
|
||||||
enable = true;
|
|
||||||
keymaps = {
|
|
||||||
initSelection = "<C-Space>";
|
|
||||||
nodeIncremental = "<C-Space>";
|
|
||||||
scopeIncremental = "<C-S-Space>";
|
|
||||||
nodeDecremental = "<C-B>";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
nixvimInjections = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Show the current function / context in topmost line
|
|
||||||
treesitter-context.enable = true;
|
|
||||||
|
|
||||||
# Cargo.toml dependency completion
|
|
||||||
crates-nvim = {
|
|
||||||
enable = true;
|
|
||||||
extraOptions = {
|
|
||||||
src.cmp.enabled = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Rust specific LSP tools
|
|
||||||
rust-tools = {
|
|
||||||
enable = true;
|
|
||||||
server.check.command = "clippy";
|
|
||||||
};
|
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
# Editing
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# Commenting
|
|
||||||
comment-nvim.enable = true;
|
|
||||||
# Extend vim's "%" key
|
|
||||||
vim-matchup.enable = true;
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------------------------------
|
|
||||||
# Functionality
|
|
||||||
# ----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# Fzf picker for arbitrary stuff
|
|
||||||
telescope = {
|
|
||||||
enable = true;
|
|
||||||
enabledExtensions = ["fzf" "notify" "ui-select"];
|
|
||||||
extensions.fzf-native.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Startup screen
|
|
||||||
alpha = {
|
|
||||||
enable = true;
|
|
||||||
layout = let
|
|
||||||
padding = val: {
|
|
||||||
type = "padding";
|
|
||||||
inherit val;
|
|
||||||
};
|
|
||||||
in [
|
|
||||||
(padding 2)
|
|
||||||
{
|
|
||||||
opts = {
|
|
||||||
hl = "Type";
|
|
||||||
position = "center";
|
|
||||||
};
|
|
||||||
type = "text";
|
|
||||||
val = [
|
|
||||||
" ███╗ ██╗██╗██╗ ██╗██╗ ██╗██╗███╗ ███╗ "
|
|
||||||
" ████╗ ██║██║╚██╗██╔╝██║ ██║██║████╗ ████║ "
|
|
||||||
" ██╔██╗ ██║██║ ╚███╔╝ ██║ ██║██║██╔████╔██║ "
|
|
||||||
" ██║╚██╗██║██║ ██╔██╗ ╚██╗ ██╔╝██║██║╚██╔╝██║ "
|
|
||||||
" ██║ ╚████║██║██╔╝ ██╗ ╚████╔╝ ██║██║ ╚═╝ ██║ "
|
|
||||||
" ╚═╝ ╚═══╝╚═╝╚═╝ ╚═╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ "
|
|
||||||
];
|
|
||||||
}
|
|
||||||
(padding 2)
|
|
||||||
{
|
|
||||||
type = "group";
|
|
||||||
opts.spacing = 1;
|
|
||||||
val = [
|
|
||||||
{
|
|
||||||
command = ":enew<CR>";
|
|
||||||
desc = " New file";
|
|
||||||
shortcut = "e";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
command = ":qa<CR>";
|
|
||||||
desc = " Quit Neovim";
|
|
||||||
shortcut = "q";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Filebrowser
|
|
||||||
neo-tree = {
|
|
||||||
enable = true;
|
|
||||||
sortCaseInsensitive = true;
|
|
||||||
usePopupsForInput = false;
|
|
||||||
popupBorderStyle = "rounded";
|
|
||||||
# TODO window_opts.winblend = 0;
|
|
||||||
window = {
|
|
||||||
width = 34;
|
|
||||||
position = "left";
|
|
||||||
mappings = {
|
|
||||||
"<CR>" = "open_with_window_picker";
|
|
||||||
"s" = "split_with_window_picker";
|
|
||||||
"v" = "vsplit_with_window_picker";
|
|
||||||
"t" = "open_tabnew";
|
|
||||||
"z" = "close_all_nodes";
|
|
||||||
"Z" = "expand_all_nodes";
|
|
||||||
"a".__raw = ''{ "add", config = { show_path = "relative" } }'';
|
|
||||||
"A".__raw = ''{ "add_directory", config = { show_path = "relative" } }'';
|
|
||||||
"c".__raw = ''{ "copy", config = { show_path = "relative" } }'';
|
|
||||||
"m".__raw = ''{ "move", config = { show_path = "relative" } }'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
defaultComponentConfigs = {
|
|
||||||
modified.symbol = "~ ";
|
|
||||||
indent.withExpanders = true;
|
|
||||||
name.trailingSlash = true;
|
|
||||||
gitStatus.symbols = {
|
|
||||||
added = "+";
|
|
||||||
deleted = "✖";
|
|
||||||
modified = "";
|
|
||||||
renamed = "➜";
|
|
||||||
untracked = "?";
|
|
||||||
ignored = "";
|
|
||||||
unstaged = ""; #
|
|
||||||
staged = "";
|
|
||||||
conflict = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
filesystem = {
|
|
||||||
window.mappings = {
|
|
||||||
"gA" = "git_add_all";
|
|
||||||
"ga" = "git_add_file";
|
|
||||||
"gu" = "git_unstage_file";
|
|
||||||
};
|
|
||||||
groupEmptyDirs = true;
|
|
||||||
followCurrentFile.enabled = true;
|
|
||||||
useLibuvFileWatcher = true;
|
|
||||||
filteredItems = {
|
|
||||||
hideDotfiles = false;
|
|
||||||
hideByName = [".git"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Undo tree
|
|
||||||
undotree = {
|
|
||||||
enable = true;
|
|
||||||
focusOnToggle = true;
|
|
||||||
windowLayout = 4;
|
|
||||||
};
|
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
# Git
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# Git status in signcolumn
|
|
||||||
gitsigns.enable = true;
|
|
||||||
|
|
||||||
# Git commands
|
|
||||||
fugitive.enable = true;
|
|
||||||
|
|
||||||
diffview.enable = true;
|
|
||||||
|
|
||||||
# Manage git from within neovim
|
|
||||||
neogit = {
|
|
||||||
enable = true;
|
|
||||||
disableBuiltinNotifications = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
# Completion
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
lsp = {
|
|
||||||
enable = true;
|
|
||||||
preConfig = ''
|
|
||||||
local lsp_symbol = function(name, icon)
|
|
||||||
vim.fn.sign_define(
|
|
||||||
"DiagnosticSign" .. name,
|
|
||||||
{ text = icon, numhl = "Diagnostic" .. name, texthl = "Diagnostic" .. name }
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
lsp_symbol("Error", "")
|
|
||||||
lsp_symbol("Info", "")
|
|
||||||
lsp_symbol("Hint", "")
|
|
||||||
lsp_symbol("Warn", "")
|
|
||||||
'';
|
|
||||||
servers = {
|
|
||||||
bashls.enable = true;
|
|
||||||
cssls.enable = true;
|
|
||||||
html.enable = true;
|
|
||||||
lua-ls.enable = true;
|
|
||||||
rust-analyzer = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
checkOnSave = true;
|
|
||||||
check.command = "clippy";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
nil_ls = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
formatting.command = [(lib.getExe pkgs.alejandra) "--quiet"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
nixd.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
#keymaps = {
|
|
||||||
# diagnostic = {
|
|
||||||
# "<leader>k" = "goto_prev";
|
|
||||||
# "<leader>j" = "goto_next";
|
|
||||||
# };
|
|
||||||
# lspBuf = {
|
|
||||||
# "gd" = "definition";
|
|
||||||
# "gD" = "references";
|
|
||||||
# "<leader>lt" = "type_definition";
|
|
||||||
# "gi" = "implementation";
|
|
||||||
# "K" = "hover";
|
|
||||||
# "<leader>k" = "hover";
|
|
||||||
# "<leader>r" = "rename";
|
|
||||||
# };
|
|
||||||
#};
|
|
||||||
};
|
|
||||||
|
|
||||||
none-ls = {
|
|
||||||
enable = true;
|
|
||||||
sources = {
|
|
||||||
code_actions = {
|
|
||||||
# gitsigns.enable = true;
|
|
||||||
shellcheck.enable = true;
|
|
||||||
};
|
|
||||||
diagnostics = {
|
|
||||||
deadnix.enable = true;
|
|
||||||
gitlint.enable = true;
|
|
||||||
luacheck.enable = true;
|
|
||||||
protolint.enable = true;
|
|
||||||
shellcheck.enable = true;
|
|
||||||
};
|
|
||||||
formatting = {
|
|
||||||
alejandra.enable = true;
|
|
||||||
jq.enable = true;
|
|
||||||
markdownlint.enable = true;
|
|
||||||
rustfmt.enable = true;
|
|
||||||
sqlfluff.enable = true;
|
|
||||||
shfmt.enable = true;
|
|
||||||
stylua.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
luasnip = {
|
|
||||||
enable = true;
|
|
||||||
extraConfig = {
|
|
||||||
history = true;
|
|
||||||
# Update dynamic snippets while typing
|
|
||||||
updateevents = "TextChanged,TextChangedI";
|
|
||||||
enable_autosnippets = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
cmp_luasnip.enable = true;
|
|
||||||
cmp-cmdline.enable = true;
|
|
||||||
cmp-cmdline-history.enable = true;
|
|
||||||
cmp-path.enable = true;
|
|
||||||
cmp-emoji.enable = true;
|
|
||||||
cmp-treesitter.enable = true;
|
|
||||||
cmp-nvim-lsp.enable = true;
|
|
||||||
cmp-nvim-lsp-document-symbol.enable = true;
|
|
||||||
cmp-nvim-lsp-signature-help.enable = true;
|
|
||||||
nvim-cmp = {
|
|
||||||
enable = true;
|
|
||||||
sources = [
|
|
||||||
{name = "nvim_lsp_signature_help";}
|
|
||||||
{name = "nvim_lsp";}
|
|
||||||
{name = "nvim_lsp_document_symbol";}
|
|
||||||
{name = "path";}
|
|
||||||
{name = "treesitter";}
|
|
||||||
{name = "luasnip";}
|
|
||||||
{name = "emoji";}
|
|
||||||
];
|
|
||||||
mappingPresets = ["insert"];
|
|
||||||
mapping = {
|
|
||||||
"<CR>" = ''
|
|
||||||
cmp.mapping.confirm({
|
|
||||||
behavior = cmp.ConfirmBehavior.Replace,
|
|
||||||
select = false,
|
|
||||||
})
|
|
||||||
'';
|
|
||||||
"<C-d>" = "cmp.mapping.scroll_docs(-4)";
|
|
||||||
"<C-f>" = "cmp.mapping.scroll_docs(4)";
|
|
||||||
"<C-e>" = "cmp.mapping.abort()";
|
|
||||||
"<Tab>" = {
|
|
||||||
modes = ["i" "s"];
|
|
||||||
action = ''
|
|
||||||
function(fallback)
|
|
||||||
local has_words_before = function()
|
|
||||||
local line, col = table.unpack(vim.api.nvim_win_get_cursor(0))
|
|
||||||
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match "%s" == nil
|
|
||||||
end
|
|
||||||
|
|
||||||
if cmp.visible() then
|
|
||||||
cmp.select_next_item()
|
|
||||||
elseif require("luasnip").expandable() then
|
|
||||||
require("luasnip").expand()
|
|
||||||
elseif require("luasnip").expand_or_locally_jumpable() then
|
|
||||||
require("luasnip").expand_or_jump()
|
|
||||||
elseif has_words_before() then
|
|
||||||
cmp.complete()
|
|
||||||
else
|
|
||||||
fallback()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
"<S-Tab>" = {
|
|
||||||
modes = ["i" "s"];
|
|
||||||
action = ''
|
|
||||||
function(fallback)
|
|
||||||
if cmp.visible() then
|
|
||||||
cmp.select_prev_item()
|
|
||||||
elseif luasnip.jumpable(-1) then
|
|
||||||
luasnip.jump(-1)
|
|
||||||
else
|
|
||||||
fallback()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
formatting.fields = ["abbr" "kind" "menu"];
|
|
||||||
formatting.format = ''
|
|
||||||
function(_, vim_item)
|
|
||||||
local icons = {
|
|
||||||
Namespace = "",
|
|
||||||
Text = "",
|
|
||||||
Method = "",
|
|
||||||
Function = "",
|
|
||||||
Constructor = "",
|
|
||||||
Field = "",
|
|
||||||
Variable = "",
|
|
||||||
Class = "",
|
|
||||||
Interface = "",
|
|
||||||
Module = "",
|
|
||||||
Property = "",
|
|
||||||
Unit = "",
|
|
||||||
Value = "",
|
|
||||||
Enum = "",
|
|
||||||
Keyword = "",
|
|
||||||
Snippet = "",
|
|
||||||
Color = "",
|
|
||||||
File = "",
|
|
||||||
Reference = "",
|
|
||||||
Folder = "",
|
|
||||||
EnumMember = "",
|
|
||||||
Constant = "",
|
|
||||||
Struct = "",
|
|
||||||
Event = "",
|
|
||||||
Operator = "",
|
|
||||||
TypeParameter = "",
|
|
||||||
Table = "",
|
|
||||||
Object = "",
|
|
||||||
Tag = "",
|
|
||||||
Array = "",
|
|
||||||
Boolean = "",
|
|
||||||
Number = "",
|
|
||||||
Null = "",
|
|
||||||
String = "",
|
|
||||||
Calendar = "",
|
|
||||||
Watch = "",
|
|
||||||
Package = "",
|
|
||||||
Copilot = "",
|
|
||||||
Codeium = "",
|
|
||||||
TabNine = "",
|
|
||||||
}
|
|
||||||
vim_item.kind = string.format("%s %s", icons[vim_item.kind], vim_item.kind)
|
|
||||||
return vim_item
|
|
||||||
end
|
|
||||||
'';
|
|
||||||
snippet.expand = "luasnip";
|
|
||||||
};
|
|
||||||
|
|
||||||
# TODO use "ray-x/lsp_signature.nvim"
|
|
||||||
|
|
||||||
# TODO dap.enable = true;
|
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
# Miscellaneous
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# Quickfix menu
|
|
||||||
trouble.enable = true;
|
|
||||||
# Highlight certain keywords
|
|
||||||
todo-comments.enable = true;
|
|
||||||
# TODO use { "liuchengxu/vista.vim", cmd = "Vista" }
|
|
||||||
which-key.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
extraPlugins = with pkgs.vimPlugins; [
|
|
||||||
# navarasu's one dark
|
|
||||||
onedark-nvim
|
|
||||||
telescope-ui-select-nvim
|
|
||||||
nvim-web-devicons
|
|
||||||
nvim-window-picker
|
|
||||||
# Replace built-in LSP prompts and windows
|
|
||||||
dressing-nvim
|
|
||||||
# Multicursor
|
|
||||||
vim-visual-multi
|
|
||||||
# Show invalid whitespace
|
|
||||||
vim-better-whitespace
|
|
||||||
# Show latex math equations
|
|
||||||
nabla-nvim
|
|
||||||
# Modify Surrounding things like parenthesis and quotes
|
|
||||||
vim-sandwich
|
|
||||||
# TODO mini.align better?
|
|
||||||
vim-easy-align
|
|
||||||
# Case changer
|
|
||||||
text-case-nvim
|
|
||||||
# camelcase (and similar) word motions and textobjects
|
|
||||||
vim-wordmotion
|
|
||||||
# Gpg integration
|
|
||||||
vim-gnupg
|
|
||||||
# TODO temporary
|
|
||||||
vim-startuptime
|
|
||||||
];
|
|
||||||
|
|
||||||
extraConfigLuaPre = ''
|
|
||||||
vim.g.operator_sandwich_no_default_key_mappings = 1
|
|
||||||
vim.g.textobj_sandwich_no_default_key_mappings = 1
|
|
||||||
|
|
||||||
vim.g.wordmotion_nomap = 1
|
|
||||||
'';
|
|
||||||
|
|
||||||
extraConfigLua = ''
|
|
||||||
local onedark = require "onedark"
|
|
||||||
onedark.setup {
|
|
||||||
toggle_style_key = "<nop>",
|
|
||||||
colors = {
|
|
||||||
fg = "#abb2bf",
|
|
||||||
black = "#181a1f",
|
|
||||||
bg0 = "#1e222a",
|
|
||||||
bg1 = "#252931",
|
|
||||||
bg2 = "#282c34",
|
|
||||||
bg3 = "#353b45",
|
|
||||||
bg_d = "#191c21",
|
|
||||||
bg_blue = "#73b8f1",
|
|
||||||
bg_yellow = "#ebd09c",
|
|
||||||
|
|
||||||
dark_cyan = "#2b6f77",
|
|
||||||
dark_red = "#993939",
|
|
||||||
dark_yellow = "#93691d",
|
|
||||||
|
|
||||||
grey = "#42464e",
|
|
||||||
grey_fg = "#565c64",
|
|
||||||
grey_fg2 = "#6f737b",
|
|
||||||
light_grey = "#6f737b",
|
|
||||||
baby_pink = "#de8c92",
|
|
||||||
pink = "#ff75a0",
|
|
||||||
nord_blue = "#81a1c1",
|
|
||||||
sun = "#ebcb8b",
|
|
||||||
light_purple = "#de98fd",
|
|
||||||
dark_purple = "#c882e7",
|
|
||||||
teal = "#519aba",
|
|
||||||
dark_pink = "#fca2aa",
|
|
||||||
light_blue = "#a3b8ef",
|
|
||||||
vibrant_green = "#7eca9c",
|
|
||||||
|
|
||||||
red = "#e06c75",
|
|
||||||
orange = "#d19a66",
|
|
||||||
yellow = "#e5c07b",
|
|
||||||
green = "#98c379",
|
|
||||||
cyan = "#56b6c2",
|
|
||||||
blue = "#61afef",
|
|
||||||
purple = "#c678dd",
|
|
||||||
|
|
||||||
diff_add = "#31392b",
|
|
||||||
diff_delete = "#382b2c",
|
|
||||||
diff_change = "#1c3448",
|
|
||||||
diff_text = "#2c5372",
|
|
||||||
},
|
|
||||||
highlights = {
|
|
||||||
CursorLine = { bg = "$bg0" },
|
|
||||||
FloatBorder = { fg = "$blue" },
|
|
||||||
NeoTreeTabActive = { fg = "$fg", bg = "$bg_d" },
|
|
||||||
NeoTreeTabInactive = { fg = "$grey", bg = "$black" },
|
|
||||||
NeoTreeTabSeparatorActive = { fg = "$black", bg = "$black" },
|
|
||||||
NeoTreeTabSeparatorInactive = { fg = "$black", bg = "$black" },
|
|
||||||
NeoTreeWinSeparator = { fg = "$bg_d", bg = "$bg_d" },
|
|
||||||
NeoTreeVertSplit = { fg = "$bg_d", bg = "$bg_d" },
|
|
||||||
VisualMultiMono = { fg = "$purple", bg = "$diff_change" },
|
|
||||||
VisualMultiExtend = { bg = "$diff_change" },
|
|
||||||
VisualMultiCursor = { fg = "$purple", bg = "$diff_change" },
|
|
||||||
VisualMultiInsert = { fg = "$blue", bg = "$diff_change" },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
vim.g.VM_Mono_hl = "VisualMultiMono"
|
|
||||||
vim.g.VM_Extend_hl = "VisualMultiExtend"
|
|
||||||
vim.g.VM_Cursor_hl = "VisualMultiCursor"
|
|
||||||
vim.g.VM_Insert_hl = "VisualMultiInsert"
|
|
||||||
onedark.load()
|
|
||||||
'';
|
|
||||||
|
|
||||||
extraConfigLuaPost = ''
|
|
||||||
require("nvim-web-devicons").setup {
|
|
||||||
override = {
|
|
||||||
default_icon = { icon = "", name = "Default", },
|
|
||||||
c = { icon = "", name = "c", },
|
|
||||||
css = { icon = "", name = "css", },
|
|
||||||
dart = { icon = "", name = "dart", },
|
|
||||||
deb = { icon = "", name = "deb", },
|
|
||||||
Dockerfile = { icon = "", name = "Dockerfile", },
|
|
||||||
html = { icon = "", name = "html", },
|
|
||||||
jpeg = { icon = "", name = "jpeg", },
|
|
||||||
jpg = { icon = "", name = "jpg", },
|
|
||||||
js = { icon = "", name = "js", },
|
|
||||||
kt = { icon = "", name = "kt", },
|
|
||||||
lock = { icon = "", name = "lock", },
|
|
||||||
lua = { icon = "", name = "lua", },
|
|
||||||
mp3 = { icon = "", name = "mp3", },
|
|
||||||
mp4 = { icon = "", name = "mp4", },
|
|
||||||
out = { icon = "", name = "out", },
|
|
||||||
png = { icon = "", name = "png", },
|
|
||||||
py = { icon = "", name = "py", },
|
|
||||||
["robots.txt"] = { icon = "", name = "robots", },
|
|
||||||
toml = { icon = "", name = "toml", },
|
|
||||||
ts = { icon = "", name = "ts", },
|
|
||||||
ttf = { icon = "", name = "TrueTypeFont", },
|
|
||||||
rb = { icon = "", name = "rb", },
|
|
||||||
rpm = { icon = "", name = "rpm", },
|
|
||||||
vue = { icon = "", name = "vue", },
|
|
||||||
woff = { icon = "", name = "WebOpenFontFormat", },
|
|
||||||
woff2 = { icon = "", name = "WebOpenFontFormat2", },
|
|
||||||
xz = { icon = "", name = "xz", },
|
|
||||||
zip = { icon = "", name = "zip", },
|
|
||||||
},
|
|
||||||
default = true,
|
|
||||||
}
|
|
||||||
|
|
||||||
local cmp = require "cmp"
|
|
||||||
cmp.setup.cmdline(":", {
|
|
||||||
mapping = cmp.mapping.preset.cmdline(),
|
|
||||||
sources = {
|
|
||||||
{ name = "cmdline" },
|
|
||||||
{ name = "cmp-cmdline-history" },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
require("window-picker").setup {
|
|
||||||
hint = "floating-big-letter",
|
|
||||||
filter_rules = {
|
|
||||||
bo = {
|
|
||||||
filetype = { "neo-tree", "neo-tree-popup", "notify", "quickfix" },
|
|
||||||
buftype = { "terminal", "quickfix", "prompt" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
floating_big_letter = {
|
|
||||||
font = "ansi-shadow",
|
|
||||||
},
|
|
||||||
selection_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
|
||||||
show_prompt = false,
|
|
||||||
}
|
|
||||||
|
|
||||||
require("dressing").setup {
|
|
||||||
input = {
|
|
||||||
prefer_width = 80,
|
|
||||||
max_width = { 140, 0.9 },
|
|
||||||
min_width = { 80, 0.6 },
|
|
||||||
win_options = {
|
|
||||||
winblend = 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
|
|
||||||
home.packages = let
|
|
||||||
nvimConfig = pkgs.neovimUtils.makeNeovimConfig {
|
|
||||||
wrapRc = false;
|
|
||||||
withPython3 = true;
|
|
||||||
withRuby = true;
|
|
||||||
withNodeJs = true;
|
|
||||||
extraPython3Packages = p: with p; [openai];
|
|
||||||
};
|
|
||||||
in [(pkgs.wrapNeovimUnstable pkgs.neovim-unwrapped nvimConfig)];
|
|
||||||
|
|
||||||
home.sessionVariables.EDITOR = "nvim";
|
home.sessionVariables.EDITOR = "nvim";
|
||||||
home.shellAliases.vimdiff = "nvim -d";
|
home.shellAliases.vimdiff = "nvim -d";
|
||||||
|
|
||||||
xdg.configFile = {
|
|
||||||
"nvim/ftplugin".source = ./ftplugin;
|
|
||||||
"nvim/init.lua".source = ./init.lua;
|
|
||||||
"nvim/lua".source = ./lua;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
vim.opt_local.expandtab = true
|
|
||||||
vim.opt_local.tabstop = 2
|
|
||||||
vim.opt_local.shiftwidth = 2
|
|
||||||
vim.opt_local.softtabstop = 2
|
|
17
users/myuser/neovim/git.nix
Normal file
17
users/myuser/neovim/git.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
programs.nixvim.plugins = {
|
||||||
|
# Git status in signcolumn
|
||||||
|
gitsigns.enable = true;
|
||||||
|
|
||||||
|
# Git commands
|
||||||
|
fugitive.enable = true;
|
||||||
|
|
||||||
|
diffview.enable = true;
|
||||||
|
|
||||||
|
# Manage git from within neovim
|
||||||
|
neogit = {
|
||||||
|
enable = true;
|
||||||
|
disableBuiltinNotifications = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
67
users/myuser/neovim/globals.nix
Normal file
67
users/myuser/neovim/globals.nix
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
{
|
||||||
|
programs.nixvim.options = {
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# General
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
undolevels = 1000000; # Set maximum undo levels
|
||||||
|
undofile = true; # Enable persistent undo which persists undo history across vim sessions
|
||||||
|
updatetime = 300; # Save swap file after 300ms
|
||||||
|
mouse = "a"; # Enable full mouse support
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Editor visuals
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
termguicolors = true; # Enable true color in terminals
|
||||||
|
|
||||||
|
splitkeep = "screen"; # Try not to move text when opening/closing splits
|
||||||
|
wrap = false; # Do not wrap text longer than the window's width
|
||||||
|
scrolloff = 2; # Keep 2 lines above and below the cursor.
|
||||||
|
sidescrolloff = 2; # Keep 2 lines left and right of the cursor.
|
||||||
|
|
||||||
|
number = true; # Show line numbers
|
||||||
|
cursorline = true; # Enable cursorline, colorscheme only shows this in number column
|
||||||
|
wildmode = ["list" "full"]; # Only complete the longest common prefix and list all results
|
||||||
|
fillchars = {stlnc = "─";}; # Show separators in inactive window statuslines
|
||||||
|
|
||||||
|
# FIXME: disabled because this really fucks everything up in the terminal.
|
||||||
|
title = false; # Sets the window title
|
||||||
|
# titlestring = "%t%( %M%)%( (%{expand(\"%:~:.:h\")})%) - nvim"; # The format for the window title
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Editing behavior
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
whichwrap = ""; # Never let the curser switch to the next line when reaching line end
|
||||||
|
ignorecase = true; # Ignore case in search by default
|
||||||
|
smartcase = true; # Be case sensitive when an upper-case character is included
|
||||||
|
|
||||||
|
expandtab = false;
|
||||||
|
tabstop = 4; # Set indentation of tabs to be equal to 4 spaces.
|
||||||
|
shiftwidth = 4;
|
||||||
|
softtabstop = 4;
|
||||||
|
shiftround = true; # Round indentation commands to next multiple of shiftwidth
|
||||||
|
|
||||||
|
# r = insert comment leader when hitting <Enter> in insert mode
|
||||||
|
# q = allow explicit formatting with gq
|
||||||
|
# j = remove comment leaders when joining lines if it makes sense
|
||||||
|
formatoptions = "rqj";
|
||||||
|
|
||||||
|
# Allow the curser to be positioned on cells that have no actual character;
|
||||||
|
# Like moving beyond EOL or on any visual 'space' of a tab character
|
||||||
|
virtualedit = "all";
|
||||||
|
selection = "old"; # Do not include line ends in past the-line selections
|
||||||
|
smartindent = true; # Use smart auto indenting for all file types
|
||||||
|
|
||||||
|
# Wait 500 milliseconds for characters to arrive in a mapped sequence.
|
||||||
|
# Afterwards, which-key will be opened
|
||||||
|
timeout = true;
|
||||||
|
timeoutlen = 500;
|
||||||
|
# Wait 20 (instead of 50) milliseconds for characters to arrive in the TUI.
|
||||||
|
ttimeout = true;
|
||||||
|
ttimeoutlen = 20;
|
||||||
|
|
||||||
|
grepprg = "rg --vimgrep --smart-case --follow"; # Replace grep with ripgrep
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,175 +0,0 @@
|
||||||
pcall(require, "impatient")
|
|
||||||
require "options"
|
|
||||||
require "keymaps"
|
|
||||||
|
|
||||||
-- TODO: this should be in treesitter.lua, but it doesn't work there.
|
|
||||||
-- Something is overriding it.
|
|
||||||
-- Use treesitter to determine folds, and always start unfolded.
|
|
||||||
-- FIXME: disabled because extremely slow. apparently called for each line.
|
|
||||||
--vim.opt.foldlevelstart = 99
|
|
||||||
--vim.opt.foldmethod = 'expr'
|
|
||||||
--vim.opt.foldexpr = 'nvim_treesitter#foldexpr()'
|
|
||||||
|
|
||||||
local function conf_module(module)
|
|
||||||
return "require('plugins." .. module .. "')"
|
|
||||||
end
|
|
||||||
local function conf_setup(module)
|
|
||||||
return "require('" .. module .. "').setup(require('plugins.others')['" .. module .. "'] or {})"
|
|
||||||
end
|
|
||||||
local function conf_fn(module)
|
|
||||||
return "require('plugins.others')['" .. module .. "']()"
|
|
||||||
end
|
|
||||||
local bootstrap = require "utils.bootstrap"
|
|
||||||
local packer_bootstrap = bootstrap.ensure_packer()
|
|
||||||
local packer = require "packer"
|
|
||||||
|
|
||||||
return packer.startup(function(use)
|
|
||||||
use "wbthomason/packer.nvim" -- Packer can manage itself
|
|
||||||
use "lewis6991/impatient.nvim" -- Lua module cache
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Library plugins
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
-- Utility functions
|
|
||||||
use "nvim-lua/plenary.nvim"
|
|
||||||
use "nvim-lua/popup.nvim"
|
|
||||||
use "MunifTanjim/nui.nvim"
|
|
||||||
-- Notifications (should be early)
|
|
||||||
use { "rcarriga/nvim-notify", config = conf_fn "notify" }
|
|
||||||
-- Icon definitions for use in other plugins
|
|
||||||
use { "kyazdani42/nvim-web-devicons", config = conf_fn "nvim-web-devicons" }
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Appearance
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
-- Colorscheme
|
|
||||||
use { "navarasu/onedark.nvim", config = conf_fn "onedark" }
|
|
||||||
-- Statusline
|
|
||||||
use { "nvim-lualine/lualine.nvim", config = conf_fn "lualine", after = "onedark.nvim" }
|
|
||||||
-- Colored parentheses
|
|
||||||
use "p00f/nvim-ts-rainbow"
|
|
||||||
-- Line indentation markers
|
|
||||||
use { "lukas-reineke/indent-blankline.nvim", config = conf_setup "indent_blankline" }
|
|
||||||
-- Show invalid whitespace
|
|
||||||
use { "ntpeters/vim-better-whitespace", config = conf_fn "better-whitespace" }
|
|
||||||
-- Git status in signcolumn
|
|
||||||
use { "lewis6991/gitsigns.nvim", config = conf_module "gitsigns" }
|
|
||||||
-- Replace built-in LSP prompts and windows
|
|
||||||
use { "stevearc/dressing.nvim", config = conf_setup "dressing" }
|
|
||||||
-- Status updates for LSP progress in right bottom corner.
|
|
||||||
use { "j-hui/fidget.nvim", after = "nvim-lspconfig", config = conf_setup "fidget", tag = "legacy" }
|
|
||||||
-- Show latex math equations
|
|
||||||
use { "jbyuki/nabla.nvim", config = conf_fn "nabla" }
|
|
||||||
-- Show colors
|
|
||||||
use { "norcalli/nvim-colorizer.lua", config = conf_setup "colorizer" }
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Language support
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
-- Syntax parsing
|
|
||||||
use { "nvim-treesitter/nvim-treesitter", run = ":TSUpdate", config = conf_module "treesitter" }
|
|
||||||
use { "nvim-treesitter/playground", after = "nvim-treesitter" }
|
|
||||||
-- Rust specific tools
|
|
||||||
use { "simrat39/rust-tools.nvim", before = "nvim-lspconfig" }
|
|
||||||
-- Language server configurations
|
|
||||||
use { "neovim/nvim-lspconfig", config = conf_module "lspconfig" }
|
|
||||||
-- Neovim as an additional language server
|
|
||||||
use { "jose-elias-alvarez/null-ls.nvim", config = conf_fn "null-ls" }
|
|
||||||
-- Nushell syntax via treesitter
|
|
||||||
use {
|
|
||||||
"LhKipp/nvim-nu",
|
|
||||||
run = ":TSInstall nu",
|
|
||||||
config = function()
|
|
||||||
require("nu").setup {}
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Editing
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
-- Multicursor
|
|
||||||
use { "mg979/vim-visual-multi" }
|
|
||||||
-- Commenting
|
|
||||||
use { "numToStr/Comment.nvim", config = conf_setup "Comment" }
|
|
||||||
-- Modify Surrounding things like parenthesis and quotes
|
|
||||||
use { "machakann/vim-sandwich", config = conf_fn "sandwich" }
|
|
||||||
-- Extend vim's "%" key
|
|
||||||
use "andymass/vim-matchup"
|
|
||||||
-- Align
|
|
||||||
use "junegunn/vim-easy-align"
|
|
||||||
-- Move blocks
|
|
||||||
use { "booperlv/nvim-gomove", config = conf_setup "gomove" }
|
|
||||||
-- Case changer
|
|
||||||
use "johmsalas/text-case.nvim"
|
|
||||||
-- camelcase (and similar) word motions and textobjects
|
|
||||||
use { "chaoren/vim-wordmotion", config = conf_fn "wordmotion" }
|
|
||||||
-- Respect editor-config files
|
|
||||||
use { "gpanders/editorconfig.nvim" }
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Functionality
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
-- Startup screen
|
|
||||||
use { "goolord/alpha-nvim", config = conf_module "alpha" }
|
|
||||||
-- Window Picker
|
|
||||||
use { "s1n7ax/nvim-window-picker", tag = "v1.*", config = conf_setup "window-picker" }
|
|
||||||
-- Filebrowser
|
|
||||||
use { "nvim-neo-tree/neo-tree.nvim", branch = "main", config = conf_module "neo-tree" }
|
|
||||||
-- Telescope fzf native
|
|
||||||
use { "nvim-telescope/telescope-fzf-native.nvim", run = "make" }
|
|
||||||
-- Anything Picker
|
|
||||||
use {
|
|
||||||
"nvim-telescope/telescope.nvim",
|
|
||||||
config = conf_module "telescope",
|
|
||||||
after = { "telescope-fzf-native.nvim", "nvim-notify" },
|
|
||||||
}
|
|
||||||
-- Git integration
|
|
||||||
use "tpope/vim-fugitive"
|
|
||||||
use "sindrets/diffview.nvim"
|
|
||||||
use { "TimUntersberger/neogit", config = conf_setup "neogit" }
|
|
||||||
-- Undo tree
|
|
||||||
use { "mbbill/undotree", config = conf_fn "undotree" }
|
|
||||||
-- Gpg integration
|
|
||||||
use "jamessan/vim-gnupg"
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Completion
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
-- Snippet engine
|
|
||||||
use { "L3MON4D3/LuaSnip", tag = "v1.*" }
|
|
||||||
-- Completion engine
|
|
||||||
use { "hrsh7th/nvim-cmp", config = conf_module "cmp", after = "LuaSnip" }
|
|
||||||
-- Luasnip completion source
|
|
||||||
use { "saadparwaiz1/cmp_luasnip", after = "nvim-cmp" }
|
|
||||||
-- Internal LSP completion source
|
|
||||||
use { "hrsh7th/cmp-nvim-lsp", after = "cmp_luasnip" }
|
|
||||||
-- Buffer words completion source
|
|
||||||
use { "hrsh7th/cmp-buffer", after = "cmp_luasnip" }
|
|
||||||
-- Cmdline completion source
|
|
||||||
use { "hrsh7th/cmp-cmdline", after = "cmp_luasnip" }
|
|
||||||
-- path completion source
|
|
||||||
use { "hrsh7th/cmp-path", after = "cmp_luasnip" }
|
|
||||||
-- emoji completion source
|
|
||||||
use { "hrsh7th/cmp-emoji", after = "cmp_luasnip" }
|
|
||||||
-- Shows function signatures on hover
|
|
||||||
use "ray-x/lsp_signature.nvim"
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Miscellaneous
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
use { "folke/trouble.nvim", config = conf_setup "trouble" }
|
|
||||||
use { "folke/todo-comments.nvim", config = conf_setup "todo-comments" }
|
|
||||||
use { "liuchengxu/vista.vim", cmd = "Vista" }
|
|
||||||
|
|
||||||
-- Automatically sync after installing for the first time
|
|
||||||
if packer_bootstrap then
|
|
||||||
packer.sync()
|
|
||||||
end
|
|
||||||
end)
|
|
47
users/myuser/neovim/languages.nix
Normal file
47
users/myuser/neovim/languages.nix
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
{
|
||||||
|
programs.nixvim = {
|
||||||
|
files."ftplugin/nix.lua".extraConfigLua = ''
|
||||||
|
vim.opt_local.expandtab = true
|
||||||
|
vim.opt_local.tabstop = 2
|
||||||
|
vim.opt_local.shiftwidth = 2
|
||||||
|
vim.opt_local.softtabstop = 2
|
||||||
|
'';
|
||||||
|
|
||||||
|
plugins = {
|
||||||
|
treesitter = {
|
||||||
|
enable = true;
|
||||||
|
# TODO (autocmd * zR needed) folding = true;
|
||||||
|
indent = true;
|
||||||
|
|
||||||
|
incrementalSelection = {
|
||||||
|
enable = true;
|
||||||
|
keymaps = {
|
||||||
|
initSelection = "<C-Space>";
|
||||||
|
nodeIncremental = "<C-Space>";
|
||||||
|
scopeIncremental = "<C-S-Space>";
|
||||||
|
nodeDecremental = "<C-B>";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nixvimInjections = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Show the current function / context in topmost line
|
||||||
|
treesitter-context.enable = true;
|
||||||
|
|
||||||
|
# Cargo.toml dependency completion
|
||||||
|
crates-nvim = {
|
||||||
|
enable = true;
|
||||||
|
extraOptions = {
|
||||||
|
src.cmp.enabled = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Rust specific LSP tools
|
||||||
|
rust-tools = {
|
||||||
|
enable = true;
|
||||||
|
server.check.command = "clippy";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
91
users/myuser/neovim/lsp.nix
Normal file
91
users/myuser/neovim/lsp.nix
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
programs.nixvim.plugins = {
|
||||||
|
lsp = {
|
||||||
|
enable = true;
|
||||||
|
preConfig = ''
|
||||||
|
local lsp_symbol = function(name, icon)
|
||||||
|
vim.fn.sign_define(
|
||||||
|
"DiagnosticSign" .. name,
|
||||||
|
{ text = icon, numhl = "Diagnostic" .. name, texthl = "Diagnostic" .. name }
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
lsp_symbol("Error", "")
|
||||||
|
lsp_symbol("Info", "")
|
||||||
|
lsp_symbol("Hint", "")
|
||||||
|
lsp_symbol("Warn", "")
|
||||||
|
'';
|
||||||
|
servers = {
|
||||||
|
bashls.enable = true;
|
||||||
|
cssls.enable = true;
|
||||||
|
html.enable = true;
|
||||||
|
lua-ls.enable = true;
|
||||||
|
rust-analyzer = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
checkOnSave = true;
|
||||||
|
check.command = "clippy";
|
||||||
|
};
|
||||||
|
# cargo and rustc are managed per project with their own flakes.
|
||||||
|
installCargo = false;
|
||||||
|
installRustc = false;
|
||||||
|
};
|
||||||
|
nil_ls = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
formatting.command = [(lib.getExe pkgs.alejandra) "--quiet"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
nixd.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
#keymaps = {
|
||||||
|
# diagnostic = {
|
||||||
|
# "<leader>k" = "goto_prev";
|
||||||
|
# "<leader>j" = "goto_next";
|
||||||
|
# };
|
||||||
|
# lspBuf = {
|
||||||
|
# "gd" = "definition";
|
||||||
|
# "gD" = "references";
|
||||||
|
# "<leader>lt" = "type_definition";
|
||||||
|
# "gi" = "implementation";
|
||||||
|
# "K" = "hover";
|
||||||
|
# "<leader>k" = "hover";
|
||||||
|
# "<leader>r" = "rename";
|
||||||
|
# };
|
||||||
|
#};
|
||||||
|
};
|
||||||
|
|
||||||
|
none-ls = {
|
||||||
|
enable = true;
|
||||||
|
sources = {
|
||||||
|
code_actions = {
|
||||||
|
# gitsigns.enable = true;
|
||||||
|
shellcheck.enable = true;
|
||||||
|
};
|
||||||
|
diagnostics = {
|
||||||
|
deadnix.enable = true;
|
||||||
|
gitlint.enable = true;
|
||||||
|
luacheck.enable = true;
|
||||||
|
protolint.enable = true;
|
||||||
|
shellcheck.enable = true;
|
||||||
|
};
|
||||||
|
formatting = {
|
||||||
|
alejandra.enable = true;
|
||||||
|
jq.enable = true;
|
||||||
|
markdownlint.enable = true;
|
||||||
|
rustfmt.enable = true;
|
||||||
|
sqlfluff.enable = true;
|
||||||
|
shfmt.enable = true;
|
||||||
|
stylua.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# TODO dap.enable = true;
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,125 +0,0 @@
|
||||||
local default_opts = { noremap = true, silent = true }
|
|
||||||
local function map(mode, lhs, rhs, opts)
|
|
||||||
for c in mode:gmatch "." do
|
|
||||||
vim.api.nvim_set_keymap(c, lhs, rhs, opts or default_opts)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- General
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
-- Shift + <up/down> scroll with cursor locked to position
|
|
||||||
map("", "<S-Down>", "")
|
|
||||||
map("", "<S-Up>", "")
|
|
||||||
map("i", "<S-Down>", "a")
|
|
||||||
map("i", "<S-Up>", "a")
|
|
||||||
|
|
||||||
-- Shift + Alt + <arrow keys> change the current window size
|
|
||||||
map("n", "<M-S-Up>", ":resize -2<CR>")
|
|
||||||
map("n", "<M-S-Down>", ":resize +2<CR>")
|
|
||||||
map("n", "<M-S-Left>", ":vertical resize -2<CR>")
|
|
||||||
map("n", "<M-S-Right>", ":vertical resize +2<CR>")
|
|
||||||
|
|
||||||
-- Allow exiting terminal mode
|
|
||||||
map("t", "<C-w><Esc>", "<C-\\><C-n>")
|
|
||||||
-- Allow C-w in terminal mode
|
|
||||||
map("t", "<C-w>", "<C-\\><C-n><C-w>")
|
|
||||||
|
|
||||||
-- Open fixed size terminal window at the bottom
|
|
||||||
map("n", "<leader><CR>", ":belowright new | setlocal wfh | resize 10 | terminal<CR>")
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Language server
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
map("n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>")
|
|
||||||
map("n", "gd", "<cmd>lua require('telescope.builtin').lsp_definitions()<CR>")
|
|
||||||
map("n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>")
|
|
||||||
map("n", "gi", "<cmd>lua require('telescope.builtin').lsp_implementations()<CR>")
|
|
||||||
map("n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>")
|
|
||||||
map("n", "<leader>wa", "<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>")
|
|
||||||
map("n", "<leader>wr", "<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>")
|
|
||||||
map("n", "<leader>wl", "<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>")
|
|
||||||
map("n", "gt", "<cmd>lua require('telescope.builtin').lsp_type_definitions()<CR>")
|
|
||||||
map("n", "<leader>r", "<cmd>lua vim.lsp.buf.rename()<CR>")
|
|
||||||
map("n", "<leader>a", "<cmd>lua vim.lsp.buf.code_action()<CR>")
|
|
||||||
map("n", "gr", "<cmd>lua require('telescope.builtin').lsp_references()<CR>")
|
|
||||||
map("n", "gl", "<cmd>lua vim.diagnostic.open_float()<CR>")
|
|
||||||
map("n", "[d", "<cmd>lua vim.diagnostic.goto_prev()<CR>")
|
|
||||||
map("n", "]d", "<cmd>lua vim.diagnostic.goto_next()<CR>")
|
|
||||||
map("n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>")
|
|
||||||
map("n", "<leader>f", "<cmd>lua vim.lsp.buf.format { async = true }<CR>")
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Plugin: Easy Align
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
map("n", "<leader>A", "<Plug>(EasyAlign)")
|
|
||||||
map("v", "<leader>A", "<Plug>(EasyAlign)")
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Plugin: Undotree
|
|
||||||
--[[ ----------------------------------------------------------------------------------------------------
|
|
||||||
]]
|
|
||||||
map("n", "<leader>u", ":UndotreeToggle<CR>")
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Plugin: Better Whitespace
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
map("n", "<leader>$", ":StripWhitespace<CR>")
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Plugin: Neotree
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
-- Mappings to open the tree / find the current file
|
|
||||||
map("n", "<leader>t", ":Neotree toggle<CR>")
|
|
||||||
map("n", "<leader>T", ":Neotree reveal<CR>")
|
|
||||||
map("n", "<leader>G", ":Neotree float git_status<CR>")
|
|
||||||
map("n", "<leader>b", ":Neotree float buffers<CR>")
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Plugin: Sandwich
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
map("nv", "m", "<Plug>(operator-sandwich-add)")
|
|
||||||
map("nv", "M", "<Plug>(operator-sandwich-delete)")
|
|
||||||
map("nv", "C-m", "<Plug>(operator-sandwich-replace)")
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Plugin: gomove
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
--map("n", "<M-Left>", "<Plug>GoNSMLeft")
|
|
||||||
--map("n", "<M-Down>", "<Plug>GoNSMDown")
|
|
||||||
--map("n", "<M-Up>", "<Plug>GoNSMUp")
|
|
||||||
--map("n", "<M-Right>", "<Plug>GoNSMRight")
|
|
||||||
|
|
||||||
map("x", "<M-Left>", "<Plug>GoVSMLeft")
|
|
||||||
map("x", "<M-Down>", "<Plug>GoVSMDown")
|
|
||||||
map("x", "<M-Up>", "<Plug>GoVSMUp")
|
|
||||||
map("x", "<M-Right>", "<Plug>GoVSMRight")
|
|
||||||
|
|
||||||
--map("n", "<S-M-Left>", "<Plug>GoNSDLeft")
|
|
||||||
--map("n", "<S-M-Down>", "<Plug>GoNSDDown")
|
|
||||||
--map("n", "<S-M-Up>", "<Plug>GoNSDUp")
|
|
||||||
--map("n", "<S-M-Right>", "<Plug>GoNSDRight")
|
|
||||||
|
|
||||||
map("x", "<S-M-Left>", "<Plug>GoVSDLeft")
|
|
||||||
map("x", "<S-M-Down>", "<Plug>GoVSDDown")
|
|
||||||
map("x", "<S-M-Up>", "<Plug>GoVSDUp")
|
|
||||||
map("x", "<S-M-Right>", "<Plug>GoVSDRight")
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Plugin: wordmotion
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
map("xo", "ie", "<Plug>WordMotion_iw")
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Plugin: textcase
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
-- TODO: ... keybinds + telescope integration
|
|
|
@ -1,66 +0,0 @@
|
||||||
local opt = vim.opt
|
|
||||||
local g = vim.g
|
|
||||||
|
|
||||||
g.mapleader = ","
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- General
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
opt.undolevels = 1000000 -- Set maximum undo levels
|
|
||||||
opt.undofile = true -- Enable persistent undo which persists undo history across vim sessions
|
|
||||||
opt.updatetime = 300 -- Save swap file after 300ms
|
|
||||||
opt.mouse = "a" -- Enable full mouse support
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Editor visuals
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
opt.termguicolors = true -- Enable true color in terminals
|
|
||||||
|
|
||||||
opt.splitkeep = "screen" -- Try not to move text when opening/closing splits
|
|
||||||
opt.wrap = false -- Do not wrap text longer than the window's width
|
|
||||||
opt.scrolloff = 2 -- Keep 2 lines above and below the cursor.
|
|
||||||
opt.sidescrolloff = 2 -- Keep 2 lines left and right of the cursor.
|
|
||||||
|
|
||||||
opt.number = true -- Show line numbers
|
|
||||||
opt.cursorline = true -- Enable cursorline, colorscheme only shows this in number column
|
|
||||||
opt.wildmode = { "list", "full" } -- Only complete the longest common prefix and list all results
|
|
||||||
opt.fillchars = { stlnc = "─" } -- Show separators in inactive window statuslines
|
|
||||||
|
|
||||||
-- FIXME: disabled because this really fucks everything up in the terminal.
|
|
||||||
opt.title = false -- Sets the window title
|
|
||||||
--opt.titlestring = "%t%( %M%)%( (%{expand(\"%:~:.:h\")})%) - nvim" -- The format for the window title
|
|
||||||
|
|
||||||
-- Hide line numbers in terminal windows
|
|
||||||
vim.api.nvim_exec([[au BufEnter term://* setlocal nonumber]], false)
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
-- Editing behavior
|
|
||||||
----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
opt.whichwrap = "" -- Never let the curser switch to the next line when reaching line end
|
|
||||||
opt.ignorecase = true -- Ignore case in search by default
|
|
||||||
opt.smartcase = true -- Be case sensitive when an upper-case character is included
|
|
||||||
|
|
||||||
opt.expandtab = false
|
|
||||||
opt.tabstop = 4 -- Set indentation of tabs to be equal to 4 spaces.
|
|
||||||
opt.shiftwidth = 4
|
|
||||||
opt.softtabstop = 4
|
|
||||||
opt.shiftround = true -- Round indentation commands to next multiple of shiftwidth
|
|
||||||
|
|
||||||
opt.formatoptions = "rqj" -- r = insert comment leader when hitting <Enter> in insert mode
|
|
||||||
-- q = allow explicit formatting with gq
|
|
||||||
-- j = remove comment leaders when joining lines if it makes sense
|
|
||||||
|
|
||||||
opt.virtualedit = "all" -- Allow the curser to be positioned on cells that have no actual character;
|
|
||||||
-- Like moving beyond EOL or on any visual 'space' of a tab character
|
|
||||||
opt.selection = "old" -- Do not include line ends in past the-line selections
|
|
||||||
opt.smartindent = true -- Use smart auto indenting for all file types
|
|
||||||
|
|
||||||
opt.timeoutlen = 20 -- Only wait 20 milliseconds for characters to arrive (see :help timeout)
|
|
||||||
opt.ttimeoutlen = 20
|
|
||||||
opt.timeout = false -- Disable timeout, but enable ttimeout (only timeout on keycodes)
|
|
||||||
opt.ttimeout = true
|
|
||||||
|
|
||||||
opt.grepprg = "rg --vimgrep --smart-case --follow" -- Replace grep with ripgrep
|
|
|
@ -1,86 +0,0 @@
|
||||||
local function button(shortcut, txt, keybind, keybind_opts)
|
|
||||||
local opts = {
|
|
||||||
position = "center",
|
|
||||||
shortcut = shortcut,
|
|
||||||
cursor = 5,
|
|
||||||
width = 50,
|
|
||||||
align_shortcut = "right",
|
|
||||||
hl_shortcut = "Keyword",
|
|
||||||
}
|
|
||||||
|
|
||||||
if keybind then
|
|
||||||
keybind_opts = vim.F.if_nil(keybind_opts, { noremap = true, silent = true })
|
|
||||||
opts.keymap = { "n", shortcut, keybind, keybind_opts }
|
|
||||||
end
|
|
||||||
|
|
||||||
local function on_press()
|
|
||||||
local key = vim.api.nvim_replace_termcodes(shortcut .. "<Ignore>", true, false, true)
|
|
||||||
vim.api.nvim_feedkeys(key, "normal", false)
|
|
||||||
end
|
|
||||||
|
|
||||||
return {
|
|
||||||
type = "button",
|
|
||||||
val = txt,
|
|
||||||
on_press = on_press,
|
|
||||||
opts = opts,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local function buttons(xs, spacing)
|
|
||||||
return {
|
|
||||||
type = "group",
|
|
||||||
val = xs,
|
|
||||||
opts = { spacing = vim.F.if_nil(spacing, 1) },
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local function text(value, hl)
|
|
||||||
return {
|
|
||||||
type = "text",
|
|
||||||
val = value,
|
|
||||||
opts = {
|
|
||||||
position = "center",
|
|
||||||
hl = hl,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local function pad(lines)
|
|
||||||
return { type = "padding", val = lines }
|
|
||||||
end
|
|
||||||
|
|
||||||
local header = {
|
|
||||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣶⣶⠀⠀⠀⠀⠀⠀⠀⠀",
|
|
||||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⢸⣄⠀⠀⠀⠀⠀⠀⠀",
|
|
||||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠛⠀⠀⠹⣧⠀⠀⠀⠀⠀⠀",
|
|
||||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀",
|
|
||||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⢠⠀⡄⠀⣿⠀⢀⣤⣤⠀⠀",
|
|
||||||
"⠀⠀⠀⠀⠀⠀⠀⠀⢰⡏⠚⠀⠃⠀⣿⣴⠞⠉⢹⠀⠀",
|
|
||||||
"⠀⣀⡀⠀⠀⠀⠀⢀⣸⠇⠀⠀⠀⠀⠈⠀⠀⣀⡿⠀⠀",
|
|
||||||
"⢸⣟⠛⢳⣤⣤⡶⠛⠃⠀⣠⠀⠀⠀⠚⣶⡾⠟⠀⠀⠀",
|
|
||||||
"⠀⠉⢷⣤⣀⣀⣀⣀⣠⡾⠻⣧⡀⠀⠀⢘⣷⣄⣀⣤⣄",
|
|
||||||
"⠀⠀⠀⠈⠉⠉⠉⠉⠉⠀⠀⠘⠻⣦⣤⣈⣁⣀⣠⣾⠋",
|
|
||||||
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠀⠀",
|
|
||||||
}
|
|
||||||
|
|
||||||
require("alpha").setup {
|
|
||||||
layout = {
|
|
||||||
pad(2),
|
|
||||||
text(header, "Type"),
|
|
||||||
--pad(2), text(separator, 'Number'),
|
|
||||||
pad(2),
|
|
||||||
buttons {
|
|
||||||
button("e", " New file", ":enew<CR>"),
|
|
||||||
--button("f", " Find file", ":Telescope find_files<CR>"),
|
|
||||||
--button("w", " Find word", ":Telescope grep_string<CR>"),
|
|
||||||
},
|
|
||||||
pad(2),
|
|
||||||
buttons {
|
|
||||||
button("u", " Update plugins", ":PackerSync<CR>"),
|
|
||||||
button("h", " Check health", ":checkhealth<CR>"),
|
|
||||||
button("q", " Quit", ":qa<CR>"),
|
|
||||||
},
|
|
||||||
--text(separator, 'Number'),
|
|
||||||
},
|
|
||||||
opts = { margin = 5 },
|
|
||||||
}
|
|
|
@ -1,97 +0,0 @@
|
||||||
-- TODO: lspconfig keymappings
|
|
||||||
-- TODO: a<Tab> inserts literal tab instead of completing when in a word with characters ahead
|
|
||||||
-- TODO: some way to search fuzzy in completion window
|
|
||||||
-- TODO: completion should be repeatable with .
|
|
||||||
local cmp = require "cmp"
|
|
||||||
if cmp == nil then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local icons = require("utils.icons").lspkind
|
|
||||||
local luasnip = require "luasnip"
|
|
||||||
local compare = cmp.config.compare
|
|
||||||
|
|
||||||
-- Show completion menu also if only one item is available (for context)
|
|
||||||
vim.opt.completeopt = { "menu", "menuone", "preview" }
|
|
||||||
|
|
||||||
local has_words_before = function()
|
|
||||||
local line, col = table.unpack(vim.api.nvim_win_get_cursor(0))
|
|
||||||
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match "%s" == nil
|
|
||||||
end
|
|
||||||
|
|
||||||
cmp.setup {
|
|
||||||
snippet = {
|
|
||||||
expand = function(args)
|
|
||||||
luasnip.lsp_expand(args.body)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
formatting = {
|
|
||||||
format = function(_, vim_item)
|
|
||||||
vim_item.kind = string.format("%s %s", icons[vim_item.kind], vim_item.kind)
|
|
||||||
return vim_item
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
mapping = cmp.mapping.preset.insert {
|
|
||||||
["<C-y>"] = cmp.config.disable,
|
|
||||||
["<C-d>"] = cmp.mapping.scroll_docs(-4),
|
|
||||||
["<C-f>"] = cmp.mapping.scroll_docs(4),
|
|
||||||
["<C-Space>"] = cmp.mapping.complete(),
|
|
||||||
["<C-e>"] = cmp.mapping.close(),
|
|
||||||
["<CR>"] = cmp.mapping.confirm {
|
|
||||||
behavior = cmp.ConfirmBehavior.Replace,
|
|
||||||
select = false,
|
|
||||||
},
|
|
||||||
["<Tab>"] = cmp.mapping(function(fallback)
|
|
||||||
if cmp.visible() then
|
|
||||||
cmp.select_next_item()
|
|
||||||
elseif luasnip.expand_or_jumpable() then
|
|
||||||
luasnip.expand_or_jump()
|
|
||||||
elseif has_words_before() then
|
|
||||||
cmp.complete()
|
|
||||||
else
|
|
||||||
fallback()
|
|
||||||
end
|
|
||||||
end, { "i", "s", "c" }),
|
|
||||||
["<S-Tab>"] = cmp.mapping(function(fallback)
|
|
||||||
if cmp.visible() then
|
|
||||||
cmp.select_prev_item()
|
|
||||||
elseif luasnip.jumpable(-1) then
|
|
||||||
luasnip.jump(-1)
|
|
||||||
else
|
|
||||||
fallback()
|
|
||||||
end
|
|
||||||
end, { "i", "s", "c" }),
|
|
||||||
},
|
|
||||||
sorting = {
|
|
||||||
priority_weight = 2,
|
|
||||||
comparators = {
|
|
||||||
compare.locality,
|
|
||||||
compare.recently_used,
|
|
||||||
compare.offset,
|
|
||||||
compare.exact,
|
|
||||||
-- compare.scopes,
|
|
||||||
compare.score,
|
|
||||||
compare.kind,
|
|
||||||
compare.sort_text,
|
|
||||||
compare.length,
|
|
||||||
compare.order,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
sources = cmp.config.sources({
|
|
||||||
{ name = "path", priority_weight = 105 },
|
|
||||||
{ name = "luasnip", priority_weight = 103 },
|
|
||||||
{ name = "nvim_lsp", priority_weight = 100 },
|
|
||||||
{ name = "nvim_lsp_signature_help", priority_weight = 99 },
|
|
||||||
{ name = "nvim_lua", priority_weight = 60 },
|
|
||||||
{ name = "buffer", priority_weight = 50 },
|
|
||||||
{ name = "emoji", priority_weight = 50 },
|
|
||||||
}, {
|
|
||||||
{ name = "buffer", priority_weight = 50 },
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp.setup.cmdline(":", {
|
|
||||||
sources = {
|
|
||||||
{ name = "cmdline" },
|
|
||||||
},
|
|
||||||
})
|
|
|
@ -1 +0,0 @@
|
||||||
require("gitsigns").setup {}
|
|
|
@ -1,78 +0,0 @@
|
||||||
local lsp_symbol = function(name, icon)
|
|
||||||
vim.fn.sign_define(
|
|
||||||
"DiagnosticSign" .. name,
|
|
||||||
{ text = icon, numhl = "Diagnostic" .. name, texthl = "Diagnostic" .. name }
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
lsp_symbol("Error", "")
|
|
||||||
lsp_symbol("Info", "")
|
|
||||||
lsp_symbol("Hint", "")
|
|
||||||
lsp_symbol("Warn", "")
|
|
||||||
|
|
||||||
vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, {
|
|
||||||
border = "single",
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, {
|
|
||||||
border = "single",
|
|
||||||
focusable = false,
|
|
||||||
relative = "cursor",
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Borders for LspInfo winodw
|
|
||||||
local win = require "lspconfig.ui.windows"
|
|
||||||
local _default_opts = win.default_opts
|
|
||||||
|
|
||||||
win.default_opts = function(options)
|
|
||||||
local opts = _default_opts(options)
|
|
||||||
opts.border = "single"
|
|
||||||
return opts
|
|
||||||
end
|
|
||||||
|
|
||||||
local lspconfig = require "lspconfig"
|
|
||||||
|
|
||||||
-- lua: https://github.com/sumneko/lua-language-server
|
|
||||||
lspconfig.sumneko_lua.setup {
|
|
||||||
settings = {
|
|
||||||
Lua = {
|
|
||||||
diagnostics = {
|
|
||||||
-- Get the language server to recognize the `vim` global
|
|
||||||
globals = { "vim" },
|
|
||||||
},
|
|
||||||
workspace = {
|
|
||||||
-- Make the server aware of Neovim runtime files
|
|
||||||
library = vim.api.nvim_get_runtime_file("", true),
|
|
||||||
},
|
|
||||||
-- Do not send telemetry data containing a randomized but unique identifier
|
|
||||||
telemetry = { enable = false },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
lspconfig.clangd.setup {}
|
|
||||||
lspconfig.bashls.setup {}
|
|
||||||
lspconfig.cmake.setup {}
|
|
||||||
lspconfig.html.setup {}
|
|
||||||
lspconfig.jdtls.setup {}
|
|
||||||
lspconfig.pyright.setup {}
|
|
||||||
lspconfig.texlab.setup {}
|
|
||||||
|
|
||||||
local rt = require "rust-tools"
|
|
||||||
rt.setup {
|
|
||||||
server = {
|
|
||||||
on_attach = function(_, bufnr)
|
|
||||||
-- Hover actions
|
|
||||||
vim.keymap.set("n", "<C-space>", rt.hover_actions.hover_actions, { buffer = bufnr })
|
|
||||||
end,
|
|
||||||
settings = {
|
|
||||||
["rust-analyzer"] = {
|
|
||||||
checkOnSave = {
|
|
||||||
command = "clippy",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
require("lsp_signature").setup()
|
|
|
@ -1,101 +0,0 @@
|
||||||
vim.cmd [[let g:neo_tree_remove_legacy_commands = 1]]
|
|
||||||
-- local notify = function(message, level)
|
|
||||||
-- vim.notify(message, level, { title = "NeoTree" })
|
|
||||||
-- end
|
|
||||||
|
|
||||||
require("neo-tree").setup {
|
|
||||||
sort_case_insensitive = true,
|
|
||||||
use_popups_for_input = false,
|
|
||||||
popup_border_style = "rounded",
|
|
||||||
-- source_selector = {
|
|
||||||
-- winbar = true,
|
|
||||||
-- separator = { left = "", right= "" },
|
|
||||||
-- },
|
|
||||||
win_options = {
|
|
||||||
winblend = 0,
|
|
||||||
},
|
|
||||||
default_component_configs = {
|
|
||||||
modified = {
|
|
||||||
symbol = "~ ",
|
|
||||||
},
|
|
||||||
indent = {
|
|
||||||
with_expanders = true,
|
|
||||||
},
|
|
||||||
name = {
|
|
||||||
trailing_slash = true,
|
|
||||||
},
|
|
||||||
git_status = {
|
|
||||||
symbols = {
|
|
||||||
added = "+",
|
|
||||||
deleted = "✖",
|
|
||||||
modified = "",
|
|
||||||
renamed = "➜",
|
|
||||||
untracked = "?",
|
|
||||||
ignored = "",
|
|
||||||
unstaged = "",
|
|
||||||
staged = "",
|
|
||||||
conflict = "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
window = {
|
|
||||||
width = 34,
|
|
||||||
position = "left",
|
|
||||||
mappings = {
|
|
||||||
["<CR>"] = "open_with_window_picker",
|
|
||||||
["s"] = "split_with_window_picker",
|
|
||||||
["v"] = "vsplit_with_window_picker",
|
|
||||||
["t"] = "open_tabnew",
|
|
||||||
["z"] = "close_all_nodes",
|
|
||||||
["Z"] = "expand_all_nodes",
|
|
||||||
["a"] = { "add", config = { show_path = "relative" } },
|
|
||||||
["A"] = { "add_directory", config = { show_path = "relative" } },
|
|
||||||
["c"] = { "copy", config = { show_path = "relative" } },
|
|
||||||
["m"] = { "move", config = { show_path = "relative" } },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
filesystem = {
|
|
||||||
window = {
|
|
||||||
mappings = {
|
|
||||||
["gA"] = "git_add_all",
|
|
||||||
["ga"] = "git_add_file",
|
|
||||||
["gu"] = "git_unstage_file",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
group_empty_dirs = true,
|
|
||||||
follow_current_file = {
|
|
||||||
enabled = true,
|
|
||||||
},
|
|
||||||
use_libuv_file_watcher = true,
|
|
||||||
filtered_items = {
|
|
||||||
hide_dotfiles = false,
|
|
||||||
hide_by_name = { ".git" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- event_handlers = {
|
|
||||||
-- {
|
|
||||||
-- event = "file_added",
|
|
||||||
-- handler = function(arg)
|
|
||||||
-- notify("Added: " .. arg, "info")
|
|
||||||
-- end,
|
|
||||||
-- },
|
|
||||||
-- {
|
|
||||||
-- event = "file_deleted",
|
|
||||||
-- handler = function(arg)
|
|
||||||
-- notify("Deleted: " .. arg, "info")
|
|
||||||
-- end,
|
|
||||||
-- },
|
|
||||||
-- {
|
|
||||||
-- event = "file_renamed",
|
|
||||||
-- handler = function(args)
|
|
||||||
-- notify("Renamed: " .. args.source .. " -> " .. args.destination, "info")
|
|
||||||
-- end,
|
|
||||||
-- },
|
|
||||||
-- {
|
|
||||||
-- event = "file_moved",
|
|
||||||
-- handler = function(args)
|
|
||||||
-- notify("Moved: " .. args.source .. " -> " .. args.destination, "info")
|
|
||||||
-- end,
|
|
||||||
-- },
|
|
||||||
-- },
|
|
||||||
}
|
|
|
@ -1,205 +0,0 @@
|
||||||
local configs = {
|
|
||||||
["dressing"] = {
|
|
||||||
input = {
|
|
||||||
prefer_width = 80,
|
|
||||||
max_width = { 140, 0.9 },
|
|
||||||
min_width = { 80, 0.6 },
|
|
||||||
win_options = {
|
|
||||||
winblend = 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
["null-ls"] = function()
|
|
||||||
local null_ls = require "null-ls"
|
|
||||||
null_ls.setup {
|
|
||||||
sources = {
|
|
||||||
null_ls.builtins.code_actions.shellcheck,
|
|
||||||
null_ls.builtins.formatting.stylua,
|
|
||||||
--null_ls.builtins.diagnostics.eslint,
|
|
||||||
null_ls.builtins.completion.spell,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
["lualine"] = function()
|
|
||||||
local c = require "onedark.colors"
|
|
||||||
local theme = {
|
|
||||||
inactive = {
|
|
||||||
a = { fg = c.fg, bg = c.bg2, gui = "bold" },
|
|
||||||
b = { fg = c.fg, bg = c.bg2 },
|
|
||||||
c = { fg = c.bg2, bg = c.bg0 },
|
|
||||||
},
|
|
||||||
normal = {
|
|
||||||
a = { fg = c.bg0, bg = c.green, gui = "bold" },
|
|
||||||
b = { fg = c.fg, bg = c.bg2 },
|
|
||||||
c = { fg = c.fg, bg = c.bg0 },
|
|
||||||
},
|
|
||||||
visual = { a = { fg = c.bg0, bg = c.purple, gui = "bold" } },
|
|
||||||
replace = { a = { fg = c.bg0, bg = c.red, gui = "bold" } },
|
|
||||||
insert = { a = { fg = c.bg0, bg = c.blue, gui = "bold" } },
|
|
||||||
command = { a = { fg = c.bg0, bg = c.yellow, gui = "bold" } },
|
|
||||||
terminal = { a = { fg = c.bg0, bg = c.cyan, gui = "bold" } },
|
|
||||||
}
|
|
||||||
|
|
||||||
require("lualine").setup {
|
|
||||||
options = {
|
|
||||||
theme = theme,
|
|
||||||
component_separators = "",
|
|
||||||
section_separators = { left = "", right = "" },
|
|
||||||
},
|
|
||||||
sections = {
|
|
||||||
lualine_a = { "mode" },
|
|
||||||
lualine_b = { "branch", "filename" },
|
|
||||||
lualine_c = { "diff", "diagnostics" },
|
|
||||||
lualine_x = { "encoding", "fileformat", "filetype" },
|
|
||||||
lualine_y = { "progress" },
|
|
||||||
lualine_z = { "location" },
|
|
||||||
},
|
|
||||||
inactive_sections = {
|
|
||||||
lualine_a = { "filename" },
|
|
||||||
lualine_b = {},
|
|
||||||
lualine_c = { "diagnostics" },
|
|
||||||
lualine_x = {},
|
|
||||||
lualine_y = {},
|
|
||||||
lualine_z = { "location" },
|
|
||||||
},
|
|
||||||
extensions = { "quickfix", "fugitive", "fzf", "nvim-dap-ui", "neo-tree" },
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
["neogit"] = {
|
|
||||||
disable_builtin_notifications = true,
|
|
||||||
},
|
|
||||||
["window-picker"] = {
|
|
||||||
selection_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
|
||||||
filter_rules = {
|
|
||||||
bo = {
|
|
||||||
filetype = { "neo-tree", "neo-tree-popup", "notify", "quickfix" },
|
|
||||||
buftype = { "terminal", "quickfix", "prompt" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
other_win_hl_color = "#4493c8",
|
|
||||||
},
|
|
||||||
["gomove"] = {
|
|
||||||
map_defaults = false,
|
|
||||||
undojoin = true,
|
|
||||||
move_past_end_col = true,
|
|
||||||
},
|
|
||||||
["better-whitespace"] = function()
|
|
||||||
function _G.whitespace_visibility()
|
|
||||||
pcall(function()
|
|
||||||
if vim.bo.buftype == "nofile" or vim.bo.buftype == "help" then
|
|
||||||
vim.cmd "DisableWhitespace"
|
|
||||||
else
|
|
||||||
vim.cmd "EnableWhitespace"
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.cmd [[autocmd WinEnter * lua whitespace_visibility()]]
|
|
||||||
end,
|
|
||||||
["onedark"] = function()
|
|
||||||
local onedark = require "onedark"
|
|
||||||
onedark.setup {
|
|
||||||
toggle_style_key = "<nop>",
|
|
||||||
colors = {
|
|
||||||
fg = "#abb2bf",
|
|
||||||
black = "#181a1f",
|
|
||||||
bg0 = "#1e222a",
|
|
||||||
bg1 = "#252931",
|
|
||||||
bg2 = "#282c34",
|
|
||||||
bg3 = "#353b45",
|
|
||||||
bg_d = "#191c21",
|
|
||||||
bg_blue = "#73b8f1",
|
|
||||||
bg_yellow = "#ebd09c",
|
|
||||||
|
|
||||||
dark_cyan = "#2b6f77",
|
|
||||||
dark_red = "#993939",
|
|
||||||
dark_yellow = "#93691d",
|
|
||||||
|
|
||||||
grey = "#42464e",
|
|
||||||
grey_fg = "#565c64",
|
|
||||||
grey_fg2 = "#6f737b",
|
|
||||||
light_grey = "#6f737b",
|
|
||||||
baby_pink = "#de8c92",
|
|
||||||
pink = "#ff75a0",
|
|
||||||
nord_blue = "#81a1c1",
|
|
||||||
sun = "#ebcb8b",
|
|
||||||
light_purple = "#de98fd",
|
|
||||||
dark_purple = "#c882e7",
|
|
||||||
teal = "#519aba",
|
|
||||||
dark_pink = "#fca2aa",
|
|
||||||
light_blue = "#a3b8ef",
|
|
||||||
vibrant_green = "#7eca9c",
|
|
||||||
|
|
||||||
red = "#e06c75",
|
|
||||||
orange = "#d19a66",
|
|
||||||
yellow = "#e5c07b",
|
|
||||||
green = "#98c379",
|
|
||||||
cyan = "#56b6c2",
|
|
||||||
blue = "#61afef",
|
|
||||||
purple = "#c678dd",
|
|
||||||
|
|
||||||
diff_add = "#31392b",
|
|
||||||
diff_delete = "#382b2c",
|
|
||||||
diff_change = "#1c3448",
|
|
||||||
diff_text = "#2c5372",
|
|
||||||
},
|
|
||||||
highlights = {
|
|
||||||
CursorLine = { bg = "$bg0" },
|
|
||||||
FloatBorder = { fg = "$blue" },
|
|
||||||
NeoTreeTabActive = { fg = "$fg", bg = "$bg_d" },
|
|
||||||
NeoTreeTabInactive = { fg = "$grey", bg = "$black" },
|
|
||||||
NeoTreeTabSeparatorActive = { fg = "$black", bg = "$black" },
|
|
||||||
NeoTreeTabSeparatorInactive = { fg = "$black", bg = "$black" },
|
|
||||||
NeoTreeWinSeparator = { fg = "$bg_d", bg = "$bg_d" },
|
|
||||||
NeoTreeVertSplit = { fg = "$bg_d", bg = "$bg_d" },
|
|
||||||
VisualMultiMono = { fg = "$purple", bg = "$diff_change" },
|
|
||||||
VisualMultiExtend = { bg = "$diff_change" },
|
|
||||||
VisualMultiCursor = { fg = "$purple", bg = "$diff_change" },
|
|
||||||
VisualMultiInsert = { fg = "$blue", bg = "$diff_change" },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
vim.g.VM_Mono_hl = "VisualMultiMono"
|
|
||||||
vim.g.VM_Extend_hl = "VisualMultiExtend"
|
|
||||||
vim.g.VM_Cursor_hl = "VisualMultiCursor"
|
|
||||||
vim.g.VM_Insert_hl = "VisualMultiInsert"
|
|
||||||
onedark.load()
|
|
||||||
end,
|
|
||||||
["sandwich"] = function()
|
|
||||||
vim.g.operator_sandwich_no_default_key_mappings = 1
|
|
||||||
vim.g.textobj_sandwich_no_default_key_mappings = 1
|
|
||||||
end,
|
|
||||||
["undotree"] = function()
|
|
||||||
vim.g.undotree_SetFocusWhenToggle = 1
|
|
||||||
vim.g.undotree_WindowLayout = 4
|
|
||||||
end,
|
|
||||||
["wordmotion"] = function()
|
|
||||||
vim.g.wordmotion_nomap = 1
|
|
||||||
end,
|
|
||||||
["nvim-web-devicons"] = function()
|
|
||||||
local devicons = require "nvim-web-devicons"
|
|
||||||
devicons.setup {
|
|
||||||
override = require("utils.icons").devicons,
|
|
||||||
default = true,
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
["notify"] = function()
|
|
||||||
local notify = require "notify"
|
|
||||||
notify.setup {
|
|
||||||
fps = 60,
|
|
||||||
icons = {
|
|
||||||
DEBUG = "",
|
|
||||||
ERROR = "",
|
|
||||||
INFO = "",
|
|
||||||
TRACE = "✎",
|
|
||||||
WARN = "",
|
|
||||||
},
|
|
||||||
max_width = 120,
|
|
||||||
}
|
|
||||||
vim.notify = notify
|
|
||||||
end,
|
|
||||||
["nabla"] = function()
|
|
||||||
require("nabla").enable_virt()
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
|
|
||||||
return configs
|
|
|
@ -1,31 +0,0 @@
|
||||||
-- TODO: files and content in the searchable area should be split into two window portions,
|
|
||||||
-- TODO: Ctrl+Up in telescope fucks up spacing
|
|
||||||
-- or maybe only that the file just takes small amount of space
|
|
||||||
|
|
||||||
local telescope = require "telescope"
|
|
||||||
|
|
||||||
telescope.setup {
|
|
||||||
defaults = {
|
|
||||||
-- Default configuration for telescope goes here:
|
|
||||||
-- config_key = value,
|
|
||||||
mappings = {
|
|
||||||
i = {
|
|
||||||
["<C-h>"] = "which_key",
|
|
||||||
["<C-Down>"] = require("telescope.actions").cycle_history_next,
|
|
||||||
["<C-Up>"] = require("telescope.actions").cycle_history_prev,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
prompt_prefix = " ",
|
|
||||||
selection_caret = " ",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
local function load_ext(ext)
|
|
||||||
local ok, _ = pcall(telescope.load_extension, ext)
|
|
||||||
if not ok then
|
|
||||||
vim.notify("Could not load telescope extension: " .. ext, "error")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
load_ext "fzf"
|
|
||||||
load_ext "notify"
|
|
|
@ -1,16 +0,0 @@
|
||||||
require("nvim-treesitter.configs").setup {
|
|
||||||
ensure_installed = "all",
|
|
||||||
highlight = {
|
|
||||||
enable = true,
|
|
||||||
use_languagetree = true,
|
|
||||||
},
|
|
||||||
rainbow = {
|
|
||||||
enable = true,
|
|
||||||
extended_mode = true,
|
|
||||||
-- colors = { },
|
|
||||||
-- termcolors = { }
|
|
||||||
},
|
|
||||||
matchup = {
|
|
||||||
enable = true,
|
|
||||||
},
|
|
||||||
}
|
|
|
@ -1,57 +0,0 @@
|
||||||
keybinds:
|
|
||||||
- comment.nvim
|
|
||||||
- smarter keybinds for surround, e.g. "" on word --> "word", same for '', maybe others.
|
|
||||||
- lsp keybinds
|
|
||||||
- move block of lines
|
|
||||||
- m to surround
|
|
||||||
- dressing make larger
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- maybe install pynvim and npm neovim on update
|
|
||||||
- nice wrapping behavior g<up> g<down>, setlocal linebreak, setlocal wrap, setlocal showbreak=\| \ \ \ , setlocal breakindent
|
|
||||||
- when set wrap, have an alternative V and ctrlV that behave like the text was actually that way.
|
|
||||||
|
|
||||||
|
|
||||||
- mundo
|
|
||||||
- easyalign
|
|
||||||
|
|
||||||
- nvim dap (some kind of debugger pls)
|
|
||||||
|
|
||||||
- (link still applise= nvim cmp can kill nvim by completing /dev/ and going over stdin whoops.
|
|
||||||
- long opening times when opening paper.jar
|
|
||||||
- remove ZZ shortcut
|
|
||||||
- converter: number <-> hex <-> oct <-> ...; camelcase pascalcase snakecase
|
|
||||||
- gJ but delete every trailing and leading space, maybe gdJ
|
|
||||||
- button to jump to end of match under cursor NOT in visual mode
|
|
||||||
- visual mode f --> vf" should mark to next "
|
|
||||||
- v......s<esc> sometimes jumps back some characters which makes inital cursor movement strange. subst shouldnt move cursor from beginning if characters are deleted or ever like noooooop
|
|
||||||
- multi search highlight with different color.
|
|
||||||
- make ctrl-shift-cv copy/insert things from * buffer
|
|
||||||
- maybe an IDE init button like <F9>. before that only minimal plugins loaded, e.g. no completion no tabnine nothing too obstrusive and nothing that is slow on large arbitarary files.
|
|
||||||
- textobject for "current functino parameter like ciw -> cip
|
|
||||||
- multuple cursors on each line, then trigger completion, but allow two modes. either only first cursor gets completion, others get same completion,
|
|
||||||
or all cursors complete separately and take the first completion by themselves.
|
|
||||||
- key for Crtl+[] for jump back and select in help
|
|
||||||
- indent blankline error: when searching for a word, and a indentline begins in the next line such that it is under the first char of the marked word, the blankline will be visually marked too.
|
|
||||||
- automacros: always record a macro when esc is pressed until esc is pressed again. Begin recording only on first actual action i.e. movement doesnt count before recording, only after starting -> things like Js<del><Esc> will become a repeat sequence yay.
|
|
||||||
- after nvimcmp replaced text, goto end of this text.
|
|
||||||
- search and replace "popup" or maybe just prefilled cmdline with interactive search visuals
|
|
||||||
- whitespace
|
|
||||||
- indentline
|
|
||||||
- tabline for TABS not buffer :/
|
|
||||||
- nvim-tree: a = create new in (selected folder if cursor is hovering over one, else current folder), A = create new in current folder regardless of cursor pos
|
|
||||||
- lsp
|
|
||||||
- colored parens
|
|
||||||
- git
|
|
||||||
- whitespace marker lines also in NvoimTree
|
|
||||||
- show bad whitespace
|
|
||||||
- markdown? latex?
|
|
||||||
- highlight current line in more lighter cola
|
|
||||||
- Create a virtualenv specifically for Nvim and use `g:python3_host_prog`. This will avoid the need to install the pynvim module in each virtualenv.
|
|
||||||
|
|
||||||
|
|
||||||
fast:
|
|
||||||
- delete ; at end of each line
|
|
||||||
- align on =
|
|
||||||
- align function arguments
|
|
|
@ -1,14 +0,0 @@
|
||||||
local M = {}
|
|
||||||
|
|
||||||
M.ensure_packer = function()
|
|
||||||
local fn = vim.fn
|
|
||||||
local install_path = fn.stdpath "data" .. "/site/pack/packer/start/packer.nvim"
|
|
||||||
if fn.empty(fn.glob(install_path)) > 0 then
|
|
||||||
fn.system { "git", "clone", "--depth", "1", "https://github.com/wbthomason/packer.nvim", install_path }
|
|
||||||
vim.cmd [[packadd packer.nvim]]
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
|
|
@ -1,215 +0,0 @@
|
||||||
local M = {}
|
|
||||||
|
|
||||||
M.lspkind = {
|
|
||||||
Namespace = "",
|
|
||||||
Text = "",
|
|
||||||
Method = "",
|
|
||||||
Function = "",
|
|
||||||
Constructor = "",
|
|
||||||
Field = "",
|
|
||||||
Variable = "",
|
|
||||||
Class = "",
|
|
||||||
Interface = "",
|
|
||||||
Module = "",
|
|
||||||
Property = "",
|
|
||||||
Unit = "",
|
|
||||||
Value = "",
|
|
||||||
Enum = "",
|
|
||||||
Keyword = "",
|
|
||||||
Snippet = "",
|
|
||||||
Color = "",
|
|
||||||
File = "",
|
|
||||||
Reference = "",
|
|
||||||
Folder = "",
|
|
||||||
EnumMember = "",
|
|
||||||
Constant = "",
|
|
||||||
Struct = "",
|
|
||||||
Event = "",
|
|
||||||
Operator = "",
|
|
||||||
TypeParameter = "",
|
|
||||||
Table = "",
|
|
||||||
Object = "",
|
|
||||||
Tag = "",
|
|
||||||
Array = "[]",
|
|
||||||
Boolean = "",
|
|
||||||
Number = "",
|
|
||||||
Null = "",
|
|
||||||
String = "",
|
|
||||||
Calendar = "",
|
|
||||||
Watch = "",
|
|
||||||
Package = "",
|
|
||||||
Copilot = "",
|
|
||||||
Codeium = "",
|
|
||||||
TabNine = "",
|
|
||||||
}
|
|
||||||
|
|
||||||
M.statusline_separators = {
|
|
||||||
default = {
|
|
||||||
left = "",
|
|
||||||
right = " ",
|
|
||||||
},
|
|
||||||
|
|
||||||
round = {
|
|
||||||
left = "",
|
|
||||||
right = "",
|
|
||||||
},
|
|
||||||
|
|
||||||
block = {
|
|
||||||
left = "█",
|
|
||||||
right = "█",
|
|
||||||
},
|
|
||||||
|
|
||||||
arrow = {
|
|
||||||
left = "",
|
|
||||||
right = "",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
M.devicons = {
|
|
||||||
default_icon = {
|
|
||||||
icon = "",
|
|
||||||
name = "Default",
|
|
||||||
},
|
|
||||||
|
|
||||||
c = {
|
|
||||||
icon = "",
|
|
||||||
name = "c",
|
|
||||||
},
|
|
||||||
|
|
||||||
css = {
|
|
||||||
icon = "",
|
|
||||||
name = "css",
|
|
||||||
},
|
|
||||||
|
|
||||||
dart = {
|
|
||||||
icon = "",
|
|
||||||
name = "dart",
|
|
||||||
},
|
|
||||||
|
|
||||||
deb = {
|
|
||||||
icon = "",
|
|
||||||
name = "deb",
|
|
||||||
},
|
|
||||||
|
|
||||||
Dockerfile = {
|
|
||||||
icon = "",
|
|
||||||
name = "Dockerfile",
|
|
||||||
},
|
|
||||||
|
|
||||||
html = {
|
|
||||||
icon = "",
|
|
||||||
name = "html",
|
|
||||||
},
|
|
||||||
|
|
||||||
jpeg = {
|
|
||||||
icon = "",
|
|
||||||
name = "jpeg",
|
|
||||||
},
|
|
||||||
|
|
||||||
jpg = {
|
|
||||||
icon = "",
|
|
||||||
name = "jpg",
|
|
||||||
},
|
|
||||||
|
|
||||||
js = {
|
|
||||||
icon = "",
|
|
||||||
name = "js",
|
|
||||||
},
|
|
||||||
|
|
||||||
kt = {
|
|
||||||
icon = "",
|
|
||||||
name = "kt",
|
|
||||||
},
|
|
||||||
|
|
||||||
lock = {
|
|
||||||
icon = "",
|
|
||||||
name = "lock",
|
|
||||||
},
|
|
||||||
|
|
||||||
lua = {
|
|
||||||
icon = "",
|
|
||||||
name = "lua",
|
|
||||||
},
|
|
||||||
|
|
||||||
mp3 = {
|
|
||||||
icon = "",
|
|
||||||
name = "mp3",
|
|
||||||
},
|
|
||||||
|
|
||||||
mp4 = {
|
|
||||||
icon = "",
|
|
||||||
name = "mp4",
|
|
||||||
},
|
|
||||||
|
|
||||||
out = {
|
|
||||||
icon = "",
|
|
||||||
name = "out",
|
|
||||||
},
|
|
||||||
|
|
||||||
png = {
|
|
||||||
icon = "",
|
|
||||||
name = "png",
|
|
||||||
},
|
|
||||||
|
|
||||||
py = {
|
|
||||||
icon = "",
|
|
||||||
name = "py",
|
|
||||||
},
|
|
||||||
|
|
||||||
["robots.txt"] = {
|
|
||||||
icon = "",
|
|
||||||
name = "robots",
|
|
||||||
},
|
|
||||||
|
|
||||||
toml = {
|
|
||||||
icon = "",
|
|
||||||
name = "toml",
|
|
||||||
},
|
|
||||||
|
|
||||||
ts = {
|
|
||||||
icon = "",
|
|
||||||
name = "ts",
|
|
||||||
},
|
|
||||||
|
|
||||||
ttf = {
|
|
||||||
icon = "",
|
|
||||||
name = "TrueTypeFont",
|
|
||||||
},
|
|
||||||
|
|
||||||
rb = {
|
|
||||||
icon = "",
|
|
||||||
name = "rb",
|
|
||||||
},
|
|
||||||
|
|
||||||
rpm = {
|
|
||||||
icon = "",
|
|
||||||
name = "rpm",
|
|
||||||
},
|
|
||||||
|
|
||||||
vue = {
|
|
||||||
icon = "",
|
|
||||||
name = "vue",
|
|
||||||
},
|
|
||||||
|
|
||||||
woff = {
|
|
||||||
icon = "",
|
|
||||||
name = "WebOpenFontFormat",
|
|
||||||
},
|
|
||||||
|
|
||||||
woff2 = {
|
|
||||||
icon = "",
|
|
||||||
name = "WebOpenFontFormat2",
|
|
||||||
},
|
|
||||||
|
|
||||||
xz = {
|
|
||||||
icon = "",
|
|
||||||
name = "xz",
|
|
||||||
},
|
|
||||||
|
|
||||||
zip = {
|
|
||||||
icon = "",
|
|
||||||
name = "zip",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
return M
|
|
104
users/myuser/neovim/misc.nix
Normal file
104
users/myuser/neovim/misc.nix
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
{pkgs, ...}: {
|
||||||
|
programs.nixvim = {
|
||||||
|
plugins = {
|
||||||
|
notify = {
|
||||||
|
enable = true;
|
||||||
|
stages = "static";
|
||||||
|
render.__raw = ''"compact"'';
|
||||||
|
icons = {
|
||||||
|
debug = "";
|
||||||
|
error = "";
|
||||||
|
info = "";
|
||||||
|
trace = "";
|
||||||
|
warn = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Commenting
|
||||||
|
comment-nvim.enable = true;
|
||||||
|
# Extend vim's "%" key
|
||||||
|
vim-matchup.enable = true;
|
||||||
|
|
||||||
|
# Fzf picker for arbitrary stuff
|
||||||
|
telescope = {
|
||||||
|
enable = true;
|
||||||
|
enabledExtensions = ["fzf" "notify" "ui-select"];
|
||||||
|
extensions.fzf-native.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Undo tree
|
||||||
|
undotree = {
|
||||||
|
enable = true;
|
||||||
|
focusOnToggle = true;
|
||||||
|
windowLayout = 4;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Quickfix menu
|
||||||
|
trouble.enable = true;
|
||||||
|
# Highlight certain keywords
|
||||||
|
todo-comments.enable = true;
|
||||||
|
# TODO use { "liuchengxu/vista.vim", cmd = "Vista" }
|
||||||
|
which-key.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
extraPlugins = with pkgs.vimPlugins; [
|
||||||
|
telescope-ui-select-nvim
|
||||||
|
nvim-window-picker
|
||||||
|
# Replace built-in LSP prompts and windows
|
||||||
|
dressing-nvim
|
||||||
|
# Multicursor
|
||||||
|
vim-visual-multi
|
||||||
|
# Show invalid whitespace
|
||||||
|
vim-better-whitespace
|
||||||
|
# Show latex math equations
|
||||||
|
nabla-nvim
|
||||||
|
# Modify Surrounding things like parenthesis and quotes
|
||||||
|
vim-sandwich
|
||||||
|
# TODO mini.align better?
|
||||||
|
vim-easy-align
|
||||||
|
# Case changer
|
||||||
|
text-case-nvim
|
||||||
|
# camelcase (and similar) word motions and textobjects
|
||||||
|
vim-wordmotion
|
||||||
|
# Gpg integration
|
||||||
|
vim-gnupg
|
||||||
|
# TODO temporary
|
||||||
|
vim-startuptime
|
||||||
|
];
|
||||||
|
|
||||||
|
extraConfigLuaPre = ''
|
||||||
|
vim.g.operator_sandwich_no_default_key_mappings = 1
|
||||||
|
vim.g.textobj_sandwich_no_default_key_mappings = 1
|
||||||
|
|
||||||
|
vim.g.wordmotion_nomap = 1
|
||||||
|
'';
|
||||||
|
|
||||||
|
extraConfigLuaPost = ''
|
||||||
|
require("window-picker").setup {
|
||||||
|
hint = "floating-big-letter",
|
||||||
|
filter_rules = {
|
||||||
|
bo = {
|
||||||
|
filetype = { "neo-tree", "neo-tree-popup", "notify", "quickfix" },
|
||||||
|
buftype = { "terminal", "quickfix", "prompt" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
floating_big_letter = {
|
||||||
|
font = "ansi-shadow",
|
||||||
|
},
|
||||||
|
selection_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
||||||
|
show_prompt = false,
|
||||||
|
}
|
||||||
|
|
||||||
|
require("dressing").setup {
|
||||||
|
input = {
|
||||||
|
prefer_width = 80,
|
||||||
|
max_width = { 140, 0.9 },
|
||||||
|
min_width = { 80, 0.6 },
|
||||||
|
win_options = {
|
||||||
|
winblend = 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
55
users/myuser/neovim/neo-tree.nix
Normal file
55
users/myuser/neovim/neo-tree.nix
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
{
|
||||||
|
programs.nixvim.plugins.neo-tree = {
|
||||||
|
enable = true;
|
||||||
|
sortCaseInsensitive = true;
|
||||||
|
usePopupsForInput = false;
|
||||||
|
popupBorderStyle = "rounded";
|
||||||
|
# TODO window_opts.winblend = 0;
|
||||||
|
window = {
|
||||||
|
width = 34;
|
||||||
|
position = "left";
|
||||||
|
mappings = {
|
||||||
|
"<CR>" = "open_with_window_picker";
|
||||||
|
"s" = "split_with_window_picker";
|
||||||
|
"v" = "vsplit_with_window_picker";
|
||||||
|
"t" = "open_tabnew";
|
||||||
|
"z" = "close_all_nodes";
|
||||||
|
"Z" = "expand_all_nodes";
|
||||||
|
"a".__raw = ''{ "add", config = { show_path = "relative" } }'';
|
||||||
|
"A".__raw = ''{ "add_directory", config = { show_path = "relative" } }'';
|
||||||
|
"c".__raw = ''{ "copy", config = { show_path = "relative" } }'';
|
||||||
|
"m".__raw = ''{ "move", config = { show_path = "relative" } }'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
defaultComponentConfigs = {
|
||||||
|
modified.symbol = "~ ";
|
||||||
|
indent.withExpanders = true;
|
||||||
|
name.trailingSlash = true;
|
||||||
|
gitStatus.symbols = {
|
||||||
|
added = "+";
|
||||||
|
deleted = "✖";
|
||||||
|
modified = "";
|
||||||
|
renamed = "➜";
|
||||||
|
untracked = "?";
|
||||||
|
ignored = "";
|
||||||
|
unstaged = ""; #
|
||||||
|
staged = "";
|
||||||
|
conflict = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
filesystem = {
|
||||||
|
window.mappings = {
|
||||||
|
"gA" = "git_add_all";
|
||||||
|
"ga" = "git_add_file";
|
||||||
|
"gu" = "git_unstage_file";
|
||||||
|
};
|
||||||
|
groupEmptyDirs = true;
|
||||||
|
followCurrentFile.enabled = true;
|
||||||
|
useLibuvFileWatcher = true;
|
||||||
|
filteredItems = {
|
||||||
|
hideDotfiles = false;
|
||||||
|
hideByName = [".git"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
81
users/myuser/neovim/onedark.nix
Normal file
81
users/myuser/neovim/onedark.nix
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
programs.nixvim = {
|
||||||
|
extraPlugins = with pkgs.vimPlugins; [
|
||||||
|
# navarasu's one dark
|
||||||
|
onedark-nvim
|
||||||
|
];
|
||||||
|
|
||||||
|
extraConfigLua = lib.mkBefore ''
|
||||||
|
local onedark = require "onedark"
|
||||||
|
onedark.setup {
|
||||||
|
toggle_style_key = "<nop>",
|
||||||
|
colors = {
|
||||||
|
fg = "#abb2bf",
|
||||||
|
black = "#181a1f",
|
||||||
|
bg0 = "#1e222a",
|
||||||
|
bg1 = "#252931",
|
||||||
|
bg2 = "#282c34",
|
||||||
|
bg3 = "#353b45",
|
||||||
|
bg_d = "#191c21",
|
||||||
|
bg_blue = "#73b8f1",
|
||||||
|
bg_yellow = "#ebd09c",
|
||||||
|
|
||||||
|
dark_cyan = "#2b6f77",
|
||||||
|
dark_red = "#993939",
|
||||||
|
dark_yellow = "#93691d",
|
||||||
|
|
||||||
|
grey = "#42464e",
|
||||||
|
grey_fg = "#565c64",
|
||||||
|
grey_fg2 = "#6f737b",
|
||||||
|
light_grey = "#6f737b",
|
||||||
|
baby_pink = "#de8c92",
|
||||||
|
pink = "#ff75a0",
|
||||||
|
nord_blue = "#81a1c1",
|
||||||
|
sun = "#ebcb8b",
|
||||||
|
light_purple = "#de98fd",
|
||||||
|
dark_purple = "#c882e7",
|
||||||
|
teal = "#519aba",
|
||||||
|
dark_pink = "#fca2aa",
|
||||||
|
light_blue = "#a3b8ef",
|
||||||
|
vibrant_green = "#7eca9c",
|
||||||
|
|
||||||
|
red = "#e06c75",
|
||||||
|
orange = "#d19a66",
|
||||||
|
yellow = "#e5c07b",
|
||||||
|
green = "#98c379",
|
||||||
|
cyan = "#56b6c2",
|
||||||
|
blue = "#61afef",
|
||||||
|
purple = "#c678dd",
|
||||||
|
|
||||||
|
diff_add = "#31392b",
|
||||||
|
diff_delete = "#382b2c",
|
||||||
|
diff_change = "#1c3448",
|
||||||
|
diff_text = "#2c5372",
|
||||||
|
},
|
||||||
|
highlights = {
|
||||||
|
CursorLine = { bg = "$bg0" },
|
||||||
|
FloatBorder = { fg = "$blue" },
|
||||||
|
NeoTreeTabActive = { fg = "$fg", bg = "$bg_d" },
|
||||||
|
NeoTreeTabInactive = { fg = "$grey", bg = "$black" },
|
||||||
|
NeoTreeTabSeparatorActive = { fg = "$black", bg = "$black" },
|
||||||
|
NeoTreeTabSeparatorInactive = { fg = "$black", bg = "$black" },
|
||||||
|
NeoTreeWinSeparator = { fg = "$bg_d", bg = "$bg_d" },
|
||||||
|
NeoTreeVertSplit = { fg = "$bg_d", bg = "$bg_d" },
|
||||||
|
VisualMultiMono = { fg = "$purple", bg = "$diff_change" },
|
||||||
|
VisualMultiExtend = { bg = "$diff_change" },
|
||||||
|
VisualMultiCursor = { fg = "$purple", bg = "$diff_change" },
|
||||||
|
VisualMultiInsert = { fg = "$blue", bg = "$diff_change" },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
vim.g.VM_Mono_hl = "VisualMultiMono"
|
||||||
|
vim.g.VM_Extend_hl = "VisualMultiExtend"
|
||||||
|
vim.g.VM_Cursor_hl = "VisualMultiCursor"
|
||||||
|
vim.g.VM_Insert_hl = "VisualMultiInsert"
|
||||||
|
onedark.load()
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
44
users/myuser/neovim/web-devicons.nix
Normal file
44
users/myuser/neovim/web-devicons.nix
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
{pkgs, ...}: {
|
||||||
|
programs.nixvim = {
|
||||||
|
extraPlugins = with pkgs.vimPlugins; [
|
||||||
|
nvim-web-devicons
|
||||||
|
];
|
||||||
|
|
||||||
|
extraConfigLuaPost = ''
|
||||||
|
require("nvim-web-devicons").setup {
|
||||||
|
override = {
|
||||||
|
default_icon = { icon = "", name = "Default", },
|
||||||
|
c = { icon = "", name = "c", },
|
||||||
|
css = { icon = "", name = "css", },
|
||||||
|
dart = { icon = "", name = "dart", },
|
||||||
|
deb = { icon = "", name = "deb", },
|
||||||
|
Dockerfile = { icon = "", name = "Dockerfile", },
|
||||||
|
html = { icon = "", name = "html", },
|
||||||
|
jpeg = { icon = "", name = "jpeg", },
|
||||||
|
jpg = { icon = "", name = "jpg", },
|
||||||
|
js = { icon = "", name = "js", },
|
||||||
|
kt = { icon = "", name = "kt", },
|
||||||
|
lock = { icon = "", name = "lock", },
|
||||||
|
lua = { icon = "", name = "lua", },
|
||||||
|
mp3 = { icon = "", name = "mp3", },
|
||||||
|
mp4 = { icon = "", name = "mp4", },
|
||||||
|
out = { icon = "", name = "out", },
|
||||||
|
png = { icon = "", name = "png", },
|
||||||
|
py = { icon = "", name = "py", },
|
||||||
|
["robots.txt"] = { icon = "", name = "robots", },
|
||||||
|
toml = { icon = "", name = "toml", },
|
||||||
|
ts = { icon = "", name = "ts", },
|
||||||
|
ttf = { icon = "", name = "TrueTypeFont", },
|
||||||
|
rb = { icon = "", name = "rb", },
|
||||||
|
rpm = { icon = "", name = "rpm", },
|
||||||
|
vue = { icon = "", name = "vue", },
|
||||||
|
woff = { icon = "", name = "WebOpenFontFormat", },
|
||||||
|
woff2 = { icon = "", name = "WebOpenFontFormat2", },
|
||||||
|
xz = { icon = "", name = "xz", },
|
||||||
|
zip = { icon = "", name = "zip", },
|
||||||
|
},
|
||||||
|
default = true,
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue