diff --git a/common/themes/default.nix b/common/themes/default.nix
index 6410b0d..6ee385e 100644
--- a/common/themes/default.nix
+++ b/common/themes/default.nix
@@ -1,45 +1,79 @@
 { inputs, ... }:
 let
   themes = {
+    # {{{ Catppuccin variants
     catppuccin-mocha = {
-      image = ./wallpapers/auto/catppuccin-mocha-rain-world.png;
-      base16Scheme = "${inputs.catppuccin-base16}/base16/mocha.yaml";
-      polarity = "dark";
+      stylix = {
+        image = ./wallpapers/auto/catppuccin-mocha-rain-world.png;
+        base16Scheme = "${inputs.catppuccin-base16}/base16/mocha.yaml";
+        polarity = "dark";
+      };
+      satellite = {
+        transparency.value = 1.0;
+      };
     };
 
     catppuccin-latte = {
-      # image = ./wallpapers/eye.png;
-      image = ./wallpapers/watercag.png;
-      base16Scheme = "${inputs.catppuccin-base16}/base16/latte.yaml";
-      polarity = "light";
+      stylix = {
+        # image = ./wallpapers/eye.png;
+        image = ./wallpapers/watercag.png;
+        base16Scheme = "${inputs.catppuccin-base16}/base16/latte.yaml";
+        polarity = "light";
+      };
+      satellite = {
+        transparency.value = 0.6;
+      };
     };
-
+    # }}}
+    # {{{ Rosepine variants
     rosepine-dawn = {
-      image = ./wallpapers/rosepine_light_field.png;
-      base16Scheme = "${inputs.rosepine-base16}/rose-pine-dawn.yaml";
-      polarity = "light";
+      stylix = {
+        image = ./wallpapers/rosepine_light_field.png;
+        base16Scheme = "${inputs.rosepine-base16}/rose-pine-dawn.yaml";
+        polarity = "light";
+      };
+      satellite = {
+        transparency.value = 1.0;
+      };
     };
-
+    # }}}
+    # {{{ Experiment: AI generated themes
     gpt = {
       monopurple-light = {
-        image = ./wallpapers/auto/catppuccin-latte-city.png;
-        base16Scheme = ./gpt-themes/monopurple-light.yaml;
-        polarity = "light";
+        stylix = {
+          image = ./wallpapers/auto/catppuccin-latte-city.png;
+          base16Scheme = ./gpt-themes/monopurple-light.yaml;
+          polarity = "light";
+        };
+        satellite = {
+          transparency.value = 1.0;
+        };
       };
 
       purplepink-light = {
-        image = ./wallpapers/auto/catppuccin-latte-city.png;
-        base16Scheme = ./gpt-themes/purplepink-light.yaml;
-        polarity = "light";
+        stylix = {
+          image = ./wallpapers/auto/catppuccin-latte-city.png;
+          base16Scheme = ./gpt-themes/purplepink-light.yaml;
+          polarity = "light";
+        };
+        satellite = {
+          transparency.value = 1.0;
+        };
       };
     };
+    # }}}
   };
+
+  # Select your current theme here!
+  currentTheme = themes.catppuccin-latte;
 in
 {
-  # Select your current theme here!
-  imports = [
-    { stylix = themes.catppuccin-latte; }
-  ];
+  # We apply the current theme here.
+  # The rest is handled by the respective modules!
+  imports = [{
+    stylix = currentTheme.stylix;
+    satellite.theming = currentTheme.satellite;
+  }];
 
   # Requires me to manually turn targets on!
   stylix.autoEnable = false;
diff --git a/devshells/default.nix b/devshells/default.nix
index 9b0b4f1..54d9d58 100644
--- a/devshells/default.nix
+++ b/devshells/default.nix
@@ -1,5 +1,6 @@
 args: {
-  visonum = import ./visonum.nix args;
+  haskell = import ./haskell.nix args;
+  purescript = import ./purescript.nix args;
   rwtw = import ./rwtw.nix args;
   typst = import ./typst.nix args;
 }
diff --git a/devshells/haskell.nix b/devshells/haskell.nix
new file mode 100644
index 0000000..13a3b26
--- /dev/null
+++ b/devshells/haskell.nix
@@ -0,0 +1,6 @@
+# shell containing the tools i most commonly use for haskell work!
+{ pkgs, ... }:
+pkgs.mkShell {
+  nativebuildinputs = with pkgs; [ ghc hpack stack cabal-install ];
+}
+
diff --git a/devshells/purescript.nix b/devshells/purescript.nix
new file mode 100644
index 0000000..60047b2
--- /dev/null
+++ b/devshells/purescript.nix
@@ -0,0 +1,6 @@
+# shell containing the tools i most commonly use for purescript work!
+{ pkgs, upkgs, ... }:
+pkgs.mkShell {
+  # reason: purescript 0.15.10
+  nativebuildinputs = with pkgs; [ upkgs.purescript spago typescript nodejs ];
+}
diff --git a/devshells/rwtw.nix b/devshells/rwtw.nix
index 56565ba..3a42cf1 100644
--- a/devshells/rwtw.nix
+++ b/devshells/rwtw.nix
@@ -1,7 +1,10 @@
 # Shell for running the rain world tech wiki locally
-{ pkgs, inputs, ... }:
+{ pkgs, ... }:
 let
+  # Python packages the zola obsidian project expects.
   pythonDeps = ps: with ps; [ python-slugify rtoml ];
+
+  # Plugins used by the zola obsidian project
   zolaObsidianPython = pkgs.python3.withPackages pythonDeps;
 in
 pkgs.mkShell {
diff --git a/devshells/typst.nix b/devshells/typst.nix
index 04002bd..1bf358b 100644
--- a/devshells/typst.nix
+++ b/devshells/typst.nix
@@ -1,8 +1,8 @@
 # Shell for using a pinned version of typst
-{ pkgs, upkgs, inputs, ... }:
+{ pkgs, upkgs, ... }:
 pkgs.mkShell {
   nativeBuildInputs = [
-    # REASON: not on nixpkgs-stable
+    # REASON: version 0.7.0
     upkgs.typst
   ];
 }
diff --git a/devshells/visonum.nix b/devshells/visonum.nix
deleted file mode 100644
index 68ff0c6..0000000
--- a/devshells/visonum.nix
+++ /dev/null
@@ -1,7 +0,0 @@
-# Shell containing the tools I most commonly use for work
-{ pkgs, upkgs, ... }:
-pkgs.mkShell {
-  system = 
-  # REASON: purescript 0.15.7 and it's associated spago
-  nativeBuildInputs = [ upkgs.purescript upkgs.spago pkgs.typescript pkgs.nodejs ];
-}
diff --git a/dotfiles/neovim/lazy-lock.json b/dotfiles/neovim/lazy-lock.json
index c2e5137..87bffff 100644
--- a/dotfiles/neovim/lazy-lock.json
+++ b/dotfiles/neovim/lazy-lock.json
@@ -1,79 +1,77 @@
 {
-  "LuaSnip": { "branch": "master", "commit": "51ebb4b6637290e1b8e0fb0d6f38b605d3c24940" },
+  "LuaSnip": { "branch": "master", "commit": "99a94cc35ec99bf06263d0346128e908a204575c" },
   "abbreinder.nvim": { "branch": "main", "commit": "5b2b5ff08a9ada42238d733aeebc6d3d96314d77" },
   "abbremand.nvim": { "branch": "main", "commit": "d633341f632b0b2666dfc6dfe6b9842ba1610a1d" },
+  "catppuccin": { "branch": "main", "commit": "490078b1593c6609e6a50ad5001e7902ea601824" },
   "clipboard-image.nvim": { "branch": "main", "commit": "af8fdaad7e6fed0741e18dbf2f57bdc7494adaee" },
   "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
-  "cmp-cmdline": { "branch": "main", "commit": "5af1bb7d722ef8a96658f01d6eb219c4cf746b32" },
+  "cmp-cmdline": { "branch": "main", "commit": "8ee981b4a91f536f52add291594e89fb6645e451" },
   "cmp-emoji": { "branch": "main", "commit": "19075c36d5820253d32e2478b6aaf3734aeaafa0" },
-  "cmp-nvim-lsp": { "branch": "main", "commit": "0e6b2ed705ddcff9738ec4ea838141654f12eeef" },
+  "cmp-nvim-lsp": { "branch": "main", "commit": "44b16d11215dce86f253ce0c30949813c0a90765" },
   "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
   "cmp_luasnip": { "branch": "master", "commit": "18095520391186d634a0045dacaa346291096566" },
-  "crates.nvim": { "branch": "main", "commit": "3648f8787656d7572740560331553abdaa8cb982" },
-  "dashboard-nvim": { "branch": "master", "commit": "0af0ad181db271ef8d5a332f4cfcec9118340497" },
+  "crates.nvim": { "branch": "main", "commit": "d5caf28aba49e81ac4099426231f3cf3c151013a" },
+  "dashboard-nvim": { "branch": "master", "commit": "c17d3210b3dec8798b4fc82a11c542989251f85d" },
   "dhall-vim": { "branch": "master", "commit": "68500ef46ff3706f46c99db3be7a0c8abcf6a3ae" },
-  "dressing.nvim": { "branch": "master", "commit": "f19cbd56f7f8cad212c58a7285d09c5d9c273896" },
+  "dressing.nvim": { "branch": "master", "commit": "6bde51adabba06f7fd4a469885a85f36d78a5f52" },
   "fidget.nvim": { "branch": "main", "commit": "0ba1e16d07627532b6cae915cc992ecac249fb97" },
-  "firenvim": { "branch": "master", "commit": "e2d5a0f97d1f41e03c8d2a3c71ee60b1a4a6bb83" },
   "github-actions-yaml.vim": { "branch": "master", "commit": "f2f16243447cea174daa6b4a9ffd3ff9213814ef" },
   "gitlinker.nvim": { "branch": "master", "commit": "cc59f732f3d043b626c8702cb725c82e54d35c25" },
-  "glow.nvim": { "branch": "main", "commit": "bbd0473d72a45094495ee5600b5577823543eefe" },
+  "glow.nvim": { "branch": "main", "commit": "8942dfb05794f436af4fbc90a34393f1fd36f361" },
   "harpoon": { "branch": "master", "commit": "21f4c47c6803d64ddb934a5b314dcb1b8e7365dc" },
   "hydra.nvim": { "branch": "master", "commit": "3ced42c0b6a6c85583ff0f221635a7f4c1ab0dd0" },
-  "hyprland-vim-syntax": { "branch": "main", "commit": "254df6b476db5784bc6bfe3f612129b73dfc43b5" },
+  "hyprland-vim-syntax": { "branch": "main", "commit": "8488a24b50882da969979103b4d668c70e7995b9" },
   "idris2-nvim": { "branch": "main", "commit": "3a2b4d2b5ffeab9e47298456c59c31b4e1ddebc9" },
-  "inc-rename.nvim": { "branch": "main", "commit": "fb1b7468f27d874feb209eac46be5205e20b7fd3" },
-  "iron.nvim": { "branch": "master", "commit": "792dd11752c4699ea52c737b5e932d6f21b25834" },
+  "inc-rename.nvim": { "branch": "main", "commit": "ed0f6f2b917cac4eb3259f907da0a481b27a3b7e" },
+  "iron.nvim": { "branch": "master", "commit": "7f876ee3e1f4ea1e5284b1b697cdad5b256e8046" },
   "jupytext.vim": { "branch": "master", "commit": "32c1e37b2edf63a7e38d0deb92cc3f1462cc4dcd" },
   "kmonad-vim": { "branch": "master", "commit": "37978445197ab00edeb5b731e9ca90c2b141723f" },
-  "knap": { "branch": "main", "commit": "8c083d333b8a82421a521539eb1c450b06c90eb6" },
+  "knap": { "branch": "main", "commit": "503010f541696e99ed5c62f658620e546cebf8b0" },
   "kotlin-vim": { "branch": "master", "commit": "53fe045906df8eeb07cb77b078fc93acda6c90b8" },
-  "lazy.nvim": { "branch": "main", "commit": "e6bf3a0d9c4899dcf832270f79bb1cee8fbc506e" },
-  "lean.nvim": { "branch": "main", "commit": "ea68b6abc252e65f88a08305a3d6e1578a27b720" },
-  "leap": { "branch": "main", "commit": "be918a8e6aa00a6cfa7270d4bfcc11b2f80d6902" },
-  "live-command.nvim": { "branch": "main", "commit": "bc7e094e7ff52caf682c1430ff3a43ff55f6a58b" },
+  "lazy.nvim": { "branch": "main", "commit": "dac844ed617dda4f9ec85eb88e9629ad2add5e05" },
+  "lean.nvim": { "branch": "main", "commit": "67580fab5bed73920fa3fdd712fc8e805c389c3d" },
+  "leap": { "branch": "main", "commit": "5efe985cf68fac3b6a6dfe7a75fbfaca8db2af9c" },
   "lspkind.nvim": { "branch": "master", "commit": "57610d5ab560c073c465d6faf0c19f200cb67e6e" },
-  "lualine.nvim": { "branch": "master", "commit": "05d78e9fd0cdfb4545974a5aa14b1be95a86e9c9" },
-  "magma-nvim": { "branch": "main", "commit": "395b48e2e202d82fca76c15d2dcd8785c125d686" },
+  "lualine.nvim": { "branch": "master", "commit": "45e27ca739c7be6c49e5496d14fcf45a303c3a63" },
+  "magma-nvim": { "branch": "main", "commit": "ff3deba8a879806a51c005e50782130246143d06" },
   "mind.nvim": { "branch": "master", "commit": "002137dd7cf97865ebd01b6a260209d2daf2da66" },
-  "neoconf.nvim": { "branch": "main", "commit": "ee205ffd079f96d32c837dcf29af259e0dde8557" },
-  "neodev.nvim": { "branch": "main", "commit": "358f11c585fdccfcb5e8eae720c423fbed6d92de" },
-  "neogit": { "branch": "master", "commit": "80be328067b370744c39323674a2ebaf515dea14" },
-  "neorg": { "branch": "main", "commit": "e0fcf254fbdb95fa0918692aee1c93b938e883f8" },
-  "neorg-telescope": { "branch": "main", "commit": "d24f445c912451ddbf17cbe8da36561b51b10d39" },
-  "nui.nvim": { "branch": "main", "commit": "2b2732528e4a79eb8542568bd51d25f710395bd6" },
-  "null-ls.nvim": { "branch": "main", "commit": "c89333e034a8daba654ebfcf9a4ec9f87765f01e" },
-  "nvim-autopairs": { "branch": "master", "commit": "59df87a84c80a357ca8d8fe86e451b93ac476ccc" },
-  "nvim-cmp": { "branch": "main", "commit": "fc0f694af1a742ada77e5b1c91ff405c746f4a26" },
+  "neoconf.nvim": { "branch": "main", "commit": "08f146d53e075055500dca35e93281faff95716b" },
+  "neodev.nvim": { "branch": "main", "commit": "9a5c0f0de5c15fba52d4fb83d425d3f4fa7abfa1" },
+  "neogit": { "branch": "master", "commit": "e4c428239928425829cb5247e430f26d25d5788e" },
+  "neorg": { "branch": "main", "commit": "66e5a4e4ed7645590ac8388abdedb8f840b88f0d" },
+  "neorg-telescope": { "branch": "main", "commit": "1310d4aaefd8149c9839bbe1d5610e94389e2f0e" },
+  "nui.nvim": { "branch": "main", "commit": "9e3916e784660f55f47daa6f26053ad044db5d6a" },
+  "null-ls.nvim": { "branch": "main", "commit": "0010ea927ab7c09ef0ce9bf28c2b573fc302f5a7" },
+  "nvim-autopairs": { "branch": "master", "commit": "ae5b41ce880a6d850055e262d6dfebd362bb276e" },
+  "nvim-cmp": { "branch": "main", "commit": "51f1e11a89ec701221877532ee1a23557d291dd5" },
   "nvim-comment": { "branch": "main", "commit": "e9ac16ab056695cad6461173693069ec070d2b23" },
-  "nvim-lspconfig": { "branch": "master", "commit": "fefba589c56a5568a089299e36a4c8242502faaa" },
-  "nvim-tree.lua": { "branch": "master", "commit": "e2a4c9d09d205ebe5f071264f43f73a0077c43a3" },
-  "nvim-treesitter": { "branch": "master", "commit": "62146fe415193879290c523b54cb5072e1f5dbbc" },
-  "nvim-treesitter-textobjects": { "branch": "master", "commit": "95b76b95eff25e1e64f363938cd853852355d70a" },
-  "nvim-web-devicons": { "branch": "master", "commit": "2a125024a137677930efcfdf720f205504c97268" },
-  "nvim_context_vt": { "branch": "master", "commit": "dcfd29699e614035dd6ab863039e1c1811cace91" },
+  "nvim-lspconfig": { "branch": "master", "commit": "a981d4447b92c54a4d464eb1a76b799bc3f9a771" },
+  "nvim-tree.lua": { "branch": "master", "commit": "0a54dcb76b02f3a4e2da370c7a3f6f2b7b43ef01" },
+  "nvim-treesitter": { "branch": "master", "commit": "bc52938ddde0ff6b3d51ff215d2c66f2e39b7099" },
+  "nvim-treesitter-textobjects": { "branch": "master", "commit": "9e519b6146512c8e2e702faf8ac48420f4f5deec" },
+  "nvim-web-devicons": { "branch": "master", "commit": "ab899311f8ae00a47eae8e0879506cead8eb1561" },
+  "nvim_context_vt": { "branch": "master", "commit": "f44f46ecad6e6983fd04dac84c5a5c03815d3427" },
   "paperplanes.nvim": { "branch": "master", "commit": "d704b2e1e594b32d454cc7e0c5f2cf9b391e3cc1" },
-  "plenary.nvim": { "branch": "master", "commit": "499e0743cf5e8075cd32af68baa3946a1c76adf1" },
+  "plenary.nvim": { "branch": "master", "commit": "267282a9ce242bbb0c5dc31445b6d353bed978bb" },
   "presence.nvim": { "branch": "main", "commit": "87c857a56b7703f976d3a5ef15967d80508df6e6" },
   "purescript-vim": { "branch": "main", "commit": "82348352e6568fcc0385bd7c99a8ead3a479feea" },
   "rasi.vim": { "branch": "main", "commit": "eac9969cf935cd4380987dc99bfa10d69d3f34a6" },
-  "rose-pine": { "branch": "main", "commit": "15aac8c529bb38ac39fdb22f7be7f37c0e39dd0c" },
-  "rust-tools.nvim": { "branch": "master", "commit": "71d2cf67b5ed120a0e31b2c8adb210dd2834242f" },
+  "rust-tools.nvim": { "branch": "master", "commit": "0cc8adab23117783a0292a0c8a2fbed1005dc645" },
   "scrap.nvim": { "branch": "main", "commit": "16db44ae9403ec9c4b140394f294475d1af80a18" },
-  "smart-splits.nvim": { "branch": "master", "commit": "e9a8f08b9db566ebc2b942b4776567f981b2986c" },
-  "telescope-file-browser.nvim": { "branch": "master", "commit": "6cf29d5139601993343c4e70ee2d1f67959d9cc5" },
+  "smart-splits.nvim": { "branch": "master", "commit": "7aad6019dee974a01333523a5b8e122b7e7da454" },
+  "telescope-file-browser.nvim": { "branch": "master", "commit": "ad7b637c72549713b9aaed7c4f9c79c62bcbdff0" },
   "telescope-fzf-native.nvim": { "branch": "main", "commit": "9bc8237565ded606e6c366a71c64c0af25cd7a50" },
   "telescope.nvim": { "branch": "master", "commit": "e960efa60e97df58e089b00270f09d60f27202c8" },
-  "typst.vim": { "branch": "main", "commit": "6750b01970045affed30efe063d7e21b399f1efc" },
-  "undotree": { "branch": "master", "commit": "485f01efde4e22cb1ce547b9e8c9238f36566f21" },
+  "typst.vim": { "branch": "main", "commit": "6a99324a138c2da69589a8ab2e49375774e43d77" },
+  "undotree": { "branch": "master", "commit": "0e11ba7325efbbb3f3bebe06213afa3e7ec75131" },
   "venn.nvim": { "branch": "main", "commit": "c114563960b8fb1197695d42798d1f3e7190b798" },
   "vim-abolish": { "branch": "master", "commit": "cb3dcb220262777082f63972298d57ef9e9455ec" },
   "vim-sleuth": { "branch": "master", "commit": "1cc4557420f215d02c4d2645a748a816c220e99b" },
   "vim-surround": { "branch": "master", "commit": "3d188ed2113431cf8dac77be61b842acb64433d9" },
   "vim-teal": { "branch": "master", "commit": "d2aa107b257879e774680792a2aebaf9cd5742e0" },
   "vim-tmux-navigator": { "branch": "master", "commit": "cdd66d6a37d991bba7997d593586fc51a5b37aa8" },
-  "vim-wakatime": { "branch": "master", "commit": "02be9238319937e04afea73fd0fc7da5413ee041" },
+  "vim-wakatime": { "branch": "master", "commit": "018fa9a80c27ccf2a8967b9e27890372e5c2fb4f" },
   "vimux": { "branch": "master", "commit": "616fcb4799674a7a809b14ca2dc155bb6ba25788" },
-  "which-key.nvim": { "branch": "main", "commit": "e271c28118998c93a14d189af3395812a1aa646c" },
+  "which-key.nvim": { "branch": "main", "commit": "7ccf476ebe0445a741b64e36c78a682c1c6118b7" },
   "yuck.vim": { "branch": "master", "commit": "9b5e0370f70cc30383e1dabd6c215475915fe5c3" }
 }
\ No newline at end of file
diff --git a/dotfiles/neovim/lua/my/keymaps.lua b/dotfiles/neovim/lua/my/keymaps.lua
index 6fd8e0a..5e73161 100644
--- a/dotfiles/neovim/lua/my/keymaps.lua
+++ b/dotfiles/neovim/lua/my/keymaps.lua
@@ -41,7 +41,12 @@ function M.nmap(from, to, desc, silent, isLocal)
     isLocal = false
   end
 
-  vim.keymap.set("n", from, to, { desc = desc, silent = silent, buffer = isLocal })
+  vim.keymap.set(
+    "n",
+    from,
+    to,
+    { desc = desc, silent = silent, buffer = isLocal }
+  )
 end
 
 -- }}}
@@ -100,6 +105,16 @@ function M.setup()
   })
   -- }}}
 
+  -- {{{ Winblend
+  vim.api.nvim_create_autocmd("FileType", {
+    pattern = { "Telescope*" },
+    group = vim.api.nvim_create_augroup("WinblendSettings", {}),
+    callback = function()
+      vim.opt.winblend = 0
+    end,
+  })
+  -- }}}
+
   return M
 end
 
diff --git a/dotfiles/neovim/lua/my/neovide.lua b/dotfiles/neovim/lua/my/neovide.lua
index eb81548..7f286d4 100644
--- a/dotfiles/neovim/lua/my/neovide.lua
+++ b/dotfiles/neovim/lua/my/neovide.lua
@@ -2,10 +2,11 @@ local M = {}
 
 function M.setup()
   local default_length = 0.04
-  vim.g.neovide_floating_blur_amount_x = 3.0
-  vim.g.neovide_floating_blur_amount_y = 3.0
-  vim.g.neovide_transparency = 1.0
-  vim.g.pumblend = 30
+  vim.g.neovide_floating_blur_amount_x = 10.0
+  vim.g.neovide_floating_blur_amount_y = 10.0
+  vim.g.neovide_transparency = 0.6
+  -- vim.g.transparency = 0.6
+  vim.g.pumblend = 100
   vim.g.neovide_cursor_animation_length = default_length
   vim.g.neovide_cursor_animate_in_insert_mode = false
 end
diff --git a/dotfiles/neovim/lua/my/plugins/cmp.lua b/dotfiles/neovim/lua/my/plugins/cmp.lua
index af703f2..425cd26 100644
--- a/dotfiles/neovim/lua/my/plugins/cmp.lua
+++ b/dotfiles/neovim/lua/my/plugins/cmp.lua
@@ -34,12 +34,13 @@ function M.config()
 
   local options = {
     window = {
-      completion = {
+      documentation = cmp.config.window.bordered(),
+      completion = cmp.config.window.bordered({
         winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None",
         col_offset = -3,
         side_padding = 0,
         completeopt = "menu,menuone,noinsert",
-      },
+      }),
     },
     formatting = {
       fields = { "kind", "abbr", "menu" },
@@ -116,6 +117,7 @@ function M.config()
       { name = "cmdline" },
     }),
   })
+
 end
 
 return M
diff --git a/dotfiles/neovim/lua/my/plugins/init.lua b/dotfiles/neovim/lua/my/plugins/init.lua
index c395a75..4c979ab 100644
--- a/dotfiles/neovim/lua/my/plugins/init.lua
+++ b/dotfiles/neovim/lua/my/plugins/init.lua
@@ -140,6 +140,7 @@ return {
   {
     -- show progress for lsp stuff
     "j-hui/fidget.nvim",
+    tag = "legacy",
     event = "BufReadPre",
     cond = env.vscode.not_active(),
     config = true,
diff --git a/dotfiles/neovim/lua/my/plugins/lspconfig.lua b/dotfiles/neovim/lua/my/plugins/lspconfig.lua
index b28efaf..64c121a 100644
--- a/dotfiles/neovim/lua/my/plugins/lspconfig.lua
+++ b/dotfiles/neovim/lua/my/plugins/lspconfig.lua
@@ -210,10 +210,10 @@ end
 function lspconfig.config()
   diagnostics_icons()
   -- -- {{{ Change on-hover borders
-  -- vim.lsp.handlers["textDocument/hover"] =
-  --   vim.lsp.with(vim.lsp.handlers.hover, { border = "single" })
-  -- vim.lsp.handlers["textDocument/signatureHelp"] =
-  --   vim.lsp.with(vim.lsp.handlers.signature_help, { border = "single" })
+  vim.lsp.handlers["textDocument/hover"] =
+    vim.lsp.with(vim.lsp.handlers.hover, { border = "single" })
+  vim.lsp.handlers["textDocument/signatureHelp"] =
+    vim.lsp.with(vim.lsp.handlers.signature_help, { border = "single" })
   -- -- }}}
 
   local capabilities = M.capabilities()
diff --git a/dotfiles/neovim/lua/my/plugins/themes/catppuccin.lua b/dotfiles/neovim/lua/my/plugins/themes/catppuccin.lua
index 47d3a07..54542fc 100644
--- a/dotfiles/neovim/lua/my/plugins/themes/catppuccin.lua
+++ b/dotfiles/neovim/lua/my/plugins/themes/catppuccin.lua
@@ -13,7 +13,7 @@ function M.config()
 
   catppuccin.setup({
     transparent_background = true,
-    integrations = { nvimtree = true },
+    integrations = { nvimtree = true, telescope = true },
   })
 
   vim.cmd([[highlight NotifyINFOIcon guifg=#d6b20f]])
diff --git a/flake.nix b/flake.nix
index c6c99f7..6269dbe 100644
--- a/flake.nix
+++ b/flake.nix
@@ -237,9 +237,9 @@
       # Taken from [the deploy-rs docs](https://github.com/serokell/deploy-rs).
       checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) inputs.deploy-rs.lib;
       # }}}
-      # {{{ Apps
-      apps.x86_64-linux = (inputs.nixinate.nixinate.x86_64-linux self);
-      # }}}
+      # # {{{ Apps
+      # apps.x86_64-linux = (inputs.nixinate.nixinate.x86_64-linux self);
+      # # }}}
     };
 
   # {{{ Caching and whatnot
diff --git a/home/features/desktop/discord/default.nix b/home/features/desktop/discord/default.nix
index e7f75e2..6594a8d 100644
--- a/home/features/desktop/discord/default.nix
+++ b/home/features/desktop/discord/default.nix
@@ -11,10 +11,7 @@ in
   };
 
   home.packages = [ pkgs.discocss ];
-
-  xdg.configFile."discocss/custom.css".source =
-    themeMap.${config.lib.stylix.scheme.scheme}
-      or themeMap.default.${config.stylix.polarity};
+  xdg.configFile."discocss/custom.css".source = config.satellite.theming.get themeMap;
 
   satellite.persistence.at.state.apps.Discord.directories = [
     "${config.xdg.configHome}/discord" # Why tf does discord store it's state here 💀
diff --git a/home/features/desktop/eww/default.nix b/home/features/desktop/eww/default.nix
index 39f01e6..7c333a1 100644
--- a/home/features/desktop/eww/default.nix
+++ b/home/features/desktop/eww/default.nix
@@ -1,4 +1,4 @@
-{ config, pkgs, ... }:
+{ config, ... }:
 let
   base16-eww = config.lib.stylix.colors {
     template = builtins.readFile ./template.yuck;
@@ -7,12 +7,15 @@ let
   widgets = config.satellite.dev.path "home/features/desktop/eww/widgets";
 in
 {
-  home.packages = [ pkgs.eww ];
-  xdg.configFile."eww/eww.yuck".text = ''
-    # Color scheme
-    (include ${base16-eww})
+  programs.eww-hyprland = {
+    enable = true;
+    autoReload = true;
+    extraConfig = ''
+      ; Color scheme
+      (include "${base16-eww}")
 
-    # My widgets
-    (include ${widgets}/dashboard)
-  '';
+      ; My widgets
+      (include "${widgets}/bar.yuck")
+    '';
+  };
 }
diff --git a/home/features/desktop/eww/widgets/bar.yuck b/home/features/desktop/eww/widgets/bar.yuck
new file mode 100644
index 0000000..0650d3d
--- /dev/null
+++ b/home/features/desktop/eww/widgets/bar.yuck
@@ -0,0 +1,84 @@
+(defwindow bar
+  :monitor 0
+  :stacking "fg"
+  :focusable false
+  :exclusive true
+
+  :geometry (geometry
+              :width "80px"
+              :height "96%"
+              :x "20px"
+              :anchor "center left")
+
+  (bar-layout))
+
+(defwidget bar-layout []
+  (centerbox
+    :orientation "v"
+    :style "background:transparent"
+    (bar-start)
+    (bar-center)
+    (bar-end)))
+
+(defwidget bar-start []
+  (box
+    :orientation "v"
+    :valign "start"
+    (workspaces)))
+
+(defwidget bar-center []
+  (box
+    :orientation "v"
+    :valign "fill"
+    :space-evenly false
+    :style "background:blue"
+    (time)
+    (date)))
+
+(defwidget bar-end []
+  (box 
+    :orientation "v"
+    :valign "end"
+    :style "background:red"
+    :height 400
+    :spacing 20
+    (volume)
+    (battery)
+    (cpu-usage)))
+
+(defwidget workspaces []
+  (box
+    :class "workspaces"
+    :orientation "v"
+    :space-evenly true
+    :spacing 10
+    (button 1)
+    (button 2)
+    (button 3)
+    (button 4)
+    (button 5)
+    (button 6)))
+
+(defwidget date []
+  (label :text "today"))
+
+(defwidget time []
+  (label :text "time"))
+
+(defwidget volume []
+  (circular-progress
+    :orientation "v"
+    :value 60
+    :thickness 5))
+
+(defwidget battery []
+  (circular-progress
+    :orientation "v"
+    :value 60
+    :thickness 5))
+
+(defwidget cpu-usage []
+  (circular-progress
+    :orientation "v"
+    :value 60
+    :thickness 5))
diff --git a/home/features/desktop/eww/widgets/dashboard.yuck b/home/features/desktop/eww/widgets/dashboard.yuck
deleted file mode 100644
index 1f9e972..0000000
--- a/home/features/desktop/eww/widgets/dashboard.yuck
+++ /dev/null
@@ -1,12 +0,0 @@
-(defwindow dashboard
-  :stacking "bg"
-  ; :windowtype "normal"
-  :wm-ignore false
-  :reserve (struts :distance "40px" :side "left")
-  :geometry (geometry
-              :width "40px"
-              :height "100%")
-  (dashboard_layout))
-
-(defwidget dashboard_layout [] 
-  (label :text "A"))
diff --git a/home/features/desktop/spotify.nix b/home/features/desktop/spotify.nix
index 3712e8b..7236820 100644
--- a/home/features/desktop/spotify.nix
+++ b/home/features/desktop/spotify.nix
@@ -16,8 +16,7 @@ in
   programs.spicetify = {
     enable = true;
 
-    theme = themeMap.${config.lib.stylix.scheme.scheme}
-      or themeMap.default.${config.stylix.polarity};
+    theme = config.satellite.theming.get themeMap;
 
     enabledExtensions = with spicePkgs.extensions; [
       fullAppDisplayMod
diff --git a/home/features/wayland/default.nix b/home/features/wayland/default.nix
index 18b0112..2fd30b1 100644
--- a/home/features/wayland/default.nix
+++ b/home/features/wayland/default.nix
@@ -1,12 +1,13 @@
 # Common wayland stuff
-{ lib, pkgs, upkgs, inputs, ... }: {
-
+{ lib, pkgs, upkgs, ... }: {
   imports = [
     ./wofi.nix
     ./dunst.nix
     ./wlsunset.nix
+    ./wlogout.nix
     ../desktop/wezterm # Default hyprland terminal
     ../desktop/batsignal.nix
+    ../desktop/eww
   ];
 
   # Makes some stuff run on wayland (?)
diff --git a/home/features/wayland/hyprland/hyprland.conf b/home/features/wayland/hyprland/hyprland.conf
index 9a9db44..7126a93 100644
--- a/home/features/wayland/hyprland/hyprland.conf
+++ b/home/features/wayland/hyprland/hyprland.conf
@@ -21,9 +21,13 @@ decoration {
     contrast = 1
     brightness = 1.2
     noise = 0.05
+    xray = true
   }
 }
 
+# Blur eww widgets
+blurls=gtk-layer-shell
+
 input {
   kb_layout = us
 
@@ -49,6 +53,7 @@ misc {
 # Execute apps at launch
 exec-once = wezterm & firefox & discocss & spotify & obsidian
 
+
 # {{{ Window rules
 # {{{ Automatically move stuff to workspaces
 windowrulev2 = workspace 2 silent, title:^(.*Firefox.*)$ 
diff --git a/home/features/wayland/wlogout.nix b/home/features/wayland/wlogout.nix
new file mode 100644
index 0000000..e954432
--- /dev/null
+++ b/home/features/wayland/wlogout.nix
@@ -0,0 +1,45 @@
+{ config
+, pkgs
+, ...
+}:
+let bgImageSection = name: ''
+  #${name} {
+    background-image: image(url("${pkgs.wlogout}/share/wlogout/icons/${name}.png"));
+  }
+'';
+in
+{
+  xdg.configFile."wlogout/style.css".text = ''
+    * {
+      background-image: none;
+      font-family: ${config.stylix.fonts.sansSerif.name};
+    }
+
+    window {
+      background-color: rgba(${config.satellite.theming.colors.rgba "base00"});
+    }
+
+    button {
+      color: rgb(${config.satellite.theming.colors.rgb "base05"});
+      background: rgba(${config.satellite.theming.colors.rgb "base01"}, 0.2);
+      border-radius: 8px;
+      box-shadow: .5px .5px 1.5px 1.5px rgba(0, 0, 0, .5);
+      margin: 1rem;
+      background-repeat: no-repeat;
+      background-position: center;
+      background-size: 25%;
+    }
+
+    button:focus, button:active, button:hover {
+      background-color: rgba(${config.satellite.theming.colors.rgb "base02"}, 0.5);
+      outline-style: none;
+    }
+
+    ${bgImageSection "lock"}
+    ${bgImageSection "logout"}
+    ${bgImageSection "suspend"}
+    ${bgImageSection "hibernate"}
+    ${bgImageSection "shutdown"}
+    ${bgImageSection "reboot"}
+  '';
+}
diff --git a/home/features/xorg/default.nix b/home/features/xorg/default.nix
index 47f0b11..1c8cc53 100644
--- a/home/features/xorg/default.nix
+++ b/home/features/xorg/default.nix
@@ -1,6 +1,5 @@
 { pkgs, ... }: {
   imports = [
-    ../desktop/eww
     ../desktop/batsignal.nix
     ./rofi
     ./polybar
diff --git a/modules/common/default.nix b/modules/common/default.nix
index 11cb41d..1634475 100644
--- a/modules/common/default.nix
+++ b/modules/common/default.nix
@@ -3,4 +3,5 @@
 {
   # example = import ./example.nix;
   lua-colorscheme = import ./lua-colorscheme.nix;
+  theming = import ./theming.nix;
 }
diff --git a/modules/common/theming.nix b/modules/common/theming.nix
new file mode 100644
index 0000000..e848a82
--- /dev/null
+++ b/modules/common/theming.nix
@@ -0,0 +1,61 @@
+# Additional theming primitives not provided by stylix
+{ lib, config, ... }:
+let cfg = config.satellite.theming;
+in
+{
+  options.satellite.theming = {
+    transparency = {
+      enable = lib.mkEnableOption "transparency for desktop apps";
+      value = lib.mkOption {
+        description = "How transparent windows should be by default";
+        example = 0.6;
+        type = lib.types.float;
+      };
+    };
+
+    get = lib.mkOption {
+      # No generics:(
+      # The type of this is essentially (written in pseudocode):
+      #
+      # Record<String, T> 
+      #   & { default?: T
+      #         | {light?: T, dark?: T } }
+      # -> Option<T>
+      type = lib.types.functionTo lib.types.anything;
+      description = "Index a theme map by the current theme";
+    };
+
+    colors = {
+      rgb = lib.mkOption {
+        type = lib.types.functionTo lib.types.str;
+        description = "Returns comma separated rgb values for a color. To be used in css files:)";
+      };
+
+      rgba = lib.mkOption {
+        type = lib.types.functionTo lib.types.str;
+        description = ''
+          Returns comma separated rgba values for a color.
+          The transparency is taken from `options.satellite.theming.transparency`.
+        '';
+      };
+    };
+  };
+
+  config.satellite.theming = {
+    transparency.enable = cfg.transparency.value < 1.0;
+
+    get = themeMap:
+      themeMap.${config.lib.stylix.scheme.scheme}
+        or themeMap.default.${config.stylix.polarity or "dark"}
+        or themeMap.default
+        or (throw "Theme ${config.lib.stylix.scheme.scheme} not found in theme map!");
+
+    colors.rgb = color: builtins.concatStringsSep "," [
+      config.lib.stylix.scheme."${color}-rgb-r"
+      config.lib.stylix.scheme."${color}-rgb-g"
+      config.lib.stylix.scheme."${color}-rgb-b"
+    ];
+
+    colors.rgba = color: "${cfg.colors.rgb color},${toString cfg.transparency.value}";
+  };
+}
diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix
index aa9812d..7d39b1e 100644
--- a/modules/home-manager/default.nix
+++ b/modules/home-manager/default.nix
@@ -8,6 +8,7 @@
   monitors = import ./monitors.nix;
   satellite-dev = import ./satellite-dev.nix;
   satellite-persistence = import ./persistence.nix;
+  eww-hyprland = import ./eww-hyprland.nix;
 
   # Should upstream
   discord = import ./discord.nix;
diff --git a/modules/home-manager/eww-hyprland.nix b/modules/home-manager/eww-hyprland.nix
new file mode 100644
index 0000000..2c3adbf
--- /dev/null
+++ b/modules/home-manager/eww-hyprland.nix
@@ -0,0 +1,71 @@
+{ config
+, pkgs
+, lib
+, ...
+}:
+let
+  reload_script = pkgs.writeShellScript "reload_eww" ''
+    systemctl --user restart eww.service
+  '';
+
+  cfg = config.programs.eww-hyprland;
+in
+{
+  options.programs.eww-hyprland = {
+    enable = lib.mkEnableOption "eww Hyprland config";
+
+    package = lib.mkOption {
+      type = lib.types.nullOr lib.types.package;
+      default = pkgs.eww-wayland;
+      defaultText = lib.literalExpression "pkgs.eww-wayland";
+      description = "Eww package to use.";
+    };
+
+    autoReload = lib.mkOption {
+      type = lib.types.bool;
+      default = false;
+      defaultText = lib.literalExpression "false";
+      description = "Whether to restart the eww daemon and windows on change.";
+    };
+
+    dependencies = lib.mkOption {
+      type = lib.types.listOf lib.types.package;
+      default = [ ];
+      defaultText = lib.literalExpression "[]";
+      description = "Extra packages eww should have access to.";
+    };
+
+    extraConfig = lib.mkOption {
+      type = lib.types.lines;
+      default = null;
+      description = "Extra configuration for eww.";
+    };
+  };
+
+  config = lib.mkIf cfg.enable {
+    home.packages = [ cfg.package ];
+
+    # remove nix files
+    xdg.configFile."eww/eww.yuck" = {
+      text = cfg.extraConfig or "";
+
+      onChange =
+        if cfg.autoReload
+        then reload_script.outPath
+        else "";
+    };
+
+    systemd.user.services.eww = {
+      Unit = {
+        Description = "Eww Daemon";
+        PartOf = [ "graphical-session.target" ];
+      };
+      Service = {
+        Environment = "PATH=/run/wrappers/bin:${lib.makeBinPath cfg.dependencies}";
+        ExecStart = "${cfg.package}/bin/eww daemon --no-daemonize";
+        Restart = "on-failure";
+      };
+      Install.WantedBy = [ "graphical-session.target" ];
+    };
+  };
+}