arnaucube
arnaucube/arnaucube.comPublic Self-hosted repository
arnaucube.com/blog/tools.html
blog/tools.htmlRaw
  1<!DOCTYPE html>
  2<html lang="en">
  3
  4  <head>
  5    <meta name="description" content="A non-exhaustive overview of tools I use daily." />
  6    <meta charset="utf-8">
  7    <title> Tools - arnaucube - blog</title>
  8    <meta name="title" content=" Tools - arnaucube - blog">
  9    <meta name="description" content="A non-exhaustive overview of tools I use daily.">
 10
 11    <meta property="og:title" content=" Tools - arnaucube - blog" />
 12    <meta property="og:description" content="A non-exhaustive overview of tools I use daily." />
 13    <meta property="og:url" content="https://arnaucube.com/blog/tools.html" />
 14    <meta property="og:type" content="article" />
 15    <meta property="og:image" content="https://arnaucube.com/blog/img/posts/tools/tools-preview.png" />
 16    <meta name="twitter:title" content=" Tools - arnaucube - blog">
 17    <meta name="twitter:description" content="A non-exhaustive overview of tools I use daily.">
 18    <meta name="twitter:image" content="https://arnaucube.com/blog/img/posts/tools/tools-preview.png">
 19    <meta name="twitter:card" content="summary_large_image">
 20    <meta name="author" content="arnaucube">
 21
 22    <link rel="icon" type="image/png" href="img/logoArnauCubeFavicon.png">
 23
 24    <meta name="viewport" content="width=device-width, initial-scale=1">
 25
 26    <link href="css/bootstrap.min.css" rel="stylesheet">
 27    <link rel="stylesheet" href="css/style.css">
 28
 29    <!-- highlightjs -->
 30    <!-- <link rel="stylesheet" href="js/highlightjs/atom-one-dark.css"> -->
 31    <link rel="stylesheet" href="js/highlightjs/atom-one-light.css">
 32    <!-- <link rel="stylesheet" href="js/highlightjs/gruvbox-dark.css"> -->
 33    <script src="js/highlightjs/highlight.pack.js"></script>
 34
 35    <!-- katex -->
 36    <link rel="stylesheet" href="js/katex/katex.min.css">
 37  <link rel="alternate" type="application/rss+xml" title="arnaucube - blog RSS" href="https://arnaucube.com/blog/rss.xml">
 38</head>
 39
 40  <body>
 41
 42    <!-- o_gradient_background" -->
 43    <nav id="mainNav" class="navbar navbar-default navbar-fixed-top"
 44                      style="height:50px;font-size:100%;">
 45      <div class="container">
 46        <div style="float:left;">
 47        <a href="/blog" style="color:#000;display:inline-block;">blog</a>
 48        <span style="margin-right:20px; margin-left:20px;">|</span>
 49        <a href="/blog/notes.html" style="font-size:90%;color:#000;display:inline-block;">notes</a>
 50        </div>
 51        <div style="float:right;">
 52          <a href="/" style="color:#000;display:inline-block;margin-right:10px;">arnaucube.com</a>
 53          <a href="/blog/rss.xml" target="_blank"
 54            type="application/rss+xml" title="subscribe via RSS" aria-label="subscribe via RSS">
 55              <img width="12px;" src="img/rss.png" />
 56          </a>
 57          <div class="onoffswitch" style="margin-left:0px;display:inline-block;" title="change theme">
 58            <input onclick="switchTheme()" type="checkbox" name="onoffswitch" class="onoffswitch-checkbox"
 59              id="themeSwitcher">
 60            <label class="onoffswitch-label" for="themeSwitcher"></label>
 61          </div>
 62        </div>
 63      </div>
 64      <!-- <img style="height:5px; width:100%; margin-top:8px;" src="img/gradient-line.jpg" /> -->
 65    </nav>
 66
 67
 68
 69    <div class="container" style="margin-top:0px;max-width:800px;">
 70      <h1>Tools</h1>
 71
 72<p><em>2026-06-08</em></p>
 73
 74<p>A non-exhaustive overview of tools I use daily.</p>
 75
 76<p><em>I had this post half-written for a couple of years, finally I&rsquo;ve put the time to &lsquo;complete&rsquo; it enough to publish it. See it as a kind of email to a friend sharing my ways of approaching everyday tools.</em></p>
 77
 78<h2>in general</h2>
 79
 80<ul>
 81<li>Always be willing to <strong>customize and optimmize</strong> the tools you use</li>
 82<li>Usually closed source tools come with &lsquo;defaults&rsquo; that may &lsquo;suit the majority&rsquo; (or that it&rsquo;s acceptable enough), but does not mean that you have to conform with it. This is another reason (from many) to use freesoftware or if not, opensource.</li>
 83<li>when willing to use a tool, if it is closed source, always check <strong>free software / opensource</strong> alternatives, usually they exist and have an active community around them</li>
 84<li>prefer <strong>terminal</strong> tools over GUI tools. In this way, working remotely inside a server feels the same as working locally in your laptop, just the terminal and the tool in there</li>
 85<li>prefer offline tools than online tools</li>
 86<li>In physical objects optimize for <strong>portability</strong>; also usually is good to not centralize many functions in a single object</li>
 87</ul>
 88
 89<h2>computer</h2>
 90
 91<ul>
 92<li>in general
 93
 94<ul>
 95<li>maximize keyboard shortcuts, and minimize keyboard surface
 96
 97<ul>
 98<li>I use a <strong>40% keyboard, <a href="https://github.com/foostan/crkbd">corne</a></strong> keyboard</li>
 99<li>the idea is that instead of moving your fingers to the keys, you want to move the keys under your fingers (eg. for numbers &amp; symbols, F1 keys, etc)
100<div style="text-align:center;">
101<a target="_blank" href="img/posts/tools/corne.png"><img style="width:60%" src="img/posts/tools/corne.png"></img></a>
102<br>
103<i style="font-size:75%">the Corne keyboard I use, self-assembled and soldered</i>
104</div></li>
105</ul></li>
106<li><strong>minimize mouse</strong> usage:
107
108<ul>
109<li>using the mouse means lifting the fingers from the keyboard</li>
110<li>mouse limits an entire hand to only click buttons, you have many more fingers to use</li>
111<li>so, naturally, <strong><a href="https://www.vim.org">vim</a> &amp; <a href="https://neovim.io">neovim</a></strong> as code and text editors
112
113<ul>
114<li>also this has the benefit that working in my laptop or working in the server feels the same</li>
115</ul></li>
116<li>window manager: till last year I was using <a href="https://i3wm.org">i3</a>, now I&rsquo;m using <a href="https://swaywm.org">sway</a>. The main idea is to be able to move quick across windows and panels, while avoiding touching the mouse.</li>
117</ul></li>
118<li>automate:
119
120<ul>
121<li>this is, bash &amp; python scripts are very useful; for almost every task that has more than 3 iterations of the same steps</li>
122<li>OS: of course, Linux. For the past 3 years I&rsquo;ve been using <a href="https://nixos.org">NixOS</a>, attracted by it&rsquo;s imperative philosophy: you have a set of config files, format a laptop, load your config, and you have all your software with your configurations ready to use (ie. not manually {apt/pacman}-installing each software package)</li>
123</ul></li>
124</ul></li>
125</ul>
126
127<p>This is not only for code files; for example, when working on a <span class="math inline">\(LaTeX\)</span> document, edit it in neovim with <a href="https://github.com/lervag/vimtex">vimtex</a>, so that at save it re-renders the pdf and reloads it in <a href="https://pwmt.org/projects/zathura/">zathura</a>. Additionally, this works great while being offline, compared to mainstream options such as overleaf.
128Similarly, when working on a markdown document, use <a href="https://github.com/arnaucube/md-live-server">md-live-server</a> locally, splitting the screen between the terminal for editing and <a href="https://qutebrowser.org/">qutebrowser</a>, so that no mouse is needed any time.</p>
129
130<div style="text-align:center;">
131<a target="_blank" href="img/posts/tools/desk-setup.jpg"><img style="width:75%" src="img/posts/tools/desk-setup.jpg"></img></a>
132<br>
133<i style="font-size:75%">a bit old (~2023) desk setup, with my 'old' Thinkpad Carbon X1</i>
134</div>
135
136<h4>devices</h4>
137
138<!-- TODO picture corne + screens -->
139
140<ul>
141<li>At home:
142
143<ul>
144<li>I build a ~850 euros server (year 2024), with AMD Ryzen 9 5900XT 3.3 GHz 16-Core, 64 GB of RAM.</li>
145<li>to work, I usually <a href="https://mosh.org/">mosh</a> (ssh) into it, then open a <a href="https://github.com/tmux/tmux">tmux</a> and <a href="https://neovim.io/">neovim</a>, and work there, so that I can use any (lightweight) laptop while remotely running everything in the powerful-enough server.
146Another point for using vim/neovim as default code editor, is that when working remotely on a server, the setup remains the same. Another perspective is that you treat your laptop as a server for those kinds of tasks, so that when you work remotely on a server there is almost no difference.
147<div style="text-align:center;">
148<a target="_blank" href="img/posts/tools/server.jpg"><img style="width:60%" src="img/posts/tools/server.jpg"></img></a>
149</div></li>
150</ul></li>
151<li>Outside home:
152
153<ul>
154<li>for many years I used a Thinkpad x270 of 12.5&rdquo; screen, then a Thinkpad Carbon X1 of 13&rdquo;, but then few years ago I started using smaller laptops of 10&rdquo;</li>
155<li>10&rdquo; laptop: I was using a 2nd hand <a href="https://support.microsoft.com/en-us/surface/surface-go-2-specs-and-features-0fc6a657-2851-484f-6f82-bd3c589ed92c">Surface Go 2</a> that I bought for 200 euros, but recently I&rsquo;ve replaced it with a <a href="https://www.chuwi.com/product/items/chuwi-minibook-x-n150.html">Chuwi Minibook X</a> which costs 300 euros (brand new). Both laptops have 10&rdquo;.</li>
156<li>8&rdquo; tablet + notebook; or if in the sun, instead of the tablet, a eink reader (if so, a <a href="https://koreader.rocks">hacked one</a>)</li>
157</ul></li>
158</ul>
159
160<div style="text-align:center;">
161<a target="_blank" href="img/posts/tools/big-slingbag-contents.jpg"><img style="width:60%;" src="img/posts/tools/big-slingbag-contents.jpg"></img></a>
162<br>
163<i style="font-size:75%">8" tablet and 10" laptop</i>
164</div>
165
166<p>A benefit of using lightweight laptops combined with a remote <em>powerful</em> server, is that the battery lasts longer than doing everything in the laptop, since you&rsquo;re not doing many computations locally in the laptop!</p>
167
168<h2>services</h2>
169
170<p>Useful to have some raspberrypi/minipc at home with some services to make your life more comfortable (for example, with: <a href="https://github.com/arnaucube/configs/blob/master/server-dockers/docker-compose.yml">docker compose configuration file</a>).</p>
171
172<p>For about 2 years I&rsquo;ve been running multiple media services in a raspberry pi 5, recently replaced it with a Beelink S13 NUC, where I can support many users of non-technical friends.
173<div style="text-align:center;">
174<a target="_blank" href="img/posts/tools/media-setup.png"><img style="width:80%;" src="img/posts/tools/media-setup.png"></img></a>
175</div></p>
176
177<p>Useful services:</p>
178
179<ul>
180<li><a href="https://github.com/qbittorrent/qBittorrent">qbittorrent-nox</a>: the server version of qbittorrent, managed through a web UI</li>
181<li><a href="https://jellyfin.org/">Jellyfin</a>: stream all the downloaded content (shows, movies, music) to your devices (tv, tablet, phone, laptop, etc)</li>
182<li><a href="https://github.com/slskd/slskd/">slskd</a>: server client for the <a href="https://en.wikipedia.org/wiki/Soulseek">Soulseek network</a>, in order to download individual songs or albums that are not found through torrent</li>
183</ul>
184
185<p>Highly recommended: with the previous services, you have all the minimal setup to enjoy media at home; but there is more dimension to it; the various projects within the *arr family, eg:
186<a href="https://sonarr.tv/">sonarr</a>, <a href="https://radarr.video/">radarr</a>, <a href="https://www.bazarr.media/">bazarr</a>, <a href="https://prowlarr.com/">prawlarr</a>, etc.</p>
187
188<p>Then you can tie all those services through a main page with <a href="https://gethomepage.dev">homepage</a>, so that all links are accessible with a single click.</p>
189
190<p>Also, using browser <a href="https://github.com/gorhill/uBlock">adblockers</a> has become a must over the years, additionally having a <a href="https://pi-hole.net">pi-hole</a> connected to your router filters out adds in general on your home network (on all devices!), while also filtering out a big portion of trackers.</p>
191
192<h2>AFK / on the go</h2>
193
194<p><em>(AFK: away from keyboard, when I go outside of home)</em></p>
195
196<ul>
197<li>sometimes I bring a slim-foldable keyboard</li>
198<li>during the day (if I don&rsquo;t require a laptop): slingbag with
199
200<ul>
201<li>notebook and fountain pens</li>
202<li>eink reader (ie. hacked kindle) or a 8&rdquo; tablet</li>
203</ul></li>
204</ul>
205
206<div style="text-align:center;">
207<a target="_blank" href="img/posts/tools/small-slingbag-contents.jpg"><img style="width:60%;" src="img/posts/tools/small-slingbag-contents.jpg"></img></a>
208</div>
209
210<p><br>
211<div style="text-align:center;">
212<a target="_blank" href="img/posts/tools/notebook-kindle-outside.jpg"><img style="width:60%" src="img/posts/tools/notebook-kindle-outside.jpg"></img></a>
213    <br>
214    <i style="font-size:75%">can just randomly pop out of home and just sit anywhere to keep studying</i>
215</div></p>
216
217<ul>
218<li>travel: <a href="https://www.patagonia.com/product/refugio-daypack-30-liters/47928.html">30L backpack</a> with
219
220<ul>
221<li><a href="#pens-and notebooks">notebook</a></li>
222<li>eink reader / tablet 8&rdquo;</li>
223<li>laptop (see <a href="#devices">laptop</a> section)</li>
224<li>clothes for 7 days, on the 6th day you do laundry, so you can travel long periods of time, virtually indefinite</li>
225</ul></li>
226</ul>
227
228<div style="text-align:center;">
229<a target="_blank" href="img/posts/tools/backpack.jpg"><img style="width:80%;" src="img/posts/tools/backpack.jpg"></img></a>
230</div>
231
232<p>With this backpack setup I&rsquo;ve traveled across the world (6 continents), with stays ranging from few days to 2 months, all with same backpack setup.</p>
233
234<p><br></p>
235
236<p>Notes about the picture above: this picture is from &gt;2 years ago, some changes I did since then:</p>
237
238<ul>
239<li>laptop: the Surface Go 2 has been replaced by the Chuwi Minibook X (both of 10&rdquo;), see <a href="#devices">laptop</a> section for more details</li>
240<li>tablet: the 10&rdquo; tablet has been replaced by a 8&rdquo; tablet</li>
241<li>emulator: the <a href="https://www.goretroid.com/products/retroid-pocket-4-handheld">Retroid Pocket 4 Pro</a> has been replaced by the <a href="https://retrogamecorps.com/2022/05/15/miyoo-mini-v2-guide/">Myioo Mini Plus</a> (less powerful, so less console options, but smaller in the backpack; ideal for GBA games!)</li>
242</ul>
243
244<h3>pens and notebooks</h3>
245
246<p>In the recent years I&rsquo;ve discovered the joy of using <a href="https://www.reddit.com/r/fountainpens">fountain pens</a>. They are not essential, but is one of those little joys of life.</p>
247
248<p>I&rsquo;ve had the opportunity to try many different models, both from buying some of them and also from trying them in-store (in Seoul there is <a href="https://maps.app.goo.gl/quDc2oAfb8Kn6Rug7">a very nice shop</a> where for a small fee you have all the time you need to roam through the shop trying more than 200 pens!)</p>
249
250<div style="text-align:center;">
251<a target="_blank" href="img/posts/tools/penshop-bestpen.png"><img style="width:80%;" src="img/posts/tools/penshop-bestpen.png"></img></a>
252    <br>
253    <i style="font-size:75%">In purple t-shirt, enjoying 2h of trying many many pens at <a href="https://maps.app.goo.gl/quDc2oAfb8Kn6Rug7" target="_blank">BestPen</a>, Seoul (South Korea).</i>
254</div>
255
256<p>Beware, once you enter the fountain pens rabbit hole, the next worry is the paper, hence a natural following fixation are the notebooks to use with the fountain pens. Not all papers are good enough for fountain pens, but there are <a href="https://md-product.com/en/collections/md-notebook">some</a> very <a href="https://www.clairefontaine.com/gb/3525-10811-carnet-brochure-age-bag-795401c.html#/1182-rulings-o_uni/1756-dimension-145_x_21_cm/1971-couleur_produit-gris">good</a> paper <a href="https://www.youtube.com/watch?v=c_UvVavl-eE">quality</a> notebooks. Similarly inks are another <a href="https://mountainofink.com">rabbit hole</a>.</p>
257
258<div style="text-align:center;">
259<a target="_blank" href="img/notebooks.jpg"><img style="width:80%;" src="img/notebooks.jpg"></img></a>
260</div>
261
262    </div>
263
264    <footer style="text-align:center; margin-top:100px;margin-bottom:50px;">
265      <div class="container">
266        <br>
267        <a href="/blog">Go to main</a>
268        <br><br>
269        <div class="row">
270          <ul class="list-inline">
271            <li><a href="https://twitter.com/arnaucube"
272                   style="color:gray;text-decoration:none;"
273                   target="_blank">twitter.com/arnaucube</a>
274            </li>
275            <li><a href="https://github.com/arnaucube"
276                   style="color:gray;text-decoration:none;"
277                   target="_blank">github.com/arnaucube</a>
278            </li>
279          </ul>
280        </div>
281        <div class="row" style="display:inline-block;">
282          Blog made with <a href="http://github.com/arnaucube/blogo/"
283                            target="_blank" style="color: gray;text-decoration:none;">Blogo</a>
284        </div>
285      </div>
286    </footer>
287
288    <script>
289    </script>
290    <script src="js/external-links.js"></script>
291    <script>hljs.initHighlightingOnLoad();</script>
292    <script defer src="js/katex/katex.min.js"></script>
293    <script defer src="js/katex/auto-render.min.js"></script>
294    <script>
295      document.addEventListener("DOMContentLoaded", function() {
296        renderMathInElement(document.body, {
297          displayMode: false,
298          // customised options
299          // • auto-render specific keys, e.g.:
300          delimiters: [
301            {left: '$$', right: '$$', display: true},
302            {left: '$', right: '$', display: false},
303            {left: "\\[", right: "\\]", display: true},
304            {left: "\\(", right: "\\)", display: false},
305            {left: "\\begin{equation}", right: "\\end{equation}", display: true}
306          ],
307          // • rendering keys, e.g.:
308          throwOnError : true
309        });
310      });
311
312      ///
313      let theme = localStorage.getItem("theme");
314      if ((theme === "light-theme")||(theme==null)) {
315          theme = "light-theme";
316          document.getElementById("themeSwitcher").checked = false;
317      } else if (theme === "dark-theme") {
318          theme = "dark-theme";
319          document.getElementById("themeSwitcher").checked = true;
320      }
321      document.body.className = theme;
322      localStorage.setItem("theme", theme);
323
324      function switchTheme() {
325        theme = localStorage.getItem("theme");
326        if (theme === "light-theme") {
327          theme = "dark-theme";
328          document.getElementById("themeSwitcher").checked = true;
329        } else {
330          theme = "light-theme";
331          document.getElementById("themeSwitcher").checked = false;
332        }
333        document.body.className = theme;
334        localStorage.setItem("theme", theme);
335
336        console.log(theme);
337      }
338    </script>
339    <script>
340    function tagLinks(tagName) {
341      var tags = document.getElementsByTagName(tagName);
342      for (var i=0, hElem; hElem =  tags[i]; i++) {
343        if (hElem.parentNode.className=="row postThumb") {
344          continue;
345        }
346        hElem.id = hElem.innerHTML.toLowerCase().replace(" ", "-");
347        hElem.innerHTML = "<a style='color:black!important;' href='#"+hElem.id+"'>"+hElem.innerHTML+"</a>";
348      }
349    }
350    tagLinks("h2");
351    tagLinks("h3");
352    tagLinks("h4");
353    tagLinks("h5");
354    </script>
355    <script>
356function generateTOC(tocContainerId = "toc") {
357    const tocContainer = document.getElementById(tocContainerId);
358    if (!tocContainer) return;
359
360    const headings = document.querySelectorAll("h2, h3, h4, h5, h6");
361    if (!headings.length) return;
362
363    // Generate IDs if missing
364    headings.forEach((heading, index) => {
365        if (!heading.id) {
366            heading.id =
367                heading.textContent
368                    .trim()
369                    .toLowerCase()
370                    .replace(/[^\w\s-]/g, "")
371                    .replace(/\s+/g, "-") +
372                "-" +
373                index;
374        }
375    });
376
377    const toc = document.createElement("ul");
378    let currentLevel = 1;
379    let currentList = toc;
380    const stack = [toc];
381
382    headings.forEach((heading) => {
383        const level = parseInt(heading.tagName.substring(1), 10);
384
385        const li = document.createElement("li");
386        const a = document.createElement("a");
387
388        a.href = "#" + heading.id;
389        a.textContent = heading.textContent;
390
391        li.appendChild(a);
392
393        if (level > currentLevel) {
394            for (let i = currentLevel; i < level; i++) {
395                const nestedList = document.createElement("ul");
396
397                const lastLi =
398                    currentList.lastElementChild ||
399                    currentList.appendChild(document.createElement("ul"));
400
401                lastLi.appendChild(nestedList);
402
403                stack.push(nestedList);
404                currentList = nestedList;
405            }
406        } else if (level < currentLevel) {
407            for (let i = currentLevel; i > level; i--) {
408                stack.pop();
409            }
410            currentList = stack[stack.length - 1];
411        }
412
413        currentList.appendChild(li);
414        currentLevel = level;
415    });
416
417    tocContainer.innerHTML = "";
418    tocContainer.appendChild(toc);
419}
420
421document.addEventListener("DOMContentLoaded", () => {
422    generateTOC();
423});
424    </script>
425    <script src="js/mermaid.min.js"></script>
426
427  </body>
428</html>
429