Desktop file

Let your application show up in the Launcher and in application menus.

In order for your application to show up in menus and/or be automatically associated with MIME types in file browsers, you need to provide a .desktop file like follows:

[Desktop Entry]
Type=Application
Exec=your-app %u
TryExec=your-app
MimeType=application/x-your-mime-type;
Icon=some-icon
X-DocPath=yourapp/index.html
Terminal=false
Name=Your App
GenericName=Some Generic Name
Comment=Short Description Of Your App
Categories=Qt;KDE;

Take a look at the .desktop Freedesktop Spec to find out more about the key/value pairs above.

The Name, Type, and Exec fields are essential. Name is self explanatory. Type=Application defines your application as a program that shows up on the menu. Exec is the command used to run your application.

The command passed to TryExec is used to test to see if the application is actually installed on the system. That is to say, if a command cannot be accessed from the $PATH (usually the case when the user creates their own custom .desktop files and uninstalls the application), the entry will not show up on the menu.

Icon can use the path to an icon shipped with your application or a file name available in the system. Terminal=false states your application doesn't need to be run in a terminal before it is executed, and it is commonly used for GUI applications.

It's important to pick a good set of Categories to make your application discoverable. If this is left blank, your application will be put into a category called "Lost N Found". The list of categories is separated by colons ;.

The MimeType field describes the MIME types used by your application, meaning it will influence whether your app will show up as an available option to open or run a certain file. For example, a plain text editor would use plain/text to show up when right clicking a text file and selecting "Open With", and an email application could use x-scheme-handler/mailto to respond to mailto:/ URIs. The list of MIME types is separated by colons ;, and you can find a comprehensive list of MIME types used on Linux over the shared-mime-info repository.

Translations

Like you can see on the example .desktop file, only an English version is available. To translate it to more languages, you can add a [lang] suffix to the keys you want to translate. A comprehensive list of suffixes is available here. For example:

Name=Your Application
Name[fr]=Ton application
...
GenericName=Some Generic Name
GenericName[fr]=Un nom générique

If you are using KDE infrastructure, you should not translate your .desktop file yourself. We have a bot named "Scripty" that extracts the text from .desktop files into .po (gettext) files, which are then sent to KDE translators. In turn, once the translators have done their work, Scripty fetches the translated text back and inserts it into the .desktop file.

Install the .desktop file

In your CMakeLists.txt, you can add the following lines to install your .desktop file:

install(FILES org.example.my-app.desktop DESTINATION ${KDE_INSTALL_APPDIR})