Step-by-step guide to add a new UI theme to AiderDesk (SCSS + CSS variables + types + i18n).
Installation
Details
Usage
After installing, this skill will be available to your AI coding assistant.
Verify installation:
skills listSkill Instructions
name: theme-factory description: Step-by-step guide to add a new UI theme to AiderDesk (SCSS + CSS variables + types + i18n).
Theme Factory
Use this skill when you need to add a new theme to AiderDesk.
AiderDesk themes are implemented as SCSS files that define a .theme-<name> class with a full set of CSS custom properties (variables). The UI uses Tailwind utilities mapped to these CSS variables.
Where themes live
- Theme files:
src/renderer/src/themes/theme-<name>.scss - Theme aggregator (imports all themes):
src/renderer/src/themes/themes.scss - Theme type registry:
src/common/types.ts(THEMES) - Theme selector UI:
src/renderer/src/components/settings/GeneralSettings.tsx - Theme application:
src/renderer/src/App.tsx(appliestheme-<name>class todocument.body) - Theme display names (i18n):
src/common/locales/en.json(themeOptions.<name>)src/common/locales/zh.json(themeOptions.<name>)
Definition format
Each theme is a class:
- Class name:
.theme-<name> - Contents: a complete set of
--color-*variables.
Best workflow: copy an existing theme (e.g. theme-dark.scss) and adjust values.
Checklist: add a new theme
1) Choose a theme name
Pick a kebab-case name, e.g. sunset, nord, paper.
You will reference it consistently in:
- CSS class:
.theme-<name> - filename:
theme-<name>.scss THEMESarray value:'<name>'- i18n key:
themeOptions.<name>
2) Create the theme SCSS file
Create:
src/renderer/src/themes/theme-<name>.scss
Start by copying a similar theme (dark -> dark-ish, light -> light-ish), then update the hex colors.
Minimum requirement: define all variables expected by the app.
Practical way to ensure completeness:
- Compare with
src/renderer/src/themes/theme-dark.scss(or another full theme) - Keep variable names identical; only change values.
3) Register the theme in the theme aggregator
Edit:
src/renderer/src/themes/themes.scss
Add:
@use 'theme-<name>.scss';
If the file is not imported here, it won’t be included in the built CSS.
4) Register the theme in TypeScript types
Edit:
src/common/types.ts
Add '<name>' to the exported THEMES array.
This makes the theme selectable and type-safe.
5) Add i18n display names
Edit:
src/common/locales/en.jsonsrc/common/locales/zh.json
Add entries under themeOptions:
{
"themeOptions": {
"<name>": "Your Theme Name"
}
}
6) Verify in the UI
- Open Settings → General → Theme
- Confirm the new theme appears in the dropdown
- Switch to it and confirm the whole UI updates (no restart)
7) Quality checks
- Contrast: confirm text is readable on all backgrounds (aim for WCAG AA)
- Verify key surfaces:
- main background panels
- inputs
- buttons
- borders/dividers
- diff viewer colors
- code blocks
- muted/secondary text
- Check both states:
- normal
- hover/active
Troubleshooting
-
Theme not showing up:
- missing
@useimport insrc/renderer/src/themes/themes.scss - missing entry in
THEMESarray insrc/common/types.ts - typo mismatch between
.theme-<name>and the<name>stored in settings
- missing
-
Some UI areas look “unstyled”:
- you likely missed one or more
--color-*variables; compare against a known-good theme and fill in the missing ones.
- you likely missed one or more
More by hotovo
View allCreate AiderDesk agent profiles via interactive Q&A.
Comprehensive guide for writing unit tests, integration tests, and component tests in AiderDesk using Vitest. Use when creating new tests, configuring mocks, or organizing test files.
Design and create Agent Skills using progressive disclosure principles. Use when building new skills, planning skill architecture, or writing skill content.