<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss/feed.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Sapphic Angels</title><description>A personal blog, comprising of whatever stuff we feel like rambling about.</description><link>https://sapphic.moe/</link><webMaster>contact@sapphic.moe</webMaster><generator>Astro v5.14.3</generator><image><url>https://sapphic.moe/favicon.png</url><title>Sapphic Angels</title><link>https://sapphic.moe</link></image><versions><website>4</website><websiteName>@sapphic/site</websiteName><websiteHash>fe2c431199b1038e369b45068a07bf03e9517f90</websiteHash><websiteHashURL>https://github.com/SapphoSys/sapphic.moe/commit/fe2c431199b1038e369b45068a07bf03e9517f90</websiteHashURL><websiteDate>2026-01-07T00:05:19Z</websiteDate><astro>5.14.3</astro><react>19.2.0</react></versions><footerLinks><row><left><text>Webrings</text><url>/webrings</url><icon>mdi:account-plus</icon><newWindow>false</newWindow></left><right><text>Contact</text><url>/contact</url><icon>mdi:at</icon><newWindow>false</newWindow></right></row><row><left><text>Guestbook</text><url>/guestbook</url><icon>mdi:pencil-box-multiple</icon><newWindow>false</newWindow></left><right><text>Message</text><url>/message</url><icon>mdi:message</icon><newWindow>false</newWindow></right></row><row><left><text>Misc</text><url>/misc</url><icon>mdi:multiplication</icon><newWindow>false</newWindow></left><right><text>Support us</text><url>https://ko-fi.com/solelychloe</url><icon>mdi:heart</icon><newWindow>true</newWindow></right></row><row><left><text>RSS</text><url>/rss.xml</url><icon>mdi:rss</icon><newWindow>true</newWindow></left><right><text>Source code</text><url>https://github.com/SapphoSys/sapphic.moe</url><icon>mdi:source-fork</icon><newWindow>true</newWindow></right></row></footerLinks><item><title>OneShot on Linux: The Definitive Guide</title><link>https://sapphic.moe/article/oneshot-on-linux/</link><guid isPermaLink="true">https://sapphic.moe/article/oneshot-on-linux/</guid><description>The resource to help you play, complete, and enjoy OneShot on Linux distrubutions.</description><pubDate>Wed, 03 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;update&quot;&gt;Update&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#update&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;An update from May 28, 2025. (2025-05-28)&lt;/p&gt;
&lt;p&gt;Future Cat LLC has released &lt;a href=&quot;https://store.steampowered.com/app/2915460/OneShot_World_Machine_Edition/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;OneShot: World Machine Edition&lt;/a&gt; on Steam. It’s worth checking out as it has excellent Linux support!&lt;/p&gt;
&lt;h2 id=&quot;original-article&quot;&gt;Original article&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#original-article&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Note: this guide assumes you have the &lt;em&gt;&lt;a href=&quot;https://store.steampowered.com/app/420530/OneShot/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;Steam version&lt;/em&gt;&lt;/a&gt;&lt;/em&gt; of OneShot.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;For the &lt;a href=&quot;https://futurecat.itch.io/oneshot&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;itch.io version&lt;/a&gt; of OneShot, please see the “&lt;a href=&quot;#i-cannot-get-the-itchio-version-to-run&quot;&gt;I cannot get the itch.io version to run!&lt;/a&gt;” section.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;OneShot is one of our favourite games out there. It helped get us through some of our darkest times and it’s our comfort game. We could spend hours talking about it.&lt;/p&gt;
&lt;p&gt;Unfortunately, getting it to work on Linux can be quite the challenge. Though the game has a native Linux version, you have to delete certain files for it to launch - but even that is not a guarantee that it will work on all Linux distributions.&lt;/p&gt;
&lt;p&gt;It’s simply not feasible for an average user to have to scour the wide Internet for possible solutions just to be able to play OneShot.&lt;/p&gt;
&lt;p&gt;That’s why we have decided to write an article guide to make sure one can enjoy the game on Linux with close to no hurdles.&lt;/p&gt;
&lt;div class=&quot;rounded-md border-2 bg-ctp-mantle border-ctp-red&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;details class=&quot;group&quot; open=&quot;&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;summary class=&quot;flex items-center gap-2 p-3 font-semibold text-ctp-base bg-ctp-red cursor-pointer&quot; data-disabled=&quot;false&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;svg width=&quot;25&quot; height=&quot;25&quot; aria-hidden=&quot;true&quot; class=&quot;!text-ctp-base&quot; data-astro-cid-azwgbble=&quot;true&quot; data-icon=&quot;mdi:alert-circle&quot;&gt;   &lt;symbol id=&quot;ai:mdi:alert-circle&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M13 13h-2V7h2m0 10h-2v-2h2M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10A10 10 0 0 0 12 2&quot; /&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:mdi:alert-circle&quot;&gt;&lt;/use&gt;  &lt;/svg&gt; &lt;span class=&quot;!text-ctp-base&quot; data-astro-cid-azwgbble=&quot;&quot;&gt;Caveats&lt;/span&gt; &lt;svg width=&quot;25&quot; height=&quot;25&quot; class=&quot;ml-auto !text-ctp-base group-open:rotate-180 motion-safe:transition-transform motion-safe:duration-200&quot; aria-hidden=&quot;true&quot; data-astro-cid-azwgbble=&quot;true&quot; data-icon=&quot;mdi:chevron-down&quot;&gt;   &lt;symbol id=&quot;ai:mdi:chevron-down&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M7.41 8.58L12 13.17l4.59-4.59L18 10l-6 6l-6-6z&quot; /&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:mdi:chevron-down&quot;&gt;&lt;/use&gt;  &lt;/svg&gt; &lt;/summary&gt; &lt;div data-accordion-content=&quot;&quot; class=&quot;overflow-hidden motion-safe:transition-[height] motion-safe:duration-200 motion-safe:ease-in-out&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;div class=&quot;break-words px-4 py-3 prose-p:my-3 prose-p:text-ctp-text first:prose-p:my-0 last:prose-p:my-0 prose-figure:my-0&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;p&gt;Unfortunately, due to the nature of the game, your immersion may be slightly ruined.&lt;/p&gt;&lt;p&gt;For example, the game automatically changing your desktop wallpaper during a certain puzzle won’t work on Linux. See the &lt;a href=&quot;#my-desktop-wallpaper-is-not-updating&quot;&gt;Desktop wallpaper not changing&lt;/a&gt; section for more information.&lt;/p&gt;&lt;p&gt;OneShot is best played and experienced on a Windows environment.&lt;/p&gt;&lt;p&gt;If you don’t mind this trade-off though or simply don’t care, keep on reading.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt;  
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#prerequisites&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You will need to install &lt;a href=&quot;https://github.com/Matoking/protontricks&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Protontricks&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;installing-protontricks&quot;&gt;Installing Protontricks&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#installing-protontricks&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;There are several ways to install Protontricks.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you already have Protontricks installed, you can skip to the &lt;em&gt;&lt;a href=&quot;#running-the-game&quot;&gt;&lt;em&gt;Running the game&lt;/em&gt;&lt;/a&gt;&lt;/em&gt; section.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;method-1-installing-protontricks-as-a-flatpak-package&quot;&gt;Method 1: Installing Protontricks as a Flatpak package&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#method-1-installing-protontricks-as-a-flatpak-package&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If you have Flatpak installed, you can run the following command to install Protontricks:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ji1ng.css&quot;&gt;&lt;figure class=&quot;frame is-terminal has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;flatpak&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;flathub&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;com.github.Matoking.protontricks&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;flatpak install flathub com.github.Matoking.protontricks&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;To install Flatpak for your Linux distribution, you can follow &lt;a href=&quot;https://flathub.org/setup&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Flathub’s guide&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;method-2-installing-protontricks-as-a-system-package&quot;&gt;Method 2: Installing Protontricks as a system package&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#method-2-installing-protontricks-as-a-system-package&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Alternatively, you can install Protontricks as a system package.&lt;/p&gt;
&lt;p&gt;Here are the following commands to install Protontricks for the most popular Linux distributions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Arch Linux&lt;/strong&gt;: Protontricks is available via the &lt;a href=&quot;https://aur.archlinux.org/packages/protontricks&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;AUR&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;paru: &lt;code&gt;paru -S protontricks&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;yay: &lt;code&gt;yay -S protontricks&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Debian 12+&lt;/strong&gt;: &lt;code&gt;sudo apt install protontricks&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fedora 32+&lt;/strong&gt;: &lt;code&gt;sudo dnf install protontricks&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NixOS 21+&lt;/strong&gt;: &lt;code&gt;nix-env -iA protontricks&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ubuntu 22+&lt;/strong&gt;: &lt;code&gt;sudo apt install protontricks&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Void Linux&lt;/strong&gt;: &lt;code&gt;xbps-install protontricks&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your Linux distribution is not listed here, check out the &lt;a href=&quot;https://github.com/Matoking/protontricks?tab=readme-ov-file#installation&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;“Installation” section on the Protontricks repository&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h2 id=&quot;running-the-game&quot;&gt;Running the game&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#running-the-game&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We’ll be using Valve’s Proton compatibility layer to play OneShot.&lt;/p&gt;
&lt;p&gt;For the majority of the game, you won’t have to use &lt;strong&gt;Protontricks&lt;/strong&gt;. It’s only near the end that you’ll be forced to run a certain executable file in order to progress further. &lt;a href=&quot;#later-stages-of-the-game&quot;&gt;&lt;em&gt;(Jump to ‘Later stages of the game’ section)&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Head over to your library, right click OneShot, select “&lt;strong&gt;Properties…”&lt;/strong&gt; and head over to the &lt;strong&gt;Compatibility&lt;/strong&gt; tab.&lt;/p&gt;
&lt;p&gt;Enable “&lt;strong&gt;Force the use of a specific Steam Play compatibility tool&lt;/strong&gt;”, and select &lt;strong&gt;Proton 7.0-6&lt;/strong&gt;. This will download that specific Proton version, which might take a while.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://sapphic.moe/compatibility-tab.png&quot; alt=&quot;The Steam compatibility tab for OneShot.&quot;&gt;&lt;/p&gt;
&lt;p&gt;Once that’s done, you can launch OneShot from your Steam library and the majority of the game will run just fine!&lt;/p&gt;
&lt;h2 id=&quot;interacting-with-documents&quot;&gt;Interacting with documents&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#interacting-with-documents&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In some parts of the game, you may have to interact with files. Usually, these files are located in the &lt;strong&gt;My Documents&lt;/strong&gt; folder on Windows.&lt;/p&gt;
&lt;p&gt;With Proton, your documents for OneShot are located in the &lt;code&gt;~/.steam/steam/steamapps/compatdata/420530/pfx/drive_c/users/steamuser/Documents&lt;/code&gt; folder.&lt;/p&gt;
&lt;p&gt;I’m sure you don’t feel like memorizing that, so let’s create a symlink (think of it as a shortcut, basically) for easy access!&lt;/p&gt;
&lt;p&gt;We’ll be creating a symlink in your home directory.
Run the following command to create a &lt;strong&gt;ProtonDocuments&lt;/strong&gt; symlink in your Documents folder:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;ln&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;-s&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;~/.steam/steam/steamapps/compatdata/420530/pfx/drive_c/users/steamuser/Documents&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;~/Documents/ProtonDocuments&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;ln -s ~/.steam/steam/steamapps/compatdata/420530/pfx/drive_c/users/steamuser/Documents ~/Documents/ProtonDocuments&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Now whenever the game creates a document file, you can always access it under your Documents folder! (&lt;code&gt;~/Documents/ProtonDocuments&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://sapphic.moe/protondocuments.png&quot; alt=&quot;GNOME File Explorer (Nautilus) showing the ProtonDocuments symlink in your home directory&apos;s Documents folder.&quot;&gt;&lt;/p&gt;
&lt;p&gt;You may see additional folders like Downloads, Templates, Videos and so on in the &lt;strong&gt;ProtonDocuments&lt;/strong&gt; folder, but don’t worry about them!&lt;/p&gt;
&lt;h2 id=&quot;later-stages-of-the-game&quot;&gt;Later stages of the game&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#later-stages-of-the-game&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Though most of the game will work and play fine, eventually, you’ll have to run a file named &lt;code&gt;_______.exe&lt;/code&gt; (we’ll be calling this the “clover program” for the rest of the guide) in order to progress further in the game. This is where Protontricks comes into play.&lt;/p&gt;
&lt;p&gt;Using &lt;code&gt;protontricks-launch&lt;/code&gt;, run the following command to launch the clover program:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;protontricks-launch&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;--appid&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A54107;--1:#FAB387&quot;&gt;420530&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;~/.steam/steam/steamapps/compatdata/420530/pfx/drive_c/users/steamuser/Documents/My&lt;/span&gt;&lt;span style=&quot;--0:#8D477A;--1:#F5C2E7&quot;&gt;\ &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;Games/Oneshot/_______.exe&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;protontricks-launch --appid 420530 ~/.steam/steam/steamapps/compatdata/420530/pfx/drive_c/users/steamuser/Documents/My\ Games/Oneshot/_______.exe&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Afterwards, launch OneShot via its &lt;code&gt;steamshim&lt;/code&gt; binary:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;protontricks-launch&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;--appid&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A54107;--1:#FAB387&quot;&gt;420530&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;~/.steam/steam/steamapps/common/OneShot/steamshim.exe&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;protontricks-launch --appid 420530 ~/.steam/steam/steamapps/common/OneShot/steamshim.exe&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The Steam overlay will be unavailable under Protontricks, however achievements will work pretty much just fine.&lt;/p&gt;
&lt;h3 id=&quot;aliasing-the-commands&quot;&gt;Aliasing the commands&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#aliasing-the-commands&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If you want to have these commands at an easy reach, you can add them as an alias to your shell file. In our case, we’ll be using Bash, but you can modify the example below to work with zsh, fish, and other shells.&lt;/p&gt;
&lt;p&gt;Open the &lt;code&gt;~/.bashrc&lt;/code&gt; file with the editor of your choice, and add the following code to the end of the file:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;.bashrc&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#7B34D9;--1:#CBA6F7&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; launch-oneshot&lt;/span&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;protontricks-launch --appid 420530 ~/.steam/steam/steamapps/common/OneShot/steamshim.exe&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#7B34D9;--1:#CBA6F7&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; launch-oneshot-clover&lt;/span&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;protontricks-launch --appid 420530 ~/.steam/steam/steamapps/compatdata/420530/pfx/drive_c/users/steamuser/Documents/My\ Games/Oneshot/_______.exe&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;alias launch-oneshot=&amp;#34;protontricks-launch --appid 420530 ~/.steam/steam/steamapps/common/OneShot/steamshim.exe&amp;#34;alias launch-oneshot-clover=&amp;#34;protontricks-launch --appid 420530 ~/.steam/steam/steamapps/compatdata/420530/pfx/drive_c/users/steamuser/Documents/My\ Games/Oneshot/_______.exe&amp;#34;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Now you can launch OneShot and the clover program by just typing &lt;code&gt;launch-oneshot&lt;/code&gt; and &lt;code&gt;launch-oneshot-clover&lt;/code&gt; respectively in your terminal!&lt;/p&gt;
&lt;div class=&quot;rounded-md border-2 bg-ctp-mantle border-ctp-yellow&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;details class=&quot;group&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;summary class=&quot;flex items-center gap-2 p-3 font-semibold text-ctp-base bg-ctp-yellow cursor-pointer&quot; data-disabled=&quot;false&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;svg width=&quot;25&quot; height=&quot;25&quot; aria-hidden=&quot;true&quot; class=&quot;!text-ctp-base&quot; data-astro-cid-azwgbble=&quot;true&quot; data-icon=&quot;mdi:alert&quot;&gt;   &lt;symbol id=&quot;ai:mdi:alert&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M13 14h-2V9h2m0 9h-2v-2h2M1 21h22L12 2z&quot; /&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:mdi:alert&quot;&gt;&lt;/use&gt;  &lt;/svg&gt; &lt;span class=&quot;!text-ctp-base&quot; data-astro-cid-azwgbble=&quot;&quot;&gt;Spoilers for OneShot&lt;/span&gt; &lt;svg width=&quot;25&quot; height=&quot;25&quot; viewBox=&quot;0 0 24 24&quot; class=&quot;ml-auto !text-ctp-base group-open:rotate-180 motion-safe:transition-transform motion-safe:duration-200&quot; aria-hidden=&quot;true&quot; data-astro-cid-azwgbble=&quot;true&quot; data-icon=&quot;mdi:chevron-down&quot;&gt;   &lt;use href=&quot;#ai:mdi:chevron-down&quot;&gt;&lt;/use&gt;  &lt;/svg&gt; &lt;/summary&gt; &lt;div data-accordion-content=&quot;&quot; class=&quot;overflow-hidden motion-safe:transition-[height] motion-safe:duration-200 motion-safe:ease-in-out&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;div class=&quot;break-words px-4 py-3 prose-p:my-3 prose-p:text-ctp-text first:prose-p:my-0 last:prose-p:my-0 prose-figure:my-0&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;p&gt;&lt;img src=&quot;https://sapphic.moe/spoiler-clover-program.png&quot; alt=&quot;OneShot and the clover program being open at the same time on the way to the Tower on Linux.&quot; title=&quot;OneShot and the clover program being open at the same time on the way to the Tower on Linux.&quot;&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt;  
&lt;h2 id=&quot;questions-and-answers&quot;&gt;Questions and answers&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#questions-and-answers&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;im-getting-the-failed-to-initialize-steamworks-error&quot;&gt;I’m getting the “Failed to initialize Steamworks” error!&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#im-getting-the-failed-to-initialize-steamworks-error&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You need to have Steam running on your host machine when you execute the &lt;code&gt;steamshim&lt;/code&gt; file.&lt;/p&gt;
&lt;h3 id=&quot;i-cannot-get-the-itchio-version-to-run&quot;&gt;I cannot get the itch.io version to run!&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#i-cannot-get-the-itchio-version-to-run&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Due to an AppImageKit bug, the .appimage file provided on the itch.io version of OneShot is broken.&lt;/p&gt;
&lt;p&gt;For the time being, you can use the following snippet provided by &lt;a href=&quot;https://vriska.dev&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Leo&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;AppImageScript.sh&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;./OneShot.AppImage&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;--appimage-extract&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;squashfs-root/usr/lib/libgmodule-2.0.so.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;squashfs-root/usr/lib/libgtk-x11-2.0.so.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;squashfs-root/usr/lib/libgdk-x11-2.0.so.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;wget&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;https://archive.archlinux.org/packages/l/libffi/libffi-3.3-4-x86_64.pkg.tar.zst&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;libffi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;tar&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;-xC&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;libffi/&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;-f&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;libffi-3.3-4-x86_64.pkg.tar.zst&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;libffi/usr/lib/libffi.so.7.1.0&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;squashfs-root/usr/lib/libffi.so.7&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;./squashfs-root/usr/bin/oneshot&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;./OneShot.AppImage --appimage-extractrm squashfs-root/usr/lib/libgmodule-2.0.so.0rm squashfs-root/usr/lib/libgtk-x11-2.0.so.0rm squashfs-root/usr/lib/libgdk-x11-2.0.so.0wget https://archive.archlinux.org/packages/l/libffi/libffi-3.3-4-x86_64.pkg.tar.zstmkdir libffitar -xC libffi/ -f libffi-3.3-4-x86_64.pkg.tar.zstcp libffi/usr/lib/libffi.so.7.1.0 squashfs-root/usr/lib/libffi.so.7./squashfs-root/usr/bin/oneshot&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3 id=&quot;where-can-i-view-my-save-files-for-oneshot&quot;&gt;Where can I view my save files for OneShot?&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#where-can-i-view-my-save-files-for-oneshot&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Your save and config files for OneShot are located in the &lt;code&gt;~/.steam/steam/steamapps/compatdata/420530/pfx/drive_c/users/steamuser/AppData/Roaming/Oneshot&lt;/code&gt; folder.&lt;/p&gt;
&lt;p&gt;If you end up interacting with your save files often, you can create run the following command:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;ln&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;-s&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;~/.steam/steam/steamapps/compatdata/420530/pfx/drive_c/users/steamuser/AppData/Roaming/Oneshot&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;~/Documents/OneShotSaves&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;ln -s ~/.steam/steam/steamapps/compatdata/420530/pfx/drive_c/users/steamuser/AppData/Roaming/Oneshot ~/Documents/OneShotSaves&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This will create a &lt;strong&gt;OneShotSaves&lt;/strong&gt; symlink in your Documents folder for easy access:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://sapphic.moe/oneshotsaves.png&quot; alt=&quot;The OneShotSaves symlink in your home directory&apos;s Documents folder. It contains your save files for OneShot, as well as some configuration files.&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;my-desktop-wallpaper-is-not-updating&quot;&gt;My desktop wallpaper is not updating!&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#my-desktop-wallpaper-is-not-updating&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In the native Linux version of OneShot and on Windows, the game is able to automatically change your wallpaper during a certain puzzle in the Glen region.&lt;/p&gt;
&lt;p&gt;Unfortunately, this is not possible with Proton as the game is running on Wine, which, to our knowledge anyway, is not able to change the host machine’s desktop wallpaper.&lt;/p&gt;
&lt;p&gt;We have not found a solution for this issue.
For the time being, you can change the wallpaper manually by going to the &lt;code&gt;~/.steam/steam/steamapps/common/OneShot/Wallpaper&lt;/code&gt; folder and selecting &lt;code&gt;desktop.png&lt;/code&gt; as your wallpaper. You can change the wallpaper back after you’re done with the puzzle.&lt;/p&gt;
&lt;p&gt;Alternatively, you can just open the image for the duration of the puzzle.&lt;/p&gt;
&lt;h3 id=&quot;can-i-play-solstice-with-this&quot;&gt;Can I play Solstice with this?&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#can-i-play-solstice-with-this&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Yes. Just delete the &lt;code&gt;save_progress.oneshot&lt;/code&gt; file in your &lt;code&gt;ProtonDocuments/My Games/Oneshot&lt;/code&gt; folder and execute the &lt;code&gt;steamshim.exe&lt;/code&gt; file with Protontricks (or run the &lt;code&gt;launch-oneshot&lt;/code&gt; alias command above).&lt;/p&gt;
&lt;h3 id=&quot;i-know-how-to-fix-x-or-i-want-to-include-y-in-this-guide&quot;&gt;I know how to fix X or I want to include Y in this guide!&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#i-know-how-to-fix-x-or-i-want-to-include-y-in-this-guide&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Cool! Just leave a comment below or contact me and I’ll update the article.&lt;/p&gt;
&lt;h2 id=&quot;concluding-thoughts&quot;&gt;Concluding thoughts&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#concluding-thoughts&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As much as we love OneShot, we honestly wish it was updated to work well to run natively on Linux just fine with no additional tweaking, or at the very least, updating the game to work on the latest Proton versions.&lt;/p&gt;
&lt;p&gt;No hate towards the developers of the game though! We know it must be pretty hard to support the Linux version of OneShot and ensure it runs well across all distributions and configurations.&lt;/p&gt;
&lt;p&gt;Thank you for reading ‘till the end!&lt;/p&gt;</content:encoded><prettyDate>April 3, 2024</prettyDate><minutesRead>7 min read</minutesRead><category>oneshot</category><category>linux</category></item><item><title>Using Cloudflare R2 as your primary storage on ownCloud</title><link>https://sapphic.moe/article/using-cloudflare-r2-on-owncloud/</link><guid isPermaLink="true">https://sapphic.moe/article/using-cloudflare-r2-on-owncloud/</guid><description>A guide on how to set up Cloudflare R2 on ownCloud and use it as your storage.</description><pubDate>Sun, 02 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#introduction&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We have a compute instance that is running &lt;a href=&quot;https://owncloud.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ownCloud&lt;/a&gt;, which we use to backup our files and whatnot. While we were configuring the instance and uploading our files, we quickly realized that our instance’s storage is very limited and did not have enough space to actually house all of our potential future backups.&lt;/p&gt;
&lt;p&gt;But then we had an idea: what if we could hook up &lt;a href=&quot;https://www.cloudflare.com/products/r2/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Cloudflare’s R2 service&lt;/a&gt; to ownCloud?&lt;/p&gt;
&lt;p&gt;Stick with us as we show you how to do exactly that in this article.&lt;/p&gt;
&lt;h2 id=&quot;preamble&quot;&gt;Preamble&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#preamble&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;rounded-md border-2 bg-ctp-mantle border-ctp-blue&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;details class=&quot;group&quot; open=&quot;&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;summary class=&quot;flex items-center gap-2 p-3 font-semibold text-ctp-base bg-ctp-blue cursor-pointer&quot; data-disabled=&quot;false&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;svg width=&quot;25&quot; height=&quot;25&quot; aria-hidden=&quot;true&quot; class=&quot;!text-ctp-base&quot; data-astro-cid-azwgbble=&quot;true&quot; data-icon=&quot;mdi:information&quot;&gt;   &lt;symbol id=&quot;ai:mdi:information&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M13 9h-2V7h2m0 10h-2v-6h2m-1-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10A10 10 0 0 0 12 2&quot; /&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:mdi:information&quot;&gt;&lt;/use&gt;  &lt;/svg&gt; &lt;span class=&quot;!text-ctp-base&quot; data-astro-cid-azwgbble=&quot;&quot;&gt;Notice&lt;/span&gt; &lt;svg width=&quot;25&quot; height=&quot;25&quot; class=&quot;ml-auto !text-ctp-base group-open:rotate-180 motion-safe:transition-transform motion-safe:duration-200&quot; aria-hidden=&quot;true&quot; data-astro-cid-azwgbble=&quot;true&quot; data-icon=&quot;mdi:chevron-down&quot;&gt;   &lt;symbol id=&quot;ai:mdi:chevron-down&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M7.41 8.58L12 13.17l4.59-4.59L18 10l-6 6l-6-6z&quot; /&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:mdi:chevron-down&quot;&gt;&lt;/use&gt;  &lt;/svg&gt; &lt;/summary&gt; &lt;div data-accordion-content=&quot;&quot; class=&quot;overflow-hidden motion-safe:transition-[height] motion-safe:duration-200 motion-safe:ease-in-out&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;div class=&quot;break-words px-4 py-3 prose-p:my-3 prose-p:text-ctp-text first:prose-p:my-0 last:prose-p:my-0 prose-figure:my-0&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;p&gt;This guide assumes you’re running an instance of ownCloud on a Docker container using docker-compose.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt;  
&lt;p&gt;If you don’t have an instance of ownCloud running on Docker, follow these steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;You’ll need to install Docker first. The official Docker Docs page provides &lt;a href=&quot;https://docs.docker.com/engine/install/#server&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;a guide&lt;/a&gt; on how to install Docker on just about every system.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Then, head over to ownCloud’s &lt;a href=&quot;https://doc.owncloud.com/server/10.12/admin_manual/installation/docker&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;documentation page&lt;/a&gt; and install ownCloud on a Docker container.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;creating-a-bucket&quot;&gt;Creating a bucket&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#creating-a-bucket&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go to your &lt;a href=&quot;https://dash.cloudflare.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt; and navigate to the R2 page. Then click on the &lt;strong&gt;Create bucket&lt;/strong&gt;
button.&lt;/p&gt;
&lt;div class=&quot;rounded-md border-2 bg-ctp-mantle border-ctp-yellow&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;details class=&quot;group&quot; open=&quot;&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;summary class=&quot;flex items-center gap-2 p-3 font-semibold text-ctp-base bg-ctp-yellow cursor-pointer&quot; data-disabled=&quot;false&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;svg width=&quot;25&quot; height=&quot;25&quot; aria-hidden=&quot;true&quot; class=&quot;!text-ctp-base&quot; data-astro-cid-azwgbble=&quot;true&quot; data-icon=&quot;mdi:alert&quot;&gt;   &lt;symbol id=&quot;ai:mdi:alert&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M13 14h-2V9h2m0 9h-2v-2h2M1 21h22L12 2z&quot; /&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:mdi:alert&quot;&gt;&lt;/use&gt;  &lt;/svg&gt; &lt;span class=&quot;!text-ctp-base&quot; data-astro-cid-azwgbble=&quot;&quot;&gt;Warning&lt;/span&gt; &lt;svg width=&quot;25&quot; height=&quot;25&quot; viewBox=&quot;0 0 24 24&quot; class=&quot;ml-auto !text-ctp-base group-open:rotate-180 motion-safe:transition-transform motion-safe:duration-200&quot; aria-hidden=&quot;true&quot; data-astro-cid-azwgbble=&quot;true&quot; data-icon=&quot;mdi:chevron-down&quot;&gt;   &lt;use href=&quot;#ai:mdi:chevron-down&quot;&gt;&lt;/use&gt;  &lt;/svg&gt; &lt;/summary&gt; &lt;div data-accordion-content=&quot;&quot; class=&quot;overflow-hidden motion-safe:transition-[height] motion-safe:duration-200 motion-safe:ease-in-out&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;div class=&quot;break-words px-4 py-3 prose-p:my-3 prose-p:text-ctp-text first:prose-p:my-0 last:prose-p:my-0 prose-figure:my-0&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;p&gt;When creating a bucket, make sure you give this bucket a unique name because you won’t be able to change it afterwards!&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt;  
&lt;p&gt;For the purposes of this guide, we’ll stick with the bucket name &lt;code&gt;owncloud-instance&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://sapphic.moe/creating-a-bucket.png&quot; alt=&quot;The unique name for your Cloudflare R2 bucket.&quot; title=&quot;The unique name for your Cloudflare R2 bucket.&quot;&gt;&lt;/p&gt;
&lt;p&gt;Once you’re done with that, head back to the R2 page, click on the &lt;strong&gt;Manage R2 API Tokens&lt;/strong&gt; link and click on the &lt;strong&gt;Create API token&lt;/strong&gt; button.&lt;/p&gt;
&lt;h3 id=&quot;bucket-creation-options&quot;&gt;Bucket creation options&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#bucket-creation-options&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Let’s go through each of the options on the page:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Token name&lt;/strong&gt;: This is not that important, but if you want to be able to easily identify the R2 token on this page in the future, you can set a unique name here.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Permissions&lt;/strong&gt;: Make sure you set this to &lt;strong&gt;Edit&lt;/strong&gt;! Otherwise you may run into permission issues when uploading files.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TTL&lt;/strong&gt;: If you just want to create this token and forget about it, set this to &lt;strong&gt;Infinity&lt;/strong&gt;. Otherwise, this option is up to you.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you’re done, click on the &lt;strong&gt;Create API Token&lt;/strong&gt; button.&lt;/p&gt;
&lt;p&gt;You’ll be able to see your &lt;strong&gt;Access Key ID&lt;/strong&gt; and &lt;strong&gt;Secret Access Key&lt;/strong&gt; values here. Keep them somewhere safe, as you will not be able to see them again!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://sapphic.moe/creating-an-api-token.png&quot; alt=&quot;The R2 API token being successfully created with the &amp;#34;Access Key ID&amp;#34; and &amp;#34;Secret Access Key&amp;#34; values provided.&quot; title=&quot;The R2 API token being successfully created with the &amp;#34;Access Key ID&amp;#34; and &amp;#34;Secret Access Key&amp;#34; values provided.&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;installing-the-s3-extension-for-owncloud&quot;&gt;Installing the S3 extension for ownCloud&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#installing-the-s3-extension-for-owncloud&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Once you’re done creating an R2 bucket, head over to your ownCloud admin dashboard.&lt;/p&gt;
&lt;p&gt;Click on the menu bar located in the upper left corner, and select the &lt;strong&gt;Market&lt;/strong&gt; tab.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://sapphic.moe/market-tab.png&quot; alt=&quot;The Market tab on your ownCloud instance.&quot; title=&quot;The Market tab on your ownCloud instance.&quot;&gt;&lt;/p&gt;
&lt;p&gt;Scroll down until you find the &lt;strong&gt;S3 Primary Object Storage&lt;/strong&gt; extension, and install it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://sapphic.moe/s3-extension.png&quot; alt=&quot;The S3 Primary Object Storage extension on the ownCloud Marketplace.&quot; title=&quot;The S3 Primary Object Storage extension on the ownCloud Marketplace.&quot;&gt;&lt;/p&gt;
&lt;div class=&quot;rounded-md border-2 bg-ctp-mantle border-ctp-blue&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;details class=&quot;group&quot; open=&quot;&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;summary class=&quot;flex items-center gap-2 p-3 font-semibold text-ctp-base bg-ctp-blue cursor-pointer&quot; data-disabled=&quot;false&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;svg width=&quot;25&quot; height=&quot;25&quot; viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; class=&quot;!text-ctp-base&quot; data-astro-cid-azwgbble=&quot;true&quot; data-icon=&quot;mdi:information&quot;&gt;   &lt;use href=&quot;#ai:mdi:information&quot;&gt;&lt;/use&gt;  &lt;/svg&gt; &lt;span class=&quot;!text-ctp-base&quot; data-astro-cid-azwgbble=&quot;&quot;&gt;Notice&lt;/span&gt; &lt;svg width=&quot;25&quot; height=&quot;25&quot; viewBox=&quot;0 0 24 24&quot; class=&quot;ml-auto !text-ctp-base group-open:rotate-180 motion-safe:transition-transform motion-safe:duration-200&quot; aria-hidden=&quot;true&quot; data-astro-cid-azwgbble=&quot;true&quot; data-icon=&quot;mdi:chevron-down&quot;&gt;   &lt;use href=&quot;#ai:mdi:chevron-down&quot;&gt;&lt;/use&gt;  &lt;/svg&gt; &lt;/summary&gt; &lt;div data-accordion-content=&quot;&quot; class=&quot;overflow-hidden motion-safe:transition-[height] motion-safe:duration-200 motion-safe:ease-in-out&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;div class=&quot;break-words px-4 py-3 prose-p:my-3 prose-p:text-ctp-text first:prose-p:my-0 last:prose-p:my-0 prose-figure:my-0&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;p&gt;Note, you’ll want this extension and not the extension called “External Storage: S3”!&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt;  
&lt;h2 id=&quot;setting-up-r2-for-your-owncloud-instance&quot;&gt;Setting up R2 for your ownCloud instance&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#setting-up-r2-for-your-owncloud-instance&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;rounded-md border-2 bg-ctp-mantle border-ctp-yellow&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;details class=&quot;group&quot; open=&quot;&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;summary class=&quot;flex items-center gap-2 p-3 font-semibold text-ctp-base bg-ctp-yellow cursor-pointer&quot; data-disabled=&quot;false&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;svg width=&quot;25&quot; height=&quot;25&quot; viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot; class=&quot;!text-ctp-base&quot; data-astro-cid-azwgbble=&quot;true&quot; data-icon=&quot;mdi:alert&quot;&gt;   &lt;use href=&quot;#ai:mdi:alert&quot;&gt;&lt;/use&gt;  &lt;/svg&gt; &lt;span class=&quot;!text-ctp-base&quot; data-astro-cid-azwgbble=&quot;&quot;&gt;Warning&lt;/span&gt; &lt;svg width=&quot;25&quot; height=&quot;25&quot; viewBox=&quot;0 0 24 24&quot; class=&quot;ml-auto !text-ctp-base group-open:rotate-180 motion-safe:transition-transform motion-safe:duration-200&quot; aria-hidden=&quot;true&quot; data-astro-cid-azwgbble=&quot;true&quot; data-icon=&quot;mdi:chevron-down&quot;&gt;   &lt;use href=&quot;#ai:mdi:chevron-down&quot;&gt;&lt;/use&gt;  &lt;/svg&gt; &lt;/summary&gt; &lt;div data-accordion-content=&quot;&quot; class=&quot;overflow-hidden motion-safe:transition-[height] motion-safe:duration-200 motion-safe:ease-in-out&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;div class=&quot;break-words px-4 py-3 prose-p:my-3 prose-p:text-ctp-text first:prose-p:my-0 last:prose-p:my-0 prose-figure:my-0&quot; data-astro-cid-azwgbble=&quot;&quot;&gt; &lt;p&gt;Before proceeding any further, make sure you back up all your data! Proceeding with the steps below will wipe any data you had on your ownCloud instance.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/details&gt; &lt;/div&gt;  
&lt;p&gt;You’re done with all that? Great. It’s time to configure R2 to work on your ownCloud instance.&lt;/p&gt;
&lt;p&gt;Run the following command to access the filesystem of your ownCloud Docker instance:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.ji1ng.css&quot;&gt;&lt;figure class=&quot;frame is-terminal has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; docker exec -t -i owncloud_server /bin/bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt; docker exec -t -i owncloud_server /bin/bash&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Head over to the &lt;strong&gt;config&lt;/strong&gt; folder. The &lt;strong&gt;config&lt;/strong&gt; folder should have the following files:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; ls&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#1A57D1;--0fs:italic;--1:#89B4FA;--1fs:italic&quot;&gt;config.php&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;objectstore.config.php&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;overwrite.config.php&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt; lsconfig.php  objectstore.config.php  overwrite.config.php&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;We’re looking to edit the &lt;strong&gt;config.php&lt;/strong&gt; file. Add the following to the configuration file:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;config.php&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;php&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;objectstore&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#5D5F6E;--1:#9399B2&quot;&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#8D477A;--1:#F5C2E7&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;OC&lt;/span&gt;&lt;span style=&quot;--0:#8D477A;--1:#F5C2E7&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;Files&lt;/span&gt;&lt;span style=&quot;--0:#8D477A;--1:#F5C2E7&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;ObjectStore&lt;/span&gt;&lt;span style=&quot;--0:#8D477A;--1:#F5C2E7&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;S3&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#5D5F6E;--1:#9399B2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;arguments&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#5D5F6E;--1:#9399B2&quot;&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;bucket&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;BUCKET&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#5D5F6E;--1:#9399B2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;autocreate&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#7B34D9;--1:#CBA6F7&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#5D5F6E;--1:#9399B2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;key&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;ACCESS_KEY_ID&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#5D5F6E;--1:#9399B2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;secret&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;SECRET_ACCESS_KEY&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#5D5F6E;--1:#9399B2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;hostname&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;ACCOUNT_ID.r2.cloudflarestorage.com&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#5D5F6E;--1:#9399B2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;port&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#A54107;--1:#FAB387&quot;&gt;443&lt;/span&gt;&lt;span style=&quot;--0:#5D5F6E;--1:#9399B2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;use_ssl&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#7B34D9;--1:#CBA6F7&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#5D5F6E;--1:#9399B2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;region&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#116B70;--1:#94E2D5&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#4C4F69;--1:#CDD6F4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#2C6E1E;--1:#A6E3A1&quot;&gt;&amp;#39;auto&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#5D5F6E;--1:#9399B2&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#5D5F6E;--1:#9399B2&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#5D5F6E;--1:#9399B2&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;&quot;&gt; [  &apos;class&apos; =&gt; &apos;\\OC\\Files\\ObjectStore\\S3&apos;,  &apos;arguments&apos; =&gt; [    &apos;bucket&apos; =&gt; &apos;BUCKET&apos;,    &apos;autocreate&apos; =&gt; true,    &apos;key&apos;    =&gt; &apos;ACCESS_KEY_ID&apos;,    &apos;secret&apos; =&gt; &apos;SECRET_ACCESS_KEY&apos;,    &apos;hostname&apos; =&gt; &apos;ACCOUNT_ID.r2.cloudflarestorage.com&apos;,    &apos;port&apos; =&gt; 443,    &apos;use_ssl&apos; =&gt; true,    &apos;region&apos; =&gt; &apos;auto&apos;,  ],]&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3 id=&quot;s3-configuration-options&quot;&gt;S3 configuration options&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#s3-configuration-options&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You’ll want to replace the following options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;bucket&lt;/strong&gt;: This is your unique R2 bucket name that you created earlier. &lt;em&gt;(I used &lt;strong&gt;&lt;strong&gt;&lt;code&gt;owncloud-instance&lt;/code&gt;&lt;/strong&gt;&lt;/strong&gt; for this guide)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;key&lt;/strong&gt;: This is the Access Key ID that you obtained when creating the R2 bucket.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;secret&lt;/strong&gt;: This is the Secret Access Key that you obtained when creating the R2 bucket.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;hostname&lt;/strong&gt;: You can find the bucket hostname on the bucket page itself. Make sure to only include the URL name! (the &lt;code&gt;/owncloud-instance&lt;/code&gt; bit from the URL can be removed)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://sapphic.moe/r2-bucket-hostname.png&quot; alt=&quot;The R2 bucket hostname.&quot; title=&quot;The R2 bucket hostname.&quot;&gt;&lt;/p&gt;
&lt;p&gt;Then, run &lt;code&gt;docker restart owncloud_server&lt;/code&gt; to apply the changes.&lt;/p&gt;
&lt;p&gt;And that’s it! Log back in to your ownCloud admin dashboard, and your instance should utilize your Cloudflare R2 bucket as its primary storage.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;a aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot; href=&quot;#conclusion&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Overall, it’s pretty painless for your ownCloud instance to utilize Cloudflare’s R2 service.&lt;/p&gt;
&lt;p&gt;We will warn you though, Cloudflare’s base plan for R2 only includes 10 GB of storage per month.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://sapphic.moe/r2-pricing.png&quot; alt=&quot;The pricing plans for Cloudflare&apos;s R2 service.&quot; title=&quot;The pricing plans for Cloudflare&apos;s R2 service.&quot;&gt;&lt;/p&gt;
&lt;p&gt;But it all depends if you’re fine with that. :)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Hey! If you’re still here…&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This is the first time we’re writing a blog post of this sort. Let us know if we did well, or if there’s anything we can improve with future blog posts. Thank you! &lt;span role=&quot;img&quot; aria-label=&quot;red heart&quot;&gt;❤️&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;</content:encoded><prettyDate>April 2, 2023</prettyDate><minutesRead>4 min read</minutesRead><category>cloudflare</category><category>owncloud</category></item></channel></rss>