Thank you for your interest in contributing to GOverlay! 🎉
This document provides guidelines for contributing to the project. Following these guidelines helps maintain code quality and makes the review process smoother for everyone.
- Code of Conduct
- Getting Started
- How to Contribute
- Development Guidelines
- Project Structure
- Building and Running
- License
Be respectful and considerate of others. This is a community project, and we value contributions from everyone. Harassment, discrimination, or any form of abusive behavior will not be tolerated.
Before you start contributing, ensure you have the following tools installed:
- Lazarus IDE - Free Pascal IDE
- Free Pascal Compiler (FPC) - Pascal compiler
- Git - Version control
- qt6pas - Qt6 bindings for Lazarus
- MangoHud - Performance overlay
- vkBasalt - Post-processing effects
- mesa-demos - OpenGL demo tools
- vulkan-tools - Vulkan utilities
-
Fork and clone the repository:
git clone https://github.com/YOUR_USERNAME/goverlay.git cd goverlay -
Open the project in Lazarus IDE:
lazarus-ide goverlay.lpi
Or simply open
goverlay.lpifrom the IDE. -
Build the project:
make
-
Run the application:
./start_goverlay.sh
If you find a bug, please create an issue on GitHub Issues with the following information:
- Clear title describing the issue
- Description of what happened vs. what you expected
- Steps to reproduce the bug
- Environment details:
- GOverlay version
- Distribution and version
- Installation method (Flatpak, native, AppImage, etc.)
- MangoHud/vkBasalt/OptiScaler versions
- Logs or screenshots if applicable
Example:
### Bug: vkBasalt toggle key not saving
**Expected:** Selected toggle key should be saved to config
**Actual:** Always saves "Home" regardless of selection
**Steps to Reproduce:**
1. Open GOverlay
2. Go to vkBasalt tab
3. Select "F1" from toggle key dropdown
4. Click Save
5. Check vkBasalt config - shows "Home"
**Environment:**
- GOverlay 1.7.0 (Flatpak)
- Arch Linux
- vkBasalt 0.3.2Feature requests are welcome! Please create an issue with:
- Clear description of the feature
- Use case - why is this useful?
- Proposed implementation (optional)
- Mockups or examples (if applicable)
-
Create a new branch for your changes:
git checkout -b feature/your-feature-name
or
git checkout -b fix/bug-description
-
Make your changes following the Development Guidelines
-
Test your changes thoroughly:
- Build and run the application
- Test affected functionality
- Run validation tests:
make tests
-
Commit your changes with clear, descriptive messages
-
Push to your fork:
git push origin feature/your-feature-name
-
Open a Pull Request on GitHub with:
- Clear title describing the change
- Description of what was changed and why
- Reference to related issues (e.g., "Fixes #123")
- Screenshots/recordings for UI changes
- Testing performed
GOverlay is written in Object Pascal using the Lazarus IDE. Follow these guidelines:
- Use meaningful variable and function names
- Keep functions focused and concise (single responsibility)
- Add comments for complex logic
- Use consistent indentation (2 spaces recommended)
- Place opening braces on the same line (K&R style)
- Units/Files:
lowercaseordescriptivename.pas - Classes:
TPascalCase(e.g.,TThemeManager) - Functions/Procedures:
PascalCase(e.g.,SaveConfiguration) - Variables:
camelCase(e.g.,configPath,isEnabled) - Constants:
UPPER_CASEorPascalCase(e.g.,MAX_SIZE,DefaultPath) - UI Components: descriptive names with type suffix (e.g.,
saveButton,configEdit,mangoCheckbox)
procedure TSomeUnit.LoadConfiguration;
var
configFile: TStringList;
configPath: string;
i: Integer;
begin
configPath := GetConfigPath;
if not FileExists(configPath) then
begin
ShowMessage('Configuration file not found');
Exit;
end;
configFile := TStringList.Create;
try
configFile.LoadFromFile(configPath);
for i := 0 to configFile.Count - 1 do
begin
// Process configuration lines
ProcessConfigLine(configFile[i]);
end;
finally
configFile.Free;
end;
end;Write clear, descriptive commit messages following this format:
<type>: <short description>
<optional longer description>
<optional footer with issue references>
feat:- New featurefix:- Bug fixrefactor:- Code refactoring (no functional change)docs:- Documentation changesstyle:- Code style/formatting changestest:- Adding or updating testschore:- Build process, dependencies, etc.
feat: add display_server option to MangoHud config
Added checkbox to enable/disable display_server in MangoHud configuration.
This allows users to show the current display server in the overlay.
Fixes #245fix: vkBasalt toggle key always saving as Home
Fixed bug where selected toggle key from dropdown was not being saved.
Now correctly writes the selected key (F1-F4, Home) to vkBasalt config.
Fixes #312Before submitting a PR, ensure:
-
The project compiles without errors:
make clean make
-
Run validation tests:
make tests
This validates the
.desktopand.metainfo.xmlfiles. -
Manual testing:
- Test the specific feature/fix you implemented
- Test on both native and Flatpak environments (if applicable)
- Verify UI changes work correctly with both light and dark themes
- Check that configuration files are saved and loaded correctly
-
Test different scenarios:
- Fresh install (no existing config)
- Existing config (ensure backwards compatibility)
- Edge cases (empty values, invalid inputs, etc.)
goverlay/
├── data/ # Application data files
│ ├── icons/ # Application icons
│ ├── fgmod/ # FGMOD scripts and resources
│ ├── *.desktop # Desktop entry file
│ └── *.metainfo.xml # AppStream metadata
├── *.pas # Pascal source files
│ ├── overlayunit.pas # Main MangoHud/vkBasalt/OptiScaler UI
│ ├── themeunit.pas # Theme management
│ ├── optiscaler_update.pas # OptiScaler update logic
│ ├── configmanager.pas # Configuration handling
│ ├── systemdetector.pas # System detection utilities
│ └── ... # Other units
├── *.lfm # Lazarus form files (UI layouts)
├── goverlay.lpi # Lazarus project file
├── goverlay.lpr # Main program file
├── Makefile # Build configuration
├── README.md # Project documentation
├── LICENSE # GPL-3.0 license
└── CONTRIBUTING.md # This file
overlayunit.pas- Main application logic and UIthemeunit.pas- Dark/light theme managementconfigmanager.pas- Configuration file handlingoptiscaler_update.pas- OptiScaler download and update logicfgmod_resources.pas- Embedded FGMOD scriptsMakefile- Build automation
# Build the project
make
# Run locally
./start_goverlay.sh
# Install system-wide
sudo make install
# Uninstall
sudo make uninstall# Build Flatpak locally
./flatpak/build-flatpak.sh
# Install the local build
flatpak install --user flatpak-repo io.github.benjamimgois.goverlay# Clean build artifacts
make clean- MangoHud Documentation: https://github.com/flightlessmango/MangoHud
- vkBasalt Documentation: https://github.com/DadSchoorse/vkBasalt
- OptiScaler Documentation: https://github.com/optiscaler/OptiScaler
- Lazarus Documentation: https://wiki.freepascal.org/Lazarus_Documentation
- Free Pascal Documentation: https://www.freepascal.org/docs.html
By contributing to GOverlay, you agree that your contributions will be licensed under the GNU General Public License v3.0.
See LICENSE for the full license text.
If you have questions about contributing, feel free to:
- Open a Discussion
- Ask in an Issue
- Reach out to the maintainer: @benjamimgois
Thank you for contributing to GOverlay! Your efforts help make Linux gaming better for everyone. 🚀