My workflows

Published: 2020-09-27
Updated: 2021-03-26

I feel like it's cliche to make a "workflow" thing, where you brag about how productive your personal work methods are. But I also find people's workflows to be really interesting to read about, so I'm going to push through my "bleh" feeling and just talk about what I do to do things.

If you're interested in the tools that I use check out the using page on the wiki.

General high-level overview

I'm currently full-time employed, so my time is pretty stretched between my actual passions and staying afloat at work. So a lot of my broad-sweeping workflow ideals are there to try and work around the huge limitation of an 8 hour 5 day a week time sink.

First off, I wake up at around 3 AM every morning. Yes, seriously. There's many reasons for this, and I'll probably add more detail here later. For now just know that I'm more productive in the morning when nobody's awake and I can focus deeply on my work.

I get all my "passion stuff" done in the morning before going to my employer. Since I wake up at around 3 AM, I get a large chunk of time every morning where I'm at peak energy and focus.

When I'm working on my passion stuff (writing and programming, mostly) I use terminal-centric tools. One of my priorities is to use tools that are long lasting and stable, so that my days aren't full of trying to fix problems that shouldn't even exist. See the using page and this blog post for more details.

I also get my exercising done in the early morning. Right now it's usually a long walk or a short jog. I've been looking into lifting weights, too. Exercising is really important, since I get all depressed if I go long enough without it. I also hear it's good for your health, or something.

While at work I try to keep focused on things that I care about. I don't actually "work" on my passion stuff while there, because that would be asking for trouble, but I tend to listen to podcasts/audiobooks about things I care about and find inspiring. At the very least I'll try to think deeply about any problems I'm working through when I have the energy.

Once work is over, I get home and relax. I'm usually pretty exhausted at this point in the day, so I usually just let myself relax by watching videos that aren't challenging or going on walks or whatever. Sometimes this relaxing will involve poking around at "yak shaving" computer stuff like messing with a new text editor; basically things that aren't really important, but are interesting enough to catch my attention. If I still have the energy and urge to work on passion things, then I'll let myself do that too. But the afternoon is a rule-free zone when it comes to productivity, since I really need that time to relax most of the time.

Once 7 PM rolls around I start getting ready for bed, and by 7:30 I'm usually asleep or almost asleep. Rinse repeat.

There'll be more details about various parts of this below.

Software setup

You're gonna want to look at the using page of the wiki for context on the tools I'm talking about here. You can visit the tutils page for my dotfiles.

First off, I use a mostly terminal-centric workflow with making things. Since nearly all of the things I do are text based (programming and writing) that means I find the terminal to be really effective. If I need a graphical program like when making art I'll just use that. I'm not evangelical about terminal software, but I tend to find that it works better than graphical alternatives in nearly every case.

An exception is web browsing. Since the internet is terrible, I just use firefox to do what I need to do. I resent having to use it though, since firefox is terrible. But text-based web browsers are even worse, usually. Maybe I'm just not used to them.

My basic setup is like this: I have a single terminal open that runs a perpetual tmux client inside of it. I use an i3 scratchpad to alternate between the terminal screen and any graphical things I use (which is almost always a browser, or vlc). The graphical programs in the background are all in one i3 workspace in it's "tabbed" layout, which simplifies things a lot.

You can see this setup shown in the following picture. Notice how the terminal screen is floating over my web browser along with some other graphical applications that I use. This terminal screen is easily shown and hidden using a single button combination (Window's key + ;). I use a laptop with a single screen, so this is an optimal use of screen real-estate.

Image of my desktop

(The really long countdown timer in the status bar is a countdown to the estimated time of my death. It's there for motivation and absurdity.)

My tmux sessions are set up in a by-project basis. So I have one open right now for writing timtimestim stuff, for example. I usually have a "scratch" session for misc one-off things I want to do, as well.

When writing fiction/non-fiction I always keep within plaintext formats. This keeps me from being tied to a single format, which is really important to me.

When programming and writing I use the nvim (neovim) text editor. I don't have syntax highlighting turned on because I feel like it's really distracting. I've always just used syntax highlighting because it was default, but when trying it without highlighting I realized I like it better turned off. Give it a try yourself.

I use the stuff in tutils a lot. My most used programs in that repo are c, g, and o. I really hate navigating my home directory without c.

I also use fzf for searching through bash history on the command line. I record every command I put into bash in the history, even if they're repeated. It makes the history file longer and harder to work with, sure, but I can also get statistics about what programs I use the most. Taking record like that is more important than the small amount of space I "waste" with a large history file. Using fzf is the cherry on top, since I can easily search for long-lost commands I've previously used, which has come in useful far more than you would normally expect. The power of the fzf and bash history combo only grows as you get more history, too.

I don't have a lot of customizations to the software I use. Once I find a setup that I like with a piece of software I usually don't try to change it unless I find something really great, or I'm not up for actually working while still wanting to feel like I'm doing something productive. I find that customizing things is a trap that doesn't actually make me more productive with the software, unless it's a huge fundamental change like setting "autoindent" on in nvi. Even than, I always seem to find myself wanting to simplify complicated configs once they get to a certain size, so I cut out the middle man and try not to change much unless I feel I need too.

I'm comfortable with the command line and shell scripts. So if there's a quick one-off task I need to get done, I can easily write a one-line script for it and be done with it. I also automate a lot of things with shell scripts that are a bit more robust (see here. And if I need something serious I'll whip out C.

If I need to program in C, I'll usually use the C99 standard. I used to use C89 (ANSI C), but after a while I realized that I valued the better features of C99 more. One of my goals is to write software that lasts a long time, and C99 is portable enough for my uses that I feel comfortable using it for my projects. I don't see myself going over to anything over C99 for a long time though.

When debugging I tend to have my debugger (cgdb) behind my scratchpad instead so that I can easily switch between the two of them. This is a really nice debugging workflow, especially with the vi bindings in cgdb.

If I'm scripting something small, than awk, sed, and any of the other standard command line utils are my tools of choice. Especially awk. I don't really like perl that much, since it's yet another thing to learn and I don't find myself needing it all that often.

As for hardware, I usually have my external mechanical keyboard plugged into the laptop, since it's nicer to type on. Most of the time I'm at my desk, although I've been known to write long hours in my closet on a pile of pillows as well.

I'm pretty happy with where I'm at with regards to software setup. I can get a surprising amount done with these "simple" tools, and they don't get in my way.

Some other details: