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