diff --git a/CHANGELOG.md b/CHANGELOG.md
index f886c97..2643b07 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## 2019/06/13
+Improved libvirt hooks.
+### Added
+- [libvirt](/libvirt)
+ - [virt1.xml](/libvirt/virt1.xml)
+### Changed
+- [qemu](/libvirt/qemu)
+
## 2019/03/22
### Added
- [scritps](/scripts)
diff --git a/libvirt/qemu b/libvirt/qemu
new file mode 100755
index 0000000..b3b4ef3
--- /dev/null
+++ b/libvirt/qemu
@@ -0,0 +1,62 @@
+#!/usr/bin/env bash
+
+## QEMU hooks. How to use.
+# chmod +x qemu
+# sudo ln -sf "$(pwd)/qemu" /etc/libvirt/hooks/qemu
+
+## Virsh devices.
+VIRSH_GPU="pci_0000_06_00_0"
+VIRSH_GPU_AUDIO="pci_0000_06_00_1"
+
+## Log file. Only tells if the GPU was un/binded correctly.
+LOG=/tmp/qemu_log.txt
+
+if [[ "$1" == "GPU"* ]]; then
+ if [ "$2" == "prepare" ]; then
+
+ ## Kill the Window Manager. Yours may vary.
+ killall i3 > /dev/null 2>&1
+ sleep 5 ## Just in case
+
+ ## Remove the framebuffer and console
+ echo 0 > /sys/class/vtconsole/vtcon0/bind
+ echo 0 > /sys/class/vtconsole/vtcon1/bind
+ echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind
+
+ ## Detach the GPU and USB
+ virsh nodedev-detach "$VIRSH_GPU" >> "$LOG" 2>&1
+ virsh nodedev-detach "$VIRSH_GPU_AUDIO" >> "$LOG" 2>&1
+
+ ## Load vfio.
+ modprobe vfio-pci
+
+ ## Start the network.
+ if [[ $(virsh net-list --all | grep "virt1" | awk '{print $2}') != "active" ]]; then
+ virsh net-start virt1
+ fi
+
+ fi
+ if [ "$2" == "release" ]; then
+
+ ## Stop the network.
+ if [ "$(virsh net-list --all | grep "virt1" | awk '{print $2}')" == "active" ]; then
+ ## "destroy" actually stops it.
+ virsh net-destroy virt1
+ fi
+
+ ## Unload vfio module.
+ modprobe -r vfio-pci
+ modprobe -r vfio_iommu_type1
+ modprobe -r vfio
+
+ ## Reattach the GPU and USB.
+ virsh nodedev-reattach "$VIRSH_GPU_AUDIO" >> "$LOG" 2>&1
+ virsh nodedev-reattach "$VIRSH_GPU" >> "$LOG" 2>&1
+
+ ## Reload the framebuffer and console.
+ echo 1 > /sys/class/vtconsole/vtcon0/bind
+ nvidia-xconfig --query-gpu-info > /dev/null 2>&1
+ echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/bind
+
+ fi
+fi
diff --git a/libvirt/virt1.xml b/libvirt/virt1.xml
new file mode 100644
index 0000000..820a921
--- /dev/null
+++ b/libvirt/virt1.xml
@@ -0,0 +1,16 @@
+
+ virt1
+ c387430a-d3f9-4859-a9bd-3a25987de672
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/scripts/qemu b/scripts/qemu
deleted file mode 100755
index ed8e8aa..0000000
--- a/scripts/qemu
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/bin/bash
-
-## IOMMU groups
-IOMMU_GPU=06:00.0
-IOMMU_GPU_AUDIO=06:00.1
-IOMMU_USB=07:00.3
-IOMMU_AUDIO=08:00.3
-
-## Virsh devices
-VIRSH_GPU=pci_0000_06_00_0
-VIRSH_GPU_AUDIO=pci_0000_06_00_1
-VIRSH_USB=pci_0000_07_00_3
-VIRSH_AUDIO=pci_0000_08_00_3
-
-## PCI BUS ID
-videoid="10de 1184"
-audioid="10de 0e0a"
-videobusid="0000:${IOMMU_GPU}"
-audiobusid="0000:${IOMMU_GPU_AUDIO}"
-
-## QEMU options
-RAM=12G
-
-## Ulimit
-ULIMIT=$(ulimit -a | grep "max locked memory" | awk '{print $6}')
-ULIMIT_TARGET=$(( $(echo $RAM | tr -d 'G') * 1048576 + 100000 ))
-
-## Log file
-LOG=/tmp/passthrough.log
-
-## Virtual interface name
-VIRTNAME=virt1
-
-if [[ $1 == "win10" ]]; then
- if [[ $2 == "prepare" ]]; then
- ## Memory lock limit
- [[ $ULIMIT != $ULIMIT_TARGET ]] && ulimit -l $ULIMIT_TAGET
-
- ## Kill the Window Manager
- killall i3 > /dev/null 2>&1
- sleep 5
-
- ## Remove the framebuffer and console
- echo 0 > /sys/class/vtconsole/vtcon0/bind
- echo 0 > /sys/class/vtconsole/vtcon1/bind
- echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind
-
- ## Detach the GPU and USB
- virsh nodedev-detach $VIRSH_GPU >> $LOG 2>&1
- virsh nodedev-detach $VIRSH_GPU_AUDIO >> $LOG 2>&1
- virsh nodedev-detach $VIRSH_USB >> $LOG 2>&1
-
- ## Load vfio
- modprobe vfio-pci
-
- ## Start the network
- if [[ $(virsh net-list --all | grep $VIRTNAME | awk '{print $2}') != "active" ]]; then
- virsh net-start $VIRTNAME
- fi
-
- fi
- if [[ $2 == 'release' ]]; then
-
- ## Unload vfio module
- modprobe -r vfio-pci
- modprobe -r vfio_iommu_type1
- modprobe -r vfio
-
- ## Reattach the GPU and USB
- virsh nodedev-reattach $VIRSH_USB >> $LOG 2>&1
- virsh nodedev-reattach $VIRSH_GPU_AUDIO >> $LOG 2>&1
- virsh nodedev-reattach $VIRSH_GPU >> $LOG 2>&1
-
- ## Reload the framebuffer and console
- echo 1 > /sys/class/vtconsole/vtcon0/bind
- nvidia-xconfig --query-gpu-info > /dev/null 2>&1
- echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/bind
-
- ## Restore ulimit
- ulimit -l $ULIMIT
-
- fi
-fi
diff --git a/scripts/virsh-network.xml b/scripts/virsh-network.xml
deleted file mode 100644
index 9f2a29f..0000000
--- a/scripts/virsh-network.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
- virt1
- 046a1f8f-e46c-4517-8f8e-6c793a8b57a2
-
-
-
-
-
-
-
-
-
-
diff --git a/scripts/windows.xml b/scripts/windows.xml
deleted file mode 100644
index 409c5b9..0000000
--- a/scripts/windows.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-
- win10
- 49a79759-dfa2-4670-a6f6-eab2d6794abd
- 12582910
- 12582910
- 12
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- hvm
- /usr/share/ovmf/x64/OVMF_CODE.fd
- /var/lib/libvirt/qemu/nvram/win10_VARS.fd
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- |
-
-
-
-
-
-
-
-
- destroy
- restart
- destroy
-
-
-
-
-
- /usr/bin/qemu-system-x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-