Repository navigation
Configuration Reference
Everything the Settings app touches — and a fair amount it doesn't — lives in one JSON file. This page maps the configuration system: where things are stored, how persistence works, what protects your config from corruption, and what every top-level section covers.
- The Settings app (Super + I) — the normal path. Don't browse for the right page; use the search bar: it jumps to and highlights the exact configuration card.
-
Edit the file — open
~/.config/illogical-impulse/config.jsonin any editor; saved changes apply live, no restart needed. This is also the only path for experimental options that don't have a UI control yet. - Ask the AI — with the AI assistant set up, "make my bar transparent" is a valid way to configure your desktop; you get a diff card showing exactly what it changed.
| Path | What it holds |
|---|---|
~/.config/illogical-impulse/config.json |
The config file — every persistent preference (Config.options.*) |
~/.local/state/quickshell/states.json |
Durable state (Persistent.states.*): remembered tabs, layout memory, search aliases, Google Drive settings, tablet home-screen icons — survives preset changes and config resets |
~/.local/state/quickshell/user/notes/ |
The Notes store: index.json plus one document per note, with assets and revisions (the old user/notes.json is migrated once and kept as notes.json.migrated) |
~/.config/illogical-impulse/presets/ |
Saved [[Presets |
~/.config/illogical-impulse/preset-store/ |
Git clones behind installed and published [[store presets |
~/.config/illogical-impulse/workspace_profiles/ |
[[Workspace Profiles |
~/.config/illogical-impulse/widget_extensions.json |
Third-party [[widget extension |
~/.local/state/quickshell/user/generated/ |
Generated Material colors (colors.json, lockscreen colors, backups) — the wallpaper-theming output |
~/.config/quickshell/ii/.env |
API credentials fallback (Gmail, TickTick) — see .env.example; the preferred store is the system keyring
|
~/.config/hypr/custom/*.lua |
Your Hyprland overrides. Settings → Hyprland writes into a fenced block at the end of these — see [[Hyprland Settings |
~/.local/state/quickshell/hyprland-backups/ |
Backups taken before every write to custom/*.lua
|
modules/common/Config.qml is a singleton wrapping the JSON file with Quickshell's JsonAdapter: every option is a typed QML property, changes are debounced (~75 ms) and written back automatically, and edits you make to the file by hand are picked up live. The Settings app is just a pretty way of setting Config.options.<category>.<key>.
Two sibling singletons complete the picture: Persistent.qml (internal state that should survive restarts but isn't a "preference") and GlobalStates.qml (runtime state — what's open right now — deliberately not persisted).
The fork added a proper safety net around the file:
-
Schema versioning — the file carries a
configVersion; when an option changes shape between releases,migrateRaw()upgrades old files in place instead of misreading them. - Type-drift repair — if a value in the file doesn't match the expected type (a string where a number should be), it's repaired from defaults rather than silently mangled.
- Enum validation — options with a fixed set of valid values (corner styles, color engines, privacy modes…) are checked and repaired if out of range.
-
Malformed-JSON recovery — a corrupted file no longer gets silently overwritten with defaults; writes are blocked until you decide, and a health banner in Settings reports what happened:
malformed,recovered,migrated,repaired,unknownKeysorreset.
So yes — hand-editing is safe and survivable.
Config.options.* sections, grouped by theme. (Settings pages in parentheses where the mapping isn't obvious.)
| Key | Covers |
|---|---|
appearance |
Rounding & sharp mode, fonts, transparency/blur, wallpaper theming + Matugen palette, themed icons, color engine, animation multiplier, app-launch animation, OpenRGB, fake screen rounding |
background |
Wallpaper paths (desktop/lock/light-mode), Wallpaper Engine, parallax, transitions, blur, zoom animations, desktop widgets (activeWidgets + per-widget blocks, widgets.tintOpacityEnabled), [[Media Mode |
light |
Dark-mode schedule, Night Light, Anti-Flashbang, keyboard-backlight auto-off |
wallpapers, wallpaperSelector
|
Online wallpaper browser (Wallhaven/Unsplash), selector directories & sorting |
panelFamily |
"ii", "tablet" or "waffle" — the active panel family |
waffles |
Waffle-family options (bar, action center, calendar tweaks) |
tablet |
[[Tablet family |
| Key | Covers |
|---|---|
bar |
Everything Bar: position, sizes, corner/group/background styles, expressive colors, layouts, auto-hide (autoHide.mode), per-widget styles (styles) & options (each widget's colorMode), tooltips/popups, Dynamic Island (floatingNotch, dynamicIsland) |
sidebar |
Dashboard: position, shell mode (sidebarStyle), header, quick toggles (+ Android pages, quickToggles.androidTablet for the tablet family), quick sliders, corner-open, dashboardEntranceAnimations, bottomGroup.notesTab, AI/translator/booru sidebar modules |
notes |
The Notes app: enable, defaultPaper, paperStrength, autosaveDelay
|
todo |
Task provider (local, ticktick, googleTasks), refresh interval, Google Tasks list |
dock, dockToPanel
|
Dock behavior, content, appearance, icon shapes |
overview |
Overview: scaling, rows/columns, animations (animationStyle incl. none), previews, scrolling style, useAppDrawer
|
search, launcher
|
Launcher: prefixes (prefix.*, incl. fileContent, typingTest, speedTest, ai), search modules and tools (modules.*), the [[typing test |
cheatsheet |
Cheat Sheet tabs (keybinds, timetable, periodic table, amino acids, commands, Gmail) |
overlay, osd, osk
|
Widget overlay, on-screen display, on-screen keyboard (+ auto-show) |
notifications |
Popup position/timeout/zoom, auto-DND on fullscreen, monitor pinning |
lock |
Lock screen effects, security, notifications (privacy modes, filters) |
crosshair, oledSaver, conflictKiller, windows, hacks
|
Odds and ends: gaming crosshair, OLED blackout, conflict dialogs, titlebars, workaround delays |
| Key | Covers |
|---|---|
audio, sounds, soundcore
|
Volume protection, UI sound events (+ custom sounds), Soundcore earbuds |
battery, idle
|
Thresholds, auto-suspend; Keep-awake durations & persistence |
networking, vpn, tailscale, dnsOverTls
|
User agent; VPN providers; Tailscale; DNS-over-TLS resolver |
localsend, googleDrive
|
LocalSend sharing; Google Drive integration |
phone |
KDE Connect, contacts, scrcpy (+ App Mode), webcam, microphone |
resources, appStats
|
Resource-monitor polling; per-app usage & energy sampling |
modes |
Modes & Routines: the definitions themselves plus banner, pills, grace period and game detection — see Modes & Routines |
hyprland, interactions, tiling
|
Hyprland options managed by the shell; scrolling behavior & touch gestures; Tiling Assistant zones/detection/co-resize |
screenRecord, screenSnip, regionSelector
|
Recorder backend & encoding; snip save path; selection hints, Circle-to-Search, annotation editor |
media, lyricsService, musicRecognition, mediaDownloader
|
Player filtering/priority, lyrics, songrec, yt-dlp downloader |
ai |
AI assistant configuration ([[AI Integration |
apps |
Default applications used by shell actions (terminal, task manager, update command…) |
policies |
Which left-sidebar modules exist (AI / weeb / wallpapers / translator / player / phone) |
time, calendar, language
|
Clock/date formats, Pomodoro & alarms; calendar locale; UI language & translator |
updates, update, settingsApp, tray
|
Package update checking; fork updates (update.autoCheckInterval, update.aiSummary, aiSummaryMinCommits); settings-app behavior; tray options |
userProfile |
Avatar, name, greeting |
workSafety |
The public-network wallpaper/clipboard guard |
The definitive, always-current reference is
modules/common/Config.qmlitself — every property is declared there with its default and, usually, a comment. When Settings doesn't expose something yet, it still works from the file.
30+ pages, registered in modules/common/SettingsPageRegistry.qml: Colors & Themes, Bar, Background, Interface & Fonts (which also holds the Shell family choice), Presets, Sidebars, Dock, Workspaces, Overview, Desktop Widgets, Dynamic Island, Overlays & OSD (the Notes app switch lives here), Modes & Routines, Screenshots & Recording, Notifications, Launcher, Dictation, Cheat Sheet, Windows, Window Tiling, Displays, Hyprland, Touch & Gestures, Tablet (listed only while the tablet family runs; Dock, Dynamic Island, Modes & Routines, Cheat Sheet and Window Tiling are hidden there), Media & Music, Language & Time, Weather, AI Assistant, Accounts & Backup, Sound & Alerts, Power & Battery, App Usage, Network, Devices & Phone, Privacy & Content, Lock Screen, About & Updates. User Profile (opened from the profile button in the Settings window) and Clipboard (opened from Privacy & Content) are hidden pages outside the sidebar.
The Settings search indexes all of it and jumps straight to (and highlights) the matching card — usually faster than remembering which page a toggle lives on.
API keys and tokens (TickTick, Gmail, AI providers) belong in the system keyring, managed through the shell's keyring integration — with ii/.env as a plain-text fallback (see .env.example for the expected keys). Nothing secret is ever written into config.json, so your presets and exports stay shareable.
- Customization — the guided tour of the main options
-
Hyprland Settings — the compositor's own settings, which live in Lua rather than in
config.json - Architecture — how Config fits into the shell
- Known Issues
- Settings App — where each key lives in the UI
- Backup and Restore