comma: el comando mas vago (y util) de Nix
El problema con nix run
En el post anterior hablamos de nix run: ejecutar cualquier programa sin instalarlo. Genial. Pero tiene un problema: necesitas saber el nombre exacto del paquete.
Quieres convertir una imagen? Sabes que el comando es convert, pero el paquete se llama imagemagick. Quieres un servidor web rapido? El comando es python3 -m http.server, pero el paquete es python3. Quieres comprimir un video? El comando es ffmpeg, y por suerte el paquete tambien, pero no siempre tienes tanta suerte.
En nixpkgs hay mas de 100.000 paquetes. Saber que paquete proporciona que comando no es trivial.
comma: el atajo definitivo
Comma es un programa que se instala como , (si, una coma). Lo que hace es magico:
# No tienes cowsay instalado? Da igual
, cowsay 'hola mundo'
# No sabes que paquete tiene convert?
, convert imagen.png imagen.jpg
# Necesitas ffprobe pero no recuerdas si es ffmpeg o libav?
, ffprobe video.mp4Comma busca automaticamente que paquete de nixpkgs proporciona ese comando, lo descarga, y lo ejecuta. Todo en un solo paso. Sin instalar nada permanentemente.
Como funciona por dentro
Comma usa nix-index, una base de datos que mapea comandos a paquetes. Cuando escribes , cowsay:
- Comma busca en la base de datos de nix-index: "que paquete proporciona el binario
cowsay?" - Encuentra que
cowsayesta en el paquetenixpkgs#cowsay - Ejecuta
nix run nixpkgs#cowsay -- 'hola mundo'automaticamente
Si hay varios paquetes que proporcionan el mismo comando, te pregunta cual quieres usar.
Instalacion
Si usas NixOS con flakes, una linea en tu configuracion:
# En tu flake.nix, importa nix-index-database y habilita comma
programs.nix-index-database.comma.enable = true;Si usas home-manager standalone (en Ubuntu, Fedora, etc.):
# En tu home.nix
imports = [ inputs.nix-index-database.homeModules.nix-index ];
programs.nix-index-database.comma.enable = true;Necesitas anadir nix-index-database como input en tu flake:
# En flake.nix inputs
nix-index-database = {
url = "github:nix-community/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs";
};La base de datos se descarga precompilada (no tienes que indexar nada tu), se actualiza automaticamente, y ocupa poco espacio.
El bonus: command-not-found mejorado
Cuando habilitas nix-index-database, ademas de comma obtienes un command-not-found mejorado. Si escribes un comando que no existe:
$ cowsay hola
cowsay: command not found
The program cowsay is provided by the following packages:
- nixpkgs#cowsay (cowsay-3.7.0)
You can run it with:
, cowsay holaEn vez del tipico "command not found" seco, te dice exactamente que paquete lo tiene y como ejecutarlo con comma. Es como tener un asistente en el terminal.
Ejemplos reales
# Necesitas ver el tamano de un directorio bonito
, ncdu /home
# Quieres un monitor de red rapido
, bmon
# Editar un JSON desde el terminal
, fx data.json
# Descargar un video de YouTube (sin instalar yt-dlp)
, yt-dlp 'https://youtube.com/watch?v=...'
# Hacer un benchmark de disco
, fio --name=test --rw=read --bs=4k --runtime=10
# Escanear puertos (sin instalar nmap)
, nmap -sT localhostCada uno de estos comandos: sin instalar nada, sin buscar el paquete, sin limpiar despues. Escribes , delante y funciona.
La diferencia con nix run
| nix run | comma (,) | |
|---|---|---|
| Necesitas saber el paquete | Si | No |
| Sintaxis | nix run nixpkgs#paquete -- args | , comando args |
| Multiples sources | Si (github:, ramas, etc.) | Solo nixpkgs |
| Velocidad primera vez | Igual | Igual + lookup en DB |
| Velocidad segunda vez | Instantaneo (cache) | Instantaneo (cache) |
En resumen: nix run cuando sabes exactamente que paquete y de donde. Comma cuando solo sabes el comando y quieres que funcione ya.
Por que esto importa
Comma elimina la ultima friccion que tenia Nix. Ya no necesitas saber como se llama el paquete. No necesitas buscar en search.nixos.org. No necesitas recordar la sintaxis de nix run. Solo necesitas saber el comando que quieres ejecutar.
Una coma. Eso es todo lo que separa "no lo tengo instalado" de "funciona".
Comentarios (0)
Sin comentarios todavia. Se el primero!
Deja un comentario