<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/assets/feed.xslt"?>
<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title>Web logs of McSinyx</title>
<link>https://lumvok.store</link>
<atom:link href="https://lumvok.store/feed.xml" rel="self" type="application/rss+xml"/>
<description>Random write-ups packed with pop culture references</description>
<copyright><![CDATA[🄯 2019–2024 Nguyễn Gia Phong under CC BY-SA 4.0]]></copyright>
<language>en</language>
<generator>Franklin</generator>
<item>
  <title>Best Ways to Watch YouTube Videos</title>
  <link>https://lumvok.store/blog/youtu/index.html</link>
  <guid>https://lumvok.store/blog/youtu/index.html</guid>
  <description>Do you know de wey?  Lemme show you de wey&#33;</description>
  <category>fun</category><category>recipe</category><category>net</category><category>nix</category><category>clipboard</category>
  <pubDate>Wed, 17 Jan 2024 00:00:00 +0000</pubDate>
  <content:encoded><![CDATA[
<h1 id="best_ways_to_watch_youtube_videos">Best Ways to Watch YouTube Videos</h1>
<p>In today&#39;s episode of <a href="https://www.alexmolas.com/2023/07/15/nobody-cares-about-your-blog.html">guides nobody asked for and likely having been covered by someone more qualified</a>, lemme show you the <em>correct</em> ways to view videos hosted on YouTube and other hostile, tracker-riddled hellscapes.  Whilst I despise Google&#39;s mass surveillance practices, it stores a large proportion of culturally significant videos and clips that would be difficult to mirror to user-respecting services due to copyright.  Hell, even YouTube doesn&#39;t have the right to distribute many of them in the first place.</p>
<p>Because of YouTube&#39;s circumvention of advertisement blockers, the ad-blocking arm race finally caught mainstream media attention and tis kool to talk about that now.  Hence I&#39;m happy to jump on the bandwagon, albeit a wee bit late, but this ain&#39;t just that. Since I feed you poison—over 4&#37; of the pages linked from my site are on YouTube—the least I can do is sell you my cures.</p>
<h2 id="using_a_proper_media_player">Using a Proper Media Player</h2>
<p>The most popular solutions are either to use for a good blocker on a browser with &#40;supposedly&#41; long-term support for <a href="https://github.com/uBlockOrigin/uBlock-issues/issues/338#issuecomment-1332300191">Manifest V2</a> like <a href="https://ublockorigin.com">uBlock Origin</a> on Firefox, or use alternative front-ends such as <a href="https://invidious.io">Invidious</a> or <a href="https://github.com/TeamPiped/Piped">Piped</a>.  Although uBlock Origin is essential for a pleasant experience on the modern interwebs and alternative frontends offers the best UX for browsing videos, in-browser and service-specific media players are inferior anyway when compared to programs properly designed for a decent playback experience.</p>
<p>My favorite has been <a href="https://mpv.io">mpv</a> for as long as I can remember, as it makes it easy to adjust video brightness/contrast/etc., playback speed, subtitle size and placements, and to overamplify quiet audios.  Out of the box, it integrates with <a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a>, a time shifter with support for <a href="https://github.com/yt-dlp/yt-dlp/raw/master/supportedsites.md">most online media services</a>. Just drop the URL into an mpv window and <a href="https://www.youtube.com/watch?v&#61;_FNzL5nW_u4">boom</a>, it werks&#33;</p>
<p>Either <a href="https://uno.starshard.studio/notes/9nmgldtdgghu8m2n">drag-and-drop</a> or invoking <code>mpv &#36;url</code> is quite convenient, but not that close to following an anchor, is it?  You&#39;d need to first open mpv or a program launcher<sup id="fnref:launch">[1]</sup>, then drag the URL there, or perhaps copy and paste it for the latter cases. What if you <a href="https://ziglang.org/perf">gotta go fast</a>, aye?  As a <a href="https://video.hardlimit.com/c/morbiwars">hedgehog-maxxer</a> meself, of course I can do better, and here&#39;s how.</p>
<h2 id="with_a_browser_add-on">With a Browser Add-on</h2>
<p>While drafting this article, I noticed that the <em>ff2mpv</em> extension I was using had <a href="https://github.com/woodruffw/ff2mpv/commit/2397193b36e6.patch">technically been non-free</a> for a while.  Albeit I understand and respect the author&#39;s noble intention against violence, I believe discrimination never ends up helping those oppressed due to the power imbalance for the exclusion false-positives to be worth it.</p>
<p>For this reason, I switched to <a href="https://addons.mozilla.org/en-US/firefox/addon/iina-open-in-mpv">Open in mpv</a> and recommend it instead. The usage is practically the same: open context menu at the video URL and select <em>Open this link in mpv</em>.  The internal mechanism is a bit different though, and because it influences the installation process, I will try to briefly explain <a href="https://www.youtube.com/watch?v&#61;1Fl2sMV7Hcc">how it works</a>.</p>
<p>The way <em>Open in mpv</em> works is a bit convoluted.  First, it wraps the specified URL in a <code>mpv</code> scheme.  The new URL starts with <code>mpv://</code> is then passed back to Firefox, which must have been configured to open it in the native program <code>open-in-mpv</code>.  This program parses the URL into the equivalent mpv command and execute it.  If you are not on NixOS, see the <a href="https://github.com/Baldomo/open-in-mpv/raw/master/README.md">extension&#39;s README</a> to set it up yourself.</p>
<p>Otherwise, it can be declared in <a href="https://nixos.org/manual/nixos/stable/options#opt-programs.firefox.policies">configuration.nix&#40;5&#41;</a> as follows. The declarations should be self-explanatory after referencing Firefox&#39;s documentation for <a href="https://mozilla.github.io/policy-templates">policies.json</a>.  If you have trouble finding an extension&#39;s ID and download URL, search for it in <a href="https://gnuzilla.gnu.org/mozzarella">Mozzarella</a>.</p>
<pre><code class="language-nix">&#123; pkgs, ... &#125;:
&#123;
  programs.firefox &#61; &#123;
    enable &#61; true;
    policies &#61; &#123;
      ExtensionSettings.&quot;&#123;d66c8515-1e0d-408f-82ee-2682f2362726&#125;&quot; &#61; &#123;
        default_area &#61; &quot;menupanel&quot;;
        installation_mode &#61; &quot;normal_installed&quot;;
        install_url &#61;
          &quot;https://addons.mozilla.org/firefox&quot;
          &#43; &quot;/downloads/latest/iina-open-in-mpv/latest.xpi&quot;;
      &#125;;
      Handlers.scheme.mpv &#61; &#123;
        action &#61; &quot;useHelperApp&quot;;
        ask &#61; false;
        handlers &#61; &#91; &#123;
          name &#61; &quot;open-in-mpv&quot;;
          path &#61; &quot;&#36;&#123;pkgs.open-in-mpv&#125;/bin/open-in-mpv&quot;;
        &#125; &#93;;
      &#125;;
    &#125;;
  &#125;;
&#125;</code></pre>
<p>Even though Mozzarella is supposed to only show libre add-ons, be aware that the metadata it crawls from <a href="https://addons.mozilla.org">addons.mozzila.org</a> might not always be <a href="https://issues.guix.gnu.org/68361">correct</a>.  Ideally, browser extensions should be packaged in the distribution&#39;s repository, but packaging discipline is not exactly NixOS&#39;s strong suit.  I will probably post an update on how to declare <code>policies.json</code> in Guix once I figure that out.</p>
<h2 id="from_a_feed_reader">From a Feed Reader</h2>
<p>Now we can properly watch videos while browsing the web, but subscribing to YouTube channels on its web interface would require creating an account and subjecting one&#39;s self to more surveillance.  Fortunately, at the time of writing, YouTube still provide Atom <a href="https://en.wikipedia.org/wiki/Web_feed">feeds</a> for syndication. Funny enough, they are advertised on the channel pages as RSS:</p>
<pre><code class="language-html">&lt;link rel&#61;&quot;alternate&quot;
      type&#61;&quot;application/rss&#43;xml&quot;
      title&#61;&quot;RSS&quot;
      href&#61;&quot;https://www.youtube.com/feeds/videos.xml?channel_id&#61;…&quot;&gt;</code></pre>
<p>The referenced feed employ <a href="https://www.rssboard.org/media-rss">Media RSS</a> to communicate the video URL. This extension is widely supported by feed readers, as well as the previously mentioned feed-discovery mechanism.  I use <a href="https://lzone.de/liferea">Liferea</a>, which allows me to directly paste the YouTube channel&#39;s URL<sup id="fnref:ytc">[2]</sup>, and displays each video&#39;s description, thumbnail and enclosed media, e.g.</p>
<p><img src="https://lumvok.store/assets/liferea-youtube.png" alt="Liferea in action" /></p>
<p>For each MIME type to, enclosures can be configured to be opened by a user-preferred program.  In this case, I set <code>mpv --ytdl-format&#61;b</code> for <code>application/x-shockwave-flash</code> &#40;a reminiscence of a time when browsers needed <a href="https://ruffle.rs">Flash</a> to play videos and animations&#41; for the <em>second</em> best quality to save some bandwidth.  YouTube encodes the highest resolution video separate from the audio, so the best combined format <code>b</code> is one level lower than yt-dlp&#39;s default best video and best audio together.</p>
<h2 id="via_clipboard_integration">Via Clipboard Integration</h2>
<p>People also share videos with me via instant messaging. I find it cumbersome to open the URL in the browser then redirect it to the media player, so the clipboard is used as the bridge instead. To do this, I simply create a key binding to the command below.<sup id="fnref:wl">[3]</sup></p>
<pre><code class="language-sh">mpv --ytdl-format&#61;b &quot;&#36;&#40;xclip -out -selection clipboard&#41;&quot;</code></pre>
<h2 id="musing">Musing</h2>
<p>There, I shared how I do it so <a href="https://lumvok.store/blog/youtu">you can too</a>&#33;  If they seem needlessly complex, you share my disappointment on the UX evolution of the mainstream web.  I dream of a more semantic web, not necessarily web 3.0, perhaps just more explicitly typed, where e.g. a YouTube URL for embedding would be a <code>video/webm</code> instead of a <code>text/html</code>.</p>
<p>If <code>mailto</code> URIs can launch our email client, and social media pages can bug us to open the post in their own app, why can&#39;t we have interoperable media handling?  Maybe we should, but I&#39;m not sure if we can. <a href="https://www.searchenginejournal.com/youtube-is-showing-ads-on-non-monetized-channels/388674">Greed</a> stands in our way.  Providers force us to use their proprietary <a href="https://pluralistic.net/2023/01/21/potemkin-ai">malware</a> to consume their service.  <a href="https://www.defectivebydesign.org">DRM</a> has become the foundation of media distribution.  Grassroots movements like <a href="https://framasoft.org">Framasoft</a> might never reach mainstream status.</p>
<p>I don&#39;t mean to tell you to give up though, just to direct your energy to where it matters.  Spend less on developing <a href="https://sr.ht/~benbusby/farside">alternative front-ends</a> than on ethical replacements, bridges and inviting people over. We need more <a href="https://sepiasearch.org">videos</a>, more <a href="https://www.funkwhale.audio">music</a>, more <a href="https://castopod.org">podcasts</a>, more <a href="https://en.wikipedia.org/wiki/Open_access">knowledge</a>, better <a href="https://xmpp.org">instant</a> <a href="https://matrix.org">messaging</a>, better <a href="https://seirdy.one/posts/2021/03/10/search-engines-with-own-indexes">search engines</a>, better <a href="https://browser.mt">translations</a>, better <a href="https://www.home-assistant.io">home</a> <a href="https://platypush.tech">automation</a>, and whatnot. Against all odds, maybe things will finally start to improve even for those outside of our bubble.  <a href="https://fe.disroot.org/@mcsinyx/posts/ALaW77HgCSPq4pLxpo">Perchance.</a></p>
<table class="fndef" id="fndef:launch">
    <tr>
        <td class="fndef-backref">[1]</td>
        <td class="fndef-content">Or a terminal emulator</td>
    </tr>
</table><table class="fndef" id="fndef:ytc">
    <tr>
        <td class="fndef-backref">[2]</td>
        <td class="fndef-content">Something starting with https://www.youtube.com/@</td>
    </tr>
</table><table class="fndef" id="fndef:wl">
    <tr>
        <td class="fndef-backref">[3]</td>
        <td class="fndef-content">On <a href="https://wayland.social/@compositor/110768798303454842">Wayland</a>, replace <code>xclip</code> with something equivalent</td>
    </tr>
</table>    <a href="mailto:cnx.site@loa.loang.net?In-Reply-To=%3Cblog/youtu@cnx%3E&Subject=Re: Best Ways to Watch YouTube Videos">Reply via email</a>]]></content:encoded>
  <comments><![CDATA[https://lists.sr.ht/~cnx/site?search=In-Reply-To:%3Cblog/youtu@cnx%3E]]></comments>
  <wfw:commentRss>https://lumvok.store/blog/youtu/comments.xml</wfw:commentRss>
</item>
<item>
  <title>NixOS on Btrfs&#43;tmpfs</title>
  <link>https://lumvok.store/blog/butter/index.html</link>
  <guid>https://lumvok.store/blog/butter/index.html</guid>
  <description>How I reinstalled NixOS on Btrfs with an amnesiac root        and backed up my data</description>
  <category>fun</category><category>recipe</category><category>nix</category>
  <pubDate>Sun, 14 Nov 2021 00:00:00 +0000</pubDate>
  <content:encoded><![CDATA[
<h1 id="nixos_on_btrfstmpfs">NixOS on Btrfs&#43;tmpfs</h1>
<p>In 2018, dad bought me a new laptop to replace the good ole Compaq nx7010 whose screen unfortunately got infected by some sort of microbe and dieded shortly afterwards.  The new one, whilst having a considerably worse build quality &#40;like all other late-2010s ones when compared to mid-2000s models&#41;, had a dozen times as much storage: a 250 GB M.2 SSD and a 500 GB SATA HDD.</p>
<p>My data hoarding habit has grown exponentially ever since.  Initially, I used to back up the data from the SSD to the HDD but after a few years, I ran out of space and decided to get some more storage.  Instead of buying a portable hard disk like a normal person would, I went for an SATA SSD, as it was rather difficult to find a 7200 rpm 2.5-inch<sup id="fnref:metric">[1]</sup> HDD in the market at the time.</p>
<p>I then asked my father for a spare SATA-to-USB case &#40;he switched to using a dock a while ago, and like other dads, nothing is ever thrown away&#41; and prepared to swap the drives.  As cloning the data would have been too easy, I decided to <em>spice things up</em> by reinstalling the OS.  Back then I was dual-booting Debian and NixOS, but the former had hardly been ever booted for months so it was time to let it go:</p>
<p><img src="https://lumvok.store/assets/let-it-go.png" alt="Elsa rolling on the floor crying" /></p>
<p>In addition, I wanted to hop on the new and shinny<sup id="fnref:new">[2]</sup> train of Btrfs. It has compression, snapshots and subvolumes, what&#39;s not to love?  Let&#39;s replace something I&#39;d been using for nearly a decade with a file system I had absolutely zero experience with, what could possibly go wrong, right?</p>
<div class="franklin-toc"><ol><li>Reinstallation<ol><li>Preparation</li><li>Partitioning</li><li>Configuration</li><li>Installation</li><li>Profits</li></ol></li><li>Backup<ol><li>Initialization</li><li>Repetition</li></ol></li></ol></div>
<h2 id="reinstallation">Reinstallation</h2>
<p>I was going to reinstall NixOS with an ephemeral root, which had been covered to death in the following brilliant resources:</p>
<ul>
<li><p><a href="https://grahamc.com/blog/erase-your-darlings">Erase your darlings: immutable infrastructure for mutable systems</a></p>
</li>
<li><p><a href="https://elis.nu/blog/2020/05/nixos-tmpfs-as-root">NixOS ❄: tmpfs as root</a></p>
</li>
<li><p><a href="https://github.com/nix-community/impermanence">Nix community&#39;s impermanence modules</a></p>
</li>
<li><p><a href="https://christine.website/blog/paranoid-nixos-2021-07-18">Paranoid NixOS Setup</a></p>
</li>
</ul>
<p>The only twist here is that I was using Btrfs instead of ZFS or ext4 like in other guides.  This choice would influence how to back up in the later section.</p>
<h3 id="preparation">Preparation</h3>
<p>First of all, I temporarily copied data to the SATA SSD from the M.2, including <a href="https://trong.loang.net/~cnx/dotfiles/tree/nix">my Nix configurations</a>.  Using either <code>cp</code> or <code>rsync</code> didn&#39;t seem to have any effect on the performance, and in the mean time I also went ahead and grabbed a <a href="https://channels.nixos.org/nixos-unstable">NixOS unstable live image</a> and <code>dd</code>&#39;ed it to a flash drive.  As I&#39;m tracking unstable, installing from the same version would allowed me to skip switching the channel and a lot of downloading.</p>
<h3 id="partitioning">Partitioning</h3>
<p>After booting up the live image, I opened up a root shell with <code>sudo -i</code>. As expected, <code>fdisk</code> reports the M.2 SSD as <code>/dev/nvme0n1</code>.  Paranoid as always, I decided to give the EFI system partition a whole gibibyte, swap eight to match memory<sup id="fnref:memory">[3]</sup> and the rest as a single chonky Btrfs partition:</p>
<pre><code class="language-sh">parted /dev/nvme0n1 -- mklabel gpt
parted /dev/nvme0n1 -- mkpart ESP fat32 1MiB 1GiB
parted /dev/nvme0n1 -- set 1 boot on
mkfs.vfat /dev/nvme0n1p1parted /dev/nvme0n1 -- mkpart Swap linux-swap 1GiB 9GiB
mkswap -L Swap /dev/nvme0n1p2
swapon /dev/nvme0n1p2parted /dev/nvme0n1 -- mkpart primary 9GiB 100&#37;
mkfs.btrfs -L Butter /dev/nvme0n1p3</code></pre>
<p>As I typed this, I realized that I should have set up encryption for the last partition so I would probably need to reinstall in the near future to fix this mistake.  Anyway, with the target system&#39;s root mounted as tmpfs, I would need to persist <code>/nix</code> &#40;obviously&#41;, <code>/etc</code> &#40;mostly for authentication and other secret stuff not included in <code>configuration.nix</code> that I was too lazy to opt in individually&#41;, <code>/var/log</code>, <code>/root</code> and <code>/home</code>:</p>
<pre><code class="language-sh">mount /dev/nvme0n1p3 /mnt
btrfs subvolume create /mnt/nix
btrfs subvolume create /mnt/etc
btrfs subvolume create /mnt/log
btrfs subvolume create /mnt/root
btrfs subvolume create /mnt/home
umount /mnt</code></pre>
<p>Most subvolumes can be mounted with <code>noatime</code>, except for <code>/home</code> where I frequently need to sort files by modification time.  All of them should have forced compression though:</p>
<pre><code class="language-sh">mount -t tmpfs -o mode&#61;755 none /mnt
mkdir -p /mnt/&#123;boot,nix,etc,var/log,root,home&#125;
mount /dev/nvme0n1p1 /mnt/boot
mount -o subvol&#61;nix,compress-force&#61;zstd,noatime /dev/nvme0n1p3 /mnt/nix
mount -o subvol&#61;etc,compress-force&#61;zstd,noatime /dev/nvme0n1p3 /mnt/etc
mount -o subvol&#61;log,compress-force&#61;zstd,noatime /dev/nvme0n1p3 /mnt/var/log
mount -o subvol&#61;root,compress-force&#61;zstd,noatime /dev/nvme0n1p3 /mnt/root
mount -o subvol&#61;home,compress-force&#61;zstd /dev/nvme0n1p3 /mnt/home</code></pre>
<h3 id="configuration">Configuration</h3>
<p>With everything mounted, <code>nixos-generate-config --root /mnt</code> could be run to generate a basic configuration.  But wait, didn&#39;t I say something about my dot files?  That&#39;s correct, but it&#39;s not easy to handcraft the <code>hardware-configuration.nix</code>.  After making sure all are mounted with the right options and <code>services.fstrim.enable</code> is <code>true</code>, I copied other configuration files to <code>/etc/nixos</code> and finished this step.</p>
<h3 id="installation">Installation</h3>
<p>NixOS installation is as simple as running <code>nixos-install</code>.  But my job was not done after setting the root password and rebooting into the new system. It was working, but not functional.  There was nothing meaningful for me to do on it, so I had to log in &#40;as root&#41;, <code>passwd</code>&#39;ed the user and copied the home folder back from the temporary drive.</p>
<p>After freeing the new SATA SSD, I also filled it with butter.  Yes, all the way, no GPT, no MBR, just Btrfs, whose subvolumes were used in place of partitions:</p>
<pre><code class="language-sh">mkfs.btrfs -f -L Fly /dev/sdb
mkdir -p /mnt
mount /dev/sdb /mnt
btrfs subvolume create /mnt/movies</code></pre>
<p>At that time the only disposable data I had were my movies collection. The HDD also contained other data but they were rebalanced at <code>/home</code> &#40;on the M.2&#41;.  After swapping the SATA SSD inside the laptop, I logged in as the normal user and get the exact same environment before the reinstallation.</p>
<h3 id="profits">Profits</h3>
<p>Thanks to subvolumes and compression, the free spaces were no longer fragmented and I think I gained like 100 GB &#40;not counting the old Debian&#39;s root&#41;.  Backup would also be less painful with Btrfs snapshots &#40;instead of plain <code>rsync</code> like I used to&#41; as shown as follows.</p>
<h2 id="backup">Backup</h2>
<p>With all data migrated, the HDD could be used for backing up.  First, some legacy data I no longer access were moved there, then I started to back up my <code>/home</code> partition:</p>
<h3 id="initialization">Initialization</h3>
<p>Having learned my lesson, I did not forget to set up <a href="https://gitlab.com/cryptsetup/cryptsetup">LUKS</a> this time:</p>
<pre><code class="language-sh">cryptsetup luksFormat /dev/sdb
cryptsetup luksOpen /dev/sdb backup</code></pre>
<p>To make use of snapshots, the backup drive gotta be Btrfs as well. The compression level was turned up to 14 this time &#40;default was 3&#41;:</p>
<pre><code class="language-sh">mkfs.btrfs -L Backup /dev/mapper/backup
mkdir /backup
mount -o noatime,compress-force&#61;zstd:14 /dev/mapper/backup /backup</code></pre>
<p>Following <a href="https://btrfs.wiki.kernel.org/index.php/Incremental_Backup">Btrfs Wiki</a>, I made the first <code>/home</code> snapshot and sent it to the backup drive:</p>
<pre><code class="language-sh">btrfs subvolume create /backup/home
today&#61;&#36;&#40;date --iso-8601&#41;
btrfs subvolume snapshot -r /home /home/&#36;today
sync
btrfs send /home/&#36;today | btrfs receive /backup/home
sync</code></pre>
<h3 id="repetition">Repetition</h3>
<p>For next backups, I also mounted the drive and created a snapshot:</p>
<pre><code class="language-sh">cryptsetup luksOpen /dev/sdb backup
mkdir -p /backup
mount -o noatime,compress-force&#61;zstd:14 /dev/mapper/backup /backup
today&#61;&#36;&#40;date --iso-8601&#41;
btrfs subvolume snapshot -r /home /home/&#36;today
sync</code></pre>
<p>Say the latest snapshot was on the <code>&#36;previous</code> day, I only needed to send the difference between the old and new backup.  Afterwards, it is safe to delete the local <code>&#36;previous</code> snapshot to save some space.</p>
<pre><code class="language-sh">btrfs send -p /home/&#36;previous /home/&#36;today | btrfs receive /backup/home
btrfs subvolume delete /home/&#36;previous
sync</code></pre>
<p>Finally, unmount the drive and close the LUKS volume:</p>
<pre><code class="language-sh">umount /backup
cryptsetup luksClose backup</code></pre>
<p>Is this more complicated than good ole <code>rsync</code>?  Yes.  Is it safer?  Also yes, thanks to copy-on-write.  Would I bother using one of the tools suggested in the wiki?  Probably not, I&#39;ve already documented everything in this article in case I forget anything.</p>
<table class="fndef" id="fndef:metric">
    <tr>
        <td class="fndef-backref">[1]</td>
        <td class="fndef-content">63.5 mm for those outside of the land of guns and burgers</td>
    </tr>
</table><table class="fndef" id="fndef:new">
    <tr>
        <td class="fndef-backref">[2]</td>
        <td class="fndef-content">OK, maybe not new, but certainly shinny</td>
    </tr>
</table><table class="fndef" id="fndef:memory">
    <tr>
        <td class="fndef-backref">[3]</td>
        <td class="fndef-content">Slightly larger since some of the memory is dedicated to graphics</td>
    </tr>
</table>    <a href="mailto:cnx.site@loa.loang.net?In-Reply-To=%3Cblog/butter@cnx%3E&Subject=Re: NixOS on Btrfs&#43;tmpfs">Reply via email</a>]]></content:encoded>
  <comments><![CDATA[https://lists.sr.ht/~cnx/site?search=In-Reply-To:%3Cblog/butter@cnx%3E]]></comments>
  <wfw:commentRss>https://lumvok.store/blog/butter/comments.xml</wfw:commentRss>
</item>
</channel></rss>