diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ac6f54b..0aeae28 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,47 +1,64 @@
-before_script:
-  # report CPU info so we can monitor if real KVM becomes available. create /dev/kvm to fool nix
-  - cat /proc/cpuinfo
-  - ls -l /dev/kvm || true
-  - touch /dev/kvm
-
-nixos-intern:
+.template:
   image: nixos/nix
-  variables:
-    NIX_PATH: "nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-19.03.tar.gz"
+  before_script:
+    # report CPU info so we can monitor if real KVM becomes available. create /dev/kvm to fool nix
+    - cat /proc/cpuinfo
+    - ls -l /dev/kvm || true
+    - touch /dev/kvm
   script:
-    - nix-build --arg pkgs 'import tests/lib/pkgs.nokvm.nix' tests/intern.nix
+    - export NIX_PATH="nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-${VERSION}.tar.gz"
+    - nix-build --arg pkgs 'import tests/lib/pkgs.nokvm.nix' tests/${SUITE}.nix
 
-nixos-extern:
-  image: nixos/nix
+19-03-intern:
+  extends: .template
   variables:
-    NIX_PATH: "nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-19.03.tar.gz"
-  script:
-    - nix-build --arg pkgs 'import tests/lib/pkgs.nokvm.nix' tests/extern.nix
+    VERSION: "19.03"
+    SUITE:   "intern"
 
-nixos-clamav:
-  image: nixos/nix
+19-03-extern:
+  extends: .template
   variables:
-    NIX_PATH: "nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-19.03.tar.gz"
-  script:
-    - nix-build --arg pkgs 'import tests/lib/pkgs.nokvm.nix' tests/clamav.nix
+    VERSION: "19.03"
+    SUITE:   "extern"
 
-nixos-unstable-intern:
-  image: nixos/nix
+19-03-clamav:
+  extends: .template
   variables:
-    NIX_PATH: "nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz"
-  script:
-    - nix-build --arg pkgs 'import tests/lib/pkgs.nokvm.nix' tests/intern.nix
+    VERSION: "19.03"
+    SUITE:   "clamav"
 
-nixos-unstable-extern:
-  image: nixos/nix
+19-09-intern:
+  extends: .template
   variables:
-    NIX_PATH: "nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz"
-  script:
-    - nix-build --arg pkgs 'import tests/lib/pkgs.nokvm.nix' tests/extern.nix
+    VERSION: "19.09"
+    SUITE:   "intern"
 
-nixos-unstable-clamav:
-  image: nixos/nix
+19-09-extern:
+  extends: .template
   variables:
-    NIX_PATH: "nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz"
-  script:
-    - nix-build --arg pkgs 'import tests/lib/pkgs.nokvm.nix' tests/clamav.nix
+    VERSION: "19.09"
+    SUITE:   "extern"
+
+19-09-clamav:
+  extends: .template
+  variables:
+    VERSION: "19.09"
+    SUITE:   "clamav"
+
+unstable-intern:
+  extends: .template
+  variables:
+    VERSION: "unstable"
+    SUITE:   "intern"
+
+unstable-extern:
+  extends: .template
+  variables:
+    VERSION: "unstable"
+    SUITE:   "extern"
+
+unstable-clamav:
+  extends: .template
+  variables:
+    VERSION: "unstable"
+    SUITE:   "clamav"