Back

Sunday, 10. August 2025

My Mac Setup

As a programmer, I spend most of my day in front of my desktop. So I guess it's
reasonable that I want it to look nice and sweet. More importantly for me, I want to be productive and be able to navigate around fast. That's why I also spend a lot of time customizing it. I always thought that the possibilities to customize my MacBook were minimal compared to Linux. But turns out I was wrong with my assumption. As I learned last week, one can do quite a lot with the right apps. I guess it does not come close to Arch Linux, for example, but it is still way more than I thought. So I dived into the rabbit hole of customizing my work environment, and it was deep - I have the feeling I still only scratched the surface and there is a lot more one can do. But for now, I am at a point where

  • I am quite happy with how my digital work setup looks and feels
  • I already spent way too much time adjusting everything

So I thought it was time to sit back, admire it for a couple of days (until I find something new to adjust), and write about it. This blog post will just be a brief overview of the apps I use and what they are for. In case you are interested in deep dives, I can write a little more about a specific setup or app in one of the next blog posts. I will also link to my dotfiles at the end of the post in case you want to copy my config.

The Status Bar

For the status bar, I use sketchybar. On this one, I feel like I am a little late to the party since it has already been around for such a long time. I just found out about this software a couple of days ago and was immediately hooked. I copied some stuff from the owner of the repo. He shared some of his old configs. I use the chart, volume, battery, Mac settings, and spaces from his old config, and added four other items to the bar.

  • The clock in the middle. Here, I only show the time because generally I am not interested in seeing the date and year. That feels like unnecessary information to hang around on the screen permanently.
  • A memory icon and the percentage of memory used. I might change this later into a chart similar to this for CPU usage. But I need to understand the scripts I copied a little more to pull this off.
  • A Docker icon and the number of Docker containers running. When I click on this item, it shows the names and images of the Docker containers running. Since I use Docker for almost all my projects, this is quite useful. It is a little buggy sometimes and therefore still a work in progress.
  • A Neovim icon + the name of the current folder I am working in. Since I am coding through my terminal (more on that later), I built a small script (a precmdhook) that tracks in which folder I am. This updates every time I cd into a new folder. This is just something I thought might be very cool. I am not sure yet how "helpful" it is, but as of now, I like it.

Window Navigation

For window navigation, I use a bunch of different apps:

  • Karabiner Elements
  • skhd
  • yabai

Karabiner Elements

Karabiner Elements is an app I've been using for a year now, and it's skyrocketing my productivity. I found out about this through a colleague at work showing me this video. The video explains the purpose of this software pretty well, but to summarize it: Karabiner is all about keyboard shortcuts. It enables you to quickly switch between and open apps (but it's not limited to that). I have a keybinding for almost every app I use on the Mac. For example, I open or switch to Slack by pressing Super + o + s (Super in my case is the tab key. I rarely used it before, and I do not miss it). There are a lot more things you can do with Karabiner Elements, and I love this piece of software.

yabai + skhd

I first heard about yabai and skhd when I tried to set up sketchybar. These two apps are fairly new to me. yabai is a window manager for Mac. Be aware that, to use 100% of its features, you need to turn off some security settings on your Mac. I personally haven't done this because I also want to use my setup on my working Mac. Yabai enables you to order the windows on your Mac however you want. It works through a CLI. But I do not want to type commands like yabai -m window --focus west every time I want to switch between windows. That is why I use skhd, which is a very simple hotkey daemon. The main point why I can't use Karabiner for this is that it is not able to run shell commands. So I use skhd for mapping a couple of yabai commands to hotkeys.

Terminal Emulator

There are a lot of great terminal emulators out there, and I am sure almost all of them have some kind of religious user base that will defend exactly their favorite piece of software with their life. I am simpler. I tried a bunch of terminal emulators when I first got into Neovim. I started with Warp and iTerm, tried to get Alacritty to run on my Mac, but was too stupid for that, and then installed kitty. There were two main factors for my choice: The name and the customization. I was pretty happy with kitty for a long time, but then a new terminal emulator appeared - Ghostty. As I said, I am a simple man. I fell in love with the app logo and the customization opportunities. That was enough for me to try it out. I liked it a lot and decided to switch from kitty to ghostty. That's all. I am too ignorant to care about speed and all other benchmarks that terminal emulators can be measured with. I just like the optics and the logo.

My Code Editor

When it comes to code editors, I am a little more special. Roughly a year ago, I started using Neovim. I wanted to become faster when writing code. Not essentially by memorizing half a million keyboard shortcuts over the next twenty years, but more in terms of not being interrupted so often. Normally, when I write code, I need to navigate between files and functions a lot. By using Neovim, I could do all this by using my keyboard alone, with some conveniently placed keyboard shortcuts. I need to admit that for the first 2-3 weeks, I was incredibly slow, but after that, I quickly became way faster, and by now, at least the navigation is pure muscle memory, and I can focus more on thinking about what I want to write instead of clicking through files in other editors. However I want to emphasize that there are still a lot of people who are way faster with other code editors like VS Code or the JetBrains editors. It's all about finding software that suits you and that makes programming fun for you. The next step is to learn the tool you use in order to be as efficient as possible.

Configuration and Plugins

I started using Neovim by just copying the config from Jess Archer and I used it for almost a year until two weeks ago. I decided I wanted to dig a level deeper and really understand what all the plugins and configs I am using are doing. That is why I stripped down my whole configuration to the bare minimum. For this, I started by watching this video and adjusted the config to my liking. After a couple of days, I decided that I might need a plugin or two. So I switched to using cmp and lspconfig for more convenience. After another couple of days, I added vim-blade to my plugin list because I wanted to have syntax highlighting in blade files, and then, two days ago, I added harpoon + telescope for faster navigation (even though netrw is quite nice too), and finally, I added eunuch and lualine as my last plugins on the list. I try to keep the list minimal on purpose and just add stuff that is really useful. Maybe I can cut out some stuff in the future. But for now, I am pretty happy with the setup.

Conclusion

This was a quick walkthrough of my Mac setup, the software I use, and how I discovered all the pieces of software. I hope you enjoyed reading this article. You can find my dotfiles here here in case you want to copy something. If you are interested in a deep dive into one of the tools I use, feel free to write a comment or email.

Thanks for Reading and Happy Coding!

Personal

Comments

Login or Register to write comments and like posts.


GitHub LinkedIn

© 2025