First off, thanks for taking the time to contribute! ❤️
All types of contributions are encouraged and valued. See the Table of Contents for different ways to help and details about how this project handles them. Please make sure to read the relevant section before making your contribution. It will make it a lot easier for us maintainers and smooth out the experience for all involved. The community looks forward to your contributions. 🎉
And if you like the project, but just don't have time to contribute, that's fine. There are other easy ways to support the project and show your appreciation, which we would also be very happy about:
- Star the project
- Post about it
- Reference this project in your project's readme
- Sponsor the lead developer
Before you ask a question, it is best to search for existing Discussions and Issues that might help you.
In case you have found a suitable existing issue/discussion and still need clarification, you can write your question in said post. It is also advisable to search the internet for answers first to common error messages.
If you then still feel the need to ask a question and need clarification, we recommend the following:
- Open a Discussion.
- Provide as much context as you can about what you're running into.
- Provide project and platform versions (windows, gnome, etc...), depending on what seems relevant.
We will then take care of the question as soon as possible and convert it to a proper issue, if needed.
When contributing to this project, you must agree that you have authored 100% of the content and/or that you have the necessary rights to the content and that the content you contribute may be provided under the project license.
A good bug report shouldn't leave others needing to chase you up for more information. Therefore, we ask that you to investigate carefully, collect information and describe the issue in detail in your report. Please complete the following steps in advance to help us fix any potential bug as fast as possible:
- Make sure that you are using the latest released version.
- Determine if your bug is really a bug and not an error on your side. If you are looking for support, you might want to check this section.
- See if other users have experienced (and potentially already solved) the same issue you are having, check if there is not already a bug report existing for your bug or error in both the Discussions and Issues sections.
- Collect information about the bug:
- Debug information provided by the application
- GNOME: From the main hamburger menu, open About Application → Troubleshooting → Debugging Information and copy the information to the clipboard to paste in your issue.
- WinUI: From the Help item in the left-side navigation, click the gear/wrench icon in the top right corner of the flyout to copy the information to the clipboard to paste in your issue.
- Stack trace (Traceback)
- Including any error messages thrown by the application
- You may need to start the application via the terminal/console to receive an error message for a crash.
- OS, Platform and Version (Distro, Kernel Version, x64/ARM, etc...)
- Your input and the output to the application
- i.e. Steps you took to produce the crash and/or attach any files you may have opened within the app that caused a crash
- Can you reliably reproduce the issue? And can you also reproduce it with older versions?
- Debug information provided by the application
You must never report security related issues, vulnerabilities and bugs (including sensitive information) to the issue tracker nor elsewhere in public. Instead sensitive issues must be reported and handled via email to [email protected].
We use GitHub issues to track bugs and errors. If you run into an issue with the project:
- Open a new Issue and explain the behavior you are experiencing and what you expect to happen.
- Please provide as much context as possible and describe the reproduction steps that someone else can follow to recreate the issue on their own system. For good bug reports you should isolate the problem and create a reduced test case.
- Provide the information you collected in the previous section.
Once it has been opened:
- The project team will label the issue accordingly.
- A team member will try to reproduce the issue with your provided steps. If there are no reproduction steps or no obvious way to reproduce the issue, the team will ask you for those steps.
- Bugs that are not able to be reproduced will not be addressed until they are reproduced. Therefore, it is important to include steps to speed up the fixing process.
This section guides you through submitting an enhancement suggestion for Nickvision Application, including completely new features and minor improvements to existing functionality. Following these guidelines will help maintainers and the community in understanding your suggestion and finding related suggestions.
- Make sure that you are using the latest released version.
- Perform a search through Discussions and Issues to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one.
- Find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Keep in mind that we want features that will be useful to the majority of our users and not just a small subset.
Enhancement suggestions are tracked as GitHub issues.
- Use a clear and descriptive title for the issue to identify the suggestion.
- Provide a step-by-step description of the suggested enhancement in as many details as possible.
- For enhancements to existing functionality, describe the current behavior and explain which behavior you expected to see instead and why. At this point you can also tell which alternatives do not work for you.
- For completely new features, describe what you would like to see from this new feature in terms of both functionality and design. Providing mockups, even if in sketch format, greatly help the team envision what you would like to see.
- Explain why this enhancement would be useful to most Application users. You may also want to point out similar projects of other platforms and their solutions to serve as inspiration.
Everyone is welcome to translate this app into their native or known languages, so that the application is accessible to everyone.
Application is available to translate on Weblate!
To start translating the app, fork the repository and clone it locally.
Application uses gettext for translations. In the resources/po
folder you will find files that can be edited in your favourite *.po
files editor (or with any plain text editor).
If you want to create a new translation, copy the application.pot
file and rename said copy as <lang_code>.po
, where <lang_code>
is the language code for your translation. Usually the code is two letters, but it can also be a specific locale code to differentiate between versions of the same language (for example, pt
and pt_BR
). Also, add the language code to LINGUAS
file (keeping this file in alphabetical order).
Edit your new translation file with correct translations for the English messages.
To check your translation file, make sure your system is in the locale of the language you are translating and locally build and run the app. If all steps were carried out successfully, you should see your translation in action!
Once all changes to your translated file are made, commit these changes and create a pull request to the project.
Application is built using C++20 and platform-native user interface libraries. With these technologies, Application is built for all desktop platforms.
The project is split up into the following sub-projects:
The whole project utilizes the MVC pattern for separating data models and UI views.
This project contains all of the code used by all platforms of the app:
controllers
=> The objects used by UI views to receive and manipulate data from the models.helpers
=> Useful objects and functions specific to the application that can be used by all platforms.models
=> The data driven objects of the application (i.e. Configuration, Database, etc...).
This project contains all of the code used for the GNOME platform version of the app, including flathub manifest and desktop files:
blueprints
=> UI design files written in Blueprint markup language.controls
=> Generic controls for the app.- These UI objects are separate from views in that they should not be backed by a controller and should be easily ported to any other app.
helpers
=> Useful objects and functions specific for the GNOME platform version of the app.resources
=> Extra icons and other files specific for the GNOME platform version of the app.views
=> The views (pages, windows, dialogs, etc...) of the app.
This project contains all of the code used for the QT platform (Windows, KDE) version of the app:
controls
=> Generic controls for the app.- These UI objects are separate from views in that they should not be backed by a controller and should be easily ported to any other app.
helpers
=> Useful objects and functions specific for the QT platform version of the app.resources
=> Extra icons and other files specific for the QT platform version of the app.views
=> The views (pages, windows, dialogs, etc...) of the app.
Application simply relies on cmake
to configure and manage the correct projects for the running platform. Meaning, on Linux the .gnome
variant of the app will be built by default and on Windows the .qt
variant.
Although on Linux, you can specify the -DUI_PLATFORM=qt
flag to cmake and build and run the .qt
variant.
See the readme for instructions on building and running the app locally.
Application uses the following naming conventions:
CamelCase
for namespaces and classespascalCase
for file names, functions, and variablesm_
prefix appended to class member variablesget
andset
prefixes used for accessor and modifiers methods of a class variable respectively- Exception: For boolean class members,
is
andsetIs
should be used as the prefixes for the accessor and modifier methods of said members.
- Exception: For boolean class members,
Application uses the following coding styles:
-
used as the guards to a header file.
#ifndef FILENAME_H #define FILENAME_H ... #endif //FILENAME_H
#pragma once
should not be used.
- Brackets
{}
should be placed on individual new lines and never inline.- This applies for any type of structure (
if
,switch
,class
, etc...) that requires brackets. - Single-line if statements should also be wrapped by brackets.
- This applies for any type of structure (
- Proper indentation using spacing with spaces and not tabs.
This guide was based on a template by contributing-gen.