xfetch está escrito en Rust (edición 2024). Para compilar desde el código fuente, necesita Rust instalado (instálelo mediante rustup en rust-lang.org).
git clone https://github.com/xfetch-cli/xfetch.git
cd xfetch
cargo build --release
El binario se ubicará en target/release/xfetch.
cargo install --path .
Esto instala el binario en ~/.cargo/bin/xfetch.
El ecosistema de xfetch está organizado como una arquitectura multi-repositorio bajo la organización de GitHub xfetch-cli:
xfetch/
api/ # SDK de API para plugins (crate de Rust)
assets/ # Archivos de logo y banner
configs/ # Configuraciones predefinidas públicas
plugins/ # Implementaciones de plugins oficiales (espacio de trabajo)
web/ # Página de aterrizaje (Next.js)
xfetch/ # Aplicación CLI principal (Rust)
xfetch/)xfetch/
src/
main.rs # Punto de entrada
cli.rs # Análisis de argumentos CLI (clap)
config.rs # Carga de configuración JSONC
cache.rs # Almacenamiento en caché de datos con TTL
ui.rs # Orquestador de renderizado
ui/
nodes.rs # Preparación del árbol de renderizado
layout.rs # Despacho de diseños
logo.rs # Carga de logos (ASCII, imagen)
print.rs # Renderizado de salida a terminal
renders.rs # Implementaciones de renderizado de diseños
x.rs # Utilidades de expansión de rutas
info/
mod.rs # Estructura Info y orquestación
system.rs # Información de SO, kernel, red
software.rs # Información de shell, terminal, paquetes, usuario
hardware.rs # Información de CPU, GPU, memoria, disco, batería
plugins/
mod.rs # Descubrimiento y nomenclatura de plugins
install.rs # Instalación de plugins
manage.rs # Listado y eliminación de plugins
run.rs # Ejecución de plugins
api/)api/
crates/
plugin-api/
src/
lib.rs # Reexportaciones públicas
protocol.rs # Tipos del protocolo wire
entrypoints.rs # Ayudantes de punto de entrada para plugins
io.rs # Ayudantes JSON stdin/stdout
error.rs # Tipos de error
plugins/)plugins/
plugins/
animate-logo/ # Plugin de animación de logo
display-resolution/ # Plugin de resolución de monitor
docker/ # Plugin de estadísticas Docker
github-stats/ # Plugin de perfil de GitHub
music-player/ # Plugin de MPD y Spotify
theme-detection/ # Plugin de temas GTK/KDE
timezone/ # Plugin de zona horaria
user-info/ # Plugin de información de cuenta de usuario
weather/ # Plugin meteorológico
# Ejecutar todas las pruebas
cd xfetch
cargo test
# Ejecutar pruebas con salida
cargo test -- --nocapture
# Ejecutar una prueba específica
cargo test nombre_prueba
# Lint
cargo clippy
# Formateo
cargo fmt
# Verificación (compilación rápida, sin binario)
cargo check
# Probar un plugin de información mediante el protocolo JSON
echo '{"version":1,"kind":"info_provider","args":null}' \
| ./target/release/xfetch-plugin-my-plugin
# Probar un plugin de animación de logo
echo '{"version":1,"kind":"logo_animation","lines":["hello"],"args":{"fps":12}}' \
| ./target/release/xfetch-plugin-my-plugin
Los binarios de plugins deben seguir la convención de nomenclatura xfetch-plugin-<nombre> para que el núcleo pueda descubrirlos.
Los plugins se comunican con el núcleo de xfetch mediante un protocolo JSON sobre stdin/stdout:
use xfetch_plugin_api::{
read_info_plugin_args_or_default,
write_info_lines,
};
#[derive(Debug, Default, serde::Deserialize)]
struct PluginArgs {}
fn main() {
let _args = match read_info_plugin_args_or_default::<PluginArgs>() {
Ok(value) => value,
Err(err) => {
eprintln!("{}", err);
std::process::exit(1);
}
};
let lines = vec!["Hello from plugin".to_string()];
if let Err(err) = write_info_lines(lines) {
eprintln!("{}", err);
std::process::exit(1);
}
}
[package]
name = "xfetch-plugin-my-plugin"
version = "0.1.0"
edition = "2024"
[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"
xfetch-plugin-api = { git = "https://github.com/xfetch-cli/api", package = "xfetch-plugin-api" }
xfetch-plugin-api para los tipos de protocolocargo build --release se ejecute correctamentecargo test para verificar que todas las pruebas pasen| Categoría | Ubicación | Descripción |
|---|---|---|
| Pruebas unitarias | En cada archivo fuente | Pruebas para funciones individuales |
| Pruebas de integración | Submódulos de src/ | Pruebas para interacciones entre módulos |
| Pruebas de protocolo de plugins | api/crates/plugin-api/src/protocol.rs | Pruebas de serialización y validación |
x@xscriptor.comxfetch está licenciado bajo la Licencia MIT. Al contribuir, acepta que sus contribuciones se licenciarán bajo la misma licencia.