I wrote a long response to this but accidentally refreshed my tab, so you're getting an abbreviated response = /
I can give you one of my favorite examples. I have a pretty intense job, and I've struggled to some degree with the way stress eats into both my work productivity and my well-being after work. I wrote this script to mitigate the bouts of workday akrasia that induce me to almost-unconsciously procrastinate, as well as the unfortunate habit of checking work email/Slack after work hours or while on breaks (one of the pitfalls of not physically separating my work and recreational machines).
I use a simple launcher app called gmrun, which allows defining custom protocol prefixes. I've defined a few of these protocols, but my favorite is "m:", which switches "modes" on my laptop. Appending a prefix-string of either "work", "rec", or "all" rewrites my i3 config file to switch to the corresponding "mode" by selectively disabling a set of switch-to-workspace keybindings. It's about 100 lines of straightforward Python code incl docs and newlines, took me half an hour, and it paid for the time I put into it in less than a week. Probably a _dozen_ times a day, I catch myself trying to switch to the workspace that has my messenger apps or personal browser windows, and disabling the keybinding is enough to short-circuit the stress-driven impulse to distract and procrastinate and remember that I am trying to do focused work. It works very similarly for checking my email/Slack after work hours, something I almost never do now for the same reasons.
This is pretty tuned to my situation, OS setup, and personality, but that's pretty much the point: I'm extremely spoiled by Linux, i3, etc due to having a system that's been custom-fitted to my every need every moment of my computing life since late high school. If there's a rough edge, I sand it; if there's an optimization opportunity, I take it (if the ROI seems clearly worth it).
Not to get on my soapbox, but it saddens me a little that so many people I talk to, particularly technical ones, have become disconnected from just how many affordances general-purpose computers can offer without ever being _forced_ to avoid choosing the ease of a one-size-fits-all approach.
Hey, thanks so much for introducing me to the term "akrasia" because it works perfectly to describe a phenomena that happens to me as well. And my solution is similar, if admittedly much lower tech (I comment/uncomment lines of my etc/hosts file to switch modes).
But it was the rest of your post, describing the way in which you're environment has morphed with you over the years, and how you've been able to really dial in your computing experience...it's so striking! There are few people who can say the same. I certainly cannot. I have personally gone through perhaps 3 complete redos in my adult life. But it's disruptive and bad, and I have to admit I feel some envy that you've been able to maintain a single coherent thread of evolution for so long. You must move around incredibly smoothly - I'd be curious to see a video of a few cycles of a build-test-debug cycle with your setup. I would also be curious to know how your file-system is organized. That seems to be the most difficult problem of all!
> I have to admit I feel some envy that you've been able to maintain a single coherent thread of evolution for so long
What I find most interesting is how fundamentally it's changed over time while maintaining continuity over those years. In college, I had a tricked-out compiz setup with wobbly windows and a skydome and a wallpaper set via script and a bunch of other cool frills, a far cry from the spartan, productivity-focused keyboard-only setup I have now (I don't even have a wallpaper because a tiling wm means I can never see it). But at any given point, the majority of my workflow was similar to what it was the year before, and many of my config files date back to when I first started using Linux. Even when switching to i3, I already had a very keybinding-heavy workflow, so I just needed to learn one or two extra keybindings to get started, providing a gentle transition from my previous setup until I became more of an i3 power user.
> I'd be curious to see a video of a few cycles of a build-test-debug cycle with your setup
For work, I use a single screen session per "task". Im an MLE working on autonomous vehicles, so my environments vary, but I tend to avoid GUIs so every workflow (except browser-based tools like tensorboard or github code reviews) can fit within my screen sessions. Switching from my dual-monitor workstation to my laptop is pretty seamless; the same screen session is used for each task, but mapped to fewer visible windows at a time.
> I would also be curious to know how your file-system is organized
I'd imagine so; the biggest reason this isn't interesting is that I simply don't keep that much on my local filesystem, at least for personal use. I have a repos directory and a scripts directory, and then I pretty much just use the Debian defaults. Perhaps my Google Drive structure would be more interesting, but even there the structure is pretty straightforward, with folders like Finances and Career.
For work it's slightly more complex, but also more driven by the environment tools that work provides (eg a datasets folder that gets mounted into the Docker images I use to train models).
I can give you one of my favorite examples. I have a pretty intense job, and I've struggled to some degree with the way stress eats into both my work productivity and my well-being after work. I wrote this script to mitigate the bouts of workday akrasia that induce me to almost-unconsciously procrastinate, as well as the unfortunate habit of checking work email/Slack after work hours or while on breaks (one of the pitfalls of not physically separating my work and recreational machines).
I use a simple launcher app called gmrun, which allows defining custom protocol prefixes. I've defined a few of these protocols, but my favorite is "m:", which switches "modes" on my laptop. Appending a prefix-string of either "work", "rec", or "all" rewrites my i3 config file to switch to the corresponding "mode" by selectively disabling a set of switch-to-workspace keybindings. It's about 100 lines of straightforward Python code incl docs and newlines, took me half an hour, and it paid for the time I put into it in less than a week. Probably a _dozen_ times a day, I catch myself trying to switch to the workspace that has my messenger apps or personal browser windows, and disabling the keybinding is enough to short-circuit the stress-driven impulse to distract and procrastinate and remember that I am trying to do focused work. It works very similarly for checking my email/Slack after work hours, something I almost never do now for the same reasons.
This is pretty tuned to my situation, OS setup, and personality, but that's pretty much the point: I'm extremely spoiled by Linux, i3, etc due to having a system that's been custom-fitted to my every need every moment of my computing life since late high school. If there's a rough edge, I sand it; if there's an optimization opportunity, I take it (if the ROI seems clearly worth it).
Not to get on my soapbox, but it saddens me a little that so many people I talk to, particularly technical ones, have become disconnected from just how many affordances general-purpose computers can offer without ever being _forced_ to avoid choosing the ease of a one-size-fits-all approach.