1
0
Fork 0
dotfiles/programs/nvim/default.nix

373 lines
8.7 KiB
Nix
Raw Normal View History

2021-12-27 20:24:11 +00:00
{ config, pkgs, ... }:
2021-12-06 22:35:29 +00:00
let
customPlugins = import ./plugins.nix { inherit pkgs; };
2021-12-27 20:24:11 +00:00
2021-12-30 21:36:35 +00:00
nvim-spell-directory = "${config.xdg.configHome}/nvim/spell";
2021-12-06 22:35:29 +00:00
in
{
programs.neovim = {
enable = true;
package = pkgs.neovim-nightly;
withNodeJs = false;
withRuby = false;
withPython3 = false;
2021-12-06 22:35:29 +00:00
extraConfig = ''
" Move these paths to the end of $PATH to prevent triggering the XCode CLI popup
2022-02-15 22:52:36 +00:00
let xcode_paths = [':/usr/local/bin:', ':/usr/bin:', ':/usr/sbin:', ':/bin:', ':/sbin:']
for xcode_path in xcode_paths
let $PATH = substitute($PATH, xcode_path, ":", "") . substitute(xcode_path, ":$", "", "")
endfor
2022-03-12 19:46:27 +00:00
lua << EOF
require('impatient')
2022-04-05 19:57:44 +00:00
require('configuration.init')
2022-03-12 19:46:27 +00:00
EOF
2021-12-06 22:35:29 +00:00
'';
extraPackages = with pkgs; [
gcc
gnumake
2022-02-03 22:35:52 +00:00
git
2021-12-14 19:32:50 +00:00
nodejs-16_x
2021-12-06 22:35:29 +00:00
tree-sitter
2022-02-12 22:13:58 +00:00
ripgrep
2021-12-06 22:35:29 +00:00
# LSP
nodePackages.bash-language-server
nodePackages.dockerfile-language-server-nodejs
2021-12-20 17:43:23 +00:00
nodePackages.typescript-language-server
2021-12-06 22:35:29 +00:00
nodePackages.vscode-langservers-extracted
nodePackages.yaml-language-server
rnix-lsp
sqls
sumneko-lua-language-server
2021-12-06 22:35:29 +00:00
taplo-lsp
2022-04-24 18:09:54 +00:00
# Diagnostic Tools
deadnix
2021-12-06 22:35:29 +00:00
hadolint
2022-04-20 14:27:26 +00:00
fennel-luajit
2022-04-05 19:57:44 +00:00
fnlfmt
2021-12-06 22:35:29 +00:00
shellcheck
shfmt
2021-12-18 23:25:21 +00:00
statix
2021-12-06 22:35:29 +00:00
];
2022-04-01 23:17:03 +00:00
plugins = (with customPlugins; [
2021-12-06 22:35:29 +00:00
# Fixes
impatient-nvim
2021-12-06 22:35:29 +00:00
# Utils
popup-nvim
plenary-nvim
# Keybindings
2022-04-05 19:57:44 +00:00
{
plugin = yanky-nvim;
config = builtins.readFile ../../config/nvim/plugins/yanky.fnl;
2022-04-05 19:57:44 +00:00
type = "fennel";
}
{
plugin = cutlass-nvim;
config = builtins.readFile ../../config/nvim/plugins/cutlass.fnl;
type = "fennel";
}
{
plugin = substitute-nvim;
config = builtins.readFile ../../config/nvim/plugins/substitute.fnl;
type = "fennel";
}
2022-04-05 19:57:44 +00:00
{
plugin = leap-nvim;
config = ''
(let [leap (require :leap)]
(leap.set_default_keymaps))
'';
type = "fennel";
}
2021-12-06 22:35:29 +00:00
# Themes
2022-04-16 22:24:03 +00:00
dracula-nvim
2021-12-06 22:35:29 +00:00
# Syntax
2022-04-05 19:57:44 +00:00
{
plugin = nvim-treesitter;
config = builtins.readFile ../../config/nvim/plugins/treesitter.fnl;
type = "fennel";
}
nvim-ts-rainbow
2021-12-06 22:35:29 +00:00
playground
# Telescope
2022-04-05 19:57:44 +00:00
{
plugin = telescope-nvim;
config = builtins.readFile ../../config/nvim/plugins/telescope.fnl;
type = "fennel";
}
2022-02-13 20:58:18 +00:00
telescope-zf-native-nvim
2022-03-17 09:33:08 +00:00
telescope-ui-select-nvim
2022-04-21 16:55:35 +00:00
telescope-toggleterm-nvim
2021-12-06 22:35:29 +00:00
# LSP
2022-04-05 19:57:44 +00:00
{
plugin = nvim-lspconfig;
config = builtins.readFile ../../config/nvim/plugins/lsp.fnl;
type = "fennel";
}
# Linter
2022-04-06 14:26:01 +00:00
{
plugin = nvim-lint;
config = builtins.readFile ../../config/nvim/plugins/nvim-lint.fnl;
2022-04-06 14:26:01 +00:00
type = "fennel";
}
2022-04-15 20:43:51 +00:00
# Snippets
{
plugin = LuaSnip;
config = builtins.readFile ../../config/nvim/plugins/luasnip.fnl;
type = "fennel";
}
2021-12-06 22:35:29 +00:00
# cmp
2022-04-05 19:57:44 +00:00
{
plugin = nvim-cmp;
config = builtins.readFile ../../config/nvim/plugins/cmp.fnl;
type = "fennel";
}
2021-12-06 22:35:29 +00:00
cmp-nvim-lsp
2021-12-19 20:32:20 +00:00
cmp-nvim-lsp-signature-help
2022-04-15 20:43:51 +00:00
cmp_luasnip
2021-12-06 22:35:29 +00:00
cmp-nvim-lua
cmp-path
cmp-buffer
cmp-treesitter
cmp-cmdline
cmp-nvim-lsp-document-symbol
# Pairs
2022-04-05 19:57:44 +00:00
{
plugin = nvim-autopairs;
config = builtins.readFile ../../config/nvim/plugins/autopairs.fnl;
type = "fennel";
}
2021-12-06 22:35:29 +00:00
2022-04-05 19:57:44 +00:00
{
plugin = nvim-ts-autotag;
config = ''
(let [ts-autotag (require :nvim-ts-autotag)]
(ts-autotag.setup))
'';
type = "fennel";
}
{
plugin = vim-matchup;
config = builtins.readFile ../../config/nvim/plugins/matchup.fnl;
type = "fennel";
}
2021-12-06 22:35:29 +00:00
# Textobjects
nvim-treesitter-textobjects
# UI
2022-04-05 19:57:44 +00:00
{
plugin = lualine-nvim;
config = builtins.readFile ../../config/nvim/plugins/lualine.fnl;
type = "fennel";
}
{
plugin = bufferline-nvim;
config = builtins.readFile ../../config/nvim/plugins/bufferline.fnl;
type = "fennel";
}
{
plugin = indent-blankline-nvim;
config = builtins.readFile ../../config/nvim/plugins/indent_line.fnl;
type = "fennel";
}
{
plugin = virt-column-nvim;
config = ''
(let [virt-column (require :virt-column)]
(virt-column.setup))
'';
type = "fennel";
2022-04-27 20:17:26 +00:00
}
{
plugin = urlview-nvim;
config = builtins.readFile ../../config/nvim/plugins/urlview.fnl;
type = "fennel";
2022-04-05 19:57:44 +00:00
}
{
plugin = neogit;
config = builtins.readFile ../../config/nvim/plugins/neogit.fnl;
type = "fennel";
}
{
plugin = gitsigns-nvim;
config = builtins.readFile ../../config/nvim/plugins/gitsigns.fnl;
type = "fennel";
}
{
plugin = spellsitter-nvim;
config = ''
(let [spellsitter (require :spellsitter)]
(spellsitter.setup))
'';
type = "fennel";
}
{
plugin = nvim-notify;
config = "(set vim.notify (require :notify))";
type = "fennel";
}
{
plugin = nvim-visual-eof-lua;
config = builtins.readFile ../../config/nvim/plugins/visual-eof.fnl;
type = "fennel";
}
2022-04-01 23:17:03 +00:00
]) ++ (with pkgs.vimPlugins; [
# Fixes
FixCursorHold-nvim
2022-04-05 19:57:44 +00:00
# Utils
nvim-web-devicons
# Telescope
{
plugin = project-nvim;
config = builtins.readFile ../../config/nvim/plugins/project.fnl;
type = "fennel";
}
{
plugin = todo-comments-nvim;
config = builtins.readFile ../../config/nvim/plugins/todo-comments.fnl;
type = "fennel";
}
# LSP
lspkind-nvim
lsp-status-nvim
{
plugin = vim-illuminate;
config = builtins.readFile ../../config/nvim/plugins/illuminate.fnl;
type = "fennel";
}
# Formatting
{
plugin = neoformat;
config = builtins.readFile ../../config/nvim/plugins/neoformat.fnl;
type = "fennel";
}
2022-04-05 19:57:44 +00:00
# Comments
{
plugin = comment-nvim;
config = builtins.readFile ../../config/nvim/plugins/comment.fnl;
type = "fennel";
}
2022-04-15 20:43:51 +00:00
# Snippets
friendly-snippets
2022-04-01 23:17:03 +00:00
# Textobjects
vim-surround
# UI
undotree
2022-04-05 19:57:44 +00:00
{
2022-04-17 19:44:56 +00:00
plugin = toggleterm-nvim;
config = builtins.readFile ../../config/nvim/plugins/toggleterm.fnl;
2022-04-05 19:57:44 +00:00
type = "fennel";
}
2022-04-01 23:17:03 +00:00
]);
2021-12-06 22:35:29 +00:00
};
2022-04-05 21:13:56 +00:00
xdg.configFile."nvim" = {
2022-04-15 20:43:51 +00:00
source = pkgs.runCommand "nvim-fennel-files"
2022-04-05 19:57:44 +00:00
{
2022-04-20 14:27:26 +00:00
nativeBuildInputs = with pkgs; [ fennel-luajit stylua ];
2022-04-05 19:57:44 +00:00
} ''
2022-04-05 21:13:56 +00:00
mkdir -p $out/lua/configuration
mkdir -p $out/lua/nifoc/utils
mkdir -p $out/after/ftplugin
2022-04-05 19:57:44 +00:00
2022-04-05 21:13:56 +00:00
fennel="fennel --use-bit-lib --compile"
config_store_path="${../../config/nvim}"
2022-04-05 19:57:44 +00:00
2022-04-05 21:13:56 +00:00
# Init
$fennel "$config_store_path/init.fnl" > "$out/lua/configuration/init.lua"
# Utils
nifoc_store_path="$config_store_path/nifoc"
nifoc_store_fnl="$(find "$nifoc_store_path" -type f -name '*.fnl')"
for fnlfile in $nifoc_store_fnl; do
file_out_path="$(echo "$fnlfile" | sed "s|$nifoc_store_path/||" | sed "s/.fnl$/.lua/")"
echo "Compiling $fnlfile ..."
$fennel "$fnlfile" > "$out/lua/nifoc/$file_out_path"
done
# Plugins
2022-04-05 19:57:44 +00:00
cat <<EOF >>plugins.fnl
${config.programs.neovim.generatedConfigs.fennel}
nil
EOF
2022-04-05 21:13:56 +00:00
$fennel "./plugins.fnl" > "$out/lua/configuration/plugins.lua"
2022-04-05 19:57:44 +00:00
2022-04-05 21:13:56 +00:00
# After
after_store_path="$config_store_path/after"
after_store_fnl="$(find "$after_store_path" -type f -name '*.fnl')"
2022-04-05 19:57:44 +00:00
2022-04-05 21:13:56 +00:00
for fnlfile in $after_store_fnl; do
file_out_path="$(echo "$fnlfile" | sed "s|$after_store_path/||" | sed "s/.fnl$/.lua/")"
2022-04-05 19:57:44 +00:00
echo "Compiling $fnlfile ..."
2022-04-05 21:13:56 +00:00
$fennel "$fnlfile" > "$out/after/$file_out_path"
2022-04-05 19:57:44 +00:00
done
2022-04-05 21:13:56 +00:00
cp -r "$after_store_path/queries" "$out/after/"
2022-04-05 19:57:44 +00:00
2022-04-05 21:13:56 +00:00
stylua "$out/"
'';
2021-12-06 22:35:29 +00:00
recursive = true;
};
2021-12-27 20:24:11 +00:00
2022-04-01 23:17:03 +00:00
home.file."${nvim-spell-directory}/de.utf-8.spl".source = builtins.fetchurl {
url = "http://ftp.vim.org/pub/vim/runtime/spell/de.utf-8.spl";
sha256 = "73c7107ea339856cdbe921deb92a45939c4de6eb9c07261da1b9dd19f683a3d1";
};
home.file."${nvim-spell-directory}/de.utf-8.sug".source = builtins.fetchurl {
url = "http://ftp.vim.org/pub/vim/runtime/spell/de.utf-8.sug";
sha256 = "13d0ecf92863d89ef60cd4a8a5eb2a5a13a0e8f9ba8d1c6abe47aba85714a948";
};
home.sessionVariables.EDITOR = "nvim";
2021-12-06 22:35:29 +00:00
}