diff --git a/home/opdavies/nixedo.nix b/home/opdavies/nixedo.nix
index 636f67d1..e6c8bebd 100644
--- a/home/opdavies/nixedo.nix
+++ b/home/opdavies/nixedo.nix
@@ -1,5 +1,9 @@
 {
-  imports = [ ../common ];
+  imports = [
+    ../common
+
+    ./nixedo/modules/email-filters.nix
+  ];
 
   cli = {
     fzf.enable = true;
diff --git a/home/opdavies/nixedo/modules/email-filters.nix b/home/opdavies/nixedo/modules/email-filters.nix
new file mode 100644
index 00000000..4786c6c5
--- /dev/null
+++ b/home/opdavies/nixedo/modules/email-filters.nix
@@ -0,0 +1,45 @@
+{
+  config,
+  lib,
+  pkgs,
+  ...
+}:
+
+let
+  cfg = config.nixedo.${name};
+  name = "email-filters";
+in
+{
+  options.nixedo.${name} = {
+    configFile = lib.mkOption {
+      default = "${config.home.homeDirectory}/Code/${name}/config.lua";
+      internal = true;
+    };
+  };
+
+  config = {
+    systemd.user = {
+      services.${name} = {
+        Install.WantedBy = [ "default.target" ];
+
+        Service = {
+          ExecStart = "${lib.getExe pkgs.imapfilter} -c ${cfg.configFile}";
+          Type = "oneshot";
+        };
+
+        Unit.Description = name;
+      };
+
+      timers.${name} = {
+        Install.WantedBy = [ "timers.target" ];
+
+        Timer = {
+          OnCalendar = "*-*-* 06..23:00/5";
+          Unit = "${name}.service";
+        };
+
+        Unit.Description = "Automatically runs email filters with imapfilter.";
+      };
+    };
+  };
+}
diff --git a/hosts/t490/services/cron.nix b/hosts/t490/services/cron.nix
index f9b961c3..a8872af2 100644
--- a/hosts/t490/services/cron.nix
+++ b/hosts/t490/services/cron.nix
@@ -5,7 +5,6 @@
     enable = true;
 
     systemCronJobs = [
-      "*/15 * * * * opdavies ${pkgs.imapfilter}/bin/imapfilter -c ~/Code/email-filters/config.lua"
       "0 8,20 * * * opdavies ${pkgs.isync}/bin/mbsync -a"
     ];
   };