auto-dark-mode.nvim

March 9, 2025 ยท View on GitHub

A Neovim plugin for macOS, Linux, and Windows that automatically changes the editor appearance based on system settings.

macOS demo
Linux demo
Linux demo
Windows demo
Windows demo

๐Ÿ“‹ Requirements

Your operating system needs to be:

Notes for WSL

To query the appearance of the Windows host system, two options must be enabled in /etc/wsl.conf:

[automount]
enabled = true

[interop]
enabled = true

See the Microsoft docs for more information about WSL settings.

๐Ÿ“ฆ Installation

Install the plugin with your preferred package manager:

lazy.nvim

-- Lua
{
  "f-person/auto-dark-mode.nvim",
  opts = {
    -- your configuration comes here
    -- or leave it empty to use the default settings
    -- refer to the configuration section below
  }
}

vim-plug

Plug 'f-person/auto-dark-mode.nvim'

โš™๏ธ Configuration

auto-dark-mode comes with the following defaults:

{
    set_dark_mode = function()
        vim.api.nvim_set_option_value("background", "dark", {})
    end,
    set_light_mode = function()
        vim.api.nvim_set_option_value("background", "light", {})
    end,
    update_interval = 3000,
    fallback = "dark"
}

set_dark_mode and set_light_mode are the hooks called when the system appearance changes. By default, they change the background option, overriding the function allows for further customization.

update_interval is how frequently the system appearance is checked, in milliseconds. The value needs to be higher than the amount of milliseconds it takes to query your system for the dark mode state. Otherwise, you risk freezing neovim on shutdown.

fallback specifies the appearance ("dark" | "light") to use when the auto-detection fails. This can be particularly useful to specify a default version when remotely connecting via SSH, or when using neovim on a tty.

๐Ÿš€ Usage

Disabling at runtime

You can disable auto-dark-mode.nvim at runtime via lua require('auto-dark-mode').disable().

๐Ÿ’– Contributors

๐Ÿ‘ฉโ€๐ŸŽค Special thanks to @nekowinston for maintaining the plugin ๐Ÿ‘ฉโ€๐ŸŽค