Archivo de la categoría: Tutoriales

Volviendo a intentar aprender bien bien Vim

Es de esas cosas recurrentes que me vienen para sentirme realizado, programar en ensamblador en Z80, aprender a usar bien bien Vim.

Y en eso vuelvo, a ver yo creo que ya cualquier hijo de vecino sabe el :q! , :w , :wq , el rollo de buscar con / y n y shift+n. Y ya para coronar el famoso :set number y :set nonumber. Lo que no trago es el tema de usar h j k l para moverme pero bueno. Pero me pierdo cuando me aparecen varios paneles en la pantalla al final tiro de :q

Y claro pues si te apañas y tal, pero después vas a un editor de código come ram y peor privativo, o vas a algo mas liviano como mi querido Geany y dices como hago el autocompletado de estos como poco primero. Pues a ver ya esta ya te sientes inútil con Vim.

Pero es que he visto gente (me gustaría poner el nombre pero tendría que preguntarle) muy buena usando el Vim como verdadero y único editor, y flipás sin gastar RAM y CPU a lo tonto (y si me apuras sin gastar píxeles de pantalla a lo tonto) y sin dar paseos al ratón por la mesa, sin levantar las manos del teclado.

¿Y que hacemos con neovim? Pues de momento me esta llamando mucho la atención, el tema asíncrono y que le da un poco de vida al Vim.

Me falta entender y encontrar un buen gestor de paquetes y saber cuales son «los paquetes» estándar…si el rollito este que se sufre estos años con NPM o Pip, mucho nos reíamos de las guerras de editores de texto, pero al menos no era una peli de chinos donde salen un motón a la vez se pegan rápido rápido y no sabes a que caballo ganador apostar tu tiempo en aprenderlo. Por cierto no hay un único gestor de paquetes, ya el retorticimiento de lo torcido…pero bueno ahí esta Python con los miles de inventos…o js con npm y yarn.

Así que en esa estamos, y gracias a victorhck que esta haciendo mucha labor educativa y desde aquí se lo agradezco (aunque cuando lo conocí físicamente en las jornadas hacker de la EKO estuve un poco apagado…lo siento) y os pego links de su labor:

Después he encontrado cosas como:

  • VimAwesome: un listado de los paquetes de vim (no se si estarán todos pero eso parece) con un buscador y una ficha muy visual y estética.
  • Neovim en la wiki de archlinux: nunca he usado esa distribución pero todos amamos su documentación que nos ha sacado de muchos problemas.

Y de el señor Santos Gallegos el cual no tengo el placer de conocerle y que creo que será difícil porque esta del otro lado del charco:

Después la persona que no puedo nombrar (respeto su privacidad) me mando hablando de este tema estos días un dotfile (es curioso, la gente comparte su fichero de configuración orgullosamente por internet) que supuestamente es el principio y el fin de todo lo que necesitarías, os lo pego pero yo voy en plan rollo minimalista y poco a poco ir metiendo cosas en la configuración y entendiendo porque, pero bueno lo pongo el link The Ultimate vimrc .

Perdón añado uno que se me olvido: awesome-neovim

Bucle en bash al revés «padding» de 3 ceros

Una tontaá que os pongo porque me parece curioso, tenía que renombrar unos ficheros hacia adelante para hacer hueco entre medias, los ficheros eran <nombre>.<cifras>.md .

Tenemos el seq en GNU/Linux y en otros Unix, entonces es:

for i in $(seq -f "%03g" 13 -1 7)
do
  <mi código>
done

Odia a tu enemigo pero aprende de el: live coding o hot reload

Ahora las «nuevas religiones» disfrazadas de psicología barata + neoliberalismo donde te dicen «vive como un castrado y trabaja como un gilipollas que otros necesitan hacerse ricos de tu sudor», el odio esta prohibido, pues no hijo no, hay que odiar y pensar porque odias, para que no sea un odio irracional y ni un paso atrás.

Pues el famoso Live Coding o Hot Reload del que chulean mucho gilipollas de portátil blanco con manzana de los que dicen «tío, macOs es unix» (hay que ser tonto o mala persona para intoxicar con semejante mierdas y verdades a medias) con sus IDEs modernos y sus lenguajes modernos.

Pues si, odia, pero mola lo de que «algo automágicamente» te compile o relance el proyecto cuando cambias cosas.

Pues lo puedes hacer bien en 4 lineas, si repitió en 4 lineas de bash, y en plan bien no usando una espera activa (es decir quemando CPU en un bucle infinito y sleeps de un segundo) si no usando la maravilla que trae GNU/Linux de Inotify y su comando para shell en Inotify-tools .

En mi caso quería hacer un diagrama con plantuml y hacerlo en plan en una pantalla el editor y el otro el resultado:

file=$1
dirname=$(dirname "$1")
basename=$(basename "$1")
filename=${basename%.*}

java -jar plantuml.jar "$1"
xdg-open "${filename}.png"

inotifywait -m -e create -e modify -e close_write "$dirname" |
while read filename eventlist eventfile
do
  java -jar plantuml.jar "$1"
done

Esta guardado en el git plantuml-watch .

Por cierto os preguntaréis como funciona, básicamente el inotifywait llena el stdout y lo pipeo hacia el read como si fuera un fichero y voy esperando por nuevas lineas. Y también te preguntarás por que monitorizo mas eventos que solo el modify, pues porque el editor que suelo usar es Geany y el mamón hace unas rayadas a bajo nivel en vez de editar el fichero, es como que crea uno temporal en el mismo directorio y copia (moviendo) el contenido al que esta editando.

FZF: El buscador fuzzy para gnu/linux

Puede que sea ya agua pasada o no este de moda, pero para quitarme jaquecas al buscar en el historial de comandos porque muchas recuerdo el comando por el medio y no se como empezaba y además «el buscador clásico» solo ofrece una alternativa a la vista.

Pues recordé el famoso fuzzy search (que por desgracia lo use en el asqueroso pycharm, mierda puta para hacer desarrolladores blandengues y dependientes de software privativo) y recordé que había fzf (picado en go pero bueno dicen que hay alternativa en rust).

Encontré este genial articulo de un tal Alejandro Amaral sobre el fzf con el título de: FZF – EL buscador *nix.

Al que añado mi salsa personal:

  • para instalarlo, por suerte ya esta en casi todas las distribuciones de forma oficial, por ejemplo en debian es:
    $ apt install fzf
  • Después yo de momento he metido solo lo de los «atajos de teclado» y no lo del ** o lo de kill desde fzf.
    • ctrl+r: te sale el fzf buscando en el history de comandos
    • ctrl+t: mientras estas escribiendo un comando te sale el fzf buscador desde el directorio que estas y buscas y te lo pone como path del comando.
    • Para instalarlo se da acceso al script en el .bashrc de tu usuario, yo lo tengo en el final casi:
      #fzf
      
      source /usr/share/doc/fzf/examples/key-bindings.bash
  • Si lanzas el fzf a mano, te sale un buscador de solo los ficheros desde el path que estas ahora mismo en la shell.
  • Y después trucos:
    • Para buscar en otro path e incluso mas cosas que ficheros es:
      $ find /tmp 2>/dev/null | fzf
    • Y para usar el fzf en otro comando es:
      cd $(find / 2>/dev/null | fzf)

Y eso es fzf, no se si quema mas CPU y o RAM frente a «los buscadores clásicos» pero ayuda bastante sobre todo cuando te acuerdas de cosas de enmedio de lo que buscas.

Getting Things Done: versión Miguel

Ya hace años de la charleta Getting Things Done sobre  de Netskaven en el Hacklab de Vallekas llamado La brecha digital. No se si yo estaba viviendo buenos tiempos, que me daba tiempo a tener un tiempo personal pleno…y por eso no la vi como un rollo para la vida personal mas plena, si no la tontería de los pringados con ordenador de manzanita que se autoexplotan en los curros de informática (manda cojones, la gilipollez máxima). Pero es que el señor Netskaven tenia razón…cuando te falta tiempo en las horas importantes de tu día, las tuyas, no las que das mal pagadas por el empresario. A parte creo que no entendí lo de que podía haber varias listas de to-do y que iba a ser todo un batiburrillo, mil perdones Netskaven.

Pregunta:

¿No os ha pasado alguna vez que estando ya ha ultimas horas de la noche en ese momento libre que le robas a Morpheo…que estas con el run-run de querer hacer algo productivo y no desperdiciar esas pocas horas jugando a un videojuego…pero no sabes en que jaleo de los miles que tienes abierto meterte?

¿No tenéis algunas veces cansancio mental de llevar tantas cosas personales que te alegran mientras estas esclavizado en la cabeza ocupando sitio mientras pasas las horas esclavizado?

Pues ahí es donde entra el GTD.

Después de leer de todo por internet, hacer memoria de la charleta de Netskaven (porque el git de las charlas de LabrechaDigital esta caído) y cagarme en todo con la mierda de articulo de la wikipedia española y la mierda de diagrama…parecería si fuera paranoico que lo ha escrito alguien que quiere fomentar la venta del libro…al contrario que algunos juegos de mesa que el articulo de la wikipedia te da el reglamento….y con un poco de maña, tijeras, pegamento  o si eres pro una impresora 3D, te haces con tu versión del juego de mesa.

He hecho un compendio, del diagrama GTD, por eso le he dado la versión miguel, es un diagrama de flujo (para diagrama de flujo cañero los diagrama Drakon de la Unión Soviética mas o menos al uso que se usaban mucho en los 80 cuando los Spectrum. Y esta hecho con mi querido PlantUML por el rollo de que paso andar ahí perdiendo el tiempo colocando las cosas, la vida es mejor en Everything-as-Code .

Os pego el código.

@startuml
title Get Things Done (Miguel version)

legend top right
  * Revisar Periodicamente (diario, semanas, cada hora)
  * Tipos de Bandejas
  ** Calendario
  ** Ejemplos:
  *** Prioritario
  *** Personal
  *** Trabajo
  *** Familia
  *** Proyecto X
  * El orden de revisón de bandejas lo eliges tu,
  salvo calendario que es la primera.
  * Tener las bandejas y calendario en el móvil.
  * Nuevo proyecto sera tareas: crear bandeja, listar subtareas, ...
  * Metodología:
  ** Recopilar
  ** Procesar
  ** Organizar
  ** Revisas
  ** Hacer
  * Evitar complejas relaciones de tareas
    (intentar que sean atómicas).
endlegend

:Recopilar;
split
  :Cosas;
split again
  :Notas;
split again
  :Emails;
split again
  :Bandeja X]
split again
  :Bandeja Y]
endsplit
->Procesar;
:¿Qué es?;
if (¿Se puede hacer?) then (SI)
  if (¿En un paso?) then (NO)
    split
      ->Nueva tarea;
      :Nuevo proyecto|
    endsplit
    detach
  else (SI)
    if (¿Se tarda +2 min?) then (SI)
      :¡Hazlo!>
      detach
    else (NO)

      if (¿Es mio?) then (NO)
        split
          ->Nueva tarea;
          :Esperando por "X"|
        endsplit
        detach
      else (SI)
        if (¿Tiene fecha?) then (SI)
          split
            ->Nueva tarea;
            :Meterla calendario]
          endsplit
          detach
        else (NO)
          split
            ->Nueva tarea;
            :Bandeja: XXX]
          endsplit
          detach
        endif
      endif
    endif
  endif
else (NO)
  split
    ->Eliminar;
    :Papelera/
    detach
  split again
    ->Conservar/Incubar;
    :Bandeja: Algún día / quizá]
    detach
  split again
    ->Archivar;
    :Referencia;
    detach
  endsplit
endif
@enduml

Y os pego una imágen svg…que he retocado un poquito.

Y la herramienta para llevarlo acabo pues voy a probar con
Simpletask, app software libre que esta en fdroid de mis amores. Y tener el diagrama en escritorio principal del móvil (cómo icono).

Manual en español de Libreoffice: Domando al Escritor

Gracias al comentario Swicher en un pequeño articulo que hago sobre lo que busca la gente: Ayudando a los que buscan: tutorial libreoffice

Y Swicher dijo:

Swicher
2020-02-11 a las 08:11

También esta Domando al Escritor enfocado en LibreOffice Writer y que podría interesarle a mas de uno.

Gracias por el comentario Swicher.

 

Trucos: Debugger de js/ecmascript en los navegadores

Al final siempre te despiertas y aprendes algo nuevo, o el refrán al revés.

El console.log es nuestro amigo desde hace años, no se si existió antes de otro viejo amigo que se fusionó Firefox, el plugin Firebug.

He encontrado hace unos días este listado de trucos (escrito en el idioma de «chespir«):

JavaScript developer must know these Console methods.

Hay cosas curiosas que no sabía cómo:

console.table(tabledata, tablecolumns)

Para pintar un objeto o un array en una tabla en log del debugger.

console.time(label) & console.timeEnd(label)

Para pintar cuanto tarda en ejecutarse un trozo de código encerrado entre ellas.

console.assert(expression, message)

Rollo como cuando metes ese unicornio que no existe en las putas empresas españolas, tests. Pues te hace lo mismo, te muestra el mensaje si se cumple la condición.

Ya veis, el tonto afirma, el sabio duda.

De joven creía que los lenguajes de programación no deberían tener versiones

Vaya título mas largo que me he marcado, nota todavía me siento joven, pero si un día un psicópata no religioso me apuñala espero que no pongan en las noticias de la tele «el psicópata en su camino asesino a varias víctimas entre ellas un joven de 40 y pico años….».

Pues eso que gracias al comentario de Rotietip en Cosas que odio de los lenguajes de programación, releerme lo que escribí hace 3 años y los links que me ha puesto,  me ha venido a la memoria mis recuerdos mozos, de cuando llevaba el pelo largo y camisetas metaleras, ahora…camisetas metaleras.

Y en aquellos tiempos, pensaba «¿¿Cómo un lenguaje puede tener versiones??», pensaba que un lenguaje debe ser sagrado y perpetuo como las tablas de la ley escritas en piedra, y a parte de por ser una puta mierda y solo productos comerciales y no tecnologías, las mierdas de lenguajes de programación que inventaba Micro$oft, porque que si había m$-visualbasic5, m$-visualbasic6….

No se en que momento cambio mi pensamiento, porque también recuerdo ver con cara-asco lo de la fiesta de javascript y sus versiones y su «live standard» que se basa en que toda la azúcar sintáctico e inventos varios se transpila a versiones mas antiguas de javascript.

¿Y ahora en que piensas Miguel?

Pues he matizado ese pensamiento, y pienso que UN LENGUAJE ES UNA PUTA MIERDA SI NO ES DE LA COMUNIDAD Y NO SE ESTANDARIZA POR UN COMITÉ .

Si el lenguaje se lo inventa una empresa y hace  con el lo que le sale de los cojones y con cada cambio de versión destroza las cosas porque le sale de los cojones…porque algunas veces los destrozos son necesarios para evitar canceres…pero no porque te sale de los cojones. Y ya para mas inri, si no es un estándar abierto y libre, y necesitas por cojones su compilador de pago o no pero no libre, pues ojalá te pongan una bomba en la empresa cuando no este ni el personal de limpieza, ni los trabajadores mal pagados, solo los putos comerciales y jefes y demás gente que chupa del bote sin dar palo al agua y que solo jode la marrana. Y reviente pero no os mate instantáneamente y os de tiempo a saber que vais a morir y que la mierda de vuestros intestinos desparramados os haya salpicado la cara siendo el sabor a mierda último que saboreareis en vuestra puta vida.

Me «quedaó» agusto con la maldición gitana.

Dicho esto, me acuerdo del caso Perl 6 cambio de nombre a Raku básicamente porque cambia tanto de Perl 5 a 6 que se vuelve incompatible y para que andar fastidiando.

O el rollo de C++ y sus versiones que mas o menos lo que hacen es ir adoptando lo que avanzando las librerías boost que te dan cosas de los lenguajes modernos de programación.

Por cierto a Python2 le quedan 18 días vida según la fecha de publicación de este articulo. Aunque queréis que os cuente un secreto…es mentira, python2 le quedan mínimo 10 años de vida en las cárnicas de mierda que por hacerse los modernos dejaron de un lado la mierda de java con spring para sus proyectos de bancos o de entidades públicas a golpe de sobre y abrazaron python2. Y después en las distribuciones de GNU/Linux 5 años o así seguirá vivo porque hay mucho proyecto legacy que lo usa…como paso con librerías GTK2 o SDL1.

Y os dejo con un consejo niños, no ejecutéis los scripts bash como:

$ sh mi_rechulon_script_en_bash_porque_me_siento_un_juaker.sh

Si no:

$ chmod 700

$ ./mi_rechulon_script_en_bash_porque_me_siento_un_juaker.sh

O

$ bash mi_rechulon_script_en_bash_porque_me_siento_un_juaker.sh

Salvo que el shebang lo tengáis como:

#! /bin/sh

Os lo digo porque hace unos meses me encontré a UN SENIOR DEVELOPER PRO OPEN SOURCE PERO QUE USO WINDOWS (podía ser peor y usar Mac) que no tenía ni guarra y se quejaba de los scripts bash no le funcionaban…no te jode…si los lanzas con sh pierdes toda la compatibilidad de bash porque:

bash != sh

Powerline Docker: Si existe y es fácil de instalar

De la saga peliculera: Powerline: configurandolo para Bash y GNU/Linux (of course) y mi duda si había un segmento para vigilar docker.

Pues si, lo hay y se llama: Powerline Docker

Y para instalarlo, primero tienes que tener instalado el Powerline (revisa el anterior link de arriba) y después instalarlo con:

$ pip install powerline-docker

Y después la coña marinera de añadir el juego de colores…debería ser distinto en plan cargarlo de un fichero que venga adjunto al plugin.

Añadir a:

/home/<usuario>/.config/powerline/colorschemes/default.json

    "docker":                    { "fg": "gray8",           "bg": "darkestblue", "attrs": [] },
    "docker_running":            { "fg": "green",           "bg": "darkestblue", "attrs": [] },
    "docker_paused":             { "fg": "brightestorange", "bg": "darkestblue", "attrs": [] },
    "docker_exited":             { "fg": "brightred",       "bg": "darkestblue", "attrs": [] },
    "docker_restarting":         { "fg": "gray10",          "bg": "darkestblue", "attrs": [] },
    "docker:divider":            { "fg": "gray4",           "bg": "darkestblue", "attrs": [] }

Añadir el segmento a vuestro fichero de configuración de shell:

{
	"function": "powerline_docker.docker",
	"priority": 30
},

Y después el típico replace del demonio:

$ powerline-daemon --replace

Y ya esta:

Y os saldrá el emoji de la ballenita con el contador de contenedores en funcionamiento en mi caso solo 1 y 13 contenedores parados.

Por cierto las frutitas que veis es un segmento que he hecho.

Powerline: configurandolo para Bash y GNU/Linux (of course)

No tengo tiempo para escribir, y estoy hablando del famoso powerline que ha habido mucho artículo en la blogosfera hispana estas últimas semanas.

Y paso como con SQLite la gente mucho hablar, que si tal que si cual, pero enseñame la mandanga, porque puedo hablar del espíritu de la gominola y pero si no me he manchado las manos es como ser «entrenador de fútbol de barra de bar», y tengo que reconocer que SQLite ha mejorado pero por ejemplo no trae comprobación de tipos por defecto y aquí te lo explicaba en Domesticando SQLite.

Hace unos años un excompa de curro que por desgracia usaba Apple, nadie es perfecto, puede que ya haya gente nativa digital en el mundo libre, pero muchos hemos usado cosas asquerosas como m$-win98 y andabas que si cygwin, dev c++ y al final decías «¡Que cojones! ¡¡¡Vamos a ser serios y valientes y ni particionar disco duro, ni ostias, todo para GNU/Linux!!!» Y pasado unos meses ya estas siendo libre. En mi caso la última vez que hice el gilipollas fue con WinXP haya por 2004, después, ya los discos duros están eticamente configurados.

Pues lo lamentable de los maqueros, es que no se si por secta o por gilipollez parecida a un adolescente que se gasta un pastizal en una zapatillas de marca o unos vaqueros (en mis tiempos mozos eso pasaba), o por economía porque tiene que ser muy vergonzoso gastarte un pastizal en portátil que le cambias el sistema operativo y ya no es elitista y encima ves que va mejor y que podrías haberte gastado menos dinero.

Pero bueno esta gente intenta acercarse a como vivimos bien la gente en GNU/Linux, pero sin dar el paso, y este excompa me enseño el rollito de que usaba mucho la terminal y tenia un invento que no se si sería powerline o algo parecido.

Pasaron los años. Y eso la blogosfera hispana empezaron a hablar de Powerline.

Pensé, voy a ponerlo y catástrofe, no funciona bien. Y a partir de este punto os voy a contar la mandanga de Powerline y como ponerlo rechulon y útil.

¿Qué es el powerline?: Es un script python para tener una linea de comandos hipervitaminada. Pasamos de:

A esto:

También se puede usar como barra de aplicaciones en I3 hasta barra de estado para Vim, entre otros. Pero en este articulo nos centramos en la shell de toda la vida.

El powerline se pueden configurar zonas/lados, en una shell típica tienes el prompt a la derecha. Pero el powerline soporta derecha, izquierda e incluso arriba.

Malas noticias, Bash no soporta lado derecho, solo lado izquierdo.

Instalar Powerline, puedes o instalarlo desde pip pero es mas recomendable (aunque no sera la última versión) instalarlo desde el gestor de paquetes del GNU/Linux en mi caso LinuxMint:

$ sudo apt install powerline fonts-powerline

Para activarlo en Bash tiene su miga porque tienes que editar tu fichero de configuración de usuario en:

/home/<usuario>/.bashrc

Añades al final el siguiente trozo de código que le dice que lance el demonio de powerline y ejecute el powerline

# Powerline
if [ -f /usr/share/powerline/bindings/bash/powerline.sh ]; then
	powerline-daemon -q
	POWERLINE_BASH_CONTINUATION=1
	POWERLINE_BASH_SELECT=1
	source /usr/share/powerline/bindings/bash/powerline.sh
fi

Y lo mejor salir y entrar de la terminal para que cargue la nueva configuración.

La configuración de Powerline por defecto es chula, pero se le puede dar mas cera, en la documentación dice que merguea el fichero de configuración por defecto del sistema con la que tengas personal en tu usuario ¡¡MENTIRA!! . La que tengas en personal te la machaca, sobre todo los segmentos. Los segmentos son los trozitos del separados del prompt. Solución al machaque insensible, pues copiarte el fichero de configuración del sistema y modificarlo a tu gusto.

Entonces tienes que hacer:

$ cd ~
$ mkdir -p .config/powerline/themes/shell/
$ cp /usr/share/powerline/config_files/themes/shell/default.json /home/<usuario>/.config/powerline/themes/shell/
$ <editor_favorito> /usr/share/powerline/config_files/themes/shell/default.json

Hay plugins para Powerline yo uso powerline-gitstatus, después os cuento como se instala, pero antes os muestro mi configuración, os explico cosas y tal:

{
	"segments": {
		"left": [
			{
				"function": "powerline.segments.common.time.date",
				"priority": 20,
                "args": {
					"format": "%H:%M"
				}
			},
			{
				"function": "powerline.segments.shell.mode"
			},
			{
				"function": "powerline.segments.common.net.hostname",
				"priority": 10
			},
			{
				"function": "powerline.segments.common.env.user",
				"priority": 30
			},
			{
				"function": "powerline.segments.common.env.virtualenv",
				"priority": 50
			},
			{
				"function": "powerline.segments.shell.cwd",
				"priority": 10
			},
			{
                "function": "powerline_gitstatus.gitstatus",
                "priority": 90
            },
            {
				"function": "powerline.segments.shell.jobnum",
				"priority": 20
			},
			{
				"function": "powerline.segments.shell.last_status",
				"priority": 20
			}
		]
	}
}

«Cosas» de la configuración:

  • Es un fichero json
  • Si necesitas saber si la configuración esta bien, Powerline te da un comando para probar si la configuración (usando la de sistema y la tuya a la vez que es como sera) es:
    $ powerline-lint

    Y te devolvera errores o mejor ninguno.

  • Como estamos en Bash, solo usamos el subarray «left«.
  • El orden es de arriba abajo, y en la pantalla saldran de izquierda a derecha.
  • Cada hash, dict, array asociativo o platanos con chocolate (aunque mas o menos se esta poniendo de moda lo de dict) es un segmento (un trozito del prompt), y es:
    • function: el segmento a poner, podeis ver que son en plan modulos de python, «modulo.submodulo.submodulo.funcion». Y por ver los que hay (hay muchos muchos y muy curiosos en el core y como plugin, que si batería, que si carga de cpu, metereología….) :
      • powerline.segments.common.time.date: segmento para poner fecha y tiempo. Si ya se que en el escritorio, en el movil y puede que en la muñeca tienes un reloj, pero es muy útil para ver a si a ojo cuando lanzaste un comando o cuanto tardo un comando en terminar.
      • powerline.segments.shell.mode: el modo de la shell, si esta en el normal no aparece.
      • powerline.segments.common.net.hostname: el nombre la maquina, solo sale si te conectas a ti mismo por ssh.
      • powerline.segments.common.env.user: el usuario que estas, junto con el anterior poco útil.
      • powerline.segments.common.env.virtualenv: si estas usando virtualenv te pone el nombre. En mi caso tampoco muy útil, todos estos inventos (venv, chroot…) con el invento de docker es el que mas juegas.
      • powerline.segments.shell.cwd: el path donde estas trabajando, vamos como el prompt normal (creo que se puede vitaminar con la configuración).
      • powerline_gitstatus.gitstatus: este es uno que me hizo ponerme serio con powerline, en el segmento te muestra muy resumido mucha información si el directorio es un proyecto git, desde la rama que estas, hasta los commits que tienes pendientes de subir, ficheros añadidos y sin añadir al siguiente commit. Este viene de un plugin externo, después os comento como se instala.
      • powerline.segments.shell.jobnum: no uso mucho el rollo de mandar trabajos a background, pero cuando lo uso mola saber cuando han terminado la ejecución, muestra en amarillo un contador de trabajos en background. También útil cuando se te escapa un & y no te has dado cuenta que has mandado a background una ejecución.
      • powerline.segments.shell.last_status: otro muy útil, ya sabéis que en GNU/Linux cualquier comando que lances devuelve 0 si ha terminado correctamente y un numero distinto si mal. Este segmento solo aparece cuando el ultimo comando ha salido mal y en un rojo alarma, muy útil porque hay comando que no devuelven ninguna salida de texto pero si petan.
    • priority: un valor numerico que dice la prioridad del segmento en mostrarse, se ocultan primero los que tienen los numeros mas grandes, cuando:
      • la linea de prompt es mas grande que el ancho de ventana/pantalla.
      • cuando supera un espacio para dejar el escribir al usuario, en principio se puede configurar pero no funciona creo que apesta a bug.
    • args: es un dict json donde pasarle parametros al segmento para personalizarlo, el único que tengo configurado yo es el del tiempo que le he puesto solo para mostrarme las horas y minutos, hay que mirar en la documentación del segmento que parametros acepta:
      "args": {
      	"format": "%H:%M"
      }

Y ya esta, no es muy complicado, después hay ficheros de configuración de powerline o para separar la configuración de los segmentos de la configuración de diseño, también hay un fichero de configuración de colores, pero con los que vienen por defecto a mi me sobran.

Aunque autocarga la configuración cada vez que se cambia (un hotreloader como dicen los modernos), algunas veces no lo hace y puedes forzar la recarga con:

$ powerline-daemon --replace

Instalar Powerline-gitstatus ,tiene su miga porque no es solo instalarlo hay que meterle configuración de color por defecto si no peta.

Instalarlo es:

$ pip3 install powerline-gitstatus

Y tienes que hacerte los directorios de las configuraciones de colores:

$ mkdir -p /home/<usuario>/.config/powerline/colorschemes/shell

Y después copiar los ficheros (ya sabes que el mergeo no funciona bien) de por defecto del sistema. El solarized no se si es un cargocult pero a mi me petaba el powerline-gitstatus aunque no usara ese esquema de colores, total no molesta mucho:

$ cp /usr/share/powerline/config_files/colorschemes/shell/default.json /home/<usuario>/.config/powerline/colorschemes
/shell
$ cp /usr/share/powerline/config_files/colorschemes/shell/solarized.json /home/<usuario>/.config/powerline/colorschemes
/shell

Y añadir el juego de colores de powerline-gitstatus, por no liar os pego los dos ficheros mios, pero basicamente son los valores para powerline-gitstatus:

default.json

{
	"name": "Default color scheme for shell prompts",
	"groups": {
		"hostname":         { "fg": "brightyellow", "bg": "mediumorange", "attrs": [] },
		"environment":      { "fg": "white", "bg": "darkestgreen", "attrs": [] },
		"mode":             { "fg": "darkestgreen", "bg": "brightgreen", "attrs": ["bold"] },
		"attached_clients": { "fg": "white", "bg": "darkestgreen", "attrs": [] },
	"gitstatus":                 { "fg": "gray8", "bg": "gray2", "attrs": [] },
    "gitstatus_branch":          { "fg": "gray8", "bg": "gray2", "attrs": [] },
    "gitstatus_branch_clean":    { "fg": "green", "bg": "gray2", "attrs": [] },
    "gitstatus_branch_dirty":    { "fg": "gray8", "bg": "gray2", "attrs": [] },
    "gitstatus_branch_detached": { "fg": "mediumpurple", "bg": "gray2", "attrs": [] },
    "gitstatus_behind":          { "fg": "gray10", "bg": "gray2", "attrs": [] },
    "gitstatus_ahead":           { "fg": "gray10", "bg": "gray2", "attrs": [] },
    "gitstatus_staged":          { "fg": "green", "bg": "gray2", "attrs": [] },
    "gitstatus_unmerged":        { "fg": "brightred", "bg": "gray2", "attrs": [] },
    "gitstatus_changed":         { "fg": "mediumorange", "bg": "gray2", "attrs": [] },
    "gitstatus_untracked":       { "fg": "brightestorange", "bg": "gray2", "attrs": [] },
    "gitstatus_stashed":         { "fg": "darkblue", "bg": "gray2", "attrs": [] },
    "gitstatus:divider":         { "fg": "gray8", "bg": "gray2", "attrs": [] }
	},
	"mode_translations": {
		"vicmd": {
			"groups": {
				"mode": {"fg": "darkestcyan", "bg": "white", "attrs": ["bold"]}
			}
		}
	}
}

solarized.json

{
	"name": "Solarized dark for shell",
	"groups": {
		"mode": { "fg": "solarized:base3", "bg": "solarized:green", "attrs": ["bold"] },
        	"gitstatus":                 { "fg": "gray8", "bg": "gray2", "attrs": [] },
    "gitstatus_branch":          { "fg": "gray8", "bg": "gray2", "attrs": [] },
    "gitstatus_branch_clean":    { "fg": "green", "bg": "gray2", "attrs": [] },
    "gitstatus_branch_dirty":    { "fg": "gray8", "bg": "gray2", "attrs": [] },
    "gitstatus_branch_detached": { "fg": "mediumpurple", "bg": "gray2", "attrs": [] },
    "gitstatus_behind":          { "fg": "gray10", "bg": "gray2", "attrs": [] },
    "gitstatus_ahead":           { "fg": "gray10", "bg": "gray2", "attrs": [] },
    "gitstatus_staged":          { "fg": "green", "bg": "gray2", "attrs": [] },
    "gitstatus_unmerged":        { "fg": "brightred", "bg": "gray2", "attrs": [] },
    "gitstatus_changed":         { "fg": "mediumorange", "bg": "gray2", "attrs": [] },
    "gitstatus_untracked":       { "fg": "brightestorange", "bg": "gray2", "attrs": [] },
    "gitstatus_stashed":         { "fg": "darkblue", "bg": "gray2", "attrs": [] },
    "gitstatus:divider":         { "fg": "gray8", "bg": "gray2", "attrs": [] }
	},
	"mode_translations": {
		"vicmd": {
			"groups": {
				"mode": { "fg": "solarized:base3", "bg": "solarized:blue", "attrs": ["bold"] }
			}
		}
	}
}

Y ya sabéis si un restart del powerline-daemon y ya esta.

Y bueno por finalizar el articulo, os pongo los segmentos que echo en falta y que creo que no existen:

  • Un segmento que muestre el estado del watson es un tracker/contador de tiempo desde terminal (escrito en python) para en el curro cuando te preguntan en que has estado trabajando decir pues «he estado X horas mierda que necesita este cliente» yo antes usaba Hamster Applet pero se han metido en una rescritura del proyecto y se han cargado el soporte para cualquier cosa que no sea Gnome3.
  • Un segmento que muestre estado del docker (actualización: si hay…os debo un articulo), rollo contenedores levantados, caidos y alguna cosa mas.
  • Un segmento que te avise que el directorio es un montaje sshfs o así.
  • Un segmento que muestre un cita rollo el fortune.
  • Un segmento que muestre un string desde un api web o así, para enganchar resultados deportivos, valores de criptomonedas o votos en meneame.
  • Lo mismo pero pasando como argumento un comando a ejecutar.
  • La tragaperras que se hizo años para elbinario .

Y falta un awesome_list de powerline en el m$-github.