guest@6admin.io:~$

MyVim: the DevOps IDE that is only 640 lines, because the manager does the rest

This is the epilogue of a series that started with apt for Vim in 2016 , passed through hand-rolled submodules , a VimScript rewrite and a v2 hardening saga . MyVim is what all of that buys: myvim v0.4.0 is not a distribution and not a config manager. It is a plugin of personal configuration, around 640 lines of VimScript and it is deliberately boring.

The architecture: config as a plugin

Plugins are git submodules managed by vim-plugin-manager; MyVim is declared last in the PluginBegin block and ships only what the plugins cannot know about each other:

  • plugin/vim_*.vim: pure Vim config, no plugin. Settings, mappings, aliases, colorscheme, filetype detection.
  • plugin/plugin_*.vim: exactly one file per plugin (plugin_coc.vim, plugin_ale.vim, plugin_nerdtree.vim, …). The mapping table in the README documents what each owns.

All global mappings live in one file (vim_mappings.vim), because the only way to audit a keymap setup is to read it in one sitting. The manager handles versions and reproducibility; MyVim handles opinions. That split is why it is 640 lines and not 6,000: a distro reimplements management and management was already done.

A DevOps IDE, scoped honestly

The filetype table reads like a sysadmin CV: yaml/ansible, terraform, hcl, terragrunt, nix, helm , python, go, dockerfile, cloud-init, libvirt xml. coc.nvim as LSP hub, ALE as the linter front. The interesting part is the scoping rules that keep generic linters honest:

  • a yaml buffer whose first line starts with apiVersion: gets kubeconform buffer-locally; every other yaml file never sees it;
  • actionlint runs only on .github/workflows/;
  • terragrunt.hcl gets its own terragrunt filetype (HCL syntax alias) so terragrunt-ls attaches without claiming every plain HCL file, vault policies included;
  • Helm chart templates get their own helm filetype so yaml linters stay out of templated files;
  • cloud-init is detected by its #cloud-config first line.

A linter that fires on the wrong file is noise and noise trains you to ignore the linter. Scoping by buffer content is the whole trick; there is no more to it, which is why it fits in one config file per plugin.

Formatting runs on demand only (ale_fix_on_save = 0 on purpose): no surprise rewrites of my buffers when I save, the fixer is one keypress away (<leader>f).

The details that make it mine

  • Secrets stay out: plugin/*-secrets.vim is gitignored; the fugitive config points at it and every repo copy stays clean. swapdir/ and undodir/ are auto-created with mode 0700, because undo files remember everything you ever had open.
  • OSC52 clipboard over SSH: on remote sessions, a yank feeds the local clipboard through the escape sequence, no +clipboard build required; the byte cap and the opt-out came from a real bug fix (#8: portable base64, not the naive encoding that breaks at 7-bit terminals).
  • <F9> mouse capture toggle: mouse=a for the editor’s scroll, empty for the terminal’s own selection and copy/paste. State echoed on toggle. Sounds trivial, is the difference between “vim stole my tmux copy” and a functioning terminal.
  • The alias dynasty: command W w !sudo tee > /dev/null % and command Q qa, inherited from the 2009 .bashrc article , still on duty; on the shell side, myflec adds the :q guard detecting vim’s :terminal shells via $VIMRUNTIME. The three most expensive typos of 2008 still neutralize themselves in 2026.
  • AI without leaving the philosophy: vim-ai against a local ollama (OpenAI-compatible endpoint), roles in roles.ini; copilot and codeium exist as optional lazy plugins for the day a client imposes them.

v0.4.0 (September 2026) rounded out the DevOps coverage: nix (nil LSP, deadnix/statix), terragrunt filetype, cloud-init/LXC detection, helm and k8s linting, python LSP swap to coc-pyright and the minimap restored via the maintained fork.

The dogfood loop closes

MyVim is the live proof of the manager: every plugin declared in a PluginBegin block, one submodule per plugin under pack/plugins/start/, pins re-asserted on every update, :PluginManager gc catching my orphans, :PluginManager health verifying the setup. When the manager grew its v2 security fixes, MyVim was the first repo they ran against. Four generations of tooling (aptogen 2016, bash 2018, VimScript 2025, hardened 2026) and the editor config they all serve is 640 lines of opinion. The tools got better; the opinions barely changed.

[edit: 2026] The Ansible implementation of all this: the neovim and vim roles.