{ config, ... }:
{
  # {{{ Set up my custom imperanenceo wrapper
  satellite.persistence = {
    enable = true;

    # Actual data/media (eg: projects, images, videos, etc)
    at.data.path = "/persist/data";
    at.data.prefixDirectories = false;

    # App state I want to keep
    at.state.path = "/persist/state";

    # App state which I should be able to delete on a whim
    at.cache.path = "/persist/local/cache";
  };
  # }}}
  # {{{ XDG dirs
  # The lack of "~/Desktop" and "~/Downloads" is intentional!
  satellite.persistence.at.data.apps.main.directories = [
    config.xdg.userDirs.documents
    config.xdg.userDirs.pictures
    config.xdg.userDirs.music
    config.xdg.userDirs.videos
    config.xdg.userDirs.extraConfig.XDG_PROJECTS_DIR
  ];
  # }}}
  # {{{ OpenTabletDriver
  satellite.persistence.at.state.apps.open-tablet-driver.directories = [
    "${config.xdg.configHome}/OpenTabletDriver"
  ];
  # }}}
  # {{{ Programming tooling
  # {{{ Elm
  satellite.persistence.at.cache.apps.elm.directories = [ ".elm" ];
  # }}}
  # {{{ Fly.io
  satellite.persistence.at.state.apps.fly-io.directories = [ ".fly" ];
  # }}}
  # {{{ Haskell
  satellite.persistence.at.cache.apps.haskell.directories = [
    ".ghc"
    ".stack"
    ".local/state/cabal"
    "${config.xdg.cacheHome}/stack"
    "${config.xdg.cacheHome}/ghcide"
    "${config.xdg.cacheHome}/cabal"
  ];

  # TODO: should I move this in it's own haskell-specific file?
  home.file.".stack/config.yaml".text = builtins.toJSON { notify-if-nix-on-path = false; };
  # }}}
  # {{{ Nodejs
  satellite.persistence.at.cache.apps.nodejs = {
    files = [
      # ".yarnrc" # auto-generated by yarn
      ".node_repl_history"
      # ".ts_node_repl_history"
    ];

    directories = [
      # Node & npm
      "${config.xdg.cacheHome}/node-gyp"
      ".npm"

      # Yarn
      "${config.xdg.cacheHome}/yarn"

      # Pnpm
      "${config.xdg.cacheHome}/pnpm"
      "${config.xdg.dataHome}/pnpm"
      ".local/state/pnpm"
    ];
  };
  # }}}
  # {{{ Purescript
  satellite.persistence.at.cache.apps.purescript.directories = [
    "${config.xdg.dataHome}/purescript"
    "${config.xdg.cacheHome}/spago"
  ];
  # }}}
  # {{{ Python
  satellite.persistence.at.cache.apps.python = {
    files = [ ".python_history" ];

    directories = [
      ".ipython"
      ".jupyter"
      "${config.xdg.dataHome}/jupyter"
      "${config.xdg.cacheHome}/pip"
    ];
  };
  # }}}
  # {{{ Rust
  satellite.persistence.at.cache.apps.rust.directories = [
    ".cargo"
    ".rustup"
  ];
  # }}}
  # }}}
  # {{{ Desktop apps
  # {{{ QBittorrent
  satellite.persistence.at.state.apps.qbittorrent.directories = [
    "${config.xdg.configHome}/qBittorrent" # Config options
  ];

  satellite.persistence.at.cache.apps.qbittorrent.directories = [
    "${config.xdg.dataHome}/qBittorrent" # Torrent files, logs, etc
  ];
  # }}}
  # {{{ Signal
  satellite.persistence.at.state.apps.signal.directories = [
    "${config.xdg.configHome}/Signal" # Why tf does signal store it's state here 💀
  ];
  # }}}
  # {{{ Freetube
  satellite.persistence.at.state.apps.freetube.directories = [
    "${config.xdg.configHome}/FreeTube" # Why tf does freetube store it's state here 💀
  ];
  # }}}
  # {{{ Whats app
  satellite.persistence.at.state.apps.whatsapp.directories = [
    "${config.xdg.configHome}/whatsapp-for-linux"
    "${config.xdg.stateHome}/whatsapp-for-linux"
  ];

  satellite.persistence.at.cache.apps.whatsapp.directories = [
    "${config.xdg.cacheHome}/whatsapp-for-linux"
  ];
  # }}}
  # {{{ Lutris
  # TODO: there might be more to cache in .cache/lutris
  satellite.persistence.at.state.apps.lutris.directories = [
    "${config.xdg.configHome}/lutris" # General config data
    "${config.xdg.cacheHome}/lutris/banners" # Game banners
    "${config.xdg.cacheHome}/lutris/coverart" # Game cover art

    # Aparently IO intensive stuff like games prefer symlinks?
    {
      directory = "media/games/lutris";
      method = "symlink";
    } # Lutris games
  ];
  # }}}
  # {{{ Wine
  satellite.persistence.at.state.apps.wine.directories = [ ".wine" ];
  # }}}
  # {{{ Element
  satellite.persistence.at.state.apps.element.directories = [ "${config.xdg.configHome}/Element" ];
  # }}}
  # {{{ Bitwarden
  satellite.persistence.at.state.apps.bitwarden.directories = [
    "${config.xdg.configHome}/Bitwarden"
  ];
  # }}}
  # {{{ Gnome keyring
  services.gnome-keyring.enable = true;
  satellite.persistence.at.state.apps.gnome-keyring.directories = [
    "${config.xdg.dataHome}/keyrings"
  ];
  # }}}
  # }}}
  # {{{ Cli
  # {{{ Sops
  satellite.persistence.at.state.apps.sops.directories = [ "${config.xdg.configHome}/sops/age" ];
  # }}}
  # {{{ QMK
  home.sessionVariables.QMK_HOME = "${config.xdg.dataHome}/qmk";
  satellite.persistence.at.state.apps.qmk.directories = [ config.home.sessionVariables.QMK_HOME ];
  # }}}
  # }}}
}