Deps.rs StatusGitHub Stars

Microfetch: Fetch Tool Mikroskopis dan Sangat Cepat

"Microscopic fetch tool in Rust, for NixOS systems, with special emphasis on speed"

Ditulis dalam Rust | Ditargetkan untuk NixOS


Sinopsis: Kecil, Cepat, dan Cantik

Bosku, ini dia Microfetch! Alat fetch yang saking kecil dan sederhananya, kecepatannya bisa bikin kita ketawa (sambil geleng-geleng kepala). Ditulis menggunakan bahasa Rust untuk menjamin kecepatan dan kemudahan maintainability-nya.

Bayangkan, Microfetch bisa berjalan hanya dalam sepersekian milidetik! Alat ini menampilkan sebagian besar informasi penting yang sering kamu lihat di komunitas seperti r/unixporn, tapi dengan satu tujuan: Menggantikan fastfetch di sistem penulisnya. Walaupun kustomisasi dilarang keras (kita akan bahas ini di bawah!), kamu dipersilakan menggunakannya di sistem kamu, karena alat ini memang 🚀 [sangat cepat](#benchmarks).

Fitur Utama (Fokus pada Kecepatan!)

Kalau ditanya fitur Microfetch, jawabannya simpel: Kecepatan! Tapi, tentu ada beberapa hal teknis yang patut kamu ketahui, terutama sebagai seorang Social Media Agency dan Biro Periklanan yang butuh alat kerja yang reliable:

[^1] Dengan Mold linker (aktif di paket Flake), ukuran binary turun menjadi ±350 KB, berkurang sekitar 20 KB.

Motivasi: Bukan Memecahkan Masalah Teknis, Tapi Tantangan Pribadi

Awalnya, penulis menggunakan Fastfetch. Alat ini sudah cepat, tapi sang penulis (yang mungkin mirip dengan prinsip Go Back To Door kamu, memilih jalan sendiri) menyadari bahwa ia tidak tertarik pada fitur-fitur tambahan Fastfetch. Sixel, konfigurasi yang rumit, atau banyak kolom info? Tidak perlu!

Motivasi utama Microfetch adalah menjawab pertanyaan: "Seberapa cepat sih saya bisa membuat *script fetch*?"

Microfetch dibuat dengan mengorbankan semua opsi kustomisasi yang disediakan oleh alat lain. Karena fetch script sudah menjadi semacam ritual inisiasi bagi pengguna Linux, dia memutuskan untuk membuatnya sendiri.

Filosofi Rust: Meskipun Rust dikenal dengan dependency tree yang besar dan waktu build yang lama, tim Microfetch berupaya keras menjaga dependensi minimal. Keuntungan menggunakan Rust adalah tooling yang luar biasa dan bahasa yang sangat kuat, memungkinkan Microfetch mencapai performa maksimum. Bahkan, Microfetch kini menggunakan handwritten assembly untuk optimasi di beberapa area! Tentu saja itu membuatnya lebih cepat.

Singkatnya: Ini adalah binary kecil, sangat opinionated, berukuran pas, dan memiliki kecepatan yang sangat mengganggu (saking cepatnya). Ini bukan memecahkan masalah teknis yang sulit, melainkan sebuah tantangan yang diciptakan sendiri. Mirip seperti Rube-Goldberg Machine, sebuah solusi yang rumit untuk masalah yang sederhana.

latest demo

Data Benchmark: Microfetch vs. Dunia Lain

Ini dia bukti klaim kecepatan Microfetch! Benchmark ini dilakukan menggunakan Hyperfine di sistem Desktop penulis dalam kondisi medium load*. Walaupun kecepatan bisa dipengaruhi oleh *race conditions atau konfigurasi kernel (tergantung hardware kamu), rata-rata waktu eksekusi Microfetch di bawah ini sungguh luar biasa:

Perbandingan Kecepatan Eksekusi (Diukur dengan Hyperfine)
CommandMean [µs]Min [µs]Max [µs]RelativeWritten by raf?
microfetch604.4 ± 64.2516.01184.61.00Yes
fastfetch140836.6 ± 1258.6139204.7143299.4233.00 ± 24.82No
pfetch177036.6 ± 1614.3174199.3180830.2292.89 ± 31.20No
neofetch406309.9 ± 1810.0402757.3409526.3672.20 ± 71.40No
nitch127743.7 ± 1391.7123933.5130451.2211.34 ± 22.55No
macchina13603.7 ± 339.712642.914701.422.51 ± 2.45No

Kesimpulan: Microfetch lebih cepat dari kompetitor lainnya. Hasil dapat berbeda tergantung perangkat, versi paket, dan konfigurasi sistem. Perhatikan nilai Relative Microfetch yang berada di angka 1.00, sementara Fastfetch ada di 233.00x lebih lambat, dan Neofetch bahkan 672.20x lebih lambat! Memang, kecepatan adalah alasan utama keberadaan Microfetch.

Profiling dan Alokasi

Untuk memastikan kecepatan yang konsisten, Microfetch menggunakan tools canggih:

Cara Profiling (Timing)

HOTPATH_JSON=true cargo run --features=hotpath

Cara Profiling (Alokasi Heap)

HOTPATH_JSON=true cargo run --features=hotpath,hotpath-alloc

Output JSON dari perintah di atas bisa dianalisis dengan tool CLI hotpath untuk melihat metrik performa secara detail.

Cara Instalasi (Khususnya Pengguna NixOS)

Catatan Penting Font: Kamu wajib punya font yang sudah di-*patch*Nerdfonts dan terminal emulator kamu harus mendukungnya. Microfetch menggunakan glyph Nerdfonts secara default.

Microfetch sudah tersedia dalam nixpkgs, membuatnya sangat mudah dipasang untuk pengguna NixOS:

1. Instalasi Permanen di NixOS

Tambahkan pkgs.microfetch ke environment.systemPackages kamu.

2. Menggunakan Nix Shell (Cepat Coba-Coba)

nix shell nixpkgs#microfetch

3. Jalankan Langsung dengan Nix Run

nix run nixpkgs#microfetch

4. Pengguna Non-Nix (Instalasi via Cargo)

Bagi yang tidak pakai Nix, kamu harus build Microfetch dengan Cargo. Saat ini, instalasi harus dari source (tidak dipublikasikan di Crates.io).

cargo install --git https://github.com/notashelf/microfetch.git

Kustomisasi (Jawabannya Singkat: TIDAK BISA!)

Kenapa Dilarang Keras?

Nah, ini bagian yang paling nyeleneh dan menunjukkan bahwa Microfetch memang program yang sangat opinionated.

Kustomisasi, dalam bentuk apapun (baca variabel lingkungan, parsing argumen CLI, atau membaca file konfigurasi), membutuhkan waktu dan sumber daya. Hal ini akan menggembungkan waktu eksekusi! Karena Microfetch adalah code golf challenge dan bukan sekadar program biasa, penulis memilih untuk tidak berkompromi sedikit pun soal kecepatan.

Tapi... Benar-benar Tidak Bisa?

Tentu saja ada jalan pintas, Bosku! Kamu bisa mengkustomisasi Microfetch dengan cara: mem-patch programnya.

Intinya: Jika perubahan kamu kecil, patching adalah solusinya. Jika perubahan kamu besar, lebih baik cari program lain yang memang didesain untuk kustomisasi!

Kontribusi dan Terima Kasih

Penulis Microfetch cenderung akan menolak penambahan fitur baru, namun kontribusi yang membantu meningkatkan performa sangat disambut baik.

Jika kamu tertarik untuk berkontribusi, kamu bisa menggunakan nix develop atau direnv allow jika menggunakan Nix Flake. Pengguna Non-Nix membutuhkan cargo, clang, dan mold.

Terima Kasih Spesial

Salut untuk semua kontributor yang membuat Microfetch makin cepat dan handal, termasuk: @Nydragon (Packaging Nixpkgs), @ErrorNoInternet (Performance & Code), @SoraTenshi (Tips), @bloxx12 (Performance & Benchmarking), @mewoocat (Logo NixOS ASCII), dan @sioodmy (Being cute!).


Diskusi Seputar Kecepatan Microfetch