Introduction
My workflow predominantly revolves around a terminal-based interface, with a few exceptions where GUI tools find their place. Navigating the CLI and TUI tools is similar to mastering touch typing: intimidating at first, but incredibly rewarding. After experiencing its unmatched efficiency and smoothness, there is simply no going back. For me, working professionally is intrinsically linked to maintaining a state of "flow" and having a workspace that supports this. This realization has cemented my commitment to my current setup. I wouldn't trade it for the world. It's comparable to abandoning touch typing for a more cumbersome method - unthinkable and counterproductive.
It is one of the most liberating aspects of freelancing, in contrast to traditional employment, to have the autonomy in choosing both hardware and software to work with. Having the liberty to tailor my setup to my needs allows me to achieve a higher degree of efficiency compared to standard company provisions. This advantage not only compensates for the additional administrative responsibilities that come with freelancing, but also elevates the overall experience, making it all more rewarding.
A Note on Perspective: My intention is NOT to persuade anyone that my workflow or setup is superior in general. This is about personal choice and finding what works best for each individual. I respect that everyone has unique needs and preferences in their tech environment. The essence of my sharing is to highlight possibilities and definitely not to advocate a "one-size-fits-all" solution. On the contrary, the goal should be for each of us to discover what best aligns with our requirements and styles - and having the possibility to work in this environment.
The Hardware
Processor
My hardware selection is curated for peak performance and synergy with some software choices, despite not being a PC gamer. At the heart is an 11th Gen Intel i7-11700F CPU which offers robust performance across a wide range of tasks from coding to compiling and beyond. The processor's prowess in multitasking and handling demanding operations is indispensable for my productivity levels.
Graphics and Display
Equipping my system with an NVIDIA GeForce RTX 3060 might seem excessive for terminal-centric tasks. Yet, it offers me to venture into graphic design and video editing effortlessly. Additionally, the Linux-compatible NVIDIA driver guarantees a smooth graphical experience when required.
My workspace benefits greatly from a triple monitor setup, improving my multitasking capabilities and workspace organization. With this arrangement, I dedicate the central monitor to core activities like coding, the right monitor to web browsing, and the left, smaller monitor for system monitoring or entertainment. This setup significantly elevates my productivity by keeping essential applications in sight.
Memory and Storage
While 16GB of RAM might appear excessive, it guarantees that I can manage multiple applications and virtual machines smoothly, ensuring my system's responsiveness even under significant strain.
Storage is managed with two 1TB hard drives: one serves as the primary disk and the other mirrors my home directory along with hosting Timeshift backups. To strengthen my data protection measures further, I utilize a private network cloud for regular backups, complemented by an external hard disk for weekly, air-gapped backups. This layered approach to data management ensures robust protection and quick recovery capabilities.
Input and Audio
An integral part of my setup is the Logitech K800 keyboard, particularly for its optimal key spacing, precision and responsiveness, which I find to be perfect for my typing habits. It minimizes typos and maximizes typing speed. While I also own the Logitech MX Keys, which is commendable for its design and functionality, the K800 remains my primary choice.
The JBL Club 950NC headphones with their noise-cancellation feature allow me to immerse myself fully in music and concentrate deeply on tasks without distractions. I use them all the time, wether it is for leasure or during work, and they are still working :-).
Secondary and Virtual Environments
In addition to my primary computer setup for daily tasks, I also have a Lenovo ThinkPad E15 Gen 2. This laptop I mainly use for working outside the house or when I need to do specific tasks that benefit from its portability or just having a second computer available.
Beyond this, I might use virtual and Raspberry Pi setups, predominantly for server needs. Virtual environments also allow me to create isolated spaces on my main machine to experiment with different configurations.
The Core Setup
Debian 12
My go-to operating system is Debian, particularly the Debian 12 "Bookworm" version, for both, desktop and server needs.
Debian is one of the oldest and most important Linux distributions, known for its stability and reliability - qualities that are non-negotiable in my daily operations. It is like a trusty old friend - always there, always reliable.
Debian includes the Advanced Package Tool (APT) as the primary package manager which is used to install, delete and update packages. Due to Debian's philosophy they might not always be the newest versions and I occasionally do use flatpak or compile from sources, however, I am cautious not to create a FrankenDebian.
Kali
On my Lenovo ThinkPad I have opted for Kali Linux, which, like my primary setup, is based on Debian. The Kali Linux configurations are almost identical to my Debian environment, ensuring a fluent transition between devices. This choice is particularly driven by Kali's specialized toolset for security testing and its more up-to-date package repository. While I prioritize stability and reliability on my main computer, I am willing to accommodate a slightly less stable environment on my ThinkPad which allows me to use some advanced features for specific tasks.
i3 and Polybar
When it comes to desktop, my choice is the i3 window manager, a minimalist, efficient and keyboard-centric solution. Its tiling approach organizes windows in a non-overlapping, tidy manner. It is fast and responsive. I have never had problems with i3.
Alongside i3, I use Polybar with X11. It's a customizable status bar to display a wide range of information. Similar to i3, polybar uses a text-based configuration file, making it relatively straightforward to set up and modify.
Alacritty
Alacritty is a modern, GPU-accelerated terminal emulator which gives a smooth and fast performance, especially when editing or scrolling through large amounts of text in the terminal. While Alacritty aims for simplicity, it is also highly configurable using a YAML file for configuration, allowing to customize key bindings, color schemes and more. And last but not least, it includes a Vi mode, which is extreamly useful if you are familiar with the Vi-like key bindings.
Zsh / Bash
My shell preference toggles between Zsh and Bash. While they're similar as for my needs, I lean more towards Zsh for its advanced features, particularly the completion system, which can be a significant productivity boost. However, I do not use "Oh My Zsh" anymore, preferring my own lean configurations to avoid any performance lag.
Tmux
Tmux is indispensable for handling multiple terminal sessions. It allows to run and manage multiple terminal sessions efficiently, especially when juggling various command-line tasks simultaneously. It reduces the need for multiple monitors as it allows to keep the terminal in one single window and navigate easily multiple sessions.
CLI and TUI Tools
Neovim
Neovim is my primary text and code editor. It is an evolved version of Vim and introduced improved plugin support which makes customization easier compared to Vim.
The user interface is refreshingly minimalistic, which helps me focus on the code or other tasks without distractions. The LSP client provides integrated auto-completion, code diagnostics and more. The mason.nvim plugin simplifies the installation and management and configuration of LSP servers.
Whether I'm coding in languages like C, Python or Rust, or working on text documents, Neovim's flexibility and efficiency are unmatched. As for the textual content, I prefer using markdown or LaTeX and then converting to PDF. This approach feels more fluid to me than wrestling with a WYSIWIG editor. Additionally, Neovim allows me to write blog posts in markdown, using my own scripts to convert them to HTML and preview the output all in a single tool.
While Neovim is my go-to editor for code and text, there are occasions where I pivot to more specialized tools. As for coding this includes debugging or extensive refactoring where I lean on the capabilities of JetBrains IDEs (see below) or when dealing with formats like .doc I turn to LibreOffice.
Git
Git is a powerful tool for managing projects of any size with speed and efficiency. It allows to track and manage changes in code and facilitating collaboration.
In my digital life, git extends well beyond code. I use it for a variety of files, including personal documents like my CV, task lists, dotfiles and other regularly updated material to keep track of the changes.
SmartCommit
SmartCommit is a tool I designed for an AI supported git commit process. It generates automated commit messages based on the diffs of staged changes, reducing the manual effort in writing meaningful commit descriptions.
Ranger
Ranger is my go-to tool for navigating the labyrinth of files and directories. With its Vi key bindings, it offers a fluent experience and has a visually intuitive interface.
FunkyShellSearch and related find tools
An alternative to accessing files with ranger is using some find and grep tools.
I have built FunkyShellSearch as a more user-friendly command-line search tool combining find and grep utilities with fzf previewing and direct actions on specific file types. This covers a lot of search types like image, music and video search on my local drive or code and pdf greps.
Besides I still rely on tools like fd and ag (The Silver Searcher) for more advanced searches if needed.
Cmus
Cmus is a lightweight and powerful music player for the terminal which I use all the time to listen to music from my music library. It supports features like playlists and keyboard shortcuts.
Neomutt
Neomutt is an extension of the classic Mutt client and provides a text-based interface for managing emails efficiently. Besides other GUI-based email clients I am using, this is definitely my favorite. It makes it easy to quickly check emails without distractions or to send a file directly from its directory within the terminal.
Taskwarrior
Taskwarrior is the tool I use to manage and track my to-do list. Just entering "task add xyz" to add a task or simply "task" to show the task list and always happy to type "task xyz done".
Navi
Navi is an interactive cheat-sheet based command line assistant which provides a searchable interface to find and execute complex command-line operations. This makes it easier to use advanced commands without having to leave the terminal or search online.
Buku
Buku is my bookmark management tool of choice. It allows storing, organizing and retrieving bookmarks from the terminal and enables tagging and searching bookmarks and offers the option of opening a specific bookmark with the browser.
Btop
Btop is a visually appealing TUI based resource monitor that shows usage stats for processor, memory, disks and network and processes. It is a more modern version of top and htop with a user-friendly interface.
Yt-dlp
Yt-dlp is my choice when it comes to downloading videos from YouTube and other platforms.
Rsync
Rsync is my utility for backing up and synchronizing data on the cloud and across my computers and servers.
Timeshift
Timeshift is an invaluable system restore tool in my arsenal, creating incremental backups of my Debian system. Even though not as crucial as compared during my more experimental Linux days, it is good to have a safety net, knowing I can effortlessly revert to a previous state after a problematic upgrade.
Hledger
Handling administrative tasks, particularly accounting, has never been a favorite of mine. However, managing them through the Linux terminal with Hledger transforms this chore into a more palatable task. Hledger elegantly handles financial records using simple plain text files. It can generate various reports and summaries, helping to understand where money is going to and coming from. It supports multiple currencies, complex transactions, budgeting and can even generate graphical reports. Moreover, the plain text format makes it perfectly compatible with the git version control system.
GUI Tools
While my workflow might be predominantly centered around the terminal, I do integrate GUI tools for specific tasks. My primary non-terminal applications are undoubtedly the web browser and handling multimedia content.
Vivaldi
Vivaldi might not be as mainstream as other browsers, but it is a highly functional, secure browser built on the Chromium framework. A standout feature for me is its ability to manage tabs into named sessions. Additionally, its built-in ad blocker offers a distraction-free reader view.
Vivaldi respects user privacy by not tracking browsing history and adheres to a strict policy of not collecting user data.
JetBrains IDEs
For my development work that goes beyond the capabilities of Neovim, especially when it involves more complex C programming tasks, I use the JetBrains IDEs. Among them, CLion is noteworthy offering powerful features for code analysis, refactoring and debugging. For instance, the debugger offers an intuitive memory view that greatly simplifies the process of diagnosing and solving complex issues.
Despite its heavier footprint compared to lightweight editors, sometimes the trade-off having a rich set of features comes with benefits. To bridge the gap between the efficiency of Vim's keybindings, I utilize the vi binding plugin.
Gimp
Gimp is a free alternative to Adobe Photoshop and one of the oldest open-source image editors still under active development. Since I am not a professional designer, it offers all I need.
Zathura
Zathura is my tool of choice for viewing PDFs. Its lightweight design means PDFs open almost instantly. The interface is clean and user-friendly, allowing navigation with keyboard commands similar to Vi, aligning perfectly with my keyboard-centric approach.
VLC Media Player
VLC is like a Swiss Army Knife of digital media. This versatile, free player supports nearly all file formats, eliminating the need for additional codecs. It can play videos duing download and even handle ZIP files without unpacking them.
🌟 Support My Quest
If the content within these pages has enriched your journey, consider showing your support by sharing a potion of coffee with me. Such a gesture, though small, is a mighty boon to my spirit and craft. It allows me to continue sharing the lore you hold dear.
Let it be known that the posts I pen are born from my own personal opinions and musings, presented before you in earnest, free of shadowed veils or hidden alliances. If you find truth and heart within my words, consider supporting me with a coffee. And believe me, as a father of two young spirits, this potion is indeed the elixir of my vigilance and creativity.
Beyond sharing my journey and insights, I craft customized solutions in the realm of tech to empower and fortify your own domains.
Comments
David -
@Steven
Thank you so much for your kind words and the recoginition of the effort put into my site. It is gratifying to know that time invested is appreciated. You also do some great work.
I am truly excited about our upcoming projects in April. I am sure that collaborations like ours drive innovation and lookign forward to continuing our work together in April.
I guess we will find once again the right balance between security and usability having some more conversations.
Thank you again for your support. Warm regards, David
Steven -
Your work and the structure of your website and blog are outstanding. Many people are not aware of the time and knowledge invested in it and the security aspects implemented. When it comes to IT security, there is only one person to ask, and that is you!
Further, working with you is on a level, where you can empathise with the customers, avoiding unnecessary resource waste, and ensuring high efficiency and quality work from the very beginning. Looking forward to work in the future with you as well!