Skip to content

Customization

Scrimas edited this page Sep 15, 2026 · 7 revisions

Customization

Customization is one of the core ideas behind ii-p3drovfx. You shouldn't need to edit QML to make your desktop yours — the graphical Settings app exposes a huge part of the shell, from colors and fonts down to how fast animations run and what shape your avatar is.

This page covers the appearance and theming systems: Material You colors, wallpaper theming, typography, rounding, motion, themed icons, transparency, presets and profiles. The big surfaces each have their own dedicated page — Bar & Dynamic Island, Sidebar Dashboard, Desktop Widgets, Wallpaper System — so here we'll focus on what makes everything change at once.


Re-theme your desktop in two minutes

  1. Ctrl + Super + T — pick a wallpaper. The Material palette regenerates from it and the whole shell follows.
  2. Ctrl + Super + Shift + D — flip between light and dark mode.
  3. Open Settings (Super + I) → Colors & Themes — change the palette style (vibrant, expressive, monochrome…) or override the accent color if the generated one isn't quite it.
  4. Still in Settings: drag the system rounding slider and the animation speed multiplier until it feels right.
  5. Happy with the result? Settings → Presets → Save — now you can always come back to it (or export it to share).

Everything below is the detail behind those five steps.


Where your settings live

Almost every preference persists to one file:

~/.config/illogical-impulse/config.json

The Settings app writes to it through the shell's Config system, so changes apply live and survive restarts. Not every option has a UI control — experimental and freshly-added features sometimes exist only in the file — so manual editing remains a legitimate power-user tool. See Configuration Reference for the full map (and for what happens if the file ever gets malformed).


Material You, everywhere

ii-p3drovfx is built on Material 3 / Material You Expressive. Components don't pick their own colors; they derive them from shared Material tokens — primary, secondary, tertiary, surface, containers, error, layer surfaces. That's the trick that lets the whole shell re-theme itself in one sweep: change the palette, and the bar, sidebars, widgets, popups and Settings all follow.

Colors from your wallpaper

The centerpiece is wallpaper-based theming (Settings → Colors & Themes), powered by Matugen. Pick a wallpaper, get a palette. You can shape the result:

  • Palette style — Matugen scheme variants like tonal spot, vibrant, expressive, content, fidelity, intense, neutral, monochrome, rainbow, fruit salad, or auto
  • Accent color — override the derived accent with one of your own (the color picker can grab one straight off your screen)
  • Theming targets — apply the generated scheme to the shell & utilities, Qt applications, and your terminal, each toggleable. Terminal generation has its own fine-tuning knobs (harmony, foreground boost, forced dark mode).

Some palette changes surface a Restart Shell action when a full reload is needed to apply everything.

Two color engines

Color generation itself is pluggable: the original ii-vynx pipeline, or the fork's alternative pipeline. You can switch engines from Settings without touching any scripts, and Presets remember which engine they were saved with.

Light & dark mode

Switch manually, or let Automatic Dark Mode run on a daily schedule (start/end times). Pair it with a separate Light Mode wallpaper and the shell swaps both palette and background on schedule — your normal wallpaper becomes the dark one, and the two can be swapped from Settings at any time. There's a separate lockscreen wallpaper too, with its own Material color handling; see Wallpaper System.


Display comfort

  • Night Light — manual or scheduled, with configurable color temperature. Manual overrides can persist never, until reboot/logout, or always — your call whether a late-night toggle should still be active tomorrow.
  • Anti-Flashbang — a light filter that softens sudden bright content on a dark desktop. Your retinas will thank you.
  • Keyboard backlight auto-off — switches the keyboard backlight off after a configurable idle period and restores the previous level on the next keypress. Off by default (it touches hardware state, so it waits to be asked).

OpenRGB

Your Material palette doesn't have to stop at the screen edge. With OpenRGB integration enabled, Settings queries your OpenRGB devices, lists them in the shell, and lets you enable each one individually for color sync — with apply-on-startup, fade duration and interpolation controls. OpenRGB itself must be installed and reachable.


Shape and motion

  • System rounding — one global corner radius slider (0–48 px) that reshapes most of the shell at once, since components share Appearance.rounding tokens. Setting it to 0 enables sharp mode, which can also zero Hyprland's window rounding to match.
  • Animation speed — a global multiplier from 0.25× (fast) to 2.5× (slow), applied to everything using the shared Appearance motion system. Snappy, stock Material, or leisurely — your choice.
  • App launch animation — applied to newly launched windows: either the scale zoom-in (configurable start size, speed and curve) or a slide with a direction of your choosing (Config.options.appearance.appLaunchAnimation.style / slideDirection). Switching to slide needs an up-to-date hyprland/general.lua.
  • Small touches — colorful scrollbars, scroll animations, and scroll fade masks are individually toggleable.

Typography

Fonts are organized as roles, not one global family:

Role Default Used for
Main Google Sans Flex Most UI: settings, sidebar, clock
Numbers Google Sans Flex Sliders, numeric displays
Titles Google Sans Flex Headings, popup titles
Monospace JetBrainsMono Nerd Font Clipboard metadata, code-ish content
Nerd icons JetBrainsMono Nerd Font Glyph icons
Reading Readex Pro Longer text (e.g. the cookie clock quote)
Expressive Space Grotesk Desktop widgets, overview numbers

Enable custom fonts and replace any role independently. Variable fonts that support it (like Google Sans Flex) can use the full roundness variation for that extra-soft look.


Themed icons

An experimental favorite: ii-p3drovfx can take a base icon theme (e.g. Papirus), recolor it with your generated Material palette, and apply the result system-wide. Pick the base theme from those detected on your system, regenerate from Settings, and optionally auto-restart Quickshell when the icon theme changes. There's also an icon shape mask option (circle and other Material shapes) for a uniform adaptive-icon look.


Transparency, blur, gaps and borders

Under Settings → Windows:

  • Transparency — a master toggle, plus automatic mode that derives transparency from the active wallpaper colors, or manual background/content transparency values. Popup transparency is separate. Blur size and ignore-alpha are adjustable — and yes, heavy blur costs GPU and battery.
  • Advanced blur options — Hyprland's own blur knobs without leaving Settings: blur passes, noise, contrast, brightness and vibrancy; keep blur strength when windows fade, optimize blur rendering, X-ray blur for floating windows, blur behind special workspaces; and whether application menus and input-method popups blur. Game Mode can still switch blur off temporarily.
  • Gaps — Hyprland gaps_in / gaps_out straight from the shell.
  • Borders — disable entirely, set a width, and pick which Material role the active border follows (primary, secondary, tertiary, primary container or surface) so window decorations always match the palette.

Desktop widget transparency

Settings → Desktop Widgets → Transparent widget backgrounds adjusts the background tint of all desktop widgets at once — palette and album-art colours included — while text and images keep their opacity, with a Widget background opacity slider next to it (Config.options.background.widgets.tintOpacityEnabled, tintOpacity). Newer widgets such as the iOS clock join the widget catalogue with their own settings page.

The Dock

The Dock comes in five styles — floating, islands, hug, dynamic island and transparent (Config.options.dock.dockStyle). It has its own Settings page covering behavior (focused-monitor-only, smart auto-grouping, monitor isolation, hover-to-reveal, pinned-on-startup), content (media widget, weather, notification badges, dividers, overview/pin/trash buttons), and looks (icon tinting, inactive dimming, spacing, corner radii, and a macOS-style magnification with adjustable intensity). Window previews and app-name tooltips are mutually exclusive — pick your favorite. Dock icons can also be cropped with Material shape masks: circle, pill, diamond, pentagon, heart, cookies, clovers, bursts, flower, puffy, pixel circle, bun…


User Profile

Settings → User Profile controls the identity shown in the Dashboard header and elsewhere:

  • Image — your initial, an expressive Material-shape variant, or a custom image (stored in the ii config directory)
  • Avatar shape — circle, cookies (9- or 12-sided), 4-leaf clover, burst, heart, bun
  • Avatar color — a Material role (primary, secondary, tertiary, error), so it stays theme-proof
  • Name & greeting — custom values, with your system username as fallback

The Dashboard header independently chooses what to display: profile image / distro icon / nothing, and username / uptime / custom text / nothing.


Presets: your whole setup, saved

The Preset Manager (Settings → Presets) captures your visual setup — bar layout, sidebar setup, widgets, dock, appearance, everything aesthetic — plus a copy of the active wallpaper when it's a local file. Presets live in ~/.config/illogical-impulse/presets/.

  • Load — layers the preset over your current configuration and re-runs the wallpaper/color pipeline with whichever color engine the preset was saved with. A preset is a complete desktop personality, not just a color theme. It never replaces your whole config: anything tied to this machine — monitor names, save folders, accounts, keys, your profile, your phone, your weather location and units — stays yours.
  • Undo — puts everything back to the snapshot taken just before the last preset was applied.
  • Export — produces a shareable .zip with a sanitized config.json (machine-specific paths handled safely) and the wallpaper when available.
  • Import — accepts .zip or bare .json, sanitized on the way in.
  • Delete — removes the preset and its wallpaper copy.

Before a preset is applied you are shown what it would change — any settings that can run commands, widen assistant permissions or redirect servers — so a shared preset is never a blind swap.

Great for sharing setups — or for keeping a "safe" configuration to come back to after a wild experiment.

Presets are also a store. Publishing one puts it on GitHub under the ii-p3drovfx-preset topic, where everyone else's shell can find and install it — and update it later. → Preset Store

Presets are strictly visual. Applying or exporting one never touches your durable personal data: search aliases and Google Drive backup settings live separately in ~/.local/state/quickshell/states.json, and API credentials (AI keys, Gmail and TickTick OAuth) live in the GNOME Keyring. The export sanitizer additionally strips anything that looks like a token or secret and rewrites machine-specific home paths — so a shared preset can't leak who you are or overwrite what you've set up.


How state is organized (for the curious)

Not everything belongs in config.json. The shell separates three kinds of state:

File Holds Survives restart?
Config.qml → config.json Your preferences: themes, layouts, behavior Yes
Persistent.qml → ~/.local/state/quickshell/states.json Durable user data: remembered tabs, search aliases, Google Drive settings Yes — survives preset changes and config resets
GNOME Keyring API credentials (AI keys, Gmail/TickTick OAuth) Yes — never written to config files
GlobalStates.qml Live runtime state (what's currently open) No — by design

The Settings app itself is modular: 30+ dedicated pages registered in a central page registry, with sub-pages for dense areas, cross-page links (Background → Window Blur, Bar → Dynamic Island…), and a search that jumps to and highlights the matching configuration card.


The philosophy

ii-p3drovfx doesn't expose a thousand disconnected knobs. Major components share common systems — Material colors, typography roles, rounding tokens, motion timing, config persistence, monitor awareness — so one global preference ripples consistently through the entire shell. A new palette re-themes everything. A new radius reshapes everything. And a preset swaps all of it at once.


Related pages

← Back to Home

Clone this wiki locally