Open-source project
mutewinter/dot_vim avatar
mutewinter/dot_vim

mutewinter's dot_vim is a 14 year old config offered as a parts bin

My 14 Year-Old (Neo)Vim Configuration

677 stars122 forksVim ScriptMIT

At a glance

What is it?
dot_vim is a personal Neovim and Vim configuration kept for more than 14 years, published with the author's own warning that nobody should adopt it wholesale. What it is good for is reading: one file per plugin, a documented custom plugin mechanism, and a plugin list that shows what a working setup actually needs.
Who is it for?
dot_vim is worth reading and copying from rather than installing, and it suits a Vim or Neovim user who wants one concrete idea per file, or who needs a working example of the Plug plus custom file layout. It is the wrong thing to clone into your own configuration directory if you want a supported, coherent setup, because the author says outright that it is very unlikely you would want to use it directly, and no releases are published.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 21 days ago.
What is it written in?
Mainly Vim Script, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The author says do not install this, which shapes everything

The readme opens with a warning that is unusual enough to be the most important line in the file. It states that the configuration has been iterated on for more than 14 years and 1,000 commits, and that it is very unlikely you would want to use it directly, inviting readers to learn and take snippets from it instead. The installation section repeats the point with an italic reminder to read the About section above before proceeding. That framing is the project in one line. What you are looking at is a working personal environment that has been shaped by 14 years of real editing habits, and the author is explicit that the result is idiosyncratic. A configuration with 1,000 commits behind it accumulates decisions made for one person: particular key habits, particular plugin combinations, particular opinions about status lines and file explorers. Copying it wholesale imports all of that at once, which is why the author asks for the opposite approach.

One file per plugin, which is the part worth stealing

The feature the author singles out is the plugin organisation, described as one of the things he is most proud of, with an invitation to steal it. Each plugin is included and managed in its own file, and the top level directory listing confirms the structure with a plug_plugins directory that holds a separate file per plugin, alongside a plug.vim file and a plugin_config.vim. The plugin table in the readme links each entry directly to its file, for example coc.nvim pointing at plug_plugins/coc.vim and telescope.nvim pointing at plug_plugins/telescope.vim. There is a related convention for adding plugins you want beyond the built-in set. You create a new .vim file in plug_plugins/custom with the same name as the plugin, then add the installation block, and the readme gives the shape of that block:

viml
if exists('g:plug_installing_plugins')
  Plug 'matze/vim-move.vim'
  finish
endif

let g:move_key_modifier = 'C'

The guard on g:plug_installing_plugins exists so the declaration is only seen during installation, and the settings that follow run normally. This pattern means adding a plugin is a new file rather than an edit to a shared list, which keeps diffs small and makes it obvious which file owns which behaviour.

Two installation paths, one of them a rake task and one a shell script

The documented install starts by cloning the repository into the Neovim configuration directory and changing into it:

bash
git clone [email protected]:mutewinter/dot_vim.git ~/.config/nvim
cd ~/.config/nvim

From there you pick between an automated path and a manual one. The automated path is a single script named scripts/setup, and the manual path is a rake task called rake vim:link, which makes the .vimrc and .nvimrc symbolic links, followed by vim +PlugInstall +qall to fetch the plugins through vim-plug and exit. The distinction between the two paths matters more than it looks. The setup script is the one to use if you are trying the configuration as the author intended. The manual path with the symbolic links is what you want if you are borrowing pieces, because it lets Vim and Neovim read the same configuration while you keep your own files in place. The directory listing shows the scripts directory exists alongside a Rakefile at the root, which is where those rake tasks are defined, and a .backup directory, a .tmp directory and a .undo directory that look like working state the repository keeps around.

The plugin list is a map of what a working setup actually loads

Reading the table of plugins is probably the fastest way to understand the configuration, and it covers a modern Neovim setup end to end. The language server story runs through coc.nvim, described as a Nodejs extension host for vim and neovim that loads extensions like VSCode and hosts language servers, with a separate coc-settings.json at the root for its configuration. Git support is split across vim-fugitive as a git wrapper, gitsigns.nvim for git integration in buffers, and diffview.nvim for cycling through diffs for all modified files for a given git rev. The tree is nvim-tree.lua, a file explorer written in lua. The status line is lualine.nvim, written in pure lua. Diagnostics and error navigation go through trouble.nvim, which collects diagnostics, references, telescope results, quickfix and the location list into one place. There is a Telescope integration for find, filter, preview and pick, a Comment.nvim for smart commenting that supports treesitter, dot repeat and motion hooks, an undotree visualiser for undo history, vim-dadbod as a database interface, nvim-notify as a notification manager, plenary.nvim, vim-startify as a start screen, and a GitHub Copilot plugin. Several of these are Neovim specific by design, and mini.nvim is described as a library of more than 40 independent Lua modules that needs Neovim 0.9 or higher.

Configuration is split by concern rather than piled into one file

The top level entries show a configuration divided by responsibility, which is the other structural idea worth learning from. There is init.vim at the root, along with gvimrc for the graphical variant, a config.vim for general settings, a platforms.vim for platform differences, commands.vim for user commands, functions.vim for helper functions, autocmds.vim for autocommands, mappings.vim for the key bindings, and plug.vim and plugin_config.vim for the plugin system. Directories extend the same logic. after holds files sourced after the main configuration, autoload holds autoloaded functions, lua holds the Lua modules that several plugins require, colors holds colour schemes, spell holds spell files, and there are directories for syntax_checkers and for MyUltiSnips, which is a snippet engine setup. The mappings file is referenced directly in the readme, together with the plug_plugins directory, and the readme gives one concrete example of what is inside: pressing enter in normal mode saves the current buffer if needed. That single custom mapping is a good illustration of the point, since it is a habit encoded as configuration rather than a general feature.

No releases, a plain MIT licence, and a config that is still moving

Two facts frame how much confidence to place in the repository. The first is that there are no GitHub releases, which the project record states plainly. There is no versioned artefact to pin, so anyone cloning it gets whatever is on the main branch at that moment, and there is no changelog to consult for what changed or when. The second is that the code is still moving. The last push was on 2026-10-02, which is well inside a six month window, and the repository has a CHANGELOG.md at the root alongside a .backup directory and screenshots directory, so history is recorded even though nothing is published as a release. The licence is MIT, which is the permissive end of the scale and covers copying the snippets the author invites you to take. The homepage is the repository itself. There is a portkey.json file at the root and a vscode.vim file, plus a .github directory, so the project also carries the traces of tooling used to maintain it.

Where this configuration is the wrong tool

The case against adopting it wholesale is stated by the author, but it is worth spelling out the practical reasons. A configuration tuned over 14 years by one person encodes one workflow, and adopting it means debugging somebody else's key bindings rather than learning your own. The editor requirement is the next constraint. The readme says the author uses Neovim via Homebrew on macOS, and much of the plugin set depends on it, from the Lua modules to mini.nvim which needs 0.9 or higher. Plain Vim will not get the same result from these files, so a Vim user needs to check the compatibility of each plugin before borrowing it. The plug_plugins approach also adds a step to every new plugin, since each one means a new file, which is tidy for a maintainer and a small tax for a casual user. And with no releases, there is no way to return to a known good state, so anyone experimenting in place should keep their own configuration directory out of the clone path until they know what they are keeping.

Editorial conclusion

dot_vim is worth reading and copying from rather than installing, and it suits a Vim or Neovim user who wants one concrete idea per file, or who needs a working example of the Plug plus custom file layout. It is the wrong thing to clone into your own configuration directory if you want a supported, coherent setup, because the author says outright that it is very unlikely you would want to use it directly, and no releases are published. Verify first that your editor is Neovim rather than plain Vim, since the mapping, the Lua plugin set and the mini.nvim dependency all assume the newer runtime, and read the plugin list before copying anything. The last push was on 2026-10-02 and the repository publishes no GitHub releases.

Frequently asked questions

Should I install mutewinter's dot_vim configuration?

The readme says it is very unlikely you would want to use it directly and invites you to take snippets instead. A 14 year old, 1,000 commit personal configuration carries one person's habits, so reading it is the intended use.

How do I install dot_vim for Neovim?

Clone [email protected]:mutewinter/dot_vim.git into ~/.config/nvim, change into that directory, and either run scripts/setup or do it manually with rake vim:link followed by vim +PlugInstall +qall.

How do I add a plugin that is not in the list?

Create a .vim file in plug_plugins/custom named after the plugin and add the installation block inside a check for g:plug_installing_plugins, then set any options after that guard.

Does dot_vim work with plain Vim or only Neovim?

The author uses Neovim via Homebrew on macOS, and much of the plugin set depends on it, with mini.nvim requiring Neovim 0.9 or higher. The install creates both .vimrc and .nvimrc symbolic links, but individual plugins need checking before use in plain Vim.

Are there released versions of mutewinter's dot_vim?

No. The project has no GitHub releases, so cloning gives you the current main branch with no version to pin and no tagged artefact to fall back to. The last push was on 2026-10-02.

Official sources

  1. Issues
  2. License: MIT
  3. mutewinter/dot_vim on GitHub
  4. Project website
  5. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/mutewinter-dot-vim.svg)](https://hysenlabs.com/projects/mutewinter-dot-vim)

Was this useful?