dotfiles/lib/shared/modules/neovim.nix

338 lines
7.3 KiB
Nix

{
inputs,
pkgs,
pkgsUnstable,
...
}:
let
inherit (pkgs) fetchFromGitHub;
inherit (pkgs.vimUtils) buildVimPlugin;
# TODO: move these back into an overlay.
customVim = {
conf-vim = buildVimPlugin {
name = "conf-vim";
src = fetchFromGitHub {
owner = "tjdevries";
repo = "conf.vim";
rev = "master";
sha256 = "AjiTJsoim0BAnyfqk1IQzNsa6jhFM2+A66E7q9sJqz0=";
};
};
edit-alternate-vim = buildVimPlugin {
name = "edit-alternate-vim";
src = fetchFromGitHub {
owner = "tjdevries";
repo = "edit_alternate.vim";
rev = "master";
sha256 = "mEKnqYAhgrdxPRoKf4S4yYecdFIHGg8bDxpqPuC1+S4=";
};
};
nvim-tmux-navigation = buildVimPlugin {
name = "nvim-tmux-navigation";
src = fetchFromGitHub {
owner = "alexghergh";
repo = "nvim-tmux-navigation";
rev = "4898c98702954439233fdaf764c39636681e2861";
sha256 = "sha256-CxAgQSbOrg/SsQXupwCv8cyZXIB7tkWO+Y6FDtoR8xk=";
};
};
standard-vim = buildVimPlugin {
name = "standard-vim";
src = fetchFromGitHub {
owner = "tjdevries";
repo = "standard.vim";
rev = "master";
sha256 = "9VwkvV1Dv6cE4uDkPp36DozjWJOclDR883yDMYw000E=";
};
};
vim-autoread = buildVimPlugin {
name = "vim-autoread";
src = fetchFromGitHub {
owner = "djoshea";
repo = "vim-autoread";
rev = "24061f84652d768bfb85d222c88580b3af138dab";
sha256 = "fSADjNt1V9jgAPjxggbh7Nogcxyisi18KaVve8j+c3w=";
};
};
vim-textobj-indent = buildVimPlugin {
name = "vim-textobj-indent";
src = fetchFromGitHub {
owner = "kana";
repo = "vim-textobj-indent";
rev = "deb76867c302f933c8f21753806cbf2d8461b548";
sha256 = "oFzUPG+IOkbKZ2gU/kduQ3G/LsLDlEjFhRP0BHBE+1Q=";
};
};
toggle-checkbox-nvim = buildVimPlugin {
name = "toggle-checkbox-nvim";
src = fetchFromGitHub {
owner = "opdavies";
repo = "toggle-checkbox.nvim";
rev = "main";
sha256 = "4YSEagQnLK5MBl2z53e6sOBlCDm220GYVlc6A+HNywg=";
};
};
vim-heritage = buildVimPlugin {
name = "vim-heritage";
src = fetchFromGitHub {
owner = "jessarcher";
repo = "vim-heritage";
rev = "cffa05c78c0991c998adc4504d761b3068547db6";
sha256 = "Lebe5V1XFxn4kSZ+ImZ69Vst9Nbc0N7eA9IzOCijFS0=";
};
};
vim-textobj-xmlattr = buildVimPlugin {
name = "vim-textobj-xmlattr";
src = fetchFromGitHub {
owner = "whatyouhide";
repo = "vim-textobj-xmlattr";
rev = "694a297f1d75fd527e87da9769f3c6519a87ebb1";
sha256 = "+91FVP95oh00flINdltqx6qJuijYo56tHIh3J098G2Q=";
};
};
tabline-vim = buildVimPlugin {
name = "tabline-vim";
src = fetchFromGitHub {
owner = "mkitt";
repo = "tabline.vim";
rev = "69c9698a3240860adaba93615f44778a9ab724b4";
sha256 = "51b8PxyKqBdeIvmmZyF2hpMBjkyrlZDdTB1opr5JZ7Y=";
};
};
vim-caser = buildVimPlugin {
name = "vim-caser";
src = fetchFromGitHub {
owner = "arthurxavierx";
repo = "vim-caser";
rev = "6bc9f41d170711c58e0157d882a5fe8c30f34bf6";
sha256 = "PXAY01O/cHvAdWx3V/pyWFeiV5qJGvLcAKhl5DQc0Ps=";
};
};
vim-zoom = buildVimPlugin {
name = "vim-zoom";
src = fetchFromGitHub {
owner = "dhruvasagar";
repo = "vim-zoom";
rev = "01c737005312c09e0449d6518decf8cedfee32c7";
sha256 = "/ADzScsG0u6RJbEtfO23Gup2NYdhPkExqqOPVcQa7aQ=";
};
};
};
in
{
programs.neovim = {
enable = true;
package = pkgsUnstable.neovim-unwrapped;
plugins = with pkgs.vimPlugins; [
comment-nvim
dial-nvim
fidget-nvim
gitsigns-nvim
harpoon
impatient-nvim
mini-nvim
neodev-nvim
nvim-spectre
nvim-web-devicons
oil-nvim
refactoring-nvim
sort-nvim
treesj
undotree
vim-abolish
vim-eunuch
vim-highlightedyank
vim-just
vim-nix
vim-obsession
vim-pasta
vim-repeat
vim-sleuth
vim-sort-motion
vim-terraform
vim-textobj-user
vim-unimpaired
customVim.conf-vim
customVim.edit-alternate-vim
customVim.nvim-tmux-navigation
customVim.standard-vim
customVim.tabline-vim
customVim.vim-autoread
customVim.vim-textobj-indent
customVim.vim-textobj-xmlattr
customVim.vim-zoom
# Testing
vim-test
# Git
committia-vim
diffview-nvim
vim-fugitive
# Debugging
nvim-dap
nvim-dap-ui
nvim-dap-virtual-text
# Treesitter
(pkgs.vimPlugins.nvim-treesitter.withPlugins (
plugins: with plugins; [
bash
comment
css
csv
dockerfile
gitattributes
gitignore
go
html
javascript
json
kdl
lua
luadoc
make
markdown
markdown_inline
nix
php
phpdoc
query
rst
scss
sql
terraform
twig
typescript
vim
vimdoc
vue
xml
yaml
]
))
nvim-treesitter-context
nvim-treesitter-textobjects
# LSP, linting and formatting
conform-nvim
lsp-status-nvim
nvim-lint
nvim-lspconfig
# Completion
cmp-buffer
cmp-calc
cmp-cmdline
cmp-nvim-lsp
cmp-path
cmp-treesitter
cmp_luasnip
lspkind-nvim
nvim-cmp
# Snippets
friendly-snippets
luasnip
# Telescope
plenary-nvim
popup-nvim
telescope-frecency-nvim
telescope-fzf-native-nvim
telescope-live-grep-args-nvim
telescope-nvim
telescope-ui-select-nvim
# Databases
vim-dadbod
vim-dadbod-ui
vim-dadbod-completion
# Themes
catppuccin-nvim
# Configuration.
inputs.self.packages.${pkgs.system}.opdavies-nvim
];
extraLuaConfig = ''
if vim.loader then
vim.loader.enable()
end
require "opdavies"
'';
extraPackages = with pkgs; [
# Languages
nodePackages.typescript
nodejs-slim
php81
# Language servers
gopls
lua-language-server
lua54Packages.luacheck
marksman
nixd
nodePackages."@tailwindcss/language-server"
nodePackages.bash-language-server
nodePackages.dockerfile-language-server-nodejs
nodePackages.intelephense
nodePackages.typescript-language-server
nodePackages.vls
nodePackages.vscode-langservers-extracted
nodePackages.vue-language-server
nodePackages.yaml-language-server
phpactor
terraform-ls
# Formatters
black
eslint_d
nixfmt-rfc-style
nodePackages.prettier
stylua
yamlfmt
# Tools
hadolint
html-tidy
nodePackages.jsonlint
nodePackages.markdownlint-cli
php82Packages.php-codesniffer
php82Packages.phpstan
proselint
shellcheck
yamllint
];
};
home.file.".markdownlint.yaml".text = ''
default: true
line-length: false
no-duplicate-heading:
siblings_only: true
'';
}