Added Nixvim
This commit is contained in:
@@ -7,10 +7,11 @@
|
|||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
# ./homebrew.nix
|
# ./homebrew.nix
|
||||||
./settings.nix
|
./settings.nix
|
||||||
inputs.home-manager.darwinModules.home-manager
|
inputs.home-manager.darwinModules.home-manager
|
||||||
inputs.nix-homebrew.darwinModules.nix-homebrew
|
inputs.nix-homebrew.darwinModules.nix-homebrew
|
||||||
|
# inputs.catppuccin.nixosModules.catppuccin
|
||||||
];
|
];
|
||||||
|
|
||||||
# nix config
|
# nix config
|
||||||
|
|||||||
@@ -11,6 +11,27 @@
|
|||||||
startup.chime = false;
|
startup.chime = false;
|
||||||
|
|
||||||
defaults = {
|
defaults = {
|
||||||
|
ActivityMonitor = {
|
||||||
|
IconType = 5;
|
||||||
|
OpenMainWindow = true;
|
||||||
|
ShowCategory = 101;
|
||||||
|
};
|
||||||
|
|
||||||
|
dock = {
|
||||||
|
enable-spring-load-actions-on-all-items = true;
|
||||||
|
appswitcher-all-displays = false;
|
||||||
|
autohide = false;
|
||||||
|
launchanim = true;
|
||||||
|
mru-spaces = false;
|
||||||
|
orientation = "left";
|
||||||
|
persistent-apps = [
|
||||||
|
{ app = "/Users/phil/Applications/Home Manager Apps/kitty.app"; }
|
||||||
|
{ app = "/Applications/Launchpad.app"; } # Doenst Work?
|
||||||
|
];
|
||||||
|
show-recents = false;
|
||||||
|
mineffect = "genie";
|
||||||
|
};
|
||||||
|
|
||||||
loginwindow = {
|
loginwindow = {
|
||||||
GuestEnabled = false;
|
GuestEnabled = false;
|
||||||
DisableConsoleAccess = true;
|
DisableConsoleAccess = true;
|
||||||
|
|||||||
41
flake.lock
generated
41
flake.lock
generated
@@ -17,6 +17,24 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"catppuccin": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1765990358,
|
||||||
|
"narHash": "sha256-l8x0gU8mnYaGMl+gWrsSHKBJlZWD8KXJfHTkRlFiPI0=",
|
||||||
|
"owner": "catppuccin",
|
||||||
|
"repo": "nix",
|
||||||
|
"rev": "de1b60ca45a578f59f7d84c8d338b346017b2161",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "catppuccin",
|
||||||
|
"repo": "nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"darwin": {
|
"darwin": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -98,6 +116,22 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1763966396,
|
||||||
|
"narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "5ae3b07d8d6527c42f17c876e404993199144b6a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1751949589,
|
"lastModified": 1751949589,
|
||||||
"narHash": "sha256-mgFxAPLWw0Kq+C8P3dRrZrOYEQXOtKuYVlo9xvPntt8=",
|
"narHash": "sha256-mgFxAPLWw0Kq+C8P3dRrZrOYEQXOtKuYVlo9xvPntt8=",
|
||||||
@@ -113,7 +147,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_3": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1766653575,
|
"lastModified": 1766653575,
|
||||||
"narHash": "sha256-TPgxCS7+hWc4kPhzkU5dD2M5UuPhLuuaMNZ/IpwKQvI=",
|
"narHash": "sha256-TPgxCS7+hWc4kPhzkU5dD2M5UuPhLuuaMNZ/IpwKQvI=",
|
||||||
@@ -132,7 +166,7 @@
|
|||||||
"nixvim": {
|
"nixvim": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-parts": "flake-parts",
|
"flake-parts": "flake-parts",
|
||||||
"nixpkgs": "nixpkgs_2",
|
"nixpkgs": "nixpkgs_3",
|
||||||
"systems": "systems"
|
"systems": "systems"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
@@ -151,10 +185,11 @@
|
|||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"catppuccin": "catppuccin",
|
||||||
"darwin": "darwin",
|
"darwin": "darwin",
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"nix-homebrew": "nix-homebrew",
|
"nix-homebrew": "nix-homebrew",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs_2",
|
||||||
"nixvim": "nixvim"
|
"nixvim": "nixvim"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -17,6 +17,9 @@
|
|||||||
|
|
||||||
# declarative Neovim
|
# declarative Neovim
|
||||||
nixvim.url = "github:nix-community/nixvim";
|
nixvim.url = "github:nix-community/nixvim";
|
||||||
|
|
||||||
|
# declarative Themeing
|
||||||
|
catppuccin.url = "github:catppuccin/nix";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
@@ -27,6 +30,7 @@
|
|||||||
home-manager,
|
home-manager,
|
||||||
nix-homebrew,
|
nix-homebrew,
|
||||||
nixvim,
|
nixvim,
|
||||||
|
catppuccin,
|
||||||
...
|
...
|
||||||
}@inputs:
|
}@inputs:
|
||||||
let
|
let
|
||||||
|
|||||||
6
home/catppuccin.nix
Normal file
6
home/catppuccin.nix
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_: {
|
||||||
|
catppuccin = {
|
||||||
|
enable = false;
|
||||||
|
flavor = "mocha";
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
{ primaryUser, inputs, ... }:
|
{ primaryUser, inputs, ... }:
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
inputs.nixvim.homeManagerModules.nixvim
|
inputs.nixvim.homeModules.nixvim
|
||||||
|
# inputs.catppuccin.homeModules.catppuccin
|
||||||
./neovim
|
./neovim
|
||||||
./packages.nix
|
./packages.nix
|
||||||
./git.nix
|
./git.nix
|
||||||
./shell.nix
|
./shell.nix
|
||||||
|
# ./catppuccin.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
home = {
|
home = {
|
||||||
|
|||||||
158
home/neovim/alpha.nix
Normal file
158
home/neovim/alpha.nix
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# Alpha: Start screen/dashboard for Neovim
|
||||||
|
# Shows a custom ASCII art header and quick action buttons on startup.
|
||||||
|
programs.nixvim.plugins.alpha = {
|
||||||
|
enable = true;
|
||||||
|
settings.layout = [
|
||||||
|
{
|
||||||
|
type = "padding";
|
||||||
|
val = 2;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "text";
|
||||||
|
val = [
|
||||||
|
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣯⣿⠿⣟⣷⣯⣛⢿⣿⣿⣾⣟⣿⣿⣿⣿⣿⣿⣿⣿⣿"
|
||||||
|
"⣿⣿⣿⣿⣿⣿⣿⡿⣵⣿⡿⣴⣽⡟⣳⢿⢽⣽⣕⣽⢿⡿⣿⣟⣿⣿⣿⣿⣿⣿⣿"
|
||||||
|
"⣿⣿⣿⣷⣿⣿⢟⣫⣿⢟⢟⣾⣾⣿⣿⣞⢳⣻⢞⣎⠿⢞⣊⣿⣞⣿⣿⣿⣿⣿⢽"
|
||||||
|
"⣿⣿⣿⣿⣿⣏⢯⣿⣏⣏⠔⢇⣿⢢⢆⢀⢆⣧⣼⢻⢰⡧⢻⣝⣏⡸⣧⣾⣿⣿⣿"
|
||||||
|
"⣿⣿⣿⣿⡟⣻⣿⣿⡾⡿⡼⢸⡝⣝⡳⢢⣧⢳⣳⢷⡇⣗⢺⡺⣿⡧⣿⣿⣿⢿⢿"
|
||||||
|
"⣿⡿⣿⣼⡼⣿⣿⡗⡧⣧⠁⡝⣧⣳⠅⡾⠈⣎⢮⣧⣿⣿⣗⣷⣻⢷⣏⣼⢏⣺⣿"
|
||||||
|
"⣿⣿⣿⣻⣿⣿⣿⢧⣿⢹⠉⢷⢿⣧⣲⡏⡀⡈⢆⠳⣿⡿⢿⣿⣱⢿⢫⣷⣝⣿⣿"
|
||||||
|
"⣿⣿⣿⡯⡟⣿⣿⢽⣡⠟⢿⣮⠁⠙⠛⠈⡴⢿⣿⡷⣬⣽⢽⠧⣷⡏⣿⡇⣧⣽⣿"
|
||||||
|
"⣿⠟⢻⡧⡇⣿⡇⣇⣆⢄⡜⢃⡀⡀⡀⡀⡀⢎⣁⠁⣸⣗⣸⣿⣧⣼⡿⢹⢿⢾⣿"
|
||||||
|
"⣿⣷⣾⣿⢻⣿⢧⢻⣽⡀⡀⡀⡀⢄⡀⡀⡀⡀⡀⢀⣷⡸⡟⣿⣶⣻⣧⡛⡱⢝⣿"
|
||||||
|
"⣿⣿⣿⣿⢸⡿⢚⡜⣿⣇⡀⡀⡀⡀⡀⡀⡀⡀⠚⢁⢣⣜⡿⣿⡇⢼⣿⠨⣸⣿⣿"
|
||||||
|
"⣿⣄⣿⣗⢾⢻⣧⢿⣾⣿⣦⡀⡀⠑⠚⠉⡀⡀⣤⣿⢨⣿⠗⣻⢣⣿⢹⢈⣽⣿⣿"
|
||||||
|
"⣿⣿⣿⣿⢎⡄⢿⣞⡇⣿⠹⣿⣶⣀⡀⣀⡴⡩⢸⢏⣿⣿⣶⢻⣾⢏⡞⠡⢽⣇⣾"
|
||||||
|
"⣿⣿⣿⣮⣼⢬⣦⢿⣳⣌⠧⡉⠈⣇⣛⣁⣈⣼⣿⡸⠫⠛⠐⠛⠕⣙⣻⣬⣼⣿⣿"
|
||||||
|
"⢟⢿⣿⣿⣿⡢⣃⣪⣭⣡⣤⣶⠟⡿⠿⠿⠿⠛⢁⣿⣿⢩⠉⡀⠈⠓⡝⣿⣿⣿⣿"
|
||||||
|
"⣾⣿⣿⣿⣿⠞⢔⡣⡴⣾⣿⠓⣤⢧⡼⣉⠠⢤⣿⣿⠇⠃⡀⡀⡀⡀⡸⢿⣾⣿⣿"
|
||||||
|
"⣿⣿⣿⡿⣺⡸⢗⢠⣇⣿⣿⠊⠃⡀⠉⡀⢠⣿⣿⠟⡸⡀⡀⡀⡀⡀⣃⣬⠽⠿⣿"
|
||||||
|
"⣿⣿⣿⣿⡇⡏⢸⣿⠟⣽⡇⡀⡀⡀⡀⣴⣟⢭⣾⣿⡇⠎⣠⠒⠉⠈⢀⡀⢨⡋⣿"
|
||||||
|
"⠛⠛⠛⠋⠃⠓⠚⠛⠘⠛⠃⡀⠊⡀⠛⠛⠛⠂⠛⠛⠓⠁⠚⡀⠂⠒⠒⠐⠒⠋⠛"
|
||||||
|
];
|
||||||
|
opts = {
|
||||||
|
position = "center";
|
||||||
|
hl = "Type";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "padding";
|
||||||
|
val = 2;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "group";
|
||||||
|
val = [
|
||||||
|
{
|
||||||
|
type = "button";
|
||||||
|
val = "[+] New file";
|
||||||
|
on_press.__raw = "function() vim.cmd[[ene]] vim.cmd[[startinsert]] end";
|
||||||
|
opts = {
|
||||||
|
keymap = [
|
||||||
|
"n"
|
||||||
|
"e"
|
||||||
|
":ene <BAR> startinsert <CR>"
|
||||||
|
{ }
|
||||||
|
];
|
||||||
|
shortcut = "e";
|
||||||
|
position = "center";
|
||||||
|
cursor = 3;
|
||||||
|
width = 50;
|
||||||
|
align_shortcut = "right";
|
||||||
|
hl_shortcut = "Keyword";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "button";
|
||||||
|
val = "[?] Find file";
|
||||||
|
on_press.__raw = "function() vim.cmd[[Telescope find_files]] end";
|
||||||
|
opts = {
|
||||||
|
keymap = [
|
||||||
|
"n"
|
||||||
|
"f"
|
||||||
|
":Telescope find_files <CR>"
|
||||||
|
{ }
|
||||||
|
];
|
||||||
|
shortcut = "f";
|
||||||
|
position = "center";
|
||||||
|
cursor = 3;
|
||||||
|
width = 50;
|
||||||
|
align_shortcut = "right";
|
||||||
|
hl_shortcut = "Keyword";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "button";
|
||||||
|
val = "[~] Recent files";
|
||||||
|
on_press.__raw = "function() vim.cmd[[Telescope oldfiles]] end";
|
||||||
|
opts = {
|
||||||
|
keymap = [
|
||||||
|
"n"
|
||||||
|
"r"
|
||||||
|
":Telescope oldfiles <CR>"
|
||||||
|
{ }
|
||||||
|
];
|
||||||
|
shortcut = "r";
|
||||||
|
position = "center";
|
||||||
|
cursor = 3;
|
||||||
|
width = 50;
|
||||||
|
align_shortcut = "right";
|
||||||
|
hl_shortcut = "Keyword";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "button";
|
||||||
|
val = "[Y] Yazi";
|
||||||
|
on_press.__raw = "function() vim.cmd[[Yazi]] end";
|
||||||
|
opts = {
|
||||||
|
keymap = [
|
||||||
|
"n"
|
||||||
|
"y"
|
||||||
|
":Yazi<CR>"
|
||||||
|
{ }
|
||||||
|
];
|
||||||
|
shortcut = "y";
|
||||||
|
position = "center";
|
||||||
|
cursor = 3;
|
||||||
|
width = 50;
|
||||||
|
align_shortcut = "right";
|
||||||
|
hl_shortcut = "Keyword";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "button";
|
||||||
|
val = "[X] Quit";
|
||||||
|
on_press.__raw = "function() vim.cmd[[qa]] end";
|
||||||
|
opts = {
|
||||||
|
keymap = [
|
||||||
|
"n"
|
||||||
|
"q"
|
||||||
|
":qa<CR>"
|
||||||
|
{ }
|
||||||
|
];
|
||||||
|
shortcut = "q";
|
||||||
|
position = "center";
|
||||||
|
cursor = 3;
|
||||||
|
width = 50;
|
||||||
|
align_shortcut = "right";
|
||||||
|
hl_shortcut = "Keyword";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "padding";
|
||||||
|
val = 2;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "text";
|
||||||
|
val = "Circuits hum in anticipation of your will.";
|
||||||
|
opts = {
|
||||||
|
position = "center";
|
||||||
|
hl = "Comment";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
34
home/neovim/catppuccin.nix
Normal file
34
home/neovim/catppuccin.nix
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# Catppuccin: Soothing pastel theme for Neovim
|
||||||
|
# Provides consistent theming across plugins with transparency support.
|
||||||
|
programs.nixvim = {
|
||||||
|
colorschemes.catppuccin = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
flavour = "mocha";
|
||||||
|
transparent_background = true;
|
||||||
|
term_colors = true;
|
||||||
|
integrations = {
|
||||||
|
treesitter = true;
|
||||||
|
cmp = true;
|
||||||
|
gitsigns = true;
|
||||||
|
telescope = {
|
||||||
|
enabled = true;
|
||||||
|
};
|
||||||
|
notify = true;
|
||||||
|
mini = {
|
||||||
|
enabled = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Custom highlight overrides
|
||||||
|
extraConfigLua = ''
|
||||||
|
local colors = require("catppuccin.palettes").get_palette("mocha")
|
||||||
|
vim.api.nvim_set_hl(0, "LineNr", { fg = colors.text, bg = "NONE" })
|
||||||
|
vim.api.nvim_set_hl(0, "CursorLineNr", { fg = colors.pink, bg = "NONE", bold = true })
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
34
home/neovim/conform.nix
Normal file
34
home/neovim/conform.nix
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# Conform: Code formatter that runs external formatting tools
|
||||||
|
# Automatically formats code on save for consistent style.
|
||||||
|
programs.nixvim = {
|
||||||
|
plugins.conform-nvim = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
formatters_by_ft = {
|
||||||
|
lua = [ "stylua" ];
|
||||||
|
nix = [ "nixfmt" ];
|
||||||
|
python = [ "black" ];
|
||||||
|
rust = [ "rustfmt" ];
|
||||||
|
rasi = [ "prettierd" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
format_on_save = {
|
||||||
|
timeout_ms = 500;
|
||||||
|
lsp_fallback = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Install formatters
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
stylua
|
||||||
|
nixfmt-classic
|
||||||
|
black
|
||||||
|
rustfmt
|
||||||
|
prettierd
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,13 +1,91 @@
|
|||||||
{...}:
|
{ ... }:
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./treesitter.nix
|
./alpha.nix
|
||||||
];
|
./treesitter.nix
|
||||||
|
./lint.nix
|
||||||
|
./lsp.nix
|
||||||
|
./conform.nix
|
||||||
|
./lualine.nix
|
||||||
|
./yazi.nix
|
||||||
|
./toggleterm.nix
|
||||||
|
./telescope.nix
|
||||||
|
./catppuccin.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.nixvim = {
|
||||||
|
enable = true;
|
||||||
|
defaultEditor = true;
|
||||||
|
|
||||||
programs.nixvim = {
|
# Leader key
|
||||||
enable = true;
|
globals.mapleader = " ";
|
||||||
defaultEditor = true;
|
|
||||||
};
|
plugins.web-devicons.enable = true;
|
||||||
|
|
||||||
|
opts = {
|
||||||
|
number = true; # Show line numbers
|
||||||
|
cursorline = true; # Highlight current line
|
||||||
|
showmode = true; # already in statusline
|
||||||
|
hlsearch = true; # Highlight search result
|
||||||
|
incsearch = true; # Incremental Search
|
||||||
|
tabstop = 4;
|
||||||
|
termguicolors = true; # Enable 24-bit colormode
|
||||||
|
};
|
||||||
|
|
||||||
|
# Clipboard keymaps - yank to system clipboard
|
||||||
|
keymaps = [
|
||||||
|
# Yank operations
|
||||||
|
{
|
||||||
|
mode = "n";
|
||||||
|
key = "y";
|
||||||
|
action = "\"+y";
|
||||||
|
options.desc = "Yank to clipboard";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
mode = "v";
|
||||||
|
key = "y";
|
||||||
|
action = "\"+y";
|
||||||
|
options.desc = "Yank to clipboard";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
mode = "n";
|
||||||
|
key = "Y";
|
||||||
|
action = "\"+Y";
|
||||||
|
options.desc = "Yank line to clipboard";
|
||||||
|
}
|
||||||
|
# Delete operations
|
||||||
|
{
|
||||||
|
mode = "n";
|
||||||
|
key = "d";
|
||||||
|
action = "\"+d";
|
||||||
|
options.desc = "Delete to clipboard";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
mode = "v";
|
||||||
|
key = "d";
|
||||||
|
action = "\"+d";
|
||||||
|
options.desc = "Delete to clipboard";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
mode = "n";
|
||||||
|
key = "D";
|
||||||
|
action = "\"+D";
|
||||||
|
options.desc = "Delete line to clipboard";
|
||||||
|
}
|
||||||
|
# Paste operations
|
||||||
|
{
|
||||||
|
mode = "n";
|
||||||
|
key = "p";
|
||||||
|
action = "\"+p";
|
||||||
|
options.desc = "Paste from clipboard";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
mode = "v";
|
||||||
|
key = "p";
|
||||||
|
action = "\"+p";
|
||||||
|
options.desc = "Paste from clipboard";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
42
home/neovim/lint.nix
Normal file
42
home/neovim/lint.nix
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# nvim-lint: Asynchronous linter that runs external linting tools
|
||||||
|
# to find errors and style issues without blocking the editor.
|
||||||
|
# Runs automatically after saving files.
|
||||||
|
programs.nixvim = {
|
||||||
|
plugins.lint = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# Configure linters for each filetype
|
||||||
|
lintersByFt = {
|
||||||
|
lua = [ "luacheck" ];
|
||||||
|
nix = [ "statix" ]; # Nix static analyzer
|
||||||
|
python = [ "ruff" ];
|
||||||
|
javascript = [ "eslint" ];
|
||||||
|
rust = [ "clippy" ];
|
||||||
|
# rasi has no common linter
|
||||||
|
};
|
||||||
|
|
||||||
|
# Trigger linting after saving a file
|
||||||
|
autoCmd = {
|
||||||
|
event = [ "BufWritePost" ];
|
||||||
|
callback = {
|
||||||
|
__raw = ''
|
||||||
|
function()
|
||||||
|
require('lint').try_lint()
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Install linter binaries
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
lua54Packages.luacheck
|
||||||
|
statix
|
||||||
|
ruff
|
||||||
|
nodePackages.eslint
|
||||||
|
clippy
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
91
home/neovim/lsp.nix
Normal file
91
home/neovim/lsp.nix
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# LSP configuration: Language Server Protocol provides IDE features
|
||||||
|
# like autocomplete, go-to-definition, diagnostics, and more.
|
||||||
|
programs.nixvim = {
|
||||||
|
plugins = {
|
||||||
|
# LSP configuration
|
||||||
|
lsp = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# Language servers for each language
|
||||||
|
servers = {
|
||||||
|
lua_ls = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
Lua = {
|
||||||
|
runtime.version = "LuaJIT";
|
||||||
|
diagnostics.globals = [ "vim" ];
|
||||||
|
workspace.library = [ ]; # Populated by nixvim
|
||||||
|
telemetry.enable = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nil_ls.enable = true; # Nix language server
|
||||||
|
rust_analyzer = {
|
||||||
|
enable = true; # Rust language server
|
||||||
|
installCargo = true;
|
||||||
|
installRustc = true;
|
||||||
|
};
|
||||||
|
pylsp.enable = true; # Python language server
|
||||||
|
};
|
||||||
|
|
||||||
|
# Keymaps for LSP actions
|
||||||
|
keymaps = {
|
||||||
|
diagnostic = {
|
||||||
|
"<leader>e" = "open_float";
|
||||||
|
"[d" = "goto_prev";
|
||||||
|
"]d" = "goto_next";
|
||||||
|
};
|
||||||
|
lspBuf = {
|
||||||
|
"gd" = "definition";
|
||||||
|
"K" = "hover";
|
||||||
|
"<leader>rn" = "rename";
|
||||||
|
"<leader>ca" = "code_action";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Autocompletion
|
||||||
|
cmp = {
|
||||||
|
enable = true;
|
||||||
|
autoEnableSources = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
snippet.expand = ''
|
||||||
|
function(args)
|
||||||
|
require('luasnip').lsp_expand(args.body)
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
|
||||||
|
mapping = {
|
||||||
|
"<C-b>" = "cmp.mapping.scroll_docs(-4)";
|
||||||
|
"<C-f>" = "cmp.mapping.scroll_docs(4)";
|
||||||
|
"<C-Space>" = "cmp.mapping.complete()";
|
||||||
|
"<C-e>" = "cmp.mapping.abort()";
|
||||||
|
"<CR>" = "cmp.mapping.confirm({ select = true })";
|
||||||
|
};
|
||||||
|
|
||||||
|
sources = [
|
||||||
|
{ name = "nvim_lsp"; }
|
||||||
|
{ name = "luasnip"; }
|
||||||
|
{ name = "buffer"; }
|
||||||
|
{ name = "path"; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Snippet engine (required for completion)
|
||||||
|
luasnip.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Install LSP servers
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
lua-language-server
|
||||||
|
nil
|
||||||
|
rust-analyzer
|
||||||
|
python311Packages.python-lsp-server
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
22
home/neovim/lualine.nix
Normal file
22
home/neovim/lualine.nix
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# Lualine: Fast and customizable statusline for Neovim
|
||||||
|
# Displays file info, git status, diagnostics, and mode at the bottom of the editor.
|
||||||
|
programs.nixvim.plugins.lualine = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
options = {
|
||||||
|
theme = "catppuccin";
|
||||||
|
component_separators = {
|
||||||
|
left = "|";
|
||||||
|
right = "|";
|
||||||
|
};
|
||||||
|
section_separators = {
|
||||||
|
left = "";
|
||||||
|
right = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
27
home/neovim/telescope.nix
Normal file
27
home/neovim/telescope.nix
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# Telescope: Fuzzy finder for files, buffers, grep, and more
|
||||||
|
# Provides fast search and navigation throughout your project.
|
||||||
|
programs.nixvim.plugins.telescope = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
keymaps = {
|
||||||
|
"<leader>ff" = {
|
||||||
|
action = "find_files";
|
||||||
|
options.desc = "Telescope find files";
|
||||||
|
};
|
||||||
|
"<leader>fg" = {
|
||||||
|
action = "live_grep";
|
||||||
|
options.desc = "Telescope live grep";
|
||||||
|
};
|
||||||
|
"<leader>fb" = {
|
||||||
|
action = "buffers";
|
||||||
|
options.desc = "Telescope buffers";
|
||||||
|
};
|
||||||
|
"<leader>fh" = {
|
||||||
|
action = "help_tags";
|
||||||
|
options.desc = "Telescope help tags";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
64
home/neovim/toggleterm.nix
Normal file
64
home/neovim/toggleterm.nix
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# ToggleTerm: Terminal emulator inside Neovim
|
||||||
|
# Provides floating, horizontal, and vertical terminal windows.
|
||||||
|
programs.nixvim.plugins.toggleterm = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
size = 20;
|
||||||
|
open_mapping = "[[<c-\\>]]";
|
||||||
|
direction = "float";
|
||||||
|
float_opts = {
|
||||||
|
border = "single";
|
||||||
|
width = 200;
|
||||||
|
height = 40;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.nixvim.keymaps = [
|
||||||
|
{
|
||||||
|
mode = "n";
|
||||||
|
key = "<leader>h";
|
||||||
|
action.__raw = ''
|
||||||
|
function()
|
||||||
|
require("toggleterm").toggle(1, 10, vim.loop.cwd(), "horizontal")
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
options.desc = "Toggle terminal (horizontal)";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
mode = "n";
|
||||||
|
key = "<leader>v";
|
||||||
|
action.__raw = ''
|
||||||
|
function()
|
||||||
|
require("toggleterm").toggle(2, 60, vim.loop.cwd(), "vertical")
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
options.desc = "Toggle terminal (vertical)";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
mode = "n";
|
||||||
|
key = "<leader>ft";
|
||||||
|
action.__raw = ''
|
||||||
|
function()
|
||||||
|
require("toggleterm").toggle(3, 20, vim.loop.cwd(), "float")
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
options.desc = "Toggle terminal (float)";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
mode = "t";
|
||||||
|
key = "<C-t>";
|
||||||
|
action = "<Cmd>ToggleTerm<CR>";
|
||||||
|
options.desc = "Toggle terminal";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
mode = "t";
|
||||||
|
key = "<C-v>";
|
||||||
|
action = "<C-\\><C-n>v";
|
||||||
|
options.desc = "Exit terminal and enter visual mode";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
24
home/neovim/treesitter.nix
Normal file
24
home/neovim/treesitter.nix
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
# Install language parsers declaratively
|
||||||
|
# Syntax Highlighting
|
||||||
|
programs.nixvim.plugins.treesitter = {
|
||||||
|
enable = true;
|
||||||
|
grammarPackages = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
|
||||||
|
lua
|
||||||
|
nix
|
||||||
|
python
|
||||||
|
javascript
|
||||||
|
rust
|
||||||
|
rasi
|
||||||
|
];
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
highlight = {
|
||||||
|
enable = true;
|
||||||
|
additional_vim_regex_highlighting = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
programs.nixvim.plugins.treesitter = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
37
home/neovim/yazi.nix
Normal file
37
home/neovim/yazi.nix
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
programs.nixvim = {
|
||||||
|
yazi = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
open_for_directories = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
keymaps = [
|
||||||
|
{
|
||||||
|
mode = "n";
|
||||||
|
key = "<leader>fy";
|
||||||
|
action.__raw = ''
|
||||||
|
function()
|
||||||
|
require('yazi').yazi(nil, vim.loop.cwd())
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
options.desc = "Open Yazi file manager";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
mode = "n";
|
||||||
|
key = "<leader>fd";
|
||||||
|
action.__raw = ''
|
||||||
|
function()
|
||||||
|
require('yazi').yazi(nil, vim.fn.expand("%:p:h"))
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
options.desc = "Open Yazi in current file directory";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
extraPackages = with pkgs; [ yazi ];
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,4 +1,17 @@
|
|||||||
_: {
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
eza # ls replacement
|
||||||
|
fzf # FuzzyFinder
|
||||||
|
tdf # terminal pdf viewer
|
||||||
|
jq # json parser
|
||||||
|
tree
|
||||||
|
|
||||||
|
# Fun stuff
|
||||||
|
lolcat
|
||||||
|
cmatrix
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
programs.kitty = {
|
programs.kitty = {
|
||||||
enable = true;
|
enable = true;
|
||||||
themeFile = "Catppuccin-Mocha";
|
themeFile = "Catppuccin-Mocha";
|
||||||
@@ -19,7 +32,8 @@ _: {
|
|||||||
tab_powerline_style = "slanted";
|
tab_powerline_style = "slanted";
|
||||||
tab_title_template = "{title}{' :{}:'.format(num_windows) if num_windows > 1 else ''}";
|
tab_title_template = "{title}{' :{}:'.format(num_windows) if num_windows > 1 else ''}";
|
||||||
|
|
||||||
symbol_map = let
|
symbol_map =
|
||||||
|
let
|
||||||
mappings = [
|
mappings = [
|
||||||
"U+23FB-U+23FE"
|
"U+23FB-U+23FE"
|
||||||
"U+2B58"
|
"U+2B58"
|
||||||
@@ -45,6 +59,17 @@ _: {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
programs.yazi = {
|
||||||
|
enable = true;
|
||||||
|
enableBashIntegration = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
enableFishIntegration = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
ration = [1 3 4];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
programs.zsh = {
|
programs.zsh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableCompletion = true;
|
enableCompletion = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user