<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>kde on espidev</title>
    <link>https://espi.dev/tags/kde/</link>
    <description>Recent content in kde on espidev</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 14 Sep 2025 19:00:00 +0000</lastBuildDate><atom:link href="https://espi.dev/tags/kde/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Akademy 2025</title>
      <link>https://espi.dev/posts/2025/09/akademy-2025/</link>
      <pubDate>Sun, 14 Sep 2025 19:00:00 +0000</pubDate>
      
      <guid>https://espi.dev/posts/2025/09/akademy-2025/</guid>
      <description>&lt;p&gt;I was able to attend the talks at Akademy this year in Berlin! The last time I attended Akademy in person was in 2022, so it was really nice being able to come back and meet everyone again.&lt;/p&gt;
&lt;p&gt;I was unfortunately not able to attend BoFs (development meetings) due to having to leave early. I did attend some meetings a few months earlier however, you can read more in my &lt;a href=&#34;https://espi.dev/posts/2025/05/plasma-sprint/&#34;&gt;Plasma sprint&lt;/a&gt; recap post.&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/09/IMG20250907203710.jpg&#34; width=&#34;300px&#34; /&gt;
&lt;h1 id=&#34;talks&#34;&gt;Talks &lt;a href=&#34;#talks&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Akademy runs with two concurrent tracks of talks, and so sometimes there were two talks at the same that I both wanted to attend, I had a hard time deciding! Here are some of the ones I attended:&lt;/p&gt;
&lt;h3 id=&#34;kde-linux-banana-growth-cycle&#34;&gt;KDE Linux: Banana Growth Cycle &lt;a href=&#34;#kde-linux-banana-growth-cycle&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Harald released KDE Linux Alpha was to the public during the talk! I hadn&amp;rsquo;t followed the project super closely, but it was awesome getting up to speed learning about the state of the project and the inner workings of how the distribution works.&lt;/p&gt;
&lt;h3 id=&#34;the-role-of-new-languages-in-the-future-of-the-qt-ecosystem&#34;&gt;The Role of New Languages in the Future of the Qt Ecosystem &lt;a href=&#34;#the-role-of-new-languages-in-the-future-of-the-qt-ecosystem&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;I was introduced to &lt;a href=&#34;https://www.qt.io/qt-bridges&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Qt Bridges&lt;/a&gt;, which is an effort to go beyond Qt bindings for other languages and tightly integrate with them (ex. Rust, Python). Once this is more mature, it will likely be an easy recommendation for others to start learning Qt with, who don&amp;rsquo;t want to use C++!&lt;/p&gt;
&lt;h3 id=&#34;kde-goals---one-year-recap&#34;&gt;KDE Goals - One Year Recap &lt;a href=&#34;#kde-goals---one-year-recap&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;It was interesting to see all the work that had been done on the KDE Goals so far!&lt;/p&gt;
&lt;p&gt;I am actually involved with one of them this time around (&amp;ldquo;We care about your input&amp;rdquo;) through my work on &lt;a href=&#34;https://invent.kde.org/plasma/plasma-keyboard&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;plasma-keyboard&lt;/a&gt;. Blog post likely coming in a few months, once that work is further along!&lt;/p&gt;
&lt;h3 id=&#34;next-gen-documentation-infrastructure-for-kde&#34;&gt;Next-Gen Documentation Infrastructure for KDE &lt;a href=&#34;#next-gen-documentation-infrastructure-for-kde&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;KDE&amp;rsquo;s reference API documentation has been a bit of sore spot for me, since it didn&amp;rsquo;t support QML very well. As a result, I usually go manually go through header files instead in the source code to figure out how to use libraries.&lt;/p&gt;
&lt;p&gt;The talk went over Nicolas&amp;rsquo;s work on doing the mammoth task of porting all of KDE&amp;rsquo;s API documentation to &lt;a href=&#34;https://doc.qt.io/qt-6/qdoc-index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QDoc&lt;/a&gt; from Doxygen, which properly supports QML. The new &lt;a href=&#34;https://api.kde.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;api.kde.org&lt;/a&gt; went live, and boy is it such an improvement! It&amp;rsquo;s much easier for me to point new developers to the Kirigami documentation now.&lt;/p&gt;
&lt;h3 id=&#34;fedora-kde-plasma-desktop-edition-is-real-now-what&#34;&gt;Fedora KDE Plasma Desktop Edition is Real, Now What? &lt;a href=&#34;#fedora-kde-plasma-desktop-edition-is-real-now-what&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;I personally use Fedora on my workstation and laptops, and so it was cool to get some history about how Plasma on Fedora was revived in the past, and plans for the future. Neal also expressed some interest in a &lt;a href=&#34;https://plasma-bigscreen.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plasma Bigscreen&lt;/a&gt; spin (similar to the one for &lt;a href=&#34;https://fedoraproject.org/spins/kde-mobile&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plasma Mobile&lt;/a&gt;), which could be pretty interesting once it becomes more mature!&lt;/p&gt;
&lt;h3 id=&#34;plasma-mobile-power-management-reliable-sleep-and-wake-ups&#34;&gt;Plasma Mobile Power Management: Reliable Sleep and Wake Ups &lt;a href=&#34;#plasma-mobile-power-management-reliable-sleep-and-wake-ups&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Bhushan gave an update on his work power management work across the Plasma stack! He obtained an NLNet grant recently for the project, &lt;a href=&#34;https://blog.bshah.in/2025/03/22/professional-update-plasma-mobile-ngi0-core-grant/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;detailed on his blog&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;discussions&#34;&gt;Discussions &lt;a href=&#34;#discussions&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;I was really happy to meet and discuss with quite a few people during the event.&lt;/p&gt;
&lt;p&gt;I met Bart, Luca, Casey and Pablo from the &lt;a href=&#34;https://postmarketos.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;postmarketOS&lt;/a&gt; project! As it is the main platform I test and develop Plasma Mobile with, it was really nice to finally meet some of their developers (I had met Bart and Luca at Akademy 2022)! I also was able to finally meet Florian, who has been collaborating with me in contributing to Plasma Mobile in the past few years!&lt;/p&gt;
&lt;p&gt;I met &lt;a href=&#34;https://dorotac.eu/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Dorota&lt;/a&gt;, who has been working on Wayland input related things for the past few years, and is in the process of pushing through updates to &lt;a href=&#34;https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/435&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;text-input-v3&lt;/a&gt;, and &lt;a href=&#34;&#34;&gt;Jakob&lt;/a&gt; who has been working on the KDE side pushing through the input related KDE goals! We discussed some input related topics, which was insightful as I worked on the client side through plasma-keyboard (and my limited Wayland knowledge).&lt;/p&gt;
&lt;p&gt;I also discussed some Kirigami page navigation related topics with &lt;a href=&#34;https://notmart.org/blog/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Marco&lt;/a&gt;. I&amp;rsquo;m doing a bit of investigation into how we can improve the way we navigate between pages in applications, and perhaps restricting the page left/right gesture into the side (similar to iOS).&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/09/IMG20250907182233.jpg&#34; width=&#34;300px&#34; /&gt;
</description>
    </item>
    
    <item>
      <title>Diving into Plasma Bigscreen</title>
      <link>https://espi.dev/posts/2025/07/plasma-bigscreen/</link>
      <pubDate>Thu, 10 Jul 2025 19:00:00 +0000</pubDate>
      
      <guid>https://espi.dev/posts/2025/07/plasma-bigscreen/</guid>
      <description>&lt;p&gt;I have been a long time &lt;a href=&#34;https://plasma-mobile.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plasma Mobile&lt;/a&gt; contributor, but I have always had a keen interest in having Linux on my TV! I have noticed that in the past few months, the &lt;a href=&#34;https://plasma-bigscreen.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plasma Bigscreen&lt;/a&gt; project has had some interest from people wanting to contribute, but there have not been any active KDE developers working on the project. Since I have some time off school (having just graduated university), I decided to take a swing at improving the project for a week.&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/real-homescreen.png&#34; width=&#34;400px&#34; /&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/homescreen.png&#34; width=&#34;400px&#34; /&gt;
&lt;h1 id=&#34;background&#34;&gt;Background &lt;a href=&#34;#background&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;a href=&#34;https://plasma-bigscreen.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plasma Bigscreen&lt;/a&gt; is a Plasma-based shell (desktop environment) for TVs and other large displays. It is designed to be used with arrow navigation using remotes or controllers.&lt;/p&gt;
&lt;p&gt;I have not been involved with the project in the past so its history is a bit murky to me. From what I know, it was originally developed with &lt;a href=&#34;https://en.wikipedia.org/wiki/Mycroft_%28software%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Mycroft&lt;/a&gt; in mind, which was a open source virtual assistant. They had even developed &lt;a href=&#34;https://www.kickstarter.com/projects/aiforeveryone/mycroft-mark-ii-the-open-voice-assistant&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;hardware&lt;/a&gt; for it, but unfortunately, the company shut down in recent years. The work by the developers at that time appears to have been sponsored by &lt;a href=&#34;https://blue-systems.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Blue Systems&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Plasma Bigscreen itself emerged around 2020 and was designed as a &amp;ldquo;Plasma shell&amp;rdquo;, in a similar way to Plasma Desktop and Plasma Mobile. Back when development was active, it provided a TV friendly launcher to launch Linux apps, and even had its own &amp;ldquo;mini-apps&amp;rdquo;, known as Mycroft Skills. These could be downloaded from the &lt;a href=&#34;https://store.kde.org/browse?cat=608&amp;amp;ord=latest&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;KDE Store&lt;/a&gt;. A TV-friendly &lt;a href=&#34;https://invent.kde.org/plasma/aura-browser&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;web browser&lt;/a&gt; and &lt;a href=&#34;https://invent.kde.org/plasma/plank-player&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;media player&lt;/a&gt; were also developed for the project. The project itself was released in the Plasma 5 release cycle, but got dropped with Plasma 6 in 2024 because it was not ported in time for the megarelease.&lt;/p&gt;
&lt;p&gt;About a year ago, the project was &lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/92&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ported&lt;/a&gt; to Plasma 6 (and Qt 6), but has not yet received a release since being removed from the Plasma release schedule.&lt;/p&gt;
&lt;h1 id=&#34;stepping-in&#34;&gt;Stepping in &lt;a href=&#34;#stepping-in&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;A few months ago, my friend &lt;a href=&#34;https://seshan.xyz/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Seshan&lt;/a&gt; started doing some work and opened a few merge requests against the Plasma Bigscreen &lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;shell repository&lt;/a&gt;. I noticed that there had basically been no activity on the repository since the initial Qt6/Plasma6 port, and the &lt;a href=&#34;https://matrix.to/#/%23plasma-bigscreen:kde.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;matrix channel&lt;/a&gt; had no active developers. I sensed an opportunity&amp;hellip;&lt;/p&gt;
&lt;h3 id=&#34;housekeeping&#34;&gt;Housekeeping &lt;a href=&#34;#housekeeping&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;I started with some housekeeping work with the repository. I added a README, and a REUSE license checker to the CI. I then ported the QML library to be a declarative plugin, and removed a bunch of abandoned code folders that were not used anywhere in the codebase.&lt;/p&gt;
&lt;p&gt;Merge requests:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/111&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/111&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/122&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/122&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ui&#34;&gt;UI &lt;a href=&#34;#ui&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;At this point prior to my work, the shell UI looked like this:&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/old-1.png&#34; width=&#34;300px&#34; /&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/old-3.png&#34; width=&#34;300px&#34; /&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/old-2.png&#34; width=&#34;300px&#34; /&gt;
&lt;p&gt;I was digging around some old Breeze Ocean &lt;a href=&#34;https://www.figma.com/design/gjuIy1rxU9xHkaJXM0pasK/old-ocean?node-id=1336-7194&amp;amp;t=ZRqHhUEJFR269CHt-0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;mockups&lt;/a&gt; and stumbled across some Bigscreen mockups by &lt;a href=&#34;https://invent.kde.org/mdelafuente&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Manuel&lt;/a&gt;. It seems the original Bigscreen UI did try to follow it, but did not quite get there. I felt inspired to fully complete implementing them.&lt;/p&gt;
&lt;h3 id=&#34;homescreen&#34;&gt;Homescreen &lt;a href=&#34;#homescreen&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;I first worked on the homescreen UI. I flattened the layout to reduce visual complexity, removing panel backgrounds and shadows where possible, while adding tooltips for the indicators. I then added an &amp;ldquo;expanded clock&amp;rdquo; view for when the user is at the top of application categories (based on the mockups), which shrinks when the user goes down the view. I ported the application lists to use ListView and delegate caching rather than having all elements having their coordinates positioned manually to improve performance. The background now also blurs when it is not the main focus of the UI.&lt;/p&gt;
&lt;video width=&#34;400&#34; controls&gt;
    &lt;source src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/homescreen.webm&#34; type=&#34;video/webm&#34;&gt;
&lt;/video&gt;
&lt;p&gt;I also added a search view based on KRunner. This allows users to search for the applications they need without needing to manually scroll through the entire application list.&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/search.png&#34; width=&#34;400px&#34; /&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/clock.webp&#34; width=&#34;400px&#34; /&gt;
&lt;p&gt;Merge requests:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/114&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/114&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/116&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/116&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/118&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/118&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/119&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/119&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/124&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/124&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/126&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/126&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;settings&#34;&gt;Settings &lt;a href=&#34;#settings&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;I redesigned the system settings view to have a sidebar with categories, with a simple two-pane look.&lt;/p&gt;
&lt;p&gt;The settings modules (KCMs) had a lot of hardcoded UI elements and layouts. I decided to make a small component library to build TV focused UIs (that still look Breeze like), and ported all of the settings modules to it. I moved away from horizontal layouts to vertical layouts for content, and put a heavier emphasis on sidebars for interacting with individual delegates. I think it looks pretty nice:&lt;/p&gt;
&lt;video width=&#34;450&#34; controls&gt;
    &lt;source src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/settings.webm&#34; type=&#34;video/webm&#34;&gt;
&lt;/video&gt;
&lt;p&gt;I ported settings modules to my controls library, and also fixed some issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Display KCM (rewritten with libkscreen backend, as it was otherwise completely broken)&lt;/li&gt;
&lt;li&gt;Sound KCM (ported to new UI)&lt;/li&gt;
&lt;li&gt;KDE Connect KCM (ported to new UI, fixed some state issues)&lt;/li&gt;
&lt;li&gt;Bigscreen KCM (ported to new UI, fix shortcuts, fixed timezone selection)&lt;/li&gt;
&lt;li&gt;Wi-Fi KCM (ported to new UI)&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/settings-bigscreen.png&#34; width=&#34;450px&#34; /&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/settings-bigscreen-sidebar.png&#34; width=&#34;450px&#34; /&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/settings-audio.png&#34; width=&#34;450px&#34; /&gt;
&lt;p&gt;Merge requests:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/115&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/115&lt;/a&gt; (rework settings app)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/129&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/129&lt;/a&gt; (controls library)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/130&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/130&lt;/a&gt; (kdeconnect)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/131&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/131&lt;/a&gt; (bigscreen settings)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/132&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/132&lt;/a&gt; (audio)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/139&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/139&lt;/a&gt; (don&amp;rsquo;t sort settings modules with bogosort)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/145&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/145&lt;/a&gt; (displays)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;startup-feedback&#34;&gt;Startup feedback &lt;a href=&#34;#startup-feedback&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The UI feedback for starting an application was broken, so I decided to overhaul it to be something similar to what we have on mobile:&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/startup-feedback.webp&#34; width=&#34;450px&#34; /&gt;
&lt;p&gt;Merge request:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/125&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/125&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;envmanager&#34;&gt;Envmanager &lt;a href=&#34;#envmanager&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I wrote &lt;a href=&#34;https://invent.kde.org/plasma/plasma-mobile/-/tree/master/envmanager&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;envmanager&lt;/a&gt; as a program in Plasma Mobile that manages shell specific configuration we need in services such as KWin. This avoids the need for distros to ship custom configs to set certain settings that the shell needs. I recently changed Plasma Mobile to use config overlays in order to achieve this, with more details can be found in my &lt;a href=&#34;https://espi.dev/posts/2025/05/plasma-sprint/#envmanager&#34;&gt;other blog post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Merge requests:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/109&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/109&lt;/a&gt; (import from Plasma Mobile, by &lt;a href=&#34;https://seshan.xyz&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Seshan&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/113&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/113&lt;/a&gt; (port to overlays)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;trying-it-out&#34;&gt;Trying it out &lt;a href=&#34;#trying-it-out&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;In order to try it out (on a TV for realsies, not just on my workstation), I used a Raspberry Pi 5. I flashed &lt;a href=&#34;https://postmarketos.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;postmarketOS&lt;/a&gt; onto it, and then manually compiled and installed the &lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plasma Bigscreen&lt;/a&gt; shell.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you are trying to build and install on postmarketOS yourself, be sure install the dependencies and pass the build flags in this manifest, as they are required: &lt;a href=&#34;https://gitlab.postmarketos.org/postmarketOS/pmaports/-/blob/ee4de8c6702a113914d6ed899c88cb9411e75427/packages/plasma-bigscreen/APKBUILD#L57&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gitlab.postmarketos.org/postmarketOS/pmaports/-/blob/ee4de8c6702a113914d6ed899c88cb9411e75427/packages/plasma-bigscreen/APKBUILD#L57&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As a user you can otherwise install &lt;code&gt;plasma-bigscreen&lt;/code&gt; from the &lt;a href=&#34;&#34;&gt;nightly repo&lt;/a&gt;, or use the &lt;a href=&#34;https://aur.archlinux.org/packages/plasma-bigscreen-git&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;AUR package&lt;/a&gt; on Arch (though I haven&amp;rsquo;t tried it).&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/real-homescreen2.png&#34; width=&#34;400px&#34; /&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/rpi.png&#34; width=&#34;300px&#34; /&gt;
&lt;p&gt;&lt;em&gt;It&amp;rsquo;s dangling off the HDMI cable, I know&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;applications&#34;&gt;Applications &lt;a href=&#34;#applications&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In its heyday, Plasma Bigscreen relied on &amp;ldquo;Mycroft Skills&amp;rdquo; to provide some media applications such as YouTube and SoundCloud. We do not have that anymore, so I tried out some other Linux applications.&lt;/p&gt;
&lt;p&gt;These are some of the ones I tried from &lt;a href=&#34;https://flathub.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Flathub&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://flathub.org/apps/tv.kodi.Kodi&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Kodi&lt;/a&gt; - Works well with arrow navigation, allows you to manage a local digital library of content&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://flathub.org/apps/rocks.shy.VacuumTube&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;VacuumTube&lt;/a&gt; - Provides the YouTube TV web UI wrapped in an application, works well with arrow navigation&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://flathub.org/apps/com.github.iwalton3.jellyfin-media-player&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Jellyfin&lt;/a&gt; - I don&amp;rsquo;t have a Jellyfin server; it launches fine but I don&amp;rsquo;t think it supports arrow navigation&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://flathub.org/apps/org.supertuxproject.SuperTux&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SuperTux&lt;/a&gt; - Fun game!&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://flathub.org/apps/net.supertuxkart.SuperTuxKart&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SuperTuxKart&lt;/a&gt; - It ran somewhat poorly on the Pi, but playing it with a controller was quite nice!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of course, we also have KDE applications designed for TV:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/aura-browser&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Aura browser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plank-player&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plank media player&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/apps1.png&#34; width=&#34;400px&#34; /&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/apps2.png&#34; width=&#34;400px&#34; /&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-bigscreen/apps3.png&#34; width=&#34;400px&#34; /&gt;
&lt;h2 id=&#34;controller-support&#34;&gt;Controller support &lt;a href=&#34;#controller-support&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;There is a repository called &lt;a href=&#34;https://invent.kde.org/plasma-bigscreen/plasma-remotecontrollers&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;plasma-remotecontrollers&lt;/a&gt;, which contains a daemon that is able to take both game controllers (ex. Xbox) and TV remotes (over &lt;a href=&#34;https://en.wikipedia.org/wiki/Consumer_Electronics_Control&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CEC&lt;/a&gt; on HDMI) and map them to keyboard arrow keys. It also has a settings module to configure the shortcuts.&lt;/p&gt;
&lt;p&gt;I was able to successfully test having an Xbox controller connected (with the daemon online), and having it map the arrow buttons to arrow keys on the system. I wasn&amp;rsquo;t able to however test the &lt;a href=&#34;https://en.wikipedia.org/wiki/Consumer_Electronics_Control&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CEC&lt;/a&gt; support, which would allow buttons on TV remotes (over HDMI) map to arrow keys.&lt;/p&gt;
&lt;h2 id=&#34;other-contributors&#34;&gt;Other contributors &lt;a href=&#34;#other-contributors&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&#34;https://invent.kde.org/seshpenguin/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Seshan&lt;/a&gt; and &lt;a href=&#34;https://invent.kde.org/usereightthreeninefive&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;User8395&lt;/a&gt; have also been contributing to the project here and there in the past few weeks, here are some highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/127&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/127&lt;/a&gt; - (Seshan - Add a UVC viewer app)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/117&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/117&lt;/a&gt; - (Seshan - Add an &amp;ldquo;app&amp;rdquo; to swap session directly from Plasma Desktop)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/123&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/123&lt;/a&gt; - (Seshan - Make Meta key go to home)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/106&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/106&lt;/a&gt; - (Seshan - Improve the favorites selector)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/147&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-bigscreen/-/merge_requests/147&lt;/a&gt; - (User8395 - Create a new bluetooth KCM)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;unresolved-issues&#34;&gt;Unresolved issues &lt;a href=&#34;#unresolved-issues&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;There is still a lot to work on in the project.&lt;/p&gt;
&lt;h3 id=&#34;input&#34;&gt;Input &lt;a href=&#34;#input&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;There isn&amp;rsquo;t a virtual keyboard to input text with that supports arrow navigation. This is something planned for &lt;a href=&#34;https://invent.kde.org/plasma/plasma-keyboard/-/issues/10&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plasma Keyboard&lt;/a&gt; however, please stay tuned!&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://invent.kde.org/plasma-bigscreen/plasma-remotecontrollers&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;plasma-remotecontrollers&lt;/a&gt;&amp;rsquo;s (TV remote/game controller support) settings module is also not yet properly ported and tested on Bigscreen.&lt;/p&gt;
&lt;p&gt;So&amp;hellip; it is probably best to still use a bluetooth keyboard and mouse for now, or an &lt;a href=&#34;https://www.amazon.ca/WeChip-W3-Wireless-Control-Projector/dp/B09XMF5YN1?dib=eyJ2IjoiMSJ9.dilDauo-Zk3MBItv6GLBeqlqqS0YpPF3W2zbSAAMkd4ksRPOq9riBr7QfCF_mpa2i8Tn-nFd6GJ1a1igaqGFCemAWIVSPQRFfbmeZPyvBtyQuZI8dXk9sTWovGAQKGxr9KnfgRiq0Zm7fLHKLqPMG9JQ2t4ubzLAqGiAmHSBBu12f_vqMCZOdfNjS15AKDc5vxyZoxyTT6cNIl-5IB8HiUQ350-jgAHEZzd4kp0ipQNTv4XLC5RVxyzcXenBkHm8XcK-kcknSSpjQSLsxFv0W-HvLONe3oahCCAlhZ8AX7I.HhSCV93tE1umG4qMsJwsCgPOdGCnGYrcl8z96E76fQw&amp;amp;dib_tag=se&amp;amp;keywords=air&amp;#43;mouse&amp;#43;remote&amp;amp;qid=1752194582&amp;amp;sr=8-3&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;air remote&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;application-design&#34;&gt;Application design &lt;a href=&#34;#application-design&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;We do not have any framework to design TV-based UIs in KDE. &lt;a href=&#34;https://invent.kde.org/plasma/aura-browser&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Aura browser&lt;/a&gt; and &lt;a href=&#34;https://invent.kde.org/plasma/plank-player&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plank&lt;/a&gt; both use Qt Quick Controls and Kirigami, but have a lot of hardcoding and custom controls in order to be usable on a TV. I do have a few TV focused components for building settings modules, but that is a very narrow set of controls.&lt;/p&gt;
&lt;h3 id=&#34;goals&#34;&gt;Goals &lt;a href=&#34;#goals&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;What are the usecases we want to achieve with a TV focused desktop environment? Do we need to also pursue making frontends for various media services? There isn&amp;rsquo;t a clear direction for the project at the moment, beyond making it a working desktop environment. In the past, this project was heavily focused on &lt;a href=&#34;https://en.wikipedia.org/wiki/Mycroft_%28software%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Mycroft&lt;/a&gt; but that no longer exists.&lt;/p&gt;
&lt;h3 id=&#34;getting-it-released-again&#34;&gt;Getting it released again &lt;a href=&#34;#getting-it-released-again&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Distributions dropped their respective &lt;code&gt;plasma-bigscreen&lt;/code&gt; packages when Plasma 6 rolled out, as it is no longer part of the Plasma release. We need to have the project return to the Plasma release cycle, hopefully starting with Plasma 6.5.&lt;/p&gt;
&lt;h1 id=&#34;overall&#34;&gt;Overall &lt;a href=&#34;#overall&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;I am fairly happy with the work that I was able to produce for Bigscreen last month. I have since returned to working on Plasma Mobile (due to having limited time as a volunteer contributor), but I can still step in and help review merge requests and guide new contributors to the project.&lt;/p&gt;
&lt;p&gt;Feel free to join us in the Bigscreen Matrix group &lt;a href=&#34;https://matrix.to/#/%23plasma-bigscreen:kde.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#plasma-bigscreen:kde.org&lt;/a&gt;!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>A libcamera port of Plasma Camera</title>
      <link>https://espi.dev/posts/2025/07/plasma-camera/</link>
      <pubDate>Mon, 07 Jul 2025 00:00:00 +0000</pubDate>
      
      <guid>https://espi.dev/posts/2025/07/plasma-camera/</guid>
      <description>&lt;p&gt;Cameras!&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-camera/app.png&#34; width=&#34;200px&#34; /&gt;
&lt;p&gt;Today, I am announcing a new &lt;a href=&#34;https://plasma-mobile.org/2025/07/08/releases-25-07/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;release&lt;/a&gt; of &lt;a href=&#34;https://invent.kde.org/plasma-mobile/plasma-camera&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plasma Camera&lt;/a&gt;, a camera application for Plasma Mobile (though it can also be used on desktop!). This release ports the application to use &lt;a href=&#34;https://libcamera.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;libcamera&lt;/a&gt; as the backend for interfacing with cameras, finally allowing for it to be used on Linux mobile devices (such as the OnePlus 6).&lt;/p&gt;
&lt;p&gt;The main porting work was done by my friend &lt;a href=&#34;https://koitu.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Andrew (koitu)&lt;/a&gt; a couple of months ago. It remained stalled on some issues, so I picked it up in the past week to complete the port and finish the application. Here is a &lt;a href=&#34;https://koitu.com/blog/plasma-camera-porting-to-libcamera/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;link&lt;/a&gt;, which has more technical details!&lt;/p&gt;
&lt;h1 id=&#34;background&#34;&gt;Background &lt;a href=&#34;#background&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Cameras have been a long neglected area in Plasma Mobile, ever since the focus shifted from &lt;a href=&#34;https://halium.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;halium&lt;/a&gt; to mainline devices. With mainline devices, libcamera drivers have been developed for them, allowing for cameras to be used in applications over Pipewire (ex. &lt;a href=&#34;https://apps.gnome.org/Snapshot/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GNOME Snapshot&lt;/a&gt;, Firefox, Chromium).&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://invent.kde.org/plasma-mobile/plasma-camera&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plasma Camera&lt;/a&gt; was originally created in 2019 with halium devices in mind, using the official &lt;a href=&#34;https://doc.qt.io/qt-6/cameraoverview.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Qt Camera&lt;/a&gt; library as a backend for interfacing with cameras. This library allows for the app to work on Android and on desktop with USB webcams. Unfortunately, Qt Camera does not currently have support for using Pipewire or libcamera directly as a backend, and so is unable to interface with the cameras on the OnePlus 6 and Pixel 3a.&lt;/p&gt;
&lt;h1 id=&#34;porting-plasma-camera&#34;&gt;Porting Plasma Camera &lt;a href=&#34;#porting-plasma-camera&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Qt Camera is a fairly high-level API designed to abstract over many different platforms, beyond Linux. Since our focus is on Linux, we decided to take this chance to port &lt;a href=&#34;https://invent.kde.org/plasma-mobile/plasma-camera&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plasma Camera&lt;/a&gt; to use libcamera directly for best control over the camera pipeline and features. Note that this approach differs from some other camera applications that use &lt;strong&gt;Pipewire&lt;/strong&gt;, which has a backend to communicate with libcamera.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://libcamera.org/api-html/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;API&lt;/a&gt; for libcamera is fairly comprehensive.&lt;/p&gt;
&lt;p&gt;In order to implement the viewfinder (camera preview), we create a worker thread that is responsible for polling the camera for frames. A series of &amp;ldquo;requests&amp;rdquo; with a framebuffers allocated to each were created, which we cycle through when polling for frames. Libcamera then gives us a frame for each poll request, in which we send to our application thread to display.&lt;/p&gt;
&lt;p&gt;For simplicity, &lt;a href=&#34;https://doc.qt.io/qt-6/qtmultimedia-index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Qt Multimedia&lt;/a&gt; was used for media processing. Frames from libcamera are wrapped in &lt;a href=&#34;https://doc.qt.io/qt-6/qimage.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QImage&lt;/a&gt;s and sent to a &lt;a href=&#34;https://doc.qt.io/qt-6/qvideosink.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QVideoSink&lt;/a&gt; to be displayed in the UI. Any transformations needed (such as rotation correction due to how sensors are mounted on phones, or mirroring for front-facing cameras) are done before the frame is added to the sink. For taking photos and videos, we reuse the viewfinder&amp;rsquo;s frames.&lt;/p&gt;
&lt;p&gt;For photos, we simply write the &lt;a href=&#34;https://doc.qt.io/qt-6/qimage.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QImage&lt;/a&gt; to the disk.&lt;/p&gt;
&lt;p&gt;Videos are much more tricky. Using &lt;a href=&#34;https://doc.qt.io/qt-6/qtmultimedia-index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Qt Multimedia&lt;/a&gt; we can build a video processing pipeline. We create a &lt;a href=&#34;https://doc.qt.io/qt-6/qmediacapturesession.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QMediaCaptureSession&lt;/a&gt; to facilitate all of the inputs and outputs needed. We then attach a media recorder &lt;a href=&#34;https://doc.qt.io/qt-6/qmediarecorder.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QMediaRecorder&lt;/a&gt; for writing the video, an audio input (&lt;a href=&#34;https://doc.qt.io/qt-6/qaudioinput.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QAudioInput&lt;/a&gt;) and a video input (&lt;a href=&#34;https://doc.qt.io/qt-6/qvideoframeinput.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QVideoFrameInput&lt;/a&gt;). We have a separate polling timer that polls at the framerate of the video (which can differ from the framerate of the viewfinder), copying frames one-by-one into the QVideoFrameInput instance (more on this later) to be encoded by QMediaRecorder.&lt;/p&gt;
&lt;p&gt;In the future, it may make sense to investigate whether we could benefit from porting to using &lt;a href=&#34;https://gstreamer.freedesktop.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GStreamer&lt;/a&gt; directly for media processing. We currently use Qt Multimedia with its ffmpeg backend. While Qt Multimedia does have an gstreamer backend, it has some &lt;a href=&#34;https://doc.qt.io/qt-6/qtmultimedia-gstreamer.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;limitations&lt;/a&gt; and was thus removed from being the default backend as a result.&lt;/p&gt;
&lt;h2 id=&#34;ui-work&#34;&gt;UI work &lt;a href=&#34;#ui-work&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I also took the liberty of doing some substantial refactoring and reworking of the UI code. We dropped some camera settings for the initial port of the application, to be restored later. However some other features were introduced.&lt;/p&gt;
&lt;p&gt;The application has these features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Photo capture&lt;/li&gt;
&lt;li&gt;Video capture&lt;/li&gt;
&lt;li&gt;Audio recording toggle for video capture&lt;/li&gt;
&lt;li&gt;EV setting (exposure value)&lt;/li&gt;
&lt;li&gt;Captured photo/video preview&lt;/li&gt;
&lt;li&gt;Video recording settings (codec, resolution, FPS, quality)&lt;/li&gt;
&lt;li&gt;Timer before taking a photo&lt;/li&gt;
&lt;li&gt;Warnings for when the encoder is detected to not be keeping up with the video stream&lt;/li&gt;
&lt;li&gt;Settings persistence&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-camera/settings.png&#34; width=&#34;200px&#34; /&gt;
&lt;h1 id=&#34;results&#34;&gt;Results &lt;a href=&#34;#results&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;With USB webcams, both photo capture and video recording work.&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-camera/webcamshot.jpg&#34; width=&#34;200px&#34; /&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-camera/webcamscreenshot.png&#34; width=&#34;200px&#34; /&gt;
&lt;p&gt;It also &lt;em&gt;sort of&lt;/em&gt; works on phones. I tested on the OnePlus 6 and Pixel 3a. I suspect that most of the issues are simply due to the camera driver not yet being mature enough, as I can replicate most of the issues on other camera applications. The photo quality and colours are not optimal, and there appears to be a fixed focal length, and so far away things look blurry.&lt;/p&gt;
&lt;p&gt;The viewfinder stream is fine on my OnePlus 6 and looks smooth. However, for my Pixel 3a, the frames start flashing light and dark colours when I point the camera at any bright light source. I suspect it is due to the camera driver overcompensating for exposure perhaps? Not sure 😅&lt;/p&gt;
&lt;p&gt;Photo capture works on both devices, outputting the frame from the viewfinder at full resolution to the disk almost instantly. Though the quality of the pictures is reminiscent of early 2000s phone photography.&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-camera/pixel3a-1.jpg&#34; width=&#34;200px&#34; /&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-camera/op6-1.jpg&#34; width=&#34;200px&#34; /&gt;
&lt;p&gt;The video recording experience however isn&amp;rsquo;t quite usable unfortunately, the video encoder does not appear to be able to keep up.&lt;/p&gt;
&lt;video width=&#34;216&#34; height=&#34;284&#34; controls&gt;
    &lt;source src=&#34;https://espi.dev/images/blog/2025/07/plasma-camera/video.mp4&#34; type=&#34;video/mp4&#34;&gt;
&lt;/video&gt;
&lt;h1 id=&#34;limitations&#34;&gt;Limitations &lt;a href=&#34;#limitations&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;h2 id=&#34;video-recording-issues-on-phones&#34;&gt;Video recording issues on phones &lt;a href=&#34;#video-recording-issues-on-phones&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The main barrier to video recording seems to be the performance of the video encoder. I&amp;rsquo;ve noticed on both phones that many frame calls to &lt;a href=&#34;https://doc.qt.io/qt-6/qvideoframeinput.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QVideoFrameInput&lt;/a&gt; fail because &lt;a href=&#34;https://doc.qt.io/qt-6/qmediarecorder.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QMediaRecorder&lt;/a&gt;&amp;rsquo;s queue is simply full and cannot keep up with the amount of frames coming in. This can be mitigated somewhat by playing with the video recording settings. I&amp;rsquo;ve generally found the MPEG2 codec to be substantially faster for devices, though it gives very ugly artifacting at low quality, and sometimes gives an error. Of course, lowering the resolution and FPS also can help too.&lt;/p&gt;
&lt;p&gt;For each frame given to &lt;a href=&#34;https://doc.qt.io/qt-6/qvideoframeinput.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QVideoFrameInput&lt;/a&gt;, I also set its &lt;a href=&#34;https://en.wikipedia.org/wiki/Presentation_timestamp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;timestamp&lt;/a&gt; to ensure that the encoder places it at the correct place. However, when we start dropping frames due to the encoder being full, we end up with gaps in the video without a frame, which I suspect is what is causing the pixelated &amp;ldquo;corrupt video&amp;rdquo; effect (though it only happens with H264, and not MPEG2 encoding?). We cannot really queue frames for the encoder, because we would very quickly run out of memory. I have an &lt;a href=&#34;https://invent.kde.org/plasma-mobile/plasma-camera/-/issues/16&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;open issue&lt;/a&gt; about this since I am not really sure how to address it yet.&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-camera/videoslow.png&#34; width=&#34;200px&#34; /&gt;
&lt;h2 id=&#34;rotation-issues&#34;&gt;Rotation issues &lt;a href=&#34;#rotation-issues&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Device rotation can be a bit of a problem with the application right now. We already account for the screen orientation in comparison to the camera orientation, which is reported as a &lt;a href=&#34;https://libcamera.org/api-html/namespacelibcamera_1_1properties.html#a3b25103242b577663c87eb8d492fe94e&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;property&lt;/a&gt; by libcamera.&lt;/p&gt;
&lt;p&gt;The viewfinder however can be a problem when the display rotation is different from the screen&amp;rsquo;s orientation (ex. rotated 90, 180, 270 degrees). This is done by the compositor (ex. KWin), the application only sees that the window size has changed. However, that means the viewfinder is rotated as well! We are able to adjust for this in taken photos and video by reading the rotation sensor data (with &lt;a href=&#34;https://doc.qt.io/qt-6/qorientationsensor.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QOrientationSensor&lt;/a&gt;/iio-sensor-proxy), however we cannot do the same for the viewfinder because we don&amp;rsquo;t know which orientation the compositor has the application in, which could be different from the sensor due to rotation-lock and manual settings.&lt;/p&gt;
&lt;p&gt;I recommend keeping an &lt;strong&gt;orientation lock&lt;/strong&gt; on &amp;ldquo;portrait&amp;rdquo; mode when using the application on a phone until we find a fix, that way the viewfinder does not get mismatched from what you see. We are tracking this issue here: &lt;a href=&#34;https://invent.kde.org/plasma-mobile/plasma-camera/-/issues/14&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma-mobile/plasma-camera/-/issues/14&lt;/a&gt;&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/07/plasma-camera/rotationbad.png&#34; width=&#34;400px&#34; /&gt;
&lt;h2 id=&#34;missing-camera-controls&#34;&gt;Missing camera controls &lt;a href=&#34;#missing-camera-controls&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The drivers for the OnePlus 6 and Pixel 3a seem to be missing almost all of the libcamera &lt;a href=&#34;https://libcamera.org/api-html/namespacelibcamera_1_1controls.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;controls&lt;/a&gt;. At least, calling &lt;code&gt;camera-&amp;gt;controls()&lt;/code&gt; (&lt;a href=&#34;https://libcamera.org/api-html/classlibcamera_1_1Camera.html#a10ef308df9bfb61c9ad825f4580074a7&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;doc&lt;/a&gt;) gives only the &lt;a href=&#34;https://libcamera.org/api-html/namespacelibcamera_1_1controls.html#a76f39d8c7048f1cea3af63bd2839d6b4&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Contrast&lt;/a&gt; control from libcamera. There are other controls that I would like to implement once they become available, such as &lt;a href=&#34;https://libcamera.org/api-html/namespacelibcamera_1_1controls.html#aeece9e5e8fd738c5446efbdb06f93aac&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;focus windows&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once these are implemented in the driver (or if it&amp;rsquo;s fixed as an issue on our side) and support is added in the application, we will have a lot more camera features to play with!&lt;/p&gt;
&lt;h1 id=&#34;conclusion&#34;&gt;Conclusion &lt;a href=&#34;#conclusion&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;We finally have a base on to use for the camera stack on Linux mobile. I hope the application continues to improve as drivers and camera support get better over time on these devices.&lt;/p&gt;
&lt;p&gt;So, give it a try! And feel free to come join us to talk about it in the &lt;a href=&#34;https://matrix.to/#/%23plasmamobile:matrix.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plasma Mobile matrix channel&lt;/a&gt;!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>A Plasma (Mobile) Sprint in Graz</title>
      <link>https://espi.dev/posts/2025/05/plasma-sprint/</link>
      <pubDate>Sat, 03 May 2025 11:26:29 +0100</pubDate>
      
      <guid>https://espi.dev/posts/2025/05/plasma-sprint/</guid>
      <description>&lt;p&gt;I attended the Plasma sprint this year in Graz, Austria!&lt;/p&gt;
&lt;p&gt;It has been a couple of years since I have last met KDE contributors in-person (Akademy 2022), so I really looked forward to finally being able to meet again. This sprint was the first time I met &lt;a href=&#34;https://blog.bshah.in&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Bhushan&lt;/a&gt;, who is a long time contributor to Plasma Mobile, and was the one that initially guided me through contributions! He recently got funding to overhaul and improve the power management stack we have in Plasma Mobile, which you can read about &lt;a href=&#34;https://blog.bshah.in/2025/03/22/professional-update-plasma-mobile-ngi0-core-grant/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;here&lt;/a&gt;. I also met &lt;a href=&#34;https://lprod.dev/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Luis&lt;/a&gt; for the first time, who has been contributing to the project for quite a while, notably having contributed the system navigation gestures we have now!&lt;/p&gt;
&lt;p&gt;I brought my &lt;a href=&#34;https://invent.kde.org/kenoi&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;brother&lt;/a&gt; along as well, who is starting to also make contributions to KDE. After the sprint, we travelled around a bit (I will eventually have another post about it, link coming when that happens). This post will focus on just the sprint itself.&lt;/p&gt;
&lt;p&gt;Be sure to also check out blog posts about the sprint by other Plasma developers over at &lt;a href=&#34;https://planet.kde.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;planet.kde.org&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/05/sprint.jpg&#34; width=500px/&gt;
&lt;p&gt;&lt;em&gt;Photo by Kevin Krammer&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&#34;lockscreen-overlays-and-more&#34;&gt;Lockscreen overlays and more &lt;a href=&#34;#lockscreen-overlays-and-more&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;A few years ago, Aleix implemented the ability to allow windows to be overlaid on top of the lockscreen. We utilize this for the Phone dialer application in order to have the call screen show up over the lockscreen. In the past, I had made some attempts to also have the power menu, status bar, and quick settings panel also shown over the lockscreen, but was unsuccessful. At the sprint, we were able to make it happen!&lt;/p&gt;
&lt;p&gt;For the power menu, Bhushan first investigated why the holding the power button on the lockscreen did not get passed to the shell. After a rabbit chase through many different places, he was able to create a &lt;a href=&#34;https://invent.kde.org/plasma/kwin/-/merge_requests/7554&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;fix&lt;/a&gt;. With Luis and the KWin developers, he also figured out why lockscreen overlays would get stuck visually after they are closed (&lt;a href=&#34;https://invent.kde.org/plasma/kwin/-/merge_requests/176&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;fix&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;After those fixes were done, Bhushan and I spent some time figuring out why my old merge requests did not work. We were eventually able to fix it up and get it working (&lt;a href=&#34;https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/2406&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;video in this merge request&lt;/a&gt;)! We also investigated overlaying the status bar and quick settings panel from the shell to improve the lockscreen load time. While I was not able to finish the implementation at the sprint, we got the fundamental parts working too!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/kwin/-/merge_requests/6752&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/kwin/-/merge_requests/6752&lt;/a&gt; (Restore lockscreen overlay test)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/270&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/270&lt;/a&gt; (Status bar and quick settings overlay on lockscreen)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/2406&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/2406&lt;/a&gt; (Power screen overlay on lockscreen)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also did some more investigation into the performance of the lockscreen. We currently load a new status bar and quick settings panel when the device is locked (as part of the lockscreen theme), which have some components that load quite slowly.&lt;/p&gt;
&lt;p&gt;Merge requests related to this investigation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/714&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/714&lt;/a&gt; (Plasma-nm singleton)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/713&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/713&lt;/a&gt; (Load speed test)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/715&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/715&lt;/a&gt; (caffeine quicksetting: Port away from DataSource)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/718&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/718&lt;/a&gt; (record quicksetting: load less things initially)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/710&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/710&lt;/a&gt; (Lockscreen keypad sync load)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;kirigami&#34;&gt;Kirigami &lt;a href=&#34;#kirigami&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;a href=&#34;https://notmart.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Marco&lt;/a&gt; was at the sprint, and so I had the opportunity to discuss some mobile related issues with him.&lt;/p&gt;
&lt;p&gt;Marco made the following fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/frameworks/kirigami/-/merge_requests/1784&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/frameworks/kirigami/-/merge_requests/1784&lt;/a&gt; (Fix vertical/horizontal touch drag detection on PageRow, so that the direction of movement is correct)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/frameworks/kirigami/-/merge_requests/1785&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/frameworks/kirigami/-/merge_requests/1785&lt;/a&gt; (Fix back button visibility behavior with certain page row setups)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;broader-discussions&#34;&gt;Broader Discussions &lt;a href=&#34;#broader-discussions&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;We were able to discuss some topics together at the sprint with other Plasma developers!&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/05/sprint-hacker.jpg&#34; width=300px/&gt;
&lt;p&gt;&lt;em&gt;Photo by Kevin Krammer&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;haptics-stack&#34;&gt;Haptics stack &lt;a href=&#34;#haptics-stack&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;We discussed the stack that we use for vibrations and LEDs (&lt;a href=&#34;https://invent.kde.org/teams/plasma-mobile/issues/-/issues/10&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;issue&lt;/a&gt;). We currently use &lt;a href=&#34;https://gitlab.com/ubports/development/core/hfd-service&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;hfd-service&lt;/a&gt; (from Ubuntu Touch) as a backend to interact with the hardware, and &lt;a href=&#34;https://github.com/qt/qtfeedback&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QtFeedback&lt;/a&gt; on top for the system and applications to interact with them. However, QtFeedback is no longer developed by Qt (though we have &lt;a href=&#34;https://invent.kde.org/jbbgameich/ktactilefeedback&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;forked&lt;/a&gt; it within KDE to port it to Qt 6), and gives a very simplistic API for vibrations (on and off with set durations). We also have had the issue that vibrations are not customized per-device, and so events that work fine on one device might feel too heavy on others, or not resonate at all.&lt;/p&gt;
&lt;p&gt;We ended up deciding on giving &lt;a href=&#34;https://gitlab.freedesktop.org/agx/feedbackd/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;feedbackd&lt;/a&gt; (used in Phosh) a try, using it directly in the shell and implementing a feedbackd backend in our fork of QtFeedback (&lt;a href=&#34;https://invent.kde.org/jbbgameich/ktactilefeedback&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;KTactileFeedback&lt;/a&gt;) for backward compatibility. This allows us to potentially adopt the event system that feedbackd provides, so that they can be adapted to devices based on how they feel. While feedbackd does has an DBus API for applications, we will eventually want to look at having a generic portal API for applications on having haptics.&lt;/p&gt;
&lt;p&gt;I created the following merge requests:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/719&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/719&lt;/a&gt; (Adopt it in the shell)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/jbbgameich/ktactilefeedback/-/merge_requests/2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/jbbgameich/ktactilefeedback/-/merge_requests/2&lt;/a&gt; (Add a feedbackd backend to QtFeedback/KTactileFeedback)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;notch-support&#34;&gt;Notch Support &lt;a href=&#34;#notch-support&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Plasma Mobile does not currently have any support for notches or rounded corners. Phosh developers have already proposed a &lt;a href=&#34;https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/372&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;new Wayland specification&lt;/a&gt; that will allow the shell and applications alike to receive information about screen cutouts. We discussed it with the KWin developers to get it on their radar, and decided upon pursuing an experimental implementation of it in KWin, and using it in the shell to make any UI adjustments necessary. Qt 6.9 also recently introduced a screen edge &amp;ldquo;safe areas&amp;rdquo; &lt;a href=&#34;https://www.qt.io/blog/expanded-client-areas-and-safe-areas-in-qt-6.9&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;API&lt;/a&gt; (for Android and iOS), and so we can eventually also implement a backend there to support it on Linux.&lt;/p&gt;
&lt;h3 id=&#34;envmanager&#34;&gt;Envmanager &lt;a href=&#34;#envmanager&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Plasma Mobile has a service called &lt;a href=&#34;https://invent.kde.org/plasma/plasma-mobile/-/tree/master/envmanager&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;envmanager&lt;/a&gt; that manages configurations that are used by both Desktop and Mobile, and swaps configuration as necessary between the sessions. There are many drawbacks to this approach because it affects the user&amp;rsquo;s Plasma configurations directly, and needs to run before session startup (and so bad stuff can happen if it is uninstalled before logging into the desktop session). We discussed having a more robust approach, and one of the ideas floated was to add a path to &lt;code&gt;XDG_CONFIG_DIRS&lt;/code&gt; in the Plasma Mobile startup script, where we can have a &amp;ldquo;Plasma Mobile&amp;rdquo; folder that only the shell controls to provide our intended configuration. Our configuration framework (KConfig) supports overlaying config options from various locations, and so we can have the user&amp;rsquo;s config be overlaid on top of our &amp;ldquo;Plasma Mobile&amp;rdquo; config. &lt;code&gt;envmanager&lt;/code&gt; can then directly write to this folder without having to affect the user&amp;rsquo;s configuration, and without affecting the Desktop session.&lt;/p&gt;
&lt;p&gt;I created a merge request to implement this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/723&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/723&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;power-management&#34;&gt;Power management &lt;a href=&#34;#power-management&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Bhushan has been doing a lot of work in this area recently, and did some work on this at the sprint (hopefully his blog post will come soon!). Jakob, who has done a lot of work on overhauling the power management stack in the past year, was also at the sprint. Together, we had a conversation about the future of the power management KCM. Currently, there are separate desktop and mobile KCMs for power, mainly because the desktop one contains far too many options that are not relevant on mobile. The mobile KCM has suffered from some bitrot in the past, and so I had moved the code to be located in the same repository as the desktop one in order to share code. We discussed potentially merging the two KCMs, but decided on continuing with the status quo for now because of the complexity involved in both having good UX, and in how to streamline the desktop settings to have some features apply more directly to mobile. It is a much larger topic that could perhaps be suited for a future GSoC project.&lt;/p&gt;
&lt;p&gt;I created a merge request to share more code with the desktop KCM for the time being:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://invent.kde.org/plasma/powerdevil/-/merge_requests/543&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/plasma/powerdevil/-/merge_requests/543&lt;/a&gt; (KCM KConfig XT port)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;thank-you&#34;&gt;Thank you &lt;a href=&#34;#thank-you&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;I am really glad to have been able to finally attend an in-person KDE event, it was really productive! Thank you for having me!&lt;/p&gt;
&lt;p&gt;I know I have not really shared many updates about Plasma Mobile in the past few years, mainly due to being busy with school and work. Rest assured, the project is still moving along, I plan to hopefully push through a new blog post on &lt;a href=&#34;https://plasma-mobile.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;plasma-mobile.org&lt;/a&gt; in the coming weeks!&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/05/sprint-mobile-group.webp&#34; width=300px/&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2025/05/graz.webp&#34; width=300px/&gt;
</description>
    </item>
    
    <item>
      <title>Plasma Mobile: tuned up to 6!</title>
      <link>https://espi.dev/posts/2023/12/plasma-mobile-towards-6/</link>
      <pubDate>Wed, 13 Dec 2023 20:26:29 +0100</pubDate>
      
      <guid>https://espi.dev/posts/2023/12/plasma-mobile-towards-6/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;There are some plans to have a more official blog post on the &lt;a href=&#34;https://plasma-mobile.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;plasma-mobile.org&lt;/a&gt;, these are my personal ramblings below&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Plasma 6 is coming together nicely on the desktop!&lt;/p&gt;
&lt;p&gt;Coming back from hiatus, I was pleasantly greeted by a much more working session than when I last saw it in May; I have now completely switched over to it on my main machine!&lt;/p&gt;
&lt;p&gt;On the other hand, there is still a lot of work to do on mobile to prepare it for the Plasma 6 release in February. I will outline the current situation and the work I have done in the past few months in order to make Plasma 6 a possibility for Plasma Mobile.&lt;/p&gt;
&lt;h1 id=&#34;context&#34;&gt;Context &lt;a href=&#34;#context&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;I started working on KDE projects again in October (after an 8 month hiatus), slowly getting back into the groove of things. I unfortunately do not have as much spare time these days after work and school, but I try to do what I can!&lt;/p&gt;
&lt;h1 id=&#34;the-distro-situation&#34;&gt;The distro situation &lt;a href=&#34;#the-distro-situation&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;For Plasma Mobile shell development on phones, we need to have distributions with KDE packages built from git master.&lt;/p&gt;
&lt;p&gt;Many years ago, we used to have Neon images with Plasma Mobile that were maintained by Bhushan that were used for development, but required a large investment in time to maintain. We no longer have the (human) resources to maintain a distribution, so we are dependent on working with other distributions for development images.&lt;/p&gt;
&lt;p&gt;Until this year, Manjaro had helped us by providing daily development images. Unfortunately, I have not really had contact with the project since &lt;a href=&#34;https://blog.strits.dk/i-no-longer-work-for-manjaro/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;one of their employees left&lt;/a&gt; earlier this year.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;As a sidenote: Maintenance of the Manjaro Plasma Mobile images seemed to be inactive in the past few months, though there have been some encouraging &lt;a href=&#34;https://forum.manjaro.org/t/arm-stable-update-2023-11-15-kernels-opi5-plus-kodi-plasma-pipewire-plasma-gnome-45/151602/17&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;signs from the forum&lt;/a&gt; in the past few days?&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;And so, there was a predicament. While I could develop the Plasma 6 mobile shell on the desktop, I had no way of testing it on a phone.&lt;/p&gt;
&lt;p&gt;Thankfully, &lt;a href=&#34;https://postmarketos.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;postmarketOS&lt;/a&gt; graciously took up the effort of maintaining a repository of KDE packages that track git master. Instructions can be viewed &lt;a href=&#34;https://wiki.postmarketos.org/wiki/Nightly&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;here&lt;/a&gt;. With the Plasma 6 beta release, there will be postmarketOS images that can be easily downloaded and tested with!&lt;/p&gt;
&lt;p&gt;Seshan has also been working on an immutable distro &lt;a href=&#34;https://sineware.ca/prolinux/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ProLinux&lt;/a&gt; which has images that track git master as well, which have been useful to test with.&lt;/p&gt;
&lt;h1 id=&#34;porting&#34;&gt;Porting &lt;a href=&#34;#porting&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;A big part of the porting effort is simply porting the shell and applications to Qt 6 and KDE Frameworks 6.&lt;/p&gt;
&lt;p&gt;In the case of the &lt;strong&gt;shell&lt;/strong&gt;, porting to Qt 6 was luckily fairly trivial. There were far more changes to the base KDE frameworks as package structures and QML plugins were being reworked, though that has stabilized in recent months. There are still some major regressions that need to be resolved before February (will be discussed later), but I am reasonably confident that the shell will in good shape by then.&lt;/p&gt;
&lt;p&gt;For &lt;strong&gt;applications&lt;/strong&gt; however, it is more of a mixed bag.&lt;/p&gt;
&lt;p&gt;Several applications do not have active maintainers, and others need much more polish for mobile usage (as not all application developers have phones to test with).&lt;/p&gt;
&lt;p&gt;Technically, I am responsible for &lt;strong&gt;KClock&lt;/strong&gt;, &lt;strong&gt;KWeather&lt;/strong&gt; and &lt;strong&gt;KRecorder&lt;/strong&gt;, but I have typically done contributions to a multitude of applications to ensure that they work well on mobile. This time around though, I have only been really able to work on the shell with the limited spare time I have, and so I have not been able to do some of the heavier porting work for applications.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;KRecorder&lt;/strong&gt; in particular is unlikely to be ported in time for Plasma 6 as it depends on Qt Multimedia, which has had significant changes in Qt 6.&lt;/p&gt;
&lt;p&gt;Beyond porting, I have also noticed some significant mobile-specific regressions in other applications that have been ported, which need to be addressed.&lt;/p&gt;
&lt;p&gt;I would encourage anyone who is thinking of &lt;strong&gt;contributing&lt;/strong&gt; to KDE to start here, application development is a very good way to learn Qt and get into further KDE contributions (as it is quite self-contained, compared to, say, the shell).&lt;/p&gt;
&lt;h1 id=&#34;styles&#34;&gt;Styles &lt;a href=&#34;#styles&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Plasma Mobile currently uses a separate Qt Quick style from the desktop (qqc2-breeze-style vs. qqc2-desktop-style), in which maintenance was lagging for Plasma 6.&lt;/p&gt;
&lt;p&gt;The separate style is needed in order to have better performance, as it avoids some of the complex theming that the desktop needs to use for unifying styles between Qt Quick and Qt Widgets applications. However, it is a maintenance burden.&lt;/p&gt;
&lt;p&gt;In November, I did a bunch of work on qqc2-breeze-style in order fix Plasma 6 related regressions, and to make it render more similarly to qqc2-desktop-style.&lt;/p&gt;
&lt;h1 id=&#34;task-switcher-moving-to-kwin&#34;&gt;Task Switcher moving to KWin &lt;a href=&#34;#task-switcher-moving-to-kwin&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;In Plasma 5, the task switcher was built into the &lt;code&gt;plasmashell&lt;/code&gt; process (which contains the homescreen, panels and most of what you see in Plasma), piping the application thumbnails from KWin.&lt;/p&gt;
&lt;p&gt;In order to improve performance, it was a bit of a hack; the task switcher was built into the homescreen, so when it was opened, apps were minimized, showing the task switcher underneath. It was not optimal though, as it required convoluted logic in order to swap between the homescreen and task switcher views, and the thumbnails provided from the stream from KWin were not optimal performance wise.&lt;/p&gt;
&lt;p&gt;With Plasma 6, I am moving the task switcher to be a self-contained KWin effect instead, which is inline with how the Desktop overview effect is implemented. This moves the task switcher off of &lt;code&gt;plasmashell&lt;/code&gt; to KWin, cleaning up the code and potentially having performance improvements with how the application previews will be displayed.&lt;/p&gt;
&lt;p&gt;We can also make use of KWin&amp;rsquo;s infrastructure for gesture-only mode (removing the navigation bar), rather than relying on a hack with invisible panels in order to trigger it.&lt;/p&gt;
&lt;p&gt;The move has been a bit problematic though, as KWin developed regressions during Plasma 6 development that cause effect rendering to be broken on the PinePhone and SDM845 devices (possibly due to OpenGL versions?), but the issues are being worked on. &lt;em&gt;As of Dec. 13, this has been fixed.&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&#34;rewriting-folio---the-homescreen&#34;&gt;Rewriting Folio - the homescreen &lt;a href=&#34;#rewriting-folio---the-homescreen&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;em&gt;Note: I will be writing a separate blog post that goes much more into detail in the future.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For some context, the default homescreen in Plasma 5 is Halcyon, which provides a simple way have a list of applications, while allowing them to be pinned and grouped into folders.&lt;/p&gt;
&lt;p&gt;We also have the Folio homescreen, which was the original default (before Plasma 5.26) that was more similar to a traditional homescreen, having favourites pages and an application drawer to access the full list of apps.&lt;/p&gt;
&lt;p&gt;The problem with Folio in Plasma 5 though was that it was particularly unstable (known to brick the shell), and was effectively an extended desktop canvas, so screen rotations and scaling changes would completely ruin the layout.&lt;/p&gt;
&lt;p&gt;I knew that it would require a very significant effort in order to rewrite it and fix its issues, so I developed Halcyon as a stopgap solution until I had the time to fix Folio.&lt;/p&gt;
&lt;hr&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2023/12/folio.png&#34; width=200px/&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2023/12/folio-2.png&#34; width=200px/&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2023/12/folio-3.png&#34; width=200px/&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2023/12/folio-4.png&#34; width=200px/&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2023/12/folio-5.png&#34; width=200px/&gt;
&lt;p&gt;And so I spent about 5 weeks starting in October working solely on the Folio rewrite! It will be shipping as the default homescreen once again in Plasma 6.&lt;/p&gt;
&lt;p&gt;I am pretty happy with how it turned out, it supports:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An app drawer&lt;/li&gt;
&lt;li&gt;KRunner search&lt;/li&gt;
&lt;li&gt;Folders&lt;/li&gt;
&lt;li&gt;Pages&lt;/li&gt;
&lt;li&gt;Drag and drop between all of the above&lt;/li&gt;
&lt;li&gt;Applets/widgets&lt;/li&gt;
&lt;li&gt;Row-column flipping for screen rotations&lt;/li&gt;
&lt;li&gt;Customizable row and column counts&lt;/li&gt;
&lt;li&gt;Customizable page transitions&lt;/li&gt;
&lt;li&gt;Ability to import and export homescreen layouts as files&lt;/li&gt;
&lt;li&gt;&amp;hellip; and more!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Applets in particular are pretty exciting, though still need some work. They use the same infrastructure that the Desktop uses, so we can use existing applets!&lt;/p&gt;
&lt;p&gt;New applets for mobile apps can eventually also be developed, pending interest.&lt;/p&gt;
&lt;h1 id=&#34;a-new-service-plasma-mobile-envmanager&#34;&gt;A new service: &lt;code&gt;plasma-mobile-envmanager&lt;/code&gt; &lt;a href=&#34;#a-new-service-plasma-mobile-envmanager&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Plasma Mobile relies on some configurations (set in files) for KWin and the shell in general that directly conflict with what Plasma Desktop expects.&lt;/p&gt;
&lt;p&gt;For example, we use different look-and-feel packages to provide pieces such as the lockscreen theme, as well as tweaks for features such as disabling window decorations.&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;Plasma 5&lt;/strong&gt;, this was accomplished by having the distribution ship config files that are installed to &lt;code&gt;/etc/xdg&lt;/code&gt; (from &lt;a href=&#34;https://invent.kde.org/plasma-mobile/plasma-phone-settings&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;plasma-phone-settings&lt;/a&gt;), which overrode Plasma related settings for users.&lt;/p&gt;
&lt;p&gt;This was problematic in that this would affect the desktop session, making it impossible to use both the desktop and mobile sessions without doing some tweaking before switching. This also made it a barrier to be easily installable as &amp;ldquo;just another desktop environment&amp;rdquo;, which was a common complaint.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;In &lt;strong&gt;Plasma 6&lt;/strong&gt;, I introduced &lt;code&gt;plasma-mobile-envmanager&lt;/code&gt; a utility that runs prior to shell startup that automatically does the configuration switching between what is needed for Plasma Mobile, and what is needed for Plasma Desktop.&lt;/p&gt;
&lt;p&gt;This now allows distros to drop having to install hardcoded configs onto the system, and makes it easy to simply install as a separate desktop environment for existing systems.&lt;/p&gt;
&lt;h1 id=&#34;a-new-application-plasma-mobile-initial-start&#34;&gt;A new application: &lt;code&gt;plasma-mobile-initial-start&lt;/code&gt; &lt;a href=&#34;#a-new-application-plasma-mobile-initial-start&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;I added an application that runs when starting Plasma Mobile for the first time, guiding users on configuration on their system, from setting up the Wi-Fi, to configuring cellular settings.&lt;/p&gt;
&lt;p&gt;It currently exists as an application that runs when the shell is started for the first time.&lt;/p&gt;
&lt;p&gt;However, it likely needs to eventually be ported to be a true first-start wizard similar to what GNOME has as well as &lt;code&gt;pico-wizard&lt;/code&gt; (used by Manjaro), in order to have elevated permissions so that the user does not have to be prompted for their password.&lt;/p&gt;
&lt;h1 id=&#34;docked-mode&#34;&gt;Docked mode &lt;a href=&#34;#docked-mode&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;With Plasma 6, I am making some steps toward improving support with attaching a monitor, keyboard and mouse.&lt;/p&gt;
&lt;p&gt;A new &amp;ldquo;Docked Mode&amp;rdquo; quick setting was introduced that, when activated:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bring back window decorations&lt;/li&gt;
&lt;li&gt;Stops opening application windows in fullscreen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Eventually, some more work can be done in order to have the external monitors load desktop panels instead of the mobile ones, which should make the experience equivalent to Plasma Desktop.&lt;/p&gt;
&lt;h1 id=&#34;telephony&#34;&gt;Telephony &lt;a href=&#34;#telephony&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;I have historically not done much work on the telephony front.&lt;/p&gt;
&lt;p&gt;There have luckily been contributors that have worked on Spacebar and Plasma Dialer (shoutout to Michael and Alexey!) in the past few years, allowing me to focus on other things.&lt;/p&gt;
&lt;p&gt;From recent testing though, there have been a lot of regressions in Plasma 6, so I likely need to start learning the ropes of how it all works in order to help out. Of particular focus for me will be improving the quality of the cellular settings and overall shell integration with ModemManager.&lt;/p&gt;
&lt;p&gt;My &lt;em&gt;current&lt;/em&gt; carrier only supports VoLTE so I have been unable to test calling, and I have had trouble with my PinePhone in getting cellular working, but I will probably try buying a USB modem to do testing on the desktop with.&lt;/p&gt;
&lt;h1 id=&#34;settings-module-consolidation&#34;&gt;Settings module consolidation &lt;a href=&#34;#settings-module-consolidation&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;In Plasma 5, a lot of mobile specific settings modules lived outside of the Plasma Mobile &lt;a href=&#34;https://invent.kde.org/plasma/plasma-mobile&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;repository&lt;/a&gt;, in places such as the settings application.&lt;/p&gt;
&lt;p&gt;I moved these settings modules together to be in the Plasma Mobile repository. This also removes the need to have a separate build of &lt;a href=&#34;https://invent.kde.org/plasma/plasma-nm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;plasma-nm&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;other-things-to-address&#34;&gt;Other things to address &lt;a href=&#34;#other-things-to-address&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;A big pain point in Plasma 5 was the mobile lockscreen. There were many cases of it crashing (causing the white text on black screen issue) as well as extraordinarily slow load times.&lt;/p&gt;
&lt;p&gt;Much of it likely stems from the fact that it has to load the QML files right after the device locks, which can be slow and sometimes has graphical issues when coupled with suspend. I have tried to optimize the load time in the past, but it may be the case that we need to rethink the architecture a bit, not sure&amp;hellip;&lt;/p&gt;
&lt;h1 id=&#34;conclusion&#34;&gt;Conclusion &lt;a href=&#34;#conclusion&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;I will be returning to a university term in January, likely making it harder for me to contribute for a few months again.&lt;/p&gt;
&lt;p&gt;I have luckily finished most of the features I have wanted to get done for Plasma 6, and am now spending my effort fixing bugs and improving code quality. I hope that we can have a successful, bug-free Plasma Mobile release in February, but it is quite daunting at the moment as a single volunteer contributor for the mobile shell.&lt;/p&gt;
&lt;p&gt;If you are interested in helping contribute, I encourage you to join the &lt;a href=&#34;https://matrix.to/#/#plasmamobile:matrix.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plasma Mobile matrix room&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;There is also some documentation on the &lt;a href=&#34;https://invent.kde.org/plasma/plasma-mobile/-/wikis/home&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;wiki&lt;/a&gt; that can help you get started.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;go konqi!&lt;/em&gt;&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2022/10/konqi-calling.png&#34; width=300px/&gt;
</description>
    </item>
    
    <item>
      <title>Akademy 2022</title>
      <link>https://espi.dev/posts/2022/10/akademy-2022/</link>
      <pubDate>Tue, 11 Oct 2022 11:26:29 +0100</pubDate>
      
      <guid>https://espi.dev/posts/2022/10/akademy-2022/</guid>
      <description>&lt;p&gt;This year, I had the amazing opportunity to attend Akademy in person (@ Barcelona) for the first time!&lt;/p&gt;
&lt;p&gt;For context, I first started contributing to Plasma Mobile in 2020, right around when easily testable hardware (ex. PinePhone) was taking shape. I originally started with some contributions to some applications to learn Qt and C++, but have since then taken more responsibility with tasks from all around the software stack.&lt;/p&gt;
&lt;h1 id=&#34;talks&#34;&gt;Talks &lt;a href=&#34;#talks&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;We first had a welcome event on Friday where attendees got to know each other. It was quite cool to finally be able to match usernames to faces, and finally meet the people I had been working with in-person.&lt;/p&gt;
&lt;p&gt;I also met up with amazing people from the postmarketOS team! I had the chance to see a Fairphone 4 with the OS running Plasma Mobile smoothly, which was amazing.&lt;/p&gt;
&lt;h2 id=&#34;day-1--2&#34;&gt;Day 1 &amp;amp; 2 &lt;a href=&#34;#day-1--2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I had a great start&amp;hellip; I missed the first two hours of talks on the first day because I slept in.&lt;/p&gt;
&lt;p&gt;Luckily, my talk, &lt;strong&gt;Plasma Mobile in 2022&lt;/strong&gt; with Bhushan was in the afternoon. Unfortunately, Bhushan was unable to come in-person this time around. Hopefully I will be able to meet him next year!&lt;/p&gt;
&lt;p&gt;You can see our talk here (at around 5:21:00):&lt;/p&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/wSlMtf-YGw4&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;I attended quite a few interesting talks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Konquering the World: Are We There Yet (Nate Graham)&lt;/strong&gt; - The state of Plasma shipping with hardware&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Full Steam Ahead! (David Edmundson)&lt;/strong&gt; - Steam Deck with Plasma&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stop Crashing Already! (Harald Sitter)&lt;/strong&gt; - Integrating Dr. Konqi with powerful tools for developers to find issues&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Getting your application ready for KF6 (Nicolas Fella &amp;amp; Alexander Lohnau)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asahi Linux (Hector Martin)&lt;/strong&gt; - Information about the Asahi Linux project, how it came about&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Push Notifications - Infrastructure (not just) for Plasma Mobile (Volker Krause)&lt;/strong&gt; - Status of building the framework to have push notifications on Plasma (Mobile!)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fedora, KDE, Kinoite, and Mobile (Neal Gompa)&lt;/strong&gt; - Overview of Fedora shipping Plasma&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;hellip; and there were many other cool shorter talks as well!&lt;/p&gt;
&lt;p&gt;There were also people from Pine64 and Manjaro there that I met. It was really cool hearing about Pine64&amp;rsquo;s future plans for RISC V (coming soon!), as well as seeing some of the devices that Manjaro had running Plasma Mobile on (portable game console, mini tablet/netbook?).&lt;/p&gt;
&lt;h1 id=&#34;meetingsbofs&#34;&gt;Meetings/BoFs &lt;a href=&#34;#meetingsbofs&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;After the weekend of talks, we had several days where rooms at the university we were at were available for BoFs.&lt;/p&gt;
&lt;p&gt;BoFs, or &amp;ldquo;Birds of Feather&amp;rdquo; meetings are ways to gather people with similar interests in the same room, and discuss specific topics and plans.&lt;/p&gt;
&lt;p&gt;There were quite a few BoF sessions, of which I attended a few:&lt;/p&gt;
&lt;h2 id=&#34;plasma-mobile-bof&#34;&gt;Plasma Mobile BoF &lt;a href=&#34;#plasma-mobile-bof&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This was my first time attending a BoF, as well as hosting one. We unfortunately had some trouble with audio, which made it hard to communicate with online attendees.&lt;/p&gt;
&lt;p&gt;However, we did discuss the following topics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Helping Bhushan do Plasma Mobile Gear releases since he does them himself at the moment&lt;/li&gt;
&lt;li&gt;Moving some Plasma Mobile applications to KDE Gear due to limited changes&lt;/li&gt;
&lt;li&gt;How to proceed with QtFeedback (vibrations stack) for Qt 6 as it is unmaintained&lt;/li&gt;
&lt;li&gt;Possibility of switching to &lt;code&gt;feedbackd&lt;/code&gt; (by Purism) from &lt;code&gt;hfd-service&lt;/code&gt; instead&lt;/li&gt;
&lt;li&gt;Plan is one last release of Plasma Mobile with KF 5 (5.27), before branches are made for Plasma 6&lt;/li&gt;
&lt;li&gt;No large changes anticipated for Plasma Mobile 6&lt;/li&gt;
&lt;li&gt;SHIFTphones and Fairphone can run pmOS with Plasma Mobile, perhaps we can open communication channels with them?&lt;/li&gt;
&lt;li&gt;Manjaro was working with 2 tablet (?) vendors, they have positive reception and had a few suggestions&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;kde-pim-bof&#34;&gt;KDE PIM BoF &lt;a href=&#34;#kde-pim-bof&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;KDE PIM (Personal Information Management) refers to the KDE stack for applications like KMail, KOrganizer, Kalendar, etc.&lt;/p&gt;
&lt;p&gt;Improving Akonadi for mobile devices was discussed, including the possibility to try using SQLite by default, which may improve resource consumption.&lt;/p&gt;
&lt;p&gt;I had started working on a mail application called Raven for Plasma Mobile recently, and so it was also discussed how to better share code between it and other applications that use the Akonadi stack.&lt;/p&gt;
&lt;h2 id=&#34;plasma-ink-bof&#34;&gt;Plasma Ink BoF &lt;a href=&#34;#plasma-ink-bof&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I attended a BoF about an upcoming project, Plasma Ink, which brings Plasma to e-ink devices. They can be useful for reading, taking notes, as well as simply being an enjoyable interface to write content.&lt;/p&gt;
&lt;p&gt;This platform however needs special consideration for the way content is rendered, since e-ink devices typically have slow-refresh screens, and so animations as well as colours need to be adjusted to be as light as possible.&lt;/p&gt;
&lt;p&gt;Pine64 has been developing the PineNote which can run Plasma Ink theoretically, I had the chance to try one and was quite impressed at the responsiveness for pen notetaking.&lt;/p&gt;
&lt;p&gt;While I likely will not be very involved with the project since I am preoccupied with Plasma Mobile, I hope it continues forward!&lt;/p&gt;
&lt;h2 id=&#34;debugging-session-with-aleix&#34;&gt;Debugging session with Aleix &lt;a href=&#34;#debugging-session-with-aleix&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We have had a severe regression for several months now with the lockscreen, which crashes frequently when waking from suspend: &lt;a href=&#34;https://invent.kde.org/teams/plasma-mobile/issues/-/issues/156&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/teams/plasma-mobile/issues/-/issues/156&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I sat down with Aleix to really focus on trying to fix this issue, since he knows about KWin for more than me, though his PinePhone had not been working and so he couldn&amp;rsquo;t replicate it previously.&lt;/p&gt;
&lt;p&gt;After hours of jumping around git commits of &lt;code&gt;kscreenlocker&lt;/code&gt; (compiling it on device is painful), we realized that the issue was elsewhere in the stack. There is some sort of Wayland registry failure that occurs when &lt;code&gt;kscreenlocker&lt;/code&gt; is started immediately after waking from suspend, which causes it to crash. We unfortunately did not have enough time to pinpoint the issue, but we do have some ways to move forward with investigating in the future. We suspect it may be related to when KWaylandServer was merged into KWin.&lt;/p&gt;
&lt;h2 id=&#34;convergent-forms-bof&#34;&gt;Convergent Forms BoF &lt;a href=&#34;#convergent-forms-bof&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The last BoF I attended was about convergent forms, and how we can design forms that use a single codebase, but have designs that work for both mobile and desktop.&lt;/p&gt;
&lt;p&gt;Currently, we have special components in &lt;code&gt;kirigami-addons&lt;/code&gt; for mobile, but are not necessarily great on desktop.&lt;/p&gt;
&lt;p&gt;What was decided was to create a new &amp;ldquo;FormLayout&amp;rdquo; component in Kirigami, which can take a set of instructions to build the form, and generates the necessary components to display properly on whichever platform it is running on.&lt;/p&gt;
&lt;h1 id=&#34;closing&#34;&gt;Closing &lt;a href=&#34;#closing&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Overall, I had an amazing time at Akademy this year, and hope to attend more in the future!&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2022/10/konqi-calling.png&#34; width=300px/&gt;
</description>
    </item>
    
    <item>
      <title>Going to Akademy!</title>
      <link>https://espi.dev/posts/2022/07/going-to-akademy/</link>
      <pubDate>Wed, 27 Jul 2022 20:23:29 -0400</pubDate>
      
      <guid>https://espi.dev/posts/2022/07/going-to-akademy/</guid>
      <description>&lt;p&gt;I am going to be attending &lt;a href=&#34;https://akademy.kde.org/2022&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Akademy 2022&lt;/a&gt; in person!&lt;/p&gt;
&lt;p&gt;This is my first time going to Akademy in-person, so it is quite exciting!
I will be doing a talk with Bhushan on the state of &lt;a href=&#34;https://plasma-mobile.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plasma Mobile&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&#34;https://espi.dev/images/blog/2022/07/akademy-konqi.png&#34; width=300px/&gt;
&lt;p&gt;A bit of background on my experience at KDE:&lt;/p&gt;
&lt;p&gt;I first started contributing to KDE in 2020, creating the &lt;a href=&#34;https://invent.kde.org/plasma-mobile/kclock&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;KClock&lt;/a&gt; project
as a way to learn Qt Quick, and to pick up one of the pending tasks of Plasma Mobile.&lt;/p&gt;
&lt;p&gt;Through 2020, I worked on many Plasma Mobile applications such as &lt;a href=&#34;https://invent.kde.org/plasma-mobile/kweather&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;KWeather&lt;/a&gt;, and also started poking around contributing to the shell.
I also did some work for the desktop, including some work on adding fingerprint support to the users kcm.&lt;/p&gt;
&lt;img src=&#34;https://invent.kde.org/plasma/plasma-mobile/-/wikis/uploads/8c77b63b3182bd7a8302da347778254f/plasma-mobile.png&#34; width=150px/&gt;
&lt;br/&gt;
&lt;img src=&#34;https://invent.kde.org/plasma-mobile/kclock/-/avatar&#34; width=50px/&gt;
&lt;img src=&#34;https://invent.kde.org/uploads/-/system/project/avatar/1827/kweather2.png?width=64&#34; width=50px/&gt;
&lt;img src=&#34;https://invent.kde.org/plasma-mobile/kalk/-/avatar&#34; width=50px/&gt;
&lt;img src=&#34;https://invent.kde.org/plasma-mobile/calindori/-/avatar&#34; width=50px/&gt;
&lt;img src=&#34;https://invent.kde.org/multimedia/elisa/-/avatar&#34; width=50px/&gt;
&lt;img src=&#34;https://invent.kde.org/plasma-mobile/audiotube/-/avatar&#34; width=50px/&gt;
&lt;p&gt;In 2021 and 2022, I got much more heavily involved in KDE frameworks (namely &lt;a href=&#34;https://invent.kde.org/frameworks/kirigami&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Kirigami&lt;/a&gt;) and Plasma Mobile shell contributions.&lt;/p&gt;
&lt;p&gt;One of the most exciting developments in the project over the past few years has been the expansion in the number of devices that can now run Plasma Mobile. I will be sure to bring some devices I have for demo purposes :3&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Overall, I am very excited to be able to share a lot of the work that has been done when I attend this year&amp;rsquo;s Akademy! Be sure to check out my talk!&lt;/p&gt;
&lt;img src=&#34;https://akademy.kde.org/sites/akademy.kde.org/files/2021/akademy2021_groupphoto.png&#34; width=500px/&gt;
&lt;p&gt;&lt;em&gt;someone here is me&amp;hellip;&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
