- Handy and Smoothy: There will always be a panel to remind you when you forget your key settings. There will always be a short keystroke to help you get to the place you want to jump to. There will always…
- Powerful coding experience: nvim-lspconfig powered great LSP experient.
- Fancy looking: Well designed, denoised, uncluttered UI. Talk is cheap, see the gallery.
- Great Performance: Lazy loading anywhere, you will never have to worry about accidental opening of a file larger than 10000 loc can freeze your terminal.
This configuration is compatible with neovim 0.8+ version.
git clone --depth=1 https://github.com/Avimitin/nvim.git ~/.config/nvim
Finally, input nvim
to open the editor, and all plugins will be downloaded automatically.
nvim
To use this in your home-manager, you can use the xdg.configFile attribute:
{ pkgs }:
{
xdg.configFile = {
neovim = {
target = "nvim";
source = pkgs.fetchFromGitHub {
repo = "nvim";
owner = "Avimitin";
rev = "...";
hash = "...";
}
};
};
}
-
lua
: the configuration corekey-mapping.lua
: my modification to the built-in key mappingspack.lua
: script to download lazy.nvim plugin managercore/
: my modification to the built-in options and auto commandscompletion/
: plugins and configuration for LSP and vim command completiongit/
: plugin and configuration for using git in Neovimlang/
: plugins and configuration for using LSP server and get diagnostic in Neovimlibs/
: functions that I don't want to write twicenote/
: markdown and neorg support for neovimtools/
: miscellaneous plugins that can enhance editing experiencetreesitter/
: plugins for text object highlight and editingui/
: plugins for decorating the neovim
-
after/ftplugin/<lang>.lua
: configured LSP settings for each different language -
ftdetect
: list of script to help neovim identify filetype for some file -
indent
: list of script to help neovim properly set indentation -
syntax
: additional syntax detection for some file type -
vsnip
: my snippets
Ignore this if you are not a nix user
To make treesitter compatible with the stable neovim and my current configuration, and to make the share library compilation process reproducible and clean,
this configuration provides a custom treesitter parser nix builder to manage the treesitter parser plugin.
The flake output an overlay providing a nix function generate-nvim-treesitter-parsers
.
To use it, you can use home-manager to help you put this package into neovim's data directory.
Below is an example named laptop.nix
, which show an example of how to link the lua script in $XDG_DATA_HOME
to let neovim automatically load those parsers:
{ pkgs, ... }:
{
xdg.dataFile.generate-nvim-treesitter-parsers = let
tsLoader = pkgs.generate-nvim-treesitter-parsers [
{ name = "bash"; hash = "sha256-b1r/T+Y4Kmui/pHsncozP8OO6rMMHJj+Xaa2Qzwo/cI="; }
{ name = "c"; hash = "sha256-sB8fNfusjC9yTlrizb2mufDzQPvBajTJC+ewF9awBqA="; }
{ name = "cpp"; hash = "sha256-27QjVy8quWyGhFCv/6GATG1xjGnkB9LTcvlPMuR3NB0="; }
];
in
{
source = "${tsLoader}${tsLoader.passthru.luaPath}";
# Target will be substitute into ~/.local/share/nvim/site/plugin/treesitter-parsers.lua, and neovim will automatically load script in this path.
target = "nvim/site/plugin/treesitter-parsers.lua";
};
}
The array expect the argument in this form: [{ name: xxx; hash: xxx; }, ...]
,
where:
- name string: The name of the language
- hash string: The input hash, you can leave it blank and wait for nix hash report the correct hash
- needs_generate bool: When true, tree-sitter CLI will be used to generate the parser.
- srcRoot string: Specify where the parser source located. Some repository will vendor two or more parser source code in one repository.
See my home configuration for detail examples.
Also you might found update the parser hash one by one really annoying, so the generate-nvim-treesitter-parsers
also contains a update script.
To use it, first you will need to place the script file somewhere:
xdg.dataFile =
let
tsLoader = pkgs.generate-nvim-treesitter-parsers [
{ name = "bash"; hash = "sha256-b1r/T+Y4Kmui/pHsncozP8OO6rMMHJj+Xaa2Qzwo/cI="; }
{ name = "c"; hash = "sha256-sB8fNfusjC9yTlrizb2mufDzQPvBajTJC+ewF9awBqA="; }
{ name = "cpp"; hash = "sha256-27QjVy8quWyGhFCv/6GATG1xjGnkB9LTcvlPMuR3NB0="; }
{ name = "yaml"; hash = "sha256-RrYFKrhqFLsjQG+7XFbcQ2eYy2eyig5/r+MYO8DId4g="; }
];
in
{
nvim-treesitter-parsers = {
source = "${tsLoader}${tsLoader.passthru.luaPath}";
target = "nvim/site/plugin/treesitter-parsers.lua";
};
nvim-treesitter-updater = {
source = "${tsLoader.passthru.updateScript}/bin/treesitter-hash-batch-updater";
target = "nvim/assets/treesitter-updater.bash"; # or any other path you like
};
};
This script accept single argument, which should point to the hash definition file.
In our example above, it is the 'laptop.nix' file, so run the bash script ~/.local/share/nvim/assets/treesitter-updater.bash laptop.nix
,
and wait for it finish its job.
Coding Utils
LSP Progress |
---|
![]() |
Symbol Tree |
---|
![]() |
Code Completion |
---|
![]() |
Command Completion |
---|
![]() |
Errorlens Like diagnostic |
---|
![]() |
Signature Help |
---|
![]() |
Code Actions |
---|
![]() |
Diagnostic |
---|
![]() |
Code navigate |
---|
![]() |
Project grep |
---|
![]() |
Symbol search |
---|
![]() |
This configuration since commit 912416ae9c4b55501b23a91d774b567ba8697dd1
are
licenced under the Apache 2.0 license.
另附:禁止在 CSDN,bilibili 等国内平台使用该配置文件进行任何活动。 你只保有自己修改部分的权利。