{"id":13601882,"url":"https://github.com/echasnovski/nvim","last_synced_at":"2025-04-05T16:04:20.777Z","repository":{"id":38787639,"uuid":"279115476","full_name":"echasnovski/nvim","owner":"echasnovski","description":"My custom NeoVim setup","archived":false,"fork":false,"pushed_at":"2025-03-23T12:05:49.000Z","size":11543,"stargazers_count":143,"open_issues_count":0,"forks_count":10,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-29T15:03:41.124Z","etag":null,"topics":["lua","neovim","neovim-dotfiles","vim"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/echasnovski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-07-12T17:35:51.000Z","updated_at":"2025-03-23T12:05:53.000Z","dependencies_parsed_at":"2023-09-26T22:40:09.668Z","dependency_job_id":"9e8427b0-7568-460b-aef8-326c7c5ba390","html_url":"https://github.com/echasnovski/nvim","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/echasnovski%2Fnvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/echasnovski%2Fnvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/echasnovski%2Fnvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/echasnovski%2Fnvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/echasnovski","download_url":"https://codeload.github.com/echasnovski/nvim/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247361614,"owners_count":20926642,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["lua","neovim","neovim-dotfiles","vim"],"created_at":"2024-08-01T18:01:09.393Z","updated_at":"2025-04-05T16:04:20.752Z","avatar_url":"https://github.com/echasnovski.png","language":"Lua","readme":"# Neovim setup\n\nThis is a setup for Neovim\u003e=0.8. Current structure (might be a bit outdated):\n\n```\nafter/                # Everything that will be sourced last (`:h after-directory`)\n│ ftplugin/           # Configurations for filetypes\n│ queries/            # Queries for treesitter\n└ snippets/           # Local snippets (override installed collection)\ncolors/               # Personal color schemes\nlua/                  # Lua code used in configuration\n└ mini-dev/           # Development code for 'mini.nvim'\nmisc/                 # Everything not directly related to Neovim startup\n│ dict/               # Dictionary files\n│ mini_vimscript/     # Vimscript (re)implementation of some 'mini' modules\n└ scripts/            # Scripts for miscellaneous usage\nplugin/               # Modularized config files sourced during startup\n│ 10_options.lua      # Built-in options/settings\n│ 11_mappings.lua     # Personal mappings\n│ 12_functions.lua    # Personal functions\n│ 13_vscode.lua       # VSCode related configuration\n│ 20_mini.lua         # Configuration of 'mini.nvim'\n└ 21_plugins.lua      # Configuration of other plugins\nsnippets/             # Global snippets\nspell/                # Spelling files\n```\n\nNOTEs:\n- Code is modularized with parts put into 'plugin/' directory which is sourced automatically during Neovim startup. Files have numeric prefix to ensure that they are loaded in particular order (matters as some files depend on previous ones; like some plugin setup can depend on set options, etc.).\n\n  Currently general approach is to use 'lua/', but it has some downsides:\n    - All modules inside of it are shared across installed plugins. This might lead to naming conflicts. It can be avoided by creating \"personalized\" directory module (like 'lua/ec/'), but with `plugin/` it is not necessary.\n    - Using `require()` to source those modules is not easily reloadable, as `require()` caches its outputs (stored inside `package.loaded` table).\n      Having config in 'plugin' doesn't solve this directly, but files are more suited to be called with `:source`.\n\n## Installation\n\nBasically, this should (after installing system dependencies) work just by cloning this repository and waiting until all plugins/dependencies are installed (when there is no visible progress):\n\n```bash\ngit clone --filter=blob:none https://github.com/echasnovski/nvim.git\n```\n\n## System dependencies\n\nImportant system dependencies:\n\n- **Nerd fonts** ([information source](https://gist.github.com/matthewjberger/7dd7e079f282f8138a9dc3b045ebefa0)):\n    - Download a [Nerd Font](https://www.nerdfonts.com/) (good choice is \"UbuntuMono Nerd Font\").\n    - Unzip and copy to '~/.local/share/fonts'.\n    - Run the command `fc-cache -fv` to manually rebuild the font cache.\n\n- **Tools for finding stuff**:\n    - [ripgrep](https://github.com/BurntSushi/ripgrep#installation)\n\n- **Spelling dictionaries**:\n    - Create '~/.nvim/spell' directory.\n    - Put there English,Russian dictionaries (download from ftp://ftp.vim.org/pub/vim/runtime/spell/).\n\n- **Clipboard support**. One of 'xsel' (preferred) or 'xclip'.\n\n- **Language Servers**. These should be handled manually. For a list of needed LSP providers look at settings for 'nvim-lspconfig'.\n\n- **Pre-commit hooks** (not strictly necessary but \"good to have\"). This repository uses pre-commit hooks to verify integrity of code. Preferred way of setting this up:\n    - Install `pre-commit`. Preferred way is to use [pipx](https://github.com/pypa/pipx) with `pipx install pre-commit`. There also [other options](https://pre-commit.com/#install).\n    - From the root of this repository run `pre-commit install`. This enables pre-commit checks. Now they will be run before any commit. In case they did something, you need to `git add` those changes before commiting will become allowed.\n\n## Plugin management\n\nPlugin management is done with 'mini.deps'. See `:h mini.deps`. In short:\n\n- To add plugin, add call to `add()` with plugin source. Restart Neovim.\n- To update plugins, run `:DepsUpdate`, review changes, `:write`. Don't forget to `:DepsSnapSave` and commit `mini-deps-snap`. See `:h DepsUpdate` and `:h DepsSnapSave`.\n- To delete plugin, remove its `add()` line from config, restart Neovim, run `:DepsClean`.\n\nNOTEs:\n- Loading of most non-essential to startup plugins is deferred until after it with `later()` from 'mini.deps'. This mostly doesn't affect general usability: it decreases time before showing fully functional start screen (or asked file) from \\~240ms to \\~105ms (on a not so quick i3-6100) to \\~65ms (on Ryzen 5600u).\n\n## Notes\n\n- 'Pyright' language server currently by default uses python interpreter that is active when Neovim is opened. However, if using virtual environment, it is a good idea to create 'pyrightconfig.json' file with at least the following content:\n    ```\n    {\n        \"include\": [\"\u003cpackage_name\u003e\"], // Directory of package source\n        \"venvPath\": \".\", // Path to folder where virtual environment can be found\n        \"venv\": \".venv\" // Folder name of virtual environment\n    }\n    ```\n\n## Tips and tricks\n\n- When testing with 'vim-test', use `-strategy=make` argument to `:Test*` commands in order to populate quickfix list. **Note** that this will not display testing process as it is running and won't open quickfix list by default.\n","funding_links":[],"categories":["Lua"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fechasnovski%2Fnvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fechasnovski%2Fnvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fechasnovski%2Fnvim/lists"}