<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Merritt Codes Blog</title>
        <link>https://merritt.codes/blog</link>
        <description>Merritt Codes Blog</description>
        <lastBuildDate>Wed, 15 Apr 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[KDE Mega Sprint 2026]]></title>
            <link>https://merritt.codes/blog/2026/04/15/2026/_kde_mega_sprint</link>
            <guid>https://merritt.codes/blog/2026/04/15/2026/_kde_mega_sprint</guid>
            <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[This April, KDE once again had a sprint in Graz, Austria. This one was deemed a]]></description>
            <content:encoded><![CDATA[<p>This April, KDE once again had a sprint in Graz, Austria. This one was deemed a
"Mega Sprint" as unlike last year it was not just for Plasma, but for everything
KDE-related from Plasma, goals, frameworks, apps, and more. We had a great
turnout!</p>
<p><img decoding="async" loading="lazy" alt="Group photo of the sprint attendees" src="https://merritt.codes/assets/images/graz_sprint_group_photo-9e6b896cadc92aee7a5c82a0c9e215da.avif" width="2016" height="1134" class="img_ev3q"></p>
<p>Amazingly I managed to go the whole trip this time without getting sick! 😊</p>
<p>We covered a <em>lot</em> of ground! Briefly, a few of the things off the top of my
head:</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="testing">Testing<a href="https://merritt.codes/blog/2026/04/15/2026/_kde_mega_sprint#testing" class="hash-link" aria-label="Direct link to Testing" title="Direct link to Testing">​</a></h2>
<p>Improving reliability, ease of running locally, documentation, and ensuring that
test failures are reported by the CI in merge requests. We have some work to do
for all of these to improve our testing story, and we collectively came to
important decisions on how to move forwards.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="gardening">Gardening<a href="https://merritt.codes/blog/2026/04/15/2026/_kde_mega_sprint#gardening" class="hash-link" aria-label="Direct link to Gardening" title="Direct link to Gardening">​</a></h2>
<p>There is a lot, often not enough hours/energy to deal with it, and a lot of the
time people just don't even know about the issue(s). Let's try: being more
proactive about closing bad/stale MRs, creating a GitLab bot to help automate
things that get people's attention, keep track of things by sending regular
notices to the mailing list(s) similar to how the "failing ci" emails help
people keep on top of things.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="gestures">Gestures<a href="https://merritt.codes/blog/2026/04/15/2026/_kde_mega_sprint#gestures" class="hash-link" aria-label="Direct link to Gestures" title="Direct link to Gestures">​</a></h2>
<p>A complicated topic! We had a lot of good discussions about the user flow/UI/UX,
and I think we came to a really good place that sets us up for some excellent
custom gestures/bindings with the fantastic work by Jakob &amp; Natalie.</p>
<p>This sort of work is a really great example of something that would have been
very difficult to do online, that we broke through with a lot of back and forth
conversation/explanation/design at the sprint — which is exactly why we get
together to unblock these things and make quick progress together!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="plasma-keyboard">Plasma Keyboard<a href="https://merritt.codes/blog/2026/04/15/2026/_kde_mega_sprint#plasma-keyboard" class="hash-link" aria-label="Direct link to Plasma Keyboard" title="Direct link to Plasma Keyboard">​</a></h2>
<p>We covered all of the large topics/issues that have been pending, for example:
morekeys/full keyboard emulation, emojis, speech-to-text, Wayland protocols,
testing, etc. So much that each could probably be its own blog post! We'll
continue to see a whole lot of changes and improvements here; we really want
plasma-keyboard to be a first-class experience for all sorts of input stories.</p>
<p><img decoding="async" loading="lazy" alt="Photo of all the Framework laptops at the sprint" src="https://merritt.codes/assets/images/graz_sprint_framework_laptops-1c4a5f142771cd7fdcf60ad2a30376ec.avif" width="2016" height="1134" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="graz">Graz<a href="https://merritt.codes/blog/2026/04/15/2026/_kde_mega_sprint#graz" class="hash-link" aria-label="Direct link to Graz" title="Direct link to Graz">​</a></h2>
<p>We were once again in lovely Graz, and the weather was a very welcome change
from the brutal winter we've had in Canada — still had ice and snow when I left
home! In addition to the mostly sunny weather and chirping birds, the city and
its people were just fantastic once again. 💙</p>
<p>I can't say enough just how lovely Graz is, and how glad I was to get to visit
again. 🇦🇹 Special shout out to Kevin Krammer, our KDE local who did so much to
make this sprint great for us!</p>
<p>The fact that Graz is a lovely place to go is good news, since this year we'll
be hosting Akademy there — I am already looking forward to coming back! <!-- -->:D</p>
<p><img decoding="async" loading="lazy" alt="Lovely architecture on this museum in Graz" src="https://merritt.codes/assets/images/graz_sprint_museum-4e3f04dd6ac95603bd037b46e8c36f1f.avif" width="2856" height="2142" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="Interesting tower building in Graz" src="https://merritt.codes/assets/images/graz_sprint_tower-a19603e1c90297a56c58037678fb009e.avif" width="2142" height="2856" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="Shipping container apartments in Graz" src="https://merritt.codes/assets/images/graz_sprint_container_apartments-a6ffbdfb8ed9c7c3c4679fc8334e3cee.avif" width="2856" height="2142" class="img_ev3q"></p>]]></content:encoded>
            <category>KDE</category>
            <category>sprint</category>
            <category>graz</category>
        </item>
        <item>
            <title><![CDATA[Plasma Keyboard: FLOSS/Fund, diacritics, and more]]></title>
            <link>https://merritt.codes/blog/2026/03/13/2026/_plasma-keyboard-funding-diacritics</link>
            <guid>https://merritt.codes/blog/2026/03/13/2026/_plasma-keyboard-funding-diacritics</guid>
            <pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Plasma Keyboard has interesting news to share!]]></description>
            <content:encoded><![CDATA[<p>Plasma Keyboard has interesting news to share!</p>
<p>Plasma Keyboard started out life as KDE's virtual / on-screen keyboard, and now
it is evolving to also support tools and features for our physical keyboards.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="flossfund">FLOSS/Fund<a href="https://merritt.codes/blog/2026/03/13/2026/_plasma-keyboard-funding-diacritics#flossfund" class="hash-link" aria-label="Direct link to FLOSS/Fund" title="Direct link to FLOSS/Fund">​</a></h2>
<p>Plasma Keyboard was granted funding from the FLOSS/Fund program's second
tranche, for which we are very grateful! This funding has ensured we will be
able to put some sustained effort towards refining and improving the project —
and I have been doing just that for the past couple of months.</p>
<p>I began by getting more familiar with the codebase, lists of open bugs, and
feature requests. I also did some refactoring and cleanup, improved the CI and
MR review process, etc.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="diacritics">Diacritics<a href="https://merritt.codes/blog/2026/03/13/2026/_plasma-keyboard-funding-diacritics#diacritics" class="hash-link" aria-label="Direct link to Diacritics" title="Direct link to Diacritics">​</a></h2>
<p><a href="https://invent.kde.org/plasma/plasma-keyboard/-/merge_requests/83" target="_blank" rel="noopener noreferrer">https://invent.kde.org/plasma/plasma-keyboard/-/merge_requests/83</a></p>
<p>The first feature I tackled is the first one that is for physical keyboards
rather than virtual/on-screen keyboards: diacritics — the variants of a
character that indicate a difference in pronunciation, such as ç, ñ, or ü.
Though it is more than just diacritics, because it also supports common/popular
symbols, such as ™, — (em-dash), →, ¡, ‽, ¼, ≥, ≠, etc.</p>
<p><img decoding="async" loading="lazy" alt="Diacritics light theme screenshot" src="https://merritt.codes/assets/images/diacritics-light-994a0058d01a3e5603bbbd64afc9f4c5.png" width="614" height="203" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="Diacritics dark theme screenshot" src="https://merritt.codes/assets/images/diacritics-dark-b745cd649a722fd9f2a8ec24e7e36df9.png" width="614" height="203" class="img_ev3q"></p>
<!-- -->
<video controls="" width="100%"><source src="/assets/medias/diacritics-demo-dd7d7feae5ea576400d425c847323a1c.webm" type="video/webm"></video>
<p>If you'd like an idea of which diacritics and symbols are currently included,
you can check out the
<a href="https://invent.kde.org/plasma/plasma-keyboard/-/blob/6896669297df5df2e8fe7e07b1c6000e2ee939c6/src/overlay/diacritics/base.json" target="_blank" rel="noopener noreferrer">base mapping json</a>.
Further mappings are included depending on which language(s) you have enabled
for Plasma Keyboard in your system settings.</p>
<p>This feature allows users to long-press a key on their physical keyboard to
access a popup menu of diacritics and symbols related to that key, and select
one to input it. This is a common feature on mobile keyboards, and I personally
think this is a great improvement over using something like a compose key for
the same purpose.</p>
<p>Selecting an option from the popup menu can be done multiple ways:</p>
<ul>
<li>Pressing the associated keyboard number key shown below the option</li>
<li>Clicking on the option with the mouse</li>
<li>Using the arrow keys to navigate to the option and pressing <code>Enter</code></li>
</ul>
<p>This was pretty challenging to implement; I previously had no experience with
Wayland protocols or input methods, so it required a lot of research, reading,
learning, and experimentation to figure it out. Difficult, but rewarding!</p>
<p>One of the really cool things about Plasma Keyboard is that it is available as a
Flatpak — so if you are adventurous and want to try out the diacritics feature
before it is released to the stable version, you can do so with the nightly
Flatpak builds!</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">flatpak install --user --or-update https://cdn.kde.org/flatpak/plasma-keyboard-nightly/org.kde.plasma.keyboard.flatpakref</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Then simply enable Plasma Keyboard in <code>System Settings</code> → <code>Keyboard</code> →
<code>Virtual Keyboard</code>! 🤯 If you already have a version of Plasma Keyboard
installed, a quick restart or log out/in might be needed for the new version to
take effect.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="future-plans">Future Plans<a href="https://merritt.codes/blog/2026/03/13/2026/_plasma-keyboard-funding-diacritics#future-plans" class="hash-link" aria-label="Direct link to Future Plans" title="Direct link to Future Plans">​</a></h2>
<p>In addition to the diacritics feature itself, I also laid the groundwork with it
for future features that will make use of the same overlay/popup system and
physical keyboard integration — stay tuned for more news on that! 😉</p>
<p>There are a bunch of other plans for features and improvements that we'd like to
work on, for example: swipe typing, voice typing, making the on-screen keyboard
movable and resizable, adding tests and improving performance and reliability,
etc.</p>
<p>There is a lot of work to be done, and we are excited to keep improving Plasma
Keyboard and making it even more powerful and user-friendly — just like the rest
of Plasma! 🚀</p>
<p>If you are interested in contributing, please check out the project on KDE's
GitLab: <a href="https://invent.kde.org/plasma/plasma-keyboard" target="_blank" rel="noopener noreferrer">https://invent.kde.org/plasma/plasma-keyboard</a></p>]]></content:encoded>
            <category>KDE</category>
            <category>plasma</category>
            <category>plasma-keyboard</category>
            <category>keyboard</category>
            <category>funding</category>
            <category>diacritics</category>
        </item>
        <item>
            <title><![CDATA[Plasma Setup Released]]></title>
            <link>https://merritt.codes/blog/2026/02/17/2026/_plasma-setup-release</link>
            <guid>https://merritt.codes/blog/2026/02/17/2026/_plasma-setup-release</guid>
            <pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Plasma Setup, the new wizard that guides users through the initial configuration]]></description>
            <content:encoded><![CDATA[<p>Plasma Setup, the new wizard that guides users through the initial configuration
of KDE Plasma, is having its first release as part of the Plasma 6.6 release!</p>
<p>With Plasma Setup, the technical steps of operating system installation and disk
partitioning can be handled separately from user-facing steps like setting up an
account, connecting to a network, and so on. This facilitates important use
cases such as:</p>
<ul>
<li>Companies shipping Plasma pre-installed on devices</li>
<li>Businesses or charity organizations refurbishing computers with Plasma to give
them new life</li>
<li>Giving away or selling a computer with Plasma on it, without giving the new
owner access to the previous owner’s data</li>
</ul>
<video controls="" width="100%"><source src="https://cdn.kde.org/promo/Announcements/Plasma/6.6/plasma-setup_promo.mp4" type="video/mp4"></video>
<p>This has been several months in the making, as it has been my primary focus ever
since I was hired by KDE e.V. last year. The project has seen a ton of work, and
we've collaborated with distros and other stakeholders to ensure it meets the
needs of the community.</p>
<p>I am very excited to see Plasma Setup finally in the hands of users, and how it
will make KDE (and Linux/FOSS in general) more accessible to a wider audience.
This is a key piece that was needed in order for Plasma to be more viable and
accessible to a whole class of users (non-technical end-users, businesses,
governments, etc.).</p>
<p>There are still plenty of improvements that can be made, and contributions are
very welcome! If you are interested in contributing, please check out the
project on KDE's GitLab: <a href="https://invent.kde.org/plasma/plasma-setup" target="_blank" rel="noopener noreferrer">https://invent.kde.org/plasma/plasma-setup</a></p>]]></content:encoded>
            <category>KDE</category>
            <category>plasma</category>
            <category>plasma-setup</category>
        </item>
        <item>
            <title><![CDATA[Plasma Setup Security Improvements]]></title>
            <link>https://merritt.codes/blog/2025/11/11/2025/_plasma-setup-security</link>
            <guid>https://merritt.codes/blog/2025/11/11/2025/_plasma-setup-security</guid>
            <pubDate>Tue, 11 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Plasma's first-run experience (FRE) / out-of-box experience (OOBE) has seen significant]]></description>
            <content:encoded><![CDATA[<p>Plasma's first-run experience (FRE) / out-of-box experience (OOBE) has seen significant
improvements in security recently.</p>
<p>Although first off I think I maybe hadn't mentioned yet how the project was renamed.</p>
<p>Previously known as "KDE Initial System Setup" (KISS), the project has been rebranded to
"Plasma Setup" and now sits nicely alongside other system projects like "Plasma Desktop",
"Plasma Mobile", "Plasma Keyboard", etc.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="enhancing-security-in-plasma-setup">Enhancing Security in Plasma Setup<a href="https://merritt.codes/blog/2025/11/11/2025/_plasma-setup-security#enhancing-security-in-plasma-setup" class="hash-link" aria-label="Direct link to Enhancing Security in Plasma Setup" title="Direct link to Enhancing Security in Plasma Setup">​</a></h2>
<p>We received a notice of potential security issues from the folks at openSUSE,
which have <a href="https://invent.kde.org/plasma/plasma-setup/-/merge_requests/48" target="_blank" rel="noopener noreferrer">now been addressed</a>.</p>
<p>This sort of thing is a great example of why it can be so difficult to provide
ETAs and timelines for software development: unexpected issues often arise that
need to be addressed before other planned work can proceed, and these issues can take
time to investigate and fix properly; in this case, the security issues required
careful review and testing to ensure that they were resolved without introducing new problems,
and delayed our initial release by weeks.</p>
<p>I had very little experience with this sort of security-minded defensive programming
before this, so it was a great learning experience for me personally as well. It required
a whole lot of reading and research to understand the best practices and principles involved,
and I definitely have a better feeling for how to think about defensive programming in the future.</p>
<p>It amazes me the kinds of things people will try to do to break software, and many of them
(like path traversal attacks) are things I would never have thought of on my own!</p>
<p>I'd like to thank the openSUSE security team for responsibly disclosing these issues,
and for their patience while we worked through them. Their help has made Plasma Setup
more secure for all users, and I appreciate their dedication to improving the security
of open source software.</p>
<p>A massive thank you specifically to Matthias Gerstner for the multiple rounds of detailed
and thoughtful reviews and suggestions on the MR to address these issues. Your help was <em>invaluable</em>,
and it was a pleasure working with you! 🙇‍♀️ 💙 🦎</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="looking-ahead">Looking Ahead<a href="https://merritt.codes/blog/2025/11/11/2025/_plasma-setup-security#looking-ahead" class="hash-link" aria-label="Direct link to Looking Ahead" title="Direct link to Looking Ahead">​</a></h2>
<p>Plasma Setup is nearly ready for initial testing and adoption. There are a couple more items
to wrap up, but (barring further unforeseen delays!) we are very close to being able to release
it for early adopters to try out! 🎉</p>]]></content:encoded>
            <category>KDE</category>
            <category>plasma</category>
            <category>plasma-setup</category>
            <category>security</category>
        </item>
        <item>
            <title><![CDATA[Akademy 2025]]></title>
            <link>https://merritt.codes/blog/2025/09/19/2025/_akademy-2025</link>
            <guid>https://merritt.codes/blog/2025/09/19/2025/_akademy-2025</guid>
            <pubDate>Fri, 19 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Akademy 2025 was hosted in Berlin, and this was my first time attending Akademy in person.]]></description>
            <content:encoded><![CDATA[<p>Akademy 2025 was hosted in Berlin, and this was my first time attending Akademy in person.</p>
<p>I was very excited both to see Berlin (and put my very shaky German skills to
practice), as well as to attend our big yearly event and meet some more cool
folks in person.</p>
<p>The trip out was fairly uneventful, if long (~17 hours of bus, planes, and
train). The biggest difference compared to travelling to the Plasma sprint is
that this time I had some good noise cancelling over-ear headphones -- what a
lifesaver! Especially when you end up on a flight across the ocean sandwiched
between 2 screaming, jumping, grabbing toddlers. 10/10 can recommend! The
headphones, not the toddlers. 😂</p>
<p>As expected when I arrived at my hotel I crashed and slept for 11 hours straight.</p>
<p>I had a good time at the welcome event. I offered to help and spent the evening
handing out food and drink tickets to everyone and chatting to a few people --
including an excellent conversation about the merits of QA &amp; testing, which
still surprises me not everyone is on board with!</p>
<p><img decoding="async" loading="lazy" alt="I really loved this tree-lined boulevard approaching the conference venue" src="https://merritt.codes/assets/images/2025-09-19_akademy-2025_university-approach-4cd0e2689bef72df735d1e065aeca89f.jpeg" width="4032" height="3024" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="The conference venue was at the Technische Universität Berlin" src="https://merritt.codes/assets/images/2025-09-19_akademy-2025_university-32e4c9ff38c93f395e629e0c0bc11a0d.jpeg" width="4032" height="3024" class="img_ev3q"></p>
<p>We had a huge amount of talks and BoFs to attend. (Sidenote: "BoF" stands for
"Birds of a Feather", and is apparently a more informal/less structured time for
talk/discussion/hacking/etc -- I was lost on what these letters meant for a long
time before now.)</p>
<p><img decoding="async" loading="lazy" alt="One of the main conference talks I attended" src="https://merritt.codes/assets/images/2025-09-19_akademy-2025_talks-2727cc625c79dd6b1e3204a688be5625.jpeg" width="4032" height="2268" class="img_ev3q"></p>
<p>I don't think I could hope to cover even a fraction of what went on, and indeed
because the schedule is structured in such a way that there are multiple things
going on at any given time, I had a lot of trouble choosing what to go to --
what if I want to attend them all?! Well, that is kind of what I am doing as I
am catching up on the recordings of what I missed after the fact.</p>
<p><img decoding="async" loading="lazy" alt="KDE Linux BoF" src="https://merritt.codes/assets/images/2025-09-19_akademy-2025_kde-linux-bof-a3b65e11078e1e9952a8be41788e3859.jpeg" width="4032" height="2268" class="img_ev3q"></p>
<p>I am very happy that the audio and video quality of the recordings appear to be
massively improved over last year's! Paired with the auto-generated captions on
YouTube it actually makes for an excellent way to consume the talks, and is
valuable even for the talks I attended in person since my auditory processing
disorder means that I have trouble understanding what people are saying
(massively worsened with low volume/echo/noisy environment/etc). If we can
figure out the infrastructure to also record the BoFs for next year that would
be another great step up for accessibility and allowing a wider audience to
participate &amp; benefit. 💙</p>
<p>We had a BoF about the KDE Out-Of-Box-Experience (OOBE), where Neal Gompa and I
went through some of the history of the project (a lot, Neal has been
championing it forever!) and its current state (nearly ready for early testing
and adoption). There were some good questions, and I am consistently gratified
to see the interest and excitement there is for the project.</p>
<p><img decoding="async" loading="lazy" alt="KDE Out-Of-Box-Experience BoF" src="https://merritt.codes/assets/images/2025-09-19_akademy-2025_oobe-bof-da2533f81cd1b6fe8bcfd4c25c9230dc.jpeg" width="4032" height="2268" class="img_ev3q"></p>
<p>The schedule for Akademy was a <em>lot</em> for me. On a normal day my available energy
is already quite limited, and the venue had a few challenges for me such as the
only restrooms and the elevator we were using being on the other side of the
building, which meant a whole lot of walking &amp; standing to wait on hard floors
so I was feeling more fatigued and in pain than usual.</p>
<p>To top that off my anxiety was sky high, and I have no idea how much I was
masking but I think I may have ended up seeming like an unapproachable
wallflower.. I promise I am very friendly, just extremely anxious and awkward!
Despite that I ended up having a bunch of great conversations during the
conference with a bunch of people, and it was amazing to get together with so
many other Linux / FOSS / KDE nerds. 🤓</p>
<p>Around the end of Tuesday it was becoming apparent that I had caught a cold or
something from one of the many sneezes or coughs I had attempted to dodge during
this trip, and I missed out on the social activities on Wednesday and the last
day of activities of Thursday. I enjoyed watching the progress on Matrix anyway!
I am only now just starting to improve (I always struggle to fight off
infections like this).</p>
<p>Several people had said they wanted to talk to me at some point, and we didn't
get the chance before this cold knocked me out. <em>Wie Schade!</em> It isn't the same,
but feel free to reach out to me on Matrix! <code>@merritt:kde.org</code></p>
<p>It was really awesome to get together in Berlin, to meet so many new great
people and to see familiar faces again, to work on so many interesting things
together. I wish I had more energy after a long day to do more social stuff,
because I loved getting the chance to interact with everyone in a more relaxed
and informal way. Maybe we can figure out some more relaxed / quiet / sensory
friendly social &amp; food options next time for those of us who struggle with the
loud, crowded, and chaotic environments that are often the default for social
events.</p>
<p>Thanks Berlin for having us, even if the city <em>is</em> a bit noisy and has a
surprising number of smokers, it was very nice to visit! <em>Tschüss!!</em> 😀 💙</p>
<p><img decoding="async" loading="lazy" alt="Akademy 2025 Group Photo" src="https://merritt.codes/assets/images/2025-09-19_akademy-2025_group-photo-32e3b78a3564decbcececc53147f3c8a.jpg" width="7290" height="4100" class="img_ev3q"></p>]]></content:encoded>
            <category>KDE</category>
            <category>akademy</category>
            <category>conference</category>
            <category>berlin</category>
        </item>
        <item>
            <title><![CDATA[First Run Experience Progress]]></title>
            <link>https://merritt.codes/blog/2025/06/24/2025/first-run-experience</link>
            <guid>https://merritt.codes/blog/2025/06/24/2025/first-run-experience</guid>
            <pubDate>Tue, 24 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Plasma's upcoming first-run experience is coming along nicely.]]></description>
            <content:encoded><![CDATA[<p>Plasma's upcoming first-run experience is coming along nicely.</p>
<p>After a bunch of research and discussions we settled on continuing / fixing up
the <a href="https://invent.kde.org/system/kiss" target="_blank" rel="noopener noreferrer">KISS project</a> (KDE Initial System
Setup) for the new First Run Experience (FRE) / Out-Of-Box Experience (OOBE). It
was in a sort of half finished state.</p>
<p>Since then has been a bunch of work on it such as:</p>
<ul>
<li>Getting it to compile and run</li>
<li>Whole <em>bunch</em> of fixes, cleanup, and polish to the UI, UX, and code/developer
experience</li>
<li>Implemented the ability to actually create the new user (you could enter a
name and password, but it was all basically placeholder GUI previously)</li>
<li>Added language selection front/back ends</li>
<li>Added basic build / run instructions to the README</li>
<li>Added ECM logging</li>
<li>Cleaned up the debug output which made changes more difficult</li>
<li>Added basic CI (thanks Nico!)</li>
<li>Added keyboard layout selection front/back ends</li>
</ul>
<p>That last one was more difficult than expected.. turns out keyboard layouts can
be quite complex!</p>
<p>First came some refactoring of the keyboard layouts KCM from <code>plasma-desktop</code> so
we could reuse some of the existing, complex functionality. Then adapting a
UI/UX appropriate for the FRE. Investigating things like keyboard models,
detecting defaults, mapping language to keyboard layout, etc..</p>
<p>Then taking the results of the user choice and figuring out how to apply that
both to the system as a default (<code>systemd-localed</code> dbus call) as well as to the
running Plasma session (setting the value manually in the <code>kxkbrc</code> keyboard
settings file).</p>
<p>As is often the case with software development, that succinct summary belies
the massive amount of work it took to get there! 😅 💪</p>
<p>With that work completed, we have <em>most</em> of what is needed for a minimum viable
product!</p>
<p>Next up:</p>
<ul>
<li>Granting authentication without a user prompt<!-- -->
<ul>
<li>Plan: special user with <code>sysusers.d</code> and a polkit rule</li>
</ul>
</li>
<li>Running automatically on first boot &amp; in live sessions<!-- -->
<ul>
<li>Plan: <code>systemd</code> unit seems promising, but more research is needed</li>
</ul>
</li>
<li>Improve documentation<!-- -->
<ul>
<li>Especially related to building &amp; running without <code>kde-builder</code></li>
</ul>
</li>
<li>Think about the name<!-- -->
<ul>
<li>I am not thrilled with the <code>KISS</code> acronym personally 🤷‍♀️</li>
</ul>
</li>
</ul>
<p>There is also obviously a lot of improvements and polish that can be made, but
for now here is a preview of the FRE:</p>
<video controls="" width="90%"><source src="/assets/medias/2025-06-24-first-run-experience-38eb6df6d2d60d7895d7bcfd3164c6c4.webm"></video>]]></content:encoded>
            <category>KDE</category>
        </item>
        <item>
            <title><![CDATA[Do Not Disturb]]></title>
            <link>https://merritt.codes/blog/2025/05/21/2025/do-not-disturb</link>
            <guid>https://merritt.codes/blog/2025/05/21/2025/do-not-disturb</guid>
            <pubDate>Wed, 21 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[We're actually going to be using the Do Not Disturb feature in Plasma 6.4.]]></description>
            <content:encoded><![CDATA[<p>We're actually going to be using the <code>Do Not Disturb</code> feature in Plasma 6.4.</p>
<p>I say that because previously we had a hack that simply allowed notifications to
display over top of fullscreen windows, and do not disturb was only ever used
if:</p>
<ul>
<li>Screens are mirrored</li>
<li>During screen sharing</li>
<li>The user invoked it manually</li>
</ul>
<p>This was a little odd, and led to some inconsistencies. Plus only Plasma knew
about the user's preference to see notifications in fullscreen, and despite
notifications being inhibited reading <code>org.freedesktop.Notifications.Inhibited</code>
would return false.</p>
<p>I changed this to
<a href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/4877" target="_blank" rel="noopener noreferrer">actually use do not disturb when a fullscreen window is focused</a>.
This is more predictable and in-line with what the user would expect, enhancing
the UX and communication with other parts of the system and apps.</p>
<p><img decoding="async" loading="lazy" alt="Screenshot showing the new setting to automatically enable DND when fullscreen windows are focused" src="https://merritt.codes/assets/images/2025-05-21-do-not-disturb_new-dnd-settings-5420808b3f422d1efa6cc7cd50061812.png" width="422" height="113" class="img_ev3q"></p>
<p>As a result, we've discovered several bugs that had gone unnoticed! So far:</p>
<ul>
<li><a href="https://bugs.kde.org/show_bug.cgi?id=504350" target="_blank" rel="noopener noreferrer">Notifications not being marked read</a></li>
<li><a href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/5457" target="_blank" rel="noopener noreferrer">Showing a summary for unwanted notifications</a></li>
<li><a href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/5453" target="_blank" rel="noopener noreferrer">Showing a summary every time the user leaves DND</a></li>
<li><a href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/5470" target="_blank" rel="noopener noreferrer">Not showing critical notifications in DND when we should</a></li>
<li><a href="https://bugs.kde.org/show_bug.cgi?id=504571" target="_blank" rel="noopener noreferrer">Disabling app-specific notification history also prevents it from participating in DND summaries</a></li>
</ul>
<p>My impression is that these bugs were not evident before because few people were
actually <em>using</em> the do not disturb feature, thanks to the way we previously
handled notifications with fullscreen applications. Everyone has been hard at
work getting these fixed and hopefully DND will be more useful, predictable, and
reliable! 🎉 😄</p>]]></content:encoded>
            <category>KDE</category>
        </item>
        <item>
            <title><![CDATA[Plasma Sprint 2025]]></title>
            <link>https://merritt.codes/blog/2025/05/01/2025/plasma-sprint</link>
            <guid>https://merritt.codes/blog/2025/05/01/2025/plasma-sprint</guid>
            <pubDate>Thu, 01 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[I attended my first Plasma sprint, and indeed my first in-person KDE event! It was an amazing experience! 😄]]></description>
            <content:encoded><![CDATA[<p>I attended my first Plasma sprint, and indeed my first in-person KDE event! It was an amazing experience! 😄</p>
<p><img decoding="async" loading="lazy" alt="Small breakaway chat :)" src="https://merritt.codes/assets/images/2025-05-01-plasma-sprint_image-1-be82acd13648d7ab1d7885aa5a1b1067.jpg" width="8056" height="5370" class="img_ev3q"></p>
<p>It was really great to be in the same room with so many talented and knowledgeable people. The amount of expertise gathered together was fantastic. The usual difficulties with remote communication were gone, and suddenly we could have easy back-and-forths, go sit next to someone to ask their expert opinion, and big group discussions could flow freely in a fraction of the time it would normally take.</p>
<p><img decoding="async" loading="lazy" alt="Work work! (Me not that kind of orc!)" src="https://merritt.codes/assets/images/2025-05-01-plasma-sprint_image-2-1ea1bc341bfaae90c5f565d8165d2273.jpg" width="3320" height="2497" class="img_ev3q"></p>
<p>Some of the cool things we talked about and worked on are: sandboxing (including things other than apps, like Plasma widgets and runners for KRunner), KNewStuff (where we can download new widgets/themes/etc), Activities, Telemetry, and oh so much more! We covered so much in such a short time it had my head spinning.</p>
<p>We also discussed the first-run experience (FRE) or out-of-the-box experience (OOBE) that is my current main focus. For those who are unfamiliar, this is the flow that happens when a user first turns on a new computer where it asks them to create the first user. Currently this doesn't exists for KDE (outside of some hacks that have significant drawbacks), and the user <em>has</em> to be created during system installation. For technically inclined users doing their own system install this is no problem, but it is a big problem for other scenarios; think for example about…</p>
<ul>
<li>Government organizations or large businesses who want to image computers with the system software</li>
<li>OEMs who need to pre-install an operating system</li>
<li>Used computer shops saving those millions of PCs that can't run Windows 11</li>
</ul>
<p>For all of these scenarios and more, the operating system needs to be installed but the user account should <em>not</em> yet be created. Rather once the intended end-user has opened up the box and turned on their shiny new computer, only then should they be prompted to "Choose your username and password" (among other things).</p>
<p>It was great to be able to present the vision for this, and I got great feedback, questions, suggestions, etc. Working together we came up with a solid plan to proceed, and I've started the work of implementing all of these ideas!</p>
<p>On the personal front, the whole experience was pretty challenging for me. Right off the bat my pre-existing medical condition means that I don't have much energy to work with on a daily basis, and that I get sick worse/more easily than most people do.. and wow did I ever get hit with the whole shebang!</p>
<p>After being hired on as the new Plasma Software Engineer, I had just under 2 weeks notice to try and arrange to attend the sprint. This started with needing my passport; I already had an appointment to get it, but not until just <em>after</em> the sprint (I was getting it originally for use to attend Akademy!). So I had to go down and spend the entire day at the passport offices, to ask for it to be issued expedited - which thankfully I got! Then was a whirlwind of things like...</p>
<ul>
<li>Research (do I need a visa? what can I/can't I bring? what <em>should</em> I bring? Is there any potential issues bringing my meds? (yes), travel insurance, mobile service, etc)</li>
<li>Booking travel &amp; lodging, and trying to do so at a semi-reasonable price while booking last minute</li>
<li>Buying supplies for travel (toothbrush, laptop bag, water bottle, travel umbrella, climate appropriate clothing (we just had snow/ice storms in Canada before I left, and it is still getting down near freezing at night!), etc, etc)</li>
</ul>
<p>Though I will say it is pretty lucky I had been casually learning German for the fun of it the past couple years. I definitely need more speaking practice though!</p>
<p>I am very happy I managed to attend, but generally I would <em>not recommend</em> trying to arrange one's first international travel with only several day's notice haha! 😂</p>
<p>Yeah, that's right.. first. I've rarely been away from my hometown before, and I've actually never left my native timezone previously! So travelling to the other side of the planet was a bit of a change, to say the least. The travel was more than I expected: ~2 hr bus ride to the airport, waiting for hours to get on the plane, ~10 hrs across the ocean, ~2 hr layover, ~1 hr additional to Graz, then ~1.5 hrs figuring out the train/tram from the airport to the venue (I had to ask for help figuring out how to get to the train station).</p>
<p>With all of this, the jetlag, as well as working 9 to 10 hour days I was feeling incredibly exhausted to put it mildly. Then I thought I was having a massive attack of allergies (I did just come from the land of ice and snow to a place where everything is green and blooming after all…), alas sadly I did catch a cold or something quite nasty that I am still trying to shake off. 😷🤧🤒😴</p>
<p>I learned a whole lot about travelling, there are a bunch of things I would do differently, and I am confident that my next trip will go <em>much</em> more smoothly as a result!</p>
<p>I am so glad that I got to attend, because we got some great work done and I met lovely, friendly people. It was a very nice atmosphere, and everyone was very kind and welcoming. It is really good to be able to put faces to the names of people I've been working with for years in some cases!</p>
<p>I am really looking forward to seeing everyone again at Akademy~ 🎉 Tschüss!</p>]]></content:encoded>
            <category>KDE</category>
        </item>
    </channel>
</rss>