2024-03-19 16:22:46 -04:00
|
|
|
{
|
|
|
|
|
config,
|
|
|
|
|
pkgs,
|
2024-05-14 17:04:00 -04:00
|
|
|
lib,
|
2024-03-19 16:22:46 -04:00
|
|
|
...
|
2024-03-19 16:40:07 -04:00
|
|
|
}: let
|
2024-05-05 14:27:45 -04:00
|
|
|
nvimDir = "/home/${config.home.username}/nixos/modules/home-manager/vim";
|
2024-03-19 16:40:07 -04:00
|
|
|
in {
|
2024-03-19 16:22:46 -04:00
|
|
|
programs.neovim = {
|
|
|
|
|
enable = true;
|
|
|
|
|
defaultEditor = true;
|
|
|
|
|
extraPackages = with pkgs; [
|
|
|
|
|
# Formatters
|
|
|
|
|
alejandra # Nix
|
|
|
|
|
black # Python
|
|
|
|
|
prettierd # Multi-language
|
|
|
|
|
shfmt
|
|
|
|
|
isort
|
|
|
|
|
stylua
|
|
|
|
|
|
|
|
|
|
# LSP
|
|
|
|
|
lua-language-server
|
|
|
|
|
nixd
|
2024-03-20 12:06:21 -04:00
|
|
|
rust-analyzer
|
|
|
|
|
nodePackages.bash-language-server
|
|
|
|
|
vscode-langservers-extracted
|
|
|
|
|
nodePackages.vscode-json-languageserver
|
|
|
|
|
nodePackages.typescript-language-server
|
|
|
|
|
tailwindcss-language-server
|
2024-03-19 16:22:46 -04:00
|
|
|
|
2024-05-14 17:43:32 -04:00
|
|
|
lua51Packages.lua-curl
|
|
|
|
|
lua51Packages.nvim-nio
|
|
|
|
|
lua51Packages.xml2lua
|
|
|
|
|
lua51Packages.mimetypes
|
2024-05-14 16:45:27 -04:00
|
|
|
|
2024-03-19 16:22:46 -04:00
|
|
|
# Tools
|
|
|
|
|
git
|
2024-05-14 18:06:35 -04:00
|
|
|
html-tidy
|
2024-03-19 16:22:46 -04:00
|
|
|
cmake
|
|
|
|
|
fzf
|
|
|
|
|
gcc
|
|
|
|
|
gnumake
|
|
|
|
|
nodejs
|
|
|
|
|
fswatch # File watcher utility, replacing libuv.fs_event for neovim 10.0
|
|
|
|
|
sqlite
|
2024-05-14 15:08:15 -04:00
|
|
|
postgresql
|
|
|
|
|
mongosh
|
2024-04-04 17:14:31 -04:00
|
|
|
gerbera
|
2024-03-19 16:22:46 -04:00
|
|
|
vscode-extensions.vadimcn.vscode-lldb.adapter
|
|
|
|
|
];
|
|
|
|
|
plugins = [
|
|
|
|
|
pkgs.vimPlugins.lazy-nvim # All other plugins are managed by lazy-nvim
|
|
|
|
|
];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
xdg.configFile = {
|
|
|
|
|
# Raw symlink to the plugin manager lock file, so that it stays writeable
|
|
|
|
|
"nvim/lazy-lock.json".source = config.lib.file.mkOutOfStoreSymlink "${nvimDir}/lazy-lock.json";
|
|
|
|
|
"nvim" = {
|
|
|
|
|
source = ./config;
|
|
|
|
|
recursive = true;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2024-05-14 17:04:00 -04:00
|
|
|
home.activation.neovim = lib.hm.dag.entryAfter ["linkGeneration"] ''
|
|
|
|
|
#! /bin/bash
|
|
|
|
|
NVIM_WRAPPER=~/.nix-profile/bin/nvim
|
|
|
|
|
STATE_DIR=~/.local/state/nix/
|
|
|
|
|
STATE_FILE=$STATE_DIR/lazy-lock-checksum
|
|
|
|
|
LOCK_FILE=~/.config/nvim/lazy-lock.json
|
|
|
|
|
HASH=$(nix-hash --flat $LOCK_FILE)
|
2024-05-14 17:24:47 -04:00
|
|
|
CURL_DIR=${pkgs.curl}
|
2024-05-14 17:04:00 -04:00
|
|
|
|
|
|
|
|
[ ! -d $STATE_DIR ] && mkdir -p $STATE_DIR
|
|
|
|
|
[ ! -f $STATE_FILE ] && touch $STATE_FILE
|
|
|
|
|
|
|
|
|
|
if [ "$(cat $STATE_FILE)" != "$HASH" ]; then
|
|
|
|
|
echo "Syncing neovim plugins"
|
|
|
|
|
PATH="$PATH:${pkgs.git}/bin" $DRY_RUN_CMD $NVIM_WRAPPER --headless "+Lazy! restore" +qa
|
|
|
|
|
$DRY_RUN_CMD echo $HASH >$STATE_FILE
|
|
|
|
|
else
|
|
|
|
|
$VERBOSE_ECHO "Neovim plugins already synced, skipping"
|
|
|
|
|
fi
|
|
|
|
|
'';
|
2024-03-19 16:22:46 -04:00
|
|
|
}
|