<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
<channel>
    <title>Dirk Primbs Unprompted - COSMIC</title>
    <link>https://unprompted.dirkprimbs.de/index.html</link>
    <description>Posts tagged &#x27;COSMIC&#x27; on Dirk Primbs Unprompted.</description>
    <language>en</language>
    <lastBuildDate>Sat, 03 Oct 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://unprompted.dirkprimbs.de/feeds/cosmic.xml" rel="self" type="application/rss+xml" />
        <item>
            <title>COSMIC on Linux Mint</title>
            <link>https://unprompted.dirkprimbs.de/posts/cosmic-on-linux-mint.html</link>
            <guid isPermaLink="true">https://unprompted.dirkprimbs.de/posts/cosmic-on-linux-mint.html</guid>
            <description>I run System76&#x27;s COSMIC desktop on Linux Mint because it tiles when I want it to and floats when I don&#x27;t - here is what it is, why I like it, and how to install and keep it updated on a distro that doesn&#x27;t ship it.</description>
            <content:encoded><![CDATA[<p>My desktop has looked different for a few weeks now. Same machine, same <a href="https://linuxmint.com/">Linux Mint</a> underneath, but when I log in I don't get <a href="https://github.com/linuxmint/cinnamon">Cinnamon</a> any more. I get COSMIC.</p>
<p><a href="https://system76.com/cosmic">COSMIC</a> is the desktop environment <a href="https://system76.com/">System76</a> built for their own distro, <a href="https://system76.com/pop/">Pop!_OS</a>. They used to ship a customised GNOME, got tired of fighting GNOME's direction, and decided to write their own - <a href="https://github.com/pop-os/cosmic-epoch">from scratch, in Rust</a>, with its own Wayland compositor and its own toolkit. That sounded like a multi-year adventure that might never land, and it did take years, but it has been stable since the end of 2025 and it is now the default on Pop!_OS.</p>
<p>What sold me is tiling, or rather the way COSMIC does tiling. I like tiling window managers in theory. In practice I always end up fighting them the moment a dialog pops up or I just want to throw two windows somewhere roughly and get on with it. COSMIC treats tiling as a switch, per workspace. Super+Y and the windows on that workspace snap into a grid that rearranges itself as windows come and go. Super+Y again and they float like on any normal desktop. A single window can be pulled out of the grid with Super+G, and Super+S stacks windows into tabs inside one tile. So I can have a workspace for writing that tiles strictly and one for photo stuff where everything floats, and I never have to commit to a philosophy. The mouse keeps working as expected the whole time, which sounds like a low bar but isn't one for most tiling setups.</p>
<p>And then there's the look. It is clean and modern without being flat to the point of boring, rounded where it should be, and it lets me pick accent colours, corner roundness, dark and light mode, a panel, a dock or both, all from one settings app. After years of Cinnamon this felt like walking into a freshly renovated room in a house I already knew.</p>
<h2>Why Mint and not Pop!_OS</h2>
<p>The obvious question is why I didn't just install Pop!_OS. Fair. When I picked Mint for this machine, two things mattered: it is built on Ubuntu, so pretty much every piece of software that ships a .deb works out of the box, and I really liked the look and feel of Cinnamon. Neither of those reasons went away. The machine is set up the way I want it, I have <a href="https://github.com/linuxmint/timeshift">Timeshift</a> snapshots going back a while, and I didn't feel like reinstalling just to change the desktop.</p>
<p>And since Mint 22 and Pop!_OS 24.04 both sit on Ubuntu 24.04, COSMIC's packages are built against the same libraries Mint has. That is the whole trick. It works.</p>
<p>Cinnamon is still installed, by the way. It's one click away on the login screen, which turned out to be useful (more on that below).</p>
<h2>Installing COSMIC on Mint</h2>
<p>COSMIC isn't in Mint's repositories, so the packages come from System76's Pop!_OS repository. The catch: that repository also contains Pop's own versions of a bunch of system packages - mesa, PipeWire configuration, boot themes, Pop's default settings. You want none of those on Mint. So the repository goes in together with an apt pin that only allows COSMIC through.</p>
<p>This took me a couple of attempts to get right, so here is the version that works.</p>
<p><strong>1. Add System76's signing key</strong> and check that it really is theirs. The fingerprint has to be <code>63C46DF0140D738961429F4E204DD8AEC33A7AFF</code>.</p>
<div class="codehilite"><pre><span></span><code>sudo<span class="w"> </span>install<span class="w"> </span>-d<span class="w"> </span>-m<span class="w"> </span><span class="m">0755</span><span class="w"> </span>/etc/apt/keyrings
curl<span class="w"> </span>-fsSL<span class="w"> </span><span class="s1">&#39;https://keyserver.ubuntu.com/pks/lookup?op=get&amp;options=mr&amp;search=0x63C46DF0140D738961429F4E204DD8AEC33A7AFF&#39;</span><span class="w"> </span><span class="se">\</span>
<span class="w">  </span><span class="p">|</span><span class="w"> </span>gpg<span class="w"> </span>--dearmor<span class="w"> </span><span class="p">|</span><span class="w"> </span>sudo<span class="w"> </span>tee<span class="w"> </span>/etc/apt/keyrings/pop-os-archive.gpg<span class="w"> </span>&gt;<span class="w"> </span>/dev/null
gpg<span class="w"> </span>--show-keys<span class="w"> </span>/etc/apt/keyrings/pop-os-archive.gpg
</code></pre></div>

<p><strong>2. Add the pin before the repository</strong>, so there is never a moment where the repo is active without it. Save this as <code>/etc/apt/preferences.d/pop-os-cosmic.pref</code>:</p>
<div class="codehilite"><pre><span></span><code><span class="err">#</span><span class="w"> </span><span class="nx">Only</span><span class="w"> </span><span class="nx">these</span><span class="w"> </span><span class="nx">packages</span><span class="w"> </span><span class="nx">may</span><span class="w"> </span><span class="nx">come</span><span class="w"> </span><span class="nx">from</span><span class="w"> </span><span class="nx">apt</span><span class="p">.</span><span class="nx">pop</span><span class="o">-</span><span class="nx">os</span><span class="p">.</span><span class="nx">org</span><span class="p">:</span>
<span class="nx">Package</span><span class="p">:</span><span class="w"> </span><span class="nx">cosmic</span><span class="o">-*</span><span class="w"> </span><span class="nx">xdg</span><span class="o">-</span><span class="nx">desktop</span><span class="o">-</span><span class="nx">portal</span><span class="o">-</span><span class="nx">cosmic</span><span class="w"> </span><span class="nx">adw</span><span class="o">-</span><span class="nx">gtk3</span><span class="w"> </span><span class="nx">adwaita</span><span class="o">-</span><span class="nx">icon</span><span class="o">-</span><span class="nx">theme</span><span class="o">-</span><span class="nx">full</span><span class="w"> </span><span class="nx">appstream</span><span class="o">-</span><span class="nx">data</span><span class="o">-</span><span class="nx">pop</span><span class="w"> </span><span class="nx">pop</span><span class="o">-</span><span class="nx">fonts</span><span class="w"> </span><span class="nx">pop</span><span class="o">-</span><span class="nx">icon</span><span class="o">-</span><span class="nx">theme</span><span class="w"> </span><span class="nx">pop</span><span class="o">-</span><span class="nx">launcher</span><span class="w"> </span><span class="nx">pop</span><span class="o">-</span><span class="nx">sound</span><span class="o">-</span><span class="nx">theme</span>
<span class="nx">Pin</span><span class="p">:</span><span class="w"> </span><span class="nx">origin</span><span class="w"> </span><span class="nx">apt</span><span class="p">.</span><span class="nx">pop</span><span class="o">-</span><span class="nx">os</span><span class="p">.</span><span class="nx">org</span>
<span class="nx">Pin</span><span class="o">-</span><span class="nx">Priority</span><span class="p">:</span><span class="w"> </span><span class="mi">500</span>

<span class="err">#</span><span class="w"> </span><span class="nx">Everything</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">Pop</span><span class="p">!</span><span class="nx">_OS</span><span class="w"> </span><span class="nx">repository</span><span class="p">:</span><span class="w"> </span><span class="nx">never</span><span class="p">.</span>
<span class="nx">Package</span><span class="p">:</span><span class="w"> </span><span class="o">*</span>
<span class="nx">Pin</span><span class="p">:</span><span class="w"> </span><span class="nx">origin</span><span class="w"> </span><span class="nx">apt</span><span class="p">.</span><span class="nx">pop</span><span class="o">-</span><span class="nx">os</span><span class="p">.</span><span class="nx">org</span>
<span class="nx">Pin</span><span class="o">-</span><span class="nx">Priority</span><span class="p">:</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span>
</code></pre></div>

<p>The <code>-1</code> matters. My first version used <code>1</code>, which normally means "only if nothing else provides it". But Pop marks several of its system packages as Essential, and apt installs Essential packages from any repository it is allowed to use at all. A test run of a full upgrade wanted to drop Pop's default settings, its PipeWire configuration and its boot splash onto my Mint system. <code>-1</code> means never, and that's what you want here.</p>
<p><strong>3. Add the repository</strong> as <code>/etc/apt/sources.list.d/pop-os-cosmic.sources</code>:</p>
<div class="codehilite"><pre><span></span><code><span class="n">Types</span><span class="o">:</span><span class="w"> </span><span class="n">deb</span>
<span class="n">URIs</span><span class="o">:</span><span class="w"> </span><span class="n">https</span><span class="o">://</span><span class="n">apt</span><span class="o">.</span><span class="na">pop</span><span class="o">-</span><span class="n">os</span><span class="o">.</span><span class="na">org</span><span class="o">/</span><span class="n">release</span>
<span class="n">Suites</span><span class="o">:</span><span class="w"> </span><span class="n">noble</span>
<span class="n">Components</span><span class="o">:</span><span class="w"> </span><span class="n">main</span>
<span class="n">Architectures</span><span class="o">:</span><span class="w"> </span><span class="n">amd64</span>
<span class="n">Signed</span><span class="o">-</span><span class="n">By</span><span class="o">:</span><span class="w"> </span><span class="sr">/etc/apt/keyrings/</span><span class="n">pop</span><span class="o">-</span><span class="n">os</span><span class="o">-</span><span class="n">archive</span><span class="o">.</span><span class="na">gpg</span>
</code></pre></div>

<p><strong>4. Check, then install.</strong></p>
<div class="codehilite"><pre><span></span><code>sudo<span class="w"> </span>apt<span class="w"> </span>update
apt-cache<span class="w"> </span>policy<span class="w"> </span>pop-default-settings<span class="w">   </span><span class="c1"># should show -1</span>
apt<span class="w"> </span>install<span class="w"> </span>-s<span class="w"> </span>cosmic-session<span class="w">           </span><span class="c1"># dry run: look for anything being removed</span>
sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>cosmic-session
</code></pre></div>

<p>Log out, pick COSMIC on the login screen, done. Mint's LightDM stays as the login screen, which I like - if COSMIC ever breaks, I can still log in.</p>
<h2>Keeping it up to date</h2>
<p>With the repository and the pin in place, COSMIC updates simply show up in Mint's Update Manager next to everything else. Nothing to script. COSMIC moves fast, so I try to install those updates on their own rather than in the middle of a big batch, so I know what to blame if something acts up. And Timeshift takes a daily snapshot anyway.</p>
<h2>The one thing that bit me</h2>
<p>While cleaning up an old VPN server I didn't use any more, I ran <code>apt purge openvpn</code>. Next login: no COSMIC. COSMIC's settings app depends on NetworkManager's OpenVPN plugin, so apt quietly removed the settings app and the COSMIC session along with OpenVPN, and the login screen only offered Cinnamon. Good thing it was still there. Reinstalling <code>cosmic-session</code> and <code>cosmic-settings</code> fixed it in a minute, and to stop the VPN server I masked its service instead of removing the package.</p>
<p>So now I run every <code>apt remove</code> with <code>-s</code> first and actually read the list. A habit I should have had anyway.</p>]]></content:encoded>
            <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
        </item>
</channel>
</rss>