An alternative GNOME Shell with various modifications and features missing in vanilla GNOME to make the user's life easier.
Aurora Shell is a modular GNOME Shell extension designed to scale from simple customizations to a complete custom shell experience. It provides quality-of-life improvements, visual enhancements, and workflow optimizations that vanilla GNOME lacks.
- π¨ Automatic Theme Sync - Panel automatically matches your system theme
- π Dark Mode Integration - Seamlessly toggles between light and dark styles
- π Smart Color Management - Forces consistent color scheme preferences
- β‘ Zero Configuration - Works automatically after installation
- π― Lightweight & Efficient - Minimal performance impact
- ποΈ Modular Architecture - Easy to extend with new features
- πͺ Enhanced Window Management - Tiling and snap assist
- οΏ½οΈ Custom Animations - Smooth transitions and effects
- π Workspace Enhancements - Better workspace management
- ποΈ Hot Corners Customization - Configurable corner actions
- π Notification Improvements - Enhanced notification center
- π¨ Full Theming Support - Complete visual customization
- GNOME Shell 49+
- Node.js and npm (for development/compilation)
- TypeScript 5.9+
- Sass (for stylesheet compilation)
# Clone the repository
git clone https://github.com/luminusOS/aurora-shell.git
cd aurora-shell
# Install and activate (all in one command)
make all# Clone the repository
git clone https://github.com/luminusOS/aurora-shell.git
cd aurora-shell
# Run the installation script
npm install
npm run build
make install
make enableTo test the extension, use the follow command:
- Gnome 49 and later
dbus-run-session -- gnome-shell --devkit- Gnome 48 and earlier
dbus-run-session -- gnome-shell --nested --waylandmake uninstallOr manually:
gnome-extensions disable aurora-shell@luminusos.com
rm -rf ~/.local/share/gnome-shell/extensions/aurora-shell@luminusos.comAurora Shell is built with scalability in mind, using a modular architecture that makes it easy to add new features without affecting existing code.
All modules implement the AuroraModule interface and extend BaseAuroraModule:
export interface AuroraModule {
enable(): void;
disable(): void;
}
export abstract class BaseAuroraModule implements AuroraModule {
protected _console: ConsoleLike;
constructor(console: ConsoleLike) {
this._console = console;
}
protected log(message: string, ...args: any[]): void;
protected error(message: string, ...args: any[]): void;
protected warn(message: string, ...args: any[]): void;
abstract enable(): void;
abstract disable(): void;
}Benefits:
- β Clean separation of concerns
- β Easy to add new features
- β Each module is independently testable
- β Consistent logging interface
- β Type-safe with TypeScript
Styles are organized using SCSS with a modular structure:
src/styles/
βββ stylesheet.scss # Main file (imports all modules)
βββ _variables.scss # Global variables
β βββ Colors ($aurora-dash-bg, $aurora-hover-bg, etc)
β βββ Transitions ($aurora-transition-duration, etc)
β βββ Spacing ($aurora-button-padding, etc)
β βββ Border radius ($aurora-border-radius, etc)
βββ _panel.scss # Panel-specific styles
Features:
- β Variables for easy customization
- β Modular organization (one file per component)
- β
Modern SCSS with
@usesyntax - β Automatic compilation with Sass
- β
Single compiled output:
dist/stylesheet.css
Adding new styles:
- Create
_component.scsswith component styles - Add
@use 'component';tostylesheet.scss - Run
npm run build:cssto compile
- File:
src/modules/themeChanger.ts - Purpose: Monitors and controls GNOME's Dark Style
- Features:
- Detects
color-schemechanges - Forces
prefer-lightwhen Dark Style is disabled - Adds CSS classes to panel (
aurora-dark-mode,aurora-light-mode) - Public API:
setDarkMode(),setLightMode(),toggleMode()
- Detects
- Create module file in
src/modules/ - Extend BaseAuroraModule
- Implement enable() and disable()
- Register in extension.ts
Example:
// src/modules/MyFeature.ts
import { BaseAuroraModule } from './BaseModule.js';
export class MyFeature extends BaseAuroraModule {
enable(): void {
this.log('MyFeature: Enabling');
// Your initialization code
}
disable(): void {
this.log('MyFeature: Disabling');
// Cleanup code
}
}
// src/extension.ts
import { MyFeature } from "./modules/MyFeature.js";
private _initializeModules(): void {
this._modules.set('myFeature', new MyFeature(this._console!));
}Aurora Shell uses esbuild for fast bundling:
- Target: Firefox 102 (GJS 1.73.2+)
- Format: ESM (ES Modules)
- Bundle: Single file output
- External:
gi://*,resource://*,system,gettext,cairo
Build commands:
npm run build # Full build (TS + CSS)
npm run build:ts # TypeScript only
npm run build:css # SCSS only
npm run validate # Type check without compiling- Check if extension is enabled:
gnome-extensions list- Check logs for errors:
journalctl -f -o cat /usr/bin/gnome-shell | grep "Aurora Shell"- Make sure you're in dark mode
- Restart GNOME Shell (logout/login on Wayland)
- Try disabling and re-enabling:
make reloadValidate TypeScript without compiling:
npm run validatenpm run build # Build everything
npm run build:ts # TypeScript only
npm run build:css # SCSS only- Files: camelCase (
themeChanger.ts) - Classes: PascalCase (
ThemeChanger) - Private methods: Prefix
_(_applyTheme()) - Constants: UPPER_CASE (
DASH_COLOR)
Always prefix logs with module name:
this.log('MyModule: Something happened');
this.error('MyModule: Error occurred:', error);LGPL-3.0-or-later
Contributions are very welcome! Feel free to:
- π Report bugs
- π‘ Suggest new features
- π§ Submit pull requests
- π Improve documentation
- Fork the project
- Create a feature branch (
git checkout -b feature/my-feature) - Commit your changes (
git commit -m 'feat: Add MyFeature') - Push to the branch (
git push origin feature/my-feature) - Open a Pull Request
- One module = one feature
- Always implement
enable()anddisable() - Clean up all resources in
disable() - Add informative logs
- Document parameters and behavior
- Follow TypeScript best practices
Developed with β€οΈ for the GNOME community.
Special thanks to:
- GNOME Shell team
- GJS contributors
- @girs package maintainers
- Issues: GitHub Issues
- Discussions: GitHub Discussions