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 itsvainfo
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 → My go-to web browser for the past 10 years or so.
- Media Player: mpv → Those who still use VLC these days really don’t know what they’re missing…
- Instant Messaging: telegram → It’s the best instant messaging app. Period.
- Text Editors: atom and kate → Kate comes built-in with KDE.
- Terminal: 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, gpmdp and google-musicmanager.
- Image processing: krita → Nothing is like Photoshop, but this one is the closest one on Linux… (Don’t even dare to mention Gimp).
- Launcher: ulauncher → While I like the built-in Krunner, something about Ulauncher just makes me want to use it.
- Clipboard Manager: 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
- Others:
- avidemux → For casual video editing.
- wavebox → It’s like a Swiss Army Knife for web applications. Quite resource-heavy though.
- aegisub → Best subtitles editor.
- syncplay → Watching videos together!
- autokey → Great application for keyboard automation. Should be noted that the QT version is broken so only GTK on this one.
- barrier → I can’t say how happy I am that someone picked up the open-source Synergy project.
- deluge → I use this to control remote clients. My ISP won’t allow torrenting :(
- fsearch-git → The closest one can get to Everything on Linux.
- teamviewer → Controlling remote machines without opening ports.
- tagainijisho → Japanese-English dictionary. It’s okay, but could be better.
- 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
- kde-servicemenus-getmediainfo → Right-click on any video file to get detailed info about it.
- kde-servicemenus-pkg-tools → Extremely helpful with building Arch Packages.
- kde-service-menu-reimage → Image manipulation using
imagemagick
. Very handy! - syncthingtray → A great system tray applet for managing Syncthing. Will also register a Service Menu for Dolphin. Can do multiple servers as well!
- plasma5-applets-redshift-control → A great tray applet for managing Redshift. So great that it’s probably going to be part of KDE soon!
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):
- Workspace Theme:
- Look And Feel → Adapta
- Desktop Theme → Adapta
- Splash Screen → Adapta
- Colors → Adapta Nokto, check “Apply colors to non-Qt applications”
- Icons → Papirus-Adapta-Nokto-Maia
- 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)
- 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.
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)
- Change
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.IconItem
→height: parent.height - Math.max(progressBar.height, label.height) - ((units.smallSpacing/2) * 2) + 20
PlasmaComponents.ProgressBar
→anchors
→margins: Math.floor(units.smallSpacing / 2) - 5
PlasmaExtra.Heading
→anchors
→margins: Math.floor(units.smallSpacing / 2) - 7
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:
- 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). - Edit the copied file
nano ~/.local/share/applications/opera-<Activity Name>.desktop
. - Under
[Desktop Entry]
section change:Name=Opera (<Profile Name>)
Exec=opera --user-data-dir="<Path To a Custom Directory>"
- 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:
- Run
firefox --ProfileManager
. - Create a new profile (it’s best to name it after the new activity, otherwise it might get messy).
- 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). - Edit the copied file
nano ~/.local/share/applications/firefox-<Activity Name>.desktop
. - Under
[Desktop Entry]
section change:Name=Firefox (<Profile Name>)
Exec=/usr/lib/firefox/firefox -P "<Profile Name>"
- 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.