/macos-setup

Documentation and code useful for setting up your macos system for the first time.

MIT LicenseMIT

MacOS Setup

Intro

En esta guia se describe la configuración del sistema MacOS para adaptarlo a un ambiente de trabajo para realizar tareas relacionadas a la administración de:

  • MacOS Personal
  • Servidores Linux
  • Recursos Cloud
  • Clusters Kubernetes
  • Desarrollo de software

Intentare usar en su mayoría software libre que estoy acostumbrado a usar en otros sistemas GNU/Linux como Kubuntu Desktop que normalmente usaba en arquitecturas x86.

Para esto necesito dejar algunas cosas bien configuradas:

  • Entornos de desarrollo
  • Gestores de paquetes
  • Editor de textos
  • Emulador de Terminal
  • Entorno del shell
  • Cliente VPN
  • Navegador Web

Objetivos

Realizaremos las siguientes actividades orientadas a instalar y configurar:

  • Herramientas de linea de comando XCode
  • Gestor de paquetes Brew
  • Editor de textos vim
  • Emulador de terminal iTerm2
  • El shell zsh con oh-my-zsh
  • Herramientas de búsqueda en linea de comandos
  • Conjunto de herramientas de linea de comandos
  • Herramientas de gestión Cloud

Herramientas de linea de comando XCode

Instalamos XCode cli tools:

$ xcode-select --install

Verificamos instalación de xcode cli tools:

$ xcode-select -p

Gestor de paquetes Brew

Instalar el gestor de paquetes brew:

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Configurar brew:

$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/jmedina/.zprofile
$ eval "$(/opt/homebrew/bin/brew shellenv)"
$ brew help

Configurar repos:

$ brew tap
$ brew tap homebrew/cask

Mostrando taps:

$ brew tap
homebrew/cask
homebrew/core

Buscando paquetes:

$ brew search git

Actualizando lista de paquetes:

$ brew update

Instalando un paquete:

$ brew install git

Desinstalando paquetes:

$ brew uninstall git

Forzando desinstalacion de paquete:

$ brew unintall -f git

Actualizando paquetes:

$ brew upgrade
$ brew update && brew upgrade

Limpieza de paquetes viejos:

$ brew cleanup

Instalando comandos GNU

No me gusta usar el comando tar que trae por defecto macos, por lo que instalo la versión de GNU que estoy acostumbrado a usar en Linux.

$ brew install gnu-tar

Hace falta agregar el path:

$ vim $HOME/.zshrc
...
...
...
export PATH="/opt/homebrew/opt/gnu-tar/libexec/gnubin:$PATH"

Recargamos configuración:

$ source $HOME/.zshrc

Editor de textos vim

Instalación de vim:

$ brew install vim

Editar config:

$ vim .vimrc

Agregamos el contenido inicial:

" .vimrc

" Configuración general
set title " Muestra el nombre del archivo en la ventana de la terminal
set number " Muestra los números de las líneas
set nowrap " No dividir la línea si es muy larga
set cursorline " Resalta la línea actual
set colorcolumn=120 " Muestra la columna límite a 120 caracteres
set nocompatible " Desactiva modo compatible
filetype plugin on " Habilita plugin para tipos de archivos
syntax on " Activa resaltado de sintaxis

" Indentación a 2 espacios
set tabstop=2
set shiftwidth=2
set softtabstop=2
set shiftround
set expandtab " Insertar espacios en lugar de <Tab>s
set imrmguicolors " Activa true colors en la terminal

" Configuracion spell check
"set spell
set nospell
setlocal spell spelllang=es,en " Corregir palabras usando diccionarios en español

" Mapeos
"inoremap " ""<left>
"inoremap ' ''<left>
"inoremap ( ()<left>
"inoremap [ []<left>
"inoremap { {}<left>
"inoremap {<CR> {<CR>}<ESC>O
"inoremap {;<CR> {<CR>};<ESC>O

" Habilitar fzf
set rtp+=/opt/homebrew/opt/fzf

" Syntax for markdown enabled
au BufNewFile,BufFilePre,BufRead *.md set filetype=markdown
au BufNewFile,BufFilePre,BufRead *.txt set filetype=markdown
set syntax=markdown

"
" PLUGINS: https://github.com/junegunn/vim-plug
"

" Specify a directory for plugins
call plug#begin('~/.vim/plugged')
" fzf
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
" Challenger-deep-theme: https://github.com/junegunn/vim-plug
Plug 'challenger-deep-theme/vim', { 'as': 'challenger-deep' }
" NERDTree
Plug 'preservim/nerdtree'
" vimwiki
Plug 'vimwiki/vimwiki'
" editorconfig
Plug 'editorconfig/editorconfig-vim'
" vim-terraform
Plug 'hashivim/vim-terraform'
" Initialize plugin system
call plug#end()

"
" THEME:
"
colorscheme challenger_deep

Creamos directorio para spell check:

$ mkdir -p ~/.vim/spell
$ cd ~/.vim/spell

Descargaremos los siguientes archivos:

  • es.latin1.spl
  • es.latin1.sug
  • es.utf-8.spl
  • es.utf-8.sug

Descargamos los archivos:

$ wget https://ftp.vim.org/vim/runtime/spell/es.latin1.spl
$ wget -k https://ftp.vim.org/vim/runtime/spell/es.latin1.spl
$ wget --no-check-certificate https://ftp.vim.org/vim/runtime/spell/es.latin1.spl
$ wget https://ftp.vim.org/vim/runtime/spell/es.latin1.sug
$ wget --no-check-certificate https://ftp.vim.org/vim/runtime/spell/es.latin1.sug
$ wget --no-check-certificate https://ftp.vim.org/vim/runtime/spell/es.utf-8.spl
$ wget --no-check-certificate https://ftp.vim.org/vim/runtime/spell/es.utf-8.sug

Creamos los archivos para los diccionarios locales:

$ touch ~/.vim/spell/es.utf-8.add
$ touch ~/.vim/spell/en.utf-8.add

Shortcuts:

  • ]s – Siguiente falta ortográfica
  • [s – Anterior falta ortográfica
  • z= – Mostrar sugerencias para una palabra incorrecta.
  • zg – Añadir una palabra al diccionario.
  • zug – Deshacer la adición de una palabra al diccionario.
  • zw – Eliminar una palabra del diccionario.

Instalar herramienta para gestión de plugins: plug-vim:

$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Configuración de Plugins:

"
" PLUGINS: https://github.com/junegunn/vim-plug
"

" Specify a directory for plugins
call plug#begin('~/.vim/plugged')
" fzf
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
" Challenger-deep-theme: https://github.com/junegunn/vim-plug
Plug 'challenger-deep-theme/vim', { 'as': 'challenger-deep' }
" NERDTree
Plug 'preservim/nerdtree'
" vimwiki
Plug 'vimwiki/vimwiki'
" Initialize plugin system
call plug#end()

"
" THEME:
"
colorscheme challenger_deep

Guardar vim, salir, y volver a entrar, entonces:

:PlugInstall

Emulador de terminal iTerm2

Instalamos el paquete iterm2 de cask:

$ brew install --cask iterm2

Shortcuts:

  • Win + N: Nuevo ventana
  • Win + T: Nuevo tab
  • Shift + Win + D: Split Horizontal
  • Win + D: Split Vertical

El shell zsh con oh-my-zsh

Instalamos el shell zsh:

$ brew install zsh

Instalamos oh my zsh:

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

Cambiamos el shell default:

$ chsh -s $(which zsh)

Configuración de plugins integrados en zsh

Editamos el archivo de configuración de zsh:

$ vim .zshrc

Para habilitar los diferentes plugins cambiamos:

plugins=(git)

por:

plugins=(cp colored-man-pages colorize pip python brew git vi-mode)

Guardamos y re cargamos configuración:

$ source .zshrc

Configuración del tema integrado en zsh

Editamos el archivo de configuración de zsh:

$ vim .zshrc

Para cambiar el tema cambiamos:

ZSH_THEME="robbyrussell"

Por:

ZSH_THEME="agnoster"

Guardamos y re cargamos configuración:

$ source .zshrc

Lista de temas: https://github.com/ohmyzsh/ohmyzsh/wiki/themes.

Configurando tema powerlevel19k

Instalamos el tema powerlevel9k:

$ git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k

Editamos el archivo de configuración de zsh:

$ vim .zshrc

Agregamos la lista de sources:

ZSH_THEME="powerlevel9k/powerlevel9k"
# Powerlevel9k settings
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(user host dir vcs)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status battery time)
POWERLEVEL9K_PROMPT_ON_NEWLINE=true
POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
POWERLEVEL9K_OS_ICON_BACKGROUND="white"
POWERLEVEL9K_OS_ICON_FOREGROUND="blue"
POWERLEVEL9K_TIME_FORMAT="%D{%H:%M:%S | %d.%m.%y}"

Otras opciones:

POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=""
POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX=""

Guardamos y re cargamos configuración:

$ source .zshrc

Proyecto: https://github.com/Powerlevel9k/powerlevel9k/wiki/Install-Instructions#option-2-install-for-oh-my-zsh

Configuración del plugin syntax hightlighting en zsh

Instalar resaltado de sintaxis en zsh:

$ brew install zsh-syntax-highlighting

Editamos el archivo de configuración de zsh:

$ vim .zshrc

Agregar a la lista de sources:

source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

Guardamos y re cargamos configuración:

$ source .zshrc

Proyecto: https://mimosa-pudica.net/zsh-incremental.html

Configuración del plugin auto suggestions en zsh

Instalamos auto sugerencias en zsh:

$ brew install zsh-autosuggestions

Editamos el archivo de configuración de zsh:

$ vim .zshrc

Agregar a la lista de sources:

source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh

Guardamos y re cargamos configuración:

$ source .zshrc

Configuración del plugin auto completar incr en zsh

Instalamos plugin incr:

$ cd $HOME/.oh-my-zsh/custom/plugins
$ mkdir incr
$ cd incr
$ wget http://mimosa-pudica.net/src/incr-0.2.zsh
$ cd

Editamos el archivo de configuración de zsh:

$ vim .zshrc

Después de la linea:

source $ZSH/oh-my-zsh.sh

Insertar:

source $ZSH/custom/plugins/incr/incr*.zsh

Guardamos y re cargamos configuración:

$ source .zshrc

Proyecto: https://mimosa-pudica.net/zsh-incremental.html

iterm2 y zsh con fuente Powerline y tema Solarized.

Instalamos la fuente Powerline:

$ cd data/vcs/jorge.medina
$ git clone https://github.com/powerline/fonts.git --depth=1
$ cd fonts
$ ./install.sh
$ cd

Configurar fuente en iterm3, ir "Preferences", "Profiles", "Text":

En Fonts, cambiar a ProFont for Powerline.

Configurar tema en iterm2, ir "Preferences", "Profiles", "Colors":

En Color Presets..., cambiar a Solarized Dark.

Integrar tmux en zsh

Instalar tmux:

$ brew install tmux

Habilitamos el plugin:

plugins=(cp osx colored-man-pages colorize pip python brew git tmux)

Herramientas de búsqueda en linea de comandos

Instalamos paquete de coreutils:

$ brew install coreutils

Editamos el archivo de configuración de zsh:

$ vim .zshrc

Agregamos el PATH:

# PATHS
export PATH="/opt/homebrew/opt/coreutils/libexec/gnubin:$PATH"

Instalamos tree:

$ brew install tree

Instalamos watch:

$ brew install watch

Instalamos fzf:

$ brew install fzf

Habilitamos integraciones:

$ /opt/homebrew/opt/fzf/install

Usar fzf en vim:

$ vim .vimrc

Al final agregar:

set rtp+=/opt/homebrew/opt/fzf

Instalar ack ak para búsquedas:

$ brew install ack

Instalamos the silver searcher

$ brew install the_silver_searcher

Herramientas de linea de comandos

Instalamos la siguiente lista de paquetes:

$ brew install wget curl nmap make autoconf mcrypt gpg2 gettext readline openssl unzip

Agregamos al final de .zshrc:

$ vim .zshrc

Agregamos al final:

# PATHS
export PATH="/opt/homebrew/opt/curl/bin:$PATH"
export PATH="/opt/homebrew/opt/make/libexec/gnubin:$PATH"
export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"

Herramientas de gestión Cloud

Instalamos google-cloud-sdk:

$ brew install google-cloud-sdk

Editamos el archivo de configuración de zsh:

$ vim .zshrc

Agregar a la lista de sources:

$ source /opt/homebrew/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/completion.zsh.inc

Instalación de kubectl:

$ brew install kubectl

Instalación de ansible:

$ brew install ansible

Instalamos generador de contraseñas en cli:

$ brew install pwgen

Instalamos keepassxc:

$ brew install --cask keepassxc

Instalamos drone-cli:

$ brew install drone-cli
$ source .dronerc

Instalamos inso:

$ brew install inso

Gestor de paquetes helm

Instalamos helm:

$ brew install helm

Agregamos los repositorios de los charts que usaremos:

$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm repo add jetstack https://charts.jetstack.io
$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
$ helm repo add datadog https://helm.datadoghq.com

Actualizamos los repositorios:

$ helm repo update

Herramientas de Redes

Instalamos la calculadora de IPs

$ brew install ipcalc

Instaláremos herramientas trazado de tráfico:

$ brew install mtr

Herramientas de Databases

$ brew install postgresql

Instalamos dbeaver:

$ brew install dbeaver-community

DEV

En esta sección instalamos algunas herramientas que se usan en el desarrollo de software, en especifico para la gestión de paquetes para elixir, python y nodejs:

$ brew install asdf python npm yarn

Instalamos la herramienta markdown link check:

$ npm install -g markdown-link-check

Instalamos terraform y otras herramientas necesarias:

$ brew install terraform tflint terraform-docs

Instalamos template de terraform para m1:

$ brew install kreuzwerker/taps/m1-terraform-provider-helper
$ m1-terraform-provider-helper install hashicorp/template -v v2.2.0

Instalamos checkov:

$ pip3 install -U checkov

Instalamos yamllint e yq:

$ brew install yamllint yq

Instalamos cookiecutter:

$ brew install cookiecutter

Instalamos el framework pre-commit:

$ pip3 install pre-commit

Instalamos colimay docker:

$ brew install colima docker

Ahora instalamos kind y skaffold:

$ brew install kind skaffold

Instalamos k6:

$ brew install k6

Otras herramientas de Escritorio

Instalamos el siguiente software:

  • Descargar Google Chrome, iniciar sesión y sincronizar configuraciones. googlechrome.dmg

  • Descargar Brave Browser, iniciar sesión y sincronizar configuraciones. Brave-Browser-arm64.dmg

  • Descargar Tunnelblick, importar configuración y realizar conexión. Tunnelblick_3.8.6a_build_5711.dmg

  • Descargar el controlador de mi mouse keninston y configurar mapa de teclas. kensingtonworks_2.3.1_1632814867.pkg