<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>~&#x2F;</title>
      <link>https://audacis.net</link>
      <description></description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://audacis.net/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Wed, 11 Feb 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Now</title>
          <pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate>
          <author>Philipp Kühn</author>
          <link>https://audacis.net/now/</link>
          <guid>https://audacis.net/now/</guid>
          <description xml:base="https://audacis.net/now/">&lt;h2 id=&quot;now&quot;&gt;Now&lt;&#x2F;h2&gt;
&lt;p&gt;Working on different projects, including:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Still in the process of getting funding for the verification of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;audax-security.com&quot;&gt;Audax Security&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Networking with companies and the government&lt;&#x2F;li&gt;
&lt;li&gt;Updating our &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;huggingface.co&#x2F;markusbayer&#x2F;CySecBERT&quot;&gt;CySecBERT model&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>Code of Courage: A Comic About Digital Security for Activists</title>
          <pubDate>Fri, 07 Nov 2025 00:00:00 +0000</pubDate>
          <author>Philipp Kühn</author>
          <link>https://audacis.net/code-of-courage/</link>
          <guid>https://audacis.net/code-of-courage/</guid>
          <description xml:base="https://audacis.net/code-of-courage/">&lt;p&gt;&lt;img src=&quot;&#x2F;img&#x2F;code-of-courage-header.jpg&quot; alt=&quot;Code of Courage Header&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This is a repost of the &lt;em&gt;original page: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;peasec.de&#x2F;2025&#x2F;comic&#x2F;&quot;&gt;https:&#x2F;&#x2F;peasec.de&#x2F;2025&#x2F;comic&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;code-of-courage-a-comic-about-digital-security-for-activists&quot;&gt;Code of Courage: A Comic About Digital Security for Activists&lt;&#x2F;h2&gt;
&lt;p&gt;We are excited to announce the release of our comic, Code of Courage: A Comic About Digital Security for Activists.
This project draws inspiration from the stories of resilience shared by over 90 activists from Myanmar, Colombia, Costa Rica, Bolivia, Nicaragua, and Cameroon (see e.g., Guntrum 2024 &amp;amp; Guntrum and Reuter 2024).
The comic addresses the challenges of technology-facilitated violence and provides strategies to enhance privacy and security.
While it offers general guidance, we acknowledge that security is deeply personal, influenced by unique circumstances and constantly evolving risks.
Our hope is to spark meaningful conversations and raise awareness, while honoring the expertise of activists who navigate these challenges daily.
A heartfelt thanks to the interviewees for sharing their invaluable insights, to Charikleia Livani and Franziska Schraut for their brilliant ideas and illustrations, and to Julian Lawrence for his exceptional guidance and support.
Without you the comic would not have been possible!&lt;&#x2F;p&gt;
&lt;p&gt;A new interactive version of the comic is now available at: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeofcourage.dev.peasec.de&#x2F;&quot;&gt;codeofcourage.dev.peasec.de&lt;&#x2F;a&gt;.
There, you can listen to the comic in Spanish, Russian, German, and English, and test your knowledge through short quizzes designed to make learning more engaging.&lt;&#x2F;p&gt;
&lt;p&gt;We encourage you to share the comic, explore new ideas it inspires, and localize or translate it.
If you have any feedback, suggestions, or concerns, feel free to reach out to Laura Guntrum at guntrum@peasec.tu-darmstadt.de.
Additionally, let us know if you’re interested in acquiring the design files.
The comic is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License (CC BY-NC 4.0).
The comic was already presented and distributed at RightsCon 2025, a major international summit on human rights in the digital age, which was held in Taiwan and the Night of Libraries at PRIF (Frankfurt, Germany).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-is-the-comic-about&quot;&gt;What is the comic about?&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;a-story-of-activism-digital-courage-and-resilience&quot;&gt;A story of activism, digital courage, and resilience.&lt;&#x2F;h3&gt;
&lt;p&gt;Follow four friends as they face surveillance, threats, and censorship—yet stay strong through knowledge, adaptability, and solidarity.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Alex, Sarah, Maria, and Daniel are four friends deeply committed to human rights activism in a country facing rising authoritarianism.
As they organize protests and use social media to spread awareness, they’re met with powerful digital threats: internet shutdowns, account hacking, surveillance, and intimidation.
When Daniel is arrested, the danger becomes painfully real for the group.&lt;&#x2F;p&gt;
&lt;p&gt;Still, the others don’t give up.
Alex, Sarah, and Maria grow more determined.
They start learning how to protect themselves: improving their digital security, understanding what information could be used against them, and identifying who might be behind the attacks.
They realise that not every app or tool is safe.
Some can attract attention even if they are secure.
They learn to balance visibility and protection, constantly adapting their strategies and learning how to stay one step ahead.&lt;&#x2F;p&gt;
&lt;p&gt;The comic shows that by sharing knowledge, supporting each other, and adapting fast, activists can keep their voices strong—even under oppression.
With courage and teamwork, they prove that the fight for justice can go on. ✊🕊️&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;earth-africa-our-comic-on-digital-security-is-now-available-in-multiple-languages&quot;&gt;🌍 Our comic on digital security is now available in multiple languages!&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;🇺🇸 &lt;a href=&quot;&#x2F;pdfs&#x2F;code-of-courage-english.pdf&quot;&gt;English version (PDF)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;🇩🇪 &lt;a href=&quot;&#x2F;pdfs&#x2F;code-of-courage-german.pdf&quot;&gt;German version (PDF)&lt;&#x2F;a&gt; - Thanks to PRIF &amp;amp; TraCe Knowledge Transfer for the translation.&lt;&#x2F;li&gt;
&lt;li&gt;🇷🇺 &lt;a href=&quot;&#x2F;pdfs&#x2F;code-of-courage-russian.pdf&quot;&gt;Russian version (PDF)&lt;&#x2F;a&gt; - Thanks to Alice Polak for the translation.&lt;&#x2F;li&gt;
&lt;li&gt;🇪🇸 &lt;a href=&quot;&#x2F;pdfs&#x2F;code-of-courage-spanish.pdf&quot;&gt;Spanish version (PDF)&lt;&#x2F;a&gt; - Thanks to Christina Fernandez Koch for the translation.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;interactive-platform&quot;&gt;Interactive Platform&lt;&#x2F;h3&gt;
&lt;p&gt;An online version featuring audio narration in multiple languages and educational quizzes is available at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeofcourage.dev.peasec.de&quot;&gt;codeofcourage.dev.peasec.de&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;publication-details&quot;&gt;Publication Details&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Authors:&lt;&#x2F;strong&gt; Charikleia Livani, Franziska Schraut, Laura Guntrum, Julian Lawrence&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Year:&lt;&#x2F;strong&gt; 2025&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Publisher:&lt;&#x2F;strong&gt; Universität Darmstadt&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;DOI:&lt;&#x2F;strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.26083&#x2F;tuprints-00029108&quot;&gt;10.26083&#x2F;tuprints-00029108&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;funding&quot;&gt;Funding&lt;&#x2F;h3&gt;
&lt;p&gt;This work was supported by Germany&#x27;s Federal Ministry of Education and Research (BMBF) through the TraCe research center and the ATHENE cybersecurity initiative.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;supporting-resources&quot;&gt;Supporting Resources&lt;&#x2F;h3&gt;
&lt;p&gt;Curated digital security resources:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;holistic-security.tacticaltech.org&#x2F;&quot;&gt;Holistic Security guide&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;securityinabox.org&#x2F;&quot;&gt;Security in a Box toolkit&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.accessnow.org&#x2F;help&#x2F;&quot;&gt;Access Now Digital Security Helpline&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;activistchecklist.net&#x2F;&quot;&gt;Activist Checklist&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>My MacOS Backup Strategy</title>
          <pubDate>Fri, 12 Sep 2025 00:00:00 +0000</pubDate>
          <author>Philipp Kühn</author>
          <link>https://audacis.net/blog/my-macos-backup-strategy/</link>
          <guid>https://audacis.net/blog/my-macos-backup-strategy/</guid>
          <description xml:base="https://audacis.net/blog/my-macos-backup-strategy/">&lt;p&gt;As outlined in my last &lt;a href=&quot;&#x2F;blog&#x2F;another-backup-fail&#x2F;&quot;&gt;blog post&lt;&#x2F;a&gt;, I failed at my backups again&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, which led me to setting up &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;torsion.org&#x2F;borgmatic&#x2F;&quot;&gt;&lt;code&gt;borgmatic&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; again.
It is a wrapper for the fantastic tool &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.borgbackup.org&#x2F;&quot;&gt;borg&lt;&#x2F;a&gt;, a command-line tool to create incremental backups of your system.
Like every other power-user tool, &lt;code&gt;borgmatic&lt;&#x2F;code&gt; is highly configurable, can back up to different repositories (storage backends) simultaneously, and does automated checks and pruning to keep just the essential bits.
However, this should not be an advertisement post about this tool.
I want to give an overview of what I want to set up, how I configured it, and what to look for when running custom services on macOS.
You find a summary at the bottom of this post.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-goal&quot;&gt;The Goal&lt;&#x2F;h2&gt;
&lt;p&gt;Every backup strategy should follow at least the 3-2-1 rule:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;3 copies&lt;&#x2F;li&gt;
&lt;li&gt;2 storage backends&lt;&#x2F;li&gt;
&lt;li&gt;1 off-site backup&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This is accomplished by having &lt;em&gt;a storage disk at home&lt;&#x2F;em&gt; for backups and &lt;em&gt;one storage server&lt;&#x2F;em&gt;.
With this in mind, I want to set up a remote backup repository (to stay within the naming of borg) and a local, attachable drive for my backups.
My system should run &lt;code&gt;borg&lt;&#x2F;code&gt; every 10 minutes, whether the repository is currently available.
Ultimately, I want to receive an error if both repositories are unavailable during a run. I usually do not work from home, where my backup drive sits.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-setup&quot;&gt;The Setup&lt;&#x2F;h2&gt;
&lt;p&gt;As for the storage server, I already used &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.hetzner.com&#x2F;storage&#x2F;storage-box?country=us&quot;&gt;Hetzner&#x27;s storage box&lt;&#x2F;a&gt;, which is nearly a steal for remote backups that you do not want to host.
They go for 3.2 €&#x2F;TB to 2.03 €&#x2F;TB per month, depending on your tier (08&#x2F;2025), and provide server RAID redundancy.
You could order two in different locations (1 in Germany and 1 in Finland).
After you decide on the tier you require, you:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Set up the access: either via SSH (which allows &lt;code&gt;rsync&lt;&#x2F;code&gt; and &lt;code&gt;borg&lt;&#x2F;code&gt;), WebDAV, or ftp,&lt;&#x2F;li&gt;
&lt;li&gt;setup your SSH key (&lt;code&gt;ssh-keygen &amp;amp;&amp;amp; cat ~&#x2F;.ssh&#x2F;id_ed25519.pub&lt;&#x2F;code&gt;), and&lt;&#x2F;li&gt;
&lt;li&gt;Set your box to externally accessible, and that&#x27;s it.
All done in less than 2 minutes.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;My local backup drive is already available.
I back up my Linux system with it regularly and automatically with &lt;code&gt;borgmatic&lt;&#x2F;code&gt;, which is attached via my monitor at home.
In addition, I plan to set up my Raspberry Pi with an m.2 hat to serve as a backup server, but that is a to-do for me in the future.&lt;&#x2F;p&gt;
&lt;p&gt;With my two repositories available, I need to configure &lt;code&gt;borgmatic&lt;&#x2F;code&gt;.
I adjusted my Linux config, resulting in the config below (comments included for explanations and are prefixed with &lt;code&gt;#&lt;&#x2F;code&gt;) stored at &lt;code&gt;$HOME&#x2F;.config&#x2F;borgmatic&#x2F;config.yaml&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# the directories to backup&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;source_directories:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - &#x2F;Users&#x2F;pkuehn&#x2F;Documents&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - &#x2F;Users&#x2F;pkuehn&#x2F;Movies&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - &#x2F;Users&#x2F;pkuehn&#x2F;Music&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - &#x2F;Users&#x2F;pkuehn&#x2F;Pictures&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - &#x2F;Users&#x2F;pkuehn&#x2F;src       # all my source code&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - &#x2F;Users&#x2F;pkuehn&#x2F;var       # stuff&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;repositories:       # defines the repos, labels are for internal references&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - path: user@storagbox:23&#x2F;path&#x2F;to&#x2F;repo&#x2F;dir      # url with path&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      label: storagebox&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - path: user@storagbox:23&#x2F;path&#x2F;to&#x2F;repo&#x2F;dir      # url with path&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      label: storagebox-helsiki&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;archive_name_format: &amp;quot;macbook-{now:%Y-%m-%dT%H:%M:%S.%f}&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;keep_hourly: 12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;keep_daily: 15&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;keep_weekly: 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;keep_monthly: 6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;keep_yearly: 4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;exclude_patterns:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - &amp;#39;*.pyc&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - &amp;#39;**&#x2F;.cache&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - &amp;#39;**&#x2F;.venv&amp;#39;                # python virtual env&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - &amp;#39;**&#x2F;.devenv&amp;#39;              # devenv (awesome tool)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - &amp;#39;src&#x2F;**&#x2F;target&amp;#39; # exclude these big rust dirs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - &amp;#39;Music&#x2F;Music              # just a copy of everything else in the music dir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;match_archives: &amp;#39;*&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;exclude_caches: true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;exclude_if_present:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - .nobackup                 # excludes all dirs with a hidden file `.nobackup`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                # while I do not like this ad hoc exclusion&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                # it just works&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;checks:                         # define regular consistency checks&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - name: repository&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - name: archives&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      frequency: 1 week&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;encryption_passcommand: &amp;#39;your pass command&amp;#39;  # a command, which returns your password&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssh_command: &amp;#39;your ssh command&amp;#39;              # your ssh key, with the keyfile&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                             #   option for your storage box&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;relocated_repo_access_is_ok: true            # don&amp;#39;t complain if repo moves&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;With this in place, I need to set up the repositories for this backup with &lt;code&gt;borgmatic init --encryption repo-key&lt;&#x2F;code&gt;, which initializes the repos.
Afterward, you run &lt;code&gt;borgmatic key export&lt;&#x2F;code&gt; to extract the repo-keys and store them in your password store.
Now you can confirm &lt;code&gt;borgmatic&lt;&#x2F;code&gt; is working by running it and waiting a long time for no feedback (&lt;code&gt;borgmatic&lt;&#x2F;code&gt; is a little weird in this regard, as it does not return any feedback if not using any verbose parameter, unlike &lt;code&gt;borg&lt;&#x2F;code&gt;, which outputs everything).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;custom-services-on-macos&quot;&gt;Custom Services on MacOS&lt;&#x2F;h2&gt;
&lt;p&gt;Coming from Linux, I used tools like cron or systemd a lot.
Both offer ways to run scripts or tools regularly, with cron being the standard since the beginning of Linux, and systemd being the &lt;em&gt;new&lt;&#x2F;em&gt; horse in town since 2010.
On macOS, however, cron is deprecated and systemd is not available.
MacOS uses a scheduler, LaunchD, which defines services in an XML format.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;xml&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; version&lt;&#x2F;span&gt;&lt;span style=&quot;color: #DE5971;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; encoding&lt;&#x2F;span&gt;&lt;span style=&quot;color: #DE5971;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;UTF-8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;?&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;DOCTYPE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt; plist&lt;&#x2F;span&gt;&lt;span style=&quot;color: #DE5971;&quot;&gt; PUBLIC &amp;quot;-&#x2F;&#x2F;Apple&#x2F;&#x2F;DTD PLIST 1.0&#x2F;&#x2F;EN&amp;quot; &amp;quot;http:&#x2F;&#x2F;www.apple.com&#x2F;DTDs&#x2F;PropertyList-1.0.dtd&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;plist&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; version&lt;&#x2F;span&gt;&lt;span style=&quot;color: #DE5971;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Label&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;backup-service&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Program&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;opt&#x2F;homebrew&#x2F;bin&#x2F;borgmatic&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;RunAtLoad&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;plist&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This service definition is labeled &lt;code&gt;backup-service&lt;&#x2F;code&gt;, and starts the program &lt;code&gt;&#x2F;opt&#x2F;homebrew&#x2F;bin&#x2F;borgmatic&lt;&#x2F;code&gt; on load.
And that&#x27;s it.
It runs the service just once.
Depending on where you store it, it runs with different scopes.
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;launchd.info&#x2F;&quot;&gt;launchd.info&lt;&#x2F;a&gt; provides an overview of launchd services with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;manpagez.com&#x2F;man&#x2F;5&#x2F;launchd.plist&#x2F;&quot;&gt;this manpage&lt;&#x2F;a&gt; giving a more comprehensive overview.
The interesting bits for me are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;how to start services with a timer logic (similar to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wiki.archlinux.org&#x2F;title&#x2F;Systemd&#x2F;Timers&quot;&gt;systemd-timers&lt;&#x2F;a&gt; or cron jobs)&lt;&#x2F;li&gt;
&lt;li&gt;How to adhere to the macOS power management, as I guessed, there will be a fancy flag for that as well in this user-friendly operating system&lt;&#x2F;li&gt;
&lt;li&gt;How to handle a short interval, but no overlapping of service starts. &lt;code&gt;borg&lt;&#x2F;code&gt; (or &lt;code&gt;borgmatic&lt;&#x2F;code&gt;) blocks overlapping runs, but maybe there is a way to disable this in the service definition as well&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Starting the service was the easiest part.
You can specify a &lt;code&gt;StartInterval&lt;&#x2F;code&gt; as follows.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;StartInterval&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;600&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;      # seconds (10mins here)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If interested, you could even start the service at a specific time of day with &lt;code&gt;StartCalendarInterval&lt;&#x2F;code&gt;, similar to &lt;code&gt;crontab&#x27;s. But a simple &lt;&#x2F;code&gt;*&#x2F;5 1 * * *` like you would have done in cron, which specifies to run the command every five minutes during the second hour of the day, requires you to write the following XML &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;StartCalendarInterval&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;array&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Minute&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Hour&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Minute&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Hour&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Minute&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;10&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Hour&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Minute&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;15&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Hour&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Minute&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;20&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Hour&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Minute&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;25&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Hour&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Minute&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;30&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Hour&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Minute&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;35&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Hour&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Minute&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;40&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Hour&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Minute&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;45&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Hour&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Minute&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;50&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Hour&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Minute&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;55&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Hour&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;array&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Hence, I wrote a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;randomn4me&#x2F;crontab-to-launchd&quot;&gt;simple Python tool&lt;&#x2F;a&gt; to convert crontab entries to simple launchd entries.
It does not add any fuzz or fancy, but it should suffice for a starter and for configuring later.
But back to the topic.&lt;&#x2F;p&gt;
&lt;p&gt;The second part I was interested in was service power management settings.
Here I found information in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;manpagez.com&#x2F;man&#x2F;5&#x2F;launchd.plist&#x2F;&quot;&gt;the launchd.plist (5) manual&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;manpagez.com&#x2F;man&#x2F;1&#x2F;launchctl&#x2F;&quot;&gt;this launchctl (1) manual&lt;&#x2F;a&gt;.
The vital flag is &lt;code&gt;LimitLoadToSessionType&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LimitLoadToSessionType &amp;lt;string&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;This configuration file only applies to sessions of the type specified.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;This key is used in concert with the `-S` flag to `launchctl`.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;with the launchctl sessiontype being &lt;em&gt;Aqua&lt;&#x2F;em&gt;, &lt;em&gt;LoginWindow&lt;&#x2F;em&gt;, &lt;em&gt;Background&lt;&#x2F;em&gt;, &lt;em&gt;StandardIO&lt;&#x2F;em&gt;, and &lt;em&gt;System&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-S sessiontype&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       Some jobs only make sense in certain contexts. This&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       flag instructs launchctl to look for jobs in a differ-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       ent location when using the -D flag, and allows&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       launchctl to restrict which jobs are loaded into which&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       session types. Currently known session types include:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       Aqua, LoginWindow, Background, StandardIO and System.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.apple.com&#x2F;library&#x2F;archive&#x2F;technotes&#x2F;tn2083&#x2F;_index.html#&#x2F;&#x2F;apple_ref&#x2F;doc&#x2F;uid&#x2F;DTS10003794-CH1-SUBSECTION3&quot;&gt;This documentation&lt;&#x2F;a&gt; provides a comprehensive overview of the former four session types.
The &lt;em&gt;System&lt;&#x2F;em&gt; type seems not to be documented at all (according to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;launchd-dev.macosforge.narkive.com&#x2F;jvjz3d0r&#x2F;launchd-system-session-type&quot;&gt;this mailing list&lt;&#x2F;a&gt;), so I copied what is written in the mailing list.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Aqua (default):&lt;&#x2F;strong&gt; Run app when the user is logged in. Has GUI access.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;StandardIO:&lt;&#x2F;strong&gt; Runs only in non-GUI login sessions (most notably, SSH login sessions).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Background:&lt;&#x2F;strong&gt; Runs in a context that&#x27;s the parent of all contexts for a given user.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;LoginWindow:&lt;&#x2F;strong&gt; Runs in the login window context.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;System:&lt;&#x2F;strong&gt; Services run in system&#x2F;root context (requires root privileges).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The session type &lt;code&gt;System&lt;&#x2F;code&gt; is for root services, which I currently do not need.
&lt;del&gt;As I want to run a &lt;code&gt;background&lt;&#x2F;code&gt; backup service, where the GUI is not required but should also run in the GUI session if they are up, I went for the SessionType &lt;code&gt;Background&lt;&#x2F;code&gt; (surprise).
This does not strictly adhere to the requirement of &lt;em&gt;power management&lt;&#x2F;em&gt;, such as running only when on a power adapter or Wi-Fi.&lt;&#x2F;del&gt;
&lt;strong&gt;Edit:&lt;&#x2F;strong&gt; The &lt;code&gt;background&lt;&#x2F;code&gt; service is a system-wide service and causes problems, when used for user services.
Hence I removed the full &lt;code&gt;LimitLoadToSessionType&lt;&#x2F;code&gt; key.&lt;&#x2F;p&gt;
&lt;p&gt;The third part I wanted to deal with is the non-overlapping service starts.
I started out with using the following snippet:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;LaunchOnlyOnce&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;After I added it to the plist file, I was surprised that it ran my &lt;em&gt;intervalled&lt;&#x2F;em&gt; service just once.
I checked the doc and noticed that this flag overrides any indicated interval services.
Fair point, so I removed this flag and let &lt;code&gt;borgmatic&lt;&#x2F;code&gt; deal with it.&lt;&#x2F;p&gt;
&lt;p&gt;So this is the plist file I ended up with.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;xml&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; version&lt;&#x2F;span&gt;&lt;span style=&quot;color: #DE5971;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; encoding&lt;&#x2F;span&gt;&lt;span style=&quot;color: #DE5971;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;UTF-8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;?&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;DOCTYPE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt; plist&lt;&#x2F;span&gt;&lt;span style=&quot;color: #DE5971;&quot;&gt; PUBLIC &amp;quot;-&#x2F;&#x2F;Apple&#x2F;&#x2F;DTD PLIST 1.0&#x2F;&#x2F;EN&amp;quot; &amp;quot;http:&#x2F;&#x2F;www.apple.com&#x2F;DTDs&#x2F;PropertyList-1.0.dtd&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;plist&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; version&lt;&#x2F;span&gt;&lt;span style=&quot;color: #DE5971;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &amp;lt;!-- Unique identifier for this job --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Label&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;pkuehn.borgmatic&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &amp;lt;!-- The command to run --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;ProgramArguments&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;array&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;opt&#x2F;homebrew&#x2F;bin&#x2F;borgmatic&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;array&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &amp;lt;!-- Run every 10 min (600 seconds) --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;StartInterval&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;600&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &amp;lt;!-- Working directory --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;WorkingDirectory&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;Users&#x2F;pkuehn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &amp;lt;!-- Environment variables --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;EnvironmentVariables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;PATH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;opt&#x2F;homebrew&#x2F;bin:&#x2F;usr&#x2F;local&#x2F;bin:&#x2F;usr&#x2F;bin:&#x2F;bin&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;Users&#x2F;pkuehn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;StandardOutPath&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;Users&#x2F;pkuehn&#x2F;Library&#x2F;Logs&#x2F;borgmatic-std.log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;StandardErrorPath&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;Users&#x2F;pkuehn&#x2F;Library&#x2F;Logs&#x2F;borgmatic-err.log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &amp;lt;!-- Don&amp;#39;t run at load time, only on schedule --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;RunAtLoad&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &amp;lt;!-- Don&amp;#39;t keep the job alive continuously --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;KeepAlive&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &amp;lt;!-- Process type for better resource management --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;ProcessType&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Background&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &amp;lt;!-- Throttle interval to prevent rapid respawning --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;ThrottleInterval&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;30&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &amp;lt;!-- Resource limits for backup process --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;SoftResourceLimits&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;CPU&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;3600&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt; &amp;lt;!-- 30 minutes max CPU time --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;NumberOfFiles&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;1024&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;integer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;dict&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;plist&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;But after placing the service in &lt;code&gt;~&#x2F;Library&#x2F;LaunchAgents&#x2F;pkuehn.borgmatic.plist&lt;&#x2F;code&gt;, I was greeted with this nice pop-up:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Python requires Full Disk Access &lt;!-- TODO: check the popup again; add link to FDA documentation --&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Which I of course denied.
I do not want my global Python interpreter to have full disk access, but just &lt;code&gt;borgmatic&lt;&#x2F;code&gt;, which is written in Python.
So, I required a wrapper app to deal with the FDA&#x27;s permission. &lt;!-- TO-DO: look for the blog post that solved this problem --&gt;
The solution of this blog post&#x27;s author was to write a wrapper for &lt;code&gt;borgmatic&lt;&#x2F;code&gt;, which is not written in an interpreted language (here, GoLang), to limit the permission to just this one wrapper-binary.
I also went for the simplest possible solution and wrote a Go wrapper.
It checks the path of &lt;code&gt;borgmatic&lt;&#x2F;code&gt;, runs the binary, and forwards the I&#x2F;O to the OS&#x27;s I&#x2F;O.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;package&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; main&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; (&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;	&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;	&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;os&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;	&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;os&#x2F;exec&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;func&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; main&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; () {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    fname&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; exec&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;LookPath&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;borgmatic&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;	if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;Fatal&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; exec&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;Command&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;fname&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Stdout&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; os&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Stdout&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Stderr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; os&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Stderr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; cmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;Run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;Fatal&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;After a short &lt;code&gt;go build&lt;&#x2F;code&gt; and `cp&#x27;ing the binary to the PATH, I corrected the path in the previous plist file to&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&amp;lt;!-- The command to run --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;ProgramArguments&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;array&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;Users&#x2F;pkuehn&#x2F;bin&#x2F;borgmatic-wrapper&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;array&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BA3C97;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And that&#x27;s it.
After loading and starting the service, I was greeted with the FDA pop-up again -- but now for my wrapper app, and my backups are running regularly 💪&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;storagebox:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; Listing archives&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;macbook-2025-08-25T21:30:47.116654&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;   Mon, 2025-08-25 21:30:47&lt;&#x2F;span&gt;&lt;span&gt; [a51ffcc5f88e0fe68f9e2092558e08d622faaef6b6984b88a755d587875abf42]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;macbook-2025-08-26T17:05:31.543293&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;   Tue, 2025-08-26 17:05:32&lt;&#x2F;span&gt;&lt;span&gt; [287f7aae1d9e342233677d01b49ed940eac143423867079e5111b0aca3eebe8a]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;macbook-2025-08-27T22:14:35.876593&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;   Wed, 2025-08-27 22:14:36&lt;&#x2F;span&gt;&lt;span&gt; [36e49f6dc52e520b466527200703583231484a8d1825833819a5ece1a19954d8]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;...&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 21&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; more snapshots&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;macbook-2025-09-10T16:59:04.454872&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;   Wed, 2025-09-10 16:59:05&lt;&#x2F;span&gt;&lt;span&gt; [693445c4040ddf59b0b89ad09e433481798aaad3107a5bcf4b0d2af3c6f9f317]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;macbook-2025-09-10T17:32:57.683485&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;   Wed, 2025-09-10 17:32:58&lt;&#x2F;span&gt;&lt;span&gt; [1e2460041c7894f91b7797e2121ccf53bc4341dc39756f274490684844fb81b0]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;macbook-2025-09-11T09:40:37.482414&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;   Thu, 2025-09-11 09:40:38&lt;&#x2F;span&gt;&lt;span&gt; [1432754d70f288e82b76317a0df478978b3c25695253abe3a095bfde4f97840d]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;storagebox-helsinki:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; Listing archives&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;macbook-2025-09-04T15:48:58.497271&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;   Thu, 2025-09-04 15:48:59&lt;&#x2F;span&gt;&lt;span&gt; [6f6204352938aa8c86f6d7ed261c96b2520b60587ab6d2f5f516f57143199437]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;macbook-2025-09-04T16:40:59.401094&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;   Thu, 2025-09-04 16:41:00&lt;&#x2F;span&gt;&lt;span&gt; [17d882dbcaecb0ca388039993c3696aaeee8d2ab9c6552bf49af750e597eb92a]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;macbook-2025-09-05T15:51:06.984910&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;   Fri, 2025-09-05 15:51:08&lt;&#x2F;span&gt;&lt;span&gt; [385244415e2ba7e175b302dc424de9600254e82e45b4ab8f5f79ba878ce13bb1]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;...&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; more snapshots&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;macbook-2025-09-10T14:44:02.471958&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;   Wed, 2025-09-10 14:44:03&lt;&#x2F;span&gt;&lt;span&gt; [a49ea4c49f2605d508efafc7e864ddb5a75736b6f37f05eb0b095f4c07553fed]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;macbook-2025-09-10T17:02:22.104919&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;   Wed, 2025-09-10 17:02:23&lt;&#x2F;span&gt;&lt;span&gt; [a7734cd44fde108b594a048debc09b492efaa93c2947858f80727c194d637059]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;macbook-2025-09-11T09:44:01.122305&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;   Thu, 2025-09-11 09:44:02&lt;&#x2F;span&gt;&lt;span&gt; [ea2bba31169e8db51288219ed0c0931f9d4fc09837668268793c221494420100]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Set up &lt;code&gt;borgmatic&lt;&#x2F;code&gt; to your liking and with different repositories to adhere to the 3-2-1 rule&lt;&#x2F;li&gt;
&lt;li&gt;Compile a wrapper app for borgmatic to correctly set the Full Disk Access permissions to just the wrapper instead of Python.&lt;&#x2F;li&gt;
&lt;li&gt;Write your &lt;code&gt;.plist&lt;&#x2F;code&gt; file and place it in &lt;code&gt;$HOME&#x2F;Library&#x2F;LaunchAgents&lt;&#x2F;code&gt;. You find documentation references and my file as an example above.&lt;&#x2F;li&gt;
&lt;li&gt;Load and launch your service file and enjoy your automated background service for borgmatic.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;The last time was in 2019, when I lost some photos after I switched from Linux to (ironically) MacOS for half a year and forgot to back up my photos, before wiping the system as a whole.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;WTF Apple ?!?!?!??!!!??&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Another Backup Fail</title>
          <pubDate>Sun, 24 Aug 2025 00:00:00 +0000</pubDate>
          <author>Philipp Kühn</author>
          <link>https://audacis.net/blog/another-backup-fail/</link>
          <guid>https://audacis.net/blog/another-backup-fail/</guid>
          <description xml:base="https://audacis.net/blog/another-backup-fail/">&lt;p&gt;I know, I know... I should have learned my lesson the first time.
But no, here I am again, having lost another round of precious pictures due to a backup failure.
And it is okay to put all the blame on myself this time (and a tiny &quot;wtf&quot; on MacOS too).&lt;&#x2F;p&gt;
&lt;h1 id=&quot;what-happened&quot;&gt;What happened?&lt;&#x2F;h1&gt;
&lt;p&gt;Yesterday I decided it would be a good time to check the privacy settings on my MacBook.
I found that the Apple Cloud completely synced with every other setting.
I noticed that the only thing synced was my iPad, but still, I did not want to risk that any of my data would be synced to the cloud.
So I disabled the sync for everything, including photos.
There was a little pop-up, which asked me to delete all synced Photos on the device.
As I did take some photos with my iPad, which might have been synced, I thankfully clicked &quot;Yes&quot;.
I did not think about the possibility that this would go into my &lt;code&gt;$HOME&#x2F;Pictures&lt;&#x2F;code&gt; directory and just wipe everything.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;what-i-tried-to-recover&quot;&gt;What I tried to recover&lt;&#x2F;h1&gt;
&lt;p&gt;So after I noticed my &lt;em&gt;fuck-up&lt;&#x2F;em&gt; (which was a day after), I checked all my backups, but none had my images.
While I installed &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nix-darwin.github.io&#x2F;nix-darwin&#x2F;&quot;&gt;nix-darwin&lt;&#x2F;a&gt; on this device a month before, none of the services I configured in my flake for &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nix-community.github.io&#x2F;home-manager&#x2F;&quot;&gt;home-manager&lt;&#x2F;a&gt; worked, as they are built on top of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;systemd.io&#x2F;&quot;&gt;systemd&lt;&#x2F;a&gt;, which is not available on macOS.
There are services in &lt;code&gt;nix-darwin&lt;&#x2F;code&gt; which are using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Launchd&quot;&gt;launchd&lt;&#x2F;a&gt;, but none for &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.borgbackup.org&#x2F;&quot;&gt;borg&lt;&#x2F;a&gt;&#x2F;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;torsion.org&#x2F;borgmatic&#x2F;&quot;&gt;borgmatic&lt;&#x2F;a&gt;.
Hence, I did not have automatic backups yet.
As for manual backups, I regularly ran borgmatic, but my config excluded the bulky files such as videos and raw images (CR2 and CR3).&lt;&#x2F;p&gt;
&lt;p&gt;Then I found a Lightroom Preview file.
But here again, I was not able to extract the pictures either.
I found a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.lightroomqueen.com&#x2F;community&#x2F;threads&#x2F;recover-jpegs-from-previews-no-catalog.31930&#x2F;&quot;&gt;forum&lt;&#x2F;a&gt; where extraction is discussed, but I might have been too brain-fogged at that moment to follow.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;verdict&quot;&gt;Verdict&lt;&#x2F;h1&gt;
&lt;p&gt;Nevertheless, my images are gone, the backup routine is in the works (the blog post will follow), and I miss the easy customizability of my system, because macOS seems to get in the way when doing more advanced stuff like automated backups with a script.
Be aware of this when turning off your iCloud backups, even when you do not use this stuff!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>NixOS on Netcup</title>
          <pubDate>Wed, 20 Aug 2025 00:00:00 +0000</pubDate>
          <author>Philipp Kühn</author>
          <link>https://audacis.net/blog/nixos-on-netcup/</link>
          <guid>https://audacis.net/blog/nixos-on-netcup/</guid>
          <description xml:base="https://audacis.net/blog/nixos-on-netcup/">&lt;p&gt;NetCup is a German hosting provider, which offers affordable virtual private servers (VPS) and dedicated servers.
It offers way more storage than other providers, like Hetzner, which I used before (and still have a server for now).
This increased storage capacity allows me to run other services, and not having to worry about running out of space (which I did with Hetzner and a &lt;a href=&quot;&#x2F;blog&#x2F;wrong-homemanager-garbage-collection&quot;&gt;wrong configuration for the Home Manager Garbage Collection&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installing-nixos-on-netcup&quot;&gt;Installing NixOS on Netcup&lt;&#x2F;h2&gt;
&lt;p&gt;The installation on Netcup is straightforward:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Wait for a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.netcup.com&#x2F;en&#x2F;deals&quot;&gt;deal on NetCup&lt;&#x2F;a&gt; you are interested in and order it.&lt;&#x2F;li&gt;
&lt;li&gt;Log in to the Netcup server control panel and open the server management page.&lt;&#x2F;li&gt;
&lt;li&gt;Download the current NixOS ISO image from the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nixos.org&#x2F;download.html&quot;&gt;NixOS download page&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Go to &quot;Media&quot;, &quot;DVD Drive&quot;, upload the NixOS ISO image at Custom ISOs.&lt;&#x2F;li&gt;
&lt;li&gt;Restart the server.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Now you can open the Screen Console in the Netcup server management page and proceed with the NixOS installation instructions.
I went with setting up the keymap via &lt;code&gt;loadkeys de-latin1&lt;&#x2F;code&gt;, setting the password, connecting via &lt;code&gt;ssh&lt;&#x2F;code&gt; (because I hate the web console), partitioning the disk using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nix-community&#x2F;disko&#x2F;&quot;&gt;disko&lt;&#x2F;a&gt; with &lt;code&gt;sudo nix --experimental-features &quot;nix-command flakes&quot; run github:nix-community&#x2F;disko -- --mode disko [disko-config]&lt;&#x2F;code&gt;, generating the NixOS configuration using &lt;code&gt;sudo nixos-generate-config --root &#x2F;mnt&lt;&#x2F;code&gt;, configuring a basic NixOS configuration which includes a user with authenticated ssh key, and installing NixOS using &lt;code&gt;sudo nixos-install --root &#x2F;mnt&lt;&#x2F;code&gt;.
While I use a flake for my NixOS configuration, it did not work for the NixOS installation, as I was not able to log into the system when installing it like this: &lt;code&gt;sudo nixos-install --root &#x2F;mnt --flake .#netcup&lt;&#x2F;code&gt;, but I am going to investigate this further, as it worked on a desktop like a charm.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;post-installation&quot;&gt;Post-Installation&lt;&#x2F;h2&gt;
&lt;p&gt;After the installation, I checked if all was working, adjusted my flake to include the new server, and rebuild the system using &lt;code&gt;nixos-rebuild switch --flake .#netcup&lt;&#x2F;code&gt;, which included all my configurations, like the Home Manager configuration and services like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;taskwarrior.org&#x2F;&quot;&gt;taskserver&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>MacOS Non-Breaking Character</title>
          <pubDate>Mon, 28 Jul 2025 00:00:00 +0000</pubDate>
          <author>Philipp Kühn</author>
          <link>https://audacis.net/blog/macos-non-breaking-character/</link>
          <guid>https://audacis.net/blog/macos-non-breaking-character/</guid>
          <description xml:base="https://audacis.net/blog/macos-non-breaking-character/">&lt;p&gt;Since using MacOS, I was annoyed by the fact that typing a non-breaking space (NBSP) is way too easy.
Nearly every time I wanted to type a space after a pipe &lt;code&gt;|&lt;&#x2F;code&gt; (&lt;code&gt;opt+7&lt;&#x2F;code&gt; on MacOS), I accidentally typed a NBSP, as &lt;code&gt;opt+space&lt;&#x2F;code&gt; is the shortcut for it.
This resulted in the piped command not being executed, as the NBSP is not recognized as a space, but as first character of the next command.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;cat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; example.json&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; jq&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; less&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Running the above command would result in an error, as &lt;code&gt; jq&lt;&#x2F;code&gt; is not recognized as a command because of the leading NBSP.
Instead I always had to type &lt;code&gt;cat example.json |jq . |less&lt;&#x2F;code&gt;, which is not only annoying, but also less readable if the oneliners become longer.&lt;&#x2F;p&gt;
&lt;p&gt;To fix this, I updated my &lt;code&gt;~&#x2F;Library&#x2F;KeyBindings&#x2F;DefaultKeyBinding.dict&lt;&#x2F;code&gt; file with the following content:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;quot;~ &amp;quot; = (&amp;quot;insertText:&amp;quot;, &amp;quot; &amp;quot;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;(&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;superuser.com&#x2F;a&#x2F;142573&quot;&gt;Source&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;
&lt;p&gt;And after a restart (&lt;em&gt;Noooo, my precious uptime!&lt;&#x2F;em&gt;) the NBSP is gone and I can type spaces after pipes again.
What a hassle!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Switching to MacOS for now</title>
          <pubDate>Mon, 30 Dec 2024 00:00:00 +0000</pubDate>
          <author>Philipp Kühn</author>
          <link>https://audacis.net/blog/newstart-with-macos/</link>
          <guid>https://audacis.net/blog/newstart-with-macos/</guid>
          <description xml:base="https://audacis.net/blog/newstart-with-macos/">&lt;p&gt;A while ago the display of my ThinkPad T490 started to flicker.
It seemed to stopped after a short while, but twice it even persisted for more than 30 minutes.
While working docked I didn&#x27;t notice it, but while giving lectures or working during a train ride this sucked.
It distracted me really hard, and I fear that it will break sooner or later.
And because this device is from 2019 and the processing unit is even older I decided it is time for a new device.&lt;&#x2F;p&gt;
&lt;p&gt;On my NixOS T490 I knew, I will not get through a whole 8-hour workday without ending up with a plastic brick at the end of a day.
Even with low backlight settings, while &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;&quot;&gt;&lt;code&gt;nvim&lt;&#x2F;code&gt;ing&lt;&#x2F;a&gt; (with a pretty light &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;randomn4me&#x2F;nix-flakes&#x2F;blob&#x2F;main&#x2F;modules&#x2F;home-manager&#x2F;nvim&#x2F;default.nix&quot;&gt;config&lt;&#x2F;a&gt;) on LaTeX or markdown with some LSP actions, Firefox, and light background services&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.
And once in a while I need to do some heavy lifting by compiling code, testing LLMs, but then I am usually near a power outlet.
There might be other efficiency tweaks in NixOS, but I don&#x27;t want to spend an uncertain amount of hours to find the right knob and maybe get 30 minutes.
Thanks to a colleague I came around this nice graphic from xkcd.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;xkcd.com&#x2F;1205&#x2F;&quot;&gt;&lt;img src=&quot;&#x2F;img&#x2F;is_it_worth_the_time_2x.png&quot; alt=&quot;This is a chart titled &amp;quot;How long can you work on making a routine task more efficient before you&amp;#39;re spending more time than you save? (across five years).&amp;quot; The chart uses a grid format, with rows representing how much time you shave off a task (ranging from 1 second to 1 day), and columns representing how often the task is performed (from 50 times per day to yearly). Each cell indicates the maximum time you can spend optimizing the task without exceeding the time saved over five years. For example, if you perform a task daily and save 1 minute, you can spend up to 6 days optimizing it. The chart is designed to help prioritize efforts in optimizing repetitive tasks.&quot; title=&quot;Be aware of timesinks&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Don&#x27;t get me wrong!
I love tweaking my systems.
Just today I revived my system config, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;randomn4me&#x2F;dotfiles&#x2F;tree&#x2F;master&#x2F;nvim&#x2F;.config&#x2F;nvim&quot;&gt;most prominently my nvim config&lt;&#x2F;a&gt; and added new plugins I discovered while working with NixOS and installed all the necessary terminal tools.
But scouring the documentation for days just to get my system running for 30 minutes longer than before is not worth the time.&lt;&#x2F;p&gt;
&lt;p&gt;Another colleague of mine spoke of his on-battery times with his MacBook, which exceed usually two full days, and this got me hooked.
It sounded insane for me, to get more than a day out of my laptop, which surpasses even my phone.
Not only does this allow you to go on tour without a charger and without thinking where to find the next power outlet, but it actually consumes less energy and is much more efficient and environmental friendly&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.
I didn&#x27;t use a MacBook since 2013, and I guess, a lot have changed (not just the OS, but also my usage).&lt;&#x2F;p&gt;
&lt;p&gt;So now, here I am with a M4 MacBook Pro in front of me, charge it once in two or three days and just let it sleep while it is not used.
It needs some more tweaking to really make it &lt;em&gt;mine&lt;&#x2F;em&gt; by setting up my &lt;code&gt;isync&lt;&#x2F;code&gt; and &lt;code&gt;neomutt&lt;&#x2F;code&gt; as I noticed Mail and I will not be friends in the near future but besides that, it seems really nice.
It just works the way I expect it to work.
I also looked into using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;daiderd.com&#x2F;nix-darwin&#x2F;&quot;&gt;Nix-Darwin&lt;&#x2F;a&gt;, but for now, I want to maintain a mainly stock experience and just do small adjustments here and there.&lt;&#x2F;p&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;I ran &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;isync.sourceforge.io&#x2F;&quot;&gt;&lt;code&gt;isync&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; for my &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;neomutt.org&#x2F;guide&#x2F;gettingstarted.html&quot;&gt;&lt;code&gt;neomutt&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; mail setup, regular backups with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;torsion.org&#x2F;borgmatic&#x2F;&quot;&gt;&lt;code&gt;borgmatic&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;, and a Python session in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tmux&#x2F;tmux&#x2F;wiki&quot;&gt;&lt;code&gt;tmux&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;Newer x86 AMD or Intel processors do claim similar runtimes, but I&#x27;m not sure, if this is the case when running Linux. And I know of the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Rebound_effect_(conservation)&quot;&gt;Rebound effect&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Advent of Code</title>
          <pubDate>Sun, 29 Dec 2024 00:00:00 +0000</pubDate>
          <author>Philipp Kühn</author>
          <link>https://audacis.net/blog/aoc/</link>
          <guid>https://audacis.net/blog/aoc/</guid>
          <description xml:base="https://audacis.net/blog/aoc/">&lt;p&gt;It is this time of the year, where you usually have some time to spare, which is either filled with family activities or personal projects.
When you are into programming you might have heard of the fantastic &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;adventofcode.com&quot;&gt;Advent of Code&lt;&#x2F;a&gt; which is an Advent calendar contain a bunch of small tasks to solve programmatically.
Some of them even contain mathematical problems, which, when solved, speed up your program tremendously.
It is similar to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;projecteuler.net&#x2F;&quot;&gt;Project Euler&lt;&#x2F;a&gt;, but presents new riddles every year, which are wrapped in a small Christmas story, and you can even compete with friends or colleagues on private leaderboards.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;img&#x2F;mac-programming.jpg&quot; alt=&quot;Crop cyber spy hacking system while typing on laptop&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This year, I use advent of code as an excuse to dive deeper into Rust, after years of using Python and even &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Code_golf&quot;&gt;code-golfing&lt;&#x2F;a&gt; my solutions, and being bored with it.
I was invited to a nice group of people at my university, who ran a private leaderboard and set up a benchmarking repository for their solutions.
This gave me the necessary boost to give it a try for another year and start over.
And it was (is) a good year.
I&#x27;m not finished with all days yet, but it is a welcoming diversion from the everyday coding during work!
If this year&#x27;s solutions are finished, I might put them online 👍&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Connect to your computer</title>
          <pubDate>Tue, 24 Dec 2024 00:00:00 +0000</pubDate>
          <author>Philipp Kühn</author>
          <link>https://audacis.net/blog/connecttoyourcomputer/</link>
          <guid>https://audacis.net/blog/connecttoyourcomputer/</guid>
          <description xml:base="https://audacis.net/blog/connecttoyourcomputer/">&lt;p&gt;&lt;img src=&quot;&#x2F;img&#x2F;typewriter-keyboard-black.jpg&quot; alt=&quot;Old four row typewriter with white letters on rounded, black keys.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;When was the last time some broke down in your home, and you had to call a handyman? And have you peeked into the bags with good quality tools they bring with them? I personally have never seen a handyman who dismisses quality tools to get the job done and here is a guess, why this is: &lt;em&gt;they just don&#x27;t want to pay the bill of not using them in the long run&lt;&#x2F;em&gt;.
Sure, you can get your job done with shitty tools that may break after some time.
And that may actually be okay&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; in short term.
But in &lt;em&gt;&quot;the long run&quot;&lt;&#x2F;em&gt; it may cost you not just the regular replacement of tools, but you may also get health-wise problems of not using good tools.
As a handyman you might cut yourself because the screwdriver skid down, fall of that instable ladder, or suffer from long-term problems, because you used too much brawn while you instead could just have used a nice hammer drill to drill those holes in the concrete.
This is one of the reasons, why I think that handymen own those quality tools, they use every day of their lives.&lt;&#x2F;p&gt;
&lt;p&gt;But when we change professions and enter office settings, the entire mindset appears to shift.
How many of you, upon starting a new job, arrived at the office on your first day to be greeted not only by your new and friendly colleagues, but also by a black block of plastic, a full-size rubber dome keyboard with the standard QWERTY layout, and a USB mouse lacking thumb buttons? Typing on these layouts can be uncomfortable in the long term.
In 1932, the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Dvorak_keyboard_layout&quot;&gt;Dvorak keyboard layout&lt;&#x2F;a&gt; was created, which could easily be used with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Keyboard_layout#Physical_layouts&quot;&gt;ANSI keyboard layouts&lt;&#x2F;a&gt;.
There are also numerous alternative ergonomic layouts for ISO keyboards.
The search for an ergonomic physical keyboard layout is ongoing.
Since 1972, there has been &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;journals.sagepub.com&#x2F;doi&#x2F;10.1177&#x2F;001872087201400110&quot;&gt;scientific evidence&lt;&#x2F;a&gt; indicating that touch typing on traditional physical keyboards is slower and more uncomfortable.
From what I have gathered, there have always been pioneers in the field working to develop ergonomic keyboards for everyone.
With the ability to develop and print custom PCBs and keyboard cases, finding the perfect ergonomic keyboard has become a real possibility.
This greatly expands the options available to find what works best for you as an individual, but it can also lead down a deep rabbit hole.
And if we consider the fact that our brains are wired to utilize patterns we recognize, switching keyboards and layouts becomes a big hassle.
Therefore, most people either do not know about other options because they are not exposed to them, or they use what they know due to other obstacles.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;img&#x2F;keyboard-standard.jpg&quot; alt=&quot;&amp;quot;QWERTY ISO-style keyboard on table with mouse and coffee mug.&amp;quot;&quot; title=&quot;QWERTY ISO-style keyboard on table with mouse and coffee mug..&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;For me, this was definitely the case until a friend introduced me to Bone, an ergonomic ISO layout designed to replace the German QWERTZ layout.
While he committed to learning Bone because he wasn&#x27;t touch typing before, I stuck with QWERTZ because I was faster with it and couldn&#x27;t spare the mental capacity to learn a new layout.
This was about two years ago.
But when I saw &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;media.ccc.de&#x2F;v&#x2F;gpn22-498-tastaturen-ein-drama-mit-10-fingern&quot;&gt;this presentation&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#3&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; about 5 months ago, explaining the long term issues with traditional keyboard layouts (and keyboards), I was hooked again and started crawling deeper into this seemingly endless rabbit hole.
I researched ergonomic keyboard layouts and decided to stick with the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;colemakmods.github.io&#x2F;mod-dh&#x2F;&quot;&gt;Colemak-DH&lt;&#x2F;a&gt; layout.
I have always preferred the ANSI layout over the ISO layout, but all my laptops are equipped with ISO-Keyboards, so of course there are even technical hurdles to overcome.&lt;&#x2F;p&gt;
&lt;p&gt;Afterward, the dive into potential keyboards was not far away.
I looked into split keyboards and stuck with the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;foostan&#x2F;crkbd&quot;&gt;Corne&lt;&#x2F;a&gt;, as it seemed the easier one to switch to (and it looks sick!), and actually build my first keyboard from scratch.
But the build guide and more details into the used firmware will be something for another day.&lt;&#x2F;p&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;It probably won&#x27;t be okay since you need to keep buying the tools you need if they break. So the monetary and time-wise value still needs to be invested all the time.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;3&lt;&#x2F;sup&gt;
&lt;p&gt;Or whatever the default layout there is in your country.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;3&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;The presentation is in German language.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Home Manager Garbage Collection gone wrong</title>
          <pubDate>Fri, 27 Sep 2024 00:00:00 +0000</pubDate>
          <author>Philipp Kühn</author>
          <link>https://audacis.net/blog/wrong-homemanager-garbage-collection/</link>
          <guid>https://audacis.net/blog/wrong-homemanager-garbage-collection/</guid>
          <description xml:base="https://audacis.net/blog/wrong-homemanager-garbage-collection/">&lt;p&gt;I recently ran into a problem with my NixOS server (and apparently my laptop as well).
And as a proud and convinced, but novice NixOS user, I use all the fancy features like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nixos.wiki&#x2F;wiki&#x2F;flakes&quot;&gt;Flakes&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nix-community.github.io&#x2F;home-manager&#x2F;&quot;&gt;Home Manager&lt;&#x2F;a&gt; to manage my user configuration.
Unfortunately, I made a mistake in my configuration which led to a full disk, and the inability to update my server any longer.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-problem&quot;&gt;The Problem&lt;&#x2F;h2&gt;
&lt;p&gt;The NixOS garbage collection is configured to run every day and to just keep the last 14 days of generations.
It worked well, but still the storage was still filling up.
I suspected some services like Mastodon, which I ran at that time, to be the culprit with all the media files and the database.&lt;&#x2F;p&gt;
&lt;p&gt;However, after a short investigation, I found out that the root cause was actually the &lt;code&gt;&#x2F;nix&#x2F;store&lt;&#x2F;code&gt; directory.
As I use flakes to manage my NixOS configuration, I checked on my laptop as well, and noticed a similar problem with nearly 300 GB of &lt;code&gt;&#x2F;nix&#x2F;store&lt;&#x2F;code&gt; usage and 295 GB in &lt;code&gt;&#x2F;nix&#x2F;store&#x2F;.links&lt;&#x2F;code&gt; 🤯
While this might not be uncommon on NixOS when installing a lot of packages with a lot of different versions, keeping a lot of generations it still seemed a bit too much for me, as I try to keep my systems as clean as possible.&lt;&#x2F;p&gt;
&lt;p&gt;I checked in with my local &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.chaos-darmstadt.de&#x2F;2023&#x2F;erstes-nixos-meetup&#x2F;&quot;&gt;NixOS community&lt;&#x2F;a&gt; (esp. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;darmstadt.social&#x2F;@atemu&quot;&gt;Atemu&lt;&#x2F;a&gt;) and they pointed me to the Home Manager garbage collection as this needs to be configured separately from the NixOS garbage collection.
After a &lt;code&gt;nix-env --list-generations&lt;&#x2F;code&gt; it confirmed, that I had just 7 NixOS generations on my system.
But a short&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nix-store --gc --print-roots | grep -vE &amp;quot;^(&#x2F;nix&#x2F;var|&#x2F;run&#x2F;\w+-system|\{memory|\{censored|&#x2F;proc&#x2F;maps&#x2F;)&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;showed a shitload of generations, which I did not expected.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-solution&quot;&gt;The Solution&lt;&#x2F;h2&gt;
&lt;p&gt;After some hints, I found out that I had not configured the Home Manager garbage collection.
I setup a quick home-manager module, which mirrors my NixOS settings, so that it runs in sync with the NixOS garbage collection and defaults to &lt;code&gt;true&lt;&#x2F;code&gt;!&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;  lib&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;  config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;  osConfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;  ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;}:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;with&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; lib&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;let&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;  cfg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;custom&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;gc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;in&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;  options&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;custom&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;gc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;enable&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; mkOption&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    description&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; = &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;Enable home-manager-gc based on nixos gc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; types&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    default&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;  };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;  config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; mkIf cfg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;enable&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    nix&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;gc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; = {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;      automatic&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; osConfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;nix&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;gc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;automatic&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;      options&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; osConfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;nix&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;gc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;options&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;    };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;  };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;After applying this configuration and &lt;code&gt;nix-collect-garbage --delete-older-than 14d&lt;&#x2F;code&gt;, I was rewarded with the following output:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;deleting unused links...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;note: currently hard linking saves 29539.49 MiB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;476109 store paths deleted, 201139.22 MiB freed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I also ran that on my server, and it cleared up some critical space as well.&lt;&#x2F;p&gt;
&lt;p&gt;With the new Home Manager module in place, and in the fashion of NixOS, I will never run into this problem again 🥳
Thanks again to the NixOS community for the help and support!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Let&#x27;s get started</title>
          <pubDate>Sat, 27 Jul 2024 00:00:00 +0000</pubDate>
          <author>Philipp Kühn</author>
          <link>https://audacis.net/blog/why/</link>
          <guid>https://audacis.net/blog/why/</guid>
          <description xml:base="https://audacis.net/blog/why/">&lt;p&gt;This is the usual place to give you some template like looking page, which presents you how everything will look like.
But since, I am not settled with the layout yet, and I think, it would be a waste of your time, I would like to rather give you a short introduction of, why I&#x27;m starting to blog.&lt;&#x2F;p&gt;
&lt;p&gt;The story begins with me wanting to write for my own (and others) a long time now.
One may ask&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;Why? Writing comes naturally, when you seek it out?&quot;
but for me, it never came.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;To this question I can only give you the following answer.
I always got caught in some kind of perfectionism, i.e., I never found the right tool for me and then never getting the start.
Once I tried &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gohugo.io&#x2F;&quot;&gt;hugo&lt;&#x2F;a&gt;, but it was never meant to be for me.
Then I tried to build my own static-site-generator but stopped half-way through and deleted, what I had.
I never knew what should be the topic, that I would like to spread to the world.
I didn&#x27;t want to give too many details of what I am up to, but wanted to share something.
Most of the time I wanted to share all the nerdy tech tools I tinkered with, but without a platform to share, it never had been.
When I think back to that time, I would never have worked to publish something.
My focus was not there yet, and from what I think now about all of that, is that it should mainly serve me, and that was not, what I though of when thinking about blogging.&lt;&#x2F;p&gt;
&lt;p&gt;But with new plans flowing through my family, I wanted to just get this out of my head and document it, in the first place, just for us as a family, but you and all the other readers are of course invited to join us on that journey.
Now, some may ask&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;Will this be yet another blog about tech or travel or something else?&quot;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Maybe it will, maybe it won&#x27;t.
But the thing is, that I noticed that I need some kind of volume to empty my head and share my thoughts.
No matter, if it is about something that is currently happening in my life or some nice tooling I discovered.
Currently, I am even thinking about giving some more details about the research I have done over the years.
Moreover, is it meant to &lt;em&gt;document&lt;&#x2F;em&gt; our current situation as a family and the things, that are going to change for us.
So, I will write it down and try to keep it up to date as time allows it to be.&lt;&#x2F;p&gt;
&lt;p&gt;So the blog will probably span over&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;General writing&lt;&#x2F;li&gt;
&lt;li&gt;Tech
&lt;ul&gt;
&lt;li&gt;Nix and NixOS&lt;&#x2F;li&gt;
&lt;li&gt;Linux in general&lt;&#x2F;li&gt;
&lt;li&gt;Programming&lt;&#x2F;li&gt;
&lt;li&gt;Keyboards&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Photography
But it may also change over time.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;If you want to get informed of changes, just subscribe to this page&#x27;s &lt;a href=&quot;&#x2F;rss.xml&quot;&gt;rss feed&lt;&#x2F;a&gt;.
You may also &lt;a href=&quot;mailto:blog@audacis.net&quot;&gt;contact me&lt;&#x2F;a&gt;.
I try to read every message that is sent to me 😋&lt;&#x2F;p&gt;
</description>
      </item>
    </channel>
</rss>
