diff --git a/common/default.nix b/common/default.nix
index 54e71c75..9d478620 100644
--- a/common/default.nix
+++ b/common/default.nix
@@ -30,6 +30,14 @@
   boot.tmp.cleanOnBoot = true;
 
   nix = {
+    # Allow deleting store files with '.' in the name
+    package = pkgs.nixUnstable.overrideAttrs (oldAttrs: {
+      patches =
+        (oldAttrs.patches or [])
+        ++ [
+          ./overlays/nix/patch
+        ];
+    });
     # Edit nix.conf
     settings = {
       # Store
diff --git a/common/overlays/nix/patch b/common/overlays/nix/patch
new file mode 100644
index 00000000..4b4bc053
--- /dev/null
+++ b/common/overlays/nix/patch
@@ -0,0 +1,12 @@
+diff --git a/src/libstore/path.cc b/src/libstore/path.cc
+index e642abcd5..0e584ef33 100644
+--- a/src/libstore/path.cc
++++ b/src/libstore/path.cc
+@@ -12,7 +12,7 @@ static void checkName(std::string_view path, std::string_view name)
+         if (!((c >= '0' && c <= '9')
+                 || (c >= 'a' && c <= 'z')
+                 || (c >= 'A' && c <= 'Z')
+-                || c == '+' || c == '-' || c == '.' || c == '_' || c == '?' || c == '='))
++                || c == '+' || c == '-' || c == '.' || c == '_' || c == '?' || c == '=' || c == '!'))
+             throw BadStorePath("store path '%s' contains illegal character '%s'", path, c);
+ }