Use a Mac as a "normal" PC

Picture by Gemini Nano Banana 3

Anyone who knows me well knows that I’m not a big fan of Apple products and their philosophy. Most people say they are amazing, but I can’t share that opinion. But this post is not about that. Let me explain why I want to use a Mac like a “normal” PC.

I’m working as a software developer, remotely, and I have a personal desktop computer at home that I use to develop my projects, play games, and do everything I need. I’ve been using Linux (Ubuntu) for 20 years, and I like it because I can customize it how I want, use free software, and feel in control of my computer.

Two years ago, I started a new position at a new company, and they provided me with a MacBook Pro as my work computer. It wasn’t something I liked, but I had no choice (other than not accepting it or not working there).

My first thought was: OK, this could be a problem. I found that macOS is much better than I expected, but I still couldn’t work in the same way as on my personal computer. Still, my experience with macOS was not great: I found some UX decisions really annoying, and I missed some features I used in Linux, like window tiling and snapping, the way to see all my open windows by just clicking the app icon in the Dock, and (on top of that) the maximize button behavior, which I still don’t understand. Also, the Command and Control keys are swapped, and there are many other small things that made my experience worse.

I use the MacBook as a desktop computer, always closed, and connected to two external monitors, a keyboard, a mouse, and other USB devices using a KVM switch, so I can switch from my personal computer to the work computer easily.

I wanted to minimize as much as possible the friction when switching from my work computer to my personal computer, so I started to customize macOS to be more like a “normal” PC. This is what I did:

  • Disable Touch ID: since I use the MacBook closed. How to disable Touch ID

  • Make Fn keys the default behavior: The Fn keys have two behaviors: the special behavior (volume, brightness, etc.) and the normal behavior (F1, F2, F3…). I want the normal behavior all the time. How to do it

  • Disable “reactions”: I really hate this thing popping up in any meeting. How to disable it

  • Dock on the left and not hidden: I’m very used to having the Dock on the left side and always visible. The solution is not perfect for me because the Dock is centered and the app icon positions change, which prevents me from using muscle memory, but it’s something. How to do it

  • Invert mouse scroll: I prefer the normal scroll behavior on the mouse wheel, not the “natural” one. I still don’t understand why it’s not possible to define a different behavior for mouse and touchpad. How to do it

Accessibility

For me, as a person with far-from-perfect vision, I need to increase the interface size and contrast to be able to read and find elements on the screen easily.

I found macOS accessibility options pretty limited; for example, I can’t find a way to scale the whole interface. So I have to increase the text size, but this doesn’t apply to most interface elements like buttons.

  • Disable transparency: For me, as a person with far-from-perfect vision, this effect is terrible and makes it hard to read or find elements. I prefer a more solid look. How to do it

  • Disable UI animations: This one is personal: I don’t like them. How to do it

Keyboard

I explored many options and different programs to customize the keyboard behavior, but since my keyboard is a VIA/QMK-compatible keyboard with multiple layers and macros, I ended up handling most of it there.

The first thing I did was use one layout for macOS, remapping the necessary keys to have a more “normal” PC layout (swapping Command and Control keys, remapping the Alt key to be the Windows key, etc.). And I have two keys to switch between the macOS layout and the normal PC layout.

  • Home/End keys: I understand the way they work in macOS (End goes to the end of the text, not the end of the current line). It’s just another way to do it, but I prefer the normal behavior (End goes to the end of the line). Since the “regular” behavior is achievable using Command + Left/Right Arrow, I created a macro to do that when I press Home or End.

  • For some remaps I used Karabiner-Elements, which is a powerful keyboard remapper for macOS. Karabiner-Elements, for example for the Alt-Tab behavior.

  • Disable mobile-like input: For me, this autocomplete behavior (like on mobile phones) is very annoying because it prevents holding a key to repeat. Discussion thread

Apps

  • I replaced Spotlight with Raycast and remapped the activation key to “Win+Space”, since it’s not possible to use the “Win” key alone.

  • Rectangle app: manage windows with keyboard shortcuts, and anchor windows to screen sides and corners.

  • Flameshot: for screenshots, as the default macOS screenshot tool is very limited. I like to annotate the screenshots I take.

Terminal

I decided to use iTerm2 as my terminal emulator. Terminals (any) are challenging because after doing the keyboard swap between Cmd and Ctrl, the terminal swaps them too, leaving the original behavior of the Ctrl key on the Cmd key, and that is not what I want.

  • Remapping all the escape sequences to have the normal behavior of the Ctrl key on the Ctrl key, not on the Cmd key. I created a custom keymap in iTerm2 to do that.

This is my configuration export:

{
  "Key Mappings": {
    "0x6a-0x100000-0x26": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x0a",
      "Escaping": 2
    },
    "0x6c-0x100000-0x25": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x0c",
      "Escaping": 2
    },
    "0xf700-0x300000": {
      "Text": "",
      "Action": 7
    },
    "0xf702-0x300000-0x7b": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x01",
      "Escaping": 2
    },
    "0xf72c-0x100000": {
      "Text": "",
      "Action": 9
    },
    "0x61-0x100000-0x0": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x01",
      "Escaping": 2
    },
    "0xf729-0x100000": {
      "Text": "",
      "Action": 5
    },
    "0xf72c-0x20000": {
      "Text": "",
      "Action": 9
    },
    "0x56-0x120000-0x9": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 70,
      "Text": "",
      "Escaping": 2
    },
    "0x6f-0x100000-0x1f": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x0F",
      "Escaping": 2
    },
    "0x43-0x120000-0x8": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 69,
      "Text": "",
      "Escaping": 2
    },
    "0x4f-0x120000-0x1f": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 28,
      "Text": "D460DB96-22D0-487D-8F65-87F18563835F",
      "Escaping": 2
    },
    "0x75-0x100000-0x20": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x15",
      "Escaping": 2
    },
    "0x74-0x100000-0x11": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x14",
      "Escaping": 2
    },
    "0x72-0x100000-0xf": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x12",
      "Escaping": 2
    },
    "0x70-0x100000-0x23": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x10",
      "Escaping": 2
    },
    "0xf72d-0x20000": {
      "Text": "",
      "Action": 8
    },
    "0xf703-0x300000-0x7c": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x05",
      "Escaping": 2
    },
    "0x65-0x100000-0xe": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x05",
      "Escaping": 2
    },
    "0xf72b-0x100000": {
      "Text": "",
      "Action": 4
    },
    "0x54-0x120000-0x11": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 27,
      "Text": "D460DB96-22D0-487D-8F65-87F18563835F",
      "Escaping": 2
    },
    "0x6b-0x100000-0x28": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x0b",
      "Escaping": 2
    },
    "0x71-0x100000-0xc": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x11",
      "Escaping": 2
    },
    "0x62-0x100000-0xb": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x02",
      "Escaping": 2
    },
    "0x67-0x100000-0x5": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x07",
      "Escaping": 2
    },
    "0x73-0x100000-0x1": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x13",
      "Escaping": 2
    },
    "0x5d-0x100000-0x1e": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x0d",
      "Escaping": 2
    },
    "0x78-0x100000-0x7": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x18",
      "Escaping": 2
    },
    "0x77-0x100000-0xd": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x17",
      "Escaping": 2
    },
    "0xf703-0x320000": {
      "Text": "",
      "Action": 34
    },
    "0x7a-0x100000-0x6": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x1a",
      "Escaping": 2
    },
    "0x45-0x120000-0xe": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 29,
      "Text": "D460DB96-22D0-487D-8F65-87F18563835F",
      "Escaping": 2
    },
    "0x19-0x60000": {
      "Text": "",
      "Action": 39
    },
    "0x5b-0x100000-0x21": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x1b",
      "Escaping": 2
    },
    "0x69-0x100000-0x22": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x09",
      "Escaping": 2
    },
    "0x79-0x100000-0x10": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x19",
      "Escaping": 2
    },
    "0x64-0x100000-0x2": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x04",
      "Escaping": 2
    },
    "0x76-0x100000-0x9": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x16",
      "Escaping": 2
    },
    "0x6e-0x100000-0x2d": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x0e",
      "Escaping": 2
    },
    "0xf701-0x300000": {
      "Text": "",
      "Action": 6
    },
    "0x0-0x120000-0x16": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x1e",
      "Escaping": 2
    },
    "0xf702-0x320000": {
      "Text": "",
      "Action": 33
    },
    "0x6d-0x100000-0x2e": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x0d",
      "Escaping": 2
    },
    "0xf72d-0x100000": {
      "Text": "",
      "Action": 8
    },
    "0x66-0x100000-0x3": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x06",
      "Escaping": 2
    },
    "0x63-0x100000-0x8": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x03",
      "Escaping": 2
    },
    "0x5a-0x120000-0x6": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 44,
      "Text": "",
      "Escaping": 2
    },
    "0x9-0x40000": {
      "Text": "",
      "Action": 32
    },
    "0x68-0x100000-0x4": {
      "Version": 2,
      "Apply Mode": 0,
      "Action": 11,
      "Text": "0x08",
      "Escaping": 2
    }
  },
  "Touch Bar Items": {}
}

Conclusion

After customizing my macOS experience, I can work in a similar way as on my personal computer, and the friction when changing between both computers is minimal.

This is not a flame post. I just want to share my experience and config, and see if you are in a similar situation and how you solved it.

Any feedback or suggestion to improve my setup is welcome!