top | item 26513528

Sensible macOS Defaults

342 points| garrtt | 5 years ago |github.com

176 comments

order

aeturnum|5 years ago

I love that this document takes inscrutable OS X settings and translates them into familiar human-readable settings. I have no idea what "NSGlobalDomain NSNavPanelExpandedStateForSaveMode" is, but I understand what "Expand save panel by default" means.

However, like other people, I'm not sure that I agree with this particular set of changes. Is there a project somewhere that packages these options into a GUI? I know a bunch of folks who use OS X who might want to change these things, but they're not programmers and they don't even know shell scripts exist.

ttepasse|5 years ago

> Is there a project somewhere that packages these options into a GUI?

There was: Secrets* was both a website were people aggregated a small database of these options and a MacOS preference pane which displayed these:

https://web.archive.org/web/20150515104503/http://secrets.bl...

https://blog.taylormcgann.com/wp-content/uploads/2012/03/sec...

(* by the makers of Quicksilver!)

Sadly the project stopped updating in 2012 and the website, repository and forks seem all long gone.

(Should anyone resurrect this great app, one improvement should be versioning of secrets recipes. AFAIR Secrets.prefPane displayed options long after they stopped applicable for later Mac OS versions.)

mrtksn|5 years ago

Wouldn't be better to call this "cheat sheet"?

macOS already has sensible defaults, that's how people who have no interest in dealing with computers can use their machines for years with no issues or servicing(unless a latte is spilled over the keyboard).

Then, you can customise behaviour for some specific things to fit your workflow.

The problem with diverging from defaults without putting much thought on it is that if you don't use it frequently you forget about it and when weird bugs happen it gets very hard to debug because a common issue with a straightforward solution may no longer apply to you and you have no idea why since you cannot make the connection because you don't remember changing it.

root_axis|5 years ago

I mean, you could use it as a cheat sheet, but that's not what it is. IMO macOS has a lot of terrible defaults that are not at all sensible, of course this is quite subjective, but the fact that many mac users accept the defaults isn't really saying much, typically end-users don't even realize there are other options available.

moistbar|5 years ago

> Wouldn't be better to call this "cheat sheet"?

Why would you call a script that actually changes things and doesn't actually show you a cheat sheet a "cheat sheet?"

garrtt|5 years ago

I agree that calling it sensible is subjective. Most of these I wouldn't even use myself, but I found it to be a good reference overall. I set the title for the post based on the how the creator references the file.

capableweb|5 years ago

> Wouldn't be better to call this "cheat sheet"?

No. A cheat sheet is used as a reference to some subject and is for making it easy to look up things many times, over time. This is something you read through once, apply the full thing / parts and then forget about it. Pretty big difference.

smoldesu|5 years ago

This is part of the reason I switched to Linux. I've heard so many people say "Linux is free only if you don't value your time" and then turn around and write one of these. If I'm going to go through the trouble of customizing an operating system to fit my needs, I may as well do it with a free and open system rather than MacOS, which can change for the worse at any moment (the dealbreaker for me was dropping 32 bit support). I spent 2 days getting my dotfiles spruced up, and now I can bootstrap any fresh Linux install by curling a script from my website and running it. On MacOS, it felt like I was constantly discovering things I didn't like, only to have the system fight me when I wanted to change it.

herrkanin|5 years ago

Realistically, the person who compiled this script file to make the OS behave exactly how they desire is very different from the kind of person who says "Linux is free only if you don't value your time".

Personally, I like to keep to the defaults and prefer to change my own workflow to match the OS designers' vision of how I should use a computer, rather than to try to bend the OS to my priors. I understand why this don't work for everyone, but it has made my life much easier.

gcommer|5 years ago

Same. It's seriously hard to say how awesome it is that a few days invested into customization ~10 years ago have lasted with me all this time. According to my dotfiles, the last "upstream updated something so I had to fix my setup" change was 4 years ago.

Firefox is the only program I run that requires constant "config maintenance".

Meanwhile, I've used macOS at work for ~5 years. Every time a big release comes out, IT departments have to go around screaming "DONT UPDATE IT WILL BREAK EVERYTHING" for a month. Once that calms down later we finally can update (though I only _want_ to update because by that point the incessant "Update now or tonight?" prompts have driven me mad) -- and instead of everything breaking, it merely breaks half my customizations and I have to waste time fixing it.

rconti|5 years ago

As a 26 year Linux user, I find it hilarious to imply it won't change for the worse at any time.

gardaani|5 years ago

"the dealbreaker for me was dropping 32 bit support"

Funny. I decided to drop Ubuntu Linux because they dropped support for 32 bit CPUs. I switched to FreeBSD.

JediPig|5 years ago

This took a while to understand. Reason why the M1 Processor and architecture is significantly faster than most of whats out there, on slower clock speeds, better battery life.

It is they dumped all the baggage of the previous arch. Including the 32bit world. Apple started out with a design , designed to do one thing. Give a great experience to a user.

Gone are the days of the GPU and CPU handshaking on moving memory from system ram to video ram. Same thing with SSD to main memory..

Removal of bad ideas and implementation of the lessons learned. Reason why FreeBSD is sometimes faster with linux. They dropped the old legacy code and design. Like MacOS, they are free to fix userland.

Linux & windows? Not so much. Linux userland is a horrible mess due to the "dont break the ABI of the kernel" Do you know there are known WONT FIX bugs in the kernel? Linux taught me that the idea of dont break the kernel adds, BLOAT and WONT FIX bugs... till you the mess called 5.11 that is 60 million lines of horrible linux code. No one uses the 32 bit driver of LSILOGIC.

If they do... let the use the older version of linux, its a mistake, proven by the bloat in linux to keep ABI compatibility.

My advice for everyone. Go FreeBSD, go MacOS, for new hardware go with modern arch, and kick the old compatibility out the door.

artonge|5 years ago

From the Reader:

> Warning: If you want to give these dotfiles a try, you should first fork this repository, review the code, and remove things you don’t want or need. Don’t blindly use my settings unless you know what that entails. Use at your own risk!

yjftsjthsd-h|5 years ago

I have some scripts that are super useful but also should not be used by somebody who doesn't know exactly what they're doing, so I literally stick a `exit 1` or such in the header so a teammate can't run the script without having looked at it first.

birthday|5 years ago

This. So many people in the comments complaining that they don't like or agree with the entire list.

Find what you like and use it.

lucideer|5 years ago

As most of the comments here on HN are taking issue with the weirdly editorialised HN title, rather than with the content, it would be great if a moderator could change the title to something more accurate like "Mathias Bynens' macOS defaults"

garrtt|5 years ago

I can change the title. I just set it to that because that is what Mathias calls it.

dsXLII|5 years ago

Sorry, soon as I saw the line that disables the startup chime I knew everything here was wrong.

msbarnett|5 years ago

It doesn’t get any better when a few lines further down he disables the LaunchServices quarantine and frames it as eliminating a dialogue box instead of as eliminating a major mitigation to browser vulnerabilities.

(a fun game whenever these silly scripts get posted is to count how many different security measures they silently disable with little to no warning to the naive)

johnvaluk|5 years ago

Can you elaborate? I despise the startup chime and disable it on all of my Macs. Why should they announce a startup when none of my other devices do? Why would I want to wake a sleeping baby or annoy other library patrons? This is one of the most obnoxious decisions Apple ever forced on its users (and, yes, I was happy when the illuminated logo on the laptop lid was finally put to rest).

doctor_eval|5 years ago

Yes! The startup sound is part of the long history of the Mac. It’s entirely nostalgic for me and always reminds me of the sense of wonder I felt when I first used a 128K Mac.

anoncake|5 years ago

Turning startup sounds off is definitely the sensible default for laptops.

carterschonwald|5 years ago

Some of these are not what I’d want, but sprinkled among them are some really cool gems

JKCalhoun|5 years ago

Agree.

Example: default-expanded print and save dialogs (panels) is nice. I always find myself manually expanding those.

garrtt|5 years ago

Agree 100%

Terretta|5 years ago

Not all of these changes are ‘sensible’ by default.

Some original settings are useful belt-and-suspenders for flow blindness.

cassianoleal|5 years ago

Indeed. More like "random person on the Internet's preferred macOS settings".

simias|5 years ago

Yeah "sensible defaults" doesn't make a lot of sense, it's way too opinionated. I could see using that as a starting template for some of my own preferences though. It's like reading somebody's vimrc, even if you don't care about 90% of it you might still find a few interesting tidbits that make your life easier.

m463|5 years ago

When I read this I thought - A kindred spirit:

  # Disable automatic capitalization as it’s annoying when typing code
  # Disable smart dashes as they’re annoying when typing code
  # Disable automatic period substitution as it’s annoying when typing code
  # Disable smart quotes as they’re annoying when typing code
  # Disable auto-correct
  ...

but then I saw this -

  # Allow the App Store to reboot machine on macOS updates
I assume this after you manually started the update, otherwise it is madness!

GekkePrutser|5 years ago

Yeah I saw that, it's basically the status quo on Windows though :( Happens all the time that people return from a break and find their machine decided to reboot. Luckily on Managed PCs you can stop this from happening.

b0afc375b5|5 years ago

I'd like to emphasize the smart quotes. It's terribly awful, at least from my point of view. Copy-pasting code has never been more dreadful.

jonnycomputer|5 years ago

It looks like this is some person's set of config files, and for my part I find it useful to see how someone has set these OS configurations programmatically, but its quite opinionated, which is fine, but not exactly some kind of minimum set of defaults that most users would agree on--which OP suggests is the case.

gugagore|5 years ago

I have not found a way to script the `Keyboard Preferences -> Input Sources` settings. I even versioned (in git) a ton of the `.plist` (property list) files in `~/Library/Preferences/` (they are binary files, but one can use `plutil` to get a textual XML representation). I think I arrived at the conclusion that these settings are persisted on a global / system level, and that there was basically no solution. I would be happy to be proven wrong!

When I was starting from scratch with macOS a few months ago, I had that sense of fresh new beginning. I wanted to have all of the configuration scriptable and versioned. Unfortunately those preferences files also include a bunch of timestamps and dates and window locations, so it ends up being not a great idea.

hk1337|5 years ago

> (they are binary files, but one can use `plutil` to get a textual XML representation)

You can get a JSON representation now too. Figured that out with Safari bookmarks .webloc. They’re basically plist files and used plutil to convert it to JSON

canjobear|5 years ago

I scrolled through the first few and every single one was either something I didn’t like or a bad idea.

chrisweekly|5 years ago

I love "dotfiles" in general, and IMHO this repo makes for excellent reference material. There's always something more to learn, and IME (paid to use computers since 1998) time spent improving your tools is usually well-spent. Of course tinkering can be a rabbit hole or time-sink of a hobby, but leveraging others' expertise (via dotfiles repos like Mathias's) can mitigate that risk. More generally, taking the time to grok the system you depend on -- and shaping it to your liking -- is one of the most sensible things you can do.

bengale|5 years ago

I'm not sure I agree with much of these, which makes sense because this is definitely not 'sensible defaults' it is just someones preferred settings.

I wouldn't copy this unless you know for sure this is how you want your system configured.

akmarinov|5 years ago

If you use these as they're written, you'll end up with a Brussels timezone, so yeah - definitely edit them beforehand.

cush|5 years ago

Exactly. Whoever wrote this is a minimalist. I want a hot pink animated focus indicator. I feel like I'm a sensible person, but after reading this script... I just don't know anymore.

throw0101a|5 years ago

> I wouldn't copy this unless you know for sure this is how you want your system configured.

A before and after picture (video?) for each would be helpful in making a decision in each case.

Also, is there a revert-to-defaults script?

chrisseaton|5 years ago

Presumably everyone thinks their own defaults are 'sensible', otherwise they wouldn't be using them.

I think the most sensible defaults are those that come out of the box, rather than spending time tweaking things.

wlll|5 years ago

I'd greatly prefer a title such as "Mac OS defaults I prefer". I read the first page or so and honestly didn't find any that I would actually want.

Labelling these "sensible" then suggests that the alternatives rather than just being personal choice are somehow not sensible, and who other than a fool would choose something that's not sensible?

Well me it seems, and I feel like the patronising title is implying that I am one.

garrtt|5 years ago

https://news.ycombinator.com/item?id=26514195

I would have titled it differently had the creator not referred to the file as such. I even tried changing the title earlier today (I don’t particularly like it either), but it got changed back. Apologies!

dhosek|5 years ago

I do my best to not change defaults on systems that I use. It ends up being a pain point any time I go to some other computer and have to deal with my extensions/customizations not being there. Something needs to be a big productivity gain to merit the change (or else be a trivial modification, like disabling caps lock).

bogidon|5 years ago

Forked from these a while ago for the macOS part of dotfiles. My dotfiles support both macOS and Linux, and most of my configurations are also extensible on the local machine only though ~/.zshrc_local, ~/.gitconfig_local, etc (which in turn load private dotfiles I wrote for my company machines, but I digress)

Here they are in case you're into the dotfile trading thing: https://github.com/bogidon/dotfiles

dreamcompiler|5 years ago

I already use many of these and have learned several more good tips from reading this script.

In recent years Apple's default settings have trended more and more away from what keyboard-focused power users (i.e. developers) need, IMHO. That wouldn't be a big deal except they've also trended toward locking down those defaults to make them difficult to change. Scripts like this make it possible for me to continue doing development on the Mac without tearing my hair out.

maxfurman|5 years ago

This is neat! I had no idea so much of macOS was configurable at the cli. That said, I am very nervous to try these commands because I'm not sure what the original default is - so if I don't like any option I have no idea how to set it back! Short of an OS reinstall, I suppose. I can see why Mathias would want to preserve these - it's not any weirder than checking in your emacs.d folder.

jbirer|5 years ago

This gives me the impression that command line configuration interface for MacOS is really good, at least compared to FreeBSD, Windows or Linux.

johnvaluk|5 years ago

While it's true that there are many command line options available, I use a similar script to configure my Macs and it can be quite painful compared to Linux. First of all, this is a script, not a configuration file, so the changes only take effect when it is run, not when a user starts a session (though I suppose that could be done). There are any number of ways the settings can be changed and preserved without your knowledge, so you'll need to run the script periodically. I actually keep portions of the configuration state (nvram, defaults) in version control so I can audit changes.

There are also a number of different commands (scutil, nvram, defaults, pmset, PlistBuddy, etc.) instead of common interface for things that seem related but aren't. Discoverability is horrible, even when you know the name of the setting you want to change. It is not immediately apparent what arguments are needed for "defaults write" based on the output of "defaults read" (possibly due to my own ignorance, but this raises the learning curve substantially).

Granted, there are a thousand different ways to configure any given Linux environment with varying degrees of difficulty, but I feel like many of the user preferences in the linked script would be better managed in dotfiles as they are in Linux (and other Unices and even for many apps on Mac OS).

zumu|5 years ago

While we're here, there's a couple things on a mac I haven't been able to figure out how to do, and maybe some of you mac pros can give me answers.

1) Remove the dock (killing the dock automatically restarts it) 2) Remove all desktop icons (Killing Finder accomplishes this, but they reappear as soon as you need to open something in Finder)

Stuff like the above is why I greatly prefer Linux.

skunkworker|5 years ago

It's really simple to have no desktop icons on the Mac. Just open the finder settings and under General untick all of the boxes to show on the desktop. Then move everything out of the ~/Desktop folder. It won't have anything on it after that.

As for the dock you can set it to auto hide, and change the delay so that it will come up but after N seconds [1].

[1] https://apple.stackexchange.com/questions/59556/is-there-a-w...

influx|5 years ago

"Remove the dock":

$ defaults write com.apple.Dock autohide-delay -float 1000 && killall Dock

seanalltogether|5 years ago

I would think the audio prompt during system boot is a pretty critical piece of information if you ever have trouble starting your computer.

gowld|5 years ago

It's a Mac. If the computer doesn't start, take to a shop for an exchange.

spankalee|5 years ago

It'd be awesome if this could help with two anti-user innovations in recent macOS:

1) Disable Apple Music, which has the annoying habit of opening every time I touch my headphones, and is not removable from my own computer.

2) Force macOS to remember that I gave Chrome location permissions instead of reseting Chrome after every update.

dcow|5 years ago

Safari does this too.. Apple is on some horse about requiring user intervention for every single location request even from sites you’ve already allowed in the past. It’s annoying.

sneak|5 years ago

Disabling natural-direction scrolling isn't sensible.

It's the first thing I fix on all other OSes. Why should the content go the opposite direction of the way I'm moving my finger?

This is one of the best fixes Apple ever made, back in Lion. Kudos to them to seeing the everyday and noticing that it was wrong.

samatman|5 years ago

This is configurable almost everywhere it is encountered, and there's a reason for that!

It's the same dilemma as panning a first-person-perspective camera up and down. Some people think that down should move the perspective, some people think that down should move the camera: so pushing the joystick down should move the viewing window up. These physical intuitions are durable and hard to change.

I grimly endured the difference between a trackpad and a phone until OS X (as it was then known) switched to the "correct" default, but I'm one of those people who expects a camera to work like the control stick of a plane: pulling towards me, or down, should elevate the perspective. I purchased a gimbal recently, and was having a terrible time controlling it until I realized that the default (pushing the joystick up points the camera up) could be overridden.

I don't think there's anything "sensible" in a general way about anyone's custom configuration script, frankly, and I suspect the person who made this wasn't actually trying to promote it for public consumption, and just meant "script to make my computer do what I consider sensible".

gegtik|5 years ago

This opinion betrays a lack of imagination.

There are two equally valid subjective choices here:

- does moving your finger up "grab the content" under the glass and move it up, or

- does moving your finger up "grab the window", moving it up along a long virtual document?

Both are legit mental models, it's a preference.

NaturalPhallacy|5 years ago

Lots of cool stuff in there, but if you run this without heavy editing you're an fool.

GekkePrutser|5 years ago

Wow nice, this is a really great find. I know of some of those but never have seen them all together.

I'm sure I won't consider the exact same set to fit my needs fully, but that doesn't matter as they're really well documented.

hk1337|5 years ago

Seems kind of weird to put these in a dotfile. They’re settings you run once not settings for a terminal session.

I could see putting it in .macos if that was something the system used on boot to setup your system a particular way.

lnwlebjel|5 years ago

This is the best one:

  # Display full POSIX path as Finder window title
  defaults write com.apple.finder _FXShowPosixPathInTitle -bool true
I don't know how anyone knows where their stuff is without it.

bartvk|5 years ago

Wow, that's extremely useful!

There is an alternative, in the Finder view menu -> Show Path Bar. It's displayed at the bottom. This will display the path of the current selection, or -- if nothing is selected -- the currently opened folder.

ataylor32|5 years ago

Hold the command key while clicking the title of the Finder window

fiddlerwoaroof|5 years ago

There’s a couple defaults (e.g. always show scroll bars) I don’t change because, as a web developer, I need my browsing experience to be “typical”. But, overall, this is a very interesting list of things.

_qbjt|5 years ago

> Disable the sound effects on boot

As someone who grew up using an old school Mac in the 90s, this is blasphemy! That triumphant chime is essential to the Macintosh experience (just kidding but kinda not).

spaetzleesser|5 years ago

A little unrelated but this hits one of my pet peeves.

Why do people give things generic names that have basically no meaning? If I encountered the script in machine I would wonder “WTF does .macos do?” There is also no comment in the header.

I see that at work too. People give lists of certain element types the name “list”. So a lot of their code is full of classes with generic names like “map”, “list” or “config” and every time you have to look at the code and see what the thing really does.

Do people not work on large codebases?

echohack5|5 years ago

Love it! I always love seeing these and then stealing a few ideas for my own.

Shameless sharing: github.com/echohack/macbot

PascLeRasc|5 years ago

How do people generally discover these default variables? Is there a manual from Apple or is it just exploratory?

latexr|5 years ago

1. `defaults read > file_a`.

2. Change setting via GUI.

3. `defaults read > file_b`.

4. `diff file_a file_b`.

If you already know the domain you want to change (like the bundle ID of a specific app), add it after `read`.

sajithdilshan|5 years ago

How come having Brussels timezone by default is a sensible default, unless you live in that timezone?

hollandheese|5 years ago

> # Trackpad: map bottom right corner to right-click

This is the most monstrously non mac-like thing I’ve ever seen.

Eric_WVGG|5 years ago

It was a popular “hack” back in the days before two-fingered click detection. Probably not as efficient as ctrl-click, but that felt even less Mac-like at the time.

A lot of these preferences seem to reflect the opinions of someone who would quite happily be stuck in 2005. Reverse scrolling… ugh.

Maursault|5 years ago

nitpik: I prefer to define the $PATH of every command used in a bash script to prevent some possible shenanigans.

sudo="/usr/bin/sudo"

launhctl="/bin/launchctl"

scutil="/usr/sbin/scutil"

nvram="/usr/sbin/nvram"

defaults="/usr/bin/defaults"

et cetera

echohack5|5 years ago

Since APFS firmlinks these binaries you might be setting up some undesirable behavior, especially if a folder is set to read only. :) Most of the time you'll be ok though

anamexis|5 years ago

How does one find all of these "defaults" settings? Is there a reference somewhere?

garrtt|5 years ago

  defaults read
will show you all of them but it's a pretty long list

saagarjha|5 years ago

Reversing the binary to find calls to NSUserDefaults/CFPreferences.

tingle|5 years ago

This is a very useful list. Information on mac OS defaults is not easy to discover.

vondur|5 years ago

So these settings are on a per user basis, or do they take effect system wide?

thought_alarm|5 years ago

The sudo commands are system settings, the rest are user account settings.

restingrobot|5 years ago

wow, i've been using this for years, (it was originally pulled from an old Ribot prep script). Glad to see this finally getting some love.

LeoPanthera|5 years ago

Sensible for who? I wouldn't want many of these settings, and, for example, my parents would want almost none of them. These kind of scripts are almost never a good idea.

echohack5|5 years ago

Love it! I always steal a few ideas from these and add it to my own: github.com/echohack/macbot

_def|5 years ago

the sudo loop is really dangerous

NaturalPhallacy|5 years ago

How so? I was suspicious too at first, so I read it pretty meticulously and saw that it's not any worse than the rest of it.

martini333|5 years ago

opinionated macOS defaults

auiya|5 years ago

I want literally none of these settings, how is this "sensible"?