diff --git a/.gitignore b/.gitignore
index 6267c4339669cbecac3c4b9e19c838725dbf2d55..45bfe2e316b51e6fde2ed6a968cb0183be917aa9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 *.iso
+grub_target.cfg
diff --git a/grub_config.sh b/grub_config.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e51d12e36156dd80eaa8ab956f8e9b84e7e78cea
--- /dev/null
+++ b/grub_config.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+
+function extract_kernel() {
+	iso_file="$1"
+	loopback="$(mktemp)"
+	7z e -so "$iso_file" boot/grub/loopback.cfg > "$loopback"
+	grep -m 1 -o "linux.*vmlinuz" "$loopback" | awk '{ print $2 }'
+	rm "$loopback"
+}
+
+function extract_initrd() {
+	iso_file="$1"
+	loopback="$(mktemp)"
+	7z e -so "$iso_file" boot/grub/loopback.cfg > "$loopback"
+	grep -m 1 -o "initrd.*initrd\S*" "$loopback" | awk '{ print $2 }'
+	rm "$loopback"
+}
+
+function extract_release() {
+	iso_file="$1"
+	flavor="$(echo "$iso_file" | cut -d "-" -f 1)"
+	number="$(echo "$iso_file" | cut -d "-" -f 2)"
+	echo "${flavor^} $number" # ^ capitalizes 1st letter
+}
+
+function sed_grub_template() {
+	iso_file="$1"
+	distribution_grep="$2" # KDE / XFCE
+	sed_target="$3"
+	sed "s|__${distribution_grep}_KERNEL__|$(extract_kernel "$iso_file")|g" -i "$sed_target"
+	sed "s|__${distribution_grep}_INITRD__|$(extract_initrd "$iso_file")|g" -i "$sed_target"
+	sed "s|__${distribution_grep}_RELEASE__|$(extract_release "$iso_file")|g" -i "$sed_target"
+	sed "s|__${distribution_grep}_ISONAME__|$iso_file|g" -i "$sed_target"
+}
+
+
+
+kubuntu=kubuntu-18.04.1-desktop-amd64.iso
+xubuntu=xubuntu-18.04.1-desktop-amd64.iso
+grub_template="grub_template.cfg"
+grub_target="grub_target.cfg"
+cp "$grub_template" "$grub_target"
+sed_grub_template "$kubuntu" "KDE" "$grub_target"
+sed_grub_template "$xubuntu" "XFCE" "$grub_target"
diff --git a/grub_template.cfg b/grub_template.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..7ee0b9d36ffb5357d28b6956ff659987b43823fd
--- /dev/null
+++ b/grub_template.cfg
@@ -0,0 +1,104 @@
+if loadfont /boot/grub/font.pf2 ; then
+    set gfxmode=auto
+    insmod efi_gop
+    insmod efi_uga
+    insmod gfxterm
+    terminal_output gfxterm
+fi
+
+set menu_color_normal=white/black
+set menu_color_highlight=black/light-gray
+color yellow/black white/red
+
+set pager=1
+set gfxpayload=keep
+
+function kde_LoadCasper {
+    loopback loop ($root)/${kde_isoname}
+    echo    "Loading kernel"
+    linux   (loop)__KDE_KERNEL__ boot=casper file=/isodevice/preseed/lip.seed ${cmdline} iso-scan/filename=/kubuntu.iso sysrq_always_enabled pstore.pstore_disable nosplash verbose --
+    echo    "Loading initrd"
+    initrd  (loop)__KDE_INITRD__
+    echo    "Starting kernel"
+}
+
+function kde_menu {
+    menuentry "Empfohlen: ${kde_release} (deutsch)" {
+        set cmdline="debian-installer/language=de keyboard-configuration/layoutcode?=de"
+        kde_LoadCasper
+    }
+
+    menuentry "Recommended: ${kde_release} (english)" {
+        set cmdline=""
+        kde_LoadCasper
+    }
+
+    menuentry "${kde_release} (deutsch, failsafe)" {
+        set cmdline="debian-installer/locale=de_DE console-setup/layoutcode=de nomodeset noplymouth nosplash verbose text noacpi"
+        kde_LoadCasper
+    }
+
+    menuentry "${kde_release} (english, failsafe)" {
+        set cmdline="nomodeset noplymouth nosplash verbose text noacpi"
+        kde_LoadCasper
+    }
+
+    menuentry "${kde_release} (deutsch, ohne LIPNSA)" {
+            set cmdline="debian-installer/locale=de_DE console-setup/layoutcode=de fnord"
+            kde_LoadCasper
+    }
+
+    menuentry "${kde_release} (english, without LIPNSA)" {
+            set cmdline="fnord"
+            kde_LoadCasper
+    }
+}
+
+function xfce_LoadCasper {
+    loopback loop ($root)/${xfce_isoname}
+    echo    "Loading kernel"
+    linux   (loop)__XFCE_KERNEL__ boot=casper file=/isodevice/preseed/lip.seed ${cmdline} iso-scan/filename=/kubuntu.iso sysrq_always_enabled pstore.pstore_disable nosplash verbose --
+    echo    "Loading initrd"
+    initrd  (loop)__XFCE_INITRD__
+    echo    "Starting kernel"
+}
+
+function xfce_menu {
+    menuentry "Empfohlen: ${xfce_release} (deutsch)" {
+        set cmdline="debian-installer/language=de keyboard-configuration/layoutcode?=de"
+        xfce_LoadCasper
+    }
+
+    menuentry "Recommended: ${xfce_release} (english)" {
+        set cmdline=""
+        xfce_LoadCasper
+    }
+
+    menuentry "${xfce_release} (deutsch, failsafe)" {
+        set cmdline="debian-installer/locale=de_DE console-setup/layoutcode=de nomodeset noplymouth nosplash verbose text noacpi"
+        xfce_LoadCasper
+    }
+
+    menuentry "${xfce_release} (english, failsafe)" {
+        set cmdline="nomodeset noplymouth nosplash verbose text noacpi"
+        xfce_LoadCasper
+    }
+
+    menuentry "${xfce_release} (deutsch, ohne LIPNSA)" {
+            set cmdline="debian-installer/locale=de_DE console-setup/layoutcode=de fnord"
+            xfce_LoadCasper
+    }
+
+    menuentry "${xfce_release} (english, without LIPNSA)" {
+            set cmdline="fnord"
+            xfce_LoadCasper
+    }
+}
+
+set kde_release="__KDE_RELEASE__"
+set kde_isoname="__KDE_ISONAME__"
+kde_menu
+
+set xfce_release="__XFCE_RELEASE__"
+set xfce_isoname="__XFCE_ISONAME__"
+xfce_menu