diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
index 0f417d9..6b70631 100644
--- a/.github/workflows/check.yml
+++ b/.github/workflows/check.yml
@@ -11,9 +11,13 @@ jobs:
     steps:
       - uses: actions/checkout@v4
       - name: Install nix
-        uses: https://github.com/DeterminateSystems/nix-installer-action@main
+        uses: DeterminateSystems/nix-installer-action@main
+      - name: Setup Action cache for nix
+        uses: DeterminateSystems/magic-nix-cache-action@main
+        with:
+          fail-mode: true
       - name: Check Nix flake inputs
-        uses: https://github.com/DeterminateSystems/flake-checker-action@v4 # This action
+        uses: DeterminateSystems/flake-checker-action@v4 # This action
       - name: Run nix fmt
         run: nix fmt -- --check .
 
@@ -22,9 +26,13 @@ jobs:
     steps:
       - uses: actions/checkout@v4
       - name: Install nix
-        uses: https://github.com/DeterminateSystems/nix-installer-action@main
+        uses: DeterminateSystems/nix-installer-action@main
+      - name: Setup Action cache for nix
+        uses: DeterminateSystems/magic-nix-cache-action@main
+        with:
+          fail-mode: true
       - name: Check Nix flake inputs
-        uses: https://github.com/DeterminateSystems/flake-checker-action@v4 # This action
+        uses: DeterminateSystems/flake-checker-action@v4 # This action
       - name: Run nix flake check
         run: nix flake check
 
@@ -33,8 +41,12 @@ jobs:
     steps:
       - uses: actions/checkout@v4
       - name: Install nix
-        uses: https://github.com/DeterminateSystems/nix-installer-action@main
+        uses: DeterminateSystems/nix-installer-action@main
+      - name: Setup Action cache for nix
+        uses: DeterminateSystems/magic-nix-cache-action@main
+        with:
+          fail-mode: true
       - name: Check Nix flake inputs
-        uses: https://github.com/DeterminateSystems/flake-checker-action@v4 # This action
+        uses: DeterminateSystems/flake-checker-action@v4 # This action
       - name: Build nvim
         run: nix build .\#default
diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml
index da1827e..982d05e 100644
--- a/.github/workflows/update.yml
+++ b/.github/workflows/update.yml
@@ -2,7 +2,7 @@ name: Update `flake.lock`
 on:
   workflow_dispatch:
   schedule:
-    - cron: '0 0 * * 6' # runs weekly on Saturday at 00:00
+    - cron: '0 0 * * 0' # runs weekly on Sunday at 00:00
 
 jobs:
   update_lockfile:
@@ -11,72 +11,20 @@ jobs:
       - name: Checkout repository
         uses: actions/checkout@v4
       - name: Install nix
-        uses: https://github.com/DeterminateSystems/nix-installer-action@main
-
+        uses: DeterminateSystems/nix-installer-action@main
+      - name: Setup Action cache for nix
+        uses: DeterminateSystems/magic-nix-cache-action@main
+        with:
+          fail-mode: true
       - name: Update flake.lock
-        id: update
-        run: |
-          nix flake update 2> >(tee /dev/stderr) | awk '
-            /^• Updated input/ {in_update = 1; print; next}
-            in_update && !/^warning:/ {print}
-            /^$/ {in_update = 0}
-          ' > update.log
-
-          echo "UPDATE_LOG<<EOF" >> $GITHUB_ENV
-          cat update.log >> $GITHUB_ENV 
-          echo "EOF" >> $GITHUB_ENV
-
-          rm update.log
-
-      - name: Write PR body template
-        uses: https://github.com/DamianReeves/write-file-action@v1.3
+        uses: DeterminateSystems/update-flake-lock@main
         with:
-          path: pr_body.template
-          contents: |
-            - The following Nix Flake inputs were updated:
-
-            ```
-            ${{ env.UPDATE_LOG }}
-            ```
-
-            Auto-generated by [update.yml][1] with the help of
-            [create-pull-request][2].
-
-            [1]: https://forgejo.stefka.eu/jiriks74/nix.nvim/src/branch/main/.github/workflows/update.yml
-            [2]: https://forgejo.stefka.eu/jiriks74/create-pull-request
-
-      - name: Generate PR body
-        uses: pedrolamas/handlebars-action@v2.4.0 # v2.4.0
-        with:
-          files: "pr_body.template"
-          output-filename: "pr_body.md"
-      - name: Save PR body
-        id: pr_body
-        uses: juliangruber/read-file-action@v1
-        with:
-          path: "pr_body.md"
-
-      - name: Remove temporary files
-        run: |
-          rm pr_body.template
-          rm pr_body.md
-
-      - name: Create Pull Request
-        id: create-pull-request
-        uses: https://forgejo.stefka.eu/jiriks74/create-pull-request@7174d368c2e4450dea17b297819eb28ae93ee645
-        with:
-          token: ${{ secrets.FORGEJO_TOKEN_FOR_UPDATES  }}
-          body: ${{ steps.pr_body.outputs.content }}
-          author: '"github-actions[bot]" <github-actions[bot]@users.noreply.github.com>'
-          title: 'automated: Update `flake.lock`'
-          commit-message: |
-            automated: Update `flake.lock`
-
-            ${{ steps.pr_body.outputs.content }}
-
-          branch: update-flake-lock
-          delete-branch: true
+          # inputs: dzgui dzgui-testing # We'll see whether I want to limit the updates to dzgui
+          token: ${{ secrets.GH_TOKEN_FOR_UPDATES }}
+          pr-title: "Update flake.lock"
+          pr-assignees: jiriks74
+          pr-labels: |
+            flake.lock
+            automated
       - name: Print PR number
-        run: |
-          echo "Pull request number is ${{ steps.create-pull-request.outputs.pull-request-number }}."
-          echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
+        run: echo Pull request number is ${{ steps.update.outputs.pull-request-number }}.
diff --git a/flake.lock b/flake.lock
index e31bc9b..825b71f 100644
--- a/flake.lock
+++ b/flake.lock
@@ -181,11 +181,11 @@
     },
     "nixpkgs_2": {
       "locked": {
-        "lastModified": 1748460289,
-        "narHash": "sha256-7doLyJBzCllvqX4gszYtmZUToxKvMUrg45EUWaUYmBg=",
+        "lastModified": 1732521221,
+        "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "96ec055edbe5ee227f28cdbc3f1ddf1df5965102",
+        "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d",
         "type": "github"
       },
       "original": {
@@ -198,11 +198,11 @@
     "presence-nvim": {
       "flake": false,
       "locked": {
-        "lastModified": 1734057239,
+        "lastModified": 1728312592,
         "narHash": "sha256-NuoXsCOA5Uz7XOtC5B1pIXLytLaod6wUzrE+m5uEHcs=",
         "owner": "jiriks74",
         "repo": "presence.nvim",
-        "rev": "c850b9e245f310e040478ab54808c7ce098919ed",
+        "rev": "df0a0b52cd0799e99d1b76805d1357ae9c0d017d",
         "type": "github"
       },
       "original": {
@@ -238,11 +238,11 @@
     "workspace-diagnostics-nvim": {
       "flake": false,
       "locked": {
-        "lastModified": 1748191681,
-        "narHash": "sha256-jSpKaKnGyip/nzqU52ypWLgoCtvccYN+qb5jzlwAnd4=",
+        "lastModified": 1723294887,
+        "narHash": "sha256-lBj4KUPmmhtpffYky/HpaTwY++d/Q9socp/Ys+4VeX0=",
         "owner": "artemave",
         "repo": "workspace-diagnostics.nvim",
-        "rev": "60f9175b2501ae3f8b1aba9719c0df8827610c8e",
+        "rev": "573ff93c47898967efdfbc6587a1a39e3c2d365e",
         "type": "github"
       },
       "original": {
diff --git a/nix/neovim-overlay.nix b/nix/neovim-overlay.nix
index 2e3f2fb..3e96063 100644
--- a/nix/neovim-overlay.nix
+++ b/nix/neovim-overlay.nix
@@ -120,27 +120,18 @@ with final.pkgs.lib; let
     # ^ bleeding-edge plugins from flake inputs
   ];
 
-  extraPackages = with pkgs;
-    [
-      # Dependencies
-      ripgrep
+  extraPackages = with pkgs; [
+    # Dependencies
+    ripgrep
 
-      # language servers, etc.
-      asm-lsp # Assembly language server
-      clang-tools # C/C++ language server
-      (callPackage ./cpptools.nix {}) # C/C++ debugger from VSCode | https://github.com/microsoft/vscode-cpptools
-      nil # nix LSP
-      nodePackages.bash-language-server # Bash language server
-      lua-language-server
-    ]
-    ++ [
-      (pkgs.python312.withPackages (python-pkgs: [
-        python-pkgs.python-lsp-server
-        python-pkgs.python-lsp-ruff
-        python-pkgs.pylsp-mypy
-        python-pkgs.pylsp-rope
-      ]))
-    ];
+    # language servers, etc.
+    asm-lsp # Assembly language server
+    clang-tools # C/C++ language server
+    (callPackage ./cpptools.nix {}) # C/C++ debugger from VSCode | https://github.com/microsoft/vscode-cpptools
+    nodePackages.bash-language-server # Bash language server
+    lua-language-server
+    nil # nix LSP
+  ];
 in {
   # This is the neovim derivation
   # returned by the overlay
diff --git a/nvim/ftplugin/c.lua b/nvim/ftplugin/c.lua
index 7475a5e..4f13718 100644
--- a/nvim/ftplugin/c.lua
+++ b/nvim/ftplugin/c.lua
@@ -11,12 +11,10 @@ local root_files = {
   '.git',
 }
 
-local root = vim.fs.dirname(vim.fs.find(root_files, { upward = true })[1])
-
 vim.lsp.start {
   name = 'clangd',
   cmd = { 'clangd' },
-  root_dir = root,
+  root_dir = vim.fs.dirname(vim.fs.find(root_files, { upward = true })[1]),
   capabilities = require('user.lsp').make_client_capabilities(),
   filetypes = { "c" },
   on_attach = function(client, bufnr)
@@ -41,7 +39,7 @@ if vim.fn.executable('gdb') == 1 then
 end
 
 -- DAP loads this automatically as of now. May be needed to load the debugger for asm?
--- if require('user.file_exists').file_exists(root .. "/.vscode/launch.json") then
+-- if require('user.file_exists').file_exists(vim.fs.dirname(vim.fs.find(root_files, { upward = true })[1]) .. "/.vscode/launch.json") then
 --   require("dap.ext.vscode").load_launchjs(nil, { cppdbg = { "c", "cpp", "asm" } })
 --   require("dap.ext.vscode").load_launchjs(nil, { gdb = { "c", "cpp", "asm" } })
 -- end
diff --git a/nvim/ftplugin/python.lua b/nvim/ftplugin/python.lua
deleted file mode 100644
index 5d04524..0000000
--- a/nvim/ftplugin/python.lua
+++ /dev/null
@@ -1,36 +0,0 @@
--- Exit if the language server isn't available
-if vim.fn.executable('pylsp') ~= 1 then
-  return
-end
-
-local root_files = {
-  'pyproject.toml',
-  'setup.py',
-  'setup.cfg',
-  'requirements.txt',
-  'Pipfile',
-  'pyrightconfig.json',
-  '.git',
-}
-
-vim.lsp.start({
-  name = 'python-lsp-server',
-  cmd = { "pylsp" },
-  root_dir = vim.fs.dirname(vim.fs.find(root_files, { upward = true })[1]),
-  capabilities = require('user.lsp').make_client_capabilities(),
-  filetypes = { 'python' },
-  on_attach = function(client, bufnr)
-    require("nvim-navic").attach(client, bufnr)
-    require("workspace-diagnostics").populate_workspace_diagnostics(client, bufnr)
-  end,
-  settings = {
-    pylsp = {
-      plugins = {
-        mypy = { enabled = true, },
-        rope = { enabled = true, },
-        ruff = { enabled = true, },
-      },
-    },
-  },
-  single_file_support = true
-})
diff --git a/nvim/plugin/overseer.lua b/nvim/plugin/overseer.lua
index 7d4514b..c5c93e7 100644
--- a/nvim/plugin/overseer.lua
+++ b/nvim/plugin/overseer.lua
@@ -8,7 +8,7 @@ local file_exists = require("user.file_exists").file_exists
 require("which-key").add({
   { "<leader>o", group = "[o]verseer", icon = "" },
   { "<leader>ot", "<Cmd>OverseerToggle<CR>", desc = "[o]verseer: [t]oggle " },
-  { "<leader>oc", "<Cmd>OverseerRunCmd<CR>", desc = "[o]verseer: run [c]ommand" },
+  { "<leader>oc",  "<Cmd>OverseerRunCmd<CR>", desc = "[o]verseer: run [c]ommand" },
   { "<leader>or", "<Cmd>OverseerRun<CR>", desc = "[o]verseer: [r]un task" },
   { "<leader>oq", "<Cmd>OverseerQuickAction<CR>", desc = "[o]verseer: [q]uick action" },
   { "<leader>oa", "<Cmd>OverseerTaskAction<CR>", desc = "[o]verseer: task [a]ction" },
@@ -20,10 +20,10 @@ local root_files = {
   '.git',
 }
 
-local root = vim.fs.dirname(vim.fs.find(root_files, { upward = true })[1])
+local root = vim.fs.find(root_files, { upward = true })[1]
 
 if root then
-  if file_exists(root .. "/.vscode/tasks.json") then
+  if file_exists(root .. ".vscode/tasks.json") then
     require('overseer').setup({
       strategy = {
         "toggleterm",