<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: XoniX</title>
    <description>The latest articles on DEV Community by XoniX (@electromidz).</description>
    <link>https://dev.to/electromidz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F575097%2Fbd986e26-dd18-4784-ac09-ba7f545dc628.JPEG</url>
      <title>DEV Community: XoniX</title>
      <link>https://dev.to/electromidz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/electromidz"/>
    <language>en</language>
    <item>
      <title>Necrophos.nvim: Dota 2 Heroes Neovim Color Schemes</title>
      <dc:creator>XoniX</dc:creator>
      <pubDate>Wed, 05 Aug 2026 07:32:28 +0000</pubDate>
      <link>https://dev.to/electromidz/necrophosnvim-dota-2-heroes-neovim-color-schemes-5a6f</link>
      <guid>https://dev.to/electromidz/necrophosnvim-dota-2-heroes-neovim-color-schemes-5a6f</guid>
      <description>&lt;h2&gt;
  
  
  What if your code editor matched the hero you were playing?
&lt;/h2&gt;

&lt;p&gt;I'm a developer who plays Dota 2. And one day I realized something while staring at my terminal during a 45-minute game: my colorscheme didn't match &lt;em&gt;anything&lt;/em&gt; about the world I was actually living in.&lt;/p&gt;

&lt;p&gt;So I built eight.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;necrophos.nvim&lt;/strong&gt; isn't a collection of eight tints of the same palette. It's eight completely different Dota 2 heroes, each traced back to their actual in-game colors, transformed into syntax-aware, WCAG-compliant Neovim themes.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem with Most Color Schemes
&lt;/h2&gt;

&lt;p&gt;Dark themes get boring fast. They're usually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generic&lt;/strong&gt;: Navy background, random accent colors that change every theme&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unrealistic&lt;/strong&gt;: "Inspired by" a concept or feeling, not actually sourced from anything&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aesthetic chaos&lt;/strong&gt;: Comments fade into the background, three shades of similar hues melt together&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted something different. Something that felt &lt;em&gt;real&lt;/em&gt;. Something that could make someone open Neovim and think: &lt;em&gt;"Oh, I'm using Arc Warden today."&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Eight Heroes, Eight Worlds
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Necrophos&lt;/strong&gt; — The Plague Doctor
&lt;/h3&gt;

&lt;p&gt;Toxic green meets grave purple over deep pine. The emerald staff, the plague mask, the decay that lingers. Perfect for when you're debugging something nasty.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Kunkka&lt;/strong&gt; — The Admiral
&lt;/h3&gt;

&lt;p&gt;Night-ocean navy, ghostship teal, brass gold, and cannon crimson. You're navigating code like you're steering a ship through fog. Steel for operators, fire for alerts.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Invoker&lt;/strong&gt; — The Arcane Mage
&lt;/h3&gt;

&lt;p&gt;Here's where it gets clever. Invoker's &lt;strong&gt;three orbs&lt;/strong&gt; map to syntax:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quas&lt;/strong&gt; (ice blue) → functions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wex&lt;/strong&gt; (violet) → keywords
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exort&lt;/strong&gt; (fire orange) → constants&lt;/li&gt;
&lt;li&gt;And gold for warnings, like the flash when you invoke a spell&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Brewmaster&lt;/strong&gt; — The Drunken Brawler
&lt;/h3&gt;

&lt;p&gt;Brass kegs, olive robes, primal fire. Built directly from Mangix's model — which means &lt;strong&gt;intentionally no blue&lt;/strong&gt;, because the hero's model doesn't have any. Jade anchors the cool end instead. Warm, earthy, bold.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Earth Spirit&lt;/strong&gt; — Carved from Sacred Jade
&lt;/h3&gt;

&lt;p&gt;Sacred jade, fired terracotta, cold granite. Valve's lore says Kaolin was literally &lt;em&gt;carved from jade and buried with a stone funerary army&lt;/em&gt; — so the palette matches that origin. No blue here either, but the earthiness feels completely different from Brewmaster.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Lich&lt;/strong&gt; — The Frozen Sovereign
&lt;/h3&gt;

&lt;p&gt;Chain Frost cyan. Frost Armor mint. Sinister Gaze violet. And one warm crimson for errors, because a failure should never hide in the ice.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Arc Warden&lt;/strong&gt; — The Primordial Fragment
&lt;/h3&gt;

&lt;p&gt;Flux plasma meets magnetic fields. Teal, indigo, and runic gold scattered across a cosmic void. Like coding inside an electromagnetic discharge.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Dragon Knight&lt;/strong&gt; — Davion
&lt;/h3&gt;

&lt;p&gt;The widest hue separation of them all. Because Elder Dragon Form is &lt;em&gt;literally four dragons&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Green Dragon → strings
&lt;/li&gt;
&lt;li&gt;Red Dragon → errors &amp;amp; exceptions&lt;/li&gt;
&lt;li&gt;Blue Dragon → functions&lt;/li&gt;
&lt;li&gt;Black Dragon → keywords&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plus Davion's steel plate and gold trim. It's pure visual separation.&lt;/p&gt;




&lt;h2&gt;
  
  
  This Isn't Just Pretty Colors
&lt;/h2&gt;

&lt;p&gt;Every theme ships with measured numbers. Yes, &lt;em&gt;actual math&lt;/em&gt;. Each color has its contrast ratio printed inline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;red&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"#e8543c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;-- Red Dragon, Breathe Fire (errors) - 5.2:1&lt;/span&gt;
&lt;span class="n"&gt;green&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"#8ad44a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;-- Green Dragon, Corrosive Breath    - 10.4:1&lt;/span&gt;
&lt;span class="n"&gt;cyan&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"#5fd0c8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;-- Frost breath (types)              - 10.2:1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What this means:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Comments and syntax clear WCAG AA (≥4.5:1 contrast)&lt;/li&gt;
&lt;li&gt;✅ Tokens that appear together are separated by &lt;em&gt;hue&lt;/em&gt;, not just brightness&lt;/li&gt;
&lt;li&gt;✅ Three distinct background levels so visual selections don't vanish on the cursor line&lt;/li&gt;
&lt;li&gt;✅ Every color is defined once; no hardcoded hex values floating around&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I tested these during real coding sessions, not just in swatch strips. Colors that look striking alone often turn unreadable in a 200-line function.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Gets Themed?
&lt;/h2&gt;

&lt;p&gt;Everything that matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tree-sitter&lt;/strong&gt; (full &lt;code&gt;@&lt;/code&gt; capture set, including Markdown)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LSP&lt;/strong&gt; (diagnostics, underlines, signature help)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diffs &amp;amp; git&lt;/strong&gt; (gitcommit, diffs)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminal&lt;/strong&gt; (all 16 ANSI slots, mapped per hero)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration plugins&lt;/strong&gt;: Telescope, which-key, nvim-notify, gitsigns, indent-blankline, nvim-dap-ui, Noice&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Installation (30 Seconds)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  lazy.nvim
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"electromidz/necrophos.nvim"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"necrophos"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;lazy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;priority&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"necrophos"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="n"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"dragon_knight"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="n"&gt;transparent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  packer.nvim / vim-plug
&lt;/h3&gt;

&lt;p&gt;Just as quick. Full install instructions on GitHub.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Keymap That Changes Everything
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keymap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;leader&amp;gt;ut"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;cmd&amp;gt;NecrophosToggleTheme&amp;lt;cr&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;desc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Next hero"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can cycle through all eight heroes while you code. Switch themes mid-session. Match your Dota mood.&lt;/p&gt;

&lt;p&gt;Or use direct commands: &lt;code&gt;:NecrophosDragonKnight&lt;/code&gt;, &lt;code&gt;:NecrophosLich&lt;/code&gt;, etc.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Developers spend &lt;em&gt;hours&lt;/em&gt; staring at code. Hours. Your colorscheme isn't just decoration — it's part of your mental space. It affects readability, eye strain, and honestly? How much you enjoy being in your editor.&lt;/p&gt;

&lt;p&gt;I built necrophos because I wanted to work in a world that felt &lt;em&gt;specific&lt;/em&gt;. Not generic. Not auto-generated from a design system. Real hero colors, carefully adjusted to be readable, with reasoning you can audit yourself.&lt;/p&gt;

&lt;p&gt;And because Dota 2 has some of the most beautifully designed hero kits in any game — why not let that design extend into your workspace?&lt;/p&gt;




&lt;h2&gt;
  
  
  Give It a Try
&lt;/h2&gt;

&lt;p&gt;It takes 30 seconds to install. If you love:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dota 2&lt;/strong&gt; (obviously)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Neovim&lt;/strong&gt; and caring about your tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Color theory&lt;/strong&gt; and readable code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attention to detail&lt;/strong&gt; in design&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then open your package manager and grab &lt;a href="https://github.com/electromidz/necrophos.nvim" rel="noopener noreferrer"&gt;&lt;strong&gt;necrophos.nvim&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Give it a star on GitHub. Try a few different heroes. Find the one that feels like home.&lt;/p&gt;

&lt;p&gt;Because your editor should feel like &lt;em&gt;your&lt;/em&gt; world, not just a default dark background with random colors.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Code is Yours
&lt;/h2&gt;

&lt;p&gt;It's MIT licensed. Fork it, extend it, add your own heroes. Each theme is self-contained in Lua — straightforward to read, easy to modify.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/electromidz/necrophos.nvim" rel="noopener noreferrer"&gt;electromidz/necrophos.nvim&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pick your hero. Ship your code.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What's your favorite Dota 2 hero? Which theme do you want to see next? Drop a comment or open an issue on GitHub.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>vim</category>
      <category>dota2</category>
      <category>neovim</category>
      <category>themes</category>
    </item>
  </channel>
</rss>
