Klassy welcomes contributions from the community! Whether you’re fixing bugs, adding features, improving documentation, or translating the interface, your help is appreciated.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/paulmcauley/klassy/llms.txt
Use this file to discover all available pages before exploring further.
Getting Started
Before contributing, make sure you have:- Read the Architecture documentation
- Successfully built Klassy from source
- Familiarized yourself with the codebase structure
- Checked existing issues and pull requests on GitHub
Project Information
Repository
- GitHub: https://github.com/paulmcauley/klassy
- Main Branch:
plasma6.3(for Plasma 6.3+) - License: Multiple licenses (see
LICENSES/directory)
Author
Klassy is developed by:- Paul A McAuley (kde@paulmcauley.com)
- Hugo Pereira Da Costa (Developer)
- Andrew Lake (Designer)
- Ken Vermette (Cursors)
Communication
- Issues: Report bugs and request features on GitHub Issues
- Discussions: Design decisions and feature discussions on GitHub Discussions
- Design Document: Kite defaults design decisions
Development Workflow
Create a feature branch
feature/add-new-button-stylefix/scrollbar-animationdocs/improve-installation-guidetranslation/add-spanish
Make your changes
- Write clean, readable code following the project’s style
- Add comments for complex logic
- Update documentation if needed
- Test your changes thoroughly
Code Standards
C++ Style Guidelines
Klassy follows KDE coding standards with some specifics:Formatting
- C++ Standard: C++20
- Indentation: 4 spaces (no tabs)
- Line length: Aim for 120 characters max
- Braces: Opening brace on same line for functions, classes, and control structures
Clang-Format
Klassy uses clang-format for consistent code formatting:The project includes a pre-commit git hook that runs clang-format automatically. Install it with:
Naming Conventions
- Classes:
PascalCase(e.g.,BreezeDecoration,ButtonColors) - Functions:
camelCase(e.g.,calculateButtonColor,renderIcon) - Member variables:
m_camelCase(e.g.,m_buttonSize,m_titlebarOpacity) - Constants:
UPPER_SNAKE_CASEork_camelCase - Enums:
PascalCasefor type,PascalCasefor values
Header Guards
Use#pragma once for header guards:
Qt Best Practices
- Use Qt’s signal/slot mechanism properly
- Prefer
nullptroverNULLor0 - Use smart pointers where appropriate
- Follow Qt naming conventions for signals and slots
- Use
Q_EMITfor emitting signals - Use
Q_OBJECTmacro for QObject-derived classes
CMake Guidelines
- Keep CMakeLists.txt organized and commented
- Use CMake variables for repeated values
- Properly declare dependencies
- Support both Qt5 and Qt6 when applicable
Contribution Areas
Bug Fixes
Fix and test
- Fix the issue with minimal code changes
- Test that the fix works
- Ensure no regressions in other areas
New Features
Before implementing a new feature:- Check existing discussions: See if the feature has been discussed
- Open a discussion or issue: Propose the feature and get feedback
- Design first: Plan the implementation approach
- Consider impact: Ensure it fits Klassy’s design philosophy
- Maintain compatibility: Don’t break existing configurations
Example: Adding a New Button Style
Translations
Klassy uses KDE’s ki18n framework for internationalization.Adding a New Translation
Translation Guidelines
- Keep translations concise for UI elements
- Maintain the same tone as English strings
- Don’t translate technical terms unnecessarily
- Test translations in the actual UI to ensure they fit
- Follow your language’s typography conventions
Documentation
Documentation improvements are always welcome:- Fix typos and grammatical errors
- Clarify confusing explanations
- Add examples and screenshots
- Improve installation instructions for specific distros
- Document undocumented features
Testing
Manual Testing
Always test your changes with:- Multiple color schemes: Light, dark, custom
- Different screen scales: 100%, 125%, 150%, 200%
- Various window states: Normal, maximized, minimized, fullscreen
- Different applications: Native Qt/KDE, GTK apps, browsers
- Both X11 and Wayland: If possible
Automated Testing
If you add testable functionality:Pull Request Guidelines
PR Description Template
Review Process
- Automated checks: CI runs clang-format and builds
- Code review: Maintainer reviews code quality and design
- Testing: Changes are tested on various configurations
- Feedback: You may be asked to make changes
- Merge: Once approved, your PR will be merged
Be patient during the review process. The maintainer may be busy, and thorough reviews take time.
Development Tips
Live Reload Workflow
For faster development iteration:Debug Logging
Add debug output in your code:Useful Development Tools
- Qt Designer: Edit
.uifiles visually - GammaRay: Qt application inspector
- Lokalize: KDE translation editor
- KDevelop: KDE’s IDE with excellent CMake support
- clang-tidy: C++ linter for finding issues
Code of Conduct
While Klassy doesn’t have a formal code of conduct document, please:- Be respectful and professional
- Focus on technical merit
- Welcome newcomers and help them learn
- Give and receive constructive feedback gracefully
- Respect the maintainer’s decisions
Questions?
If you have questions about contributing:- Check the GitHub Discussions
- Review existing issues and PRs for similar cases
- Open a new discussion for general questions
- Open an issue for bugs or feature requests
Thank you for contributing to Klassy! Every contribution, no matter how small, helps make Klassy better for everyone.