diff --git a/flake.nix b/flake.nix
index 2aed73f..919e9d8 100644
--- a/flake.nix
+++ b/flake.nix
@@ -7,7 +7,7 @@
     devShells = eachSystem (system: let pkgs = import nixpkgs { inherit system; };
     in {
       default = pkgs.mkShell {
-        buildInputs = with pkgs; [ packwiz ];
+        buildInputs = with pkgs; [ packwiz nix-update ];
       };
     });
     packages = eachSystem (system: let pkgs = import nixpkgs { inherit system; };
diff --git a/nix/packages/shaders.nix b/nix/packages/shaders.nix
index 978cff9..e926091 100644
--- a/nix/packages/shaders.nix
+++ b/nix/packages/shaders.nix
@@ -1,10 +1,17 @@
-{ stdenvNoCC, fetchFromGitHub, zip }:
+{ stdenvNoCC,
+  lib,
+  fetchFromGitHub,
+  zip,
+  nix-update-script, }:
 let
   makeShaderPackage = {
     name,
     src,
+    branch ? null,
   }: stdenvNoCC.mkDerivation {
-    inherit name src;
+    pname = name;
+    inherit src;
+    version = src.rev;
     phases = [ "installPhase" ];
     buildInputs = [ zip ];
     installPhase = ''
@@ -12,11 +19,16 @@ let
       mkdir -p "$out"
       zip -r "$out/${name}.zip" .
     '';
+    passthru.updateScript = nix-update-script {
+      # this doesn't work for some reason; don't use --use-update-script for now
+      extraArgs = lib.optional (!(builtins.isNull branch)) "--version=branch=${branch}";
+    };
   };
 in
 {
   bliss-dh = makeShaderPackage {
     name = "Bliss-DH";
+    branch = "main";
     src = fetchFromGitHub {
       owner = "X0nk";
       repo = "Bliss-Shader";