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="/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 <div class="container" style="max-width:800px;">
69 <br>
70 <div style="background:#cccccc; border:2px gray solid; padding:5px; width:80%;margin-left:auto; margin-right:auto; margin-bottom:5px;">
71 <i>Note: this blog is human-written, no AI generated content.</i>
72 </div>
73
74 <h1>Tools</h1>
75
76<p><em>2026-06-08</em></p>
77
78<p>A non-exhaustive overview of tools I use daily.</p>
79
80<p><em>I had this post half-written for a couple of years, finally I’ve put the time to ‘complete’ it enough to publish it. See it as a kind of email to a friend sharing my ways of approaching everyday tools.</em></p>
81
82<h2>in general</h2>
83
84<ul>
85<li>Always be willing to <strong>customize and optimmize</strong> the tools you use</li>
86<li>Usually closed source tools come with ‘defaults’ that may ‘suit the majority’ (or that it’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>
87<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>
88<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>
89<li>prefer offline tools than online tools</li>
90<li>In physical objects optimize for <strong>portability</strong>; also usually is good to not centralize many functions in a single object</li>
91</ul>
92
93<h2>computer</h2>
94
95<ul>
96<li>in general
97
98<ul>
99<li>maximize keyboard shortcuts, and minimize keyboard surface
100
101<ul>
102<li>I use a <strong>40% keyboard, <a href="https://github.com/foostan/crkbd">corne</a></strong> keyboard</li>
103<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 & symbols, F1 keys, etc)
104<div style="text-align:center;">
105<a target="_blank" href="img/posts/tools/corne.png"><img style="width:60%" src="img/posts/tools/corne.png"></img></a>
106<br>
107<i style="font-size:75%">the Corne keyboard I use, self-assembled and soldered</i>
108</div></li>
109</ul></li>
110<li><strong>minimize mouse</strong> usage:
111
112<ul>
113<li>using the mouse means lifting the fingers from the keyboard</li>
114<li>mouse limits an entire hand to only click buttons, you have many more fingers to use</li>
115<li>so, naturally, <strong><a href="https://www.vim.org">vim</a> & <a href="https://neovim.io">neovim</a></strong> as code and text editors
116
117<ul>
118<li>also this has the benefit that working in my laptop or working in the server feels the same</li>
119</ul></li>
120<li>window manager: till last year I was using <a href="https://i3wm.org">i3</a>, now I’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>
121</ul></li>
122<li>automate:
123
124<ul>
125<li>this is, bash & python scripts are very useful; for almost every task that has more than 3 iterations of the same steps</li>
126<li>OS: of course, Linux. For the past 3 years I’ve been using <a href="https://nixos.org">NixOS</a>, attracted by it’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>
127</ul></li>
128</ul></li>
129</ul>
130
131<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.
132Similarly, 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>
133
134<div style="text-align:center;">
135<a target="_blank" href="img/posts/tools/desk-setup.jpg"><img style="width:75%" src="img/posts/tools/desk-setup.jpg"></img></a>
136<br>
137<i style="font-size:75%">a bit old (~2023) desk setup, with my 'old' Thinkpad Carbon X1</i>
138</div>
139
140<h4>devices</h4>
141
142<!-- TODO picture corne + screens -->
143
144<ul>
145<li>At home:
146
147<ul>
148<li>I build a ~850 euros server (year 2024), with AMD Ryzen 9 5900XT 3.3 GHz 16-Core, 64 GB of RAM.</li>
149<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.
150Another 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.
151<div style="text-align:center;">
152<a target="_blank" href="img/posts/tools/server.jpg"><img style="width:60%" src="img/posts/tools/server.jpg"></img></a>
153</div></li>
154</ul></li>
155<li>Outside home:
156
157<ul>
158<li>for many years I used a Thinkpad x270 of 12.5” screen, then a Thinkpad Carbon X1 of 13”, but then few years ago I started using smaller laptops of 10”</li>
159<li>10” 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’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”.</li>
160<li>8” 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>
161</ul></li>
162</ul>
163
164<div style="text-align:center;">
165<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>
166<br>
167<i style="font-size:75%">8" tablet and 10" laptop</i>
168</div>
169
170<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’re not doing many computations locally in the laptop!</p>
171
172<h2>services</h2>
173
174<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>
175
176<p>For about 2 years I’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.
177<div style="text-align:center;">
178<a target="_blank" href="img/posts/tools/media-setup.png"><img style="width:80%;" src="img/posts/tools/media-setup.png"></img></a>
179</div></p>
180
181<p>Useful services:</p>
182
183<ul>
184<li><a href="https://github.com/qbittorrent/qBittorrent">qbittorrent-nox</a>: the server version of qbittorrent, managed through a web UI</li>
185<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>
186<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>
187</ul>
188
189<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:
190<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>
191
192<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>
193
194<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>
195
196<h2>AFK / on the go</h2>
197
198<p><em>(AFK: away from keyboard, when I go outside of home)</em></p>
199
200<ul>
201<li>sometimes I bring a slim-foldable keyboard</li>
202<li>during the day (if I don’t require a laptop): slingbag with
203
204<ul>
205<li>notebook and fountain pens</li>
206<li>eink reader (ie. hacked kindle) or a 8” tablet</li>
207</ul></li>
208</ul>
209
210<div style="text-align:center;">
211<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>
212</div>
213
214<p><br>
215<div style="text-align:center;">
216<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>
217 <br>
218 <i style="font-size:75%">can just randomly pop out of home and just sit anywhere to keep studying</i>
219</div></p>
220
221<ul>
222<li>travel: <a href="https://www.patagonia.com/product/refugio-daypack-30-liters/47928.html">30L backpack</a> with
223
224<ul>
225<li><a href="#pens-and notebooks">notebook</a></li>
226<li>eink reader / tablet 8”</li>
227<li>laptop (see <a href="#devices">laptop</a> section)</li>
228<li>clothes for 7 days, on the 6th day you do laundry, so you can travel long periods of time, virtually indefinite</li>
229</ul></li>
230</ul>
231
232<div style="text-align:center;">
233<a target="_blank" href="img/posts/tools/backpack.jpg"><img style="width:80%;" src="img/posts/tools/backpack.jpg"></img></a>
234</div>
235
236<p>With this backpack setup I’ve traveled across the world (6 continents), with stays ranging from few days to 2 months, all with same backpack setup.</p>
237
238<p><br></p>
239
240<p>Notes about the picture above: this picture is from >2 years ago, some changes I did since then:</p>
241
242<ul>
243<li>laptop: the Surface Go 2 has been replaced by the Chuwi Minibook X (both of 10”), see <a href="#devices">laptop</a> section for more details</li>
244<li>tablet: the 10” tablet has been replaced by a 8” tablet</li>
245<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>
246</ul>
247
248<h3>pens and notebooks</h3>
249
250<p>In the recent years I’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>
251
252<p>I’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>
253
254<div style="text-align:center;">
255<a target="_blank" href="img/posts/tools/penshop-bestpen.png"><img style="width:80%;" src="img/posts/tools/penshop-bestpen.png"></img></a>
256 <br>
257 <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>
258</div>
259
260<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>
261
262<div style="text-align:center;">
263<a target="_blank" href="img/notebooks.jpg"><img style="width:80%;" src="img/notebooks.jpg"></img></a>
264</div>
265
266 </div>
267
268 <footer style="text-align:center; margin-top:100px;margin-bottom:50px;">
269 <div class="container">
270 <br>
271 <a href="/blog">Go to main</a>
272 <br><br>
273 <div class="row">
274 <ul class="list-inline">
275 <li><a href="https://twitter.com/arnaucube"
276 style="color:gray;text-decoration:none;"
277 target="_blank">twitter.com/arnaucube</a>
278 </li>
279 <li><a href="https://github.com/arnaucube"
280 style="color:gray;text-decoration:none;"
281 target="_blank">github.com/arnaucube</a>
282 </li>
283 </ul>
284 </div>
285 <div class="row" style="display:inline-block;">
286 Blog made with <a href="http://github.com/arnaucube/blogo/"
287 target="_blank" style="color: gray;text-decoration:none;">Blogo</a>
288 </div>
289 </div>
290 </footer>
291
292 <script>
293 </script>
294 <script src="js/external-links.js"></script>
295 <script>hljs.initHighlightingOnLoad();</script>
296 <script defer src="js/katex/katex.min.js"></script>
297 <script defer src="js/katex/auto-render.min.js"></script>
298 <script>
299 document.addEventListener("DOMContentLoaded", function() {
300 renderMathInElement(document.body, {
301 displayMode: false,
302 // customised options
303 // • auto-render specific keys, e.g.:
304 delimiters: [
305 {left: '$$', right: '$$', display: true},
306 {left: '$', right: '$', display: false},
307 {left: "\\[", right: "\\]", display: true},
308 {left: "\\(", right: "\\)", display: false},
309 {left: "\\begin{equation}", right: "\\end{equation}", display: true}
310 ],
311 // • rendering keys, e.g.:
312 throwOnError : true
313 });
314 });
315
316 ///
317 let theme = localStorage.getItem("theme");
318 if ((theme === "light-theme")||(theme==null)) {
319 theme = "light-theme";
320 document.getElementById("themeSwitcher").checked = false;
321 } else if (theme === "dark-theme") {
322 theme = "dark-theme";
323 document.getElementById("themeSwitcher").checked = true;
324 }
325 document.body.className = theme;
326 localStorage.setItem("theme", theme);
327
328 function switchTheme() {
329 theme = localStorage.getItem("theme");
330 if (theme === "light-theme") {
331 theme = "dark-theme";
332 document.getElementById("themeSwitcher").checked = true;
333 } else {
334 theme = "light-theme";
335 document.getElementById("themeSwitcher").checked = false;
336 }
337 document.body.className = theme;
338 localStorage.setItem("theme", theme);
339
340 console.log(theme);
341 }
342 </script>
343 <script>
344 function tagLinks(tagName) {
345 var tags = document.getElementsByTagName(tagName);
346 for (var i=0, hElem; hElem = tags[i]; i++) {
347 if (hElem.parentNode.className=="row postThumb") {
348 continue;
349 }
350 hElem.id = hElem.innerHTML.toLowerCase().replace(" ", "-");
351 hElem.innerHTML = "<a style='color:black!important;' href='#"+hElem.id+"'>"+hElem.innerHTML+"</a>";
352 }
353 }
354 tagLinks("h2");
355 tagLinks("h3");
356 tagLinks("h4");
357 tagLinks("h5");
358 </script>
359 <script>
360function generateTOC(tocContainerId = "toc") {
361 const tocContainer = document.getElementById(tocContainerId);
362 if (!tocContainer) return;
363
364 const headings = document.querySelectorAll("h2, h3, h4, h5, h6");
365 if (!headings.length) return;
366
367 // Generate IDs if missing
368 headings.forEach((heading, index) => {
369 if (!heading.id) {
370 heading.id =
371 heading.textContent
372 .trim()
373 .toLowerCase()
374 .replace(/[^\w\s-]/g, "")
375 .replace(/\s+/g, "-") +
376 "-" +
377 index;
378 }
379 });
380
381 const toc = document.createElement("ul");
382 let currentLevel = 1;
383 let currentList = toc;
384 const stack = [toc];
385
386 headings.forEach((heading) => {
387 const level = parseInt(heading.tagName.substring(1), 10);
388
389 const li = document.createElement("li");
390 const a = document.createElement("a");
391
392 a.href = "#" + heading.id;
393 a.textContent = heading.textContent;
394
395 li.appendChild(a);
396
397 if (level > currentLevel) {
398 for (let i = currentLevel; i < level; i++) {
399 const nestedList = document.createElement("ul");
400
401 const lastLi =
402 currentList.lastElementChild ||
403 currentList.appendChild(document.createElement("ul"));
404
405 lastLi.appendChild(nestedList);
406
407 stack.push(nestedList);
408 currentList = nestedList;
409 }
410 } else if (level < currentLevel) {
411 for (let i = currentLevel; i > level; i--) {
412 stack.pop();
413 }
414 currentList = stack[stack.length - 1];
415 }
416
417 currentList.appendChild(li);
418 currentLevel = level;
419 });
420
421 tocContainer.innerHTML = "";
422 tocContainer.appendChild(toc);
423}
424
425document.addEventListener("DOMContentLoaded", () => {
426 generateTOC();
427});
428 </script>
429 <script src="js/mermaid.min.js"></script>
430
431 </body>
432</html>
433