Skip to content

Guidelines

These are the basic guidelines you should follow when you want to contribute to Noctalia.

We welcome contributions of any size, bug fixes, new features, documentation improvements, themes, or configs.

Last updated March 09, 2026

Noctalia/
├── shell.qml # Main shell entry point
├── Modules/ # UI components and panels
│ ├── Bar/ # Status bar and widgets
│ ├── DesktopWidgets/ # Desktop widgets panel
│ ├── Dock/ # Application dock
│ ├── Launcher/ # Application launcher
│ ├── Settings/ # Settings panel
│ ├── Panels/ # Other panels
│ └── ... # Other UI modules
├── Services/ # Backend services
│ ├── Compositor/ # Compositor
│ ├── UI/ # UI services
│ └── ... # Other services
├── Widgets/ # Reusable UI components
│ ├── NButton.qml # Custom button component
│ ├── NTextInput.qml # Text input component
│ └── ... # Other widgets
├── Commons/ # Shared utilities
│ ├── Logger.qml # Logging system
│ ├── Settings.qml # Settings management
│ └── ... # Other utilities
├── Assets/ # Static assets
│ ├── ColorScheme/ # Predefined color schemes
│ ├── Translations/ # Internationalization files
│ └── ... # Other assets
└── Scripts/ # Development scripts

lefthook is used to format QML files. After cloning the repo, install lefthook and run lefthook install to install the pre-commit hook.

  1. Modular Design: Place new components in the appropriate directory:
  • Modules/ - UI panels and major components
  • Services/ - Logic and backend functionality
  • Widgets/ - Reusable UI components
  • Commons/ - Shared utilities and helpers
  1. Service-First Architecture: Implement logic in services, keep UI components lightweight and focused on presentation.

  2. Widget Reusability: Use existing widgets from Widgets/ directory before creating new ones. The N* prefixed widgets are our custom components.

  1. Follow Existing Patterns: Study how similar features are implemented and follow the same patterns.

  2. Error Handling: Implement robust error handling with proper logging using Logger.qml.

  3. Testing: Test changes with both Hyprland and Niri compositors where applicable.

  4. Small PRs: Prefer small, focused pull requests that are easier to review and test.

Avoid Qt5Compat: We don’t use Qt5Compat since it’s deprecated and will be removed in future Qt versions. Instead, use modern Qt6 alternatives like QtQuick.Effects (especially MultiEffect for visual effects).