Por razones que no vienen al caso, ha llegado a mis manos un Mac nuevecito. Aún oliendo a nuevo. Aunque eso a mi lado friki le encanta, un Mac recién sacado de la caja no es exactamente el entorno más productivo para un desarrollador.
Tengo que admitir que mi perfil es un poco particular. Me paso el 70% del tiempo entre el VIM y la consola. No uso ni un super IDE ni un cliente de git visual. Soy, por así decirlo, de la vieja escuela.
Quiero dejar claro desde aquí que no es mi intención entrar a explicar cómo se usan cada una de las herramientas o utilidades que aquí pueda nombrar. Si tienes curiosidad sobre alguna en particular, estaré encantado de dar más detalles si me dejas un comentario con tus dudas :).
Dicho eso, mi entorno es el siguiente:
- Prompt de consola modificado para mostrar información extra sobre mis repos de Git.
- MacVim con varios plugins que uso en mi día a día.
- Scripts para vitaminar Git.
- Utilidad que me ayuda a copiar mis claves ssh en mis servidores remotos.
- La configuración de la app terminal con la que me siento más cómodo.
- Vagrant para montar los entornos de desarrollo.
- NodeJS y NPM
Vayamos por partes. Primero instalo todo el software necesario, teniendo encuenta que mi versión de MacOs es Yosemite:
- MacVim: Básicamente mete VIM dentro de una ventana del Finder y así podemos hacer cosas chulas como usar el ratón o copiar y pegar usando los teclados del sistema operativo.
- Git
- Git Extras: Es un conjunto de utilidades que vamos a usar para hacer nuestro trabajo con Git más productivo. La instalación es muy simple y siempre uso la modalidad de una línea de código.
- Brew: Gestor de paquetes en Mac. Si has trabajado con Linux piensa en él como en Apt o Yum. De hecho, hay un modalidad de instalación de git-extras con Brew.
- Ngrok: Esta es una pequeña utilidad que nos ayudará a compartir nuestro trabajo WiP (en localhost) con alguien que no se pueda conectar a nuestra red local.
- Vagrant: Gestor de máquinas virtuales. Gestiona la creación y provisión, y algunas cosillas más.
Ahora que ya lo tengo todo bajado me lío a ejecutar los instaladores o arrastro las apps a mi carpeta Application. Nada especial en todo esto. Lo único especial que hago es copiar los binarios de macvim
y ngrok
a mi path para poder ejecutarlos desde la consola.
$ cd
$ sudo mv ~/Downloads/ngrok /usr/local/bin/
$ sudo mv ~/Downloads/MacVim-snapshot-74/mvim /usr/local/bin/
Una vez tengo todo el software bajado e instalado es el turno de la personalización.
(1) Quiero que mi terminal luzca exactamente así:
Lo más minimalista posible, pero dándome toda la información que necesito en un golpe de vista. En la línea superior tenemos el usuario, seguido por el nombre de la máquina y, después de un espacio, el directorio de trabajo. Justo debajo, el símbolo del prompt (λ) y, antes de él, si es que estoy en un repositorio de Git, la rama actual en la que estoy trabajando.
Para conseguir todo esto guardo el fichero .git-completion.sh
en mi home. Lo podéis encontrar en este gist y luego agrego estas líneas a mi fichero ~/.bash_profile
:
# GIT autocompleted
source ~/.git-completion.sh
# prompt
PS1='\[email protected]\h \w\n\[\033[01;32m\]$(__git_ps1 "(%s) ")\[\033[01;31m\]λ\[\033[01;37m\] '
Crea un fichero
.bash_profile
en tu home, si no está.
Mi configuración de la aplicación Terminal la podéis ver en esta captura de pantalla.
(2) Ahora es el turno de tunear a VIM para que quede como a mí me gusta. Lo primero que hago es copiar mi fichero .vimrc
en mi home. Lo podéis encontrar en este gist. Luego instalo mis plugins básicos usando siempre la misma web vimawesome:
- The NerdTree
- CrtlP
- Vim CoffeeScript
- Ack-vim: Antes de poder usarlo tendrás que instalar
ack
en tu mac. Puedes hacerlo con Brew. - Vim-Javascript
- JSLint
Estos no son los únicos que tengo instalados. Pero sí son los que siempre recuerdo que tengo que instalar. Y siempre los instalo usando Pathogen.
En realidad, yo no instalo todo desde cero. Tengo una copia de mi directorio ~/.vim en Dropbox.
(3) Alias y configuraciones que más uso. En el fichero ~/.gitconfig
tengo los siguientes alias:
[core]
editor = "mvim -f"
[color]
branch = auto
diff = auto
status = auto
[color "branch"]
current = yellow reverse
local = yellow
remote = green
[color "diff"]
meta = yellow bold
frag = magenta bold
old = red bold
new = green bold
[color "status"]
added = yellow
changed = green
untracked = cyan
[alias]
st = status
ci = commit
br = branch
co = checkout
df = diff
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative
Y en mi .bashrc
:
alias ls='ls -Gpal'
alias ss="/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background &"
¿A que te estás preguntando qué hace ss
? ;).
También me gusta meter en mi fichero /private/etc/hosts
las IP de mis servidores para no tener que recordarlas. Así, al final del fichero tengo entradas del tipo:
145.23.21.42 carlosvillu.dev
que seguramente apunte a algún Droplet de DigitalOcean o a alguna máquina de Kimsufi, para luego poder hacer algo como:
$ ssh [email protected]
Esto me lleva a configurar mi acceso a los servidores con ssh sin usar password. Para ello instalo ssh-copy-id y me aseguro de tener mi llave pública en todos mis servidores.
Otra cosa que suelo hacer para ahorrar algo de tiempo a la hora de entrar en los servers desde mi Mac, es poner alias en mi bashrc
del tipo:
alias ovh="ssh [email protected] $1"
Así, con solo escribir ovh
en la consola ya estaría en mi máquina remota. O escribiendo ovh "[cualquier comando bash aquí]"
lo ejecuto remotamente.
$ ovh "ls -pal"
// Listado de ficheros en mi servidor remoto!!!
(4) Por último, instalo NodeJS. Para ello siempre uso nvm:
$ curl https://raw.githubusercontent.com/creationix/nvm/v0.23.3/install.sh | bash
$ source ~/.bash_profile
$ nvm install 0.12
$ nvm alias default 0.12
Yo he tenido que hacer
source ~/.bash_profile
, pero puede que tú tengas que hacerlo del fichero~/.bashrc
. Solo tienes que leer la salida del script de instalación, que te dará los detalles.
Rápido y simple. Ahora deberías tener NodeJS y npm instalados. para comprobarlo, haz algo tan simple como:
$ node -v
$ npm -v
Si quieres ser más productivo trabajando con npm, te recomiendo que ejecutes
npm completion
así podrás autocompletar los comandos de npm fácilmente.
Algún avispado lector se podrá preguntar, ¿por qué instala NodeJS si luego usa Vagrant para el desarrollo? Pues tienes toda la razón, pero aun así siempre lo instalo. Y no solo eso, sino que además también tengo una lista de paquetes globales que siempre instalo:
Creo que cada una de esas utilidades se merece un post. Cómo poner en producción una aplicación de NodeJS, cómo tener un flujo de desarrollo simple y automático, cómo distribir la app en distintos entornos. Pero bueno poco a poco.
Como dije, no he tratado de explicar por qué uso tal o cual programa ni cómo los uso. Solo quería crear una guía de las cosas que suelo hacer para tener mi Mac up&running. Claro que esto es un proceso que nunca se acaba y siempre ando cambiando cosas, pero eso tiene más que ver con lo friki que soy que con la parte productiva.
Si alguien se pregunta si no instalo boot2docker, la respuesta es NO. Hasta el día de hoy siempre que he usado Docker, ha sido mediando Vagrant
Si te ha gustado este post, difunde la palabra. Tampoco dudes en dejar comentarios u observaciones. ¡Gracias! :)