Mi configuración de MacBook

Desactivar el [rootless]
System Integrity Protection ("rootless") impide que algunos directorios y archivos se modifiquen ni siquiera desde root.
Algunos programas no funcionan bien con el SIP activado. Para desactivarlo haz lo siguiente:
- Entra en Recovery Mode: arranca pulsando
Command ⌘+R - Abre el terminal: Utilities » Terminal
- Ejecuta el comando
csrutil disable
Contraseña para el root:
sudo passwd
Hostname
sudo scutil --set ComputerName "Air"
sudo scutil --set HostName "Air"
sudo scutil --set LocalHostName "Air"
sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server.plist NetBIOSName -string "Air"
Trackpad
Arrastrar con tres dedos
Accessibility » Mouse & Trackpad » Trackpad Options… » Enable dragging » three finger drag
Scanner
Xsane, que uso en Linux, también funciona en el Mac. Es de código abierto y bastante completo:
brew install sane-backends
brew install xsane
Vuescan es una app nativa y funciona muy bien, pero es de pago.
Zoom
Accessibility » Zoom » Use scroll gesture with modifier keys to zoom: ^ Control
XCode
La última versión de XCode se puede descargar desde la Apple Store o en https://developer.apple.com/downloads/, donde también están las versiones beta.
Si te dice que el archivo .xip descargado de la web de Apple está corrupto, prueba a abrirlo con otro programa. A mí The Unarchiver me mostró “Data Corrupted”, pero con Archive Utility funcionó perfectamente.
Instala las herramientas de línea de comandos:
xcode-select --install
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
Abre XCode y acepta la licencia, o escribe “agree” en sudo xcodebuild -license para aceptarla.
Desactiva Gatekeeper para poder instalar aplicaciones descargadas de internet
Resuelve el “XXX can’t be opened because it is from an unidentified developer”.
sudo spctl --master-disable
System Preferences > Security & Privacy > General » Allow apps downloaded from: Anywhere.
Vuelve a activarlo con: sudo spctl --master-enable.
Dotfiles
git clone --recursive https://github.com/jbsilva/dotfiles.git
cd dotfiles
git submodule update --init --recursive
Homebrew
Descarga e instala Homebrew:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew tap Homebrew/bundle
brew bundle --file=/Users/julio/dotfiles/Brewfile
Karabiner-Elements
Descarga Karabiner-Elements
Encontrarás algunas modificaciones avanzadas en https://ke-complex-modifications.pqrs.org/.
Cambiar Bloq Mayús por ESC
La configuración está en los dotfiles.
Usar Intro en el Finder para entrar en un directorio
Usar F2 para renombrar
Zplug + Zprezto
Zplug gestiona los plugins de ZSH. Se instala automáticamente.
Enlaces a los dotfiles
ln -s ~/dotfiles/.gitconfig ~
ln -s ~/dotfiles/.config ~
ln -s ~/dotfiles/.zsh ~
ln -s ~/dotfiles/.zshrc ~
Copia de los dotfiles que no pueden ser enlaces
sudo cp ~/dotfiles/fstab /etc/fstab
Zsh default shell
command -v zsh | sudo tee -a /etc/shells
sudo chsh -s "$(command -v zsh)" "${USER}"
compaudit | xargs chmod g-w
Zsh completions
Instala la fórmula zsh_completions:
brew install zsh-completions
Añade $(brew --prefix)/share/zsh-completions al $FPATH:
FPATH=$(brew --prefix)/share/zsh-completions:$FPATH
Montar un disco
Crea la carpeta indicada en /etc/fstab y márcala como no modificable para
que macOS no la borre al desmontar el disco:
sudo mkdir /Volumes/Elements
sudo chflags uchg /Volumes/Elements/
Monta el disco:
diskutil mount disk2s1
Vim
Vundle
Abre Vim y descarga los plugins :PluginInstall
Corrector ortográfico
Escribe :setlocal spell spelllang=es_es en Vim y sigue las instrucciones.
Finder
- En la home (
~)View»Show View Options(Cmd+J):- Calculate all sizes,
- Show Library Folder,
- Show item info
- En el escritorio
- Botón derecho »
Show View Options(Cmd+J):- Show item info,
- Aumenta o Grid spacing
- Botón derecho »
Impedir la suspensión automática
Hay varios programas para esto:
- InsomniaX
- Caffeine
- Amphetamine
- KeepingYouAwake
Yo uso KeepingYouAwake, que es muy sencillo y gratuito.
Desde la línea de comandos está caffeinate:
Impide la suspensión durante 1 hora (3600 segundos):
caffeinate -u -t 3600
Impide la suspensión hasta que termine el comando:
caffeinate -s command
Impide la suspensión hasta pulsar Ctrl-C:
caffeinate -I
Impedir la suspensión al cerrar la tapa
sudo pmset -a disablesleep 1
Desactivar la suspensión del disco
System Preferences » Energy Saver: desmarca Put hard disks to sleep when possible
Enlace a /Volumes en el escritorio
ln -s /Volumes ~/Desktop/
Desactivar el usuario invitado
System Preferences » Users & Groups: desmarca “Allow guest to log in to this computer”.
SSH
Copia tus claves de la copia de seguridad y ponles los permisos adecuados:
cp -r /Volumes/Cofre/.ssh ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/*
chmod 644 ~/.ssh/*.pub
Spotlight
System Preferences » Spotlight
Spotlight devuelve cosas bastante inútiles en las búsquedas. Desactiva Bookmarks & History, Fonts, Movies, Music, Other, Presentations, etc.
Desmarca “Allow Spotlight Suggestion in Look up”.
NTFS
NTFS-3g
OSXFuse y NTFS-3g se pueden instalar gratis con Homebrew.
Enlaza mount_ntfs a ntfs-3g:
sudo mv /sbin/mount_ntfs /sbin/mount_ntfs.original
sudo ln -s /usr/local/sbin/mount_ntfs /sbin/mount_ntfs
Paragon e Tuxera
Usé NTFS-3g durante muchos años (tanto en Linux como en el Mac), pero su rendimiento deja bastante que desear.
Me pasé a Paragon cuando tuve que hacer copia de varios terabytes de datos. La diferencia en la velocidad de transferencia fue muy notable.
Plantéate Paragon (34,95 R$) o [Tuxera] (107,13 R$) si usas discos formateados en NTFS.
Python
Virtualenv
$ export PYTHON_CONFIGURE_OPTS="--enable-framework --enable-unicode=ucs4 --enable-ipv6 --enable-loadable-sqlite-extensions"
(Otras opciones –enable-shared –with-wide-unicode –with-computed-gotos)
$ pyenv install 2.7-dev
$ pyenv install 3.7-dev
$ pyenv rehash
$ pyenv global 2.7-dev 3.7-dev
El soporte de framework (--enable-framework) hace falta para herramientas como YouCompleteMe.
Python libs
pip3 install flake8 ipython matplotlib numpy pep8 pep8-naming pygments scipy unidecode mako coursera awscli neovim
Ruby
Ruby version manager (RVM)
curl -L https://get.rvm.io | bash -s stable --rails
Gems
gem install pygmentize
Defaults
Trackpad e Mouse
Natural scrolling
defaults write NSGlobalDomain com.apple.swipescrolldirection -bool true
Hacer clic tocando
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true
defaults write NSGlobalDomain com.apple.mouse.tapBehavior -int 1
Botón derecho
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadCornerSecondaryClick -int 0
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadRightClick -bool true
defaults -currentHost write NSGlobalDomain com.apple.trackpad.trackpadCornerClickBehavior -int 0
defaults -currentHost write NSGlobalDomain com.apple.trackpad.enableSecondaryClick -bool true
Teclado
Activa el tabulador en los diálogos modales
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3
Idioma
defaults write NSGlobalDomain AppleLanguages -array "en" "de" "pt-BR"
defaults write NSGlobalDomain AppleLocale -string "pt_BR@currency=BRL"
defaults write NSGlobalDomain AppleMeasurementUnits -string "Centimeters"
defaults write NSGlobalDomain AppleMetricUnits -bool true
Activa el menú de Debug en la App Store
defaults write com.apple.appstore ShowDebugMenu -bool true
Carpeta donde se guardarán las capturas de pantalla
SCREENSHOTS="${HOME}/Desktop/Screenshots" && mkdir "${SCREENSHOTS}" && defaults write com.apple.screencapture location -string "${SCREENSHOTS}"
Activa la repetición de caracteres al mantener una tecla pulsada (hay que reiniciar)
$ defaults write -g ApplePressAndHoldEnabled -bool false
Repetición de teclas más rápida
$ defaults write NSGlobalDomain KeyRepeat -int 2
Abre el Finder en la home (~/)
$ defaults write com.apple.finder NewWindowTarget -string "PfLo"
$ defaults write com.apple.finder NewWindowTargetPath -string "file://${HOME}"
Muestra la barra de ruta en el Finder
$ defaults write com.apple.finder ShowPathbar -bool true
Muestra la barra de estado en el Finder
$ defaults write com.apple.finder ShowStatusBar -bool true
No avisa al cambiar la extensión
$ defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false
Busca actualizaciones a diario (por defecto: una semana)
$ defaults write com.apple.SoftwareUpdate ScheduleFrequency -int 1
Muestra el icono de los discos (internos) en el escritorio
$ defaults write com.apple.finder ShowHardDrivesOnDesktop -bool true
Muestra el icono de los discos externos en el escritorio
$ defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool true
Muestra el icono de los medios extraíbles en el escritorio
$ defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool true
Muestra el icono de los servidores en el escritorio
$ defaults write com.apple.finder ShowMountedServersOnDesktop -bool true
No crea .DS_Store en volúmenes de red
$ defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
Activa el menú de desarrollo y el Web Inspector en Safari
defaults write com.apple.Safari IncludeInternalDebugMenu -bool true && \
defaults write com.apple.Safari IncludeDevelopMenu -bool true && \
defaults write com.apple.Safari WebKitDeveloperExtrasEnabledPreferenceKey -bool true && \
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled -bool true && \
defaults write NSGlobalDomain WebKitDeveloperExtras -bool true
Muestra la ruta absoluta en la barra de título del Finder
$ defaults write com.apple.finder _FXShowPosixPathInTitle -bool YES
Muestra ~/Library
$ chflags nohidden ~/Library
Default Apps
A mano
$ vim ~/Library/Preferences/com.apple.LaunchServices.plist
Duti
$ duti -s org.videolan.vlc .mp4 all
Activa la interfaz web de CUPS
$ sudo cupsctl WebInterface=yes
El servidor estará disponible en http://localhost:631/admin.
Lock screen
System Preferences » Security & Privacy » General » Require Password » 5 seconds
Lock: Control + Shift + Power Sleep: Command ⌘ + Option ⌥ + Power
Atajo: System Preferences » Keyboard » Shortcuts » + » Lock Screen » atajo
iTerm2
Terminal colorscheme
Aplica Zenburn
$ wget https://raw.githubusercontent.com/mbadolato/iTerm2-Color-Schemes/master/schemes/Zenburn.itermcolors
Command ⌘ + i » Colors » Color Presets » Import… » Zenburn.itermcolors » Open General
» Copy Current Settings to Selected Profile.
Fuente
El paquete Nerd Fonts se instaló con Homebrew. Para usarlo en iTerm2 basta con hacer esto:
Preferences » Profiles » Text » Non-ASCII Font » Hack Regular Nerd Font Complete
Login Items
System Preferences » Users & Groups » Current User » Login Items
Deja solo:
- Flux
- InsomniaX (ou equivalente)
- SwitchResX Daemon
- Moom
Chrome como navegador por defecto
xdg-mime default chromium.desktop x-scheme-handler/http
xdg-mime default chromium.desktop x-scheme-handler/https
Mute Chrome
En la barra de direcciones: chrome://flags/#enable-tab-audio-muting
Hosts
Tengo un script que descarga el archivo de hosts de someonewhocares.org y lo instala automáticamente:
sudo ~/dotfiles/hosts.sh
Una aplicación que ayuda a gestionar el archivo de hosts es GasMask:
brew cask install gas-mask
Dock
Deja en el Dock solo los programas útiles:
- Finder
- Contacts
- Calendar
- iTerm
- Google Chrome
Spotify
Además de iniciar sesión en Spotify, hay que configurar el scrobbling a Last.fm: Preferences »
Connect to Last.fm
Preferences: desactiva “Local Files”
Trucos
Que la portada no quede suelta en la vista de dos páginas de Preview
Siempre que veas un PDF a dos páginas, Preview mostrará la primera página suelta, como si fuera la
portada de un libro. A veces no es lo que queremos y no hay forma de desactivar esa “función”, pero
hay un truco: inserta una página en blanco y ponla como primera página:
Edit » Insert » Blank Page; View » Contact Sheet y arrastra la página en blanco a la primera
posición.
Scroll en el terminal
Shift+fn+UP e Shift+fn+DOWN
Configurar correos de Gmail es trivial, pero además uso un correo de mi propio host.
Si Mail no reconoce automáticamente la función de cada carpeta imap, habrá que definirla a mano. Por ejemplo:
Selecciona Deleted Messages » Mailbox » Use This Mailbox As » Trash Mailbox
PATH
Comprueba que el orden de los directorios en /etc/paths es correcto y que están todos.
Programas instalados sin Homebrew
- Adobe Acrobat Pro o PDF Expert: ver y editar PDF
- Adobe Lightroom: organizar la galería de fotos
- Adobe Photoshop: edición de imágenes
- CleanMyMac: mantenimiento del sistema
- Dash: API Documentation Browser
- iStat Menu: barra de menú con el estado de CPU/memoria/red/etc.
- LittleSnitch: bloquea conexiones no deseadas. Alternativa gratuita: Lulu
- MacPaw Gemini: elimina archivos duplicados
- Microsoft Office
- Many Tricks Moom: gestiona ventanas
- Parallels: virtualización
- SideSync: para gestionar dispositivos de Samsung
- SwitchResX: resolución de pantalla
- Vuescan: escáner (alternativa gratuita: xsane)
- Wunderlist
Firewall
OS X trae pfctl. LittleSnitch y Lulu también permiten gestionar las conexiones salientes.
Certificados SSL
En mi caso tengo que añadir los certificados de la universidad: moodle.dc.ufscar.br
MySQL
CLI
brew install mysql
mysql.server start
mysql_secure_installation
mysql_upgrade -u root -p
mysql.server restart
$ mysql -u root -p
mysql> select host, user, password from mysql.user;
mysql> CREATE USER 'julio'@'localhost' IDENTIFIED BY '123456';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'julio'@'localhost' WITH GRANT OPTION;
mysql> show variables;
mysql> show databases;
mysql> use nome_do_esquema;
$ mysql.server stop
MySQL Workbench
brew cask install mysqlworkbench
Apache
Descomenta estas líneas en /etc/apache2/httpd.conf:
LoadModule authz_core_module libexec/apache2/mod_authz_core.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule cgi_module libexec/apache2/mod_cgi.so
Carpeta de usuario
Descomenta estas líneas en /etc/apache2/httpd.conf:
LoadModule userdir_module libexec/apache2/mod_userdir.so
Include /private/etc/apache2/extra/httpd-userdir.conf
Descomenta esta línea en /etc/apache2/extra/httpd-userdir.conf:
Include /private/etc/apache2/users/*.conf
Crea el archivo /etc/apache2/users/julio.conf:
<Directory "/Users/julio/Sites/">
Options Indexes MultiViews FollowSymLinks
Require all granted
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Reinicia Apache con sudo apachectl restart.
Crea la carpeta ~/Sites:
mkdir ~/Sites
PHP
sudo cp /etc/php.ini.default /etc/php.ini
sudo -e /etc/php.ini
phpMyAdmin
sudo vim /etc/apache2/httpd.conf
Alias /phpmyadmin /usr/local/share/phpmyadmin
<Directory /usr/local/share/phpmyadmin/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
Google KSFetch
Google busca actualizaciones cada hora. Cámbialo a 7 días:
defaults write com.google.Keystone.Agent checkInterval 604800
O desactiva la comprobación por completo:
defaults write com.google.Keystone.Agent checkInterval 0
iTerm2 + tmux
iTerm2 está integrado con tmux, un multiplexor de terminales.
Instálalo con homebrew:
brew install tmux
Control mode:
tmux -CC
Byobu
Mejor que screen y tmux
Actualización: plantéate también Zellij.
Date
Date & Time:
- Use a 24-hour clock,
- Show the day of the week,
- Show date
iBooks
Cada vez que abres un .epub, iBooks lo copia al directorio
/Users/julio/Library/Containers/com.apple.BKAgentService/Data/Documents/iBooks.
El original se queda donde estaba. Puede venir bien borrar los archivos (desde el propio iBooks) para ahorrar espacio.
Inline attachment viewing type:
defaults write com.apple.mail DisableInlineAttachmentViewing -bool yes
defaults write com.apple.mail DisableInlineAttachmentViewing -bool false
Github
git config --global credential.helper osxkeychain
Esto ya se configura en el ~/.gitconfig.
Diccionarios
Dict.cc
Descárgalos de http://www.dict.cc/?s=about%3Awordlist
iStat Menus
Settings » Date & Time:
- Desmarca
Show date and time in menu bar.
Settings » Energy Saver:
- Desmarca
Show battery status in menu bar.
Reordena los elementos del menú arrastrándolos mientras pulsas la tecla Command (⌘).
Skype
Skype » Preferences… » Save files in: ~/Downloads/Skype
Telegram
Telegram » Preferences… » Advanced Settings » Save documents to: ~/Download/Telegram
Links
- https://gist.github.com/1623487.git
- Rootless: https://en.wikipedia.org/wiki/System_Integrity_Protection
- Seguridad: https://github.com/lfit/itpol/blob/master/linux-workstation-security.md
- https://www.reddit.com/r/osx/comments/300chd/what_are_the_most_essential_apps_for_os_x_in/
- https://github.com/monfresh/laptop
- https://gist.github.com/adamstac/822811
- http://mikebuss.com/2014/02/02/a-beautiful-productive-terminal-experience/
- http://www.defaults-write.com/
- http://www.slant.co/topics/526/~window-manager-for-mac
- http://www.sunrisepage.com/computers/osx/osx1011.htm
- http://www.reecefowell.com/2012/11/16/ksfetch-annoyance-on-mac-os-x-10-8-ml-with-hands-off-or-little-snitch-firewall/
- https://gitlab.com/gnachman/iterm2/wikis/TmuxIntegration
- http://www.simononsoftware.com/virtualenv-tutorial-part-2/
- https://www.tekrevue.com/tip/gatekeeper-macos-sierra/
- https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection

Soy un ingeniero informático brasileño radicado en Alemania, apasionado por la tecnología, la ciencia, la fotografía y los idiomas.
Llevo programando cerca de dos décadas, explorando desde apps móviles y desarrollo web hasta aprendizaje automático. Hoy me enfoco en SRE en la nube e ingeniería de datos.
Soy voluntario en las comunidades de open source y Python, ayudando a organizar PyCon DE y PyData Berlin, dando mentorías y contribuyendo con código y traducciones.
En mi blog comparto consejos de Linux, guías de configuración y notas personales que escribí como referencia futura. Espero que también sean útiles para otras personas. El contenido está disponible en varios idiomas.
Visita mi galería para ver algunas de mis fotografías.
Fuera del teclado, me encontrarás en conciertos, tocando el clarinete, en bicicleta, buceando o explorando nuevos lugares, culturas y cocinas.
¡Siempre feliz de conectar! 🙂