diff --git a/flake.lock b/flake.lock
index 9b05423..d18b96a 100644
--- a/flake.lock
+++ b/flake.lock
@@ -115,11 +115,11 @@
         "zig": "zig"
       },
       "locked": {
-        "lastModified": 1738275804,
-        "narHash": "sha256-n9cSCLlWjc8Bc5QyZYLo5+c6MfTZjgDpUGx/FGxBiY8=",
+        "lastModified": 1738619868,
+        "narHash": "sha256-q4h4SY1kVkZG4t/59CmJvaKjlx+xjojhdU1HqxiQhrQ=",
         "owner": "ghostty-org",
         "repo": "ghostty",
-        "rev": "c5508e7d1922842ecd3160ea73b97da1282168b3",
+        "rev": "f0d276062b78658fc1f3857e9ea104788f1f4e58",
         "type": "github"
       },
       "original": {
@@ -130,11 +130,11 @@
     },
     "hardware": {
       "locked": {
-        "lastModified": 1737751639,
-        "narHash": "sha256-ZEbOJ9iT72iwqXsiEMbEa8wWjyFvRA9Ugx8utmYbpz4=",
+        "lastModified": 1738638143,
+        "narHash": "sha256-ZYMe4c4OCtIUBn5hx15PEGr0+B1cNEpl2dsaLxwY2W0=",
         "owner": "NixOS",
         "repo": "nixos-hardware",
-        "rev": "dfad538f751a5aa5d4436d9781ab27a6128ec9d4",
+        "rev": "9bdd53f5908453e4d03f395eb1615c3e9a351f70",
         "type": "github"
       },
       "original": {
@@ -151,11 +151,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1738275749,
-        "narHash": "sha256-PM+cGduJ05EZ+YXulqAwUFjvfKpPmW080mcuN6R1POw=",
+        "lastModified": 1738667255,
+        "narHash": "sha256-sMMQb9NydZqQ/MvvtPp+Ny0W9P0Jk0moU7SrTBlO5Vo=",
         "owner": "nix-community",
         "repo": "home-manager",
-        "rev": "a8159195bfaef3c64df75d3b1e6a68d49d392be9",
+        "rev": "7abcf59a365430b36f84eaa452a466b11e469e33",
         "type": "github"
       },
       "original": {
@@ -182,11 +182,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1738136902,
-        "narHash": "sha256-pUvLijVGARw4u793APze3j6mU1Zwdtz7hGkGGkD87qw=",
+        "lastModified": 1738644632,
+        "narHash": "sha256-DyvJjOOGmTSkkEfHq0oWkwtZOgejYIB5S865wmf/qos=",
         "owner": "nixos",
         "repo": "nixpkgs",
-        "rev": "9a5db3142ce450045840cc8d832b13b8a2018e0c",
+        "rev": "95ea544c84ebed84a31896b0ecea2570e5e0e236",
         "type": "github"
       },
       "original": {
@@ -269,11 +269,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1737411508,
-        "narHash": "sha256-j9IdflJwRtqo9WpM0OfAZml47eBblUHGNQTe62OUqTw=",
+        "lastModified": 1738291974,
+        "narHash": "sha256-wkwYJc8cKmmQWUloyS9KwttBnja2ONRuJQDEsmef320=",
         "owner": "Mic92",
         "repo": "sops-nix",
-        "rev": "015d461c16678fc02a2f405eb453abb509d4e1d4",
+        "rev": "4c1251904d8a08c86ac6bc0d72cc09975e89aef7",
         "type": "github"
       },
       "original": {
diff --git a/homes/x86_64-linux/jo@puzzlevision/default.nix b/homes/x86_64-linux/jo@puzzlevision/default.nix
index dfe391a..9cc7cc1 100644
--- a/homes/x86_64-linux/jo@puzzlevision/default.nix
+++ b/homes/x86_64-linux/jo@puzzlevision/default.nix
@@ -7,6 +7,9 @@
     themes.catppuccin = {
       gtk.enable = true;
     };
+
+    apps.nushell.enable = true;
+    apps.vscodium.enable = true;
   };
 
   home.file."~/.config/Yubico/u2f_keys".text = ''
@@ -22,60 +25,6 @@
     packages = [];
   };
 
-  programs = {
-      nushell = {
-        enable = true;
-
-        # for editing directly to config.nu
-        extraConfig = ''
-          let carapace_completer = {|spans|
-          carapace $spans.0 nushell $spans | from json
-          }
-          $env.config = {
-          show_banner: false,
-          completions: {
-          case_sensitive: false # case-sensitive completions
-          quick: true    # set to false to prevent auto-selecting completions
-          partial: true    # set to false to prevent partial filling of the prompt
-          algorithm: "fuzzy"    # prefix or fuzzy
-          external: {
-          # set to false to prevent nushell looking into $env.PATH to find more suggestions
-              enable: true
-          # set to lower can improve completion performance at the cost of omitting some options
-              max_results: 100
-              completer: $carapace_completer # check 'carapace_completer'
-            }
-          }
-          }
-          $env.PATH = ($env.PATH |
-          split row (char esep) |
-          prepend /home/myuser/.apps |
-          append /usr/bin/env
-          )
-        '';
-
-        shellAliases = {
-          vi = "hx";
-          vim = "hx";
-          nano = "hx";
-        };
-      };
-
-      carapace.enable = true;
-      carapace.enableNushellIntegration = true;
-
-      starship = {
-        enable = true;
-        settings = {
-          add_newline = true;
-          character = {
-          success_symbol = "[➜](bold green)";
-          error_symbol = "[➜](bold red)";
-        };
-      };
-    };
-  };
-
   # TODO: look at git-sync for syncing stuff like obsidian vaults.
   programs.git-credential-oauth.enable = true;
 
@@ -102,8 +51,6 @@
     devenv
     python39
     nixd
-    nil
-    zed-editor
     bruno
     deno
     carapace
diff --git a/modules/home/apps/codium/default.nix b/modules/home/apps/codium/default.nix
new file mode 100644
index 0000000..10c86a4
--- /dev/null
+++ b/modules/home/apps/codium/default.nix
@@ -0,0 +1,74 @@
+{
+  lib,
+  pkgs,
+  config,
+  namespace,
+  ...
+}: let
+  inherit (lib) mkEnableOption mkIf;
+  cfg = config.${namespace}.apps.vscodium;
+in {
+  options.${namespace}.apps.vscodium = {
+    enable = mkEnableOption "vscodium";
+  };
+
+  config = mkIf cfg.enable {
+    home.packages = with pkgs; [
+      alejandra
+    ];
+
+    programs.vscode = {
+      enable = true;
+      package = pkgs.vscodium;
+
+      enableUpdateCheck = false;
+      enableExtensionUpdateCheck = false;
+      mutableExtensionsDir = false;
+
+      extensions = with pkgs; [
+        ### Theming
+        vscode-extensions.pkief.material-icon-theme
+        vscode-extensions.catppuccin.catppuccin-vsc
+
+        ### General
+        vscode-extensions.usernamehw.errorlens
+        vscode-extensions.leonardssh.vscord
+        vscode-extensions.davidlday.languagetool-linter
+        vscode-extensions.christian-kohler.path-intellisense
+        vscode-extensions.wakatime.vscode-wakatime
+
+        ### Language specific
+        # Nushell
+        vscode-extensions.thenuprojectcontributors.vscode-nushell-lang
+
+        # Nix
+        vscode-extensions.kamadorueda.alejandra
+        vscode-extensions.jnoortheen.nix-ide
+
+        # Env
+        vscode-extensions.irongeek.vscode-env
+
+        # Deno (JavaScript)
+        vscode-extensions.denoland.vscode-deno
+      ];
+
+      userSettings = {
+        "files.autoSave" = "on";
+        "workbench.colorTheme" = "Catppuccin Macchiato";
+
+        "[nix]" = {
+          "editor.tabSize" = 2;
+          "formatterPath" = "alejandra";
+
+          "enableLanguageServer" = true;
+          "serverPath" = "nixd";
+          "serverSettings" = {
+            "nixd" = {
+              "formatting.command" = ["alejandra"];
+            };
+          };
+        };
+      };
+    };
+  };
+}
diff --git a/modules/home/apps/nushell/default.nix b/modules/home/apps/nushell/default.nix
new file mode 100644
index 0000000..75b4ef2
--- /dev/null
+++ b/modules/home/apps/nushell/default.nix
@@ -0,0 +1,69 @@
+{
+  lib,
+  pkgs,
+  config,
+  namespace,
+  ...
+}: let
+  inherit (lib) mkEnableOption mkIf;
+  cfg = config.${namespace}.apps.nushell;
+in {
+  options.${namespace}.apps.nushell = {
+    enable = mkEnableOption "Whether to enable nushell customization.";
+  };
+
+  config = mkIf cfg.enable {
+    programs = {
+      nushell = {
+        enable = true;
+
+        extraConfig = ''
+          let carapace_completer = {|spans|
+            carapace $spans.0 nushell ...$spans | from json
+          }
+
+          $env.config = {
+            completions: {
+              case_sensitive: false # case-sensitive completions
+              quick: true    # set to false to prevent auto-selecting completions
+              partial: true    # set to false to prevent partial filling of the prompt
+              algorithm: "fuzzy"    # prefix or fuzzy
+              external: {
+                # set to false to prevent nushell looking into $env.PATH to find more suggestions
+                enable: true
+                # set to lower can improve completion performance at the cost of omitting some options
+                max_results: 200
+                completer: $carapace_completer # check 'carapace_completer'
+              }
+            }
+          }
+
+          $env.PATH = ($env.PATH |
+            split row (char esep) |
+            prepend /run/wrappers/bin |
+            prepend /home/jo/.nix-profile/bin |
+            append /usr/bin/env/run/wrappers/bin
+          )
+        '';
+      };
+
+      carapace.enable = true;
+      carapace.enableNushellIntegration = true;
+
+      starship = {
+        enable = true;
+        settings = {
+          add_newline = true;
+          character = {
+            success_symbol = "[➜](bold green)";
+            error_symbol = "[➜](bold red)";
+          };
+        };
+      };
+    };
+
+    home.packages = with pkgs; [
+      carapace
+    ];
+  };
+}