{
  config,
  mainUser,
  pkgs,
  ...
} @ inputs: let
  convertMkv = pkgs.callPackage ./convert.nix {inherit pkgs;};
  extractSubs = pkgs.callPackage ./extract-subs {inherit pkgs;};
  sub-clean = pkgs.callPackage ./cleanup.nix {inherit pkgs;};
  bazarr-bulk = pkgs.callPackage ./syncing.nix inputs;
in {
  # TODO:
  # - Improve cleanup
  # - figure out bazarr postprocessing with syncing subs

  environment.systemPackages = [
    bazarr-bulk
  ];

  systemd = {
    services.manage-subs = {
      serviceConfig = {
        User = mainUser;
        Group = config.users.users.${mainUser}.group;
      };

      path = [
        convertMkv
        extractSubs
        sub-clean
        bazarr-bulk
      ];

      script = ''
        # Make sure every video file is a mkv
        find /data/{anime,history,movies,tv} -name '*.mp4' -exec convertMkv "mp4" "{}" \;

        # Export subs from mkv files
        find /data/{anime,history,movies,tv} -name '*.mkv' -printf "%h\0" |
        xargs -0 -I '{}' extract-subs '{}' "eng,fre"

        # Remove ads and stuff in subs
        find /data/{anime,history,movies,tv} -name '*.srt' -exec sub-clean "{}" \;

        # Bulk sync everything
        bb movies sync
        bb tv-shows sync
      '';
    };

    timers.manage-subs = {
      wantedBy = ["timers.target"];
      partOf = ["manage-subs.service"];
      timerConfig.OnCalendar = ["0:00:00"];
    };
  };
}