A Neovim plugin for macOS, Linux, and Windows that automatically changes the editor appearance based on system settings.
Your operating system needs to be:
- a Linux desktop environment that implements
org.freedesktop.appearance.color-scheme
, such as - macOS Mojave or newer
- Windows 10 or newer (or WSL)
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.
Install the plugin with your preferred package manager:
-- 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
}
}
Plug 'f-person/auto-dark-mode.nvim'
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.
You can disable auto-dark-mode.nvim
at runtime via lua require('auto-dark-mode').disable()
.
👩🎤 Special thanks to @nekowinston for maintaining the plugin 👩🎤