-
-
Notifications
You must be signed in to change notification settings - Fork 62
PANEL_FAMILIES
iNiR has two completely separate UI families that share the same services and config backend. Switch between them at runtime with Super+Shift+W.
The default family. Material Design language with five style variants that form a spectrum from structured to expressive.
| Style | Character |
|---|---|
| material | Clean Google-standard Material 3. Solid surfaces, standard elevation. The baseline. |
| cards | Material variant with a card-based layout. Same colors, different structure. |
| aurora | Professional glass transparency. Blur-backed surfaces, frosted panels. |
| inir | TUI-inspired elegance. Border and text hierarchy, muted tones, monospace accents. |
| angel | The flagship. Neo-brutalism meets glass. Offset shadows, partial borders, inset glow, warm golden palette. |
Style dispatch priority: angel > inir > aurora > material. This means if you're checking which style to apply, check angel first:
color: Appearance.angelEverywhere ? Appearance.angel.colGlassCard
: Appearance.inirEverywhere ? Appearance.inir.colLayer1
: Appearance.auroraEverywhere ? Appearance.aurora.colSubSurface
: Appearance.colors.colLayer1- Bar: top of screen (horizontal), or left/right edge (vertical)
- Sidebars: left sidebar (AI chat, YT Music, widgets), right sidebar (toggles, calendar, tools)
- Dock: application dock (any of 4 edges)
-
Overview: workspace overview with app launcher and search (
Super+Space) - Settings: overlay panel rendered on top of the current desktop
All ii components use Appearance.*:
color: Appearance.colors.colPrimary
radius: Appearance.rounding.normal
font.family: Appearance.font.mainNever hardcode colors, radii, or font sizes. The entire point of the token system is that switching styles, themes, or wallpapers changes everything at once.
ii loads about 25 panels through ShellIiPanels.qml. Some notable ones:
| Panel ID | What it is |
|---|---|
iiBar |
Top bar (horizontal mode) |
iiVerticalBar |
Side bar (vertical mode) |
iiDock |
Application dock |
iiSidebarLeft |
Left sidebar (AI, music, widgets) |
iiSidebarRight |
Right sidebar (toggles, calendar, system) |
iiOverview |
Workspace overview + app search |
iiBackground |
Desktop wallpaper layer |
iiMediaControls |
MPRIS media player popup |
iiClipboard |
Clipboard history browser |
Windows 11 Fluent Design. Not "ii with a different skin" but a completely separate family with its own design language, interaction patterns, and density.
- Taskbar: bottom of screen (Windows 11 style)
- Start Menu: app grid with search, pinned apps, recent files
- Action Center: quick settings (WiFi, Bluetooth, volume, brightness, toggles)
- Notification Center: notification list with calendar
- Settings: standalone window (separate from ii settings)
Waffle uses Looks.* exclusively. Never Appearance.* in waffle code:
color: Looks.colors.accent
radius: Looks.rounding.medium
font.family: Looks.font.fontFamily| Aspect | ii | waffle |
|---|---|---|
| Density | Spacious Material spacing | Dense Win11 information density |
| Motion | Organic, 200-500ms durations | Snappy and mechanical, 67-250ms |
| Surfaces | Layered elevation (5 layers) | 3-tier chrome (bg0/bg1/bg2) |
| Controls | Material ripple, elevation | Flat with subtle hover reveals |
| Typography | 6 font families, expressive | Single family, pragmatic sizing |
Waffle loads about 22 panels through ShellWafflePanels.qml:
| Panel ID | What it is |
|---|---|
wBar |
Bottom taskbar |
wStartMenu |
Start menu |
wActionCenter |
Quick settings panel |
wNotificationCenter |
Notification center + calendar |
wTaskView |
Task view (workspace overview) |
wWidgets |
Desktop widgets panel |
wBackground |
Desktop wallpaper layer |
Some panels are shared between families (cheatsheet, region selector, on-screen keyboard, screen corners) and keep their ii prefix even when running under waffle.
Super+Shift+W triggers a family transition with an animated overlay. The transition:
- Overlay fades in
- Current family panels unload
-
panelFamilyconfig key changes - New family panels load
- Overlay fades out
The transition is handled by FamilyTransitionOverlay.qml. Config persists the choice, so the next startup uses whichever family you last selected.
Both families use the same loading system. Each panel is a PanelLoader:
PanelLoader {
identifier: "iiBar"
extraCondition: !(Config.options?.bar?.vertical ?? false)
component: Bar {}
}Three conditions must all be true for a panel to load:
-
Config.readyis true (config file loaded) -
Identifier in
enabledPanels(user hasn't disabled it) -
extraConditionpasses (panel-specific logic)
Panels are split into immediate (bar, background, OSD) and deferred (sidebars, overview, clipboard). Deferred panels load 500ms after the first frame to keep startup fast.
If you're adding a new panel:
- Create the QML component in the appropriate module directory
- Add a
PanelLoaderentry inShellIiPanels.qmlorShellWafflePanels.qml - Add the identifier to
enabledPanelsdefault indefaults/config.json - If it has settings, add them to the correct Settings UI
If your change affects both families, update both. If your change touches a shared component (notifications, lock screen, polkit), test under both families.