<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: SnowCode</title>
    <description>The latest articles on Forem by SnowCode (@snowcode).</description>
    <link>https://forem.com/snowcode</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F599426%2F0d9c152c-9d73-454a-8abb-7ec2871dd1ab.jpeg</url>
      <title>Forem: SnowCode</title>
      <link>https://forem.com/snowcode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/snowcode"/>
    <language>en</language>
    <item>
      <title>Installing Nextcloud in isolation with podman</title>
      <dc:creator>SnowCode</dc:creator>
      <pubDate>Wed, 02 Jul 2025 16:51:01 +0000</pubDate>
      <link>https://forem.com/snowcode/installing-nextcloud-in-isolation-with-podman-k48</link>
      <guid>https://forem.com/snowcode/installing-nextcloud-in-isolation-with-podman-k48</guid>
      <description>&lt;p&gt;I recently wanted to install Nextcloud, I wanted to use containers because I like when things are very organized and each thing is in its own little box, rather than scattered across the system.&lt;/p&gt;

&lt;p&gt;However, I saw that the official method with Docker was using the Docker socket, meaning that this Nextcloud container has direct access to Docker itself and can interact with other containers than its own. &lt;/p&gt;

&lt;p&gt;I don't want this, I want to use Podman (which is rootless) and I want that Nextcloud be only able to access its own containers.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Quick note&lt;/em&gt;&lt;/strong&gt; : This tutorial has been tested on a blank Debian 12 virtual machine with &lt;em&gt;unstable&lt;/em&gt; source enabled and ssh installed. The test has been made on 2nd July 2025. At time of writing the Nextcloud AIO version was v11.2.1, the Nextcloud version was v31.0.6 and the podman version was v5.4.2.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why this method
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Official Nextcloud's installation method&lt;/li&gt;
&lt;li&gt;Very complete, AIO can automatically set up office, Talk, high performance backend for NC Talk, etc.&lt;/li&gt;
&lt;li&gt;Fast and easy&lt;/li&gt;
&lt;li&gt;Rootless configuration (more secure)&lt;/li&gt;
&lt;li&gt;Isolated from the rest of your containers and system. Unlike in the official instructions, Nextcloud won't be able to interact with other containers than its own.&lt;/li&gt;
&lt;li&gt;Great for trying out Nextcloud quickly locally, even if you can't open the ports of your router or don't have any domain name&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;p&gt;Before going on this, we obviously need Podman to be installed. If you're doing this from your home network and can't (or don't want to) open the ports of your router, you might want to also install &lt;a href="https://theboroer.github.io/localtunnel-www/" rel="noopener noreferrer"&gt;localtunnel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;On Debian unstable (sid), installing Podman is very easy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;podman
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;The version of Podman on the stable branch is quite outdated and I've had a lot of trouble to make it work, so I recommend you to use &lt;em&gt;sid&lt;/em&gt; instead.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For &lt;em&gt;localtunnel&lt;/em&gt;, I personally prefer to use &lt;em&gt;bun&lt;/em&gt; rather than install NodeJS (because bun is a lot lighter)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;unzip
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://bun.sh/install | bash
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc

&lt;span class="c"&gt;# The command to run localtunnel now is:&lt;/span&gt;
bun x localtunnel &lt;span class="c"&gt;# args go here&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create a dedicated Nextcloud user to isolate it
&lt;/h2&gt;

&lt;p&gt;Run those command as a dedicated Nextcloud user for isolation&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;useradd &lt;span class="nt"&gt;-m&lt;/span&gt; nextcloud
&lt;span class="nb"&gt;sudo &lt;/span&gt;loginctl enable-linger nextcloud
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enter into a shell of that new user&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; nextcloud bash
&lt;span class="nb"&gt;cd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enable the Podman daemon in that user&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;XDG_RUNTIME_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/run/user/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt; systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; podman.socket
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install Nextcloud
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Please note, containers cannot directly contact the host, here it's not an issue since &lt;a href="https://theboroer.github.io/localtunnel-www/" rel="noopener noreferrer"&gt;localtunnel&lt;/a&gt; acts as a reverse proxy on a different IP, but if you use a reverse proxy on the same IP&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You'll need to add the option &lt;code&gt;--add-host your.domain.name:host-gateway&lt;/code&gt; to let the container access it.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This command is based on the official AIO instructions, you can find them here: &lt;a href="https://nextcloud.com/install/aio" rel="noopener noreferrer"&gt;https://nextcloud.com/install/aio&lt;/a&gt; and here : &lt;a href="https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md" rel="noopener noreferrer"&gt;https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I simply added &lt;code&gt;--network bridge&lt;/code&gt; so that it can access the other containers it creates (all in the same network) and changed the path of the docker socket, to Podman's socket.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;podman run &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--init&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--sig-proxy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--name&lt;/span&gt; nextcloud-aio-mastercontainer &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--restart&lt;/span&gt; always &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--publish&lt;/span&gt; 8080:8080 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;APACHE_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;11000 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;APACHE_IP_BINDING&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;APACHE_ADDITIONAL_NETWORK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;SKIP_DOMAIN_VALIDATION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--volume&lt;/span&gt; nextcloud_aio_mastercontainer:/mnt/docker-aio-config &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--volume&lt;/span&gt; /run/user/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/podman/podman.sock:/var/run/docker.sock:ro &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--network&lt;/span&gt; bridge &lt;span class="se"&gt;\&lt;/span&gt;
    ghcr.io/nextcloud-releases/all-in-one:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a tunnel to Nextcloud to automatically encrypt the traffic, get a domain name and forward the traffic without needing to open the ports of the router&lt;/p&gt;

&lt;p&gt;This is only for testing quickly, but should not use in production. Use a proper reverse proxy instead for production. This command will require you have &lt;a href="https://theboroer.github.io/localtunnel-www/" rel="noopener noreferrer"&gt;localtunnel&lt;/a&gt; installed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lt &lt;span class="nt"&gt;--port&lt;/span&gt; 11000
&lt;span class="c"&gt;# or if you used bun like me to install localtunnel:&lt;/span&gt;
bun x localtunnel &lt;span class="nt"&gt;--port&lt;/span&gt; 11000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Go on &lt;a href="https://localhost:8080" rel="noopener noreferrer"&gt;https://localhost:8080&lt;/a&gt; and specify your domain name, timezone and apps (I personally disabled Collabora though, as I prefer to use OnlyOffice). Disable it as well if you want to use OnlyOffice.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you're doing those instructions on a remote server, you can use SSH port forwarding as such:&lt;/p&gt;


&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-L&lt;/span&gt; 8080:localhost:8080 &amp;lt;your usual ssh things&amp;gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;It will launch what looks like a usual SSH session, but in bonus you'll also be able to access that localhost:8080 from your own machine! So you can just now go in your browser and go on &lt;a href="https://localhost:8080" rel="noopener noreferrer"&gt;https://localhost:8080&lt;/a&gt; and it should work :)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once you're done, you can then click on the "Start containers" button and wait for a few minutes for everything to be done. Then you can use the credentials provided by the page to login as admin on your new instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmrkslr76bcfvwac6uo7m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmrkslr76bcfvwac6uo7m.png" alt="Nextcloud AIO's page once the configuration is finished. Showing the containers that have started, and the initial login credentials for Nextcloud." width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you use &lt;em&gt;localtunnel&lt;/em&gt; you'll have to provide a password the first time you access it. This password is actually the public IP address of the host. You can find a link to get it below on the page.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The configuration of OnlyOffice is not directly in the UI because the Nextcloud AIO team wanted to only propose one choice of office suite (better defaults instead of more choice, they said).&lt;/p&gt;

&lt;p&gt;However, I personally prefer OnlyOffice, as it's much faster and more compatible with stinky MS Office documents. You can enable it by running this command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;podman unshare &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s/isOnlyofficeEnabled": 0/isOnlyofficeEnabled": 1/g'&lt;/span&gt; ~/.local/share/containers/storage/volumes/nextcloud_aio_mastercontainer/_data/data/configuration.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart the containers from the web interface&lt;/p&gt;

&lt;p&gt;Go to the admin panel, change your password and go into OnlyOffice and click on save. You might also want to enable the odt, ods and odp extensions to be able to edit LibreOffice files&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vrdxz3pwqeyygns49ts.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vrdxz3pwqeyygns49ts.png" alt="A page of the Onlyoffice integration settings in Nextcloud showing the boxes odt, ods and odp ticked" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to disable things or get more features, go into the "Apps" section. You can now proceed to go through the settings and app to customize your cloud.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31enysq6iz9ll63h6nqh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31enysq6iz9ll63h6nqh.png" alt="A picture of the Nextcloud app center from which you can install new apps in one click" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  If you want to remove Nextcloud (and all its data)
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;WARNING!!! This will delete all the data of Nextcloud, not just the image and containers&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;First, stop the session of the new user&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;loginctl disable-linger nextcloud
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remove the user&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;userdel nextcloud
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remove all of its files&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /home/nextcloud
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>nextcloud</category>
      <category>podman</category>
      <category>docker</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Discord in Firefox, with themes, plugins and RPC for free</title>
      <dc:creator>SnowCode</dc:creator>
      <pubDate>Wed, 07 Feb 2024 19:54:31 +0000</pubDate>
      <link>https://forem.com/snowcode/discord-in-firefox-with-themes-plugins-and-rpc-for-free-38cg</link>
      <guid>https://forem.com/snowcode/discord-in-firefox-with-themes-plugins-and-rpc-for-free-38cg</guid>
      <description>&lt;p&gt;Discord traditionally runs on an Electron app, which means it's basically just a website wrapped in a Chromium browser, so it's pretty heavy, and I really don't want that. I prefer to have Discord in the browser.&lt;/p&gt;

&lt;p&gt;Getting Discord in the browser is easy, just go to &lt;a href="https://discord.com/app" rel="noopener noreferrer"&gt;https://discord.com/app&lt;/a&gt;. The problem however is that you don't get RPC (rich presence, which is the famous "blabla is playing ...").&lt;/p&gt;

&lt;p&gt;Luckily, there's a project that lets you do all of that, plus it also lets you get plugins to Discord and themes, which looks pretty great. This project is named Vencord and is very easy to install on Chromium based browsers, but unfortunately doesn't work on Firefox because the developers had some trouble getting it to the Add-ons store.&lt;/p&gt;

&lt;p&gt;That's why I want to write about how to get it working on Firefox.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Vencord
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;First, you need to install Firefox Developer Edition. You can probably find it in your package manager (&lt;code&gt;firefox-devedition&lt;/code&gt; under NixOS for instance) or on the Mozilla website &lt;a href="https://www.mozilla.org/en-US/firefox/developer/" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Download the Vencord Firefox extension from the GitHub Release. Here's a &lt;a href="https://github.com/Vendicated/Vencord/releases/download/devbuild/extension-firefox.zip" rel="noopener noreferrer"&gt;direct download link&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;You now have to disable the signing verification of Firefox add-ons by going in &lt;code&gt;about:config&lt;/code&gt;, searching &lt;code&gt;xpinstall.signatures.required&lt;/code&gt; and toggle it to &lt;strong&gt;false&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Load Vencord by going into &lt;code&gt;about:addons&lt;/code&gt;, clicking on the settings wheel and clicking on &lt;strong&gt;Install Add-On From File&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fko7rara95a3w6ksaa2te.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fko7rara95a3w6ksaa2te.png" alt="Screenshot of the location of the button to install the addon"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Load &lt;a href="https://discord.com/app" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; in your browser. If you now open the Discord settings, you should see a new section called "Vencord"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiymh96nod701q3awze1y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiymh96nod701q3awze1y.png" alt="Screenshot of the Vencord section of the Discord settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vencord is now successfully installed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting rich presence
&lt;/h2&gt;

&lt;p&gt;Getting Discord rich presence (RPC) you'll need to install a software on your computer to listen to the RPC connections and transmit them to Discord through the RPC plugin of Vencord.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enable the RPC plugin by going into the Vencord plugin settings of your Discord settings and enable the &lt;strong&gt;WebRichPresence (arRPC)&lt;/strong&gt; plugin. &lt;/li&gt;
&lt;li&gt;Install NodeJS 18 or above, which is required to run the arRPC server. You can probably install it from your package manager or &lt;a href="https://nodejs.org/en/download/" rel="noopener noreferrer"&gt;set it up manually from the official website&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Download/clone the &lt;a href="https://github.com/OpenAsar/arrpc" rel="noopener noreferrer"&gt;GitHub arRPC repository&lt;/a&gt;, then run &lt;code&gt;npm install&lt;/code&gt; and &lt;code&gt;node src&lt;/code&gt; to run the server.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git clone https://github.com/OpenAsar/arrpc
&lt;span class="nb"&gt;cd &lt;/span&gt;arrpc
npm &lt;span class="nb"&gt;install
&lt;/span&gt;node src


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;If you reload Discord and run some game, it should now show up on Discord without any problem. &lt;/li&gt;
&lt;li&gt;Tell your operating system to run at boot in the background (for example in the "exec" section in Hyprland, or in a systemd service, a cron job, etc) that way you won't have to worry about starting the server since it will be done automatically for you.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Other Vencord stuff
&lt;/h2&gt;

&lt;p&gt;Vencord is also pretty nice because you can install themes and get a ton of other plugins. You have plugins like "FakeNitro" which lets you get some Nitro features without paying anything, and many more.&lt;/p&gt;

&lt;p&gt;Vencord also prevents some Discord tracking out of the box. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwuc57gpgbtvtpkb2wbql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwuc57gpgbtvtpkb2wbql.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also install themes by going to the "Theme" settings tab, then click on "BetterDiscord Themes" and choose whatever theme you like. Download the themes you like, then return to the Vencord settings and upload the theme.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvo8shxk2wu6y8b8lgxob.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvo8shxk2wu6y8b8lgxob.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now congratulations you just themed, added features, removed some tracking, and removed Electron from Discord. Have fun!&lt;/p&gt;

</description>
      <category>discord</category>
      <category>firefox</category>
      <category>extensions</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>🗃️ Using Docker to archive a service (BookStack)</title>
      <dc:creator>SnowCode</dc:creator>
      <pubDate>Thu, 09 Feb 2023 14:04:38 +0000</pubDate>
      <link>https://forem.com/snowcode/using-docker-to-archive-a-service-bookstack-2197</link>
      <guid>https://forem.com/snowcode/using-docker-to-archive-a-service-bookstack-2197</guid>
      <description>&lt;p&gt;I was on a process to dockerize my infrastructure and I wanted to archive a service I couldn't simply migrate to a newer version nor really use anymore. &lt;/p&gt;

&lt;p&gt;So I used Docker to archive it without depending on any dependency.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# First I go into the website's directory&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; /var/www/BookStack

&lt;span class="c"&gt;# I generate a SQL script as a backup of the database named "bookstack_db"&lt;/span&gt;
mysqldump &lt;span class="nt"&gt;-u&lt;/span&gt; root bookstack_db &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; bookstack-backup-db.sql

&lt;span class="c"&gt;# Then I used tar to create an archive of files (.env, uploads)&lt;/span&gt;
&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-czvf&lt;/span&gt; bookstack-backup-files.tar.gz .env public/uploads storage/uploads

&lt;span class="c"&gt;# Then I take the version of BookStack&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I download those files back to my laptop.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;bookstack-backup
&lt;span class="nb"&gt;cd &lt;/span&gt;bookstack-backup
rsync &lt;span class="nt"&gt;-rv&lt;/span&gt; debian@snowcode.ovh:/var/www/BookStack/bookstack-backup-&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, I created a &lt;code&gt;docker-compose&lt;/code&gt; file with the following content to describe my infrastructure.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2"&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;bookstack&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/linuxserver/bookstack:version-v0.31.4&lt;/span&gt; &lt;span class="c1"&gt;# Here goes my bookstack version&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bookstack&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PUID=1000&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PGID=1000&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;APP_URL=http://localhost:8080&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_HOST=bookstack_db&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_PORT=3306&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_USER=bookstack&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_PASS=secret&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_DATABASE=bookstackapp&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./bookstack_files:/config&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;8080:80&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;bookstack_db&lt;/span&gt;
  &lt;span class="na"&gt;bookstack_db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;lscr.io/linuxserver/mariadb:10.6.10&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bookstack_db&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PUID=1000&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PGID=1000&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_ROOT_PASSWORD=secret&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;TZ=Europe/Brussels&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_DATABASE=bookstackapp&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_USER=bookstack&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_PASSWORD=secret&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./bookstack_db:/config&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally I can start the server with that config...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker-compose up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;...and place the files into the right volumes/directories.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;su &lt;span class="c"&gt;# I need to be root for accessing the volumes&lt;/span&gt;
&lt;span class="nb"&gt;mv &lt;/span&gt;bookstack-backup-files.tar.gz bookstack_files
&lt;span class="nb"&gt;mv &lt;/span&gt;bookstack-backup-db.sql bookstack_db
&lt;span class="nb"&gt;cd &lt;/span&gt;bookstack_files
&lt;span class="nb"&gt;tar &lt;/span&gt;xvzf bookstack-backup-files.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally I can enter the running container of my database to import the script&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; bookstack_db bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"mysql -u bookstack -p bookstackapp &amp;lt; /config/bookstack-backup-db.sql"&lt;/span&gt;
&lt;span class="c"&gt;# The default password is secret as defined in the docker-compose&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The website can be accessed at &lt;code&gt;http://localhost:8080&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Archiving the Docker images
&lt;/h2&gt;

&lt;p&gt;Now to not depend of the Docker registeries we can also archive the images of &lt;code&gt;mariadb&lt;/code&gt; and &lt;code&gt;bookstack&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;First we can list the images:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker images
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then take the IDs of the &lt;code&gt;mariadb&lt;/code&gt; and &lt;code&gt;bookstack&lt;/code&gt; images to export them into a TAR archive.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker image save aad0c49aebf3 &lt;span class="nt"&gt;-o&lt;/span&gt; bookstack.tar
&lt;span class="nb"&gt;sudo &lt;/span&gt;docker image save 39a4293c3071 &lt;span class="nt"&gt;-o&lt;/span&gt; mariadb.tar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now it's done ! When we need it we can import the images back from the archives using those commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker image import bookstack.tar ghcr.io/linuxserver/bookstack:version-v0.31.4 
&lt;span class="nb"&gt;sudo &lt;/span&gt;docker image import mariadb.tar lscr.io/linuxserver/mariadb:10.6.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And now you no longer depends on those registeries either for using this backup.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>productivity</category>
      <category>career</category>
      <category>sideprojects</category>
    </item>
  </channel>
</rss>
