Hacker News new | past | comments | ask | show | jobs | submit login
Sensible macOS Defaults (github.com/mathiasbynens)
342 points by garrtt on March 19, 2021 | hide | past | favorite | 176 comments



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.


> 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.)


MacPilot seems like what you’re asking for: https://setapp.com/apps/macpilot


$9.99 a month..

Why would an app like this require a subscription and not a one off payment.

I think many small developers are taking cue from large enterprises on how to price products without thinking it through. There was another similar discussion about a YC macOS notification widget company the other day.


The $10/mo is for a subscription to Setapp, which bundles a bunch of apps into one subscription service.


There has to be a reason for subscription, as in continued incremental value, cloud data storage and sharing, some sort of server backend that incurs monthly cost to run and so on.

Just slapping a subscription to a regular desktop application doesn't make sense.

Also, bundling is not a justification for a subscription, especially if one only cares about a single application. This is similar to the music albums which have already undergone unbundling and no one wants to see a bundling where there is no benefit to the consumer.


Onyx has a bunch of these: https://www.titanium-software.fr/en/onyx.html

It’s probably not exhaustive, but quite convenient.


Oh thank you! This is exactly what I was looking for.


You’re welcome :) I should add that the author might be willing to add some missing settings if asked nicely. I have been using Onyx since OS X 10.2 and it’s always worked as expected.



For clarity, I should point out that I don't believe that all of these defaults are "sensible" for every user. I gave the submission it's title because that is how the creator refers to the file.[0]

[0] https://github.com/mathiasbynens/dotfiles/tree/master#sensib...


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.


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.


You can have different opinions on what's sensible but to claim that something is not sensible as general you need to make a point about an issue due to the default settings.

For example, if people were getting hacked through remote desktop connection all the time you could have said that macOS has insensible defaults on the security or even existence of that feature.

However, with macOS that's not the case, in fact macOS has so sensible defaults that a lot of its users have no understanding of how it works and yet successfully use it for years with no issues and not gaining any understanding through the years.

The thing is so well designed that it's often dissed as a Starbucks machine, implying that it is used by people with a lot of money who don't know what they are doing while simultaneously is an extremely popular machine among creative professionals and engineers who also like coffee and know what they are doing.

Having options is nice, for example I dislike dark mode but I like the dark statusbar so I have a customisation for it. I dislike autosorting of the Spaces, so I disabled it. I prefer to simply tap and not have to press on the trackbar so I enabled it.

However I would't call the defaults not-sensible, it's just that I like some stuff differently from the defaults.


> a lot of its users have no understanding of how it works and yet successfully use it for years with no issues and not gaining any understanding through the years.

This is true of every popular operating system. Most people just adapt to the defaults regardless of the OS. There are millions of people who use windows or chrome os, or even ubuntu as-is out of the box. Whether or not people want to change the defaults just depends on what they're used to, if you used windows for years and switch to macOS it's very likely you're going to be inclined to modify certain defaults and the same is true in reverse.


The defaults aren't powerful, thought they are sensible.

Windows (and most Linux DEs like KDE) come with out of the box snapping windows to the four corners of the screen and to the left and right which is perfect for how most people use their laptops. Most people need two separate windows open side by side because most jobs are about synthesizing two separate flows of information in some way (research in one window while writing a document in another for example).

In mac you need to install an app to do this (Rectangle/Spectacle). Now, that's fine because you can click and drag the windows where you need them to be. But it wastes your time whereas the default in Linux/Windows saves your time. Sensibility over power.


This isn’t true for the last handful of major versions of macOS. It may not be as intuitive as other OSs but you can click and hold (or right-click I think) on the green button in the traffic light to get side by side options.


I find Amethyst to be great for this, it also adds the missing command to move Windows between desktops.


Yeah but this is really a list of “tweaks”. It’s a nice list don't get me wrong, but changing the currency without prompting the user, using green as the highlight color (bad for accessibility), disabling window animations, configuring Transmission and TweetBot... there is plenty in the list that is in no way a “default” nor really even a sensible outcome to expect after running the script...


> 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?"


Because the lines that do something are nicely categorized with documentation included. Instead of running it all, you can take a look what’s possible and apply it individually.


> Instead of running it all, you can take a look what’s possible and apply it individually.

That's true of any script. The fact that this one is well commented doesn't make it not a script.

A cheat sheet is something you hang on a wall and glance at every so often. A script is something you run to make changes to a system. You can't run a cheat sheet.


How do you tell that it's not a really long string or a web page but a script? Maybe it's just a pattern of dots projected on LCD or 1s and 0s stored on a computer. I don't see any more concrete proof that it's not any of these but a script.


> How do you tell that it's not a really long string or a web page but a script?

`#!/usr/bin/env bash` is a bit of a dead giveaway.


I just see dots on my screen


How can you tell that a tall man in a trench coat isn't just a kid with a second kid sitting on their shoulder?

How can you tell if the series of dots you perceive as an LCD isn't just a photorealistic painting glued to the front of the screen?

How do know if your nervous system isn't just your bain in a vat connected to a matrix-esque electrochemical system?

How can you tell that anything you believe to be real isn't just a sophisticated simulation?

How can you tell if someone on hackernews isn't just making a specious argument just for the sake for arguing?


If you don't want to make changes like turning the highlighter color to green or set the TZ to Belgium, it's a great template for making your own version of the script, and it does the useful work of collecting a bunch of 'defaults write', 'pmset', and 'nvram' commands


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.


Perhaps something to the tune of "How to customize macOS defaults" would be more appropriate then?


> 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.


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.


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.


This! I just get used to the defaults. When I change computers, no extra work for me. Contrast my business partner, who spends 2 days loading and configuring each new computer.


Absolutely! I thought I was the only one who felt this way. I used to customise everything “back in the day” and then I’d change machine or have to use someone else’s - and all my muscle memory would be lost.

These days the only thing I customise is the “refactor” shortcut in IDEA because the Fn keys suck on MacOS.


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.


macOS admin here. I'm still going around screaming "DON'T UPDATE IT WILL BREAK EVERYTHING" about Big Sur :'(

Apple is just bad at breaking things for enterprise and notoriously slow fixing bugs affecting enterprise users. Right now there's still a major bug affecting Mobile Active Directory accounts, causing users to be locked out if they're not in the office after they upgrade. Sigh.. Problem is the MDM profile that should apply to local users only is somehow affecting mobile AD user accounts since the upgrade. In Catalina and before this was not an issue. Apple support acknowledged this but is still working on a fix. Even in 11.3 it's still not fixed.

And they don't provide an MDM method for update blocking. You can only postpone them a number of days (but this will affect minor and major updates alike so is not what you'd want). You can get it if you provision an infrastructure of update servers but we can't in our place :( This is why admins like me can't stop those prompts appearing for you.

PS Our latest Macs are running without AD (using the new Kerberos SSO plugin) and they fare a lot better, unfortunately it took me a long time to convince our Windows-centric security team that it actually weakens our security and accomplishes nothing on Mac :)

This is the problem in enterprises. As an admin I know there's better ways to do things but many of these decisions are imposed on me by other teams.


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


"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.


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.


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!


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.


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.


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"


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


He does call them "sensible hacker defaults for macOS", which might get less criticism, but it's the repo title and there's no real indication that he's speaking to the general hacker public (and not privately to himself, as the "default hacker")

Or does he use this phrase in some blog post?

Either way it's not present on the linked file.


FWIW I’m not annoyed by the title. It just sounds tongue in cheek. Of course, it’s sensible to him because these are his settings.


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


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)


THIS. Holy crap this. Running this script will disable major security features on macOS intended to prevent phishing and remote execution.


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).


Because if you ever run into a problem where your computer doesn't turn on, the startup sound is your first indicator of whether the screen is faulty, or the board is faulty.


It's a Mac. "whether the screen is faulty, or the board is faulty" have the same fix.


Among the many differences, if the screen is faulty, one can plug in an external monitor, and: get files off, perform a backup, use the computer, and so on and so forth.


>if the screen is faulty, one can plug in an external monitor

You don't need a chime in order to try that.


Its useful to know if it'll work before digging into the box o' cables for usb-c to display port


The convenience of that rare scenario is outweighed by the annoyance of hearing the chime thousands of times, imho.


Not if you know how to take apart computers.


and own a blowdryer.


It’s intended originally to confirm boot, a real issue to solve back in the day. Some people get a warm nostalgia from it now. Not all choices need to be logical to improve a product for some.


I have plenty of devices that announce startup, I can think of at least one in every room of the house. Everything from my pfSense box to my washing machine.


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.


Just the other day my mind was blown when I learned that the startup chord was inspired by the chord at the end of A Day In The Life from Sgt. Pepper's. Source? The guy who created it: https://www.youtube.com/watch?v=5838mfezO8M

A Day In The Life (time link to a few seconds before it hits at 4:21): https://youtu.be/usNsCeOV4GM?t=249


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


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


Agree.

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


Agree 100%


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

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


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


I for one definitely think the whole world should set their timezone to Brussels.

Seriously though, I like not having scrollbars everywhere, I use two fingers for right click on the track pad, I do it without thinking, if I turn off natural scrolling I get incredibly confused.

Some of the stuff I can get behind, like this

    # Enable full keyboard access for all controls
    # (e.g. enable Tab in modal dialogs)
    defaults write NSGlobalDomain AppleKeyboardUIMode -int 3
I get annoyed when secure keyboard entry turns on and doesn't turn off properly in iTerm as it messes up Dash's snippets.

I'm sure this is the sensible defaults for this one really picky person, and it's interesting to see all the choices, but I would definitely advise against someone running this on their workstation blindly.


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.


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!


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.


I keep a Windows machine around for mainly games, and this is the very first thing I'd do on a new Windows installation. Run "gpedit.msc", find the "automatic updates" policy and disable everything.

Then it only sends you a notification once in a while, and that's it.

afaik you can do this on Win10 Pro and above.


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.


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.


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.


> (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


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


I stopped at Yosemite.


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.


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.


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


One hour closer to quittin' time!


Or nine if you live on US west coast ;)


So if you have an 8hr work day does that mean your time left to work underflows and the company has to do an hour of work for you?


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.


> 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?


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.


Speak for yourself, I'm well aware that many of my preferences are esoteric. :)


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

Maybe, although I set my caps lock up to be escape when tapped and control when held, I don't think that would be sensible for many people at all unless the knew why they wanted it.

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

This is probably true, I find it very difficult to use anyone else's system since my config is non-standard.


> I set my caps lock up to be escape

Which was the only sensible thing to do when Apple dropped the ESC key ;)

I'm so used to caps == ESC now, it takes me a minute to realize what's wrong when I'm on a new system/keyboard.


Cap locks should be control the way god intended it! :)

You can use the hidutil if you want to script changes yourself:

https://developer.apple.com/library/archive/technotes/tn2450...

Or Karabiner Elements:

https://github.com/pqrs-org/Karabiner-Elements/blob/master/R...

I have an Filco Japanese keyboard and the default settings on macOS even when the keyboard is set to Japanese (QWERTY JIS) gets the 英数 (alphanumeric) key, and かな (kana) key wrong (and they are supported on the built in laptop keyboard).


Word of warning: hidutil keeps the caps lock delay, so you’ll miss short presses. This drove me mad until I figured it out but by then Karabiner had thankfully been updated for the new OS.


you can do both! (on a mac at least) I remap caps lock to escape using keyboard prefpane, then use karabiner to make it ctrl if used with another key.

press it by itself, escape.

press it and a, ctrl-a

perfect!


> I'm so used to caps == ESC now, it takes me a minute to realize what's wrong when I'm on a new system/keyboard.

Isn't this a bad thing?


Compare how much time you spend using your own system vs others'.


If you learn the default, it doesn't matter how much time you spend on any given system. I don't get why people make themselves less portable by becoming dependent on non-defaults.


For what it's worth, I use Vim fairly regularly and have always left the escape key alone. (The "butterfly keyboard" Mac tempts to me remap it, but that is not, in the final analysis, Vim's fault.) I do, however, tend to remap caps lock to control, because I think it's a better place for it and it's not exactly a high effort thing to do the remapping -- it's built right into the Mac's system preferences.

As other people have pointed out, most of us aren't regularly using computers that aren't ours (or at least "ours," in the case of work machines permanently assigned to us), and I suspect nearly everyone who reads this web site has changed more than one thing on their computer that deviates from a fresh out-of-the-box default. :)


The default is reaching to the top left corner of the keyboard. I know the default and it's terrible if someone uses vim. In macOS it's trivial to remap the caps lock key to ESC system wide through the built in preferences. So while it's not that way out the box, it's certainly in the realm of default configurations any user might make on their machine.


I can't really understand picking an editor that is so awkward that it relies on me reconfiguring my hardware and breaking the labelling of the keys to make it usable.


Here's the thing. Even if someone doesn't use vim, remapping a mostly useless key like caps lock to ESC is still more useful. ESC should cancel out of most dialogs and popups, so should be key that is likely used more often than the occasional times someone needs to type a long enough string of upper case characters to need caps lock.

As far as editors and key labels, I don't really understand the problem. Move beyond any of the basic shortcuts on any editor, and you quickly move into combinations that have little to do with what's written on the key(s).


Who is this mythical person jumping between tons of computers? Who is dependent? The few times you're on a different computer you just deal and fallback to the mean.


I do it because it makes my life easier on the system I use 99% of the time.


It's 1 key change, and since I use vim keybindings in almost everything it's much easier on the system I use 99.9% of the time.


Most people never think about the defaults.


prefsniff is a tool that can monitor defaults changes on macOS if you want to see what default key underlies a particular setting:

https://github.com/zcutlip/prefsniff


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.


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!


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).



These have been extracted from the "dotfiles" repo and made into a standalone project: https://github.com/kevinSuttle/macOS-Defaults


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


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.


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.


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


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).


> 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)

I don’t think there is anything wrong with re-setting a bunch of properties in plist files every time a session is opened.

You’re right, the CLI is a difficult to use if you don’t know it beforehand. And even knowing it does not tell you about the various properties you can change with default. At least the script here points to some useful options.


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.


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...


I will try the finder changes, but I have my doubts crap won't randomly appear in my ~/Desktop folder automagically.

As for the dock, auto-hiding it doesn't disable it, it just hides it. So it remains visible in mission control, and still has bouncing icons from time to time. It also uses system resources, etc.

Ideally I wouldn't have to hack around these settings and could just turn off both these features, like I could on Snow Leopard.


The only "automagic" thing I know of that would need to be changed is changing where screenshots are being saved which can be done fairly straightforwardly.

https://www.macworld.co.uk/how-to/change-where-mac-screensho...


"Remove the dock":

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


I'm already using the 'autohide-delay' trick, but random randomly icons from the hidden dock will start bouncing and I can see the dock when I do the mission control view or whatever they call it.

On Snow Leopard you could actually kill the dock and it'd stay killed.


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


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


Or plug in an external monitor (or other peripherals) like a normal person.


In the spirit of this post, for those using Java for development on MacOS, I'll share my .zprofile which sets up a reasonable Java environment for working in the shell.

https://gist.github.com/bondolo/5ce1a1c0d38e72a80a79ac28f951...


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.


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.


I think the only button on the dialog is like "rememberer for one day" or something, right? Once you've clicked that, go to preferences -> websites -> locations, change the affected site to "deny" and then "allow", and it's permanent.


macOS does not forget that Safari has location permissions. In fact, they're enabled by default. Chrome however has its location permissions reset so often that they had to add a feature to tell users it was off again.


This reminded me a bit of messing around with TinkerTool around 10.4-10.5 times, and to my surprise, it's still supported with a Big Sur compatible release!

https://www.bresink.com/osx/TinkerTool.html


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.


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".


I've only ever noticed "natural" scrolling was wrong when it became an option on desktop machines.

It makes perfect sense when I'm on a phone that I'm grabbing the content, since I'm reaching out and literally touching the content.

But on a desktop, I have a cursor. Obviously if I want to point at something below where my cursor is, I move it down. And if it's off the window, I need to scroll down further.


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.


This would make sense if the choices were equal and opposite. They're not, though, since the advent of smooth scrolling.


how are they not equal and opposite?


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


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.


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.


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.


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.


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


Do you mean the collapsed titlebar/toolbar that is the default in Big Sur?


Yes, and it works in previous versions of macOS as well


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.


> 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).


This guy is great, I enjoyed his material on ____ ampersands in HTML, https://mothereff.in/ampersands


MB credits ptb's OS X setup: https://github.com/ptb/mac-setup


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?


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

Shameless sharing: github.com/echohack/macbot


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


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`.


Mostly manpages and experimentation. Here are some: https://github.com/kevinSuttle/macOS-Defaults/blob/master/RE...


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


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

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


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.


Weird. I can't remember anyone doing that back in the day, as it was super easy to just ctrl-click. This seems like a "hack" for former Windows users ("switchers"), where ctrl-click has been around since Mac OS 8.


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


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


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


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


That also only shows you values that have been set. There can be values that are defaulted within the program itself that can be set, but do not have their default values written to any file, so do not show up in the `defaults` command except when set manually.

Unfortunately, the usual way of finding those is to `strings` the application binary, and weed through all the chaff. And that requires either a fishing expedition, or for you to already know what you are looking for (including what binary might be responsible for that).


Reversing the binary to find calls to NSUserDefaults/CFPreferences.


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


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


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


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.


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.


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


the sudo loop is really dangerous


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.


opinionated macOS defaults


This is nice, but for the MacOS users who have a hard time dealing with the terminal, I've lived by the Secrets prefpane for some years and find it most handy:

https://github.com/ecnepsnai/Secrets


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




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: