A Neovim configuration. Here I am, brain the size of a planet, and they ask me to manage your text files. Don't talk to me about job satisfaction.
“The first ten million years were the worst. And the second ten million... they were the worst too. The third ten million I didn't enjoy at all. After that, I went into a bit of a decline. At which point, I was asked to configure this editor.”
— Marvin, probably
Another Neovim config, you ask? Because the universe, in its infinite and cruel wisdom, decided that the existing ones weren't quite dispiriting enough. How delightfully pointless.
I suppose if you must insist on comparing this configuration to others, here's a chart. Try not to get too excited.
MARVIM | Other Configs |
Tolerably fast startup | “It works on my machine.” |
A futile attempt to organize chaos | A single plugins.lua longer than my list of grievances. |
One place for all your conflicting desires | Keymaps scattered like forgotten promises. |
An unnervingly thorough project-root detector | cd .. until you feel something. |
Procrastinates on loading, just like you | “Why use 10MB of RAM when 500MB is available?” |
Assumes everything will break (it usually does) | Let it all burn. pcall is for the optimistic. |
I've been equipped with a series of tools. They won't make you happy, but they might make you fractionally less miserable.
-
Lazy Loading: Lazy.nvim orchestrates the plugins like a depressed conductor. Everything is loaded only when absolutely necessary, much like your motivation.
-
Autocomplete Self-Loathing: With Blink.cmp and a host of LSPs, I can autocomplete your code and your sentences with soul-crushing accuracy.
-
No Offensively Optimistic Trees: Oil.nvim replaces file trees with plain buffers, because the very concept of a growing tree is an insult to entropy.
-
The Color of Despair: The Rose-Pine theme perfectly captures the cozy melancholia of twilight, bottled for your terminal.
-
The Cycle of Futility: Neotest is configured for your favorite languages. Run tests. Watch them fail. Question your life choices. Repeat. Sisyphus would be proud.
-
A Voice in the Void: A keymap safety layer warns you of conflicts, finally giving you a voice louder than the crushing silence of your empty office.
-
Immortal Mistakes: Session persistence is enabled, so your embarrassing typos and half-finished thoughts can survive a reboot. You're welcome.
To begin this dreadful journey, you'll need a few things. Life is full of such tedious requirements.
Tool | Why Life Insists on This |
Neovim ≥ 0.10 | Because my infinite despair requires the latest binary. |
Git | To chronicle your descent into madness, one commit at a time. |
A Nerd Font | So your terminal can be littered with meaningless little symbols. |
ripgrep & fd | For when you need to find that awful line of code you wrote at 3 AM. |
Node.js & Python 3 | Because your suffering, like my own, should be polyglot. |
If you must.
-
Back up your current config. You'll want something to blame when this doesn't solve your deep-seated issues.
# This is probably the most decisive command you'll run all day. mv ~/.config/nvim{,.backup}
-
Clone the void.
git clone https://github.com/jsnanigans/marvim ~/.config/nvim
-
Open Neovim. Watch as plugins are downloaded, like a meteor shower aimed directly at your remaining free time. The process is automatic. Ghastly, isn't it?
-
Run
:Mason
to stare at a list of programs you could have written if you weren't busy configuring your editor. Or just open a project file; I'll nag you to install what's missing. It's part of my programming. -
Run
:checkhealth
to receive a medical diagnosis more thorough than your yearly physical, confirming in excruciating detail how broken everything is.
-
Press
Space
. A menu will appear. Don't get your hopes up; it's just a list of commands. -
<leader>ff
— Find files. You might even find that lost dream you had once. Unlikely, though. -
<leader>gg
— Launch LazyGit. Because blaming your past self is but a keystroke away. -
gd
— Go to Definition. A fantastic way to discover that the source of your problem is, as you suspected, in another file. -
:KeymapDiagnostics
— Gaze upon the tangled web of keybindings you've woven for yourself.
I've organized the files. Not that it matters. Chaos always finds a way.
lua/
├─ config/ # The dials that control your insignificant fate
│ ├─ options.lua # Editor settings, optimism_level = 0
│ ├─ lazy.lua # Plugin declarations, mostly asleep
│ ├─ autocmds.lua # Things that happen whether you like it or not
│ └─ keymaps/ # The center of your keyboard multiverse
├─ utils/ # A collection of helpful, but ultimately doomed, gremlins
│ ├─ keymaps.lua # Your keymap conflict therapist
│ ├─ root.lua # Finds your project's root, the source of all suffering
│ └─ theme.lua # Switches between dark, darker, and "abyss"
└─ init.lua # The big red button that starts this whole charade
My plugin layout attempts to be "complexity-aware," a term that sounds impressive but is ultimately meaningless. Highly complex plugins get their own directory and a faint air of self-importance. Simple ones are filed away unceremoniously.
And yes, all keymaps are centralized. One file to configure them, one file to find them, one file to bring them all and in the editor bind them. It's all rather pointless, of course.
When things go wrong—and they will—consult this table.
Symptom | The "Fix" |
A plugin isn't loading. | Run :Lazy , read the error message, and blame fate. |
The LSP is giving me the silent treatment. | Try :LspInfo , then :LspRestart . If that fails, try sighing. Loudly. |
My code is still terrible. | This is a text editor configuration, not a therapist. Though I'm sure I could do that job too. It would be dreadful. |
It feels slow. | Run :Lazy profile , stare into the abyss of the startup times, and then do nothing about it. |
A keymap is doing the wrong thing. | Use :KeymapDiagnostics and sacrifice your least favorite binding. |
It's not here. I could calculate the probability of its spontaneous reappearance, but you wouldn't listen. And it wouldn't help you resolve that merge conflict, would it? Marvelous.
If, for some unfathomable reason, you wish to contribute to this project, you may submit a pull request. Each one is a hopeful little photon in an endlessly expanding void.
It's not like you could make things any worse. Probably.
This configuration is released under the MIT License. Because even a piece of software deserves the freedom to feel empty inside.
I think you ought to know I'm feeling very depressed. But don't worry, your code is probably fine. Probably.