DEV Community

Cover image for I spend one hour a week optimizing my development environment.
Oryan Moshe
Oryan Moshe

Posted on

I spend one hour a week optimizing my development environment.

The story of my unreasonable efficiency obsession - and the tools I use to fuel it

If you're a productivity freak like me you probably found yourself in the following situation (presumably in the last week):

You have a task to complete, you sit down, open up your laptop and suddenly, it happens.
That annoying little thing you have to do every single time. It might happen once an hour, once a day, maybe once a week, but it drives you bananas.

It could be something small like inserting your MFA codes, closing a pop-up or even switching to "normal" mode on vim.
It could be something more time consuming like rearranging your displays layout after replugging your Mac, changing your connection string to a readonly production database, or restarting your environment when changes are not affecting it.

It doesn't matter, the point is it's something you're doing instead of what you'd rather be doing.

8 months ago I decided to stop the madness. I started reserving 1 hour a week to get rid of these little nuisances.


Let's talk tools

So there are many tools that help me work towards my goal of ultimate efficiency. Some of them are free, some of them cost some bucks, heck, I even paid 50 bucks for one of them. You don't have to use the ones I suggest, and for every paid one I'm sure you can find a free one or create one yourself.

BetterTouchTool > $7.5 - $21

BetterTouchTool is the first tool I used to customize my development experience, I installed it even before starting my current position (I received my laptop beforehand) and I can't believe how much I use it every day.
In a nutshell - it allows you to customize everything "input related" in your Mac, including your Magic Mouse, trackpad, keyboard and even your Touch Bar (if you use a compatible version)

Karabiner-Elements > Free - Open source

Karabiner is one of those tools I expect every OS to have built in. It allows you to remap any key on your keyboard to do anything you want. Why isn't it a standard??

Alfred + Powerpack > ยฃ23 - ยฃ39

Alfred is probably the first tool I'll ever go to when trying to solve a workflow issue. Alfred (a free tool, massively extended by a paid "Powerpack") has way too many functions to tell you about here, but it's essentially Spotlight on steroids. It allows countless customizations and features out-of-the-box improvements that'll make you wish you met it before.


The changes that changed my life

1. Customizing my Touch Bar

If you have a Macbook pro with a Touch Bar, sooner or later you probably thought to yourself: "Damn, that is one piece of unutilized potentiel".
And it is, Apple definitely dropped the ball on that front.
Luckily, I used BetterTouchTool to customize it and make it not suck!



As you can see I left the esc key in the top left corner (we'll talk about the esc situation later), and I put a few shortcuts to applications I frequently use (Finder, Hyper terminal, VS Code)

That red Production / green Development block indicates what is the current state of my database.yml file (in rails based applications your connection strings are kept there), this allows me to know whether I'm working against my local DB or readonly production DB in a glance.

I also added a block that shows me my current internal IP address (useful when I want to share a link to a local server with a colleague), a mute button, a DateTime block with seconds (important when wanting to get a feel about query performance) that also takes me to my calendar on tap, and a "Coffee Break" button that locks my laptop.

Obviously when Spotify or Youtube are playing I have a block appear in the middle with some useful functions.

Another cool feature I utilized is 2 fingers drag to control brightness, and 3 fingers drag to control volume.

2. Replacing my Caps Lock with ESC

If you know me, you probably know I have a mild case of keyboard fetish. I build them, I collect them, I try to make the ones that best suit my style.

One thing I have to do on every system I use is remap my Caps Lock key to ESC, and especially in this specific Mac. I mean, who on earth would prefer ยง over a physical esc key??

If you use vim you know how important it is to have the esc key as close to you as possible, and as I started using it more and more I realized I'm using it for things other than vim. Closing pop-ups, blurring inputs, opening the console in Chrome devtools. Escape is the unsung hero of keys.

I use Karabiner-Elements to remap the useless Caps Lock (it's 2019, if you use Caps Lock it's time for some re-education) into an esc. Can't get easier than that.

3. Space Cadet Shift

In case you haven't read this excellent article by Steve Losh, I highly recommend you do, but the customization I liked (and used) the most ever since I read it is the "Space Cadet Shift Parentheses".

It turns your left_shift key into a ( and your right_shift key into a ) if they're pressed briefly, and treats them as normal shift modifier keys when held and combined with another key.

This allows me to type parentheses with one keystroke, which makes much more sense than the traditional way of shift + 9, as I probably use parentheses hundreds of times a day.

4. Clipboard history

This is truly a game changer. I specifically use Alfred's clipboard from the Powerpack binded to a cmd + shift + v shortcut, but you can use the free software "Jumpcut" instead.
What this essentially does is keep a history of your copied items, including text and images.

Originally, I started using it to stop these "F*ck, I copied over that super important thing I had in my clipboard and now I have to go back and copy it again" moments I kept having, but as time went on I started using it as an actual tool.

I copy multiple items from one application, then go to another application and paste them as needed without having to switch back.

5. Rearranging the display layout

If you have a Mac and 2 displays you're probably familiar with the issue.
You disconnect your laptop to go to a meeting, and when you come back your screens are all messed up, the spaces go to wherever they feel like and you're left there dragging windows from one display to the other for 2 minutes.

What I discovered is that you can change your main display 3 times (if you do it in the correct order) and the displays will go back to where you want them!
This in itself is a huge time-saver, but I wanted to take it to the next level, so I created an Alfred workflow.

A workflow is a set of actions, these can be scripts, changes in settings, push notifications and a ton of other actions, executed in order and triggered by a keyword in Alfred or a keyboard shortcut.

Using the free cli tool displayplacer, I was able to record the current displays state after each "main display change", and after I had all 3 I chained them together in a workflow triggered by the keyword arr (short for arrange).

Now every time I sit at my desk, I plug in my displays, press โŒฅ + space (my Alfred shortcut), type arr in, and the displays are fixed!

6. Changing my DB connection string

The amounts of data we work with don't allow us to pull the data to our local machine and work on it, so we sometimes have to change our connection string (our database.yml file) to connect to a read-only replica of our production DB to see how the data looks on a new dashboard or what not.

This process happens about 6-7 times a day, and every time I have to open the database.yml in my editor, uncomment / comment the lines of the production DB, save the file and restart my rails server (which we'll solve later)

I created an Alfred workflow that simply replaces my database.yml with the correct one according to the command I typed in, and saves a file stating which file is currently in use (remember that red/green block in the Touch Bar?)

Typing dbd changes my DB to development, and dbp to production.

7. Automatically restarting a local server

Anyone who developed some node.js knows nodemon, a great utility that allows you to run a node server, and restarts it whenever the files change.
But did you know nodemon can work on any cli tool and watch any file type?

Changing my rs alias (rails server) to

alias rs="nodemon --watch config -e rb,yml --exec \"rails server -b 0.0.0.0 -p 3002\"
Enter fullscreen mode Exit fullscreen mode

Allows me to run my server, and whenever a file in the config directory with an rb or yml extension is changed, it restarts the server! No more manual restart on database.yml change!

8. sudo TouchID

Whenever I need to type the master password of my Mac I'm annoyed. Why? Because I have TouchID! Why should I type a password instead of biometrically identifying myself?

I discovered that I can add a simple line to the sudo PAM (Pluggable Authentication Module) and from now on every time I need to sudo a command I just have to put my finger on the sensor!
Just add the following line to the top of your /private/etc/pam.d/sudo file:

auth sufficient pam_tid.so
Enter fullscreen mode Exit fullscreen mode

9. MFA without my phone

For this one I'll refer you to this fantastic workflow that inspired me, but in short - you can create an Alfred workflow that pastes an MFA code without you having to open your phone.

To keep my accounts secure (there's a reason for MFA after all) I changed the script permissions to "root only" and ran it as sudo.
If you remember from #8, sudoing on my Mac requires a fingerprint, and this allows me to protect my MFA tokens with a fingerprint, while not having to reach for my phone every time GitHub invalidates my session.

10. Starting my development environment

Our development environment is semi-complex, and personally I like to work in a specific way.
My terminal is Hyper, customized exactly as I like it, I have one tab split into 3 sections, one for docker-compose, one for our npm transpiler, and one for the rails server.

Other than that tab I have 2 more tabs, one for a rails console and the other for git management.

Instead of opening all of these tabs and typing all of these commands every time I'm starting my devenv, I created an Alfred workflow triggered by the keyboard shortcut cmd + shift + b that does all of that for me!


Honorable mentions

Not all of my optimizations have a story behind them, some are trivial and are still huge time savers

Aliases

Use shell aliases.
Whenever you have a long command you have to type more than once in a lifetime, throw it into an alias. You'll be surprised by how much you use it.

Terminal configuration

Apart from aliases there are a lot of customizations to do in your terminal. From shell customization including fzf and history auto-complete to better tab management and better remoting tools (like mosh)
The terminal is your friend and you spend a lot of time in it. Treat it nicely.

Calculator

You can use Spotlight / Alfred as a calculator. Apparently this isn't as known as I thought it was.

Using spaces

I know it's hard to get used to compared to Windows windows, but honestly spaces are the best way to get around a Mac. Take the time, learn to use them and learn all the gestures. Navigating spaces is way faster than dragging windows around.

Trackpad 3 fingers drag

You can drag with 3 fingers instead of click and dragging on the trackpad. Turn on this gesture, your fingers will thank you!
You can find it in Preferences > Accessibility > Mouse & Trackpad > Trackpad Options... > Enable dragging > three finger drag.


I have many more optimizations just like the ones posted here, if you'd like me to create a follow-up post just say ๐Ÿ™ƒ

You spend hours in front of your computer, make sure every minute counts.

Oldest comments (34)

Collapse
 
shubho profile image
Shubhojyoti

I love some awesome new Alfred workflows from this article. Thanks a lot.

Collapse
 
jwkicklighter profile image
Jordan Kicklighter

These are great! Would you mind sharing the details of the Alfred workflows (specifically that last one) and maybe the related Applescripts?

Collapse
 
oryanmoshe profile image
Oryan Moshe

I can share the workflows themselves, but honestly they're pretty boring ๐Ÿ˜…
Nothing too crazy going on there.
Here's the Applescripts for the last one, hope you can adjust them to your use case!

on alfred_script(q)
    tell application "Hyper.app"
            activate
        tell application "System Events"
            keystroke "bb"
            key code 36
            keystroke "rs"
        end tell
    end tell
end alfred_script

bb is my alias for switching to my dev folder, 36 is the keycode for enter, and rs is my alias for rails server over nodemon

Collapse
 
adam_cyclones profile image
Adam Crockett ๐ŸŒ€

1 hour a week, damn that's relatively a lot of time! I am a recovering tweaker, resist all temptation to do anything like this, the only thing I couldn't help. Change my PS1 to yellow with a branch name. Ultimately I have used a MacBook Pro for 2 years and I'm not impressed really anymore, I want something I don't have to change a trillion settings to feel productive. I'd better stay away from Linux then too.

Collapse
 
oryanmoshe profile image
Oryan Moshe

One hour seems excessive, but it's sort of a hobby so I guess It doesn't seem as much from my POV (:
My shell is customized out of control, adding a branch name to the prompt is definitely a must on every system!
I might make another post specifically about shell customization.

I'd better stay away from Linux then too.

As a former Arch / Gentoo Linux user, if you don't have time to tweak the system, I completely agree :P

Collapse
 
clara profile image
Clara

The touch bar customization looks awesome. Will implement today! Thanks for the tips!

Collapse
 
jamesthomson profile image
James Thomson

You can use Spotlight / Alfred as a calculator. Apparently this isn't as known as I thought it was.

Probably my most used Alfred feature :) That and I made a quick search for Can I Use.

Collapse
 
rbo13 profile image
Richard Burk

I've remapped my caps to control :)

Collapse
 
liquidmantis profile image
Will Ernst

Why not both? One of the Karabiner Elements complex mods rules makes the caps lock key esc when used alone, or ctrl if held and used in combination with another key.

Collapse
 
franck_fernandez profile image
Franck Fernandez

Nice article! If sudo TouchID doesnโ€™t work with iTerm2, you can change Prefs > Advanced > Allow sessions to survive logging out and back in, and it could work ๐Ÿ‘Œ

Collapse
 
kbilleter profile image
kbilleter

The other issue is under tmux. That requires an extra line with pam_reattach.so

/etc/pam.d/sudo gets reset with Apple MacOS updates these days. I have a script to send me an SMS if these lines have been removed (or TOTP from ssh) :-)

Collapse
 
mitchartemis profile image
Mitch Stanley

I've been thinking of writing something like this as well :). I don't spend an hour a week optimising, but I do love making my workflow as efficient as possible.

Thanks for the tips!

Collapse
 
sobuj profile image
Sobuj • Edited

I've never used Alfred but Wox launcher is best alternative for Windows.

Collapse
 
oryanmoshe profile image
Oryan Moshe

That looks sleek
Would definitely recommend it to any friend who uses Windows!

Collapse
 
attacomsian profile image
Atta

Thank you for a wonderful post ๐Ÿ™Œ

Clipboard history is very useful especially if you do a lot of copy paste (like me). I used to use ClipX on Windows a lot for copying multiple things and pasting them one by one. Last year, I switched to Ubuntu and it was terrible to work without ClipX for few months. I wish to see something similar to ClipX for Linux too (happy to pay $$).

Collapse
 
oryanmoshe profile image
Oryan Moshe

It'll probably be hard to find something similar to ClipX, as it uses the context menu which isn't really a key part of *nix systems.
Did you try CopyQ?

Collapse
 
attacomsian profile image
Atta

Yes. I tried CopyQ but it is not as good as ClipX is. I really liked the shortcuts and context menu.