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’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>
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 ‘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>
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 & 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> & <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’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 & 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’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>
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” screen, then a Thinkpad Carbon X1 of 13”, but then few years ago I started using smaller laptops of 10”</li>
155<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>
156<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>
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’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’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’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” 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”</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’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 >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”), see <a href="#devices">laptop</a> section for more details</li>
240<li>tablet: the 10” tablet has been replaced by a 8” 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’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’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