diff --git a/home/features/cli/direnv.nix b/home/features/cli/direnv.nix
index 09a3edc..eea2ac3 100644
--- a/home/features/cli/direnv.nix
+++ b/home/features/cli/direnv.nix
@@ -1,4 +1,4 @@
-{
+{ config, ... }: {
   programs.direnv.enable = true;
   programs.direnv.nix-direnv.enable = true;
 
@@ -8,4 +8,8 @@
     # No more usesless logs
     DIRENV_LOG_FORMAT = "";
   };
+
+  satellite.persistence.at.state.apps.direnv.directories = [
+    "${config.xdg.dataHome}/direnv/allow"
+  ];
 }
diff --git a/home/features/cli/eza.nix b/home/features/cli/eza.nix
index 22b0b3d..e917307 100644
--- a/home/features/cli/eza.nix
+++ b/home/features/cli/eza.nix
@@ -1,10 +1,12 @@
-{ upkgs, lib, ... }: {
-  # REASON: not yet in nixpkgs-stable
-  home.packages = [ upkgs.eza ];
+{ pkgs, lib, ... }:
+let package = pkgs.eza;
+in
+{
+  home.packages = [ package ];
 
   # TODO: generalize alias creation to all shells
   programs.fish.shellAliases =
-    let eza = lib.getExe upkgs.eza;
+    let eza = lib.getExe package;
     in
     rec {
       ls = "${eza} --icons --long";
diff --git a/home/features/cli/fish/default.nix b/home/features/cli/fish/default.nix
index 536b1d6..ba1eb12 100644
--- a/home/features/cli/fish/default.nix
+++ b/home/features/cli/fish/default.nix
@@ -1,4 +1,4 @@
-{ pkgs, ... }:
+{ pkgs, config, ... }:
 {
   programs.fish = {
     enable = true;
@@ -30,4 +30,9 @@
 
     interactiveShellInit = builtins.readFile ./config.fish;
   };
+
+  satellite.persistence.at.state.apps.fish.directories = [
+    "${config.xdg.dataHome}/fish"
+    "${config.xdg.dataHome}/z" # The z fish plugin
+  ];
 }
diff --git a/home/features/cli/tmux/default.nix b/home/features/cli/tmux/default.nix
index 95cb191..30ff327 100644
--- a/home/features/cli/tmux/default.nix
+++ b/home/features/cli/tmux/default.nix
@@ -35,4 +35,8 @@ in
       source ${base16-tmux}
     '';
   };
+
+  satellite.persistence.at.state.apps.tmux.directories = [
+    ".tmux"
+  ];
 }
diff --git a/home/features/persistence.nix b/home/features/persistence.nix
index e0848f3..ea56c30 100644
--- a/home/features/persistence.nix
+++ b/home/features/persistence.nix
@@ -15,34 +15,38 @@
   ];
   # }}}
   # {{{ Rust
-  satellite.persistence.at.cache.apps.Rust.directories = [
-    #".cargo"
-    #".rustup"
+  satellite.persistence.at.cache.apps.rust.directories = [
+    ".cargo"
+    ".rustup"
   ];
   # }}}
   # {{{ Purescript
-  satellite.persistence.at.cache.apps.Purescript.directories = [
-    #"${config.xdg.cacheHome}/spago"
+  satellite.persistence.at.cache.apps.purescript.directories = [
+    "${config.xdg.dataHome}/purescript"
+    "${config.xdg.cacheHome}/spago"
   ];
   # }}}
   # {{{ Nodejs
-  satellite.persistence.at.cache.apps.Node.directories = [
-    #"${config.xdg.cacheHome}/yarn"
-    #"${config.xdg.dataHome}/pnpm"
-  ];
-  # }}}
-  # {{{ Shell stuff
-  satellite.persistence.at.cache.apps.Shell.directories = [
-    #"${config.xdg.dataHome}/fish"
-    #"${config.xdg.dataHome}/z" # The z fish plugin
-    #"${config.xdg.dataHome}/direnv/allow"
-    #".tmux"
-  ];
-  # }}}
-  # {{{ Neovim
-  satellite.persistence.at.cache.apps.Neovim.directories = [
-    #  "${config.xdg.dataHome}/nvim"
-  ];
+  satellite.persistence.at.cache.apps.nodejs = {
+    files = [
+      # Yarn auto-generated file
+      ".yarnrc"
+    ];
+
+    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"
+    ];
+  };
   # }}}
   # {{{ SSH
   satellite.persistence.at.state.apps.Ssh.directories = [
@@ -91,9 +95,4 @@
   # {{{ Wine
   satellite.persistence.at.state.apps.Wine.directories = [ ".wine" ];
   # }}}
-  # # {{{ Syncthing
-  # satellite.persistence.at.state.apps.Syncthing.directories = [
-  #   "${config.xdg.configHome}/syncthing" # Syncthing config data
-  # ];
-  # # }}}
 }