Configurando el sistema perfecto para un desarrollador web

26 de julio 2021ComentarioslinuxDavid Poza SuárezComentarios

Hace ya 6 meses que vengo usando Pop OS, distribución *buntu de system76, después de haber estado usando Regolith, KDE Plasma y antes Ubuntu durante otro tanto. Y creo que he encontrado un equilibrio muy bueno, ya que gracias a la shell extension de Pop, podemos disfrutar de una experiencia híbrida entre gnome y un tiling window manager como i3. Luego tiene cositas como el soporte de flatpak vs snap, que también inclinan la balanza, para que nos vamos a engañar.

En esta guía quiero exponer de forma clara y sencilla los pasos que sigo cuando quiero poner en marcha mi sistema operativo desde una instalación limpia, algo que normalmente nunca hago ya que lo habitual es que sincronice el equipo desde una copia de seguridad. No obstante, es un proceso que me gusta tener bien documentado para que resulte cómodo reproducirlo o variarlo a otra distro.

Sistema de ficheros y particionado

He acabado pasando a Btrfs, del que prepararé un post específico porque es genial. Antes usaba lvm con ext4, pero creo que, al menos para una máquina de escritorio, btrfs resulta más sencillo y cómodo. Poder hacer snapshots con timeshift sobre btrfs es una de las motivaciones para hacer el cambio.

Mi esquema de particionado es hiper simple:

  • EFI FAT32 - 1GB
  • /recovery FAT32 - 6GB
  • / BTRFS resto del espacio

    • @ subvolume
    • @home: separo el home sobre todo para poder echar el sistema atrás mediante una snapshot sin afectar a mi configuración.
  • swap como fichero (sí, uso swap en un ssd!, lo necesito sí o sí porque 20GB (4+16) se quedan justos para el entorno de trabajo).

Actualizar e instalar paquetería:

Mi paquetería base, desde el repo oficial de pop es:

sudo apt-get install zsh git curl wget gnome-tweaks build-essential pandoc composer php7.4-cli php7.4-xml net-tools lm-sensors hddtemp conky autojump rename wmctrl smartmontools gsmartcontrol filezilla trash-cli jq vlc qbittorrent tree chrome-gnome-shell geany flameshot openjdk-8-jdk screen figlet rclone seahorse-nautilus dconf-editor xdotool fritzing inxi indicator-cpufreq darktable audacity pdfsam ubuntu-restricted-extras mpv sqlitebrowser openctm-tools ppa-purge sqlite3 inkscape hwinfo xclip xsel neovim scrcpy autoconf  autotools-dev ibus-typing-booster krita gimp ncdu meld ffmpeg tilix htop guvcview neofetch pavucontrol timeshift soundconverter picard xfce4-terminal tmux

Flatpak

Apps como telegram o postman me gusta instalarlas desde flathub, y con Pop Os no tengo ni que instalar el servicio. Simplemente:

flatpak install org.telegram.desktop
flatpak install com.getpostman.Postman

Actualmente estoy usando un portátil que solo tiene una salida hdmi, pero no soporta displaylink en los conectores usb que posee, asi que tengo un par de adaptadores displaylink de estos: https://www.amazon.es/dp/B076SX73LY?ref_=pe_996661_48848311_dpLink. Vienen bien para las pantallas secundarias.

Una de las razones de usar *buntus, si no la principal, es que el soporte oficial de DisplayLink para linux lo dan sobre Ubuntu. Si no fuera por tema drivers tal vez me iría a Fedora.

Su instalación es tan sencilla como descargar un zip y ejecutar un script. Eso sí: tienes que desenchufar los adaptadores antes de ejecutarlo.

Cambio de shell a zsh

Ya hace mucho que prefiero zsh a bash. En realidad es cuestión de gustos y mi elección está tomada en base a pequeñas "pijaditas" que seguramente existen igual en bash.

chsh -s $(which zsh)

Y nos aseguramos que ahora estamos usando zsh:

ps -p $$

Además siempre instalo Oh My Zsh y el theme p10k.

Por último también cambio ls por lsdeluxe.

Y finalmente mi terminal se ve tal que así.

Super útil ver tu ip, la versión de node, la rama del repo, etc

Super útil ver tu ip, la versión de node, la rama del repo, etc

Emulador de terminal

Este punto es otro clave. Me ha llevado mucho tiempo probar: Alacritty, guake, kitty, xterm, tilda, takuake, exvt, terminator, konsole... yo creo que los he probado todos 😄

Al final me quedo con xfce4-terminal por estos motivos:

  • soporta dropdown mode o modo quake
  • es ligero
  • funciona el buscador y resalta los resultados, que parece una tonteria pero guake por ejemplo tiene esta funcionalidad bugeada desde hace años😂

Y lo termino de pulir usando tmux como multiplexor. De todos modos no descarto moverme según los diferentes emuladores vayan implementado OSC52. Una feature que permitirá copiar y pegar fácilmente entre aplicaciones de terminal, como mi querido vim.

De momento el apaño me lo hace tmux, aunque no es perfecto.

Mapeo del teclado

En el portátil personal, un pequeño thinkpad x240 con teclado americano, sigo usando el layout español, al que estoy acostumbrado, sin embargo la teclas less y greater no existen y necesito mapearlas sobre la z, de modo que:

  • <: se logra con ALTGR + z
  • >: se logra con SHIFT + ALTGR + z

Para lograrlo hago uso de los comandos xev y xmodmap.

Con el primero identifico el keycode de la tecla z: el 52. Y con el segundo comando primero consulto el mapeo actual:

xmodmap -pke | grep 52, que es keycode 52 = z Z z Z guillemotleft less guillemotleft

Y luego lo modifico con: xmodmap -e "keycode 52 = z Z z Z less greater"

Un detalle a tener en cuenta es que este mapeo solo es válido durante el tiempo que dure la sesión. Para aplicarlo en cada inicio puedes ponerlo en el .zshrc, asi en cuanto habro la consola, que es lo primero que hago, se ejecuta el mapeo.

Bug de pop OS: no guarda la configuración hidpi entre sesiones

Esto me sucede en el thinkpad únicamente, para solucionarlo simplemente ejecuto: gsettings set com.system76.hidpi enable false

Tamaño de fuente de gnome shell bar

Otro detalle que siempre cambio es el tamaño de fuente de pop OS shell, es decir, de la barra superior. Para ello editamos en sudo vi /usr/share/themes/Pop-dark/gnome-shell/gnome-shell.css la clase stage y recargamos gnome shell (alt+f2 y r)

Chrome

Lo siguiente que instalo es chrome, porque aunque firefox me gusta mucho, realmente las devtools de chrome me gustan más. De todos modos, si no es porque Firefox ya viene de serie, también lo instalaría porque lo uso de segundo browser.

Bitwarden

Para poder continuar con la configuración de muchos aspectos necesito mis claves, asi que instalo bitwarden. Durante mucho años he usado Keepass, pero al final he pasado a bitwarden porque me resulta más conveniente y para mí están al mismo nivel en cuanto a fiabilidad.

Joplin

Igual que dependo de mis claves, también dependo de mis notas, donde apunto absolutamente todo. A la elección de la aplicación de notas también le he dedicado muchísimas horas y pensamiento, y al final me quedo con Joplin por estos motivos:

  • es opensource y está muy vivo
  • multiplataforma, con una app a la altura
  • toma de notas en markdown
  • web clipper casi mágico para chrome y firefox
  • sistema de plugins
  • se puede sincronizar con un server webdav, aunque desde hace poco tiene su propio servidor. Con lo que podemos logramos tener el control total de mi información

mi vida entera en joplin

mi vida entera en joplin

Gracias a todo esto, puedo ir madurando mis notas a lo largo de los años, curando la información poco a poco... el rollo Zettelkasten me vuelve loco :D. Con otros sistemas acabas preso de una empresa que puede dejarte tirado cuando menos lo esperes (eg. Notion). Y con otras infraestructuras más complejas, como por ejemplo un mediawiki o wikijs, aunque también son geniales, no me siento tan cómodo, la información no me resulta tan tangible: aquí al final estamos hablando de ficheros planos en markdown.

/home

Aquí obviamente tiro de los dioses rsync o tar para traerme todos mis repositorios y dotfiles.

dconf

La config de gnome se almacena en una db binaria similar al regex de windows. En ella tenemos algunas cosas como los keybindings:

  • /org/gnome/shell/keybindings/
  • /org/gnome/shell/extensions/pop-shell/
  • /org/gnome/desktop/wm/keybindings/
  • /org/gnome/settings-daemon/plugins/media-keys/

Esta base de datos por defecto se encuentra en ~/.config/dconf/user. Si la restauras desde un recovery, no hay problema. Pero si solo quieres consultar algunas keys, puedes abrir tu copia de seguridad del siguiente modo:

XDG_CONFIG_HOME=/media/davidpoza/bakcup/laptopbackup/home/davidpoza/.config dconf-editor

O puedes exportar o importar keys concretas así:

XDG_CONFIG_HOME=/media/davidpoza/bakcup/laptopbackup/home/davidpoza/.config dconf dump /org/gnome/shell/extensions/pop-shell/ > backuppp
dconf load -f /org/gnome/shell/extensions/pop-shell/ < backuppp

Gnome shell extensions

De nuevo, esto lo restauro siempre del backup, pero conviene saber donde están:

~/. local/share/gnome-shell/extensions

Por cierto, las extensiones de gnome suelen almacenar su config en dconf, asi que deberás restaurarlo como he indicado en el punto anterior.

Las extensiones que uso ahora:

  • GSConnect, equivalente a KDE connect para gnome. Para sincronizar el teléfono con el pc, ver las notificaciones, llamadas, etc.
  • Dash to Dock
  • Desktop Icons NG (DING): *Recuerda copiar un fichero de texto plano en el directorio ~/Templates
  • Emoji Selector: Esto es lo único que tenía windows y que linux no🤔... ahora ya ni eso jajaja.
  • Caffeine: Para anular a voluntad el apagado automático del pc.
  • Pop Shell: El principal motivo para usar Pop.
  • Rounded Corners
  • Sound Input & Output Device Chooser: En época de pandemia y videoconferencias es un must have.
  • User Themes: Of course
  • Freon: Para mostrar temperaturas de cpu y ssd.
  • Resource monitor by OryOn: Super completo: para mostrar uso de cpu, ram, swap, red y disco.

Theme y fuentes

Si algo envidio de macOS no son los precios de sus dispositivos😂, es el mimo que le ponen a su UI. Por suerte gnome está a la altura con algunos themes como el que yo uso: WhiteSur. No obstante he de decir que el theme de popOS me gusta bastante, no como el de ubuntu ejem ejem....

Recomiendo su instalación desde el script: https://github.com/vinceliuice/WhiteSur-gtk-theme

macbook

En cuanto a fuentes, uso las siguiente: fonts

VSCode

Hace ya tiempo que me quedé con vscode, aunque sublime o atom fueron buenos, pero ya son pasado. Mi configuración ya estará restaurada en este punto porque va en el /home, no obstante conviene tener claro donde está:

  • ~/.config/Code/User/settings.json
  • ~/.config/Code/User/keybindings.json
  • ~/.config/vscode/extensions

Mi lista de extensiones a día de hoy:

  • Arduino
  • Auto Rename Tag
  • Back & Forth: Algo parecido a los botones atrás y adelante del browser 😋
  • Better Align
  • Bookmarks
  • Bracket Pair Colorizer
  • C/C++
  • Color Highlight
  • Color Picker
  • Conventional Commits
  • Debugger for Chrome
  • Docker
  • DotENV
  • Dracula Official (my theeme actual)
  • ESLint
  • file-icons
  • Git graph
  • GitLens
  • Import cost
  • Json Editor
  • Markdown Preview Enhanced
  • Markdown Shortcuts: Con esta puedo escribir markdown con los mismos atajos que uso en Joplin 😄
  • Map for VSCode: Para preparar presentaciones en markdown
  • Polacode
  • Regex Copy or Cut
  • Sort Lines
  • SQL Formatter
  • TODO Highlight
  • XO
  • YAML

Docker

Qué haríamos sin contenedores hoy en día.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Añadimos a nuestro usuario al grupo docker para poder usarlo sin sudo:

sudo groupadd docker
sudo gpasswd -a $USER docker

NVM

Sin duda la forma más conveniente de instalar node. Si todos tus proyectos no usan docker, al menos podrás cambiar cómodamente entre versiones de node.

Eso si, te recomiendo encarecidamente algún plugin para la shell que te indique en qué versión estas en cada momento. Yo uso el theme p10k. Se activa como "nvm" dentro de la lista POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS.

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.37.0/install.sh | bash
bash install_nvm.sh
nvm --version
nvm ls-remote
nvm install 10.16.1
nvm install 14.15.4

OBS

Sí, OBS, porque no hay que ser streamer o youtuber para darse cuenta de que es una joyita. Si quieres grabar una demo a tus compañeros o grabar una reunión, ahí está OBS para ayudarte.

sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt install obs-studio

Peek

Para grabar pequeños clips en formato gif, muy útil para documentar una pull request

Flameshot

Para hacer capturas/screenshots con indicaciones como flechas o texto

Otros programas

Otras aplicaciones que no tienen tanto que ver con el desarrollo web pero que siempre instalo:

  • Arduino IDE
  • Audacity
  • Gimp: Aunque últimamente estoy usando Photopea, un editor de imagen online
  • scrcpy: Para hacer mirror del teléfono
  • Timeshift: Para los backups
  • Darktable: Equivalente a Adobe lightroom
  • Fritzing: Para el diseño de circuitos impresos
  • Barrier: Si no me equivoco es la base de la que salió Synergy, una aplicación para compartir teclado y ratón entre varios equipos, algo asi como un kvm por software.
  • Filezilla
  • MusicBrainz Picard: Me gusta tener mi colección de música organizada en local.
  • GSmartControl: Similar a Crystaldisk en windows, para ver el estado del ssd y estadísticas: mi equipo principal lleva 6000h de uso y unos 15TB escritos, cuando su vida útil se estima en 200TBw. Asi que está nuevo.