/setup-macbook

Guía para configurar una nueva computadora con Mac Os para ciencia de datos

Alo 👋

Luego de setear varias computadores con Mac OS para diferentes personas y principalmente para mí, decidí armar esta guía como recordatorio personal y para uso de otros. Es altamente probable que algunas cosas fallen en el camino, a no desesperar. Todas las respuestas están en google y stackoverflow. La idea es agilizar el proceso de instalación y configuración de algunas herramientas típicas de uso en IT.

💡 pssss 👉🏼 El listado de aplicaciones y tools a instalar es total y completamente personal, por lo que la idea es customizar a gusto. Algunas son de uso exclusivo para sistemas (ejemplo git), otras de uso general (ej spotify 🎧), otras de uso mixto (ej Notion) y varias son afines a mis intereses/usos particulares.



Homebrew

Homebrew o brew es una herramienta de línea de comando que permite en forma simple, instalar software. En palabras de sus creadores: "The Missing Package Manager for macOS (or Linux)". La vamos a usar para instalar muchas cosas. Tiene varios comandos, pero en general se usan solo estos:

  • brew install <app>: Software típicamente relacionado con la línea de comando (va a parar a /usr/local/Cellar/ y luego agrega symlinks en /usr/local/bin/ para que el OS lo encuentre). Se pueden poner varios paquetes e instala todos de una.
  • brew install --cask <app> : Software con interfaz gráfica (típicamente va a parar a /Applications/). Se pueden poner varios paquetes e instala todos de una.
  • brew bundle --file path/to/Brewfile (opcionalmente brew bundle install si el archivo está en el directorio donde estamos posicionados): Instala todo lo que esté en el archivo Brewfile, ergo nos permite instalar múltiples cosas de una. Estrictamente hablando, se podría instalar todo usando los dos primeros, pero a mi al menos me gusta usar este método para poder ir administrando el listado.
  • brew tap <tap_name>: Agrega el repositorio tap_name alternativo al "oficial" de homebrew.

Para buscar qué está disponible en homebrew, ver la web del desarrollador de cada paquete/soft para saber más, etc.--> https://formulae.brew.sh

Instalación

  1. Abrir la terminal.
  2. Pegar:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Puede que nos pregunte cosas, por lo que hay que mirar la pantalla cada tanto. Al final nos pedirá que corramos otros dos comandos para terminar la instalación.

GUI soft

El listado de las apps que instalaremos está en Brewfile_cask_apps. Se pueden agregar o comentar las que no interesen. No hay ninguna diferencia funcional al final del proceso entre instalarlas de esta manera o bajar individualmente desde la web del desarrollador y luego arrastrar a la carpeta de Aplicaciones.

👉 Tip 1: Las aplicaciones sensibles en lo que respecta a seguridad, como administradores de contraseñas, 2FA, etc. recomiendo bajarlas de la web del desarrollador. Yo tengo listadas algunas que uso como recordatorio, pero en general las comento y no las instalo con este método.

👉 Tip 2: Cada instalador que se sube al repositorio de Homebrew debería tener un hash SHA256 (secuencia alfanúmerica que identifica en forma unívoca a ese archivo tal y como es) para asegurarse de que no esté corrupto o modificado. Lamentablemente algunos no lo tienen (caso Dropbox o Google Drive al momento de la redacción de esta guía). El archivo con el listado de apps tiene un flag require_sha: true que hará que algunas apps fallen al intentar ser instaladas justamente por la ausencia de este hash en la información de la instalación que tiene homebrew. Queda a criterio personal sacar el flag para instalar todo sin errores o para aquellas que fallan, bajarlas luego de la web.

  1. Abrir terminal.
  2. Pegar:
brew bundle --file /path/to/Brewfile_cask_apps.txt

Si son varias apps, tener paciencia. Homebrew a veces nos hará preguntas sobre el soft instalado, nos pedirá la conrtaseña, etc. brew --cask <app_name>

CLI tools

El listado de las apps que instalaremos está en Brewfile_cli_apps. Se trata de por ejemplo git, githhub cli, tmux, etc. Pueden buscar en la página de homebrew cada una y ver para qué sirve.

  1. Abrir iterm si lo instalaron, o sino la terminal, y pegar
brew bundle --file /path/to/Brewfile_cli_apps.txt
  1. Por algún motivo z no funciona directo, así que luego de googlear

Shell

Mac OS trae una aplicación de terminal por defecto, pero es un poco limitada, por lo que la mayoría de la gente utiliza alguna alternativa. Iterm es la más popular y está en la lista Brewfile de GUI apps, si no está instalada, recomiendo instalarla. De ahora en más cuando mencione la terminal, me refiero a iterm.

Iterm look

💄 La apariencia de la terminal y la información que muestra es motivo de infinitos tutoriales y guías similares a estas con diversos grados de personalización y locura.

  1. Themes. Hay $10^7$ color themes. Acá un muestrario, instructivo y zip para bajarlos. Cuando se configura el color te hace un preview de cómo se vería la terminal.

iTerm → Preferences → Profiles → Colors → Color presets → Import. Luego elegir.

  1. Por defecto hay un par de comandos básicos que no funcionan (borrar palabras con alt+backspace por ejemplo). Si quieren activarlos:

iTerm → Preferences → Profiles → Keys → Load Preset… → Natural Text Editing

Bash Hello zsh

Zsh y ohmyzsh

Por defecto, la terminal usa bash. Pero vamos a usar zsh que permite algunas cosas extras y útiles. oh-my-zsh es un framework para administrar zsh con múltiples plugins, cuestión de explorar las 275+ opciones. Vamos a configurar con algunos ejemplos, luego es cuestión de leer y agregar. El mundo de las terminales se puede poner hardcore y confuso muy rápido. Está la shell, bash, zsh, scripting languages, frameworks para administrar todo este mundo, etc. Acá muestro una alternativa, hay muchas.


👉 Aviso 1: Es importante mencionar que cuando se abre la terminal (ya sea con la aplicación Terminal.app que trae mac os o con iterm), se carga automáticamente un archivo oculto que reside en el directorio del usuario (~/). El archivo en cuestión es .bashrc (para bash) ó .zshrc (para zsh). En este archivo se pueden agregar comandos personalizados que se ejecuten al iniciar la terminal y vamos a tener que acceder a este archivo para realizar algunas configuracione extras.

👉 Aviso 2: Existen otros shells interesantes como fish. También hace poco descubrí fig. La terminal es un mundo en si mismo en el que mucha gente pasa horas trabajando, por lo que no está mal dedicarle un rato para trabajar cómodo.

  1. Abrimos iterm y pegamos el comando de brew para instalar instalar zsh y algunos agregados para tener autocompletition y syntax highlighting:
brew install zsh zsh-autosuggestions zsh-syntax-highlighting
  1. Luego tenemos que agregar dos líneas al archivo .zshrc. Con este comando agregamos lo que figuar entre comillas al final del archivo sin necesidad de abrirlo (que bien puede hacerse con cualquier editor):
echo "source /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh" >> ~/.zshrc
echo "source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ~/.zshrc
  1. Instalamos oh-my-zsh:
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
  1. Plugins: vamos a editar el listado de plugins de ohmyzsh que queremos usar. Como mencioné, vienen muchísimos por defecto y existen muchos otros que se pueden agregar. Pueden utilizar cualquier editor de texto, yo para este tipo de cosas uso nano que viene con la terminal:
cd
nano .zshrc

Una vez abierto tenemos que buscar la línea que dice plugins=(...) y colocar los que queremos usar. En mi caso arranco con plugins=(git z colorize copypath copyfile gh gitfast jsontools sublime tmux vscode)

Powerlevel prompt

Ahora vamos a instalar el theme (Powerlevel10k). Alternativamente podemos instalar oh-my-posh o starship que son exclusivos para el prompt y ambos deben estar buenos, pero nunca los probé:

  1. Clonamos el repo en la carpeta adecuada:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
  1. El siguiente comando agrega la variable ZSH_THEME y su valor a .zshrc.
echo 'source ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc
  1. Reiniciamos zsh:
exec zsh
  1. Ahora viene la parte divertida. Powerlevel tiene un wizard que ayuda a configurar todo. Hay muchas opciones y en general ya con eso vamos a estar bien contentos. El wizard no permite desplegar el 100% del potencial, pero en la página de github hay una explicación de muchas cosas que se pueden hacer (colores, git info expandida, batería, qué música suena, IP, etc). También van a encontrar que mucha gente comparte sus configuraciones y .zshrc.
p10k configure

Venvs y otros lenguanges

En mi caso trabajo con miniconda/python, R/RStudio y julia. Las instalaciones relacionadas están en Brewfile_langs.

  1. Abrir iterm (podemos dejar de usar la terminal de mac os)
  2. Pegar:
brew bundle --file ~/path/to/Brewfile_lang
  1. Para terminar con la instalación de miniconda corremos
conda init "$(basename "${SHELL}")"

Conda defaults

A la hora de crear nuevos entornos virtuales con conda (o cualquier otra tool similar), siempre es medio tedioso instalar los paquetes base que siempre usamos. Existe un archivo de configuración opcional .condarc donde podemos especificar qué paquetes queremos instalar por defecto al crear un nuevo entorno y muchas otras cosas más (documentación). Pueden usar el sample file de conda como esqueleto, o el mío. El archivo no existe por defecto, con lo cual hay que crearlo, ya sea con la terminal o cualquier editor y luego guardarlo. Si quieren crearlo y editarlo con la terminal:

nano ~/.condarc

Pegamos y editamos, luego ctrl+X y Y para guardar.


Fonts

Aunque no parezca, la tipografía que utilicemos al programar puede ayudar de diversas maneras en la productividad, lectura, etc. Vamos a instalar fira code que es una fuente monoespaciada con ligaduras, caracteres especiales y más que embellecen la lectura y experiencia. Acá están las instrucciones para mac os. Ya que estamos instalamos también hack nerd font por si en algún momento queremos probarla. Ambas se instalan fácilmente en forma manual o con homebrew. Vamos por la segunda opción.

Si quieren otras fuentes para probar, pueden instalar el Poweline font pack que incluye fira y muchas fuentes preparadas para el mismo fin.

  1. Abrir iterm.
  2. Pegar
brew tap homebrew/cask-fonts
brew install --cask font-hack-nerd-font font-fira-code

Luego hay que configurar el uso de esta font en todos los softwares que deseemos. Acá se muestran los pasos para Sublime, VS code, Rstudio. Específicamente para para iterm podemos:

iTerm2 → Preferences → Profiles → Text → Change Font (y activar ligaduras)


Versionado

Git

La idea es configurar Git y Github para poder pushear a nuestros repos sin tener que autenticarse cada vez.

Si te encontrás en la situación de tener que usar dos usuarios distintos (personal y laboral por ejemplo) la cosa se pone más compleja pero se puede, podés seguir la información de acá y/o acá.

  1. Configuramos nuestros datos
git config --global user.name "CharlyGarcia"
git config --global user.email "charly@garcia.com"
  1. (opcional) Configuramos el nombre de nuestra branch inicial al hacer git init en una carpeta. En 2020 arrancó una discusión acerca de ciertos términos usados en la industria (blacklist, master, por ejemplo) que derivaron en que github deje de llamarle master a la branch inicial y lo cambió por main. Más allá de la discusión semántica y cultural, no existen branches esclavas, sino "alternativas", con lo cual llamarle main es desde un punto de vista técnico incluso más correcto (si nos ponemos estrictos, la branch "principal" no tiene casi diferencia con el resto, pero eso es otro tema).
git config --global init.defaultBranch main
  1. (opcional) Default gitignore. Generamos un archivo global que aplica a todos los repos.
touch ~/.gitignore
git config --global core.excludesFile ~/.gitignore

Qué poner en este archivo depende del uso que le den a git así que lo dejo a criterio del usuario. Como ejemplo, podemos agregar los archivos .DS_Store, típico archivo oculto de Mac Os que suele estar en todas las carpetas.

echo .DS_Store >> ~/.gitignore
  1. (opcional) Configuramos el editor de commit por defecto que nos guste.
git config --global core.editor "sublime"

SSH

Para poder usar git en nuestros repos remotos de github, tenemos que generar y configurar una clave ssh. Básicamente es seguir los pasos de la documentación de github.

  1. Generamos una clave SSH. Reemplazar el mail por el que utilizan en github
ssh-keygen -t ed25519 -C "charly@garcia.com"

Nos va a preguntar "Enter a file in which to save the key", le damos enter. Luego nos va a preguntar "Enter passphrase (empty for no passphrase)", le damos enter. Una vez finalizado, tendremos dos archivos generados en ~/.ssh. Algo del tipo:

  • nombre_archivo: Clave privada. No compartirla con nadie.
  • nombre_archivo.pub: Clave pública que usaremos para configurar github. Github
  1. Arrancamos el ssh-agent
eval "$(ssh-agent -s)"
  1. Agregamos la clave privada a nuestro agente y config.
nano ~/.ssh/config

Pegamos

Host *
  AddKeysToAgent yes
  IdentityFile ~/.ssh/nombre_archivo

Luego ctrl+X y Y para guardar.

  1. Registramos la clave privada:
ssh-add -K ~/.ssh/nombre_archivo

SSH pública en Github

  1. Seguimos los pasos de la documentación de github.
  2. Podemos comprobar si todo funciona siguiendo estos pasos.