call_end

    • Pl chevron_right

      vixalien: A love letter to mise

      news.movim.eu / PlanetGnome • 30 April 2026 • 5 minutes

    Recently, I have been using GNOME OS , as my daily driver.

    After being a seasoned Linux for long, dabbling in distros like Alpine Linux , Arch Linux , Fedora (and even Silverblue), I tried switching to something more opinionated and that "works by default" all while being hard to break.

    And given my existing relationship with GNOME , GNOME OS was a choice worth looking into.

    One feature of GNOME OS is that it is immutable (i.e. system files are read-only). It also doesn't ship with a package manager, so it doesn't have functionality built-in to install extra packages.

    You can install GUI Applications normally using Flathub (and Snap/AppImage), but installing non-GUI applications like development tools or CLI packages is not built-in.

    There are of course several solutions you can use, such as homebrew , coldbrew , but today we will focus on mise .

    What is mise?

    mise pitches itself as "One tool to manage languages, env vars, and tasks per project, reproducibly."

    However, I only use a fraction of it's functionality, in that I only use it to install packages.

    How to install it?

    The instructions are here: https://mise.jdx.dev/getting-started.html

    But essentially it's as easy as running this (remember to read the source of the installer first):

    curl https://mise.run | sh
    

    Activating mise

    Then you will need to "activate" mise, which essentially makes tools installed by mise available by modifying your $PATH variable

    echo 'eval "$(~/.local/bin/mise activate bash --shims)"' >> ~/.bashrc
    

    The instructions above are for bash, so you will need to consult the docs to get instructions for your shell.

    You will need to re-login for the mise command to be available, or open a new shell.

    A note on shims

    Feel free to skip this section, as it's just an explainer

    Also, note that the above command use the --shims flag, which is NOT the default. It essentially means that mise will modify the $PATH variable, instead of doing a weird thing where it will re-activate itself after each command you run.

    The non-shim way to activate mise is useful when you use mise to install different package versions across different repositories, but that sometimes breaks IDEs and is our of the scope of this blog post.

    Installing packages

    You can start installing your first package with mise :

    mise use -g java
    

    The above command installs java globally (hence the -g flag), which you can now confirm by running:

    $ java --version
    openjdk 26.0.1 2026-04-21
    OpenJDK Runtime Environment (build 26.0.1+8-34)
    OpenJDK 64-Bit Server VM (build 26.0.1+8-34, mixed mode, sharing)
    

    You can install much more tools, of which you can find a non-complete list here: mise-tools .

    For example, you can similarly install a specific major version of nodejs

    mise use -g node@22
    

    Or install the latest LTS version of node

    mise use -g node@lts
    

    Or you can be overlay specific

    mise use -g node@v25.9.0
    mise use -g node@25.9.0 # this works too!
    

    Searching

    Use mise search to find packages.

    mise search typ
    Tool       Description                                                                                                                            
    typos      Source code spell checker. https://github.com/crate-ci/typos
    typst      A new markup-based typesetting system that is powerful and easy to learn. https://github.com/typst/typst
    typstyle   Beautiful and reliable typst code formatter. https://github.com/Enter-tainer/typstyle
    quicktype  Generate types and converters from JSON, Schema, and GraphQL provided by https://quicktype.io. https://www.npmjs.com/package/quicktype
    

    Uninstalling

    mise unuse -g node
    

    Updating

    mise self-update # updating mise itself
    mise up          # updating tools installed by mise
    mise outdated    # checking if you have outdated tools
    

    Config File

    Tools you install with mise globally will be saved in the file ~/.config/mise/config.toml , which you can commit to your dotfiles so you can have similar tools across different machines.

    Here's an example of my mise config file at the time of writing this blog post.

    # ~/.config/mise/config.toml
    [tools]
    bat = "latest"
    btop = "latest"
    bun = "latest"
    caddy = "latest"
    "cargo:mergiraf" = "latest"
    deno = "latest"
    difftastic = "latest"
    doggo = "latest"
    fastfetch = "latest"
    fzf = "latest"
    github-cli = "latest"
    "github:railwayapp/railpack" = "latest"
    glab = "latest"
    helix = "latest"
    java = "latest"
    lazygit = "latest"
    node = "latest"
    "npm:vscode-langservers-extracted" = "latest"
    oha = "latest"
    pipx = "latest"
    pnpm = "latest"
    prettier = "latest"
    rust = "latest"
    scooter = "latest"
    tmux = "latest"
    usage = "latest"
    yt-dlp = { version = "latest", rename_exe = "yt-dlp" }
    zellij = "latest"
    "github:patryk-ku/music-discord-rpc" = { version = "latest", asset_pattern = "music-discord-rpc" }
    rclone = "latest"
    mc = "latest"
    go = "latest"
    "go:git.sr.ht/~migadu/alps/cmd/alps" = "latest"
    "npm:localtunnel" = "latest"
    

    After the tools inside the config has changed, you can run the following comand to make mise re-install packages from the config file

    mise install
    

    Mise Backends

    Mise is able to install packages from multiple sources. These sources are called "backends" by mise.

    When you type mise use -g node@22 , it will resolve node against the registry and figure out that the default backend for node is core

    Core

    The default backend is called core and tools from this backend are usually provided from the official source.

    Other tools that are available from core include Node.js, Ruby, Python, etc...

    We could also have been explicit with the backend we want to use

    mise use -g core:node
    

    You can find a list of all core packages here .

    Aqua

    You can also install packages from the Aqua registry.

    Language Package Managers

    You can also install tools from their respective package managers. Here are a few examples

    npm

    You can install prettier, typescript, oxlint and other JavaScript/TypeScript tools published on the npm registry. Find the tools on npm

    mise use -g npm:prettier
    

    pipx

    You can install black, poetry and other Python tools from pypi. Find the tools on pypi

    mise use -g pipx:black
    pipx:git+https://github.com/psf/black.git # from a github repo
    

    cargo

    You can install cargo packages with this backed. You need to have rust installed beforehand though, which you can do with mise

    mise use -g rust
    

    Then install your packages

    mise use -g cargo:eza
    

    There are more language package manager backends like: gem , go and more.

    Github

    You can install packages from Github directly, as long as the project you are trying to install from uses Github releases

    mise use -g github:railwayapp/railpack
    

    mise will usually auto-detect which asset you want to use, but you can also specify the asset glob in ~/.config/mise/config.toml

    [tools]
    "github:patryk-ku/music-discord-rpc" = { version = "latest", asset_pattern = "music-discord-rpc" }
    
    • Pl chevron_right

      Jonathan Blandford: Remembering Seth

      news.movim.eu / PlanetGnome • 29 April 2026 • 2 minutes

    I heard the news about Seth Nickell’s passing last week, and have been in a bit of a funk ever since.

    Seth was brilliant, iconoclastic, fearless.

    It’s been a long while since Seth was an active part of the GNOME Community, but his influence on the project can still be seen in its DNA if you know where to look. He arrived on the GNOME scene while still in school with hundreds of ideas on how to improve things. It was an interesting time: We had just launched GNOME 1.5 and were searching for a new path towards GNOME 2.0. The Sun usability study had been published and the community had internalized the need to change directions. Seth rolled up his sleeves and did the work needed to help light that path.

    Seth championed radical proposals such as instant apply, button ordering , message dialog fixes , and more. He cleaned up the control-center proposing some of the most visible changes from GNOME 1 to 2. He also did the initial designs for epiphany, pushing for a cleaner browser experience during an era of high browser complexity. He had a vision of desktops as a democratic tool, as easy and natural to use as any other tool in the human experience.

    As a designer, Seth was focused on trying to understand who we were designing for and making sure we were solving problems for them. While he wasn’t beyond fixing paddings / layouts, he wanted to get the Big Picture right. He wasn’t beyond rolling up his sleeves writing code to move things forward, but was at his best as a champion and visionary, arguing for us to take risks and continue to innovate .

    Spending time was Seth was a hoot. He had such a flair for the dramatic. I remember…

    • …the time he sold the design for what would become NetworkManager to a bunch of engineers. He got up on the stage and announced: “We are going to make this [holding an ethernet cable] as easy to use as this [producing a power plug] !” It’s hard to describe how many steps it took to set up networking back then.
    • …his vision of an improved messaging system — Project Yarrr. He used ☠ (U+2620) as the SVN repo name partially to see how many internal tools weren’t UTF-8 clean.
    • …him breaking out into an operatic rendition of “ Tradition ” when  developers were pushing back on a change he was proposing.
    • …the time he changed everyone’s background in the RH office to have crop circles over night. He showed up the next morning in a robe dressed as an old-testament prophet, beating a drum and carrying a “RHEL5 IS NIGH” sign.
    • …hanging  printouts of hate mail he got for various design choices outside of the Mega Cube (a group activity)!
    • And everyone who was around for the Dark Princess Incident will always remember it.

    Being one of the public faces of GNOME2 was hard, and he moved on. Later, he worked on OLPC and Sugar, and made his mark there. After that, he seemed to travel a lot. We lost touch, though he’d reappear every couple of years to say hi. I hope he found what he was looking for.

    Farewell, my friend. The world now has less color in it.

    seth.png

    • Pl chevron_right

      Thibault Martin: TIL that Yubikeys are convenient for Linux login

      news.movim.eu / PlanetGnome • 28 April 2026 • 3 minutes

    I got myself a Yubikey recently, and I wanted to use it as a nice convenience to:

    1. Grant me sudo privileges
    2. Unlock my session
    3. Decrypt my LUKS-encrypted disk

    I've only managed to do the first two, since they both rely on Linux Pluggable Authentication Modules (PAM). Luckily for me, one of PAM's modules supports U2F, the standard Yubikeys rely on.

    First I need to install pam-u2f to add U2F support to PAM, and pamu2fcfg to configure my key.

    $ sudo rpm-ostree install pam-u2f pamu2fcfg
    

    Since I'm running an immutable OS I need to reboot, and then I can create the correct directory and file to dump an U2F key into it.

    $ mkdir -p ~/.config/Yubico
    $ pamu2fcfg > ~/.config/Yubico/u2f_keys
    

    Then I make sure to have a root session open in case I lock myself out of sudoers.

    $ sudo su
    #
    

    In a different terminal, I can edit the sudoers file to add this line

    #%PAM-1.0
    auth       sufficient   pam_u2f.so cue openasuser
    auth       include      system-auth
    account    include      system-auth
    password   include      system-auth
    session    optional     pam_keyinit.so revoke
    session    required     pam_limits.so
    session    include      system-auth
    

    I save this file and open a new terminal. I type in sudo vi and it asks me to touch my FIDO authenticator before opening vi! If I touch the Yubikey, it indeed opens vi with root privileges.

    Let's break down the line:

    • auth for authentication
    • sufficient passing this authentication challenge is enough (it's not an additional factor of authentication)
    • pam_u2f.so the module we load is for U2F, the standard Yubikeys use
    • cue print "Please touch the FIDO authenticator." when the user needs to authenticate
    • openasuser to fetch the authentication file without root privileges

    It's also possible to use it to unlock my session, but it would be a bit reckless to allow anyone with my Yubikey to log into my laptop. If my backpack gets stolen and it has both my Yubikey and my laptop, anyone can log in.

    It's possible to make the login screen require either my user password, or all of

    • The Yubikey itself
    • The PIN of the Yubikey
    • Me to touch the Yubikey

    If someone fails more than three times to enter the correct PIN, the Yubikey will lock itself and require a PUK to be unlocked. This gives me an additional layer of security, and it's more convenient than having to type a full length passphrase.

    I've added the following line to /etc/pam.d/greetd (the greeter I use):

    #%PAM-1.0
    auth       sufficient  pam_u2f.so cue openasuser pinverification=1 userpresence=1
    auth       substack    system-auth
    [...]
    

    [!warning] I can lose my Yubikey

    I use my Yubikey as a nice convenience to set up a weaker PIN while not compromising too much on security. I use it instead of a password, no in addition to it.

    Since I can lose or break my Yubikey and I don't want to buy two of them, I make the U2F login sufficient but not required . This means I can still fallback to password authentication if I lose my Yubikey.

    Finally, DankMaterialShell uses its own lockscreen manager too. I still want to be able to fallback to password authentication if need be, so I'll configure it to accept U2F OR the password, not both.

    This means that the lockscreen will call /etc/pam.d/dankshell-u2f to know what to do when the screen is locked. Since this file doesn't exist, I can create it with the following content.

    #%PAM-1.0
    auth sufficient pam_u2f.so cue openasuser pinverification=1 userpresence=1
    

    I need a fallback for when I don't have my Yubikey, so I also create the one for this occasion

    #%PAM-1.0
    auth include system-auth
    

    Finally, I have a consistent setup where both my login and lock screen require me to plug my key, enter its PIN and touch it, or enter my full password. When it comes to sudo, I can only touch my key without requiring an PIN.

    My next quest will be to use my Yubikey to unlock my LUKS-encrypted disk.

    • Pl chevron_right

      Jordan Petridis: Goblins in your toolchain

      news.movim.eu / PlanetGnome • 27 April 2026 • 2 minutes

    At the start of the month, Bilal gave us all a giant gift with Goblint . On the first week it was already impressive. Now it’s an invaluable tool for anyone that ever interfaced with GObject, glib or GTK. It will catch leaks, bugs, or even offer to auto fix and modernize your code to the modern paradigms we use. It’s one of those things that is going to save countless hours of debugging and more importantly, prevent the issues before they even get committed. Jonathan Blandford wrote about using it two days ago, and I suggest you read the post .

    Everyone is trying to use goblint, and we are all stumbling upon the same issues integrating it into our tooling. Initially, it was only able to produce Sarif reports, which GitLab still has behind a feature flag , in addition to only  be available in GitLab Enterprise Editions.

    I added support for GitLab’s Code Quality format which has some support in the non-proprietary Community Edition we use in the GNOME and Freedesktop.org instances. Sadly, almost everything nice is still only available in the enterprise editions, but at least there is this little Widget in the Merge Requests page.

    A screenshot of the linked Merge Request showcasing the Code Quality GitLab widget.

    Additionally, we now have CI templates for Goblint. One is adding a job to the existing gnomeos-basic-ci component we use everywhere. Simply go to your latest pipeline and look for the job .

    A screenshot of the linked job and its output log

    The report will also show up in Merge Requests that have been updated since yesterday.  The gnomeos-basic-ci has other goodies like sanitizers, static analyzers, test coverage, etc wired out of the box, so you should give it a try if you are not using it yet.

    If you do but don’t want the goblint job, you can disable it easily with inputs: goblint: "disabled" similar to all the other tools the component provides.

    include:
      - project: "GNOME/citemplates"
        file: "templates/default-rules.yml"
      - component: "gitlab.gnome.org/GNOME/citemplates/gnomeos-basic-ci@26.1"

    If you want only a goblint job, I’ve also added a standalone template that you can use. (Or copy-paste from it).

    include:
      - component: "gitlab.gnome.org/GNOME/citemplates/goblint@26.1"
        inputs:
          job-stage: "lint"

    In order for the Code Quality report to work, you will need to have a report uploaded from your target branch, so GitLab will have something to compare the one from the merge request with. The template rules will handle that for you, but keep it in mind.

    At this moment all the lints are warnings so the job will never be fatal. This is why we can enabled it by default without worrying about breaking pipelines for now. You can further configure its behavior to your needs, and error out if you want to, through the configuration file.

    min_glib_version = "2.76"
    
    [rules.g_declare_semicolon]
    level = "ignore"
    
    [rules.untranslated_string]
    level = "error"
    ignore = ["**/test-*.c"]

    It’s also very likely that we are going to add goblint and its LSP server to the GNOME SDK Flatpak runtime, along with GNOME OS, so it will always be available for use with tools like Builder and foundry.

    Enjoy

    • Pl chevron_right

      Jakub Steiner: Revert That Vector Nonsense!

      news.movim.eu / PlanetGnome • 25 April 2026

    A few years back I did a quick exploration of what GNOME app icons might look like in an alternate universe where we kept on using VGA displays. Chiselling pixels away is therapeutic. So while there is absolutely no use for these, I keep on making them if only to bring some attention to what really matters for GNOME, having nice apps.

    Here's a batch of mostly GNOME Circle app icons, with some 3rd party ones thrown in.

    Pixel art GNOME app icons, batch 1 Pixel art GNOME app icons, batch 2 Pixel art GNOME app icons, batch 3 Pixel art GNOME app icons, batch 4 Pixel art GNOME app icons, batch 5 Pixel art GNOME app icons, batch 6 Pixel art GNOME app icons, batch 7

    If you're reading this on my site rather than Planet GNOME or some flickering terminal in an abandoned Vault, then congratulations. You've stumbled upon a working Pip-Boy module! Found it half-buried under irradiated rubble, its phosphor display still humming with that familiar green glow. Enjoy these icons the way the dwellers of Vault 101 were always meant to, one glorious scanline at a time.

    • Pl chevron_right

      Michael Catanzaro: git config am.threeWay

      news.movim.eu / PlanetGnome • 24 April 2026 • 1 minute

    If you work with patches and git am , then you’re probably used to seeing patches fail to apply. For example:

    $ git am CVE-2025-14512.patch
    Applying: gfileattribute: Fix integer overflow calculating escaping for byte strings
    error: patch failed: gio/gfileattribute.c:166
    error: gio/gfileattribute.c: patch does not apply
    Patch failed at 0001 gfileattribute: Fix integer overflow calculating escaping for byte strings
    hint: Use 'git am --show-current-patch=diff' to see the failed patch
    hint: When you have resolved this problem, run "git am --continue".
    hint: If you prefer to skip this patch, run "git am --skip" instead.
    hint: To restore the original branch and stop patching, run "git am --abort".
    hint: Disable this message with "git config set advice.mergeConflict false"

    This is sad and frustrating because the entire patch has failed, and now you have to apply the entire thing manually. That is no good.

    Here is the solution, which I wish I had learned long ago:

    $ git config --global am.threeWay true

    This enables three-way merge conflict resolution, same as if you were using git cherry-pick or git merge . For example:

    $ git am CVE-2025-14512.patch
    Applying: gfileattribute: Fix integer overflow calculating escaping for byte strings
    Using index info to reconstruct a base tree...
    M	gio/gfileattribute.c
    Falling back to patching base and 3-way merge...
    Auto-merging gio/gfileattribute.c
    CONFLICT (content): Merge conflict in gio/gfileattribute.c
    error: Failed to merge in the changes.
    Patch failed at 0001 gfileattribute: Fix integer overflow calculating escaping for byte strings
    hint: Use 'git am --show-current-patch=diff' to see the failed patch
    hint: When you have resolved this problem, run "git am --continue".
    hint: If you prefer to skip this patch, run "git am --skip" instead.
    hint: To restore the original branch and stop patching, run "git am --abort".
    hint: Disable this message with "git config set advice.mergeConflict false"

    Now you have merge conflicts, which you can handle as usual. This seems like a better default for pretty much everybody, so if you use git am , you should probably enable it.

    I’ve no doubt that many readers will have known about this already, but it’s new to me, and it makes me happy, so I wanted to share. You’re welcome, Internet!

    • Pl chevron_right

      Jonathan Blandford: Goblint Notes

      news.movim.eu / PlanetGnome • 24 April 2026 • 2 minutes

    I was excited to see Bilal’s announcement of goblint, and I’ve spent the past week getting Crosswords to work with it. This is a tool I’ve always wanted and I’m pretty convinced it will be a great boon for the GNOME ecosystem. I’m posting my notes in hope that more people try it out:

    • First and most importantly, Bilal has been so great to work with. I have filed ~20 issues and feature requests and he fixed them all very quickly. In some cases, he fixed the underlying issue before I completed adding annotations to the code.
    • Most of the issues flagged were idiomatic and stylistic, but it did find real bugs. It found a half-dozen leaks, a missing g_timeout removal, and five missing class function chain ups. One was a long-standing crasher. There’s a definite improvement in quality from adopting this tool.
    • I’m also excited about pairing this with new GSoC interns. The types of things goblint flags are the things that students hit in particular (when they don’t write it all their code with AI). I think goblint will be even more important to our ecosystem as a teaching tool to our C codebase. It’s already effectively replaced my styleguide.
    • In a few instances, the use_g_autoptr rule outstripped static-scan’s ability to track leaks. Ultimately, I ended up annotating and removing the g_autoptr() calls as I couldn’t get the two to play nicely together.
    • Along the same lines, cairo, pango, and librsvg all lack G_DEFINE_AUTOPTR_CLEANUP_FUNC . It would be really great if we could fix these core libraries. In the meantime, you can add the following to your project’s goblint.toml file:
    [rules.use_g_autoptr_inline_cleanup]
    level = "error"
    ignore_types = ["cairo_*", "Pango*", "RsvgHandle"]
    
    • I had some trouble getting the pipeline integrated with GNOME’s gitlab. The gitlab recipe on his page uses premium features unavailable in the self hosted version. If it’s helpful for others, here’s what I ended up using:
    goblint:
      stage: analysis
      extends:
        - "opensuse-container@x86_64.stable"
        - ".fdo.distribution-image@opensuse"
      needs:
        - job: opensuse-container@x86_64.stable
          artifacts: false
      before_script:
        - source ci/env.sh
        - cargo install --git https://github.com/bilelmoussaoui/goblint goblint
      script:
        # Goblint is fast. We run it twice: Once to generate the report,
        # and a second time to display the output and triger an error
        - /root/.cargo/bin/goblint . --format sarif > goblint.sarif || true
        - /root/.cargo/bin/goblint . --format text
      artifacts:
        reports:
          sast: goblint.sarif
        when: always

    YMMV

    • Pl chevron_right

      This Week in GNOME: #246 Offline Dictionaries

      news.movim.eu / PlanetGnome • 24 April 2026 • 6 minutes

    Update on what happened across the GNOME project in the week from April 17 to April 24.

    GNOME Core Apps and Libraries

    Libadwaita

    Building blocks for modern GNOME apps using GTK4.

    Alice (she/her) 🏳️‍⚧️🏳️‍🌈 says

    libadwaita demo runs on android now, and apk files can be grabbed from CI

    Alice (she/her) 🏳️‍⚧️🏳️‍🌈 reports

    AdwSidebar and AdwViewSwitcherSidebar now allow adding widgets above and below their content. This can be used to add things like account switchers

    Third Party Projects

    Haydn Trowell says

    Kotoba, a fast, fully offline Japanese–English dictionary, is now available on Flathub.

    Key features:

    • Flexible search: Look up words using kanji, kana, rōmaji, or English meanings
    • Responsive results: Matches appear almost instantly
    • Detailed entries: Readings, meanings, example sentences, and usage notes where available
    • Smart conjugation handling: Recognizes inflected verb and adjective forms and maps them to their base entries
    • Bookmarks: Save words to review later
    • Fully offline: Works without an internet connection

    Get it on Flathub: https://flathub.org/apps/net.trowell.kotoba

    kotoba-entries.B2m-08A3_1x2Mzi.webp

    Antonio Zugaldia says

    Stargate is a new Java and Kotlin library that gives JVM applications access to XDG Desktop Portals on Linux.

    • Full coverage of the portal spec, including Global Shortcuts, Remote Desktop, Notification, and Settings.
    • Adds system tray icon support via the XDG Status Notifier Item specification.
    • Ships with a demo app built using Java GI, the GTK/GNOME Java bindings (come say hi at #java-gi:matrix.org ).

    Available on Maven Central. More at https://github.com/zugaldia/stargate .

    Bilal Elmoussaoui reports

    goblint has received a lot of work lately. Supporting 22 new rules since the last update and a webpage displaying the list of the rules and the available per-rule configurations https://bilelmoussaoui.github.io/goblint/ . The page can include an extensive documentation like the following https://bilelmoussaoui.github.io/goblint/#use_g_autoptr_inline_cleanup but that is the only rule having that for now.

    Jan-Michael Brummer reports

    Take control of your health with Blood Pressure 1.0.0.

    Released just a month ago, this powerful yet easy-to-use app helps you track systolic and diastolic blood pressure as well as pulse with precision. Visualize your progress through clear, intuitive charts and gain valuable insights with in-depth statistics based on ESH/ESC guidelines.

    Log measurements effortlessly with date, time, and optional notes, explore your history at a glance, and benefit from comprehensive analysis designed to support better health decisions. It’s available on Flathub: https://flathub.org/en/apps/org.tabos.bloodpressure

    bloodpressure1.CxZTe89g_2myOWS.webp

    bloodpressure2.3zsPqlbE_Z13scdY.webp

    Nathan Perlman says

    After a few months of on-and-off development, Rewaita v1.1.2 has finally been released!

    For anyone who doesn’t know, Rewaita is a customization tool for applying colour schemes to Adwaita and GNOME.

    What’s new:

    • Finally added proper Firefox support, and is also compatible with the Firefox Gnome Theme for those who use it.
    • More customization options, including three more window control themes, and a new colour scheme (Gruvbox Hard).
    • Now includes an option to force light text in the app overview, which might be useful to blur-my-shell users.
    • Some quality of life improvements like a better user guide, and bug fixes with significantly less crashing.
    • Added Chinese Simplified translations.

    Thanks to everyone who helped out with this release! Available on Flathub as always, as well as the AUR. More at https://github.com/swordpuffin/Rewaita .

    adwaita_theming.Dx-T6VFi_sc0IC.webp

    adwaita_theming_2.DUBOpUbD_2eOHFs.webp

    Solitaire

    Play Patience Games

    Will Warner reports

    Solitaire 50.1 has been released! I want to thank everyone who contributed to this update. Firstly, to the translators who created translations for the app within the first two weeks of it being on Damned Lies. Second, to everyone who submitted and commented on issues, I appreciate your help.

    Here’s what changed: • Added translations: Brazilian Portuguese, Cornish, Kazakh, Serbian, Swedish, Ukrainian, Slovenian, Russian • Added categories to the desktop entry • Added all of the missing Aisleriot card themes except for Guyenne Classic • Fixed a bug where re-deals weren’t decremented upon undoing them • Fixed a bug that allowed one too many re-deals • Clarified the uses of the solver in the preferences • Added a ‘Display the Winnability Warning’ option to the preferences • Made the theme refresh when the theme selector dialog is closed • Adjusted the brand colors to not clash with the window colors • Added spacing between cards and margins for the playing area • Added a ‘New Game’ option to the ‘Impossible to win’ dialog • Added a fail-safe for GTK not handling drags correctly on X11

    Get it on Flathub

    Pipeline

    Follow your favorite video creators.

    schmiddi reports

    Pipeline version 4.0.0 was released this week! This release overhauls downloading videos. Instead of depending on an external program to download videos, Pipeline now has downloading videos built-in. This also includes watching downloaded videos directly in the application. Besides that, you can now inspect your watch history in the application. There were further minor additions and improvements, which you can read about in the changelog of this release .

    Note that this release also contains a breaking change for Pipeline users using external video players: By default, the Flatpak on Flathub does not have the permission to spawn external video players anymore. If you want to continue using external players instead of the built-in video player, you will to manually grant Pipeline this permission, as detailed in the preferences dialog of Pipeline or in this wiki page .

    Parabolic

    Download web video and audio.

    Nick reports

    Parabolic V2026.4.0 is here!

    This release contains many bug fixes, new features and design improvements making Parabolic an even better app! This release also includes a new macOS version of Parabolic - expanding our userbase!

    A huge thank you to everyone who has tested and reported bugs throughout this development cycle. ❤️

    Here’s the full changelog:

    • Added macOS app for the GNOME version of Parabolic
    • Added Windows portable version of Parabolic
    • Added the ability to toggle super resolution formats in Parabolic’s settings
    • Added the ability to specify a preferred frame rate for video downloads in Parabolic’s settings
    • Added the ability to toggle immediate audio or video downloads separately
    • Added the ability to automatically translate embedded metadata and chapters to the app’s language on supported sites. This can be turned off in Converter settings
    • Added the ability to update deno from within the app
    • Added thumbnail image preview to add download dialog and downloads view
    • Added failed filter to downloads view
    • Added total duration label to playlist items view
    • Improved Parabolic’s startup time by using NativeAOT compilation
    • Improved selection of playlist video formats when resolutions are specified
    • Improved selection of playlist audio formats on Windows when bitrates are specified
    • Improved cropping of audio thumbnails
    • Improved handling of long file names, they will now be truncated if too long
    • Removed unsupported cookie browsers on Windows. Manual txt files should be used instead
    • Fixed an issue where download progress did not show correctly
    • Fixed an issue where the preferred video codec was ignored when a preferred frame rate was also set
    • Fixed an issue where the exported M3U playlist file would contain duplicate entries
    • Fixed an issue where credentials would not save on Linux
    • Fixed an issue where batch files were unusable on Linux and macOS
    • Fixed an issue where uploading a cookies file did not work on Windows
    • Fixed an issue where time frame downloads would not complete on Windows
    • Fixed an issue where certain video formats would process infinitely on Windows
    • Updated yt-dlp

    That’s all for this week!

    See you next week, and be sure to stop by #thisweek:gnome.org with updates on your own projects!

    • Pl chevron_right

      Sam Thursfield: Status update, 23rd April 2026

      news.movim.eu / PlanetGnome • 23 April 2026 • 6 minutes

    Hello there,

    You thought I’d given up on “status update” blog posts, did you ? I haven’t given up, despite my better judgement, this one is just even later than usual.

    Recently I’ve been using my rather obscure platform as a blogger to theorize about AI and the future of the tech industry, mixed with the occasional life update, couched in vague terms, perhaps due to the increasing number of weirdos in the world who think doxxing and sending death threats to open source contributors is a meaningful use of their time.

    In fact I do have some theories about how George Orwell (in “Why I Write” ) and Italo Calvino (in “If On a Winter’s Night a Traveller” ) made some good guesses from the 20th century about how easy access to LLMs would affect communication, politics and art here in the 21st. But I’ll leave that for another time.

    It’s also 8 years since I moved to this new country where I live now, driving off the boat in a rusty transit van to enjoy a series of unexpected and amazing opportunities. Next week I’m going to mark the occasion with a five day bike ride through the mountains of Asturias, something I’ve been dreaming of doing for several years.

    The original idea of writing a monthly post was to keep tabs on various open source software projects I sometimes manage to contribute to, and perhaps even to motivate me to do more such volunteering. Well that part didn’t work, house renovations and an unexpectedly successful gig playing synth and trombone took over all my free time; but after many years of working on corporate consultancy and doing a little open source in the background, I’m trying to make a space at work to contribute in the open again.

    I could tell the whole story here of how Codethink became “the build system people”. Maybe I will actually. It all started with BuildStream. In fact, that’s not even true. it all started in 2011 when some colleagues working with MeeGo and Yocto thought, “This is horrible, isn’t it?”

    They set out to create something better, and produced Baserock, which unfortunately turned out even worse. But it did have some good ideas. The concept of “cache keys” to identify build inputs and content-addressed storage to hold build outputs began there, as did the idea of opening a “workspace” to make drive-by changes in build inputs within a large project.

    BuildStream took this core idea, extended it to support arbitrary source kinds and element kinds defined by plugins, and added a shiny interface on top. It used OSTree to store and distribute build artifacts initially, later migrating to the Google REAPI with the goal of supporting Enterprise(TM) infrastructure. You can even use it alongside Bazel, if you like having three thousand commandline options at your disposal.

    Unfortunately it was 2016, so we wrote the whole thing in Python. (In our defence, the Rust programming language had only recently hit 1.0 and crates.io was still a ghost town, and we’d probably still be rewriting the ruamel.yaml package in Rust if we had taken that road.) But the company did make some great decisions, particularly making a condition of success for the BuildStream project that it could unify the 5 different build+integration systems that GNOME release team were maintaining. And that success meant not making a prototype, but the release team actually using BuildStream to make releases. Tristan even ended up joining the GNOME release team for a while. We discussed it all at the 2017 Manchester GUADEC, coincidentally. It was a great time. (Aside from the 6 months leading up to the conference .)

    At this point, the Freedesktop SDK already existed, with the same rather terrible name that it has today, and was already the base runtime for this new app container tool that was named… xdg-app . (At least that eventually gained a better name). However, if you can remember 8 years ago, it had a very different form than today. Now, my memory of what happened next is especially hazy at this point, because like I told you in the beginning, I was on a boat with my transit van heading towards a new life in Spain. All I have to go on 8 years later is the Git history , but somehow the Freedesktop SDK grew a 3-stage compiler bootstrap, over 600 reusable BuildStream elements, its own Gitlab namespace, and even some controversial stickers. As a parting gift I apparently added support for building VMs , the idea being that we’d reinstate the old GNOME Continuous CI system that had unfortunately died of neglect several years earlier. This idea got somewhat out of hand, let’s say.

    It took me a while to realize this, but today Freedesktop SDK is effectively the BuildStream reference distribution. What Poky is to BitBake in the Yocto project, this is what Freedesktop SDK is to BuildStream. And this is a pretty important insight. It explains the problem you may have experienced with the BuildStream documentation: you want to build some Linux package, so you read through the manual right to the end, and then you still have no fucking idea how to integrate that package.

    This isn’t a failure on the part of the authors, instead the issue is that your princess is in another castle. Every BuildStream project I’ve ever worked on has junctioned freedesktop-sdk.git and re-used the elements, plugins, aliases, configurations and conventions defined there, all of which are rigorously undocumented. The Freedesktop SDK Guide , for reasons that I won’t go into, doesn’t venture much further than than reminding you how to call Make targets.

    And this is something of a point of inflection. The BuildStream + Freedesktop SDK ecosystem has clearly not displaced Yocto, nor for that matter Linux Mint. But, like many of my favourite musicians , it has been quietly thriving in obscurity. People I don’t know are using it to do things that I don’t completely understand. I’ve seen it in comparison articles, and even job adverts. ChatGPT can generate credible BuildStream elements about as well as it can generate Dockerfiles (i.e. not very well, but it indicates a certain level of ubiquity). There have been conferences, drama, mistakes, neglect. It’s been through an 8 person corporate team hyper-optimizing the code, and its been though a mini dark age where volunteers thanklessly kept the lights on almost single handledly, and its even survived its transition to the Apache Foundation.

    Through all of this, the secret to its success probably that its just a really nice tool to work with . As much as you can enjoy software integration, I enjoy using BuildStream to do it; things rarely break, when they do its rarely difficult to fix them, and most importantly the UI is really colourful! I’m now using it to build embedded system images for a product named CTRL , which you can think of as.. a Linux distribution. There are some technical details to this which I’m working to improve, which I won’t bore you with here.

    I also won’t bore you with the topic of community governance this month, but that’s what’s currently on my mind. If you’ve been part of the GNOME Foundation for a few years, you’ll know this something that’s usually boring and occasionally becomes of almost life-or-death importance. The “let’s just be really sound” model works great, until one day when you least expect it, and then suddenly it really doesn’t. There is no perfect defence against this, and in open source communities its our diversity that brings the most resilience. When GNOME loses, KDE gains, and that way at least we still don’t have to use Windows. Indeed, this is one argument for investing in BuildStream even if it remains forever something of a minority spot. I guess I just need to remember that when you have to start thinking hard about governance, that’s a sign of success.