<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dimosthenis 'wallmenis' Krallis on KDE Blogs</title><link>https://blogs.kde.org/authors/wallmenis/</link><description>Recent content in Dimosthenis 'wallmenis' Krallis on KDE Blogs</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sat, 03 Oct 2026 23:46:54 +0200</lastBuildDate><atom:link href="https://blogs.kde.org/authors/wallmenis/index.xml" rel="self" type="application/rss+xml"/><item><title>KDE Code Contributing: A layman-oriented tutorial</title><link>https://blogs.kde.org/2026/10/03/kde-layman-tutorial/</link><pubDate>Sat, 03 Oct 2026 00:00:00 +0000</pubDate><author>Dimosthenis 'wallmenis' Krallis</author><guid>https://blogs.kde.org/2026/10/03/kde-layman-tutorial/</guid><description>&lt;p&gt;I always thought contributiong to a project should be easily understood. So I recorded the whole process
and made this tutorial. I want every step to be as easily understood and as determenistic as possible.&lt;/p&gt;
&lt;p&gt;So, let's begin!&lt;/p&gt;
&lt;h2 id="step-1-setting-up-distrobox-optional"&gt;Step 1: Setting up distrobox (optional)&lt;/h2&gt;
&lt;p&gt;In this tutorial we will use distrobox. You may skip this step if you want to build on your main system.
To install distrobox you may consult your dirstro's way of installing packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu/Debian: &lt;code&gt;sudo apt install distrobox podman&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Fedora/RHEL-adjacent: &lt;code&gt;sudo dnf install distrobox podman&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;SUSE: &lt;code&gt;sudo zypper install distrobox podman&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Arch-adjacent: &lt;code&gt;sudo pacman -S distrobox podman&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After the installation is done we will create a home directory and use the latest fedora image for our distrobox.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mkdir -p ~/kde-env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;distrobox create -i fedora:latest -n kde-env -H /home/$USER/kde-env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;distrobox enter kde-env&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You will need to install other tools inside the distrobox for your usecase or be aware that distrobox may hinder
the access to your host’s tools, (eg. Git may have issues when used on a distrobox directory from the host
instead of inside distrobox). In our case, we will install &lt;code&gt;nano&lt;/code&gt;, &lt;code&gt;git&lt;/code&gt; and &lt;code&gt;uv&lt;/code&gt; inside our distrobox as well every
dependency we need for our kde environment. It is also recommended to install &lt;code&gt;qtcreator&lt;/code&gt; for this tutorial since
the app we are going to compile is easier to edit with it.&lt;/p&gt;
&lt;p&gt;Inside our distrobox:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo dnf install nano git uv qt-creator&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="step-2-setting-up-kde-builder"&gt;Step 2: Setting up kde-builder&lt;/h2&gt;
&lt;p&gt;To install kde-builder you have to have &lt;code&gt;git&lt;/code&gt; and &lt;code&gt;uv&lt;/code&gt; installed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If you followed Step 1, you don't need to install &lt;code&gt;git&lt;/code&gt; and &lt;code&gt;uv&lt;/code&gt; in your host.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu/Debian: &lt;code&gt;sudo apt install git uv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Fedora/RHEL-adjacent: &lt;code&gt;sudo dnf install git uv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;SUSE: &lt;code&gt;sudo zypper install git uv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Arch-adjacent: &lt;code&gt;sudo pacman -S git uv&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;After installing &lt;code&gt;git&lt;/code&gt; and &lt;code&gt;uv&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Inside our distrobox or your dev environment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;uv tool install git+https://invent.kde.org/sdk/kde-builder.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kde-builder --generate-config&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kde-builder --install-distro-packages&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;To update: &lt;code&gt;uv tool upgrade kde-builder&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now we can let kde-builder take care of the dependencies while we do the next steps.&lt;/p&gt;
&lt;h2 id="step-3-setting-up-an-inventkdeorg-account"&gt;Step 3: Setting up an invent.kde.org account&lt;/h2&gt;
&lt;p&gt;Please head to &lt;a href="https://identity.kde.org/"&gt;https://identity.kde.org/&lt;/a&gt; and click “register” on the top right:&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image pointing to the button that says 'register' on the top right" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/1-register-invent-kde-org.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;Then accept the KDE code of conduct (if you agree, otherwise you can’t follow this tutorial).
Afterwards, click “Continue Registration”.&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image pointing to the tick-box for accepting the code of conduct of KDE and pointing to the button 'Continue Registration'" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/2-accepting-the-coc.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;Next, you will need to fill in your name and email and please
&lt;strong&gt;use your real name or an alias you remember and a real email&lt;/strong&gt;
as &lt;strong&gt;you will receive a mail confirmation request and we will need your email and your name in the next steps.&lt;/strong&gt;
You will also be asked to assign a password and username to your account.
This username and password will be the same ones used in invent.kde.org&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing the fields to be filled by the user" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/3-saving-your-credentials.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;After we are done with all that, we can head to &lt;a href="invent.kde.org"&gt;invent.kde.org&lt;/a&gt; and login:&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image pointing to the login button in invent.kde.org" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/4-signing-in-1.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;

&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing the login form of invent.kde.org" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/5-signing-in-2.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="step-4-setting-up-git"&gt;Step 4: Setting up git&lt;/h2&gt;
&lt;p&gt;Inside your dev environment, run the below commands to configure your name and email inside of git. This is
important so that your contributions get attributed correctly to you. Please use the name you used in the previous
step.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git config --global user.name &amp;quot;Your Name&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git config --global user.email &amp;quot;you@email.com&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You may also type the below command to make pushing your changes easier:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git config --global push.autoSetupRemote true&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="step-5-setting-up-an-ssh-key"&gt;Step 5: Setting up an ssh key&lt;/h2&gt;
&lt;p&gt;We will setup an ssh key. It is important that &lt;strong&gt;you don’t lose/share that key.&lt;/strong&gt;
We will start by typing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ssh-keygen&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then, inside our dev environment, this will pop up:&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing the output of ssh-keygen" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/6-ssh-keygen-1.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;You may press enter or give the path of where to save your key.
After that, you will be asked to add a passphrase for your key.&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing the output of ssh-keygen after putting the path of the key" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/7-ssh-keygen-2.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;You may also just press enter for no passphrase but it is recommended that you have one.&lt;/p&gt;
&lt;p&gt;Next up we will need to configure our ssh to use our key when we connect to invent.kde.org.&lt;/p&gt;
&lt;p&gt;For that we open your favorite text editor and create a file named ‘config’ in the path ~/.ssh/ inside our
dev environment.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nano ~/.ssh/config&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We type the following inside the file:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Host invent.kde.org
 Hostname invent.kde.org
 IdentityFile ~/.ssh/id_ed25519
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The last line should contain the location of your ssh private key.&lt;/p&gt;
&lt;p&gt;After this is done, open the public key file (the one that ends in .pub):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cat ~/.ssh/id_ed25519.pub&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We need to copy our public key so that we can paste it afterwards.&lt;/p&gt;
&lt;p&gt;Now, we go to our invent.kde.org settings page by navigating top right, clicking our profile icon
and then clicking &amp;quot;Preferences&amp;quot;&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing where Preferences is" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/8-ssh-saving-1.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;Afterwards we go to &amp;quot;Access&amp;quot; and then &amp;quot;SSH keys&amp;quot;.&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing where Access and SSH keys is" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/9-ssh-saving-2.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;Finally we go to &amp;quot;Add new key&amp;quot;.&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing where Add new key is" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/10-ssh-saving-3.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;Now we can paste our public key inside the field and click &amp;quot;Add key&amp;quot;&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing where the field and Add key is" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/11-ssh-saving-4.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;h2 id="step-6-building-an-application"&gt;Step 6: Building an application&lt;/h2&gt;
&lt;p&gt;After our kde-builder instance has done downloading the dependencies, we can build almost any kde app.
We will pick Kcalc today because it is an app among the ones with the fewest dependencies.
The time this step takes will depend on your computer’s speed : )
So to build it, we just type:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kde-builder kcalc&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="step-7-contributing-to-an-application"&gt;Step 7: Contributing to an application&lt;/h2&gt;
&lt;p&gt;In case you are not familiar with the way GitLab works with Merge Requests, don’t worry! We will go through
it step by step. So first, let’s pick an application to contribute. We will pick Kcalc again since that
is what we are building. Go ahead and enter the page below. It is the repository of Kcalc.
&lt;a href="https://invent.kde.org/utilities/kcalc"&gt;https://invent.kde.org/utilities/kcalc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;First off, we will need to make a fork of the repository. To do that, we click the &amp;quot;Fork&amp;quot; button at the top-right:&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing where the field and Add key is" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/12-forking-1.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;Clicking it, will get us to this page. We need to select namespace (pick your username) and then click
&amp;quot;Fork project&amp;quot;.&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing where to change namespace and Fork project" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/13-forking-2.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;Then we will create a branch inside our fork. To do that, we will click the plus icon on the top right.
Then click &amp;quot;New branch&amp;quot;.&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing where the plus icon is and where the New branch is" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/14-branching-1.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;Finally, we can name our branch. The convention for KDE branch naming is &lt;strong&gt;work/username/branchname&lt;/strong&gt;.
However, we will just name our branch &amp;quot;tutorial&amp;quot; on this tutorial.&lt;/p&gt;
&lt;p&gt;So, after writing the name of our branch in the field, we click &amp;quot;Create branch&amp;quot;.&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing the branch name typed in and where the Create branch is" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/15-branching-2.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;Now, we will create a new merge request.
To do that, we can either click the convenient &amp;quot;Create merge request&amp;quot; button on the top left:&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing where the Create merge request button is" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/16-creating-mr-1.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Or&lt;/strong&gt; go to &amp;quot;Branches&amp;quot;:&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing where the Branches button is" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/19.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;And then go to click &amp;quot;New&amp;quot; for new branch on the right:&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing where the Branches button is" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/20.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Both paths&lt;/strong&gt; will lead you to the same page.&lt;/p&gt;
&lt;p&gt;You will first need to untick &amp;quot;Mark as draft&amp;quot; since we don't use it often.&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing where to untick Mark as draft" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/17-creating-mr-2.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;Finally, we type the description of our merge request and then we create it by clicking &amp;quot;Create merge request&amp;quot;!&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Image showing where to fill the description of our merge request and where Create merge request is" src="https://blogs.kde.org/2026/10/03/kde-layman-tutorial/18-creating-mr-3.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;To push our changes, at the same directory, we do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git push git@invent.kde.org:wallmenis/kcalc.git tutorial&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And to get our changes, we do the same command except we do pull:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git pull git@invent.kde.org:wallmenis/kcalc.git tutorial&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the meantime, you may add comments to your merge request so that you can explain the changes you have
made and why they are important.&lt;/p&gt;
&lt;h1 id="congratulations-you-did-it"&gt;Congratulations! You did it!&lt;/h1&gt;
&lt;p&gt;Now go out there and show the world your nice contributions to KDE!&lt;/p&gt;</description></item></channel></rss>