diff --git a/.envrc b/.envrc
new file mode 100644
index 0000000..b1a5883
--- /dev/null
+++ b/.envrc
@@ -0,0 +1 @@
+export PATH="~/.PNPM_HOME:$PATH"
diff --git a/.pnpm-debug.log b/.pnpm-debug.log
deleted file mode 100644
index 934d140..0000000
--- a/.pnpm-debug.log
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "0 debug pnpm:scope": {
-    "selected": 1
-  },
-  "1 error pnpm": {
-    "code": "ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND",
-    "err": {
-      "name": "pnpm",
-      "message": "No package.json (or package.yaml, or package.json5) was found in \"/home/adrielus/Projects/nixos-config\".",
-      "code": "ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND",
-      "stack": "pnpm: No package.json (or package.yaml, or package.json5) was found in \"/home/adrielus/Projects/nixos-config\".\n    at readProjectManifest (/nix/store/iigpa453qi2achcz6mq83bnwif8m42mj-pnpm-6.22.2/lib/node_modules/pnpm/dist/pnpm.cjs:43046:13)\n    at async Object.readProjectManifestOnly (/nix/store/iigpa453qi2achcz6mq83bnwif8m42mj-pnpm-6.22.2/lib/node_modules/pnpm/dist/pnpm.cjs:43050:28)\n    at async readProjectManifestOnly (/nix/store/iigpa453qi2achcz6mq83bnwif8m42mj-pnpm-6.22.2/lib/node_modules/pnpm/dist/pnpm.cjs:43269:24)\n    at async Object.handler (/nix/store/iigpa453qi2achcz6mq83bnwif8m42mj-pnpm-6.22.2/lib/node_modules/pnpm/dist/pnpm.cjs:129915:24)\n    at async /nix/store/iigpa453qi2achcz6mq83bnwif8m42mj-pnpm-6.22.2/lib/node_modules/pnpm/dist/pnpm.cjs:134121:20\n    at async run (/nix/store/iigpa453qi2achcz6mq83bnwif8m42mj-pnpm-6.22.2/lib/node_modules/pnpm/dist/pnpm.cjs:134095:34)\n    at async runPnpm (/nix/store/iigpa453qi2achcz6mq83bnwif8m42mj-pnpm-6.22.2/lib/node_modules/pnpm/dist/pnpm.cjs:134307:5)\n    at async /nix/store/iigpa453qi2achcz6mq83bnwif8m42mj-pnpm-6.22.2/lib/node_modules/pnpm/dist/pnpm.cjs:134299:7"
-    }
-  }
-}
\ No newline at end of file
diff --git a/dotfiles/fish/config.fish b/dotfiles/fish/config.fish
index 267995f..0b39554 100644
--- a/dotfiles/fish/config.fish
+++ b/dotfiles/fish/config.fish
@@ -18,3 +18,6 @@ end
 # direnv hook, aparently
 # https://direnv.net/docs/hook.html
 direnv hook fish | source
+
+# allow using packages installed by pnpm
+fish_add_path $HOME/.PNPM_HOME
diff --git a/dotfiles/neovim/README.md b/dotfiles/neovim/README.md
index d660d69..4af10a5 100644
--- a/dotfiles/neovim/README.md
+++ b/dotfiles/neovim/README.md
@@ -35,6 +35,7 @@ Table of my own keybinds. Here as documentation for myself. I am yet to include
 | gi           | Go to implementation                | lspconfig          |
 | \<leader>rn  | Rename                              | lspconfig          |
 | \<leader>f   | format                              | lspconfig          |
+| \<leader>ca  | code actions                        | lspconfig          |
 
 ### Telescope
 
@@ -74,8 +75,8 @@ Table of my own keybinds. Here as documentation for myself. I am yet to include
 
 ### Nix
 
-| Keybind | Description                                 |
-| ------- | ------------------------------------------- |
+| Keybind | Description                          |
+| ------- | ------------------------------------ |
 | _ug_    | Run nix-fetchgit on the current file |
 
 ### Lean
diff --git a/dotfiles/neovim/ftplugin/hkf.lua b/dotfiles/neovim/ftplugin/hkf.lua
new file mode 100644
index 0000000..d1f855d
--- /dev/null
+++ b/dotfiles/neovim/ftplugin/hkf.lua
@@ -0,0 +1 @@
+vim.cmd("syntax hkf")
diff --git a/dotfiles/neovim/lua/my/init.lua b/dotfiles/neovim/lua/my/init.lua
index 0c5cb1c..15adf52 100644
--- a/dotfiles/neovim/lua/my/init.lua
+++ b/dotfiles/neovim/lua/my/init.lua
@@ -1,13 +1,13 @@
 local M = {}
 
 function M.setup()
-    -- Import my other files
-    require("my.paq").setup()
-    require("my.theme").setup()
-    require("my.options").setup()
-    require('my.keymaps').setup()
-    require('my.plugins').setup()
-    require("telescope.extensions.unicode").setupAbbreviations()
+  -- Import my other files
+  require("my.paq").setup()
+  require("my.theme").setup()
+  require("my.options").setup()
+  require('my.keymaps').setup()
+  require('my.plugins').setup()
+  require("telescope.extensions.unicode").setupAbbreviations()
 end
 
 return M
diff --git a/dotfiles/neovim/lua/my/keymaps.lua b/dotfiles/neovim/lua/my/keymaps.lua
index 62ce997..bdf671b 100644
--- a/dotfiles/neovim/lua/my/keymaps.lua
+++ b/dotfiles/neovim/lua/my/keymaps.lua
@@ -1,6 +1,5 @@
 local helpers = require("my.helpers")
 local arpeggio = require("my.plugins.arpeggio")
-local au = require("my.helpers.augroup")
 
 local M = {}
 
@@ -22,18 +21,16 @@ function M.mapSilent(mode, lhs, rhs, opts)
 end
 
 function M.setup()
-  M.map("n", "qq", ":wq<cr>") -- Create vertical split
+  M.map("n", "qq", ":wq<cr>") -- Save and quit
 
   -- Create chords
   if arpeggio ~= nil then
     arpeggio.chord("n", "vs", "<C-w>v") -- Create vertical split
     arpeggio.chord("n", "ji", ":w<cr>") -- Saving
     arpeggio.chord("i", "jk", "<Esc>") -- Remap Esc to jk
-    arpeggio.chord("i", "<Leader>k", "<C-k><cr>") -- Rebind digraph insertion to leader+k
-    arpeggio.chord("inv", "<Leader>a", "<C-6><cr>") -- Rebind switching to the last pane using leader+a
     arpeggio.chord("inv", "<Leader>a", "<C-6><cr>") -- Rebind switching to the last pane using leader+a
     arpeggio.chord("nv", "cp", "\"+") -- Press cp to use the global clipboard
-    arpeggio.chord("n", "rw", ":%s/<C-r><C-w>/") -- Press rt to rename word under cursor
+    arpeggio.chord("n", "rw", ":%s/<C-r><C-w>/") -- Press rw to rename word under cursor
   end
 
   return M
diff --git a/dotfiles/neovim/lua/my/options.lua b/dotfiles/neovim/lua/my/options.lua
index d544e93..7e33306 100644
--- a/dotfiles/neovim/lua/my/options.lua
+++ b/dotfiles/neovim/lua/my/options.lua
@@ -37,7 +37,6 @@ function M.setup()
 
     -- Import other options
     require("my.options.folding").setup()
-    require("my.options.files").setup()
 end
 
 return M
diff --git a/dotfiles/neovim/lua/my/options/files.lua b/dotfiles/neovim/lua/my/options/files.lua
deleted file mode 100644
index 42dc9eb..0000000
--- a/dotfiles/neovim/lua/my/options/files.lua
+++ /dev/null
@@ -1,15 +0,0 @@
-local au = require("my.helpers.augroup")
-local M = {}
-
-local syntaxFiles = {hkf = "hkf"}
-
-function M.setup()
-    au.augroup("myfiledetection", function()
-        for extension, syntax in pairs(syntaxFiles) do
-            au.autocmd("BufnewFile,BufRead", "*." .. extension,
-                       "setf " .. syntax)
-        end
-    end)
-end
-
-return M
diff --git a/dotfiles/neovim/lua/my/paq.lua b/dotfiles/neovim/lua/my/paq.lua
index e5f816e..cd08732 100644
--- a/dotfiles/neovim/lua/my/paq.lua
+++ b/dotfiles/neovim/lua/my/paq.lua
@@ -3,8 +3,7 @@ local M = {}
 function M.setup()
   local paq = require("paq")
   local themePackages = require("my.theme").deps
-  local base = {
-    "neovim/nvim-lspconfig", -- configures lsps for me
+  local base = { "neovim/nvim-lspconfig", -- configures lsps for me
     "windwp/nvim-autopairs", -- closes pairs for me (should look for a better one)
     "nvim-lua/plenary.nvim", -- async utility lib it seems?
     "nvim-telescope/telescope.nvim", -- fuzzy search for say opening files
@@ -40,7 +39,10 @@ function M.setup()
     "saadparwaiz1/cmp_luasnip", -- snippet support for cmp
     "wakatime/vim-wakatime", -- track time usage
     "vmchale/dhall-vim", -- dhall syntax highlighting
-    "folke/which-key.nvim"
+    "folke/which-key.nvim", -- shows what other keys I can press to finish a command
+    "psliwka/vim-smoothie", -- smooth scrolling
+    "easymotion/vim-easymotion", -- removes the need for spamming w or e
+    "tpope/vim-surround" -- work with brackets, quotes, tags, etc
   }
 
   for _, v in ipairs(themePackages) do
diff --git a/dotfiles/neovim/lua/my/plugins/dashboard.lua b/dotfiles/neovim/lua/my/plugins/dashboard.lua
index c8600a7..c6bc9d4 100644
--- a/dotfiles/neovim/lua/my/plugins/dashboard.lua
+++ b/dotfiles/neovim/lua/my/plugins/dashboard.lua
@@ -2,31 +2,7 @@ local M = {}
 
 function M.setup()
   local db = require("dashboard")
-  -- db.custom_header = {
-  --   "", "",
-  --   [[         /\    \                  /\    \              /\    \                  /\    \                  /\    \         ]],
-  --   [[        /::\____\                /::\    \            /::\    \                /::\    \                /::\    \        ]],
-  --   [[       /:::/    /               /::::\    \           \:::\    \              /::::\    \              /::::\    \       ]],
-  --   [[      /:::/   _/___            /::::::\    \           \:::\    \            /::::::\    \            /::::::\    \      ]],
-  --   [[     /:::/   /\    \          /:::/\:::\    \           \:::\    \          /:::/\:::\    \          /:::/\:::\    \     ]],
-  --   [[    /:::/   /::\____\        /:::/__\:::\    \           \:::\    \        /:::/__\:::\    \        /:::/__\:::\    \    ]],
-  --   [[   /:::/   /:::/    /       /::::\   \:::\    \          /::::\    \      /::::\   \:::\    \      /::::\   \:::\    \   ]],
-  --   [[  /:::/   /:::/   _/___    /::::::\   \:::\    \        /::::::\    \    /::::::\   \:::\    \    /::::::\   \:::\    \  ]],
-  --   [[ /:::/___/:::/   /\    \  /:::/\:::\   \:::\    \      /:::/\:::\    \  /:::/\:::\   \:::\    \  /:::/\:::\   \:::\____\ ]],
-  --   [[|:::|   /:::/   /::\____\/:::/  \:::\   \:::\____\    /:::/  \:::\____\/:::/__\:::\   \:::\____\/:::/  \:::\   \:::|    |]],
-  --   [[|:::|__/:::/   /:::/    /\::/    \:::\  /:::/    /   /:::/    \::/    /\:::\   \:::\   \::/    /\::/   |::::\  /:::|____|]],
-  --   [[ \:::\/:::/   /:::/    /  \/____/ \:::\/:::/    /   /:::/    / \/____/  \:::\   \:::\   \/____/  \/____|:::::\/:::/    / ]],
-  --   [[  \::::::/   /:::/    /            \::::::/    /   /:::/    /            \:::\   \:::\    \            |:::::::::/    /  ]],
-  --   [[   \::::/___/:::/    /              \::::/    /   /:::/    /              \:::\   \:::\____\           |::|\::::/    /   ]],
-  --   [[    \:::\__/:::/    /               /:::/    /    \::/    /                \:::\   \::/    /           |::| \::/____/    ]],
-  --   [[     \::::::::/    /               /:::/    /      \/____/                  \:::\   \/____/            |::|  ~|          ]],
-  --   [[      \::::::/    /               /:::/    /                                 \:::\    \                |::|   |          ]],
-  --   [[       \::::/    /               /:::/    /                                   \:::\____\               \::|   |          ]],
-  --   [[        \::/____/                \::/    /                                     \::/    /                \:|   |          ]],
-  --   [[         ~~                       \/____/                                       \/____/                  \|___|          ]],
-  --   ""
-  -- }
-
+  db.custom_header = {}
 end
 
 return M
diff --git a/dotfiles/tmux/tmux.conf b/dotfiles/tmux/tmux.conf
index 7d718c3..fba08f2 100644
--- a/dotfiles/tmux/tmux.conf
+++ b/dotfiles/tmux/tmux.conf
@@ -3,13 +3,16 @@ set -g prefix C-a
 unbind C-b
 bind C-a send-prefix
 
+teh 
+
 # don't rename windows automatically
 set-option -g allow-rename off
 
 # Visual stuff
 set -g default-terminal "screen-256color"
-set-option -ga terminal-overrides ",screen-256color:Tc"
-set -g -a terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q' # Supposedly helps with cursor shapes under vim (spoiler: it does not)
+# set -ga terminal-overrides ",screen-256color:Tc"
+set -ga terminal-overrides ",xterm-256color:Tc"
+# set -g -a terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q' # Supposedly helps with cursor shapes under vim (spoiler: it does not)
 
 # Split panes with \ and -
 bind \\ split-window -h
@@ -34,10 +37,16 @@ bind -T copy-mode-vi V send-keys -X rectangle-toggle # Check if this works
 bind -T copy-mode-vi v send-keys -X begin-selection
 bind -T copy-mode-vi y send-keys -X copy-selection
 
+# smart pane switching with awareness of vim splits
+bind -n C-h run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-h) || tmux select-pane -L"
+bind -n C-j run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-j) || tmux select-pane -D"
+bind -n C-k run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-k) || tmux select-pane -U"
+bind -n C-l run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-l) || tmux select-pane -R"
+
 # Copy to clipboard using fastcopy
-set-option -g set-clipboard on
-set-option -g @fastcopy-action 'tmux load-buffer -w -'
-set-option -g @fastcopy-key a
+# set-option -g set-clipboard on
+# set-option -g @fastcopy-action 'tmux load-buffer -w -'
+# set-option -g @fastcopy-key a
 
 # Keep state around using resurrect
 set -g @resurrect-processes '"~python3"'
diff --git a/modules/applications/neovim.nix b/modules/applications/neovim.nix
index a08472e..726e84b 100644
--- a/modules/applications/neovim.nix
+++ b/modules/applications/neovim.nix
@@ -26,6 +26,7 @@ let
     # prettierd # prettier but faster
 
     # Others
+    nodePackages.typescript # typescript
     wakatime # time tracking
     fd # file finder
     ripgrep # grep rewrite (I think?)
diff --git a/modules/applications/shells/common.nix b/modules/applications/shells/common.nix
index 919ac5b..60c2916 100644
--- a/modules/applications/shells/common.nix
+++ b/modules/applications/shells/common.nix
@@ -1,4 +1,6 @@
 {
-  shellInit = "export GITHUB_TOKEN=$(cat ~/water/gh-token)";
+  shellInit = ''
+    export GITHUB_TOKEN=$(cat ~/water/gh-token)
+  '';
   # "neofetch --package_managers on --cpu_brand on --cpu_cores on --memory_percent on --memory_display infobar --os_arch on";
 }
diff --git a/modules/applications/shells/sessionVariables.nix b/modules/applications/shells/sessionVariables.nix
index ac171ef..8d5a66c 100644
--- a/modules/applications/shells/sessionVariables.nix
+++ b/modules/applications/shells/sessionVariables.nix
@@ -7,6 +7,8 @@ let
 
     # Sets neovim as default editor
     EDITOR = "nvim";
+
+    PNPM_HOME = "~/.PNPM_HOME";
   };
 in
 {
diff --git a/modules/applications/tmux.nix b/modules/applications/tmux.nix
index 2842a63..0eea7da 100644
--- a/modules/applications/tmux.nix
+++ b/modules/applications/tmux.nix
@@ -24,12 +24,12 @@ in
       enable = true;
 
       clock24 = true; # 24h clock format
-      terminal = "screen-256color"; # more colors
+      # terminal = "screen-256color"; # more colors
       historyLimit = 10000; # increase amount of saved lines
 
       plugins = with pkgs.tmuxPlugins; [
-        cpu # Show CPU load with easy icons
-        vim-tmux-navigator # Switch between tmux and vim panes with ease
+        # cpu # Show CPU load with easy icons
+        # vim-tmux-navigator # Switch between tmux and vim panes with ease
         sessionist # Nicer workflow for switching around between session
         # fastcopy # Easy copying of stuff
         resurrect # Save / restore tmux sessions
diff --git a/modules/overlays/npm/default.nix b/modules/overlays/npm/default.nix
index 53bdef1..a10eaa3 100644
--- a/modules/overlays/npm/default.nix
+++ b/modules/overlays/npm/default.nix
@@ -1,4 +1,4 @@
-# This file has been generated by node2nix 1.9.0. Do not edit!
+# This file has been generated by node2nix 1.11.1. Do not edit!
 
 {pkgs ? import <nixpkgs> {
     inherit system;
diff --git a/modules/overlays/npm/node-env.nix b/modules/overlays/npm/node-env.nix
index 5f05578..2590dd2 100644
--- a/modules/overlays/npm/node-env.nix
+++ b/modules/overlays/npm/node-env.nix
@@ -98,7 +98,7 @@ let
       ''
       + (lib.concatMapStrings (dependency:
         ''
-          if [ ! -e "${dependency.name}" ]; then
+          if [ ! -e "${dependency.packageName}" ]; then
               ${composePackage dependency}
           fi
         ''
@@ -257,8 +257,8 @@ let
           var packageLock = JSON.parse(fs.readFileSync("./package-lock.json"));
 
           if(![1, 2].includes(packageLock.lockfileVersion)) {
-             process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n");
-             process.exit(1);
+            process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n");
+            process.exit(1);
           }
 
           if(packageLock.dependencies !== undefined) {
@@ -390,7 +390,7 @@ let
   buildNodePackage =
     { name
     , packageName
-    , version
+    , version ? null
     , dependencies ? []
     , buildInputs ? []
     , production ? true
@@ -409,7 +409,7 @@ let
       extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" "meta" ];
     in
     stdenv.mkDerivation ({
-      name = "${name}-${version}";
+      name = "${name}${if version == null then "" else "-${version}"}";
       buildInputs = [ tarWrapper python nodejs ]
         ++ lib.optional (stdenv.isLinux) utillinux
         ++ lib.optional (stdenv.isDarwin) libtool
@@ -441,6 +441,14 @@ let
         if [ -d "$out/lib/node_modules/.bin" ]
         then
             ln -s $out/lib/node_modules/.bin $out/bin
+
+            # Patch the shebang lines of all the executables
+            ls $out/bin/* | while read i
+            do
+                file="$(readlink -f "$i")"
+                chmod u+rwx "$file"
+                patchShebangs "$file"
+            done
         fi
 
         # Create symlinks to the deployed manual page folders, if applicable
@@ -471,7 +479,7 @@ let
   buildNodeDependencies =
     { name
     , packageName
-    , version
+    , version ? null
     , src
     , dependencies ? []
     , buildInputs ? []
@@ -489,7 +497,7 @@ let
       extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ];
     in
       stdenv.mkDerivation ({
-        name = "node-dependencies-${name}-${version}";
+        name = "node-dependencies-${name}${if version == null then "" else "-${version}"}";
 
         buildInputs = [ tarWrapper python nodejs ]
           ++ lib.optional (stdenv.isLinux) utillinux
@@ -519,6 +527,7 @@ let
             if [ -f ${src}/package-lock.json ]
             then
                 cp ${src}/package-lock.json .
+                chmod 644 package-lock.json
             fi
           ''}
 
@@ -541,7 +550,7 @@ let
   buildNodeShell =
     { name
     , packageName
-    , version
+    , version ? null
     , src
     , dependencies ? []
     , buildInputs ? []
@@ -557,9 +566,10 @@ let
 
     let
       nodeDependencies = buildNodeDependencies args;
+      extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "unpackPhase" "buildPhase" ];
     in
-    stdenv.mkDerivation {
-      name = "node-shell-${name}-${version}";
+    stdenv.mkDerivation ({
+      name = "node-shell-${name}${if version == null then "" else "-${version}"}";
 
       buildInputs = [ python nodejs ] ++ lib.optional (stdenv.isLinux) utillinux ++ buildInputs;
       buildCommand = ''
@@ -578,7 +588,7 @@ let
         export NODE_PATH=${nodeDependencies}/lib/node_modules
         export PATH="${nodeDependencies}/bin:$PATH"
       '';
-    };
+    } // extraArgs);
 in
 {
   buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist;
diff --git a/modules/overlays/npm/node-packages.nix b/modules/overlays/npm/node-packages.nix
index 96c83d4..f5b550a 100644
--- a/modules/overlays/npm/node-packages.nix
+++ b/modules/overlays/npm/node-packages.nix
@@ -1,16 +1,16 @@
-# This file has been generated by node2nix 1.9.0. Do not edit!
+# This file has been generated by node2nix 1.11.1. Do not edit!
 
 {nodeEnv, fetchurl, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}:
 
 let
   sources = {
-    "core-js-3.23.1" = {
+    "core-js-3.23.5" = {
       name = "core-js";
       packageName = "core-js";
-      version = "3.23.1";
+      version = "3.23.5";
       src = fetchurl {
-        url = "https://registry.npmjs.org/core-js/-/core-js-3.23.1.tgz";
-        sha512 = "wfMYHWi1WQjpgZNC9kAlN4ut04TM9fUTdi7CqIoTVM7yaiOUQTklOzfb+oWH3r9edQcT3F887swuVmxrV+CC8w==";
+        url = "https://registry.npmjs.org/core-js/-/core-js-3.23.5.tgz";
+        sha512 = "7Vh11tujtAZy82da4duVreQysIoO2EvVrur7y6IzZkH1IHPSekuDi8Vuw1+YKjkbfWLRD7Nc9ICQ/sIUDutcyg==";
       };
     };
     "core_d-5.0.1" = {
@@ -31,13 +31,13 @@ let
         sha512 = "EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==";
       };
     };
-    "jsonc-parser-3.0.0" = {
+    "jsonc-parser-3.1.0" = {
       name = "jsonc-parser";
       packageName = "jsonc-parser";
-      version = "3.0.0";
+      version = "3.1.0";
       src = fetchurl {
-        url = "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz";
-        sha512 = "fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==";
+        url = "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz";
+        sha512 = "DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==";
       };
     };
     "nanolru-1.0.0" = {
@@ -49,6 +49,15 @@ let
         sha512 = "GyQkE8M32pULhQk7Sko5raoIbPalAk90ICG+An4fq6fCsFHsP6fB2K46WGXVdoJpy4SGMnZ/EKbo123fZJomWg==";
       };
     };
+    "picomatch-2.3.1" = {
+      name = "picomatch";
+      packageName = "picomatch";
+      version = "2.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz";
+        sha512 = "JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==";
+      };
+    };
     "prettier-2.7.1" = {
       name = "prettier";
       packageName = "prettier";
@@ -94,58 +103,58 @@ let
         sha512 = "C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==";
       };
     };
-    "vscode-css-languageservice-5.4.2" = {
+    "vscode-css-languageservice-6.0.1" = {
       name = "vscode-css-languageservice";
       packageName = "vscode-css-languageservice";
-      version = "5.4.2";
+      version = "6.0.1";
       src = fetchurl {
-        url = "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-5.4.2.tgz";
-        sha512 = "DT7+7vfdT2HDNjDoXWtYJ0lVDdeDEdbMNdK4PKqUl2MS8g7PWt7J5G9B6k9lYox8nOfhCEjLnoNC3UKHHCR1lg==";
+        url = "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.0.1.tgz";
+        sha512 = "81n/eeYuJwQdvpoy6IK1258PtPbO720fl13FcJ5YQECPyHMFkmld1qKHwPJkyLbLPfboqJPM53ys4xW8v+iBVw==";
       };
     };
-    "vscode-html-languageservice-4.2.5" = {
+    "vscode-html-languageservice-5.0.1" = {
       name = "vscode-html-languageservice";
       packageName = "vscode-html-languageservice";
-      version = "4.2.5";
+      version = "5.0.1";
       src = fetchurl {
-        url = "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-4.2.5.tgz";
-        sha512 = "dbr10KHabB9EaK8lI0XZW7SqOsTfrNyT3Nuj0GoPi4LjGKUmMiLtsqzfedIzRTzqY+w0FiLdh0/kQrnQ0tLxrw==";
+        url = "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.0.1.tgz";
+        sha512 = "OYsyn5HGAhxs0OIG+M0jc34WnftLtD67Wg7+TfrYwvf0waOkkr13zUqtdrVm2JPNQ6fJx+qnuM+vTbq7o1dCdQ==";
       };
     };
-    "vscode-json-languageservice-4.2.1" = {
+    "vscode-json-languageservice-5.1.0" = {
       name = "vscode-json-languageservice";
       packageName = "vscode-json-languageservice";
-      version = "4.2.1";
+      version = "5.1.0";
       src = fetchurl {
-        url = "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz";
-        sha512 = "xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==";
+        url = "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.1.0.tgz";
+        sha512 = "D5612D7h/Gh4A0JmdttPveWzT9dur21WXvBHWKPdOt0sLO6ILz8vN6+IzWnvwDOVAEFTpzIAMVMZwbKZkwGGiA==";
       };
     };
-    "vscode-jsonrpc-8.0.1" = {
+    "vscode-jsonrpc-8.0.2" = {
       name = "vscode-jsonrpc";
       packageName = "vscode-jsonrpc";
-      version = "8.0.1";
+      version = "8.0.2";
       src = fetchurl {
-        url = "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz";
-        sha512 = "N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==";
+        url = "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz";
+        sha512 = "RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==";
       };
     };
-    "vscode-languageserver-8.0.1" = {
+    "vscode-languageserver-8.0.2" = {
       name = "vscode-languageserver";
       packageName = "vscode-languageserver";
-      version = "8.0.1";
+      version = "8.0.2";
       src = fetchurl {
-        url = "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.1.tgz";
-        sha512 = "sn7SjBwWm3OlmLtgg7jbM0wBULppyL60rj8K5HF0ny/MzN+GzPBX1kCvYdybhl7UW63V5V5tRVnyB8iwC73lSQ==";
+        url = "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.2.tgz";
+        sha512 = "bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA==";
       };
     };
-    "vscode-languageserver-protocol-3.17.1" = {
+    "vscode-languageserver-protocol-3.17.2" = {
       name = "vscode-languageserver-protocol";
       packageName = "vscode-languageserver-protocol";
-      version = "3.17.1";
+      version = "3.17.2";
       src = fetchurl {
-        url = "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz";
-        sha512 = "BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==";
+        url = "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz";
+        sha512 = "8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==";
       };
     };
     "vscode-languageserver-textdocument-1.0.5" = {
@@ -157,13 +166,22 @@ let
         sha512 = "1ah7zyQjKBudnMiHbZmxz5bYNM9KKZYz+5VQLj+yr8l+9w3g+WAhCkUkWbhMEdC5u0ub4Ndiye/fDyS8ghIKQg==";
       };
     };
-    "vscode-languageserver-types-3.17.1" = {
+    "vscode-languageserver-types-3.17.2" = {
       name = "vscode-languageserver-types";
       packageName = "vscode-languageserver-types";
-      version = "3.17.1";
+      version = "3.17.2";
       src = fetchurl {
-        url = "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz";
-        sha512 = "K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==";
+        url = "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz";
+        sha512 = "zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==";
+      };
+    };
+    "vscode-markdown-languageservice-0.0.0-alpha.11" = {
+      name = "vscode-markdown-languageservice";
+      packageName = "vscode-markdown-languageservice";
+      version = "0.0.0-alpha.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vscode-markdown-languageservice/-/vscode-markdown-languageservice-0.0.0-alpha.11.tgz";
+        sha512 = "syFamf99xx+Q9DkA66+8fbSz2A2LJkyOV+nSziGgAzdDPv4jkb7eWF6l+nUteHTGbRLQ+q0tfkj0A7OovueCSQ==";
       };
     };
     "vscode-nls-5.0.1" = {
@@ -209,42 +227,44 @@ in
       license = "ISC";
     };
     production = true;
-    bypassCache = false;
+    bypassCache = true;
     reconstructLock = true;
   };
   vscode-langservers-extracted = nodeEnv.buildNodePackage {
     name = "vscode-langservers-extracted";
     packageName = "vscode-langservers-extracted";
-    version = "4.2.1";
+    version = "4.4.0";
     src = fetchurl {
-      url = "https://registry.npmjs.org/vscode-langservers-extracted/-/vscode-langservers-extracted-4.2.1.tgz";
-      sha512 = "Un7gzQgvACjGtsT0Yll5QqHgL65a4mTK5ChgMnO4dgTZ3tuwJCaP84oztBqvuFZzN9QxA3C07J4QEQvf1xjcgQ==";
+      url = "https://registry.npmjs.org/vscode-langservers-extracted/-/vscode-langservers-extracted-4.4.0.tgz";
+      sha512 = "sWXDFmAvXMUhF5E+6v4e77SwhVPSvdLxGGfkOz15LmAsfKoamKMnW7aARnu6mRWOzqz3hKJqVZN4hnCpdvtLKg==";
     };
     dependencies = [
-      sources."core-js-3.23.1"
-      sources."jsonc-parser-3.0.0"
+      sources."core-js-3.23.5"
+      sources."jsonc-parser-3.1.0"
+      sources."picomatch-2.3.1"
       sources."regenerator-runtime-0.13.9"
       sources."request-light-0.5.8"
       sources."typescript-4.7.4"
-      sources."vscode-css-languageservice-5.4.2"
-      sources."vscode-html-languageservice-4.2.5"
-      sources."vscode-json-languageservice-4.2.1"
-      sources."vscode-jsonrpc-8.0.1"
-      sources."vscode-languageserver-8.0.1"
-      sources."vscode-languageserver-protocol-3.17.1"
+      sources."vscode-css-languageservice-6.0.1"
+      sources."vscode-html-languageservice-5.0.1"
+      sources."vscode-json-languageservice-5.1.0"
+      sources."vscode-jsonrpc-8.0.2"
+      sources."vscode-languageserver-8.0.2"
+      sources."vscode-languageserver-protocol-3.17.2"
       sources."vscode-languageserver-textdocument-1.0.5"
-      sources."vscode-languageserver-types-3.17.1"
+      sources."vscode-languageserver-types-3.17.2"
+      sources."vscode-markdown-languageservice-0.0.0-alpha.11"
       sources."vscode-nls-5.0.1"
       sources."vscode-uri-3.0.3"
     ];
     buildInputs = globalBuildInputs;
     meta = {
-      description = "HTML/CSS/JSON language servers extracted from [vscode](https://github.com/Microsoft/vscode).";
+      description = "HTML/CSS/JSON/ESLint language servers extracted from [vscode](https://github.com/Microsoft/vscode).";
       homepage = "https://github.com/hrsh7th/vscode-langservers-extracted#readme";
       license = "MIT";
     };
     production = true;
-    bypassCache = false;
+    bypassCache = true;
     reconstructLock = true;
   };
 }
diff --git a/modules/themes/catppuccin/default.nix b/modules/themes/catppuccin/default.nix
index 8260a05..f3b7adb 100644
--- a/modules/themes/catppuccin/default.nix
+++ b/modules/themes/catppuccin/default.nix
@@ -55,7 +55,7 @@ in
 
   alacritty.settings = {
     import = [ "${foreign.alacritty}/catppuccin.yml" ];
-    # colors = variant;
+    # colors = "*${variant}";
     window = {
       padding = {
         x = 4;
diff --git a/modules/themes/catppuccin/nvim.lua b/modules/themes/catppuccin/nvim.lua
index 0347af2..eb27fbe 100644
--- a/modules/themes/catppuccin/nvim.lua
+++ b/modules/themes/catppuccin/nvim.lua
@@ -6,10 +6,11 @@ function M.setup()
   local catppuccin = require("catppuccin")
 
   catppuccin.setup({
-    compile = { enable = true },
+    compile = { enabled = true },
     transparent_background = false,
     integrations = { nvimtree = { transparent_panel = false } }
   })
+  print("loaded this theme!")
 
   vim.g.catppuccin_flavour = os.getenv("CATPPUCCIN_FLAVOUR")
   vim.cmd [[colorscheme catppuccin]]