faultable's setup (2021)

published at finally, my dream setup ever!

Tahun 2020 banyak memberikan gue pelajaran termasuk tentang bagaimana gue menggunakan sesuatu bernama komputer. Sejauh ini gue rasa sudah memiliki "dream setup" gue sendiri yang meskipun sederhana dan tidak keren-keren amat, tapi baru kali ini gue merasa sangat nyaman dan puas akan setup yang gue miliki sekarang.

Pada tulisan ini akan gue bagi menjadi 3 series, yakni setup untuk:

Dan disini gue tidak hanya membahas tentang "development environment" melainkan secara keseluruhan termasuk bagaimana gue menggunakan komputer dan internet.

Tujuan dari diterbitkannya tulisan ini adalah untuk berbagi pengalaman dan semoga dapat meng-inspirasi ataupun memberikan wawasan kepada para pembaca sekalian.

Sistem Operasi

Sistem operasi yang gue gunakan hanya dua: Dari keluarga *BSD seperti Mac OS dan dari keluarga GNU/Linux yakni Debian. Alasannya sederhana: karena keamanan, kestabilan, dan juga familiaritas.

Dulu laptop gue dualboot dengan Windows cuma karena ingin main game, tapi sekarang sudah gak dan gue udah bener-bener gak tertarik menyentuh *game *apapun itu.

Mac OS yang gue gunakan adalah Big Sur (11.x) dan sistem operasi ini bener-bener memuaskan baik dari sisi performa maupun penampilan. Meskipun masih menggunakan prosesor intel x86, sampai hari ini gue masih belum tertarik pindah ke M1 bila alasan hanya karena performa.

Di keluarga GNU/Linux, selain menggunakan Debian sebagai sistem operasi utama, gue juga menggunakan FreeBSD dan Ubuntu sebagai alternatif. Kapan menggunakan satu diantara 3 pilihan tersebut sebenarnya sederhana:

Gue tidak memilih Ubuntu sebagai pilihan utama karena alasan politik dan prinsip yang sebenarnya gak penting-penting amat untuk diketahui orang lain, but feel free to discuss it with me ;)

Selain 3 pilihan diatas, yang sedang gue tertarik adalah NixOS. Gue sudah menggunakan toolset nya Nix ini dari Nixpkgs nya yang akan gue bagikan nanti, dan gue sangat tertarik untuk membawanya lebih jauh yakni sampai ke level sistem operasi.

Terkait filesystem, gue tertarik menggunakan ZFS ke Darwin dan Linux meskipun gue belum mendapatkan masalah dengan APFS dan BTRFS.

Essentials

Satu hal yang paling gila—menurut gue—adalah gue sudah tidak memasang apapun terkait *development *di laptop gue. Tidak ada VSCode, tidak ada Postico, tidak ada Paw, tidak ada Docker, alias tidak ada development environment sama sekali.

Tools inti yang gue gunakan hanya 3: Mosh, Et, dan Wireguard.

Jika tertarik melihat Launchpad gue, berikut tangkapan layarnya: faultable's launchpad Direktori di Apple berisi aplikasi-aplikasi bawaan Apple yang tidak bisa dihapus.

Dan gue hanya menggunakan 5 aplikasi bawaan Apple: Safari, Apple Music (yang kemungkinan gak bakal gue pakai lagi juga di 4 bulan kedepan), Calendar, Reminder dan Contact yang mana sumber data nya berasal dari Nextcloud gue.

Aplikasi-aplikasi lain yang gue gunakan antara lain hanya:

  1. iTerm (tempat dimana gue buka mosh, et, dan wireguard-go)
  2. Acorn (untuk mengolah citra)
  3. Transmit (gue gak pakai aplikasi bawaan Nextcloud, dan juga gue ada s3 untuk backup things)
  4. Tor Browser (because why not)
  5. Alfred 4 (ini life saver banget, terlebih gue pakai Alfred Powerpack. Banyak custom shortcut yang sering gue pakai khususnya 'Empty Trash' dan Shortcut-like di iOS)
  6. 1Blocker (satu-satu nya Adblocker yang gue bayar untuk digunakan. Hanya di Safari, dan yang keren bukan hanya block iklan dan trackers, melainkan ke hal-hal annoying juga seperti cookie banner; kolom komentar, tombol sosmed, dsb)
  7. ImageOptim (untuk kompresi gambar)
  8. StandardNotes (untuk menyimpan catatan-catatan, self-hosted as always)
  9. Bitwarden (pengelola kata sandi, kurang nyaman pakai pass(1) karena ekosistemnya kurang oke diluar lingkungan desktop. self-hosted as always)
  10. Oversight (untuk memonitor kapan aplikasi menggunakan webcam dan mic)
  11. Google Chrome (keperluan kantor, karena kantor gue menggunakan Google Workspace)
  12. Tripmode (untuk memilih aplikasi apa saja yang boleh mengakses internet, sangat cocok untuk yang pakai indihome sering tethering!)
  13. Rectangle (window manager, gak punya alasan kenapa harus gak pakai ini)

Untuk yang belum familiar dengan mosh; et, dan wireguard-go, mereka adalah:

Literally cuma 16 aplikasi yang gue gunakan di laptop, dan aplikasi-aplikasi yang benar-benar setiap hari gue gunakan hanyalah 11: Safari, Google Chrome, Tripmode, wireguard, mosh, et, Apple Music, Standard Notes, Alfred, Bitwarden dan iTerm. Sisanya paling mingguan (Transmit, gue gak terlalu sering membuat arsip), atau gak yang digunakan on-demand (ImageOptim, Acorn, Tor) atau di _background _(1Blocker, Oversight, Rectangle).

Menggunakan Internet

Gue bener-bener *strict *dengan outbound traffic yang ada, dan berkat Tripmode ini bisa dicapai karena gue secara eksplisit bisa ngasih tau aplikasi mana saja yang boleh mengakses internet: Thanks, Tripmode! Selain itu, koneksi ke internet selalu melalui VPN (Wireguard) dan Socks5 proxy sebagai "killswitch" untuk memastikan semua koneksi ke internet selalui melalui VPN. Setting SOCKS5 Proxy di MacOS Untuk DNS Query selalu dari 10.0.0.2 (alias edgy DNS via jalur in case ada leak dari socks5 proxy) selain karena itu gue yang mengoperasikan juga karena bertindak sebagai DNS Shinkhole untuk membuat internet menjadi sedikit lebih yoi.

Masalah dari setup ini adalah ketika Wi-Fi public yang gue gunakan menggunakan captive portal yang biasanya *solved *dengan cara flush mDNS (bonjour) terlebih dahulu.

Selebihnya, it just works. wireguard-go berjalan di launchd (systemd-like di GNU/Linux IIRC) dan proxy menggunakan bawaan Mac which is working really nice.

Selain *outbound traffic, *gue juga *strict *dengan inbound traffic. Seringkali gue menjalankan perintah lsof -i -n -P | grep LISTEN untuk memastikan port apa saja yang terbuka untuk diakses oleh komputer lain.

Workflow

Rahasia utama nya hanyalah 1: Gue memiliki devbox. Di kantor yakni Ubuntu di EC2 nya AWS dan untuk pribadi adalah Debian di Linode (karena FreeBSD belum didukung secara resmi dan menggunakan custom template is really sucks).

Hal yang gue lakukan hanya 2:

  1. Menjalankan et terminal di *background *berikut dengan port yang ingin gue gunakan (di kantor biasanya 3000 dan 8000) dengan perintah et <host> -t "8000:8000, 3000:3000" --silent -N > /dev/null 2>&1 &
  2. Menjalankan mosh diatas et yang ada di terminal dengan perintah mosh <host> -- tmux attach -t <workspace>

That's it! Jika jam kerja sudah selesai, gue tinggal deattach tmux + fg + ctrl+c, tutup laptop, deh!

Untuk terkait setup devbox, akan kita bahas di part 2 yang berbarengan dengan setup iPad gue.

Menggunakan workflow ini bener-bener mengubah keseharian gue dan khususnya cara gue bekerja. Dari sisi 'work-life balance', ini relatif gampang tercapai karena gue tinggal deattach tmux then forget tanpa harus mengkhawatirkan sesi yang ada—kecuali kalau devbox gue randomly restart.

Dan ketika gue buka laptop, gue tahu apa yang harus gue lakukan: kalau bukan ngoding berarti nulis meskipun sejauh ini aktivitas menulis gue banyak dilakukan di iPad.

Drawbacks nya sebenarnya ada dua, dan yang satu gue tidak yakin apakah sebuah keuntungan atau kerugian:

  1. Sangat bergantung dengan koneksi internet. Solusinya jangan pakai Indihome pakai mosh dan et untuk menjaga kewarasan dan mood.
  2. Aktivitas ngoding gue berkurang. Karena sudah tidak sesederhana buka kode editor, run some dev server then start coding.

Oh iya, gue pun sudah tidak menyimpan apapun terkait kode (sumber kode) di laptop gue. So, yes, what's wrong with Fariz, anyways?

Daily basis

Setiap layanan yang ditawarkan oleh Google dan Apple (via iCloud) gue sebisa mungkin menggunakan solusi lain yakni via Self-hosting, sekalipun Apple menggunakan kata 'privasi' sebagai bahan jualannya.

Layanan-layanan Google/Apple yang seringkali digunakan oleh khalayak umum antara lain, Google/Apple (iCloud):

Yang mana solusinya adalah:

Gue sudah mengenal Matrix sejak lama, dan baru kali ini gue benar-benar tertarik menggunakannya. Masalah utama gue—yang diselesaikan oleh Matrix—adalah gue ingin SMS yang masuk ter-singkronisasi dengan iPad gue karena HP gue menggunakan sistem operasi Lineage OS.

Dan ini dapat diselesaikan dengan Matrix spesifiknya via bridge nya! Akun Matrix gue yang diakses via app.element.io Bridge yang gue gunakan hanya 2: SMS dan WhatsApp. Dan yang asiknya, khusus WhatsApp ini mendukung grup dan "WA status" yang menurut gue gak penting-penting amat.

Gue akan bahas tentang Matrix di tulisan khusus, semoga kagak lupa!

Oh iya, selain itu gue menggunakan Bitwarden juga (via bitwarden-rs) untuk password manager yang datanya berada di Raspberry Pi sialan. Sejauh ini Raspberry Pi gue menjalankan 14 services (11 services di Docker, 3 di level OS) dan berjalan secara *smooth *kecuali ketika ISP sedang kontol dan penjaga kos belum beli token listrik.

Tujuan setup

Pada tulisan Selamat tinggal, 2020. beberapa yang ingin gue capai dan yang terkait konteks disini adalah Work-life balance & menerapkan deep work. Tujuan dari setup gue (di laptop) yang sekarang adalah untuk mencapai dua hal tersebut, oh iya lupa gue bilang kalau di laptop gue juga tidak ada hal-hal terkait pribadi yang berjalan (seperti instant messaging, email, social media) karena seharusnya itu hanya berada di iPad gue dan itupun kalau gue menggunakannya.

Jadi, sekali lagi, ketika gue buka laptop, gue tahu apa yang harus dan hanya bisa gue lakukan: bekerja. Sejauh ini gue belum ada motivasi lagi untuk ngoding diluar kerjaan kantor diluar jam kantor (9to5), tapi** mungkin** akan gue coba lagi di weekend deh.

Dan terkait *deep work *ini, gue buat setup workspace agar bisa mendukung proses deep work: hanya Google Chrome dan iTerm2 yang hanya menjalankan tmux via mosh. Distraksi paling membuka DuckDuckGo, Gmail, Basecamp, dan Google Calendar, tapi gue sudah meminimalisir kapan saja boleh membuka itu (kecuali DuckDuckGo, karena, bun, (terkadang) kode berjalan seperti bajingan).

Penutup

Sounds like a boring setup, right?

Karena memang itu yang ingin gue capai! Tujuan utama adalah agar seminimal mungkin di depan layar. Dan untuk dapat mencapainya, gue harus buat sesuatu yang memiliki layar tersebut semembosankan mungkin sehingga gue harus bisa cepat-cepat menghindari itu, karena, well, that's boring.

Dan terkait pekerjaan, itulah salah satu alasan kenapa gue ingin banget menerapkan deep work: untuk memaksimalkan *productive hours *serta untuk membuat saling menguntungkan dua pihak (me and my employer).

Dengan setup ini bukan berarti gue benci programming ataupun ingin berhenti menjadi programmer/software engineer, atau "hanya melakukan pekerjaan" di jam kerja saja. Gue masih mencintai programming, masih senang berkomunitas (dan berkontribusi), masih senang membuat proyek sampingan, dsb. Hanya meminimalisir frekuensinya saja sekaligus demi kebaikan diri gue sendiri (dan kesehatan mental gue) khususnya setelah belajar dari pengalaman sebelumnya.

FWIW, gue tidak menyimpan history di peramban gue apalagi di Chrome. Setiap 3 hari (gue yakin nya setiap hari sih) gue clear cookies & histories di Safari Mac karena terkait aktivitas pribadi (yang biasanya berkaitan dengan ehm kredensial terkait data pribadi) seharusnya hanya terjadi di iPad, dan biasanya gue lupa aja karena kebiasaan kalau gue lakukan itu di laptop juga.

Dan karena setup yang gue miliki sekarang ini, gue belum ada motivasi kenapa harus "upgrade" laptop karena workload nya gue bebankan ke server orang semua, toh?

Sebagai penutup, gue sangat nyaman; enjoy, dan tenang dengan setup yang sekarang dan gue jadikan sebagai "dream setup" karena, god, this is really spark joy dan gue yakin setup seperti ini akan bertahan lama khususnya selama gue masih memiliki title Software Engineer di pekerjaan gue.

Untuk referensi, berikut *dotfiles*gue yang gue gunakan di devbox. Gue sebisa mungkin untuk membuatnya determinisitc via NixOS khususnya karena gue males banget melakukan upacara-upacara setiap kali provision mesin baru.

Ditulisan selanjutnya kita akan membahas tentang setup iPad gue sekaligus Devbox karena saling berkaitan (and god damn it gue ngoding di fucking ipad).

Dan di series terakhir, gue akan membahas tentang Raspberry Pi sialan gue tempat dimana data pribadi gue tersimpan serta tempat dimana "internet pribadi" gue berada.

So, yeah, thanks all. Jangan lupa subscribe blog premium gue karena hari ini akan terbit tulisan baru!