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;
|
|
|
|
|
2021-12-07 15:23:17 +00:00
|
|
|
withNodeJs = false;
|
|
|
|
withRuby = false;
|
|
|
|
withPython3 = false;
|
|
|
|
|
2021-12-06 22:35:29 +00:00
|
|
|
extraConfig = ''
|
2022-01-24 00:25:13 +00:00
|
|
|
" 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-01-24 00:25:13 +00:00
|
|
|
|
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; [
|
2022-01-24 00:25:13 +00:00
|
|
|
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
|
2021-12-27 23:52:34 +00:00
|
|
|
sumneko-lua-language-server
|
2021-12-06 22:35:29 +00:00
|
|
|
taplo-lsp
|
|
|
|
|
|
|
|
# LSP Tools
|
2022-04-09 15:39:52 +00:00
|
|
|
deadnix
|
2021-12-06 22:35:29 +00:00
|
|
|
hadolint
|
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
|
2021-12-16 20:13:07 +00:00
|
|
|
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 = legendary-nvim;
|
2022-04-05 21:36:29 +00:00
|
|
|
config = builtins.readFile ../../config/nvim/plugins/legendary.fnl;
|
2022-04-05 19:57:44 +00:00
|
|
|
type = "fennel";
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
2022-04-09 23:07:36 +00:00
|
|
|
plugin = yanky-nvim;
|
|
|
|
config = builtins.readFile ../../config/nvim/plugins/yanky.fnl;
|
2022-04-05 19:57:44 +00:00
|
|
|
type = "fennel";
|
|
|
|
}
|
|
|
|
|
2022-04-09 23:07:36 +00:00
|
|
|
{
|
|
|
|
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-05 19:57:44 +00:00
|
|
|
{
|
|
|
|
plugin = dracula-nvim;
|
2022-04-10 21:47:39 +00:00
|
|
|
config = builtins.readFile ../../config/nvim/plugins/dracula.fnl;
|
2022-04-05 19:57:44 +00:00
|
|
|
type = "fennel";
|
|
|
|
}
|
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
|
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";
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
plugin = null-ls-nvim;
|
|
|
|
config = builtins.readFile ../../config/nvim/plugins/null-ls.fnl;
|
|
|
|
type = "fennel";
|
|
|
|
}
|
|
|
|
|
2022-03-02 22:31:21 +00:00
|
|
|
virtual-types-nvim
|
2021-12-06 22:35:29 +00:00
|
|
|
|
2022-04-06 14:26:01 +00:00
|
|
|
{
|
|
|
|
plugin = lsp-format-nvim;
|
|
|
|
config = ''
|
|
|
|
(let [lsp-format (require :lsp-format)]
|
|
|
|
(lsp-format.setup))
|
|
|
|
'';
|
|
|
|
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-09 15:39:52 +00:00
|
|
|
nvim-snippy
|
|
|
|
cmp-snippy
|
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";
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
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";
|
|
|
|
}
|
|
|
|
|
|
|
|
# Comments
|
|
|
|
{
|
|
|
|
plugin = comment-nvim;
|
|
|
|
config = builtins.readFile ../../config/nvim/plugins/comment.fnl;
|
|
|
|
type = "fennel";
|
|
|
|
}
|
|
|
|
|
2022-04-01 23:17:03 +00:00
|
|
|
# Textobjects
|
|
|
|
vim-surround
|
|
|
|
|
|
|
|
# UI
|
|
|
|
undotree
|
2022-04-05 19:57:44 +00:00
|
|
|
|
|
|
|
{
|
|
|
|
plugin = FTerm-nvim;
|
|
|
|
config = builtins.readFile ../../config/nvim/plugins/fterm.fnl;
|
|
|
|
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-05 19:57:44 +00:00
|
|
|
source = pkgs.runCommandLocal "nvim-fennel-files"
|
|
|
|
{
|
|
|
|
nativeBuildInputs = [ pkgs.fennel pkgs.stylua ];
|
|
|
|
} ''
|
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";
|
|
|
|
};
|
2022-04-01 08:12:30 +00:00
|
|
|
|
|
|
|
home.sessionVariables.EDITOR = "nvim";
|
2021-12-06 22:35:29 +00:00
|
|
|
}
|