|
| 1 | +# Look and Feel |
| 2 | + |
| 3 | +AiderDesk provides extensive customization options for themes and fonts, allowing you to personalize the application's appearance to match your preferences and workflow. |
| 4 | + |
| 5 | +## Overview |
| 6 | + |
| 7 | +The Look and Feel settings in AiderDesk are built on a flexible CSS custom properties system that enables: |
| 8 | + |
| 9 | +- **Dynamic theme switching** without application restart |
| 10 | +- **Comprehensive color theming** covering all UI elements |
| 11 | +- **Font customization** with real-time preview |
| 12 | +- **Consistent design language** across all components |
| 13 | + |
| 14 | +## Themes |
| 15 | + |
| 16 | +### How Themes Work |
| 17 | + |
| 18 | +AiderDesk themes are implemented using CSS custom properties (variables) that define the complete color palette for the application. Each theme is a self-contained SCSS file that defines: |
| 19 | + |
| 20 | +- **Background colors** (primary, secondary, tertiary, etc.) |
| 21 | +- **Text colors** (primary, secondary, muted, etc.) |
| 22 | +- **Border colors** and accents |
| 23 | +- **Interactive states** (buttons, inputs, selections) |
| 24 | +- **Status colors** (success, warning, error, info) |
| 25 | +- **Specialized colors** for code blocks, diff viewers, and agent indicators |
| 26 | + |
| 27 | +When you select a theme, AiderDesk applies the corresponding CSS class to the document body, which activates all the color variables defined in that theme. |
| 28 | + |
| 29 | +### Available Themes |
| 30 | + |
| 31 | +AiderDesk includes 14 carefully crafted themes: |
| 32 | + |
| 33 | +#### Dark Themes |
| 34 | +- **Dark** - The default theme with balanced contrast and modern appearance |
| 35 | +- **Charcoal** - A sophisticated dark gray theme with warm undertones |
| 36 | +- **Midnight** - Deep black theme with high contrast for focused work |
| 37 | +- **Neon** - Vibrant theme inspired by cyberpunk aesthetics |
| 38 | +- **Neopunk** - Futuristic dark theme with bold accent colors |
| 39 | +- **Ocean** - Deep blue theme reminiscent of ocean depths |
| 40 | + |
| 41 | +#### Light Themes |
| 42 | +- **Light** - Clean, minimal light theme with excellent readability |
| 43 | +- **BW (Black & White)** - High-contrast monochrome theme |
| 44 | +- **Serenity** - Calming light theme with soft, muted colors |
| 45 | +- **Cappuccino** - Warm, coffee-inspired light theme |
| 46 | + |
| 47 | +#### Colorful Themes |
| 48 | +- **Aurora** - Ethereal theme inspired by northern lights |
| 49 | +- **Forest** - Nature-inspired green theme |
| 50 | +- **Lavender** - Purple-themed interface with calming aesthetics |
| 51 | + |
| 52 | +### Switching Themes |
| 53 | + |
| 54 | +1. Open **Settings** from the main menu |
| 55 | +2. Navigate to the **General** section |
| 56 | +3. Under **GUI Settings**, select your preferred theme from the dropdown |
| 57 | +4. The theme applies immediately without restart |
| 58 | + |
| 59 | + |
| 60 | +*Theme selection interface showing available themes* |
| 61 | + |
| 62 | +## Fonts |
| 63 | + |
| 64 | +### How Fonts Work |
| 65 | + |
| 66 | +AiderDesk's font system is built on web fonts with CSS custom properties: |
| 67 | + |
| 68 | +- **Font Files**: All fonts are included as TrueType (.ttf) files |
| 69 | +- **@font-face Declarations**: Each font is properly declared in CSS for cross-browser compatibility |
| 70 | +- **CSS Variables**: Fonts are applied using the `--font-family` custom property |
| 71 | +- **Monospace Fallback**: All fonts include `monospace` as a fallback for consistency |
| 72 | + |
| 73 | +### Available Fonts |
| 74 | + |
| 75 | +AiderDesk includes 19 carefully selected fonts covering various styles: |
| 76 | + |
| 77 | +#### Monospace/Code Fonts |
| 78 | +- **Sono** - The default font, modern and highly readable |
| 79 | +- **JetBrains Mono** - Developer-focused font with ligatures |
| 80 | +- **Roboto Mono** - Clean, neutral monospace font |
| 81 | +- **Source Code Pro** - Adobe's open-source coding font |
| 82 | +- **Space Mono** - Quirky, distinctive monospace font |
| 83 | +- **Ubuntu Mono** - Part of the Ubuntu font family |
| 84 | +- **Fira Code** - Programming font with code ligatures |
| 85 | + |
| 86 | +#### Sans-Serif Fonts |
| 87 | +- **Inter** - Highly readable modern sans-serif |
| 88 | +- **Poppins** - Geometric sans-serif with friendly appearance |
| 89 | +- **Nunito** - Well-balanced sans-serif with rounded terminals |
| 90 | +- **Quicksand** - Light, airy sans-serif font |
| 91 | +- **Space Grotesk** - Modern geometric sans-serif |
| 92 | +- **Google Sans Code** - Google's coding-optimized sans-serif |
| 93 | +- **Sansation** - Clean, professional sans-serif |
| 94 | + |
| 95 | +#### Serif & Display Fonts |
| 96 | +- **Lora** - Elegant serif font suitable for long reading |
| 97 | +- **Playfair Display** - High-contrast serif for headings |
| 98 | +- **Orbitron** - Futuristic display font |
| 99 | +- **Enriqueta** - Classic serif with modern proportions |
| 100 | +- **Silkscreen** - Retro pixel-art style display font |
| 101 | + |
| 102 | +### Switching Fonts |
| 103 | + |
| 104 | +1. Open **Settings** from the main menu |
| 105 | +2. Navigate to the **General** section |
| 106 | +3. Under **GUI Settings**, select your preferred font from the dropdown |
| 107 | +4. The font applies immediately across the entire application |
| 108 | + |
| 109 | + |
| 110 | +*Font selection interface with live preview of each font* |
| 111 | + |
| 112 | +## Contributing: Adding New Themes |
| 113 | + |
| 114 | +### Adding a New Theme |
| 115 | + |
| 116 | +To contribute a new theme to AiderDesk, follow these steps: |
| 117 | + |
| 118 | +#### 1. Create the Theme SCSS File |
| 119 | + |
| 120 | +Create a new file in `src/renderer/src/themes/` following the naming convention: |
| 121 | +```scss |
| 122 | +// src/renderer/src/themes/theme-your-theme-name.scss |
| 123 | +.theme-your-theme-name { |
| 124 | + // Background colors |
| 125 | + --color-bg-primary: #your-primary-bg-color; |
| 126 | + --color-bg-primary-light: #your-light-bg-color; |
| 127 | + --color-bg-primary-light-strong: #your-strong-bg-color; |
| 128 | + --color-bg-secondary: #your-secondary-bg-color; |
| 129 | + --color-bg-secondary-light: #your-secondary-light-bg-color; |
| 130 | + --color-bg-secondary-light-strongest: #your-secondary-strongest-bg-color; |
| 131 | + --color-bg-tertiary: #your-tertiary-bg-color; |
| 132 | + --color-bg-tertiary-emphasis: #your-tertiary-emphasis-color; |
| 133 | + --color-bg-tertiary-strong: #your-tertiary-strong-color; |
| 134 | + // ... continue with all background color variables |
| 135 | + |
| 136 | + // Text colors |
| 137 | + --color-text-primary: #your-primary-text-color; |
| 138 | + --color-text-secondary: #your-secondary-text-color; |
| 139 | + --color-text-tertiary: #your-tertiary-text-color; |
| 140 | + // ... continue with all text color variables |
| 141 | + |
| 142 | + // Border colors |
| 143 | + --color-border-default: #your-default-border-color; |
| 144 | + --color-border-accent: #your-accent-border-color; |
| 145 | + // ... continue with border colors |
| 146 | + |
| 147 | + // Interactive colors |
| 148 | + --color-button-primary: #your-primary-button-color; |
| 149 | + --color-button-primary-text: #your-primary-button-text-color; |
| 150 | + // ... continue with button colors |
| 151 | + |
| 152 | + // Status colors |
| 153 | + --color-success: #your-success-color; |
| 154 | + --color-warning: #your-warning-color; |
| 155 | + --color-error: #your-error-color; |
| 156 | + --color-info: #your-info-color; |
| 157 | + |
| 158 | + // Agent-specific colors |
| 159 | + --color-agent-auto-approve: #your-auto-approve-color; |
| 160 | + --color-agent-aider-tools: #your-aider-tools-color; |
| 161 | + --color-agent-power-tools: #your-power-tools-color; |
| 162 | + --color-agent-todo-tools: #your-todo-tools-color; |
| 163 | + --color-agent-context-files: #your-context-files-color; |
| 164 | + --color-agent-repo-map: #your-repo-map-color; |
| 165 | + // ... continue with agent colors |
| 166 | +} |
| 167 | +``` |
| 168 | + |
| 169 | +#### 2. Import the Theme |
| 170 | + |
| 171 | +Add your theme to the themes import file: |
| 172 | +```scss |
| 173 | +// src/renderer/src/themes/themes.scss |
| 174 | +@use 'theme-your-theme-name.scss'; // Add this line |
| 175 | +``` |
| 176 | + |
| 177 | +#### 3. Update the Theme List |
| 178 | + |
| 179 | +Add your theme to the TypeScript types: |
| 180 | +```typescript |
| 181 | +// src/common/types.ts |
| 182 | +export const THEMES = [ |
| 183 | + 'dark', |
| 184 | + 'light', |
| 185 | + 'charcoal', |
| 186 | + // ... existing themes |
| 187 | + 'your-theme-name', // Add this line |
| 188 | +] as const; |
| 189 | +``` |
| 190 | + |
| 191 | +#### 4. Add Translation |
| 192 | + |
| 193 | +Add your theme name to the translation files: |
| 194 | +```json |
| 195 | +// src/common/locales/en.json |
| 196 | +{ |
| 197 | + "settings": { |
| 198 | + "themeOptions": { |
| 199 | + "your-theme-name": "Your Theme Display Name" |
| 200 | + } |
| 201 | + } |
| 202 | +} |
| 203 | +``` |
| 204 | + |
| 205 | +#### 5. Testing Requirements |
| 206 | + |
| 207 | +Before submitting your theme, ensure it: |
| 208 | + |
| 209 | +- ✅ Provides sufficient contrast for accessibility (WCAG AA standards) |
| 210 | +- ✅ Works well in all major UI components |
| 211 | +- ✅ Maintains readability in both light and dark contexts |
| 212 | +- ✅ Includes all required color variables |
| 213 | +- ✅ Is tested across different screen sizes |
| 214 | +- ✅ Works with all available fonts |
| 215 | + |
| 216 | +### Theme Design Guidelines |
| 217 | + |
| 218 | +- **Contrast Ratio**: Maintain at least 4.5:1 for normal text and 3:1 for large text |
| 219 | +- **Color Harmony**: Use a cohesive color palette with proper relationships |
| 220 | +- **Consistency**: Follow the established color hierarchy and naming conventions |
| 221 | +- **Accessibility**: Ensure color combinations are accessible to colorblind users |
| 222 | +- **Performance**: Use hex colors for optimal performance |
| 223 | + |
| 224 | +## Contributing: Adding New Fonts |
| 225 | + |
| 226 | +### Adding a New Font |
| 227 | + |
| 228 | +To contribute a new font to AiderDesk, follow these steps: |
| 229 | + |
| 230 | +#### 1. Obtain the Font File |
| 231 | + |
| 232 | +- Ensure you have the legal right to distribute the font (open-source license preferred) |
| 233 | +- Obtain the font in TrueType (.ttf) format |
| 234 | +- Verify the font includes all necessary characters and glyphs |
| 235 | + |
| 236 | +#### 2. Add Font File |
| 237 | + |
| 238 | +Place the font file in the fonts directory: |
| 239 | +``` |
| 240 | +src/renderer/src/fonts/YourFontName.ttf |
| 241 | +``` |
| 242 | + |
| 243 | +#### 3. Update Font CSS |
| 244 | + |
| 245 | +Add the font declaration to the fonts CSS file: |
| 246 | +```css |
| 247 | +/* src/renderer/src/fonts.css */ |
| 248 | +@font-face { |
| 249 | + font-family: 'YourFontName'; |
| 250 | + src: url('./fonts/YourFontName.ttf') format('truetype'); |
| 251 | + font-weight: 400; |
| 252 | + font-style: normal; |
| 253 | +} |
| 254 | +``` |
| 255 | + |
| 256 | +#### 4. Update the Font List |
| 257 | + |
| 258 | +Add your font to the TypeScript types: |
| 259 | +```typescript |
| 260 | +// src/common/types.ts |
| 261 | +export const FONTS = [ |
| 262 | + 'Sono', |
| 263 | + 'Poppins', |
| 264 | + // ... existing fonts |
| 265 | + 'YourFontName', // Add this line |
| 266 | +] as const; |
| 267 | +``` |
| 268 | + |
| 269 | +#### 5. Add Translation |
| 270 | + |
| 271 | +Add your font name to the translation files: |
| 272 | +```json |
| 273 | +// src/common/locales/en.json |
| 274 | +{ |
| 275 | + "settings": { |
| 276 | + "fontOptions": { |
| 277 | + "yourFontName": "Your Font Display Name" |
| 278 | + } |
| 279 | + } |
| 280 | +} |
| 281 | +``` |
| 282 | + |
| 283 | +#### 6. Testing Requirements |
| 284 | + |
| 285 | +Before submitting your font, ensure it: |
| 286 | + |
| 287 | +- ✅ Renders correctly across all operating systems |
| 288 | +- ✅ Maintains readability at various sizes |
| 289 | +- ✅ Works well with all available themes |
| 290 | +- ✅ Includes proper character coverage for your target languages |
| 291 | +- ✅ Has reasonable file size (< 1MB preferred) |
| 292 | +- ✅ Is properly licensed for open-source distribution |
| 293 | + |
| 294 | +### Font Selection Guidelines |
| 295 | + |
| 296 | +- **Readability**: Prioritize fonts that are easy to read for long periods |
| 297 | +- **Character Support**: Ensure coverage of common programming characters and symbols |
| 298 | +- **Performance**: Consider font file size and loading impact |
| 299 | +- **Licensing**: Prefer fonts with permissive open-source licenses (MIT, OFL, Apache) |
| 300 | +- **Variety**: Add fonts that bring unique styles and use cases |
| 301 | + |
| 302 | +### Recommended Font Sources |
| 303 | + |
| 304 | +- **Google Fonts**: Large collection of free, open-source fonts |
| 305 | +- **Adobe Fonts**: High-quality fonts (check licensing) |
| 306 | +- **Font Squirrel**: Curated collection of free fonts |
| 307 | +- **GitHub**: Many open-source font projects available |
| 308 | + |
| 309 | +## Troubleshooting |
| 310 | + |
| 311 | +### Theme Issues |
| 312 | + |
| 313 | +If you encounter issues with themes: |
| 314 | + |
| 315 | +1. **Theme not applying**: Check that the theme file is properly imported in `themes.scss` |
| 316 | +2. **Colors not working**: Verify all required CSS variables are defined |
| 317 | +3. **Contrast issues**: Use browser dev tools to check contrast ratios |
| 318 | +4. **Missing elements**: Ensure all color variables from the reference theme are included |
| 319 | + |
| 320 | +### Font Issues |
| 321 | + |
| 322 | +If you encounter issues with fonts: |
| 323 | + |
| 324 | +1. **Font not loading**: Check the font file path in the `@font-face` declaration |
| 325 | +2. **Font not appearing**: Verify the font name matches exactly in CSS and TypeScript |
| 326 | +3. **Rendering issues**: Test the font across different browsers and operating systems |
| 327 | +4. **Licensing concerns**: Double-check the font's license allows for distribution |
| 328 | + |
| 329 | +## Best Practices |
| 330 | + |
| 331 | +### For Users |
| 332 | + |
| 333 | +- **Consistency**: Choose a theme and font combination that you'll use consistently |
| 334 | +- **Accessibility**: Prioritize readability and contrast over aesthetics |
| 335 | +- **Environment**: Consider your lighting conditions when choosing between light and dark themes |
| 336 | +- **Performance**: Lighter themes may consume slightly less battery on OLED displays |
| 337 | + |
| 338 | +### For Contributors |
| 339 | + |
| 340 | +- **Testing**: Thoroughly test your contributions across different environments |
| 341 | +- **Documentation**: Provide clear descriptions of your theme/font design philosophy |
| 342 | +- **Maintenance**: Be prepared to maintain your contribution over time |
| 343 | +- **Community**: Engage with user feedback and make improvements based on usage |
| 344 | + |
| 345 | +By following these guidelines, you can help make AiderDesk more customizable and enjoyable for everyone in the community. |
0 commit comments