After using Debian and its descendants for a long time I thought I’d never change anything, but then, on a whim, I decided to just “try” and see what the guys on the Arch side of the Linux big lane have got to offer.
It was actually when I tried Manjaro Linux Live USB last year that got me all excited for this specific distribution, and then falling in love with Kubuntu’s new Plasma desktop (after literally 5 years of not touching it), that got me to choose the KDE flavor of Manjaro.
It was two weeks ago, when I created a new partition on my main machine, alongside the XFCE edition of Linux Mint which I was using as my daily driver (and hated almost every bit of it, btw), grabbed and installed the Manjaro KDE image, and have been using it since then.
And guess what? I absolutely LOVE it. And only after this short period of time, I don’t see myself going back to Debian any time soon, if at all. More than that, I even think of migrating my other machines to Arch Linux whenever I have the chance to do it. The reason for that basically comes down to the pacman package manager, the simply amazing documentation of Arch Linux and the absolute customizability of KDE.

I will not go on details regarding those, and other benefits such as rolling release. Instead, in this post I’m going to document my configuration, installed software and tweaks I’ve been applying to my system. Not for anyone to replicate my setup (although it’s also possible), but to inspire, so anyone can take from it whatever they think is for them.
I will also try to keep this post updated with further changes and improvements I do down the road.

Installed software

Just a quick note: All applications are available as pacman and/or AUR packages. I installed nothing manually, and for anything that wasn’t available I created and uploaded an AUR package to the repository.

Package Managers

  • yaourt → It’s basically a piece of software complimentary to pacman.
  • yaourt-gui → While saying “GUI” in the name, it’s actually terminal-based. I use it all the time: option 9 to install new software and option 5 to remove.

CLI Tools

  • iperf3 → An amazing tool for measuring transfer speeds and troubleshooting networks.
  • mono → Sometimes I need to run little .NET applications, so this comes in handy.
  • net-tools → I mainly use it for ifconfig command.
  • mkvtoolnix-cli → A handy tool for muxing and demuxing video files.
  • massren → This one I discovered quite recently. It lets the user rename files inside a text editor. Very handy if the editor supports muli-cursor editing. Beware: To install this one, the Go language package (~300 MB) needs to be installed. It can be removed after massren has been compiled and installed.
  • bash-completion → This guy is a real time saver! It extends the usual completion from just commands to also their options.
  • yakuake-session → A script that allow for automatic creation of Yakuake sessions. (More on Yakuake in GUI Software section)
  • pass → Great tool for privately managing passwords.
  • stow → For managing dotfiles

System Stuff

  • libva-intel-driver → This one is extremely important for video playback on Intel Graphics devices.
  • libva-utils → I use this one for its vainfo tool, that confirm the integrity of the display driver and shows its hardware decoding capabilities.
  • nfs-utils → For mounting NFS shares :)
  • ttf-ms-fonts

GUI Software

  • Web browser: opera opera → My go-to web browser for the past 10 years or so.
  • Media Player: mpv mpv → Those who still use VLC these days really don’t know what they’re missing…
  • Instant Messaging: telegram telegram → It’s the best instant messaging app. Period.
  • Text Editors: atom atom and kate kate → Kate comes built-in with KDE.
  • Terminal: yakuake yakuake → I’ve been looking for a replacement for Guake terminal for quite some time now. Who thought it would come pre-installed with KDE!
  • Music: headset headset, gpmdp gpmdp and google-musicmanager google-musicmanager.
  • Image processing: krita krita → Nothing is like Photoshop, but this one is the closest one on Linux… (Don’t even dare to mention Gimp).
  • Launcher: ulauncher ulauncher → While I like the built-in Krunner, something about Ulauncher just makes me want to use it.
  • Clipboard Manager: clipit clipit → The clipboard manager in KDE just won’t do… This one actually allows pasting the content right after choosing an history item and its actions feature is actually useful.
  • Comic Reader: yacreader yacreader
  • Others:
    • avidemux avidemux → For casual video editing.
    • wavebox wavebox → It’s like a Swiss Army Knife for web applications. Quite resource-heavy though.
    • aegisub aegisub → Best subtitles editor.
    • syncplay syncplay → Watching videos together!
    • autokey autokey → Great application for keyboard automation. Should be noted that the QT version is broken so only GTK on this one.
    • barrier barrier → I can’t say how happy I am that someone picked up the open-source Synergy project.
    • deluge deluge → I use this to control remote clients. My ISP won’t allow torrenting :(
    • fsearch fsearch-git → The closest one can get to Everything on Linux.
    • teamviewer teamviewer → Controlling remote machines without opening ports.
    • tagainijisho tagainijisho → Japanese-English dictionary. It’s okay, but could be better.
    • peek peek → Screen capture app… Sort of.
    • qtpass → GUI manager for pass.
    • KDE’s kompare, krename, and kbackup
    • Not really GUI software, but… syncthing for syncing stuff and redshift for blocking blue light at night.

Dolphin Service Menu & KDE Applets

Removed Software

Some packages that come pre-installed with Manjaro KDE have no use for me, and I removed them:
steam-manjaro, libreoffice-fresh, konversation, skanlite, thunderbird, inkscape, qbittorrent, print-manager, hplip (w/o dependencies)

Theme and Icons

It’s not a great setup without a good theme.
I always prefer dark themes, and for this one I chose Adapta (actually Adapta-Nokto), which I’ve been adoring pretty much ever since it came out.
Adapta was originally designed for being a GTK theme, but there’s a separate project for KDE.
I ended up installing both adapta-kde and adapta-gtk-theme for unifying the look on all applications.
For the icon set I went with Adapta’s complementary papirus-maia-icon-theme which is the Manjaro-flavor of papirus-icon-theme (green instead of blue main color).

How to apply everything correctly

Now I don’t know why it has to be like that, but setting a theme on any Linux distribution I’ve used so far always has to be complicated. Even if the main theme is set to the desired one, there are other places where the configuration need to be set.
Here’s how to do it correctly (all options in System Settings):

  1. Workspace Theme:
    • Look And Feel → Adapta
    • Desktop Theme → Adapta
    • Splash Screen → Adapta
  2. Colors → Adapta Nokto, check “Apply colors to non-Qt applications”
  3. Icons → Papirus-Adapta-Nokto-Maia
  4. Application Style:
    • Widget Style → Skip for now
    • Window Decorations → Adapta
    • GNOME Application Style (GTK):
      • Set both GTK2 and GTK2 themes to Adapta-Nokto
      • Icon theme → Papirus-Adapta-Nokto-Maia
      • Fallback Theme → Breeze Dark (better be safe here)
  5. Here’s where things get more complicated. KDE also has a theme engine called Kvantum, which cannot be easily changed. Fortunately, there’s an application for that! kvantum-qt5 will add “kvantum” and “kvantum-dark” to Application Style → Widget Style. Choose “kvantum-dark” and head over to the Kvantum Manager application → Change/Delete Theme → KvAdaptaDark.

KDE Adapta-Nokto Theme Not too shabby, eh?

IME

I also use Japanese as a language, and anyone who has tried installing Japanese IME on Linux know how hard it can be. I’ll try to keep it simple.
First I grabbed the following packages: fcitx fcitx-mozc fcitx-gtk2 fcitx-gtk3 fcitx-qt4 fcitx-qt5 kcm-fcitx.
Then, I added the following to ~/.xprofile:

export XMODIFIERS="@im=fcitx"
export XMODIFIER="@im=fcitx"
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export DefaultIMModule=fcitx

Lastly, it’s important to disable the system IME management:
Settings → Input Devices → Keyboard → Layouts

  • Untick all from Layout Indicator.
  • Reset all shortcuts to None.
  • Untick “Configure layouts”.

Tweaks and Fixes

Before we begin, some changes to the KDE interface will require a full system restart. However, it’s also possible to apply them immediately by restarting plasmashell only: kquitapp5 plasmashell && kstart plasmashell.

Team Viewer

Team viewer won’t work right after without a reboot. However, it’s possible to force it to start with sudo teamviewer --daemon enable.

Autokey

This application uses the LC_ALL constant to determine the system locale.
Apparently it’s not set by default so in order to fix that we have to add it to our environment: sudo sh -c 'echo LC_ALL=\"en_US.UTF-8\" >> /etc/environment'

Set local server mirrors to pacman

This command finds servers with the lowest ping and adds them to /etc/pacman.d/mirrorlist automatically:
pacman-mirrors -g

Some bashrc aliases

Nothing big here, actually. I mostly use yaourt-gui but sometimes it’s handy to have direct pacman shortcuts:

alias pact='sudo pacman -Syyu'
alias paci='sudo pacman -Syu'
alias pacr='sudo pacman -Rs'
alias paclean='sudo pacman -Rs $(pacman -Qdtq)'

Usage:

  • pact → Update sources and perform applications and system upgrade.
  • paci <Application Name> → Install a new application.
  • pacr <Application Name> → Remove an application.
  • paclean → Clean unnecessary packages and dependencies.
System Settings

I did lots of tweaks to customize the system (via the different menus), and I won’t be listing all of them here. Instead, I decided to list only the not-so-obvious ones:

  • With the default settings I experienced many UI freezes and window unresponsiveness. After lots of digging, I found out it was the compositor rendering backend. This is probably very specific to my system, but it appears I’m not the only one. I was able to fix this by changing from OpenGL to XRender in:
    Display and Monitor → Compositor → Rendering backend.
  • For some reason, my Gigabit Ethernet connection was capped to 100 MBit/s by default. To change that I had to allow auto-negotiation:
    Network → Connections → Wired Connection → Wired → Allow auto-negotiation.
  • Choosing grouped Task Manager items invokes an annoying side-by-side window effect. This is how I brought back the simple drop-down menu:
    Desktop Behavior → Desktop Effects → Untick Present Windows
Bringing back transfer dialog boxes

By default, Dolphin file transfers are handled via system notifications, but I wanted to have the good-old transfer dialog. I did that with the solution I found here:

  • In Notifications (right-click on system tray icon) → Notifications Settings… → Untick “Track file transfer and other jobs”.
  • In Task Manager settings (right-click on task manager) → Task → Untick “Show progress and status information in task buttons”.

However, KDE also has a nasty bug right now where dialog boxes won’t come to the front when invoked, so I had to create a custom rule that catches them all and forces them to come to the front:

  • Settings → Window Management → Window Rules → New
  • Window class (application) → Regular Expression → dolphin|ark
  • Window title → Regular Expression → Moving|Copying|Already|Extracting
  • Appearance & Fixes tab → Accept focus → Force → Yes
Lower timeout and smaller OSDs

Volume, IME and brightness (on laptops) OSDs appear right in the middle of the screen when invoked, and they stay there way too long for my taste. I found a solution here:

  • nano /usr/share/plasma/look-and-feel/org.kde.breeze.desktop/contents/osd/Osd.qml
    • Change property int timeout value (I lowered it from 1800 to 1500)
  • nano /usr/share/plasma/look-and-feel/org.kde.breeze.desktop/contents/osd/OsdItem.qml
    • width: Math.min(units.gridUnit * 15, Screen.desktopAvailableHeight / 10)
    • height: width - 35 (make it narrow)
    • PlasmaCore.IconItemheight: parent.height - Math.max(progressBar.height, label.height) - ((units.smallSpacing/2) * 2) + 20
    • PlasmaComponents.ProgressBaranchorsmargins: Math.floor(units.smallSpacing / 2) - 5
    • PlasmaExtra.Headinganchorsmargins: Math.floor(units.smallSpacing / 2) - 7

OSD Before and After Spot the difference. Before and after.

Add custom scripts to Dolphin Service Menu

Create a .desktop file inside ~/.local/share/kservices5/ServiceMenus/.
An example .desktop file:

[Desktop Entry]
Name=<Menu Name>
Type=Service
MimeType=all/allfiles;
Encoding=UTF-8
Icon=<system icon name OR icon path>
Actions=<Action>;
X-KDE-ServiceTypes=KonqPopupMenu/Plugin
X-KDE-Priority=TopLevel
X-KDE-Submenu=<Menu name>

[Desktop Action <Action>]
Name=Upload To Google Drive
Icon=~/Documents/Graphics/google-drive.png
Exec=/usr/bin/python2 ~/Scripts/gd-upload.py %U

At last, this command forces the system to rebuild .desktop cache: kbuildsycoca5.
Further information about option, etc.: Here and here.

Per-Activity browser profiles

KDE Activities are great. For those who don’t know, it’s basically a feature that allows having multiple desktop sessions (=activities) run at the same time. It’s like booting into a new machine without rebooting.
Most applications work just fine, but browsers usually have one session which they use. It doesn’t play very well with the idea of activities, since there’s no point of having the same browser session opened twice on two “different desktop”, and it might as well cause problems.
Inspiration for a solution I took from ff-kactivities script, which doesn’t work as I wanted.
My main browser is Opera, but I also use Firefox as a secondary option.
For Firefox there’s a built-in profile manager, but Opera allows to only specify a user data directory (thanks to Chrome, actually).

For Opera:

  1. Copy the original Opera shortcut to the user space: cp /usr/share/applications/opera.desktop ~/.local/share/applications/opera-<Activity Name>.desktop (it’s best not to include spaces in the name due to this bug).
  2. Edit the copied file nano ~/.local/share/applications/opera-<Activity Name>.desktop.
  3. Under [Desktop Entry] section change:
    • Name=Opera (<Profile Name>)
    • Exec=opera --user-data-dir="<Path To a Custom Directory>"
  4. A new shortcut with the new name that is tied to the new profile should appear in the menu. This shortcut should be used to run Opera inside the new activity.

For Firefox:

  1. Run firefox --ProfileManager.
  2. Create a new profile (it’s best to name it after the new activity, otherwise it might get messy).
  3. Copy the original Firefox shortcut to the user space: cp /usr/share/applications/firefox.desktop ~/.local/share/applications/firefox-<Activity Name>.desktop (it’s best not to include spaces in the name due to this bug).
  4. Edit the copied file nano ~/.local/share/applications/firefox-<Activity Name>.desktop.
  5. Under [Desktop Entry] section change:
    • Name=Firefox (<Profile Name>)
    • Exec=/usr/lib/firefox/firefox -P "<Profile Name>"
  6. A new shortcut with the new name that is tied to the new profile should appear in the menu. This shortcut should be used to run Firefox inside the new activity.

Note: It might be necessary to run kbuildsycoca5 in order to rebuild .desktop cache.

Per-app GTK3 theme

I found that some apps are poorly designed to work with themes (especially dark ones). One of those apps is Aegisub, which becomes unusable with a dark GTK3 theme like Adapta-Nokto.
Fortunately it’s an easy fix. I just added GTK_THEME=Breeze:light before the program name in its .desktop file Exec command, and now it opens with the light version of the KDE default Breeze theme.