# Fancy WSL2 Setup

### Latar Belakang
>This article in Bahasa, are you looking for English version? Google Translate [here](https://blog-mhrdn-com.translate.goog/fancy-wsl2-setup?_x_tr_sl=id&_x_tr_tl=en&_x_tr_hl=id).

Meskipun saat ini saya menggunakan sistem operasi Windows, saya tidak bisa lepas sepenuhnya dengan sistem operasi berbasis Linux. Lantas, solusinya adalah menggunakan virtualisasi atau WSL. 

WSL (Windows Subsystem for Linux) adalah sebuah fitur dari sistem operasi Windows yang memungkinkan penggunanya untuk menjalankan Linux tanpa harus menggunakan aplikasi virtualisasi. Yak, itu adalah pengertian awam saya untuk WSL ini *(jika ingin mengetahui pengertian lengkap dan tepatnya, silakan membaca pada tautan berikut  [ini](https://docs.microsoft.com/en-us/windows/wsl/) )*. Pada kenyataannya, untuk menggunakan WSL saya harus memasang Hyper-V terlebih dahulu. Hyper-V sendiri merupakan aplikasi virtualisasi bawaan dari sistem operasi Windows. Hyper-V ini biasanya digunakan untuk keperluan virtualisasi kelas *server*. Namun, beberapa isu terakhir pada kompatibilitas WSL dengan aplikasi populer di Windows seperti VirtualBox<sup> [1](https://github.com/MicrosoftDocs/WSL/issues/798)</sup> atau VMWare<sup> [2](https://github.com/MicrosoftDocs/WSL/issues?q=is%3Aissue+vmwaresort%3Acomments-desc+)</sup> membuat saya menggunakan Hyper-V untuk kebutuhan virtualisasi.

> Saat ini alasan saya masih menggunakan VirtualBox, karena aplikasi emulator android Genymotion membutuhkannya. Untuk saat ini, bisa dibilang Genymotion merupakan emulator android yang paling mudah digunakan dan nyaris mendekati android *devices*.

WSL versi 2 menurut saya sudah banyak perkembangan, dari segi performa dan kompatibilitas yang ditawarkan. Meskipun demikian, terminal bawaan WSL 2 ini seperti kurang enak dipandang. Pada artikel ini saya ingin *sharing* (sekaligus dokumentasi pribadi) tentang cara konfigurasi WSL agar terlihat lebih menarik.

### Instalasi WSL 2
Untuk dokumentasi dan cara memasang WSL 2 ini sudah cukup jelas berada pada tautan  [ini](https://docs.microsoft.com/en-us/windows/wsl/install). Secara sederhana saya menjalankan perintah berikut pada powershell dengan hak akses administrator.

```
wsl --install
// restart komputer sebelum ke perintah selanjutnya

wsl --set-default-version 2
wsl --install -d Ubuntu
``` 
Setelah proses selesai, akan ada *pop-up window* yang mengharuskan saya membuat *user* dan *password* untuk WSL. Setelah itu jika saya memasukan "Ubuntu" di kolom pencarian Windows, maka akan muncul Ubuntu App seperti pada gambar di bawah ini.

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1640008160953/E3oT8Vkt_.png)

### Instalasi Windows Terminal
Langkah selanjutnya adalah memasang Windows Terminal. Pada bagian ini saya tidak bisa memasang Windows Terminal menggunakan Microsoft Store, Chocolately, dan Winget. Karena hal tersebut, saya langsung mengunduh berkas `msixbundle` yang ada pada tautan rilis [ini](https://github.com/microsoft/terminal/releases). Cukup klik 2x ekstensi `msixbundle` dan Windows Terminal akan terpasang dan bisa digunakan. Saya biasanya menempelkan *shortcut* Windows Terminal di *taskbar*.

Saya juga memasang Font Caskaydia Nerd Font yang bisa diunduh pada tautan  [ini](https://www.nerdfonts.com/font-downloads).
![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1640010531257/vf5b7MOI6.png)

Setelah terpasang, ubah konfigurasi Ubuntu WSL pada Windows Terminal. Klik icon **v** atau settings, pada Ubuntu pilih *Font face* Caskaydia Nerd Font.
![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1640011196619/KNRyOTJ53.png)

### Instalasi Oh-My-ZSH pada WSL
Klik kanan pada icon Windows Terminal dan pilih Ubuntu. Selanjutnya pada bagian ini saya menemukan masalah, dimana DNS pada Ubuntu WSL tidak bisa me-*lookup domain* dengan benar. Hal ini ditandai dengan gagalnya perintah `sudo apt update`. Solusi untuk masalah ini adalah dengan membuat WSL agar tidak menggunakan DNS bawaan. Untuk hal tersebut saya harus mengubah berkas `/etc/wsl.conf` dan `/etc/resolv.conf`

```
## /etc/wsl.conf
[network]
generateResolvConf = false
``` 

```
## /etc/resolv.conf
nameserver 8.8.4.4
nameserver 8.8.8.8
``` 
Gunakan `sudo` untuk ketika mengubah `wsl.conf` dan remove *symlink* pada `resolv.conf` sebelum menambahkan `nameserver`. Lengkapnya saya menggunakan perintah berikut:

```
sudo nano /etc/wsl.conf

// exit dan restart terminal Ubuntu WSL
wsl --terminate Ubuntu

// jalankan kembali Ubuntu WSL, dan lakukan ubah /etc/resolv.conf
sudo rm /etc/resolv.conf
sudo nano /etc/resolv.conf
``` 
Pada tahap ini saya sudah bisa melakukan pemasangan Oh-My-ZSH menggunakan perintah berikut:

```
sudo apt update && sudo apt upgrade -y
sudo apt install curl -y
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
``` 
Setelah terpasang Oh-My-ZSH, selanjutnya saya menambahkan tema  [powerlevel10k ](https://github.com/romkatv/powerlevel10k) dan *plugin* yang biasa saya gunakan dengan perintah berikut:

```
git clone --depth 1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
git clone --depth 1 https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions
git clone --depth 1 https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting
``` 
Aktifkan `powerlevel10k` dengan cara mengubah isi dari `ZSH_THEME` pada berkas `.zshrc` seperti pada kode di bawah ini
```
ZSH_THEME="powerlevel10k/powerlevel10k"
```

Aktifkan `plugins` dengan cara mengubah isi dari `plugins` pada berkas `.zshrc` seperti pada kode di bawah ini
```
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
```
Reload konfigurasi zsh, seharusnya akan ada proses konfigurasi `powerlevel10k` dan ikuti langkahnya sesuai keinginan. Hasil akhir akan seperti ini.

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1640011526524/fdDzsid9B.png)

Tabik,


