Messing with Plasma Mobile

October 24, 2018

I bought a Nexus 5X to mess around with Plasma Mobile. I've been running KDE neon on my laptop for a little over 2 years now and have only good things to say about it.

Installing is straightforward, the offical guide is good, and there's a few blog posts that cover some more details better.

Once it's installed it's a bit confusing figuring out how to modify things as the docs kind of fall off a cliff and say "Join the mailing list". Here's how I did it.

Modifing Plasma Mobile system apps

The DevGuide gives instructions on running on QEMU. Since I have a Nexus 5X, I want to run it on that, which means either cross compile everthing, or compile on the actual device. Since plasma mobile is a full linux shell it's easy to do on the device.

The best "guide" I found was's docs. Follow the instructions by sshing to the device and running everything on the device.

To build the plasma-phone-components, first install the dependencies with:

sudo apt-get install git dpkg-dev cmake debhelper extra-cmake-modules kwayland-dev libkf5declarative-dev libkf5notifications-dev libkf5people-dev libkf5service-dev libsystemd-dev libtelepathy-qt5-dev pkg-kde-tools plasma-framework-dev qt5-default qtdeclarative5-dev fakeroot libphonenumber-dev

Next clone the repo with:

git clone

cd to the cloned directory then do your changes.

The first change I did was replace that annoying "Oh it's gorgous" sound by editing plasma-phone-components/bin/plasma-phone.cmake and replacing the paplay command with a .ogg I downloaded from the web. The new sound file can downloaded with wget then copied to the plasma-phone-componets/sounds/sitter folder.

Once your changes are ready build it with:

mkdir build
cd build

> If CMake fails with a file not found phonenumbers/phonenumberutil.h install libphonenumber-dev.

Finally install

sudo make install

then either reboot or restart whichever component you updated.

I'm also looking into build apps with python and enaml instead of qml and javascript. I'll see if I can demonstrate in another post (it works but the widgets are not mobile optimized yet).