diff --git a/super-user-spark.cabal b/super-user-spark.cabal
--- a/super-user-spark.cabal
+++ b/super-user-spark.cabal
@@ -1,15 +1,48 @@
 name:                super-user-spark
-version:             0.4.0.3
+version:             0.4.0.4
 license:             MIT
 license-file:        LICENSE
 description:         Configure your dotfile deployment with a DSL.
 synopsis:            Configure your dotfile deployment with a DSL.
 author:              Tom Sydney Kerckhove
 maintainer:          syd.kerckhove@gmail.com
+homepage:            https://github.com/NorfairKing/super-user-spark
 category:            System
 build-type:          Simple
 extra-source-files:  README.md
 cabal-version:       >=1.10
+
+extra-source-files:
+  test_resources/end-to-end/bash.sus
+  test_resources/end-to-end/bash.sus.res
+  test_resources/exact_compile_test_src/alternatives.sus
+  test_resources/exact_compile_test_src/alternatives.sus.res
+  test_resources/exact_compile_test_src/bash.sus
+  test_resources/exact_compile_test_src/bash.sus.res
+  test_resources/exact_compile_test_src/internal_sparkoff.sus
+  test_resources/exact_compile_test_src/internal_sparkoff.sus.res
+  test_resources/exact_compile_test_src/nesting.sus
+  test_resources/exact_compile_test_src/nesting.sus.res
+  test_resources/exact_compile_test_src/sub.sus
+  test_resources/exact_compile_test_src/sub.sus.res
+  test_resources/exact_compile_test_src/sub/subfile.sus
+  test_resources/exact_compile_test_src/sub/subfile.sus.res
+  test_resources/hop_test/hop1dir/hop1.sus
+  test_resources/hop_test/hop1dir/hop2dir/hop2.sus
+  test_resources/hop_test/hop1dir/hop2dir/hop3dir/hop3.sus
+  test_resources/hop_test/root.sus
+  test_resources/shouldCompile/bash.sus
+  test_resources/shouldCompile/complex.sus
+  test_resources/shouldNotParse/empty_file.sus
+  test_resources/shouldNotParse/missing_implementation.sus
+  test_resources/shouldParse/empty_card.sus
+  test_resources/shouldParse/littered_with_comments.sus
+  test_resources/shouldParse/short_syntax.sus
+  test_resources/shouldParse/with_quotes.sus
+
+source-repository head
+  type:     git
+  location: https://github.com/NorfairKing/super-user-spark
 
 library
   hs-source-dirs:   src
diff --git a/test_resources/end-to-end/bash.sus b/test_resources/end-to-end/bash.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/end-to-end/bash.sus
@@ -0,0 +1,8 @@
+card bash {
+  into  subdir
+  outof bash
+  
+  .bashrc
+  .bash_aliases
+  .bash_profile
+}
diff --git a/test_resources/end-to-end/bash.sus.res b/test_resources/end-to-end/bash.sus.res
new file mode 100644
--- /dev/null
+++ b/test_resources/end-to-end/bash.sus.res
@@ -0,0 +1,32 @@
+[
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "subdir/.bashrc",
+            "sources": [
+                "bash/.bashrc",
+                "bash/bashrc"
+            ]
+        }
+    },
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "subdir/.bash_aliases",
+            "sources": [
+                "bash/.bash_aliases",
+                "bash/bash_aliases"
+            ]
+        }
+    },
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "subdir/.bash_profile",
+            "sources": [
+                "bash/.bash_profile",
+                "bash/bash_profile"
+            ]
+        }
+    }
+]
diff --git a/test_resources/exact_compile_test_src/alternatives.sus b/test_resources/exact_compile_test_src/alternatives.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/exact_compile_test_src/alternatives.sus
@@ -0,0 +1,6 @@
+card alternatives {
+  alternatives 1 2 3 4
+  alternatives a b c d
+  
+  file
+}
diff --git a/test_resources/exact_compile_test_src/alternatives.sus.res b/test_resources/exact_compile_test_src/alternatives.sus.res
new file mode 100644
--- /dev/null
+++ b/test_resources/exact_compile_test_src/alternatives.sus.res
@@ -0,0 +1,26 @@
+[
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "file",
+            "sources": [
+                "1/a/file",
+                "1/b/file",
+                "1/c/file",
+                "1/d/file",
+                "2/a/file",
+                "2/b/file",
+                "2/c/file",
+                "2/d/file",
+                "3/a/file",
+                "3/b/file",
+                "3/c/file",
+                "3/d/file",
+                "4/a/file",
+                "4/b/file",
+                "4/c/file",
+                "4/d/file"
+            ]
+        }
+    }
+]
diff --git a/test_resources/exact_compile_test_src/bash.sus b/test_resources/exact_compile_test_src/bash.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/exact_compile_test_src/bash.sus
@@ -0,0 +1,7 @@
+card bash {
+  into "~"
+
+  .bashrc
+  .bash_aliases
+  .bash_profile
+}
diff --git a/test_resources/exact_compile_test_src/bash.sus.res b/test_resources/exact_compile_test_src/bash.sus.res
new file mode 100644
--- /dev/null
+++ b/test_resources/exact_compile_test_src/bash.sus.res
@@ -0,0 +1,32 @@
+[
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "~/.bashrc",
+            "sources": [
+                ".bashrc",
+                "bashrc"
+            ]
+        }
+    },
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "~/.bash_aliases",
+            "sources": [
+                ".bash_aliases",
+                "bash_aliases"
+            ]
+        }
+    },
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "~/.bash_profile",
+            "sources": [
+                ".bash_profile",
+                "bash_profile"
+            ]
+        }
+    }
+]
diff --git a/test_resources/exact_compile_test_src/internal_sparkoff.sus b/test_resources/exact_compile_test_src/internal_sparkoff.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/exact_compile_test_src/internal_sparkoff.sus
@@ -0,0 +1,27 @@
+card one {
+  spark card two
+  spark card five
+}
+
+card two {
+  two
+  spark card three
+  spark card four
+}
+
+card three {
+  three
+}
+
+card four {
+  four
+}
+
+card five {
+  five
+  spark card six
+}
+
+card six {
+  six
+}
diff --git a/test_resources/exact_compile_test_src/internal_sparkoff.sus.res b/test_resources/exact_compile_test_src/internal_sparkoff.sus.res
new file mode 100644
--- /dev/null
+++ b/test_resources/exact_compile_test_src/internal_sparkoff.sus.res
@@ -0,0 +1,47 @@
+[
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "two",
+            "sources": [
+                "two"
+            ]
+        }
+    },
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "three",
+            "sources": [
+                "three"
+            ]
+        }
+    },
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "four",
+            "sources": [
+                "four"
+            ]
+        }
+    },
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "five",
+            "sources": [
+                "five"
+            ]
+        }
+    },
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "six",
+            "sources": [
+                "six"
+            ]
+        }
+    }
+]
diff --git a/test_resources/exact_compile_test_src/nesting.sus b/test_resources/exact_compile_test_src/nesting.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/exact_compile_test_src/nesting.sus
@@ -0,0 +1,18 @@
+card complex {
+  into ~
+  outof complex
+  {
+    into a
+    outof x
+    {
+      into b
+      outof y
+      {
+        into c
+        outof z
+
+        file
+      }
+    }
+  }
+}
diff --git a/test_resources/exact_compile_test_src/nesting.sus.res b/test_resources/exact_compile_test_src/nesting.sus.res
new file mode 100644
--- /dev/null
+++ b/test_resources/exact_compile_test_src/nesting.sus.res
@@ -0,0 +1,11 @@
+[
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "~/a/b/c/file",
+            "sources": [
+                "complex/x/y/z/file"
+            ]
+        }
+    }
+]
diff --git a/test_resources/exact_compile_test_src/sub.sus b/test_resources/exact_compile_test_src/sub.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/exact_compile_test_src/sub.sus
@@ -0,0 +1,8 @@
+card sub {
+  spark file sub/subfile.sus
+  spark card other
+}
+
+card other {
+  file.txt
+}
diff --git a/test_resources/exact_compile_test_src/sub.sus.res b/test_resources/exact_compile_test_src/sub.sus.res
new file mode 100644
--- /dev/null
+++ b/test_resources/exact_compile_test_src/sub.sus.res
@@ -0,0 +1,20 @@
+[
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "thing.txt",
+            "sources": [
+                "sub/thing.txt"
+            ]
+        }
+    },
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "file.txt",
+            "sources": [
+                "file.txt"
+            ]
+        }
+    }
+]
diff --git a/test_resources/exact_compile_test_src/sub/subfile.sus b/test_resources/exact_compile_test_src/sub/subfile.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/exact_compile_test_src/sub/subfile.sus
@@ -0,0 +1,3 @@
+card subfile {
+  thing.txt
+}
diff --git a/test_resources/exact_compile_test_src/sub/subfile.sus.res b/test_resources/exact_compile_test_src/sub/subfile.sus.res
new file mode 100644
--- /dev/null
+++ b/test_resources/exact_compile_test_src/sub/subfile.sus.res
@@ -0,0 +1,11 @@
+[
+    {
+        "deployment kind": "link",
+        "directions": {
+            "destination": "thing.txt",
+            "sources": [
+                "thing.txt"
+            ]
+        }
+    }
+]
diff --git a/test_resources/hop_test/hop1dir/hop1.sus b/test_resources/hop_test/hop1dir/hop1.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/hop_test/hop1dir/hop1.sus
@@ -0,0 +1,7 @@
+card hop1 {
+  into b
+  outof x
+  
+  beta -> one
+  spark file hop2dir/hop2.sus
+}
diff --git a/test_resources/hop_test/hop1dir/hop2dir/hop2.sus b/test_resources/hop_test/hop1dir/hop2dir/hop2.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/hop_test/hop1dir/hop2dir/hop2.sus
@@ -0,0 +1,7 @@
+card hop2 {
+  into c
+  outof y
+  
+  gamma -> two
+  spark file hop3dir/hop3.sus
+}
diff --git a/test_resources/hop_test/hop1dir/hop2dir/hop3dir/hop3.sus b/test_resources/hop_test/hop1dir/hop2dir/hop3dir/hop3.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/hop_test/hop1dir/hop2dir/hop3dir/hop3.sus
@@ -0,0 +1,6 @@
+card hop3 {
+  into d
+  outof z
+  
+  delta -> three
+}
diff --git a/test_resources/hop_test/root.sus b/test_resources/hop_test/root.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/hop_test/root.sus
@@ -0,0 +1,7 @@
+card root {
+  into a
+  outof u
+
+  alpha -> zero
+  spark file hop1dir/hop1.sus
+}
diff --git a/test_resources/shouldCompile/bash.sus b/test_resources/shouldCompile/bash.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/shouldCompile/bash.sus
@@ -0,0 +1,8 @@
+card bash {
+  into ~
+  
+  .bashrc
+  .bash_aliases
+  .bash_profile
+  .profile
+}
diff --git a/test_resources/shouldCompile/complex.sus b/test_resources/shouldCompile/complex.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/shouldCompile/complex.sus
@@ -0,0 +1,34 @@
+card main {
+  spark card configs
+  spark card poems
+}
+
+card configs {
+  spark file bash.sus bash
+
+  alternatives super-laptop shared
+  into ~
+
+  {
+    outof zsh
+
+    .zshrc
+    .zshenv
+    .zlogin
+  }
+
+  vim -> .vim
+}
+
+card poems {
+  outof poems
+  into poems
+  {
+    kind copy
+
+    "A windows file with spaces.txt" -> clean
+  }
+  {
+    kind link
+  }
+}
diff --git a/test_resources/shouldNotParse/empty_file.sus b/test_resources/shouldNotParse/empty_file.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/shouldNotParse/empty_file.sus
diff --git a/test_resources/shouldNotParse/missing_implementation.sus b/test_resources/shouldNotParse/missing_implementation.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/shouldNotParse/missing_implementation.sus
@@ -0,0 +1,1 @@
+card "missing implementation"
diff --git a/test_resources/shouldParse/empty_card.sus b/test_resources/shouldParse/empty_card.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/shouldParse/empty_card.sus
@@ -0,0 +1,1 @@
+card "empty" {}
diff --git a/test_resources/shouldParse/littered_with_comments.sus b/test_resources/shouldParse/littered_with_comments.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/shouldParse/littered_with_comments.sus
@@ -0,0 +1,6 @@
+card [[muhaha]] bash #yadayada
+  { # Wut
+    into [[hehe]] ~
+    out[[xD]]of bash[[files!]]
+    bashrc -[[wut]]> .bashrc
+  } # These comments are annoying, right?
diff --git a/test_resources/shouldParse/short_syntax.sus b/test_resources/shouldParse/short_syntax.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/shouldParse/short_syntax.sus
@@ -0,0 +1,11 @@
+card "bash" {
+  into ~
+
+  # Without the dot shortcut
+  test.txt
+  file
+  
+  # With the dot shortcut
+  .bashrc
+  .bash_aliases 
+}
diff --git a/test_resources/shouldParse/with_quotes.sus b/test_resources/shouldParse/with_quotes.sus
new file mode 100644
--- /dev/null
+++ b/test_resources/shouldParse/with_quotes.sus
@@ -0,0 +1,5 @@
+card name {
+  "a"c->"x"
+  "b"l->"y"
+  "c"->"z"
+}
