diff --git a/README.md b/README.md
index db11200..a2807e1 100644
--- a/README.md
+++ b/README.md
@@ -1,247 +1,110 @@
-## Automated Setup
-#### WORKING ON IT!!!
-
-## Manual Setup
-Note: Replace win10 with your virtual machine's name on libvirt hooks and virsh commands.
-
-
- Enable IOMMU
-
- ```sh
- sudo nano /etc/default/grub
- ```
-
- Append iommu=pt, and intel_iommu=on or amd_iommu=on kernel options to GRUB_CMDLINE_LINUX_DEFAULT for your CPU.
- Then, update grub configuration.
-
- ```sh
- sudo grub-mkconfig -o /boot/grub/grub.cfg
- ```
-
- Verify IOMMU
+### **Enable IOMMU**
+#### ***Set the kernel paramater depending on your CPU.***
+#### For GRUB user, edit grub configuration.
+| /etc/default/grub |
+| ----- |
+| `GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on iommu=pt ..."` |
+| OR |
+| `GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on iommu=pt ..."` |
+#### ***Generate grub.cfg***
+```sh
+grub-mkconfig -o /boot/grub/grub.cfg
+```
+#### Reboot your system for the changes to take effect.
- After setting kernel parameter on grub config, reboot your system and verify IOMMU is enabled.
+
- ```sh
- dmesg | grep 'IOMMU enabled'
- ```
-
-
+### **Verify IOMMU**
+#### ***If you don't see any output when running following command, IOMMU is not functioning.***
+```sh
+dmesg | grep 'IOMMU enabled'
+```
+### **Install required tools**
- Install required tools
+ Gentoo Linux
```sh
- sudo pacman -S qemu libvirt edk2-ovmf virt-manager dnsmasq ebtables
+ emerge -av qemu virt-manager libvirt ebtables dnsmasq
```
- Enable services
- Enable libvirtd service and start default network.
+ Arch Linux
```sh
- sudo systemctl enable --now libvirtd
- sudo virsh net-start default
- sudo virsh net-autostart default
+ pacman -S qemu libvirt edk2-ovmf virt-manager dnsmasq ebtables
```
- Setup Guest OS
-
- Download [virtio](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso) driver.
-
- Launch virt-manager and create new virtual machine. Check Customize before install on final step.
-
- Overview > Chipset: Q35, Firmware: UEFI
- CPUs > CPU model: host-passthrough, CPU topology: Best for your machine :)
- SATA Disk > Disk bus: virtio
- NIC > Device model: virtio
- Add Hardware > CDROM: virtio-win.iso
-
- Begin Installation and install Windows.. Windows can't detect virtio devices, so you need to Load Driver from virtio-disk/amd64/win10 when prompted.
-
- After successful installation, install virtio-drivers from virtio CDROM.
-
-
-
- Attach PCI Devices
- Remove Tablet, Spice Channel, Video XQL and other applicable devices.
-
- Add Hardware > PCI Devices: GPU and HDMI audio
-
-
-
- NVIDIA GPU
- Nvidia GPU vBIOS requires patching to work. Though, some NVIDIA GPU works without patching.
-
-
- Dump GPU vBIOS
-
- Windows > Use [GPU-Z](https://www.techpowerup.com/gpuz/)
- Linux > Try following but doesn't seem to work:
-
- ```sh
- su
- echo 1 > /sys/bus/pci/devices/0000:01:00.0/rom
- cat /sys/bus/pci/devices/0000:01:00.0/rom > vbios.rom
- echo 0 > /sys/bus/pci/devices/0000:01:00.0/rom
- ```
-
- Or, you can download vBIOS from [TechPowerUp](https://www.techpowerup.com/vgabios/), which might (not) be already patched.
-
-
-
- Patching vBIOS
- Use Hex Editor and search for string VIDEO, and remove everything before char U, i.e. HEX value 55.
-
-
-
- Using Patched vBIOS
+ Fedora
```sh
- sudo virsh edit win10
- ```
- Search for hostdev. Add
- ```xml
-
+ dnf install @virtualization
```
- before
- ```xml
-
- ```
-
-
- Libvirt Hooks
- Libvirt hooks automate the process of running specific tasks during VM state change.
-
- More info at: [PassthroughPost](https://passthroughpo.st/simple-per-vm-libvirt-hooks-with-the-vfio-tools-hook-helper/)
+
+### **Enable required services**
- Create Libvirt hook
-
- ```sh
- sudo mkdir /etc/libvirt/hooks
- sudo touch /etc/libvirt/hooks/qemu
- sudo chmod +x /etc/libvirt/hooks/qemu
- ```
-
- /etc/libvirt/hooks/qemu |
----------- |
- ```sh
- #!/bin/bash
-
- GUEST_NAME="$1"
- HOOK_NAME="$2"
- STATE_NAME="$3"
- MISC="${@:4}"
-
- BASEDIR="$(dirname $0)"
-
- HOOKPATH="$BASEDIR/qemu.d/$GUEST_NAME/$HOOK_NAME/$STATE_NAME"
- set -e # If a script exits with an error, we should as well.
-
- if [ -f "$HOOKPATH" ]; then
- eval \""$HOOKPATH"\" "$@"
- elif [ -d "$HOOKPATH" ]; then
- while read file; do
- eval \""$file"\" "$@"
- done <<< "$(find -L "$HOOKPATH" -maxdepth 1 -type f -executable -print;)"
- fi
- ```
+ SystemD
- Restart libvirtd
```sh
- sudo systemctl restart libvirtd
+ systemctl enable --now libvirtd
```
- Start Script
+ OpenRC
```sh
- sudo mkdir -p /etc/libvirt/hooks/qemu.d/win10/prepare/begin
- sudo touch /etc/libvirt/hooks/qemu.d/win10/prepare/begin/start.sh
- sudo chmod +x /etc/libvirt/hooks/qemu.d/win10/prepare/begin/start.sh
- ```
-
- /etc/libvirt/hooks/qemu.d/win10/prepare/begin/start.sh |
- -------------- |
- ```sh
- #!/bin/bash
- set -x
-
- # Stop display manager
- systemctl stop display-manager
-
- # Unbind EFI Framebuffer
- echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind
-
- # Unload NVIDIA kernel modules
- modprobe -r nvidia_drm nvidia_modeset nvidia_uvm nvidia
-
- # Unload AMD kernel module
- # modprobe -r amdgpu
-
- # Detach GPU devices from host
- # Use your GPU and HDMI Audio PCI host device
- virsh nodedev-detach pci_0000_01_00_0
- virsh nodedev-detach pci_0000_01_00_1
-
- # Load vfio module
- modprobe vfio-pci
+ rc-update add libvirtd default
+ rc-service libvirtd start
```
-
-
-Stop Script
-
- ```sh
- sudo mkdir -p /etc/libvirt/hooks/qemu.d/win10/release/end
- sudo touch /etc/libvirt/hooks/qemu.d/win10/release/end/stop.sh
- sudo chmod +x /etc/libvirt/hooks/qemu.d/win10/release/end/stop.sh
+### Sometimes, you might need to start default network manually.
+```sh
+virsh net-start default
+virsh net-autostart default
```
-/etc/libvirt/hooks/qemu.d/win10/release/end/stop.sh |
----------- |
- ```sh
- #!/bin/bash
- set -x
-
- # Unload vfio module
- modprobe -r vfio-pci
-
- # Attach GPU devices to host
- # Use your GPU and HDMI Audio PCI host device
- virsh nodedev-reattach pci_0000_01_00_0
- virsh nodedev-reattach pci_0000_01_00_1
-
- # Rebind framebuffer to host
- echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/bind
-
- # Load NVIDIA kernel modules
- modprobe nvidia_drm
- modprobe nvidia_modeset
- modprobe nvidia_uvm
- modprobe nvidia
-
- # Load AMD kernel module
- # modprobe amdgpu
-
- # Restart Display Manager
- systemctl start display-manager
- ```
-
-
-
-[Video card driver virtualisation detection](https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Video_card_driver_virtualisation_detection)
-[Keyboard/Mouse Passthrough](https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Passing_keyboard/mouse_via_Evdev)
-[Audio Passthrough](https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Passing_VM_audio_to_host_via_PulseAudio)
-[Troubleshooting](https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Troubleshooting)
+### **Setup Guest OS**
+### ***NOTE: You should replace win10 with your VM's name where applicable***
+#### ***Download [virtio](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso) driver.***
+### Launch ***virt-manager*** and create a new virtual machine. Select ***Customize before install*** on Final Step.
+### In ***Overview*** section, set ***Chipset*** to ***Q35***, and ***Firmware*** to ***UEFI***
+### In ***CPUs*** section, set ***CPU model*** to ***host-passthrough***, and ***CPU Topology*** to whatever fits your system.
+### For ***SATA*** disk of VM, set ***Disk Bus*** to ***virtio***.
+### In ***NIC*** section, set ***Device Model*** to ***virtio***
+### Add Hardware > CDROM: virtio-win.iso
+### Now, ***Begin Installation***. Windows can't detect the ***virtio disk***, so you need to ***Load Driver*** and select ***virtio-iso/amd64/win10*** when prompted.
+### After successful installation of Windows, install virtio drivers from virtio CDROM.
+
+
+
+### **Attaching PCI devices**
+### Remove Channel Spice, Display Spice, Video XQL, Sound ich* and other unnecessary devices.
+### Now, click on ***Add Hardware***, select ***PCI Devices*** and add the PCI Host devices for your GPU's VGA and HDMI Audio
+### Some GPU vBIOS needs to be patched for UEFI Support.
+----- TODO: vBIOS patching ------
+### To use patched vBIOS, edit VM's configuration
+```sh
+virsh edit win10
+```
+```xml
+ ...
+
+
+
+ ...
+
+ ...
+```
See Also
> [Single GPU Passthrough by joeknock90](https://github.com/joeknock90/Single-GPU-Passthrough)