|General Commands Manual
darkman - daemon for dark-mode and light-mode transitions on Unix-like desktops
darkman set [light|dark]
darkman runs in the background and turns on dark mode at sundown, and turns it off again at sunrise. darkman is not designed to be used interactively: it's designed to be set up once, and run in the background.
It is, however, possible to trigger manual transitions and even disable automatic transitions entirely.
The open source desktop ecosystem is quite heterogeneous and switching between dark/light mode on different applications requires different mechanism and techniques.
Darkman seeks to implement the more widely supported standards, while leaving room for users to hook in custom scripts for other applications.
For additional application support, custom executables (including simple shell scripts) can be placed in the following two directories:
Scripts need to have an executable bit set, or will not be executed.
For additional sample scripts (and discussion on how to integrate different applications) see the project website:
Darkman implements the FreeDesktop dark mode standard. Applications using this API should switch to dark/light mode based on darkman's current preference. This standard was originally pushed by the GNOME and Elementary teams, and is currently supported by KDE, Firefox and many other projects. You should expect applications from those environment to support it, amongst others.
As for xdg-desktop-portal version 1.17.0, portals can be configured with per-user configuration portals.conf(5). To force the usage of darkman for dark/light mode setting, use something like the following:
For custom integrations, darkman exposes a D-Bus API which allows querying and controlling the current mode. The get, set and toggle commands all use this API. Usage of this API is also the recommended approach when writing custom tools (e.g.: switching the current mode based on the input from a light sensor).
For Emacs users, a third party package exists to integrate darkman with Emacs:
darkman will automatically determine the system's location using geoclue. Geoclue's reliability varies depending on distribution and desktop environment, and it will often not work without a geoclue agent running.
If using geoclue is not an option, the location may be specified explicitly via a configuration file.
A configuration file and all settings are optional. Configuration is read from ~/.config/darkman/config.yaml, and has the following format:
lat: 52.3 lng: 4.8 dbusserver: true
The following settings are available:
The following environment variables are also read and will override the configuration file:
Darkman will trigger a darkmode/lightmode transition at sundown in the current location. When a web browser applies this transition at the same time, open websites can use this information to extrapolate some information about the current location.
For issues and general development inquiries, see the project home currently hosted at GitLab:
To confirm which value is relayed via the xdg-desktop-portal use:
gdbus call --session \
--dest org.freedesktop.portal.Desktop \
--object-path /org/freedesktop/portal/desktop \
--method org.freedesktop.portal.Settings.ReadOne \
Developed by Hugo O. Barrera <firstname.lastname@example.org>, with invaluable contributions from the community.
darkman is an open source project licensed under the ISC licence and developed for anyone to use freely. If you would like to sponsor this project, see: