Going from GNOME Shell to macOS

gnome logo greater than apple logo greater than windows logo

I recently started a new job and have to use a Macbook for development. This is the first time I’ve used a Mac for any extended period of time and I’ve been writing some notes about my experience going from Fedora Linux with GNOME Shell to macOS Sonoma. TLDR: I would rather use Fedora, but macOS is better than Windows.

There are shortcomings in macOS, but Apple doesn’t see it that way. The result is that you have to just deal with it or install a number of utility programs to provide that functionality. Lots of these are free and open source, but there’s a small industry in creating these utilities and charging for them. Microsoft has its own similar industry with Windows, but I think that Apple’s belief that they do things the “right” way leads to a worse situation. I’m not getting rid of my ThinkPad any time soon. Anyway, here are my notes with some workarounds.

NOTE: Unless otherwise specified, I used brew to install any application mentioned.

Keyboard

I think the Cmd and Ctrl keys are redundant and lead to unnecessary complexity. I admit that this gripe is mostly due to my growing up in the Windows computer world and being used to those keyboard shortcuts. But it’s ridiculous that I have to use Cmd+C in VS Code to copy, but Ctrl+Tab to switch tabs. Similar switching between Cmd/Ctrl happens in other programs too (like Firefox and Chrome). Here are a couple changes to mitigate this:

  • You can swap the Ctrl/Cmd keys on an external keyboard. You can avoid having to change your muscle memory this way.
  • You can show the keyboard viewer in the menu bar. This can be helpful if your keyboard doesn’t have all of the Mac keys.
  • There’s no Alt+Tab on macOS. The closest equivalent is Cmd+Tab, but it doesn’t show you the window you’re switching to. Once you’re in the application you want to use, you can switch through app windows using Cmd+`. I installed AltTab to provide a better experience. This app switches through all open windows.
  • The Home and End keys go to the beginning and end of a document (top/bottom) 🤦. Use Cmd+Left and Cmd+Right to get to start and end of a line. I ended up remapping the Home and End keys as described here to work around this. There’s more info here.
    • It doesn’t work quite right in Slack. I’m sure there’s a fix, but I haven’t looked into it yet.
    • This fix didn’t work in the Terminal app, so I had to add custom shortcuts as described here
  • Lock the computer with Ctrl+Cmd+Q
  • Launch Spotlight search using Cmd+Space. This is the equivalent of using search from the activities overview in GNOME.
  • The Mission Control view can be triggered with Ctrl+Up (or a three fingered swipe up on a touchpad). This is the equivalent of the activities overview in GNOME.
  • Mission Control and Spotlight should be in the same view like in GNOME. I don’t like having to remember two shortcuts.
  • There’s a program called Karabiner Elements that allows one to customize the keyboard on macOS. I haven’t used it, but it sounds like it could handle the Home/End situation described above. It also might be able to get the calculator button working on my external keyboard.
  • Use Cmd+Up to move to the parent directory in Finder
  • Use Alt+Delete to delete the previous word. I’m used to Ctrl+Backspace on Linux, but this isn’t too big of a change. It does get confusing when switching between laptops though.

Window management

  • Add multiple desktops for handy multitasking
  • Switch between desktops with Ctrl+Left and Ctrl+Right
  • Putting an app into full screen creates a new desktop which contains only that app. Zoom does this when someone starts screensharing, but you can turn that off.
  • The native method of showing two apps side by side (Split View) sucks, because it creates a new desktop. There’s an app called Rectangle that adds a number of helpful shortcuts to place windows on a desktop (without adding a new desktop).
  • To maximize (called Zoom) a window, you need to hold Alt and click the green plus button in the title bar. You can also maximize by double clicking the title bar if you change your settings.
  • Windows can be minimized with Cmd+M, but then they don’t show up in Mission Control. This is so dumb. It’s even dumber that there’s no way to enable this via a setting.
  • Windows can be hidden with Cmd+H, but this hides all windows for that app. Dumb.
  • The default setting on Sonoma is to only show scrollbars when you start scrolling. They don’t appear on hover.
  • You can’t click-through unfocused applications. This means that you have to click to focus a window before you can interact with it. You can’t change this in any OS settings. There’s a program that will focus whatever program you’re hovering over, but I’m not sure that’s the right solution.

Display

  • My Lenovo USB-C dock didn’t work with this Macbook. Only one monitor would work even if I had two plugged in. The reason for this is that Apple is dumb and hasn’t implemented DisplayPort completely, so only one screen can be connected via DisplayPort over USB-C. There’s a program from Synaptics to enable multiple monitors for docks that use DisplayLink, but it didn’t work for my dock.
  • I ended up buying a new dock that works with Macs (the CalDigit TS3), but it was expensive and I resent that I had to get it

Changing the default shell

  • I like using the Fish shell, so I wanted to use that instead of the default Z shell
  • I followed these directions to switch my default shell
  • I had to update the path to get some apps to work. I opted to do some of this via app specific Fish config files (fnm.fish, postgres.fish) in conf.d.
  • The delete word shortcut (Alt+Delete) didn’t work at first in Fish. This setting change helped get it working.

Adding Node, Ruby version managers

  • I installed fnm as my Node version manager
  • This required mucking about in Fish to get the paths right. See this section of the install script.
  • I installed rbenv as my Ruby version manager
  • When installing rbenv, I had to update the Fish config per the instructions listed with the command rbenv init.
  • The output was:
    # Load rbenv automatically by appending
    # the following to ~/.config/fish/config.fish:
    
    status --is-interactive; and rbenv init - fish | source

File management

  • To get hidden files/folders to show up in Finder permanently, enter the following command:
    defaults write com.apple.finder AppleShowAllFiles -boolean true; killall Finder;
  • To get a Finder window to show these hidden items, use the shortcut Cmd+Shift+.
  • There’s no cut/paste for files in macOS. Instead, there’s copy/move. But you won’t see that action by default. To see it, you have to do one of the following:
    • Copy with Cmd+C, then move with Cmd+Alt+V
    • Copy with Cmd+C, then open the Edit menu while holding Alt and select Move

Miscellaneous

  • Reactions” is a (dumb) feature where macOS recognizes hand gestures on video and adds effects. This can be turned off in the video button via the menu bar when a camera is being used.
  • I originally set up Edit menu shortcuts as described here to match what I’m used to, but I disabled them after discovering it was too finicky. These shortcuts replace the existing menu shortcuts. Also, the name of the shortcut has to match what’s listed in the menu for it to work.
  • The native screenshot application does a good job and can be opened with Cmd+Shift+5. My only nit is that, when using the retangular select tool, you can’t start selecting a new area; you have to move the existing area. For this reason I’ve started using a tool called Flameshot that DOES let me select a new area (plus lots of other features).
  • I use a Brother HL-L2380DW printer/scanner at home. macOS automatically installed a driver for the printer, but the scanner wouldn’t work. I had to install the Brother scanner driver to get scanning working. I uninstalled the macOS driver, then installed the Brother drivers and the scanner started working.
  • There’s no native support for accessing files on an Android phone over USB, so I installed an app to help with that called OpenMTP. It allowed me to access the files on my phone with a pretty intuitive interface. I’ve read that another option is Android File Transfer from Google, but I couldn’t get that to work.
  • I’m used to having a dedicated mic mute shortcut in GNOME, but macOS doesn’t have that. Luckily, there’s a utility called micSwitch that can do this. It provides an icon in the menu bar showing you the current mute status. You can set it to run via a keypress (I used F10).
  • To get shared calendars to show up in the Calendar app on macOS, follow this guide. Basically, go to this GCal page, select the calendars you want to sync, and click ‘Save’.
  • iTerm2 default paste is too fast for the Rails console in my application. Adjust the paste speed as described here.