diff --git a/.editorconfig b/.editorconfig
index 6b1b58df..439ba6b7 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -9,3 +9,7 @@ indent_style = tab
 [*.nix]
 indent_style = space
 indent_size = 2
+
+[*.{yml,yaml}]
+indent_style = space
+indent_size = 2
diff --git a/.github/workflows/nix-build.yml b/.github/workflows/nix-build.yml
new file mode 100644
index 00000000..0acda0ec
--- /dev/null
+++ b/.github/workflows/nix-build.yml
@@ -0,0 +1,21 @@
+name: Build (Nix)
+on: [push, pull_request]
+
+jobs:
+  build:
+    name: Build (Nix)
+    strategy:
+      matrix:
+        qtver: [qt6.8.0, qt6.7.3, qt6.7.2, qt6.7.1, qt6.7.0, qt6.6.3, qt6.6.2, qt6.6.1, qt6.6.0]
+        compiler: [clang, gcc]
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+      # Use cachix action over detsys for testing with act.
+      # - uses: cachix/install-nix-action@v27
+      - uses: DeterminateSystems/nix-installer-action@main
+
+      - run: nix-build --no-out-link --expr "(import ./ci/matrix.nix) { qtver = \"$QTVER\"; compiler = \"$COMPILER\"; }"
+        env:
+          QTVER: ${{ matrix.qtver }}
+          COMPILER: ${{ matrix.compiler }}
diff --git a/ci/matrix.nix b/ci/matrix.nix
new file mode 100644
index 00000000..be2da616
--- /dev/null
+++ b/ci/matrix.nix
@@ -0,0 +1,8 @@
+{
+  qtver,
+  compiler,
+}: let
+  nixpkgs = (import ./nix-checkouts.nix).${builtins.replaceStrings ["."] ["_"] qtver};
+  compilerOverride = (nixpkgs.callPackage ./variations.nix {}).${compiler};
+  pkg = (nixpkgs.callPackage ../default.nix {}).override compilerOverride;
+in pkg
diff --git a/ci/nix-checkouts.nix b/ci/nix-checkouts.nix
new file mode 100644
index 00000000..f24a7627
--- /dev/null
+++ b/ci/nix-checkouts.nix
@@ -0,0 +1,58 @@
+let
+  byCommit = {
+    commit,
+    sha256,
+  }: import (builtins.fetchTarball {
+    name = "nixpkgs-${commit}";
+    url = "https://github.com/nixos/nixpkgs/archive/${commit}.tar.gz";
+    inherit sha256;
+  }) {};
+in {
+  # For old qt versions, grab the commit before the version bump that has all the patches
+  # instead of the bumped version.
+
+  qt6_8_0 = byCommit {
+    commit = "23e89b7da85c3640bbc2173fe04f4bd114342367";
+    sha256 = "1b2v6y3bja4br5ribh9lj6xzz2k81dggz708b2mib83rwb509wyb";
+  };
+
+  qt6_7_3 = byCommit {
+    commit = "273673e839189c26130d48993d849a84199523e6";
+    sha256 = "0aca369hdxb8j0vx9791anyzy4m65zckx0lriicqhp95kv9q6m7z";
+  };
+
+  qt6_7_2 = byCommit {
+    commit = "22165c231d432826094b15062c207f236c5fa9e2";
+    sha256 = "0ndb6g21xk1wd7ivic5444mf3fnxqjb94b14y9r05431d8zamcf2";
+  };
+
+  qt6_7_1 = byCommit {
+    commit = "69bee9866a4e2708b3153fdb61c1425e7857d6b8";
+    sha256 = "1an4sha4jsa29dvc4n9mqxbq8jjwg7frl0rhy085g73m7l1yx0lj";
+  };
+
+  qt6_7_0 = byCommit {
+    commit = "4fbbc17ccf11bc80002b19b31387c9c80276f076";
+    sha256 = "09lhgdqlx8j9a7vpdcf8sddlhbzjq0s208spfmxfjdn14fvx8k0j";
+  };
+
+  qt6_6_3 = byCommit {
+    commit = "8f1a3fbaa92f1d59b09f2d24af6a607b5a280071";
+    sha256 = "0322zwxvmg8v2wkm03xpk6mqmmbfjgrhc9prcx0zd36vjl6jmi18";
+  };
+
+  qt6_6_2 = byCommit {
+    commit = "0bb9cfbd69459488576a0ef3c0e0477bedc3a29e";
+    sha256 = "172ww486jm1mczk9id78s32p7ps9m9qgisml286flc8jffb6yad8";
+  };
+
+  qt6_6_1 = byCommit {
+    commit = "8eecc3342103c38eea666309a7c0d90d403a039a";
+    sha256 = "1lakc0immsgrpz3basaysdvd0sx01r0mcbyymx6id12fk0404z5r";
+  };
+
+  qt6_6_0 = byCommit {
+    commit = "1ded005f95a43953112ffc54b39593ea2f16409f";
+    sha256 = "1xvyd3lj81hak9j53mrhdsqx78x5v2ppv8m2s54qa2099anqgm0f";
+  };
+}
diff --git a/ci/variations.nix b/ci/variations.nix
new file mode 100644
index 00000000..b0889be6
--- /dev/null
+++ b/ci/variations.nix
@@ -0,0 +1,7 @@
+{
+  clangStdenv,
+  gccStdenv,
+}: {
+  clang = { buildStdenv = clangStdenv; };
+  gcc = { buildStdenv = gccStdenv; };
+}
diff --git a/default.nix b/default.nix
index 83c5e542..ba4e7cbd 100644
--- a/default.nix
+++ b/default.nix
@@ -3,7 +3,7 @@
   nix-gitignore,
   pkgs,
   keepDebugInfo,
-  buildStdenv ? pkgs.clang17Stdenv,
+  buildStdenv ? pkgs.clangStdenv,
 
   cmake,
   ninja,
diff --git a/flake.lock b/flake.lock
index 8325718b..ed928826 100644
--- a/flake.lock
+++ b/flake.lock
@@ -2,11 +2,11 @@
   "nodes": {
     "nixpkgs": {
       "locked": {
-        "lastModified": 1725634671,
-        "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=",
+        "lastModified": 1732014248,
+        "narHash": "sha256-y/MEyuJ5oBWrWAic/14LaIr/u5E0wRVzyYsouYY3W6w=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c",
+        "rev": "23e89b7da85c3640bbc2173fe04f4bd114342367",
         "type": "github"
       },
       "original": {