nixpkgs/home/programs/neovim.nix
Daniel Siepmann 3b3f2d0588
Integrate gitlint via ale into Neovim for writing commit message
This is only done for one customer yet, as this customer has clean rules
which are already provided as community rules via gitlint.
2022-03-29 11:52:32 +02:00

352 lines
9.5 KiB
Nix

{ pkgs }:
let
# The folder contains the expected `~/.config/nvim/` structure
# This structure is the same for plugins.
# I therefore just load this folder as plugin.
configuration = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "configuration";
src = ./neovim/configuration;
};
colorscheme-smyckblue = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "colorscheme-smyckblue";
src = pkgs.fetchgit {
url = "https://gitea.daniel-siepmann.de/danielsiepmann/vim-colorscheme-smyckblue.git";
rev = "v1.0.1";
sha256 = "bBX3dzqKz6kTACfyAU4HH0UFVDYdyqLTvQdYTgWw8Jg=";
};
};
neotags = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "neotags";
src = pkgs.fetchgit {
url = "https://gitea.daniel-siepmann.de/danielsiepmann/neotags.git";
rev = "v0.3.0";
sha256 = "uJ7cl+1Ngff0FKzjmh1i7O/PkNjPvPT+ZEHgceeZcz0=";
};
};
syntax-typoscript = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "syntax-typoscript";
src = pkgs.fetchgit {
url = "https://gitea.daniel-siepmann.de/danielsiepmann/vim-syntax-typoscript.git";
rev = "v1.1.0";
sha256 = "ifdebcxzIskrs4FtIOtNc/L9lBS8oGeThJR+vccfVyc=";
};
};
syntax-nix = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "syntax-nix";
src = pkgs.fetchFromGitHub {
owner = "LnL7";
repo = "vim-nix";
rev = "63b47b39c8d481ebca3092822ca8972e08df769b";
sha256 = "wQzNXfE7JFalgiCQ2ksPAUyFKacmJV7mNKmKDe9jySI=";
};
};
syntax-php = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "syntax-php";
src = pkgs.fetchFromGitHub {
owner = "StanAngeloff";
repo = "php.vim";
rev = "2ec2ab9fcc65bfc47c7ba6b3846903528188ceea";
sha256 = "lgsaCU6Rzzynkd9SID0chjKaxgEWznrmEl133Syc6cY=";
};
};
syntax-fluid = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "syntax-fluid";
src = pkgs.fetchFromGitHub {
owner = "mipmip";
repo = "vim-fluid";
rev = "cedc4ad871941e8f7134d1d71f9434f1bc3d93d5";
sha256 = "LiS2Dqw1K1Fu5VfHQnxIBDxDzEarmSAUUavQcwHRDsQ=";
};
};
syntax-mustache = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "syntax-mustahce";
src = pkgs.fetchFromGitHub {
owner = "mustache";
repo = "vim-mustache-handlebars";
rev = "0153fe03a919add2d6cf2d41b2d5b6e1188bc0e0";
sha256 = "lmYt+GKuXhbOhu3HufqIFE2DvzUYlk5vGqU6tpJ2yjY=";
};
};
ag = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "ag";
src = pkgs.fetchFromGitHub {
owner = "rking";
repo = "ag.vim";
rev = "c478f7973074f15bbf82c298a1678b4e23f1767a";
sha256 = "jlR8NFG7IRCYiQ7ocQQCI2npAPujgQFZ6RpFX8zwTAA=";
};
};
vdebug = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "vdebug";
src = pkgs.fetchFromGitHub {
owner = "joonty";
repo = "vdebug";
rev = "v2.0.0";
sha256 = "kobMC6TRFZcEbgFdOaBgXUzoeWQUrVzUKylN1N9nEnc=";
};
};
sqlformat = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "sqlformat";
src = pkgs.fetchFromGitHub {
owner = "mpyatishev";
repo = "vim-sqlformat";
rev = "2a2a57d75865526f85d94bf769f4fd54d61c426b";
sha256 = "LPnHcuh+jxEL8CZ1wizHqi3uzYYtIxzMqnE7y7mTrbE=";
};
};
diff-fold = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "diff-fold";
src = pkgs.fetchFromGitHub {
owner = "sgeb";
repo = "vim-diff-fold";
rev = "48b4505c1b6f14ceb4e4be732aad337147ef36cd";
sha256 = "M3CAUueEhLD0J6sLUpRkFv+vK4aGYO+Xnokxmn+VxqU=";
};
};
phpactor = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "phpactor";
src = pkgs.fetchzip {
url = "https://daniel-siepmann.de/fileadmin/phpactor-0.18.0.tar.gz";
sha256 = "1XHqKxBXcFPt2P/N2drr8EkBsg0Hu94Vjq0my+aj614=";
};
};
neoterm = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "neoterm";
src = pkgs.fetchFromGitHub {
owner = "kassio";
repo = "neoterm";
rev = "e78179a9ceb98de8d0c37bdda435a5deab4d5e71";
sha256 = "0w962xfcgigdw41wblrv1l55xki0kl5vwkdbm6jlr44hzii0nhgz";
};
patches = [
./neovim/patches/disable_neoterm_repl.patch
];
};
tagbar = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "tagbar";
src = pkgs.fetchFromGitHub {
owner = "majutsushi";
repo = "tagbar";
rev = "v2.7";
sha256 = "Eg6xRwisopmBexqkWjRbSi9aQC4uCXbFO6SCK1LY+Ow=";
};
};
test = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "test";
src = pkgs.fetchFromGitHub {
owner = "vim-test";
repo = "vim-test";
rev = "16a3b6da1bab42473d42d7e02d89d549d7a5e138";
sha256 = "CVSTy/FeBgyzRK8NWDMiIynz7DRlFenruiCOjowYnMI=";
};
patches = [
./neovim/patches/disable_test_paratest.patch
];
};
telescope-ctags-outline = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "telescope-ctags-outline";
src = pkgs.fetchFromGitHub {
owner = "fcying";
repo = "telescope-ctags-outline.nvim";
rev = "35b2df9545f72352502703ba06b7ab711fa25e51";
sha256 = "e8QcD7H2unmoaLaN1JUxtOGQYBJGAXtfSnj8sW66ff4=";
};
};
in {
enable = true;
extraPython3Packages = (ps: with ps; [
# Dependency of sqlformat
sqlparse
]);
# TODO: Check out these plugins as additions / replacements:
# - https://github.com/glacambre/firenvim Give it another try, integrates neovim into firefox
# - https://github.com/lambdalisue/vim-pager/ (try once I use neovim as pager again)
# - https://github.com/sindrets/diffview.nvim/
# - https://github.com/weilbith/nvim-code-action-menu/ Check again in future, right now not of much useness on my setup.
#
# Alternatives:
# - https://github.com/mfussenegger/nvim-dap Alternative to Vdebug, more modern and should work with firefox as well? But needs node …)
# - https://github.com/nvim-neo-tree/neo-tree.nvim (General tree, not only filesystem, alternative to nerdtree but can also be used for buffers etc.)
# - https://github.com/simrat39/symbols-outline.nvim/ Replacement for tagbar using lsp, combine with https://github.com/jose-elias-alvarez/null-ls.nvim once it supports Workspace Symbols / Document Symbol
plugins = with pkgs.vimPlugins; [
# My own plugins
colorscheme-smyckblue
neotags
configuration
syntax-typoscript
# More UI related
{
plugin = nerdtree;
config = pkgs.lib.fileContents ./neovim/plugins/nerdtree.vim;
}
{
plugin = undotree;
config = pkgs.lib.fileContents ./neovim/plugins/undotree.vim;
}
{
# Use pinned to 2.7 as I don't need any of the new features.
# Instead they make it hard to only show what I'm interested in within PHP files.
# As they changed the building with nested structures.
plugin = tagbar;
config = pkgs.lib.fileContents ./neovim/plugins/tagbar.vim;
}
{
plugin = telescope-nvim;
type = "lua";
config = pkgs.lib.fileContents ./neovim/plugins/telescope.lua;
}
{
plugin = telescope-ctags-outline;
type = "lua";
config = pkgs.lib.fileContents ./neovim/plugins/telescope-ctags-outline.lua;
}
# Syntax
syntax-nix
syntax-mustache
i3config-vim
syntax-fluid
{
plugin = syntax-php;
config = pkgs.lib.fileContents ./neovim/plugins/php.vim;
}
# Adding features
ag
sqlformat
diff-fold
{
plugin = vim-snipmate;
# I didn't migrate snippets to new format, yet.
config = ''
let g:snipMate = { 'snippet_version' : 0 }
'';
}
fugitive
{
plugin = vim-mergetool;
config = ''
let g:mergetool_layout = 'b,lr,m'
'';
}
vim-commentary
vim-indent-object
vim-textobj-comment
{
plugin = vdebug;
config = pkgs.lib.fileContents ./neovim/plugins/vdebug.vim;
}
{
# Seems to be broken: https://github.com/kassio/neoterm/issues/338
# Therefore I install my own version where this bug is disabled
plugin = neoterm;
config = pkgs.lib.fileContents ./neovim/plugins/neoterm.vim;
}
{
# TODO: Adjust templates: https://phpactor.readthedocs.io/en/master/reference/templates.html
plugin = phpactor;
config = ''
let g:phpactorOmniError = v:true
let g:phpactorPhpBin = "${pkgs.php74}/bin/php"
'';
}
# LSP (=Language Server Protocol)
{
plugin = nvim-lspconfig;
type = "lua";
config = ''
require('lspconfig').phpactor.setup({
cmd = {
'${pkgs.php74}/bin/php',
'${phpactor}/bin/phpactor',
'language-server',
},
capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities())
})
'';
}
{
plugin = nvim-cmp;
type = "lua";
config = pkgs.lib.fileContents ./neovim/plugins/cmp.lua;
}
cmp-omni
cmp-buffer
cmp-nvim-lua
cmp-nvim-lsp
{
plugin = lsp_signature-nvim;
type = "lua";
config = pkgs.lib.fileContents ./neovim/plugins/lsp-signature.lua;
}
# More related to testing, linting, …
{
plugin = ale;
config = pkgs.lib.fileContents(./neovim/plugins/ale.vim)
# Keep line break as fileContents strips last EOL
+ ''
let g:ale_xml_xmllint_executable = '${pkgs.libxml2}/bin/xmllint'
let g:ale_gitcommit_gitlint_executable = '${pkgs.gitlint}/bin/gitlint'
'';
}
{
plugin = test;
config = pkgs.lib.fileContents ./neovim/plugins/test.vim;
}
# Dependencies for other plugins
vim-addon-mw-utils
vim-textobj-user
plenary-nvim
];
}