Press enter or click to view image in full size
The Malfunction Catalyst
Recently, I had a series of frustrating experiences that made me rethink my entire approach to device dependence. It all started when I was using a borrowed charger for my MacBook Pro. After returning from a coffee break, the display failed while waking the laptop from sleep — nothing showed up, even though my laptop was booting fine. I could sense the hard disk running, the keyboard backlight was on, but the screen remained completely blank. I tried connecting to an external monitor via HDMI, but that didn’t work either.
In desperation, I ran through a series of troubleshooting steps: resetting the NVRAM, PRAM, and SMC. But nothing fixed the issue. Apple Support suggested I bring the device in for a look, but with no time before an outstation business trip, I left for my meetings without my trusted MacBook Pro.
On my return the following week, I plugged in my laptop again — only to find that, miraculously, it worked. The sudden lifelessness of my device, followed by its unexplained revival, left me unsettled. But at the time, it wasn’t enough to completely change my workflow.
A few weeks later, however, disaster struck again: I shattered the screen. It had barely been a few weeks since I had gotten it repaired, when the power circuitry malfunctioned. After getting it repaired too, I began to ask myself crucial questions: Why am I so reliant on these physical devices? What would my workflow look like if I didn’t have to depend on these fickle gadgets?
The Cloud-First Vision: Revisiting My Decade-Old Idea
The idea of working on a remote system in the cloud had been on my mind for years. Back in 2013, while working at The Big Blue, I was introduced to VMware Citrix Desktops running on physical servers, allowing users to access a virtual desktop remotely.
It was around the same time that cloud computing was beginning to gain traction, and I had envisioned a cloud-first workflow for myself. I had imagined using nothing more than a thin client on minimal hardware, accessing a remote system over a stable network. But at that time, several challenges stood in the way. Internet data in India was metered and expensive, and my work required graphical interfaces to manage spreadsheets, formatted documents, and other media, which made this idea unfeasible. A command-line interface (CLI) workflow simply wasn’t practical, especially given my skillset — and perhaps my lack of willingness to embrace such an approach back then.
Over the years, however, both my work and technology have evolved. Today, as an executive with occasional programming and dev-ops tasks, I don’t rely on GUIs as much as I used to. Though they are still helpful for common tasks like email or web browsing, I realised that many of my daily operations can be run without a graphical interface.
That’s when it hit me: A cloud-first workflow, combined with a minimal Linux device, could not only work but enhance my efficiency, all while giving me the freedom to tinker with ideas tailoring to my needs.
The Point of Inflection
Over time, I realised that most of my work revolved around using the terminal. I regularly run tmux, which allows me to manage multiple terminal sessions simultaneously, making it easier to switch between projects and tasks. This streamlined my workflow, especially since I often juggle several tasks at once.
For coding, Vim has been my editor of choice for years. Through extensive customisation — adding plugins and fine-tuning key bindings — I’ve transformed it into an efficient, full-fledged development environment. Given my reliance on the terminal for these tasks, I realised that all of this could be run on a remote server in the cloud, accessible via SSH. The idea of hosting my primary development environment remotely was compelling and, quite frankly, a natural evolution of my current setup.
Old Workflows, New Struggles: The First Hurdles
At the heart of my cloud-based workflow is the need to run and manage multiple applications spread across different cloud service providers and accounts. A critical component of this setup is WireGuard VPN, which I use to ensure that only traffic routed through the VPN interface is allowed. WireGuard’s simplicity and performance make it my VPN of choice. However, this setup introduced several challenges that needed addressing.
Traffic Configuration Conflicts
In WireGuard’s Peer Configuration, there’s a setting for AllowedIPs, which specifies the IP CIDRs that should be routed through the WireGuard interface. Most scripts I encountered would automatically configure this to route all IPs, which works fine for personal devices. But when deployed on a remote server, this configuration caused major issues — it would override essential traffic routes, disrupting connectivity. The solution was straightforward: whitelist the IP CIDRs for the setup instead of using all IP ranges. This adjustment was manageable, but it was a necessary step to ensure proper routing.
Large MTUs and Frequent Hangups
The default Maximum Transmission Unit (MTU) generated by using setup tools is 1420 bytes, which proved too large for stable connections in my environment. When using SSH and MySQL, I experienced frequent connection hangs, rendering these connections practically unusable. After experimenting, I reduced the MTU to 1380, which alleviated most of the connectivity issues.
Freedom via Device Agnosticism
For my setup to truly be device-agnostic, I needed a solution that would allow me to access my primary remote server from any device — trusted or not — without compromising security. Given that I was consolidating all my work into one central, remote location, I had to ensure that access to this server would be both secure and flexible.
That’s when I came up with SSHOTPAD — a custom set of scripts designed to enable one-time SSH access. The name SSHOTPAD is a blend of “SSH” (Secure Shell) and “OTPad” (One Time Pad — an encryption method that uses a random key applied only once, ensuring perfect security when the key is kept secret and never reused), reflecting its core functionality of generating a temporary, single-use SSH key. Here’s how it works: when I use an SSHOTPAD key to SSH into the server, the key is immediately invalidated after the session is authenticated, and a new key is sent to a designated email address. This ensures that if I need to connect from an untrusted device, I can do so securely, without leaving long-lived SSH keys on the untrusted device.
Once I had this system in place, I had fewer concerns about security. I then set up all my SSH keys on the remote server and configured git for seamless access to my code repositories.
Additionally, I installed the MySQL CLI client for database access and wrote custom scripts to connect to my databases via the CLI.
This setup offered three significant benefits to my workflow:
- Improved Data Transfer Speeds: Thanks to the high-performance remote server and its optimised network, file transfers became much faster and more reliable.
- Faster Code Testing: With the server’s low-latency connection, running tests became significantly quicker, resulting in faster feedback loops.
- Streamlined Deployments: DevOps and MLOps tasks were more efficient, with quicker file transfers and minimal downtime between deployments.
The AWS Hurdle: Rising IPv4 costs
My office network is configured with a leased line that only supports IPv4 addressing. Starting from February 2024, AWS began charging $0.005 per hour for each public IPv4 address in use. While this might seem negligible at first glance, it quickly adds up, especially in larger environments with numerous interfaces across multiple AWS accounts. This forced me to reconsider how I managed IP addressing.
As part of an effort to reduce costs and streamline my infrastructure, I moved as many services as possible to IPv6. This included configuring my WireGuard VPN servers to support dual-stack addressing — both IPv4 and IPv6. However, the problem arose when my office’s leased line, being IPv4-only, was unable to route traffic to these IPv6-enabled servers. The result? My VPN servers became inaccessible from the office network.
The solution was relatively simple but elegant: I configured my remote server with dual-stack addressing, supporting both IPv4 and IPv6. This allowed my devices to connect to the my remote server over IPv4 and then route outbound traffic to each account’s VPN server through the IPv6 network interface.
This workaround not only solved the immediate issue but also strengthened my cloud-first, device-agnostic workflow by eliminating the reliance on a single, physical network connection. It was a fortunate and pragmatic solution that further optimised my setup.
Beauty of Simplicity: Aesthetic Minimalism
One of the challenges of using the Linux TTY is that while it’s incredibly lightweight and resource-efficient, it can be visually limiting. Traditional Linux TTYs typically support only 8 colours by default, and they often rely on bitmap fonts, which aren’t known for their variety or sharpness. Since I was planning to do most of my work in Vim over SSH in the terminal, I wanted a solution that would allow me to use 256 colours, like the high-quality terminal emulators I’d grown accustomed to, such as iTerm on macOS.
I turned to the Linux FrameBuffer (FB) — a region of memory that stores pixel data for graphical output, enabling more sophisticated graphical displays without needing direct hardware access. This allowed me to experiment with FBTerm, a terminal emulator that works directly with the FrameBuffer, enabling 256-colour support.
The next hurdle was ensuring that my SSH sessions, which would be my primary method of interaction with remote servers, supported the 256-colour setup. When I initially tried, FBTerm didn’t work over SSH on my remote server. But by exporting the terminfo details for FBTerm and importing it into the remote server’s environment, I was able to make it work. After this, both SSH and tmux sessions were being displayed in full 256 colours, replicating the aesthetic quality I was used to on terminal emulators running in a graphical environment.
Additionally, I fine-tuned my terminal fonts. My favourite by far is JetBrains Mono, which I find both legible and pleasant to work with for extended periods.
Taking things a step further, I explored additional tools like fbgrab (to capture screenshots of the framebuffer) and fbi (to display images within the TTY). These tools felt almost magical, allowing me to interact with images and media in a way that felt both practical and visually satisfying, even in a text-only environment.
Press enter or click to view image in full size
Going Ultra-Low: My Switch to Raspberry Pi Zero 2W
The Raspberry Pi Zero 2W epitomises minimalist computing. With a quad-core 1GHz ARM processor, 512MB of RAM, 2.4GHz Wi-Fi, and a microSD card for storage, it offers an impressive amount of power in a compact and affordable package. Running Raspberry Pi OS Lite, a lightweight, CLI-only version based on Debian, it aligns perfectly with my “less is more” philosophy.
The real beauty of the Raspberry Pi Zero is its portability. I can easily carry it around in my pocket, and because it runs from an SD card, setup and configuration are both simple and flexible. I configured it to boot directly into FBTerm, replacing the default getty with my custom configuration to ensure that it met my aesthetic and functional needs.
However, after several months of heavy use, I ran into an issue: my SD card failed. Diagnostics pointed to sector failures, likely due to frequent read/write operations that would normally happen on a traditional hard disk.
I further mitigated this by directing the OS to reduce writes to disk.
This setback led me to experiment with piCore, a more minimalist version of Tiny Core Linux adapted for Raspberry Pi devices. Unlike traditional Linux distributions, piCore runs entirely in the RAM, using tmpfs (temporary file storage in memory). This prevents excessive wear on the SD card, ensuring a much longer lifespan for the SD Card.
The Final Setup: Embracing Tiny Core Linux
After my experience with the Raspberry Pi Zero 2W and its SD card issues, I decided to transition to piCore, an ultra-lightweight version of Tiny Core Linux for Raspberry Pi devices. piCore uses BusyBox to provide a suite of basic Linux utilities in a minimal form, which suited my need for speed and efficiency.
However, piCore’s minimalist approach came with its own set of challenges. For example, it doesn’t include wireless drivers out of the box. To get everything up and running, I had to manually install the necessary firmware and packages for the Raspberry Pi’s wireless network card.
Another roadblock came in the form of fbterm — piCore’s official package repository doesn’t include it. To solve this, I extracted and analysed a TCZ package (piCore’s native package format), inspected its contents, and identified the missing dependencies. I then downloaded the required .deb package for Fontconfig and FreeType, extracted them, and then repackaged them into a .tcz format. After adding these custom packages to the boot sequence, fbterm finally worked as intended.
piCore uses an inittab mechanism to configure the system at boot. To make sure everything loaded correctly, I had to modify the root filesystem (rootfs) itself, ensuring that the necessary libraries, fonts, and optional packages were included and available on boot.
CLI Browsing & Email: A Return to Simplicity
As part of my journey towards a cloud-first, device-agnostic workflow, I shifted to text-based tools for everyday tasks like browsing and email management. These lightweight, CLI-based tools fit perfectly within my minimal setup, allowing me to avoid the distractions of full-featured graphical interfaces.
For email, I use Mutt, a fast and flexible terminal-based email client. It’s quick, easy to configure, and fits seamlessly into my workflow. Mutt helps me stay on top of communications without the constant interruptions that come with a traditional email client.
For web browsing, I turned to Links, a text-based browser. It’s simple and effective, loading pages quickly and without the clutter of images or JavaScript. Links allows me to access the content I need while keeping distractions at bay, ensuring that my time spent online is focused and intentional.
Together, these tools contribute to a streamlined, distraction-free environment where I can concentrate on my work.
Press enter or click to view image in full size
Four Years On: An Epiphany, and Further Simplification
It’s been four years since I first started working with a custom SSH setup that allows me to do everything remotely — no local dependencies or configurations. Over that time, I’ve optimized and refined the process, but recently I had an epiphany: I can simplify the entire setup even further. Sure, there are a few trade-offs, but the benefits are hard to ignore.
The whole point of using color support was to enhance my SSH experience, as I have nothing on the Raspberry Pi. The entire premise was, if I’m going to work remotely, I want to have a rich, fully-functional terminal that’s both aesthetically pleasing and efficient. But the more I thought about it, the more I realized that there was no reason to keep the heavy lifting local. The key was to rely on internet connectivity and pull the necessary packages on-demand when I need them. With internet access, I could simply initialize the relevant terminal session and download the required dependencies in real-time.
This would be a one-time setup for each session, significantly streamlining my workflow and reducing the complexity of maintaining all those packages locally. But how exactly did I make this happen?
Step 1: Download the Package and Dependencies
The first thing I did was to download the primary .deb file for the package I needed. But as most of us know, dependencies are often the real culprit when it comes to package installation. So, I recursively fetched all the necessary .deb files that were required by my main package. This was crucial because it ensured I wouldn’t run into missing dependencies while trying to load the package.
wget http://ftp.us.debian.org/debian/pool/main/f/fbterm/fbterm_1.7-5_arm64.deb
wget http://ftp.us.debian.org/debian/pool/main/...Step 2: Extract the Package
Once I had all the required .deb files, I used the dpkg -x command to extract them into a dedicated directory. This step is critical because it ensures I have all the files in place for the next stage of the process. After extracting, I created a simple metadata file that would describe the package. In this case, I named it tce.info and added the package name and version for clarity.
for package in *.deb
do
dpkg -x $package $package_dir;
doneecho "NAME=fbterm; VERSION=1.7.5" > $package_dir/tce.info```
With these steps, I now had a directory structure containing the extracted package and its dependencies, along with a info file that is required for the package.
Step 3: Create the SquashFS Package
Next, I used the mksquashfs command to create a compressed SquashFS image of the extracted package directory. This is where the magic happens: SquashFS allows for efficient packaging that’s easy to distribute and load as needed. The -noappend flag ensures that the SquashFS file is created fresh each time, without adding to any existing package.
mksquashfs $package_dir package.tcz -noappendThe resulting package.tcz file is what I can now distribute or host on a server for easy retrieval.
Step 4: Host the Package on GitHub
To make this process even more seamless, I decided to host the SquashFS package on GitHub. This allows me to access the package from anywhere, without needing to store it locally. Whenever I need to use the package, I simply download it using wget and load it with tce-load.
#!/bin/ash
# Yes, it's ash - used by TinyCore. Different than bash.####################
TMP_DIR=/tmp/fbterm
FBTERM_REMOTE= #Remote URL where this is hosted on github
FBTERM_PATH=$TMP_DIR/fbterm.tcz
FBTERM_MD5=cd9e29cb1ef7ef31c1a240d2e01fac47
####################
function check_file_exists() {
if [ -f $1 ]
then
return 1
else
return 0
fi
}
function check_file() {
check_file_exists $1
if [ $? -eq 0 ]
then
return 0
fi
result=`md5sum $1 | grep -q $2`
if [ $? -eq 0 ]
then
return 1
else
rm -rf $1
return 0
fi
}
####################
if [ ! -d $TMP_DIR ]
then
mkdir $TMP_DIR
fi
cd $TMP_DIR
##########
check_file $FBTERM_PATH $FBTERM_MD5
FBTERM_INTEGRITY=$?
if [[ $FBTERM_INTEGRITY -eq 0 ]]
then
wget $FBTERM_REMOTE
fi
##########
tce-load -i $TMP_DIR/fbterm.tcz
cd /usr/lib/
find aarch64-linux-gnu/ | xargs -I "{}" sudo ln -s "{}" . 2&> /dev/null
cd /lib/
find aarch64-linux-gnu/ | xargs -I "{}" sudo ln -s "{}" . 2&> /dev/null
/usr/bin/fbterm --font-name="JetBrains Mono:style=SemiBold" --font-size=12 -- /bin/login```
This method ensures I can get started quickly, whether I’m on a new machine or setting up a fresh session. I no longer need to worry about managing dependencies locally or having to keep track of multiple configurations. Everything is ready to go as long as I have internet access.
The Trade-Offs and Final Thoughts
Of course, this approach does come with its trade-offs. For example, there’s a slight delay when initially fetching the package and its dependencies, depending on your internet speed. Additionally, hosting the package on GitHub means it relies on an external server, which could lead to issues if the server experiences downtime. However, the flexibility and simplicity it provides outweigh these concerns for my use case.
In conclusion, what started as a complex local setup has now been distilled into a streamlined, internet-based process that loads everything I need on demand. This approach has greatly improved my efficiency and freed me from maintaining a complex local environment. It’s a great example of how, sometimes, simplifying a setup can lead to greater flexibility and ease of use.
If you’re working in a similar environment, I highly recommend giving this method a try — especially if you’re already using SSH and working remotely. It’s a game-changer for productivity, and who doesn’t love less clutter?
Linux Asceticism in the Digital Age
The more I refined this setup, the more I came to appreciate the power of simplicity. A cloud-first, CLI-centric workflow isn’t just about using fewer devices or tools; it’s about intentionality and efficiency. By eliminating unnecessary distractions and focusing solely on what truly contributes to my work, I’ve experienced a drastic shift in how I approach productivity.
In the past, I was bogged down by complex devices and flashy interfaces. The constant need for the latest tech or the most powerful workstation only created more noise and complexity, often taking me further from my goals. But once I embraced Linux Asceticism, I began to understand that less is more.
The beauty of this philosophy is that it’s not just about being low-tech; it’s about reclaiming control. It’s about designing a workspace that supports your work instead of distracting from it. With minimal distractions and a focus on the essentials, I found myself able to work faster, think clearer, and create more.
This journey wasn’t about making life harder or more complicated. It was about being thoughtful — reducing the noise, focusing on efficiency, and making every tool and device I use serve a clear purpose. Ultimately, this has led to a more sustainable, effective, and joyful way of working in an increasingly complicated world.
The Core Philosophy: Minimalism
At the heart of my transition to a cloud-first, CLI-centric workflow is a deeply rooted philosophy of minimalism. The essence of this approach is to strip away the unnecessary, focusing only on the tools and actions that deliver the most value. This isn’t about rejecting technology or embracing low-tech solutions for the sake of it; it’s about creating an environment that promotes focus, efficiency, and purpose.
In today’s tech-driven world, we are constantly bombarded with new features, devices, and software updates. Most of these come with bloat — excessive features we don’t actually need. As technology has advanced, devices have become more powerful, yet the user experience has often become more fragmented and complex. This paradox — more power and features, but less control and simplicity — is something I’ve come to reject.
I realised that the complex devices I was using — the laptops with polished GUIs, the expensive workstations, the latest consumer tech — were not empowering me. Instead, they were distractions. They introduced complexity, added choices, and often didn’t contribute directly to getting work done. It was like trying to work in a room full of noise and clutter.
That’s when I embraced Linux Asceticism — a philosophy that encourages simplicity, focus, and intentionality. By embracing minimalism, I’ve been able to create a workspace that serves only to enhance my productivity. The tools I use now are purpose-driven and essential. They help me focus on the work that truly matters — coding, building, managing teams — and leave behind the unnecessary distractions of more powerful, but ultimately irrelevant, tech.
Moving away from the idea of a “perfect workstation” and instead opting for a cloud-first, device-agnostic workflow has fundamentally changed how I approach work. I no longer feel burdened by the weight of heavy machinery or the pressure to keep up with every new gadget. Instead, I focus on what I create, build, and accomplish — not on what device or interface I use.
The Cloud as a New Workplace
One of the most significant shifts in my workflow has been embracing a cloud-first mindset. By moving my operations into the cloud, I’ve essentially created a virtual workspace that exists independently of any physical device. Whether it’s through AWS, GCP, Azure, OCI, or other cloud services, the cloud now serves as the backbone of my work.
Here’s why the cloud-first approach works so well for me:
- Ubiquity: No matter where I am or which device I use, as long as I have a network connection, I can access my remote cloud servers. This flexibility means I’m not tied to a specific device, and my “workspace” is always with me — whether I’m using a Raspberry Pi, a laptop, or even a smartphone.
- Resilience: Cloud infrastructure is far more resilient than physical devices. If a laptop breaks, a charger fails, or a device becomes outdated, it doesn’t matter. My data and critical tools remain in the cloud, and I can access them without disruption.
- Resource Efficiency: With computational tasks offloaded to the cloud, my local devices can be lightweight, portable, and resource-efficient. I no longer need high-end machines to run complex workloads — my cloud servers handle all the heavy lifting.
The cloud offers an efficient, reliable, and flexible environment that has greatly enhanced my productivity. By relying on it for core tasks, I’m able to keep my local devices simple and focused purely on accessing and managing my cloud resources.
The Beauty of the Command Line
One of the most rewarding aspects of my journey into Linux Asceticism has been rediscovering the power and efficiency of the Command Line. While many people still associate the CLI with complexity or outdated systems, I’ve found it to be an indispensable tool for productivity.
CLI tools are fast, lightweight, and flexible. They don’t require vast amounts of system resources or a fancy graphical interface, which means they can be used in virtually any environment. Unlike GUI-based tools that require complex installation and heavy system overhead, CLI tools are quick to set up and, once mastered, can be incredibly efficient. Additionally, command-line tools are optimised for working with wildcards and pattern-based processing, which is fundamental to how computers operate.
Here are some of the essential CLI tools that have become core to my workflow:
- Tmux: This tool lets me manage multiple terminal sessions simultaneously in a single window. It’s perfect for multitasking without needing to open several terminal windows or tabbed interfaces.
- Vim: A powerful text editor that runs entirely in the terminal. It’s highly customisable and efficient, allowing me to edit code, documents, and configuration files without relying on a GUI. Its key bindings and plugin support make it an integral part of my cloud-based workflow, enabling me to stay focused and productive.
- Mutt: An email client that works entirely in the terminal. It’s fast, reliable, and helps me avoid distractions. I’ve configured it to suit my needs, and it integrates well with my overall cloud-based workflow.
- Links: A text-based web browser. Using Links, I can browse the internet without getting distracted by images, videos, or JavaScript. This minimal interface allows me to focus solely on the content, whether it’s documentation or research.
The CLI tools I use aren’t just about being minimal — they’re also about being purpose-driven. They allow me to automate tasks, speed up processes, and stay focused on the work at hand, without the distraction of unnecessary features. Once I began using these tools, I found myself working faster and with fewer interruptions. The overall workflow became far more organized and intentional.
What’s more, the CLI approach opens up a vast world of automation. Because these tools can be scripted, I’ve built custom workflows that automate many of my daily tasks. From managing servers to automating deployments, these tools allow me to work smarter, not harder.
The SBC Revolution
One of the most exciting aspects of my transition to Linux asceticism has been discovering the power of Single Board Computers (SBCs). These compact, low-cost devices have proven to be surprisingly powerful and flexible, and they perfectly align with my minimalist approach to computing.
Rather than relying on large, power-hungry machines, I’ve embraced SBCs like the Raspberry Pi Zero 2W: a tiny, affordable device with a quad-core 1GHz ARM processor, 512MB of RAM, and a Wi-Fi adapter. It runs the minimalist piCore OS (a version of Tiny Core Linux), which is designed to be lightweight and efficient — an ideal match for my cloud-first, device-agnostic workflow.
The Raspberry Pi Zero 2W is so small and portable that it fits in the palm of my hand. When configured properly, it becomes an extremely capable terminal for accessing my cloud-based infrastructure. And because it’s so lightweight, I can easily carry it in my pocket, making it the perfect companion for remote work or travel.
However, while this setup was highly effective, I encountered a few limitations with SD card wear due to frequent read/write operations. To mitigate this, I decided to experiment with piCore, a minimal Linux distribution that loads everything into RAM using tmpfs, essentially eliminating the risk of damaging the SD card over time.
This shift to RAM-based storage not only increased the longevity of the device, but also improved performance — everything runs faster because it’s being loaded directly from RAM rather than from an SD card.
As for the Radxa Zero 3W, which I recently acquired, it offers even more power in the same compact form factor. It has become my go-to backup SBC, providing additional flexibility and power for tasks that may require more resources.
By relying on SBCs like these, I’ve been able to significantly reduce my physical footprint while maintaining high levels of productivity. They consume very little power, take up almost no space, and allow me to work anywhere, all while connecting to the cloud and leveraging its processing power when needed.
The combination of SBCs and cloud infrastructure has enabled me to fully embrace the minimalist digital nomad lifestyle, where I’m not dependent on bulky, energy-draining hardware. The future of computing — at least for me — seems to be small, efficient, and connected to the cloud.
Hardware: A Non-Factor
One of the most reassuring aspects of my cloud-first, minimal setup is its resilience in the face of hardware failure. Since the bulk of my work now relies on cloud infrastructure, I’m no longer dependent on any single physical device. If an SBC like my Raspberry Pi Zero 2W or any other piece of hardware fails, I’m still able to carry on without missing a beat.
In the past, dealing with hardware failures could be time-consuming and frustrating — diagnosing issues, sourcing replacements, and often having to reconfigure everything. But now, because my workflow and data are hosted in the cloud, my productivity is protected from these disruptions. All of my essential tools and repositories are stored remotely, meaning that I can access them from any device, anywhere, as long as there’s an internet connection.
If my local device fails, I simply switch to another terminal, be it my phone, a backup laptop, or even a different SBC. My entire workspace is in the cloud, and that flexibility makes a world of difference. I no longer worry about losing work, scrambling to get a new device, or rebuilding my environment from scratch. The cloud has provided the ultimate redundancy and backup.
Moreover, the time I once spent troubleshooting hardware issues is now spent on enhancing my workflows, experimenting with new tools, or tackling more complex tasks. I’ve found that this freedom from hardware constraints allows me to focus on what truly matters: the work itself.
Press enter or click to view image in full size
Press enter or click to view image in full size
Conclusion: Less Is More
The journey towards Linux asceticism wasn’t just about simplifying my workspace — it was about making better choices. It was about finding tools that serve my purpose without distractions, fostering a deeper sense of freedom and control over my work. Through this process, I’ve learned that we don’t need more features, more devices, or more complexity to do great work. In fact, we can achieve far more by embracing less.
In the end, simplicity has led to a more efficient and productive way of working. The cloud is my office; my Raspberry Pi is my companion; the command line is my interface. This streamlined setup allows me to focus on what truly matters: creating, managing, and improving. I no longer need to worry about syncing files between devices, managing multiple workstations, or dealing with the distractions of feature-bloated GUIs.
The philosophy behind this transition is simple yet powerful. In a world saturated with noise — new devices, feature-bloated software, and constant distractions — minimalism offers a way to tune it all out and focus on the essentials. It’s not about rejecting technology or innovation; it’s about intentionality. It’s about choosing tools that help me do my work better, not just fancier.
Linux asceticism has taught me that less is more, and that minimalism is not a limitation — it’s a tool for greater focus, efficiency, and creativity. By embracing this mindset, I’ve learned how to create a workspace that is not only functional but enjoyable. It’s a place where I can build, iterate, and improve, without being overwhelmed by the clutter of modern tech.
So, as I continue down this path, I look forward to seeing how technology can be harnessed in a way that aligns with my values — simplicity, efficiency, and purposeful work. The journey is ongoing, but the destination is clear: A utopian world where technology serves me, and not the other way around.