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:
- Super Cepat (Ya, kita sebut lagi)
- Dependensi Minimalis (Membuat binary ringan dan *portable).
- Binary Super Kecil: Hanya sekitar ~370kb saja! (Bahkan bisa 350kb menggunakan Mold linker yang diaktifkan di paket Flake NixOS). [^1]
- Logo Keren NixOS (Sayangnya, distro lain... inferior katanya! 😂).
- Deteksi Info yang Handal, termasuk:
- Hostname/Username, Kernel (Nama, Versi, Arsitektur), Current Shell (termasuk trimming path), Current Desktop (DE/WM/Compositor), Penggunaan/Total Memori, dan Penggunaan/Total Penyimpanan untuk direktori
/.
- Hostname/Username, Kernel (Nama, Versi, Arsitektur), Current Shell (termasuk trimming path), Current Desktop (DE/WM/Compositor), Penggunaan/Total Memori, dan Penggunaan/Total Penyimpanan untuk direktori
- Menghormati Spesifikasi
NO_COLOR.
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.

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:
| Command | Mean [µs] | Min [µs] | Max [µs] | Relative | Written by raf? |
|---|---|---|---|---|---|
microfetch | 604.4 ± 64.2 | 516.0 | 1184.6 | 1.00 | Yes |
fastfetch | 140836.6 ± 1258.6 | 139204.7 | 143299.4 | 233.00 ± 24.82 | No |
pfetch | 177036.6 ± 1614.3 | 174199.3 | 180830.2 | 292.89 ± 31.20 | No |
neofetch | 406309.9 ± 1810.0 | 402757.3 | 409526.3 | 672.20 ± 71.40 | No |
nitch | 127743.7 ± 1391.7 | 123933.5 | 130451.2 | 211.34 ± 22.55 | No |
macchina | 13603.7 ± 339.7 | 12642.9 | 14701.4 | 22.51 ± 2.45 | No |
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:
- Benchmarking Fungsi Individual: Menggunakan Criterion.rs. Kamu bisa menjalankan
cargo benchuntuk mengukurnya. - Profiling Alokasi dan Timing: Menggunakan Hotpath. Berkat Hotpath, tim Microfetch berhasil mengurangi alokasi sebesar 60%!
Cara Profiling (Timing)
HOTPATH_JSON=true cargo run --features=hotpathCara Profiling (Alokasi Heap)
HOTPATH_JSON=true cargo run --features=hotpath,hotpath-allocOutput 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#microfetch3. Jalankan Langsung dengan Nix Run
nix run nixpkgs#microfetch4. 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.gitKustomisasi (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.
- Ini adalah cara terbaik dan satu-satunya yang tidak mengorbankan kecepatan (kecuali kamu menambahkan kode yang buruk).
- Banyak pengguna telah mengadaptasi Microfetch untuk distro mereka dengan mem-patch main module dan mengganti logo NixOS dengan logo distro pilihan mereka.
- Pengguna NixOS bahkan dapat menggunakan
.overrideAttrsuntuk menyalurkan patch dengan mudah.
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!).