refactor: reorganize, add package (opencode, osgrep, beads), add ai agent shell
This commit is contained in:
parent
7e0a207778
commit
a0f0f39399
58 changed files with 7867 additions and 42 deletions
152
modules/home/programs/fastfetch/default.nix
Normal file
152
modules/home/programs/fastfetch/default.nix
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
home.packages = [ pkgs.fastfetch ];
|
||||
|
||||
# Copy the custom logo file
|
||||
xdg.configFile."fastfetch/oguri-logo.txt".source = ./oguri-logo.txt;
|
||||
|
||||
xdg.configFile."fastfetch/config.jsonc".text = let
|
||||
esc = builtins.fromJSON ''"\u001b"'';
|
||||
osIcon = if pkgs.stdenv.isDarwin then "" else "";
|
||||
in builtins.toJSON {
|
||||
"$schema" =
|
||||
"https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json";
|
||||
|
||||
logo = {
|
||||
type = "file";
|
||||
source = "~/.config/fastfetch/oguri-logo.txt";
|
||||
color."1" = "green";
|
||||
padding = {
|
||||
top = 2;
|
||||
right = 6;
|
||||
left = 2;
|
||||
};
|
||||
};
|
||||
|
||||
display = {
|
||||
separator = " → ";
|
||||
key = { width = 16; };
|
||||
};
|
||||
|
||||
modules = [
|
||||
"break"
|
||||
|
||||
# Hardware Section
|
||||
{
|
||||
type = "custom";
|
||||
format =
|
||||
"${esc}[32m── Hardware──────────────────────────────────────────${esc}[0m";
|
||||
}
|
||||
{
|
||||
type = "host";
|
||||
key = " PC";
|
||||
keyColor = "green";
|
||||
}
|
||||
{
|
||||
type = "cpu";
|
||||
key = " CPU";
|
||||
showPeCoreCount = true;
|
||||
keyColor = "green";
|
||||
}
|
||||
{
|
||||
type = "gpu";
|
||||
key = " GPU";
|
||||
detectionMethod = "pci";
|
||||
keyColor = "green";
|
||||
}
|
||||
{
|
||||
type = "display";
|
||||
key = " Display";
|
||||
keyColor = "green";
|
||||
}
|
||||
{
|
||||
type = "disk";
|
||||
key = " Disk";
|
||||
keyColor = "green";
|
||||
}
|
||||
{
|
||||
type = "memory";
|
||||
key = " Memory";
|
||||
keyColor = "green";
|
||||
}
|
||||
{
|
||||
type = "swap";
|
||||
key = " Swap";
|
||||
keyColor = "green";
|
||||
}
|
||||
"break"
|
||||
|
||||
# Software Section
|
||||
{
|
||||
type = "custom";
|
||||
format =
|
||||
"${esc}[34m── Software──────────────────────────────────────────${esc}[0m";
|
||||
}
|
||||
{
|
||||
type = "command";
|
||||
key = "${osIcon} OS";
|
||||
keyColor = "blue";
|
||||
text =
|
||||
"if [ $(uname) = 'Darwin' ]; then ver=$(sw_vers -productVersion); major=$(echo $ver | cut -d. -f1); case $major in 15) name='Sequoia';; 14) name='Sonoma';; 13) name='Ventura';; 12) name='Monterey';; 11) name='Big Sur';; *) name=''';; esac; echo \"macOS $name $major\"; else echo \"$(cat /etc/os-release | grep PRETTY_NAME | cut -d'\\\"' -f2)\"; fi";
|
||||
}
|
||||
{
|
||||
type = "kernel";
|
||||
key = " Kernel";
|
||||
keyColor = "blue";
|
||||
}
|
||||
{
|
||||
type = "wm";
|
||||
key = " WM";
|
||||
keyColor = "blue";
|
||||
}
|
||||
{
|
||||
type = "de";
|
||||
key = " DE";
|
||||
keyColor = "blue";
|
||||
}
|
||||
{
|
||||
type = "terminal";
|
||||
key = " Terminal";
|
||||
keyColor = "blue";
|
||||
}
|
||||
{
|
||||
type = "packages";
|
||||
key = " Packages";
|
||||
keyColor = "blue";
|
||||
}
|
||||
{
|
||||
type = "wmtheme";
|
||||
key = " WM Theme";
|
||||
keyColor = "blue";
|
||||
}
|
||||
{
|
||||
type = "terminalfont";
|
||||
key = " Font";
|
||||
keyColor = "blue";
|
||||
}
|
||||
"break"
|
||||
|
||||
# Uptime / Age Section
|
||||
{
|
||||
type = "custom";
|
||||
format =
|
||||
"${esc}[35m── Uptime / Age─────────────────────────────────────${esc}[0m";
|
||||
}
|
||||
{
|
||||
type = "command";
|
||||
key = " OS Age";
|
||||
keyColor = "magenta";
|
||||
# macOS compatible stat command
|
||||
text = ''
|
||||
if [ $(uname) = 'Darwin' ]; then birth=$(stat -f %B /); else birth=$(stat -c %W /); fi; current=$(date +%s); days=$(( (current - birth) / 86400 )); echo "$days days"'';
|
||||
}
|
||||
{
|
||||
type = "uptime";
|
||||
key = " Uptime";
|
||||
keyColor = "magenta";
|
||||
}
|
||||
"break"
|
||||
];
|
||||
};
|
||||
}
|
||||
18
modules/home/programs/fastfetch/oguri-logo.txt
Normal file
18
modules/home/programs/fastfetch/oguri-logo.txt
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
[38;2;245;245;245m⣿[0m[38;2;244;245;243m⣿[0m[38;2;244;244;243m⣿[0m[38;2;241;241;241m⣿[0m[38;2;240;241;240m⣿[0m[38;2;215;203;219m⣿[0m[38;2;238;239;239m⣿[0m[38;2;237;237;237m⣿[0m[38;2;193;194;216m⣿[0m[38;2;232;235;235m⣿[0m[38;2;238;236;235m⣿[0m[38;2;238;236;235m⣿[0m[38;2;237;234;234m⣿[0m[38;2;238;231;235m⣿[0m[38;2;238;235;232m⣿[0m[38;2;247;245;242m⣿[0m[38;2;231;236;238m⣿[0m[38;2;246;247;243m⣿[0m[38;2;248;246;243m⣿[0m[38;2;249;247;244m⣿[0m[38;2;249;247;244m⣿[0m[38;2;246;244;241m⣿[0m[38;2;245;243;241m⣿[0m[38;2;202;193;216m⣿[0m[38;2;250;233;194m⣿[0m[38;2;251;231;193m⣿[0m[38;2;249;230;189m⣿[0m[38;2;250;230;181m⣿[0m[38;2;249;215;163m⣿[0m[38;2;112;102;154m⣾[0m[38;2;219;194;200m⣽[0m[38;2;109;95;142m⣶[0m[38;2;170;161;130m⣿[0m[38;2;191;148;100m⣏[0m[38;2;251;253;240m⣿[0m[38;2;249;243;237m⣿[0m
|
||||
[38;2;245;246;241m⣿[0m[38;2;242;243;241m⣿[0m[38;2;240;240;240m⣿[0m[38;2;238;237;238m⣿[0m[38;2;225;220;226m⣿[0m[38;2;238;237;237m⣿[0m[38;2;238;237;237m⣿[0m[38;2;238;236;235m⣿[0m[38;2;238;236;234m⣿[0m[38;2;238;236;235m⣿[0m[38;2;238;236;235m⣿[0m[38;2;236;234;233m⣿[0m[38;2;238;233;233m⣿[0m[38;2;236;231;232m⣿[0m[38;2;234;228;228m⣿[0m[38;2;247;244;241m⣿[0m[38;2;246;246;240m⣿[0m[38;2;246;246;242m⣿[0m[38;2;248;248;244m⣿[0m[38;2;247;245;241m⣿[0m[38;2;246;245;240m⣿[0m[38;2;247;246;239m⣿[0m[38;2;244;245;239m⣿[0m[38;2;243;244;239m⣿[0m[38;2;240;237;237m⣿[0m[38;2;171;154;201m⣿[0m[38;2;215;221;229m⣿[0m[38;2;251;250;244m⣿[0m[38;2;248;242;236m⣿[0m[38;2;244;241;235m⣿[0m[38;2;213;199;219m⣿[0m[38;2;244;224;164m⣿[0m[38;2;248;221;153m⣿[0m[38;2;254;220;140m⣿[0m[38;2;131;114;135m⣼[0m[38;2;246;241;236m⣿[0m
|
||||
[38;2;241;241;241m⣿[0m[38;2;241;239;238m⣿[0m[38;2;240;238;235m⣿[0m[38;2;240;239;237m⣿[0m[38;2;225;218;227m⣿[0m[38;2;238;235;234m⣿[0m[38;2;233;230;230m⣿[0m[38;2;237;236;235m⣿[0m[38;2;232;230;229m⣿[0m[38;2;235;227;230m⣿[0m[38;2;235;236;234m⣿[0m[38;2;236;233;232m⣿[0m[38;2;237;232;231m⣿[0m[38;2;230;224;225m⣿[0m[38;2;233;228;228m⣿[0m[38;2;242;236;231m⣿[0m[38;2;237;232;230m⣿[0m[38;2;246;244;239m⣿[0m[38;2;246;244;240m⣿[0m[38;2;244;245;239m⣿[0m[38;2;244;245;239m⣿[0m[38;2;244;245;239m⣿[0m[38;2;244;245;239m⣿[0m[38;2;247;246;240m⣿[0m[38;2;248;247;239m⣿[0m[38;2;247;246;237m⣿[0m[38;2;247;246;240m⣿[0m[38;2;247;246;239m⣿[0m[38;2;248;244;237m⣿[0m[38;2;247;244;239m⣿[0m[38;2;252;248;238m⣿[0m[38;2;158;130;180m⣿[0m[38;2;251;226;169m⣿[0m[38;2;253;229;162m⣿[0m[38;2;200;152;128m⣽[0m[38;2;251;247;233m⣫[0m
|
||||
[38;2;240;238;236m⣿[0m[38;2;238;236;232m⣿[0m[38;2;235;233;231m⣿[0m[38;2;226;218;225m⣿[0m[38;2;238;233;232m⣿[0m[38;2;232;226;226m⣿[0m[38;2;237;231;231m⣿[0m[38;2;230;221;223m⣿[0m[38;2;232;228;227m⣿[0m[38;2;169;108;147m⢹[0m[38;2;242;243;237m⣿[0m[38;2;227;217;218m⣿[0m[38;2;234;226;226m⣿[0m[38;2;234;229;229m⣿[0m[38;2;230;215;219m⣿[0m[38;2;236;234;230m⣿[0m[38;2;235;227;225m⣿[0m[38;2;245;242;237m⣿[0m[38;2;243;242;234m⣿[0m[38;2;244;245;239m⣿[0m[38;2;244;245;239m⣿[0m[38;2;244;245;239m⣿[0m[38;2;244;245;239m⣿[0m[38;2;245;245;239m⣿[0m[38;2;246;246;239m⣿[0m[38;2;248;247;239m⣿[0m[38;2;247;246;238m⣿[0m[38;2;246;244;240m⣿[0m[38;2;249;243;239m⣿[0m[38;2;249;244;237m⣿[0m[38;2;249;244;237m⣿[0m[38;2;243;237;235m⣿[0m[38;2;238;242;238m⣿[0m[38;2;250;242;236m⣿[0m[38;2;243;238;233m⣿[0m[38;2;167;139;179m⣿[0m
|
||||
[38;2;236;234;231m⣿[0m[38;2;237;229;228m⣿[0m[38;2;235;229;227m⣿[0m[38;2;226;218;220m⣿[0m[38;2;229;223;223m⣿[0m[38;2;232;223;224m⡿[0m[38;2;193;152;176m⣹[0m[38;2;200;166;186m⣿[0m[38;2;227;206;215m⡇[0m[38;2;139;80;116m⢸[0m[38;2;245;244;239m⣿[0m[38;2;187;165;174m⢿[0m[38;2;221;205;213m⣿[0m[38;2;238;232;230m⣿[0m[38;2;218;194;207m⡇[0m[38;2;229;222;216m⣿[0m[38;2;233;224;225m⣿[0m[38;2;234;230;228m⣿[0m[38;2;242;237;233m⣿[0m[38;2;245;243;235m⣿[0m[38;2;246;245;239m⣿[0m[38;2;246;245;238m⣿[0m[38;2;248;247;239m⣿[0m[38;2;248;247;239m⣿[0m[38;2;247;246;238m⣿[0m[38;2;247;246;240m⣿[0m[38;2;246;245;240m⣿[0m[38;2;247;243;241m⣿[0m[38;2;248;243;238m⣿[0m[38;2;249;243;239m⣿[0m[38;2;249;244;236m⣿[0m[38;2;248;243;236m⣿[0m[38;2;247;241;235m⣿[0m[38;2;248;238;237m⣿[0m[38;2;245;239;233m⣿[0m[38;2;229;213;223m⣿[0m
|
||||
[38;2;236;229;227m⣿[0m[38;2;233;225;226m⣿[0m[38;2;232;224;225m⣿[0m[38;2;231;223;224m⣿[0m[38;2;227;216;218m⡿[0m[38;2;202;156;177m⣁[0m[38;2;180;152;166m⣇[0m[38;2;163;131;144m⣿[0m[38;2;149;90;122m⠀[0m[38;2;130;73;103m⠈[0m[38;2;243;240;237m⡟[0m[38;2;142;79;108m⠘[0m[38;2;223;205;215m⣿[0m[38;2;239;234;231m⣿[0m[38;2;211;182;200m⡇[0m[38;2;155;104;123m⠸[0m[38;2;239;232;231m⣿[0m[38;2;236;229;229m⣿[0m[38;2;235;228;226m⣿[0m[38;2;238;232;229m⣿[0m[38;2;247;242;236m⣿[0m[38;2;238;230;227m⣿[0m[38;2;247;243;240m⣿[0m[38;2;247;244;241m⣿[0m[38;2;247;243;240m⣿[0m[38;2;247;244;239m⣿[0m[38;2;249;243;238m⣿[0m[38;2;249;243;239m⣿[0m[38;2;244;238;234m⣿[0m[38;2;247;243;237m⣿[0m[38;2;248;241;236m⣿[0m[38;2;248;238;237m⣿[0m[38;2;249;237;237m⣿[0m[38;2;245;238;234m⣿[0m[38;2;244;237;231m⣿[0m[38;2;244;238;234m⣿[0m
|
||||
[38;2;232;225;226m⣿[0m[38;2;228;215;217m⣿[0m[38;2;231;222;220m⣿[0m[38;2;227;217;218m⣟[0m[38;2;139;84;117m⢀[0m[38;2;194;185;187m⠿[0m[38;2;178;167;177m⡏[0m[38;2;168;155;158m⣽[0m[38;2;18;32;106m⣴[0m[38;2;30;48;119m⣦[0m[38;2;209;210;212m⣿[0m[38;2;36;27;48m⠀[0m[38;2;162;153;147m⣹[0m[38;2;226;217;214m⣿[0m[38;2;209;171;191m⡇[0m[38;2;151;77;107m⠀[0m[38;2;203;173;171m⢹[0m[38;2;237;227;228m⣿[0m[38;2;218;194;205m⣿[0m[38;2;241;234;230m⣿[0m[38;2;240;232;230m⣿[0m[38;2;239;231;230m⣿[0m[38;2;243;235;231m⣿[0m[38;2;249;244;237m⣿[0m[38;2;249;243;239m⣿[0m[38;2;249;244;237m⣿[0m[38;2;249;244;237m⣿[0m[38;2;245;238;235m⣿[0m[38;2;244;237;233m⣿[0m[38;2;244;239;235m⣿[0m[38;2;241;236;229m⣿[0m[38;2;242;235;231m⣿[0m[38;2;246;240;236m⣿[0m[38;2;243;239;231m⣿[0m[38;2;245;238;232m⣿[0m[38;2;239;228;229m⣿[0m
|
||||
[38;2;227;214;217m⣿[0m[38;2;229;220;219m⣿[0m[38;2;228;220;219m⣿[0m[38;2;179;131;154m⣿[0m[38;2;181;148;164m⣿[0m[38;2;165;110;134m⣷[0m[38;2;136;87;113m⣶[0m[38;2;187;204;223m⣿[0m[38;2;210;242;255m⣿[0m[38;2;245;254;252m⣿[0m[38;2;191;215;250m⣿[0m[38;2;120;123;202m⣧[0m[38;2;155;150;149m⣿[0m[38;2;174;142;150m⣿[0m[38;2;229;211;220m⣷[0m[38;2;151;82;103m⣀[0m[38;2;160;81;111m⡀[0m[38;2;227;217;211m⣿[0m[38;2;237;225;227m⡟[0m[38;2;221;204;203m⣿[0m[38;2;242;231;229m⣿[0m[38;2;234;222;223m⣿[0m[38;2;241;234;230m⣿[0m[38;2;246;242;235m⣿[0m[38;2;246;239;235m⣿[0m[38;2;246;240;234m⣿[0m[38;2;242;238;231m⣿[0m[38;2;232;223;220m⣿[0m[38;2;247;243;238m⠟[0m[38;2;169;80;101m⣸[0m[38;2;247;244;239m⣿[0m[38;2;232;217;216m⣿[0m[38;2;239;231;226m⣿[0m[38;2;243;238;231m⣿[0m[38;2;244;234;230m⣿[0m[38;2;227;205;212m⣿[0m
|
||||
[38;2;221;204;211m⣿[0m[38;2;231;221;219m⣿[0m[38;2;226;212;213m⣿[0m[38;2;207;173;178m⣿[0m[38;2;234;220;208m⣿[0m[38;2;255;242;225m⣿[0m[38;2;238;220;212m⣿[0m[38;2;196;162;172m⣿[0m[38;2;196;166;173m⣿[0m[38;2;188;159;172m⣿[0m[38;2;182;152;165m⣿[0m[38;2;176;139;156m⣿[0m[38;2;153;112;130m⣶[0m[38;2;161;116;130m⣿[0m[38;2;195;167;166m⣿[0m[38;2;181;126;141m⣿[0m[38;2;170;117;131m⣿[0m[38;2;184;132;142m⣿[0m[38;2;218;190;201m⣷[0m[38;2;169;100;117m⣞[0m[38;2;233;222;219m⣿[0m[38;2;242;233;232m⣿[0m[38;2;212;189;194m⣿[0m[38;2;239;228;228m⣿[0m[38;2;238;230;229m⣿[0m[38;2;230;220;220m⡿[0m[38;2;199;141;158m⣹[0m[38;2;249;255;249m⠏[0m[38;2;138;49;77m⠀[0m[38;2;185;150;154m⣿[0m[38;2;230;209;214m⠃[0m[38;2;219;209;202m⣿[0m[38;2;218;183;190m⣿[0m[38;2;245;236;231m⣿[0m[38;2;242;235;229m⣿[0m[38;2;221;192;203m⣿[0m
|
||||
[38;2;224;205;211m⣿[0m[38;2;230;217;217m⣿[0m[38;2;227;210;207m⣿[0m[38;2;252;236;220m⣿[0m[38;2;251;238;220m⣿[0m[38;2;251;238;220m⣿[0m[38;2;251;238;220m⣿[0m[38;2;252;237;220m⣿[0m[38;2;252;236;220m⣿[0m[38;2;255;242;224m⣿[0m[38;2;246;229;218m⣿[0m[38;2;250;235;221m⣿[0m[38;2;254;239;224m⣿[0m[38;2;255;241;225m⣿[0m[38;2;255;240;222m⣿[0m[38;2;255;240;222m⣿[0m[38;2;252;235;222m⣿[0m[38;2;236;223;216m⣿[0m[38;2;253;238;222m⣿[0m[38;2;191;136;147m⣿[0m[38;2;180;115;128m⣧[0m[38;2;199;179;173m⣿[0m[38;2;199;154;166m⣿[0m[38;2;235;229;227m⣿[0m[38;2;233;229;226m⣯[0m[38;2;111;55;75m⢀[0m[38;2;163;150;151m⣇[0m[38;2;55;18;35m⣀[0m[38;2;51;19;32m⡸[0m[38;2;235;213;216m⠁[0m[38;2;132;50;65m⢸[0m[38;2;242;245;238m⠏[0m[38;2;187;123;127m⢿[0m[38;2;244;236;230m⣿[0m[38;2;244;238;231m⣿[0m[38;2;213;181;190m⣿[0m
|
||||
[38;2;231;216;216m⣿[0m[38;2;225;205;206m⣿[0m[38;2;242;223;211m⣿[0m[38;2;240;221;211m⣿[0m[38;2;253;234;219m⣿[0m[38;2;253;238;221m⣿[0m[38;2;252;237;222m⣿[0m[38;2;253;236;222m⣿[0m[38;2;253;237;221m⣿[0m[38;2;254;237;221m⣿[0m[38;2;253;237;221m⣿[0m[38;2;253;237;221m⣿[0m[38;2;252;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;221m⣿[0m[38;2;253;235;220m⣿[0m[38;2;251;233;219m⣿[0m[38;2;254;236;220m⣿[0m[38;2;252;235;219m⣿[0m[38;2;236;213;205m⣿[0m[38;2;202;161;163m⢿[0m[38;2;198;155;156m⣿[0m[38;2;178;121;129m⣿[0m[38;2;240;235;233m⣏[0m[38;2;187;136;138m⡉[0m[38;2;144;180;233m⠻[0m[38;2;206;231;248m⣿[0m[38;2;207;230;246m⣿[0m[38;2;125;128;210m⡇[0m[38;2;30;32;70m⢠[0m[38;2;139;127;126m⣿[0m[38;2;64;24;47m⣄[0m[38;2;132;79;79m⢸[0m[38;2;244;239;234m⣿[0m[38;2;244;236;232m⣿[0m[38;2;236;229;224m⣿[0m
|
||||
[38;2;229;213;211m⣿[0m[38;2;220;199;200m⣿[0m[38;2;232;213;208m⣿[0m[38;2;249;231;220m⣿[0m[38;2;248;228;212m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;255;234;219m⣿[0m[38;2;255;235;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;255;243;226m⣿[0m[38;2;249;231;216m⣿[0m[38;2;253;236;220m⣿[0m[38;2;255;250;233m⠏[0m[38;2;107;81;85m⣸[0m[38;2;208;174;176m⣿[0m[38;2;232;215;205m⣿[0m[38;2;255;239;222m⣿[0m[38;2;197;139;148m⣿[0m[38;2;182;123;132m⣿[0m[38;2;158;96;118m⣦[0m[38;2;172;167;188m⣭[0m[38;2;173;188;242m⣑[0m[38;2;189;197;190m⢛[0m[38;2;205;190;184m⠋[0m[38;2;156;120;123m⠁[0m[38;2;79;43;52m⢸[0m[38;2;251;246;240m⣿[0m[38;2;223;200;204m⣿[0m[38;2;244;238;231m⣿[0m
|
||||
[38;2;228;212;209m⣿[0m[38;2;228;212;209m⣿[0m[38;2;223;202;200m⣿[0m[38;2;253;235;219m⣿[0m[38;2;254;235;220m⣿[0m[38;2;253;237;222m⣿[0m[38;2;254;235;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;253;236;220m⣿[0m[38;2;252;234;218m⣿[0m[38;2;254;236;221m⣿[0m[38;2;255;247;229m⣿[0m[38;2;149;114;122m⣾[0m[38;2;255;235;220m⣿[0m[38;2;254;234;219m⣿[0m[38;2;254;236;221m⣿[0m[38;2;254;235;221m⣿[0m[38;2;255;236;221m⣿[0m[38;2;253;232;218m⣿[0m[38;2;255;239;224m⣿[0m[38;2;237;211;204m⣿[0m[38;2;219;181;178m⣿[0m[38;2;206;160;160m⣿[0m[38;2;189;124;130m⣿[0m[38;2;179;109;114m⣿[0m[38;2;174;97;103m⢸[0m[38;2;245;243;235m⣿[0m[38;2;243;236;232m⣿[0m[38;2;241;234;232m⣿[0m
|
||||
[38;2;205;172;171m⣿[0m[38;2;227;208;207m⣿[0m[38;2;233;212;202m⣿[0m[38;2;232;206;200m⣿[0m[38;2;255;237;217m⣿[0m[38;2;254;234;219m⣿[0m[38;2;255;235;220m⣿[0m[38;2;255;235;220m⣿[0m[38;2;255;235;220m⣿[0m[38;2;254;234;219m⣿[0m[38;2;254;234;219m⣿[0m[38;2;255;235;220m⣿[0m[38;2;254;233;219m⣿[0m[38;2;254;233;219m⣿[0m[38;2;255;235;220m⣿[0m[38;2;255;234;219m⣿[0m[38;2;253;233;220m⣿[0m[38;2;253;233;219m⣿[0m[38;2;253;233;218m⣿[0m[38;2;253;233;218m⣿[0m[38;2;253;233;218m⣿[0m[38;2;247;227;212m⣿[0m[38;2;254;233;216m⣿[0m[38;2;253;233;218m⣿[0m[38;2;252;233;217m⣿[0m[38;2;253;232;215m⣿[0m[38;2;253;234;216m⣿[0m[38;2;248;224;209m⣿[0m[38;2;252;231;216m⣿[0m[38;2;252;232;217m⣿[0m[38;2;253;227;214m⣿[0m[38;2;184;124;124m⢯[0m[38;2;170;116;125m⣿[0m[38;2;245;244;237m⣿[0m[38;2;243;237;230m⣿[0m[38;2;240;231;229m⣿[0m
|
||||
[38;2;174;114;133m⣿[0m[38;2;212;187;181m⣿[0m[38;2;217;191;191m⣿[0m[38;2;240;217;203m⣿[0m[38;2;254;232;215m⣿[0m[38;2;249;229;211m⣿[0m[38;2;252;233;216m⣿[0m[38;2;252;232;217m⣿[0m[38;2;252;232;216m⣿[0m[38;2;252;234;215m⣿[0m[38;2;252;233;216m⣿[0m[38;2;252;233;216m⣿[0m[38;2;250;232;216m⣿[0m[38;2;251;233;214m⣿[0m[38;2;252;233;214m⣿[0m[38;2;252;233;213m⣿[0m[38;2;252;233;215m⣿[0m[38;2;253;234;215m⣿[0m[38;2;252;233;216m⣿[0m[38;2;252;233;213m⣿[0m[38;2;252;233;213m⣿[0m[38;2;252;233;214m⣿[0m[38;2;252;233;212m⣿[0m[38;2;252;233;215m⣿[0m[38;2;252;233;213m⣿[0m[38;2;252;233;215m⣿[0m[38;2;252;233;215m⣿[0m[38;2;253;233;215m⣿[0m[38;2;255;232;216m⣿[0m[38;2;254;231;214m⣿[0m[38;2;205;144;144m⣷[0m[38;2;187;155;162m⢿[0m[38;2;236;225;223m⣿[0m[38;2;244;237;231m⣿[0m[38;2;240;232;230m⣿[0m[38;2;237;230;223m⣿[0m
|
||||
[38;2;191;142;160m⣿[0m[38;2;181;119;131m⢿[0m[38;2;232;207;192m⣿[0m[38;2;232;204;196m⣿[0m[38;2;254;231;212m⣿[0m[38;2;254;230;214m⣿[0m[38;2;255;231;215m⣿[0m[38;2;255;231;215m⣿[0m[38;2;255;231;215m⣿[0m[38;2;254;232;215m⣿[0m[38;2;255;231;215m⣿[0m[38;2;255;232;215m⣿[0m[38;2;255;231;215m⣿[0m[38;2;255;231;215m⣿[0m[38;2;255;233;217m⣿[0m[38;2;240;219;201m⣿[0m[38;2;255;233;214m⣿[0m[38;2;255;232;213m⣿[0m[38;2;254;231;212m⣿[0m[38;2;255;232;213m⣿[0m[38;2;255;232;213m⣿[0m[38;2;255;232;213m⣿[0m[38;2;255;231;215m⣿[0m[38;2;255;232;213m⣿[0m[38;2;255;232;212m⣿[0m[38;2;254;231;211m⣿[0m[38;2;254;230;211m⣿[0m[38;2;250;227;208m⣿[0m[38;2;243;214;197m⣿[0m[38;2;227;193;190m⠋[0m[38;2;157;72;96m⢠[0m[38;2;192;152;162m⣿[0m[38;2;240;232;226m⣿[0m[38;2;240;233;227m⣿[0m[38;2;237;229;225m⣿[0m[38;2;233;223;220m⣿[0m
|
||||
[38;2;226;206;203m⣿[0m[38;2;172;108;130m⣷[0m[38;2;203;147;121m⣿[0m[38;2;243;206;179m⣿[0m[38;2;232;204;191m⡿[0m[38;2;250;227;206m⠿[0m[38;2;250;228;206m⠿[0m[38;2;249;227;207m⠟[0m[38;2;250;230;208m⠛[0m[38;2;252;233;209m⣻[0m[38;2;254;232;210m⣿[0m[38;2;255;231;209m⣿[0m[38;2;255;232;209m⣿[0m[38;2;255;233;210m⣿[0m[38;2;253;231;209m⣿[0m[38;2;254;231;209m⣿[0m[38;2;251;232;207m⣿[0m[38;2;250;226;205m⡿[0m[38;2;250;228;207m⠿[0m[38;2;252;229;207m⣿[0m[38;2;252;229;207m⣿[0m[38;2;252;230;208m⣿[0m[38;2;251;229;207m⣿[0m[38;2;251;228;206m⣿[0m[38;2;251;228;206m⣿[0m[38;2;252;229;207m⣿[0m[38;2;251;228;206m⣿[0m[38;2;253;229;207m⣿[0m[38;2;250;218;197m⠃[0m[38;2;141;65;92m⣠[0m[38;2;188;156;163m⣿[0m[38;2;236;231;224m⣿[0m[38;2;237;229;225m⣿[0m[38;2;234;224;221m⣟[0m[38;2;210;182;185m⣿[0m[38;2;228;214;213m⣿[0m
|
||||
[38;2;220;201;199m⣿[0m[38;2;209;179;186m⣏[0m[38;2;184;107;96m⠁[0m[38;2;97;54;111m⢀[0m[38;2;142;101;143m⣶[0m[38;2;81;57;142m⣶[0m[38;2;87;64;143m⣶[0m[38;2;88;68;145m⣶[0m[38;2;104;96;156m⣾[0m[38;2;252;255;242m⣿[0m[38;2;253;248;236m⣿[0m[38;2;254;249;236m⣿[0m[38;2;251;245;233m⣿[0m[38;2;247;237;218m⣿[0m[38;2;255;248;222m⣿[0m[38;2;255;246;222m⣿[0m[38;2;252;245;221m⣿[0m[38;2;255;252;227m⣿[0m[38;2;92;55;145m⣆[0m[38;2;80;47;136m⠀[0m[38;2;100;59;130m⠈[0m[38;2;162;124;137m⠁[0m[38;2;196;157;164m⠉[0m[38;2;255;238;208m⠛[0m[38;2;250;224;204m⢿[0m[38;2;252;227;205m⣿[0m[38;2;246;215;196m⣿[0m[38;2;246;216;195m⣿[0m[38;2;141;90;122m⣴[0m[38;2;228;224;222m⣿[0m[38;2;233;227;223m⣿[0m[38;2;227;218;214m⠿[0m[38;2;239;235;229m⢋[0m[38;2;117;41;71m⡾[0m[38;2;220;187;191m⢡[0m[38;2;222;214;204m⣿[0m
|
||||
27
modules/home/programs/helix.nix
Normal file
27
modules/home/programs/helix.nix
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{ pkgs, lib, ... }: {
|
||||
programs.helix = {
|
||||
enable = lib.mkDefault true;
|
||||
settings = {
|
||||
theme = "gruber-darker";
|
||||
editor = {
|
||||
auto-save = {
|
||||
focus-lost = true;
|
||||
after-delay = {
|
||||
enable = true;
|
||||
timeout = 3000;
|
||||
};
|
||||
};
|
||||
cursor-shape = {
|
||||
normal = "block";
|
||||
insert = "bar";
|
||||
select = "underline";
|
||||
};
|
||||
};
|
||||
};
|
||||
languages.language = [{
|
||||
name = "nix";
|
||||
auto-format = true;
|
||||
formatter.command = "${pkgs.nixfmt-classic}/bin/nixfmt";
|
||||
}];
|
||||
};
|
||||
}
|
||||
62
modules/home/programs/neovim.nix
Normal file
62
modules/home/programs/neovim.nix
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
{ pkgs, ... }: {
|
||||
programs.neovim = {
|
||||
enable = true;
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
vimdiffAlias = true;
|
||||
|
||||
withNodeJs = true;
|
||||
withPython3 = true;
|
||||
withRuby = true;
|
||||
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
# Native extensions that need building
|
||||
telescope-fzf-native-nvim
|
||||
blink-cmp # Pre-built with Rust backend for fast fuzzy matching
|
||||
];
|
||||
|
||||
extraPackages = with pkgs; [
|
||||
# LSP Servers
|
||||
lua-language-server
|
||||
nil # Nix LSP
|
||||
pyright
|
||||
nodePackages.typescript-language-server
|
||||
rust-analyzer
|
||||
gopls
|
||||
clang-tools # provides clangd
|
||||
|
||||
# Formatters
|
||||
stylua # Lua
|
||||
nixfmt-classic # Nix (matches your fmt command)
|
||||
ruff # Python (formatter + linter)
|
||||
prettierd # JS/TS/JSON/YAML/Markdown
|
||||
rustfmt # Rust
|
||||
gofumpt # Go (stricter than gofmt)
|
||||
shfmt # Shell scripts
|
||||
|
||||
# Linters
|
||||
nodePackages.eslint # JavaScript/TypeScript
|
||||
shellcheck # Shell scripts
|
||||
|
||||
# Tools
|
||||
ripgrep
|
||||
fd
|
||||
git
|
||||
ast-grep
|
||||
|
||||
# Additional tools for LazyVim features
|
||||
tree-sitter # Required for treesitter parser compilation
|
||||
imagemagick # Image conversion for snacks.nvim
|
||||
ghostscript # PDF rendering support
|
||||
tectonic # LaTeX math rendering
|
||||
luarocks # Lua package manager for plugins
|
||||
nodePackages.mermaid-cli # Mermaid diagram rendering
|
||||
];
|
||||
};
|
||||
|
||||
# Symlink LazyVim config to ~/.config/nvim
|
||||
xdg.configFile."nvim" = {
|
||||
source = ./nvim;
|
||||
recursive = true;
|
||||
};
|
||||
}
|
||||
27
modules/home/programs/nvim/.luarc.json
Normal file
27
modules/home/programs/nvim/.luarc.json
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"$schema": "https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json",
|
||||
"runtime": {
|
||||
"version": "LuaJIT",
|
||||
"path": [
|
||||
"lua/?.lua",
|
||||
"lua/?/init.lua"
|
||||
]
|
||||
},
|
||||
"diagnostics": {
|
||||
"globals": ["vim"]
|
||||
},
|
||||
"workspace": {
|
||||
"library": [
|
||||
"${3rd}/luv/library",
|
||||
"${3rd}/busted/library",
|
||||
"${3rd}/luassert/library"
|
||||
],
|
||||
"checkThirdParty": false
|
||||
},
|
||||
"completion": {
|
||||
"callSnippet": "Replace"
|
||||
},
|
||||
"telemetry": {
|
||||
"enable": false
|
||||
}
|
||||
}
|
||||
9
modules/home/programs/nvim/init.lua
Normal file
9
modules/home/programs/nvim/init.lua
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
-- Load configuration
|
||||
require("config.options")
|
||||
require("config.keymaps")
|
||||
require("config.autocmds")
|
||||
|
||||
-- Load LazyVim utilities before lazy plugin manager
|
||||
require("config.lazyvim")
|
||||
|
||||
require("config.lazy")
|
||||
74
modules/home/programs/nvim/lazy-lock.json
Normal file
74
modules/home/programs/nvim/lazy-lock.json
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
{
|
||||
"bufferline.nvim": {
|
||||
"branch": "main",
|
||||
"commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3"
|
||||
},
|
||||
"catppuccin": {
|
||||
"branch": "main",
|
||||
"commit": "8c4125e3c746976ba025dc5d908fa22c6aa09486"
|
||||
},
|
||||
"gruvbox.nvim": {
|
||||
"branch": "main",
|
||||
"commit": "5e0a460d8e0f7f669c158dedd5f9ae2bcac31437"
|
||||
},
|
||||
"indent-blankline.nvim": {
|
||||
"branch": "master",
|
||||
"commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba"
|
||||
},
|
||||
"lazy.nvim": {
|
||||
"branch": "main",
|
||||
"commit": "ed4dc336a73c18da6fea6e1cf7ad6e1b76d281eb"
|
||||
},
|
||||
"lazydev.nvim": {
|
||||
"branch": "main",
|
||||
"commit": "12532f81ef8aa35dd4a44713ea32e760d643675c"
|
||||
},
|
||||
"lualine.nvim": {
|
||||
"branch": "master",
|
||||
"commit": "3946f0122255bc377d14a59b27b609fb3ab25768"
|
||||
},
|
||||
"mini.ai": {
|
||||
"branch": "main",
|
||||
"commit": "11c57180bc9084089206e211ac7aa598bedc9673"
|
||||
},
|
||||
"mini.bufremove": {
|
||||
"branch": "main",
|
||||
"commit": "1b5d7e7bc81cd02476bdd964c3d850c48eb91a07"
|
||||
},
|
||||
"mini.pairs": {
|
||||
"branch": "main",
|
||||
"commit": "b9aada8c0e59f2b938e98fbf4eae0799eba96ad9"
|
||||
},
|
||||
"noice.nvim": {
|
||||
"branch": "main",
|
||||
"commit": "d14d02cb709e3bb2da88363c32f8b4250bced52d"
|
||||
},
|
||||
"nui.nvim": {
|
||||
"branch": "main",
|
||||
"commit": "de740991c12411b663994b2860f1a4fd0937c130"
|
||||
},
|
||||
"nvim-lint": {
|
||||
"branch": "master",
|
||||
"commit": "9da1fb942dd0668d5182f9c8dee801b9c190e2bb"
|
||||
},
|
||||
"nvim-lspconfig": {
|
||||
"branch": "master",
|
||||
"commit": "2b52bc2190c8efde2e4de02d829a138666774c7c"
|
||||
},
|
||||
"nvim-treesitter": {
|
||||
"branch": "master",
|
||||
"commit": "42fc28ba918343ebfd5565147a42a26580579482"
|
||||
},
|
||||
"nvim-web-devicons": {
|
||||
"branch": "master",
|
||||
"commit": "8dcb311b0c92d460fac00eac706abd43d94d68af"
|
||||
},
|
||||
"tokyonight.nvim": {
|
||||
"branch": "main",
|
||||
"commit": "4fe1b0c44f5d6ee769cdfbdffc7ccb703f53feda"
|
||||
},
|
||||
"ts-comments.nvim": {
|
||||
"branch": "main",
|
||||
"commit": "217ab9cc137fceb6659b53790bd25e608219abe1"
|
||||
}
|
||||
}
|
||||
9
modules/home/programs/nvim/lua/config/autocmds.lua
Normal file
9
modules/home/programs/nvim/lua/config/autocmds.lua
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
-- Essential autocommands (minimal)
|
||||
local autocmd = vim.api.nvim_create_autocmd
|
||||
|
||||
-- Highlight on yank
|
||||
autocmd("TextYankPost", {
|
||||
callback = function()
|
||||
vim.highlight.on_yank()
|
||||
end,
|
||||
})
|
||||
9
modules/home/programs/nvim/lua/config/keymaps.lua
Normal file
9
modules/home/programs/nvim/lua/config/keymaps.lua
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
-- Essential keymaps (minimal improvements over default Vim)
|
||||
local keymap = vim.keymap
|
||||
|
||||
-- Clear search highlight with <esc>
|
||||
keymap.set("n", "<esc>", "<cmd>noh<cr>", { desc = "Clear search highlight" })
|
||||
|
||||
-- Better indenting (stay in visual mode)
|
||||
keymap.set("v", "<", "<gv")
|
||||
keymap.set("v", ">", ">gv")
|
||||
52
modules/home/programs/nvim/lua/config/lazy.lua
Normal file
52
modules/home/programs/nvim/lua/config/lazy.lua
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
|
||||
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
|
||||
if vim.v.shell_error ~= 0 then
|
||||
vim.api.nvim_echo({
|
||||
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
|
||||
{ out, "WarningMsg" },
|
||||
{ "\nPress any key to exit..." },
|
||||
}, true, {})
|
||||
vim.fn.getchar()
|
||||
os.exit(1)
|
||||
end
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
vim.g.mapleader = " "
|
||||
vim.g.maplocalleader = "\\"
|
||||
require("lazy").setup({
|
||||
spec = {
|
||||
{
|
||||
"LazyVim/LazyVim",
|
||||
import = "lazyvim.plugins",
|
||||
},
|
||||
|
||||
{ import = "plugins" },
|
||||
},
|
||||
|
||||
|
||||
defaults = {
|
||||
lazy = false,
|
||||
version = false,
|
||||
},
|
||||
|
||||
install = { colorscheme = { "gruvbox", "habamax" } },
|
||||
|
||||
checker = { enabled = false },
|
||||
change_detection = { notify = false },
|
||||
performance = {
|
||||
rtp = {
|
||||
disabled_plugins = {
|
||||
"gzip",
|
||||
"matchit",
|
||||
"matchparen",
|
||||
"netrwPlugin",
|
||||
"tarPlugin",
|
||||
"tohtml",
|
||||
"tutor",
|
||||
"zipPlugin",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
53
modules/home/programs/nvim/lua/config/lazyvim/init.lua
Normal file
53
modules/home/programs/nvim/lua/config/lazyvim/init.lua
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
-- LazyVim utilities module
|
||||
-- Provides helper functions for plugin configuration
|
||||
|
||||
local M = {}
|
||||
|
||||
-- Mini module utilities
|
||||
M.mini = {}
|
||||
|
||||
-- Setup mini.pairs with given options
|
||||
function M.mini.pairs(opts)
|
||||
require("mini.pairs").setup(opts)
|
||||
end
|
||||
|
||||
-- Text object for entire buffer
|
||||
M.mini.ai_buffer = function(ai)
|
||||
local n_lines = vim.fn.line("$")
|
||||
local start_line, end_line = 1, n_lines
|
||||
if n_lines == 0 then
|
||||
return { from = { line = 0, col = 0 } }
|
||||
end
|
||||
local start_col, end_col = 1, math.max(vim.fn.getline(end_line):len(), 1)
|
||||
return {
|
||||
from = { line = start_line, col = start_col },
|
||||
to = { line = end_line, col = end_col },
|
||||
}
|
||||
end
|
||||
|
||||
-- Text object hints are now handled by mini.clue
|
||||
|
||||
-- Run callback when plugin is loaded
|
||||
function M.on_load(name, fn)
|
||||
local Config = require("lazy.core.config")
|
||||
if Config.plugins[name] and Config.plugins[name]._.loaded then
|
||||
vim.schedule(function()
|
||||
fn(name)
|
||||
end)
|
||||
else
|
||||
vim.api.nvim_create_autocmd("User", {
|
||||
pattern = "LazyLoad",
|
||||
callback = function(event)
|
||||
if event.data == name then
|
||||
fn(name)
|
||||
return true
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
-- Make LazyVim global
|
||||
_G.LazyVim = M
|
||||
|
||||
return M
|
||||
38
modules/home/programs/nvim/lua/config/options.lua
Normal file
38
modules/home/programs/nvim/lua/config/options.lua
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
-- Minimal essential options
|
||||
local opt = vim.opt
|
||||
|
||||
-- Leader keys
|
||||
vim.g.mapleader = " "
|
||||
vim.g.maplocalleader = "\\"
|
||||
|
||||
-- Line numbers
|
||||
opt.number = true
|
||||
opt.relativenumber = true
|
||||
|
||||
-- Indentation
|
||||
opt.tabstop = 2
|
||||
opt.shiftwidth = 2
|
||||
opt.expandtab = true
|
||||
opt.smartindent = true
|
||||
|
||||
-- Search
|
||||
opt.ignorecase = true
|
||||
opt.smartcase = true
|
||||
|
||||
-- UI
|
||||
opt.termguicolors = true
|
||||
opt.signcolumn = "yes"
|
||||
opt.cursorline = true
|
||||
|
||||
-- Splits
|
||||
opt.splitbelow = true
|
||||
opt.splitright = true
|
||||
|
||||
-- Clipboard
|
||||
opt.clipboard = "unnamedplus"
|
||||
|
||||
-- Undo
|
||||
opt.undofile = true
|
||||
|
||||
-- Mouse
|
||||
opt.mouse = "a"
|
||||
52
modules/home/programs/nvim/lua/plugins/auto-save.lua
Normal file
52
modules/home/programs/nvim/lua/plugins/auto-save.lua
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
return {
|
||||
"okuuva/auto-save.nvim",
|
||||
event = { "InsertLeave", "TextChanged" },
|
||||
opts = {
|
||||
enabled = true, -- Plugin is loaded but conditional on manual toggle
|
||||
execution_message = {
|
||||
enabled = true,
|
||||
message = function()
|
||||
return "AutoSave: saved at " .. vim.fn.strftime("%H:%M:%S")
|
||||
end,
|
||||
dim = 0.18,
|
||||
cleaning_interval = 1250,
|
||||
},
|
||||
trigger_events = {
|
||||
immediate_save = { "BufLeave", "FocusLost" },
|
||||
defer_save = { "InsertLeave", "TextChanged" },
|
||||
cancel_deferred_save = { "InsertEnter" },
|
||||
},
|
||||
condition = function(buf)
|
||||
-- Only save if manually enabled
|
||||
if not vim.g.auto_save_enabled then
|
||||
return false
|
||||
end
|
||||
|
||||
local fn = vim.fn
|
||||
local utils = require("auto-save.utils.data")
|
||||
|
||||
-- Don't save for special buffer types
|
||||
if utils.not_in(fn.getbufvar(buf, "&filetype"), {}) and fn.getbufvar(buf, "&buftype") == "" and fn.filereadable(fn.bufname(buf)) == 1 then
|
||||
return true
|
||||
end
|
||||
|
||||
return false
|
||||
end,
|
||||
write_all_buffers = false,
|
||||
debounce_delay = 1000, -- Wait 1 second after typing stops before saving
|
||||
},
|
||||
keys = {
|
||||
{
|
||||
"<leader>ta",
|
||||
function()
|
||||
vim.g.auto_save_enabled = not vim.g.auto_save_enabled
|
||||
if vim.g.auto_save_enabled then
|
||||
vim.notify("Auto-save enabled", vim.log.levels.INFO)
|
||||
else
|
||||
vim.notify("Auto-save disabled", vim.log.levels.INFO)
|
||||
end
|
||||
end,
|
||||
desc = "Toggle auto-save",
|
||||
},
|
||||
},
|
||||
}
|
||||
80
modules/home/programs/nvim/lua/plugins/coding.lua
Normal file
80
modules/home/programs/nvim/lua/plugins/coding.lua
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
return {
|
||||
-- Auto pairs
|
||||
-- Automatically inserts a matching closing character
|
||||
-- when you type an opening character like `"`, `[`, or `(`.
|
||||
{
|
||||
"nvim-mini/mini.pairs",
|
||||
event = "VeryLazy",
|
||||
opts = {
|
||||
modes = { insert = true, command = true, terminal = false },
|
||||
-- skip autopair when next character is one of these
|
||||
skip_next = [=[[%w%%%'%[%"%%.%`%$]]=],
|
||||
-- skip autopair when the cursor is inside these treesitter nodes
|
||||
skip_ts = { "string" },
|
||||
-- skip autopair when next character is closing pair
|
||||
-- and there are more closing pairs than opening pairs
|
||||
skip_unbalanced = true,
|
||||
-- better deal with markdown code blocks
|
||||
markdown = true,
|
||||
},
|
||||
config = function(_, opts)
|
||||
LazyVim.mini.pairs(opts)
|
||||
end,
|
||||
},
|
||||
|
||||
-- Improves comment syntax, lets Neovim handle multiple
|
||||
-- types of comments for a single language, and relaxes rules
|
||||
-- for uncommenting.
|
||||
{
|
||||
"folke/ts-comments.nvim",
|
||||
event = "VeryLazy",
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- Extends the a & i text objects, this adds the ability to select
|
||||
-- arguments, function calls, text within quotes and brackets
|
||||
{
|
||||
"nvim-mini/mini.ai",
|
||||
event = "VeryLazy",
|
||||
opts = function()
|
||||
local ai = require("mini.ai")
|
||||
return {
|
||||
n_lines = 500,
|
||||
custom_textobjects = {
|
||||
o = ai.gen_spec.treesitter({
|
||||
a = { "@block.outer", "@conditional.outer", "@loop.outer" },
|
||||
i = { "@block.inner", "@conditional.inner", "@loop.inner" },
|
||||
}),
|
||||
f = ai.gen_spec.treesitter({ a = "@function.outer", i = "@function.inner" }),
|
||||
c = ai.gen_spec.treesitter({ a = "@class.outer", i = "@class.inner" }),
|
||||
t = { "<(%p%w-)%f[^<%w][^<>]->.*()</[^/]->$" },
|
||||
d = { "%f[%d]%d+" },
|
||||
e = { { "%u[%l%d]+%f[^%l%d]", "%f[%S][%l%d]+%f[^%l%d]" }, "^().*()$" },
|
||||
g = LazyVim.mini.ai_buffer,
|
||||
u = ai.gen_spec.function_call(),
|
||||
U = ai.gen_spec.function_call({ name_pattern = "[%w_]" }),
|
||||
},
|
||||
}
|
||||
end,
|
||||
config = function(_, opts)
|
||||
require("mini.ai").setup(opts)
|
||||
-- mini.clue handles text object hints automatically
|
||||
end,
|
||||
},
|
||||
|
||||
-- Configures LuaLS to support auto-completion and type checking
|
||||
-- while editing your Neovim configuration.
|
||||
{
|
||||
"folke/lazydev.nvim",
|
||||
ft = "lua",
|
||||
cmd = "LazyDev",
|
||||
opts = {
|
||||
library = {
|
||||
{ path = "${3rd}/luv/library", words = { "vim.uv" } },
|
||||
{ path = "LazyVim", words = { "LazyVim" } },
|
||||
{ path = "snacks.nvim", words = { "Snacks" } },
|
||||
{ path = "lazy.nvim", words = { "LazyVim" } },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
75
modules/home/programs/nvim/lua/plugins/colorscheme.lua
Normal file
75
modules/home/programs/nvim/lua/plugins/colorscheme.lua
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
return {
|
||||
-- gruvbox
|
||||
{
|
||||
"ellisonleao/gruvbox.nvim",
|
||||
lazy = false,
|
||||
priority = 1000,
|
||||
opts = {},
|
||||
config = function()
|
||||
require("gruvbox").setup({})
|
||||
vim.cmd.colorscheme("gruvbox")
|
||||
end,
|
||||
},
|
||||
|
||||
-- tokyonight
|
||||
{
|
||||
"folke/tokyonight.nvim",
|
||||
lazy = true,
|
||||
opts = { style = "moon" },
|
||||
},
|
||||
|
||||
-- catppuccin
|
||||
{
|
||||
"catppuccin/nvim",
|
||||
lazy = true,
|
||||
priority = 1000,
|
||||
name = "catppuccin",
|
||||
opts = {
|
||||
lsp_styles = {
|
||||
underlines = {
|
||||
errors = { "undercurl" },
|
||||
hints = { "undercurl" },
|
||||
warnings = { "undercurl" },
|
||||
information = { "undercurl" },
|
||||
},
|
||||
},
|
||||
-- integrations = {
|
||||
-- aerial = true,
|
||||
-- alpha = true,
|
||||
-- cmp = true,
|
||||
-- dashboard = true,
|
||||
-- flash = true,
|
||||
-- fzf = true,
|
||||
-- grug_far = true,
|
||||
-- gitsigns = true,
|
||||
-- headlines = true,
|
||||
-- illuminate = true,
|
||||
-- indent_blankline = { enabled = true },
|
||||
-- leap = true,
|
||||
-- lsp_trouble = true,
|
||||
-- mason = true,
|
||||
-- mini = true,
|
||||
-- navic = { enabled = true, custom_bg = "lualine" },
|
||||
-- neotest = true,
|
||||
-- neotree = true,
|
||||
-- noice = true,
|
||||
-- notify = true,
|
||||
-- snacks = true,
|
||||
-- telescope = true,
|
||||
-- treesitter_context = true,
|
||||
-- which_key = true,
|
||||
-- },
|
||||
},
|
||||
-- specs = {
|
||||
-- {
|
||||
-- "akinsho/bufferline.nvim",
|
||||
-- optional = true,
|
||||
-- opts = function(_, opts)
|
||||
-- if (vim.g.colors_name or ""):find("catppuccin") then
|
||||
-- opts.highlights = require("catppuccin.special.bufferline").get_theme()
|
||||
-- end
|
||||
-- end,
|
||||
-- },
|
||||
-- },
|
||||
},
|
||||
}
|
||||
48
modules/home/programs/nvim/lua/plugins/completion.lua
Normal file
48
modules/home/programs/nvim/lua/plugins/completion.lua
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
return {
|
||||
-- Modern completion engine with built-in fuzzy matching
|
||||
-- Note: Installed via Nix with pre-built Rust backend (see neovim.nix)
|
||||
{
|
||||
"saghen/blink.cmp",
|
||||
dependencies = {
|
||||
"rafamadriz/friendly-snippets",
|
||||
},
|
||||
version = "1.*",
|
||||
event = "InsertEnter",
|
||||
build = nil, -- Disable build since Nix provides pre-compiled version
|
||||
opts = {
|
||||
-- Keymap preset options: 'default' | 'super-tab' | 'enter'
|
||||
keymap = { preset = "super-tab" },
|
||||
|
||||
appearance = {
|
||||
-- Use mono nerd font variant
|
||||
nerd_font_variant = "mono",
|
||||
},
|
||||
|
||||
-- Default completion sources
|
||||
sources = {
|
||||
default = { "lsp", "path", "snippets", "buffer" },
|
||||
},
|
||||
|
||||
completion = {
|
||||
documentation = {
|
||||
auto_show = true,
|
||||
auto_show_delay_ms = 500,
|
||||
},
|
||||
menu = {
|
||||
draw = {
|
||||
columns = { { "label", "label_description", gap = 1 }, { "kind_icon", "kind" } },
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Fuzzy matching implementation
|
||||
-- Using "rust" since Nix provides pre-built native module
|
||||
fuzzy = {
|
||||
use_typo_resistance = true,
|
||||
use_frecency = true,
|
||||
use_proximity = true,
|
||||
},
|
||||
},
|
||||
opts_extend = { "sources.default" },
|
||||
},
|
||||
}
|
||||
33
modules/home/programs/nvim/lua/plugins/dashboard.lua
Normal file
33
modules/home/programs/nvim/lua/plugins/dashboard.lua
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
return {
|
||||
{
|
||||
"folke/snacks.nvim",
|
||||
opts = {
|
||||
dashboard = {
|
||||
preset = {
|
||||
header = [[
|
||||
⣿⡇⠉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠈⠛⢿⣿⣿⣿⣿⣿
|
||||
⣿⡇⠀⠀⠀⠀⣉⡑⠺⢷⣍⢻⣿⣿⣿⣿⣿⡿⢿⣛⣻⣭⣭⣹⣏⣭⣍⣙⡛⠿⠀⠀⠿⠆⠀⠹⢿⣿⣿⣿
|
||||
⣿⡇⢠⠀⡟⣼⣿⣿⣶⣤⡈⠑⠛⣿⢟⣯⣷⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣙⠛⢿⡄⣄⠈⠹⣿⣿
|
||||
⣿⣧⠈⠀⣸⣿⣿⣿⣿⣿⣿⡗⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠃⣿⣷⡄⠈⢻
|
||||
⣿⣿⠀⢠⣿⣿⣿⣿⣿⣿⠏⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⢻⣿⣿⣿⣿⣿⣿⣷⡜⢿⣿⣦⡀
|
||||
⣿⣿⡄⣼⣿⣿⣿⣿⣿⠋⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⣿⣿⣿⢈⠻⣿⣿⣿⣿⣿⣿⣿⣎⢻⣿⣿
|
||||
⣿⣿⢧⣿⣿⣿⣿⣿⠃⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢋⡆⢿⣿⣿⡆⣷⣌⠻⣿⣿⣿⣿⣿⣿⣆⢻⢃
|
||||
⣿⣿⢸⣿⣿⣿⣿⣷⡄⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢣⣾⡇⢸⣿⣿⡇⢿⣿⣷⣌⢻⠿⣿⣿⣿⣿⡄⢀
|
||||
⣿⡏⣿⣿⣿⣿⣿⣿⡇⢰⠰⣙⢿⣿⣿⣿⣿⣿⣍⠙⠱⢿⣿⣿⢸⣿⡿⡇⢸⣿⡿⢛⣥⡘⢿⣿⠿⣿⣿⠘
|
||||
⣿⢣⣿⣿⣿⣿⣿⣿⠇⢸⣧⠙⠿⢿⣿⣿⣿⡿⠋⠘⠛⠒⠈⠙⡀⣞⡰⡇⣙⡅⠚⡉⠡⢠⣄⠹⠐⣮⡻⢇
|
||||
⣿⣸⣿⣿⣿⣿⣿⣿⠀⡜⡇⣾⡝⣼⣿⣿⢟⣵⡏⠀⠀⠛⠀⣸⣇⠙⣠⢠⣿⠀⡀⠁⢀⣼⡏⣠⠁⢿⣿⣦
|
||||
⡇⣿⣿⣿⣿⣿⣿⣿⠀⣿⡆⣿⢣⡿⢿⣷⡎⣿⣿⣦⣀⡤⢴⣿⣿⣴⣿⣿⣿⣷⡲⠶⠿⢻⢁⣿⢠⣼⣿⣿
|
||||
⢳⣿⣿⣿⣿⣿⣿⣿⢰⣿⡿⠌⠈⢼⣎⢻⡇⢻⣷⣶⣶⣾⣿⣿⡿⢫⣍⣛⢻⣿⣿⣿⣿⡏⢸⡿⢸⣿⣿⣿
|
||||
⣼⣿⣿⣿⣿⣿⣿⡇⣾⢏⣾⣷⣶⣶⣬⡀⢻⠘⢿⣿⣿⣿⣿⡿⢡⣿⣿⡟⣸⣿⣿⡿⢟⡅⢻⡇⣿⣿⣿⣿
|
||||
⣿⣿⣿⣿⣿⣿⡿⢰⣿⣸⣿⣿⣿⣿⣿⣿⢠⠂⣷⣬⡛⠿⣿⢃⣿⣿⣿⢣⠿⠛⣩⣴⣿⣧⠸⢰⣿⣿⣿⣿
|
||||
⣿⣿⣿⣿⣿⣿⢃⣿⡏⣿⣿⣿⣿⣿⣿⣿⠘⢧⣸⣿⣷⡀⣠⡦⣭⡍⣤⣶⣾⣧⢸⣿⣿⣿⢠⣾⣿⣿⣿⣿
|
||||
⣿⣿⣿⣿⣿⠏⣼⣿⡇⣿⣿⣿⣿⣿⡿⣿⠸⣮⡻⣿⡟⣴⡿⠇⣿⢃⣿⣿⣿⣿⡈⣿⣿⣿⢸⣿⣿⣿⣿⣿
|
||||
⣿⣿⣿⣿⣿⡆⣿⣿⣇⣿⣿⣿⣿⣿⡇⣿⡆⣿⣷⣽⣷⣩⣶⠇⣿⢸⣿⣿⣿⣿⡇⣿⣿⣿⢸⣿⣿⣿⣿⣿
|
||||
⣿⣿⣿⣿⣿⡇⣿⣿⢻⣿⣿⣿⣿⣿⡇⣿⣧⢹⣿⣿⣿⣿⡿⣸⡏⢚⣽⣿⣿⣿⣇⢸⣿⣿⣾⣿⣿⣿⣿⣿
|
||||
⣿⣿⣿⣿⣿⡇⣿⢏⢸⣿⣿⣿⣿⣿⢠⣿⣿⣮⡻⠿⡿⠟⣱⣿⡇⢸⣿⣿⣿⣿⣿⠸⣿⣿⢹⣿⣿⣿⣿⣿
|
||||
]],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
56
modules/home/programs/nvim/lua/plugins/file-explorer.lua
Normal file
56
modules/home/programs/nvim/lua/plugins/file-explorer.lua
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
return {
|
||||
-- Telescope - Fuzzy finder over lists
|
||||
{
|
||||
"nvim-telescope/telescope.nvim",
|
||||
tag = "0.1.8",
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
},
|
||||
cmd = "Telescope",
|
||||
keys = {
|
||||
{ "<leader>ff", "<cmd>Telescope find_files<cr>", desc = "Find Files" },
|
||||
{ "<leader>fg", "<cmd>Telescope live_grep<cr>", desc = "Live Grep" },
|
||||
{ "<leader>fb", "<cmd>Telescope buffers<cr>", desc = "Buffers" },
|
||||
{ "<leader>fh", "<cmd>Telescope help_tags<cr>", desc = "Help Tags" },
|
||||
},
|
||||
opts = {
|
||||
defaults = {
|
||||
-- Removed which_key mapping - mini.clue handles keybind hints globally
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Telescope FZF native - Better sorting performance
|
||||
-- Note: Installed via Nix (see neovim.nix) to avoid build issues
|
||||
{
|
||||
"nvim-telescope/telescope-fzf-native.nvim",
|
||||
dependencies = { "nvim-telescope/telescope.nvim" },
|
||||
config = function()
|
||||
require("telescope").load_extension("fzf")
|
||||
end,
|
||||
},
|
||||
|
||||
-- Neo-tree - File explorer tree
|
||||
{
|
||||
"nvim-neo-tree/neo-tree.nvim",
|
||||
branch = "v3.x",
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
"MunifTanjim/nui.nvim",
|
||||
"nvim-tree/nvim-web-devicons",
|
||||
},
|
||||
cmd = "Neotree",
|
||||
keys = {
|
||||
{ "<leader>e", "<cmd>Neotree toggle<cr>", desc = "Toggle Neo-tree" },
|
||||
{ "<leader>o", "<cmd>Neotree focus<cr>", desc = "Focus Neo-tree" },
|
||||
},
|
||||
opts = {
|
||||
filesystem = {
|
||||
follow_current_file = {
|
||||
enabled = true,
|
||||
},
|
||||
use_libuv_file_watcher = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
59
modules/home/programs/nvim/lua/plugins/formatting.lua
Normal file
59
modules/home/programs/nvim/lua/plugins/formatting.lua
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
return {
|
||||
{
|
||||
"stevearc/conform.nvim",
|
||||
event = { "BufWritePre" },
|
||||
cmd = { "ConformInfo" },
|
||||
keys = {
|
||||
{
|
||||
"<leader>cf",
|
||||
function()
|
||||
require("conform").format({ async = true, lsp_fallback = true })
|
||||
end,
|
||||
mode = { "n", "v" },
|
||||
desc = "Format buffer",
|
||||
},
|
||||
},
|
||||
opts = {
|
||||
formatters_by_ft = {
|
||||
lua = { "stylua" },
|
||||
nix = { "nixfmt" },
|
||||
python = { "ruff_format", "ruff_organize_imports" },
|
||||
javascript = { "prettierd", "prettier", stop_after_first = true },
|
||||
typescript = { "prettierd", "prettier", stop_after_first = true },
|
||||
javascriptreact = { "prettierd", "prettier", stop_after_first = true },
|
||||
typescriptreact = { "prettierd", "prettier", stop_after_first = true },
|
||||
json = { "prettierd", "prettier", stop_after_first = true },
|
||||
jsonc = { "prettierd", "prettier", stop_after_first = true },
|
||||
yaml = { "prettierd", "prettier", stop_after_first = true },
|
||||
markdown = { "prettierd", "prettier", stop_after_first = true },
|
||||
html = { "prettierd", "prettier", stop_after_first = true },
|
||||
css = { "prettierd", "prettier", stop_after_first = true },
|
||||
scss = { "prettierd", "prettier", stop_after_first = true },
|
||||
rust = { "rustfmt" },
|
||||
go = { "gofumpt" },
|
||||
sh = { "shfmt" },
|
||||
bash = { "shfmt" },
|
||||
zsh = { "shfmt" },
|
||||
},
|
||||
-- Format on save
|
||||
format_on_save = {
|
||||
timeout_ms = 500,
|
||||
lsp_fallback = true,
|
||||
},
|
||||
-- Customize formatters
|
||||
formatters = {
|
||||
shfmt = {
|
||||
prepend_args = { "-i", "2" }, -- 2 space indent
|
||||
},
|
||||
ruff_format = {
|
||||
command = "ruff",
|
||||
args = { "format", "--stdin-filename", "$FILENAME" },
|
||||
},
|
||||
ruff_organize_imports = {
|
||||
command = "ruff",
|
||||
args = { "check", "--select", "I", "--fix", "--stdin-filename", "$FILENAME" },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
58
modules/home/programs/nvim/lua/plugins/linting.lua
Normal file
58
modules/home/programs/nvim/lua/plugins/linting.lua
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
return {
|
||||
{
|
||||
"mfussenegger/nvim-lint",
|
||||
event = { "BufReadPost", "BufNewFile", "BufWritePost" },
|
||||
opts = {
|
||||
events = { "BufWritePost", "BufReadPost", "InsertLeave" },
|
||||
linters_by_ft = {
|
||||
javascript = { "eslint" },
|
||||
typescript = { "eslint" },
|
||||
javascriptreact = { "eslint" },
|
||||
typescriptreact = { "eslint" },
|
||||
python = { "ruff" },
|
||||
sh = { "shellcheck" },
|
||||
bash = { "shellcheck" },
|
||||
},
|
||||
linters = {},
|
||||
},
|
||||
config = function(_, opts)
|
||||
local lint = require("lint")
|
||||
|
||||
-- Merge custom linter configs
|
||||
for name, linter in pairs(opts.linters) do
|
||||
if type(linter) == "table" and type(lint.linters[name]) == "table" then
|
||||
lint.linters[name] = vim.tbl_deep_extend("force", lint.linters[name], linter)
|
||||
else
|
||||
lint.linters[name] = linter
|
||||
end
|
||||
end
|
||||
|
||||
lint.linters_by_ft = opts.linters_by_ft
|
||||
|
||||
-- Debounced lint function with proper timer management
|
||||
local timer = vim.uv.new_timer()
|
||||
local function debounce_lint()
|
||||
-- Stop existing timer before starting new one to prevent EALREADY error
|
||||
timer:stop()
|
||||
timer:start(100, 0, vim.schedule_wrap(lint.try_lint))
|
||||
end
|
||||
|
||||
-- Create autocommand for linting
|
||||
vim.api.nvim_create_autocmd(opts.events, {
|
||||
group = vim.api.nvim_create_augroup("nvim-lint", { clear = true }),
|
||||
callback = debounce_lint,
|
||||
})
|
||||
|
||||
-- Clean up timer on exit
|
||||
vim.api.nvim_create_autocmd("VimLeavePre", {
|
||||
group = vim.api.nvim_create_augroup("nvim-lint-cleanup", { clear = true }),
|
||||
callback = function()
|
||||
if timer and not timer:is_closing() then
|
||||
timer:stop()
|
||||
timer:close()
|
||||
end
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
106
modules/home/programs/nvim/lua/plugins/lsp.lua
Normal file
106
modules/home/programs/nvim/lua/plugins/lsp.lua
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
-- LSP configuration using Nix-managed servers
|
||||
return {
|
||||
-- Disable Mason plugins (we use Nix-managed servers instead)
|
||||
{ "mason-org/mason.nvim", enabled = false },
|
||||
{ "mason-org/mason-lspconfig.nvim", enabled = false },
|
||||
{ "jay-babu/mason-null-ls.nvim", enabled = false },
|
||||
{ "jay-babu/mason-nvim-dap.nvim", enabled = false },
|
||||
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
dependencies = {
|
||||
"saghen/blink.cmp", -- For LSP capabilities
|
||||
},
|
||||
config = function()
|
||||
-- Get blink.cmp capabilities
|
||||
local capabilities = require("blink.cmp").get_lsp_capabilities()
|
||||
|
||||
-- Common LSP attach keybindings
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
group = vim.api.nvim_create_augroup("UserLspConfig", {}),
|
||||
callback = function(ev)
|
||||
local opts = { buffer = ev.buf }
|
||||
vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts)
|
||||
vim.keymap.set("n", "gD", vim.lsp.buf.declaration, opts)
|
||||
vim.keymap.set("n", "gr", vim.lsp.buf.references, opts)
|
||||
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, opts)
|
||||
vim.keymap.set("n", "K", vim.lsp.buf.hover, opts)
|
||||
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts)
|
||||
vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts)
|
||||
vim.keymap.set("n", "<leader>d", vim.diagnostic.open_float, opts)
|
||||
vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts)
|
||||
vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts)
|
||||
end,
|
||||
})
|
||||
|
||||
-- Configure each LSP server
|
||||
local lspconfig = require("lspconfig")
|
||||
|
||||
-- Lua
|
||||
lspconfig.lua_ls.setup({
|
||||
capabilities = capabilities,
|
||||
settings = {
|
||||
Lua = {
|
||||
runtime = { version = "LuaJIT" },
|
||||
diagnostics = { globals = { "vim" } },
|
||||
workspace = {
|
||||
library = vim.api.nvim_get_runtime_file("", true),
|
||||
checkThirdParty = false,
|
||||
},
|
||||
telemetry = { enable = false },
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- Nix
|
||||
lspconfig.nil_ls.setup({
|
||||
capabilities = capabilities,
|
||||
settings = {
|
||||
["nil"] = {
|
||||
formatting = { command = { "nixfmt" } },
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- Python
|
||||
lspconfig.pyright.setup({
|
||||
capabilities = capabilities,
|
||||
settings = {
|
||||
python = {
|
||||
analysis = {
|
||||
typeCheckingMode = "basic",
|
||||
autoSearchPaths = true,
|
||||
useLibraryCodeForTypes = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- TypeScript/JavaScript
|
||||
lspconfig.ts_ls.setup({
|
||||
capabilities = capabilities,
|
||||
})
|
||||
|
||||
-- Rust
|
||||
lspconfig.rust_analyzer.setup({
|
||||
capabilities = capabilities,
|
||||
settings = {
|
||||
["rust-analyzer"] = {
|
||||
checkOnSave = { command = "clippy" },
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- Go
|
||||
lspconfig.gopls.setup({
|
||||
capabilities = capabilities,
|
||||
})
|
||||
|
||||
-- C/C++
|
||||
lspconfig.clangd.setup({
|
||||
capabilities = capabilities,
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
4
modules/home/programs/nvim/lua/plugins/smear_cursor.lua
Normal file
4
modules/home/programs/nvim/lua/plugins/smear_cursor.lua
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
return {
|
||||
"sphamba/smear-cursor.nvim",
|
||||
opts = {},
|
||||
}
|
||||
51
modules/home/programs/nvim/lua/plugins/treesitter.lua
Normal file
51
modules/home/programs/nvim/lua/plugins/treesitter.lua
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
return {
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"bash",
|
||||
"c",
|
||||
"cpp",
|
||||
"css",
|
||||
"diff",
|
||||
"dockerfile",
|
||||
"git_config",
|
||||
"git_rebase",
|
||||
"gitcommit",
|
||||
"gitignore",
|
||||
"go",
|
||||
"gomod",
|
||||
"gosum",
|
||||
"html",
|
||||
"javascript",
|
||||
"jsdoc",
|
||||
"json",
|
||||
"jsonc",
|
||||
"latex",
|
||||
"lua",
|
||||
"luadoc",
|
||||
"luap",
|
||||
"markdown",
|
||||
"markdown_inline",
|
||||
"nix",
|
||||
"norg",
|
||||
"printf",
|
||||
"python",
|
||||
"query",
|
||||
"regex",
|
||||
"rust",
|
||||
"scss",
|
||||
"svelte",
|
||||
"toml",
|
||||
"tsx",
|
||||
"typescript",
|
||||
"typst",
|
||||
"vim",
|
||||
"vimdoc",
|
||||
"vue",
|
||||
"xml",
|
||||
"yaml",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
174
modules/home/programs/nvim/lua/plugins/ui.lua
Normal file
174
modules/home/programs/nvim/lua/plugins/ui.lua
Normal file
|
|
@ -0,0 +1,174 @@
|
|||
return {
|
||||
-- Better UI for messages, cmdline and the popupmenu
|
||||
{
|
||||
"folke/noice.nvim",
|
||||
event = "VeryLazy",
|
||||
opts = {
|
||||
lsp = {
|
||||
override = {
|
||||
["vim.lsp.util.convert_input_to_markdown_lines"] = true,
|
||||
["vim.lsp.util.stylize_markdown"] = true,
|
||||
["cmp.entry.get_documentation"] = true,
|
||||
},
|
||||
},
|
||||
routes = {
|
||||
{
|
||||
filter = {
|
||||
event = "msg_show",
|
||||
any = {
|
||||
{ find = "%d+L, %d+B" },
|
||||
{ find = "; after #%d+" },
|
||||
{ find = "; before #%d+" },
|
||||
},
|
||||
},
|
||||
view = "mini",
|
||||
},
|
||||
},
|
||||
presets = {
|
||||
bottom_search = true,
|
||||
command_palette = true,
|
||||
long_message_to_split = true,
|
||||
},
|
||||
},
|
||||
keys = {
|
||||
{ "<leader>sn", "", desc = "+noice" },
|
||||
{ "<leader>snl", function() require("noice").cmd("last") end, desc = "Noice Last Message" },
|
||||
{ "<leader>snh", function() require("noice").cmd("history") end, desc = "Noice History" },
|
||||
{ "<leader>sna", function() require("noice").cmd("all") end, desc = "Noice All" },
|
||||
{ "<leader>snd", function() require("noice").cmd("dismiss") end, desc = "Dismiss All" },
|
||||
},
|
||||
dependencies = {
|
||||
"MunifTanjim/nui.nvim",
|
||||
},
|
||||
},
|
||||
|
||||
-- Statusline
|
||||
{
|
||||
"nvim-lualine/lualine.nvim",
|
||||
event = "VeryLazy",
|
||||
opts = function()
|
||||
return {
|
||||
options = {
|
||||
theme = "auto",
|
||||
globalstatus = true,
|
||||
disabled_filetypes = { statusline = { "dashboard", "alpha", "starter" } },
|
||||
},
|
||||
sections = {
|
||||
lualine_a = { "mode" },
|
||||
lualine_b = { "branch" },
|
||||
lualine_c = {
|
||||
{
|
||||
"diagnostics",
|
||||
symbols = {
|
||||
error = " ",
|
||||
warn = " ",
|
||||
info = " ",
|
||||
hint = " ",
|
||||
},
|
||||
},
|
||||
{ "filetype", icon_only = true, separator = "", padding = { left = 1, right = 0 } },
|
||||
{ "filename", path = 1, symbols = { modified = " ", readonly = "", unnamed = "" } },
|
||||
},
|
||||
lualine_x = {
|
||||
{
|
||||
"diff",
|
||||
symbols = {
|
||||
added = " ",
|
||||
modified = " ",
|
||||
removed = " ",
|
||||
},
|
||||
},
|
||||
},
|
||||
lualine_y = {
|
||||
{ "progress", separator = " ", padding = { left = 1, right = 0 } },
|
||||
{ "location", padding = { left = 0, right = 1 } },
|
||||
},
|
||||
lualine_z = {
|
||||
function()
|
||||
return " " .. os.date("%R")
|
||||
end,
|
||||
},
|
||||
},
|
||||
extensions = { "lazy" },
|
||||
}
|
||||
end,
|
||||
},
|
||||
|
||||
-- Bufferline
|
||||
{
|
||||
"akinsho/bufferline.nvim",
|
||||
event = "VeryLazy",
|
||||
keys = {
|
||||
{ "<leader>bp", "<Cmd>BufferLineTogglePin<CR>", desc = "Toggle Pin" },
|
||||
{ "<leader>bP", "<Cmd>BufferLineGroupClose ungrouped<CR>", desc = "Delete Non-Pinned Buffers" },
|
||||
{ "<leader>bo", "<Cmd>BufferLineCloseOthers<CR>", desc = "Delete Other Buffers" },
|
||||
{ "<leader>br", "<Cmd>BufferLineCloseRight<CR>", desc = "Delete Buffers to the Right" },
|
||||
{ "<leader>bl", "<Cmd>BufferLineCloseLeft<CR>", desc = "Delete Buffers to the Left" },
|
||||
{ "<S-h>", "<cmd>BufferLineCyclePrev<cr>", desc = "Prev Buffer" },
|
||||
{ "<S-l>", "<cmd>BufferLineCycleNext<cr>", desc = "Next Buffer" },
|
||||
{ "[b", "<cmd>BufferLineCyclePrev<cr>", desc = "Prev Buffer" },
|
||||
{ "]b", "<cmd>BufferLineCycleNext<cr>", desc = "Next Buffer" },
|
||||
},
|
||||
opts = {
|
||||
options = {
|
||||
close_command = function(n) require("mini.bufremove").delete(n, false) end,
|
||||
right_mouse_command = function(n) require("mini.bufremove").delete(n, false) end,
|
||||
diagnostics = "nvim_lsp",
|
||||
always_show_bufferline = false,
|
||||
offsets = {
|
||||
{
|
||||
filetype = "neo-tree",
|
||||
text = "Neo-tree",
|
||||
highlight = "Directory",
|
||||
text_align = "left",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
dependencies = {
|
||||
{
|
||||
"nvim-mini/mini.bufremove",
|
||||
keys = {
|
||||
{ "<leader>bd", function() require("mini.bufremove").delete(0, false) end, desc = "Delete Buffer" },
|
||||
{ "<leader>bD", function() require("mini.bufremove").delete(0, true) end, desc = "Delete Buffer (Force)" },
|
||||
},
|
||||
opts = {},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Indent guides
|
||||
{
|
||||
"lukas-reineke/indent-blankline.nvim",
|
||||
event = { "BufReadPost", "BufNewFile" },
|
||||
opts = {
|
||||
indent = {
|
||||
char = "│",
|
||||
tab_char = "│",
|
||||
},
|
||||
scope = { show_start = false, show_end = false },
|
||||
exclude = {
|
||||
filetypes = {
|
||||
"help",
|
||||
"alpha",
|
||||
"dashboard",
|
||||
"neo-tree",
|
||||
"Trouble",
|
||||
"trouble",
|
||||
"lazy",
|
||||
"mason",
|
||||
"notify",
|
||||
"toggleterm",
|
||||
"lazyterm",
|
||||
},
|
||||
},
|
||||
},
|
||||
main = "ibl",
|
||||
},
|
||||
|
||||
-- Icons
|
||||
{
|
||||
"nvim-tree/nvim-web-devicons",
|
||||
lazy = true,
|
||||
},
|
||||
}
|
||||
79
modules/home/programs/nvim/lua/plugins/which-key.lua
Normal file
79
modules/home/programs/nvim/lua/plugins/which-key.lua
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
return {
|
||||
-- Disable which-key (we use mini.clue instead)
|
||||
{ "folke/which-key.nvim", enabled = false },
|
||||
|
||||
-- mini.clue - Lightweight keybind hints
|
||||
{
|
||||
"nvim-mini/mini.clue",
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
local miniclue = require("mini.clue")
|
||||
miniclue.setup({
|
||||
triggers = {
|
||||
-- Leader triggers
|
||||
{ mode = "n", keys = "<Leader>" },
|
||||
{ mode = "x", keys = "<Leader>" },
|
||||
|
||||
-- Built-in completion
|
||||
{ mode = "i", keys = "<C-x>" },
|
||||
|
||||
-- `g` key
|
||||
{ mode = "n", keys = "g" },
|
||||
{ mode = "x", keys = "g" },
|
||||
|
||||
-- Marks
|
||||
{ mode = "n", keys = "'" },
|
||||
{ mode = "n", keys = "`" },
|
||||
{ mode = "x", keys = "'" },
|
||||
{ mode = "x", keys = "`" },
|
||||
|
||||
-- Registers
|
||||
{ mode = "n", keys = '"' },
|
||||
{ mode = "x", keys = '"' },
|
||||
{ mode = "i", keys = "<C-r>" },
|
||||
{ mode = "c", keys = "<C-r>" },
|
||||
|
||||
-- Window commands
|
||||
{ mode = "n", keys = "<C-w>" },
|
||||
|
||||
-- `z` key
|
||||
{ mode = "n", keys = "z" },
|
||||
{ mode = "x", keys = "z" },
|
||||
|
||||
-- Bracketed commands
|
||||
{ mode = "n", keys = "[" },
|
||||
{ mode = "n", keys = "]" },
|
||||
},
|
||||
|
||||
clues = {
|
||||
-- Enhance this by adding descriptions for <Leader> mapping groups
|
||||
miniclue.gen_clues.builtin_completion(),
|
||||
miniclue.gen_clues.g(),
|
||||
miniclue.gen_clues.marks(),
|
||||
miniclue.gen_clues.registers(),
|
||||
miniclue.gen_clues.windows(),
|
||||
miniclue.gen_clues.z(),
|
||||
|
||||
-- Custom leader key descriptions
|
||||
{ mode = "n", keys = "<Leader>b", desc = "+buffer" },
|
||||
{ mode = "n", keys = "<Leader>c", desc = "+code" },
|
||||
{ mode = "n", keys = "<Leader>d", desc = "+diagnostics" },
|
||||
{ mode = "n", keys = "<Leader>e", desc = "+explorer" },
|
||||
{ mode = "n", keys = "<Leader>f", desc = "+find" },
|
||||
{ mode = "n", keys = "<Leader>o", desc = "+open" },
|
||||
{ mode = "n", keys = "<Leader>r", desc = "+rename" },
|
||||
{ mode = "n", keys = "<Leader>s", desc = "+search" },
|
||||
{ mode = "n", keys = "<Leader>t", desc = "+toggle" },
|
||||
},
|
||||
|
||||
window = {
|
||||
delay = 300, -- Show hints after 300ms
|
||||
config = {
|
||||
width = "auto",
|
||||
border = "rounded",
|
||||
},
|
||||
},
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue