Thanks for your interest in contributing to Kairo Shell.
Kairo Shell is an open-source desktop shell for Hyprland focused on a cohesive interface, customization, reliability, and a clean desktop experience.
Contributions of all sizes are welcome: bug fixes, QML improvements, documentation, translations, themes, testing, performance improvements, and new ideas.
Before making a large change, check existing issues and discussions to see whether the idea is already being worked on.
For substantial features or architectural changes, opening an issue first is recommended.
Small fixes do not require an issue.
Clone the repository:
git clone https://github.com/nihitdev/kairo-shell.git
cd kairo-shellInstall the current checkout:
bash install/install.sh --localStart Kairo:
kairod startRestart after making runtime changes:
kairod stop
kairod startbin/ CLI and daemon entrypoints
config/kairo/ Default configuration
install/ Installer
nix/ Nix packaging and modules
src/assets/ Themes, translations and assets
src/quickshell/ Quickshell/QML shell
src/scripts/ Helper scripts
tests/ Regression tests
docs/ Documentation and images
Keep changes focused.
Avoid unrelated formatting or refactoring in the same pull request.
Preserve compatibility where practical.
Do not remove upstream attribution or licensing information.
Kairo Shell currently targets Hyprland. Do not introduce compositor-specific implementations for unsupported compositors without prior discussion.
Prefer existing project patterns before introducing additional dependencies or abstractions.
Run the migration regression tests:
/usr/bin/python3 -m pytest -q tests/test_migration.pyCheck Git whitespace:
git diff --checkCheck the CLI:
kairo --version
kairod --versionWhen changing QML or runtime behavior, test the shell inside a real Hyprland session.
Focused commits are preferred.
Examples:
fix(launcher): prevent duplicate search results
feat(theme): add monochrome Kairo preset
docs: document Hyprland integration
refactor(audio): simplify volume state handling
test: cover migrated configuration paths
Avoid commits such as:
stuff
changes
fix
update
asdf
A good pull request should explain:
- What changed
- Why the change is useful
- How it was tested
- Whether configuration behavior changed
- Whether new dependencies were introduced
Screenshots or recordings are strongly encouraged for visible UI changes.
Keep pull requests reasonably focused so they can be reviewed independently.
Useful bug reports include:
- Kairo Shell version
- Hyprland version
- Quickshell version
- Distribution
- Relevant logs
- Steps to reproduce
- Expected behavior
- Actual behavior
Remove passwords, tokens, private paths, or other sensitive information before posting logs.
Feature requests are welcome.
Explain the problem or workflow the feature would improve rather than only describing an implementation.
Translation improvements are welcome.
Language resources are located under:
src/assets/languages/
Try to preserve existing keys and structure.
Theme contributions should remain readable across the entire shell rather than optimizing only one component.
Check text contrast, selected states, notifications, popups, launcher results, system panels, and lock-screen elements.
Kairo Shell is licensed under AGPL-3.0-or-later.
By contributing, you agree that your contribution may be distributed under the project's license.
Code derived from upstream Serpantinum remains subject to its applicable copyright and attribution requirements.
See LICENSE and UPSTREAM.md.
If you are unsure whether a change fits Kairo Shell, open an issue and describe what you want to build.
Thanks for helping improve Kairo Shell.