doc/devdocs/modules/lightswitch.md
Public Overview – Microsoft Learn
The Light Switch module lets users automatically transition between light and dark mode using a timed schedule or a keyboard shortcut.
Set custom times to start and stop dark mode.
Use geolocation to determine local sunrise and sunset times.
Apply offsets in sunrise mode (e.g., 15 minutes before sunset).
Quickly toggle between modes with a keyboard shortcut (Ctrl+Shift+Win+D by default).
Choose whether theme changes apply to:
Shortcut/Hotkey
Listens for a hotkey event. Calling onHotkey() flips the theme flags.
Note: Using the shortcut overrides the current schedule until the next transition event.
LightSwitchService.cpp is the heart beat of the module. Controls ticking every minute and depending on user actions (manual override, settings changing, etc) triggers the state manager to perform the corresponding operation.
LightSwitchStateManager.cpp handles updating the state based on the signals sent by LightSwitchService.
SettingsXAML/LightSwitch Provides the settings UI for configuring schedules, syncing location, and customizing shortcuts.
Settings.UI/ViewModels/LightSwitchViewModel.cs Handles updates to the settings file and communicates changes to the front end.
modules/LightSwitch/Tests
Contains UI tests that verify interactions between the settings UI, system state, and settings.json.
User configures settings in the UI (default: manual mode, light mode from 06:00–18:00).
Every minute, the service checks the time.
At midnight, when in Sunrise to Sunset mode, the service updates daily sunrise and sunset times.
If the machine was asleep during a scheduled event, the service applies the correct settings at the next check.
The module’s settings are exposed in the PowerToys Settings UI. Options include:
Clone the repo:
git clone https://github.com/microsoft/PowerToys.git
Initialize submodules:
git submodule update --init --recursive
Build the solution:
msbuild -restore -p:RestorePackagesConfig=true -p:Platform=ARM64 -m PowerToys.slnx
Note: This may take some time.
Set runner as the startup project and press F5.
Enable Light Switch in PowerToys Settings.
To debug the service:
Ctrl+Alt+P or go to Debug > Attach to Process.LightSwitchService.exe and click Attach.To debug the Settings UI:
PowerToys.Settings and press F5.PowerToys.Settings.exe to the debugger while runner is running to test the full flow with breakpoints.