diff --git a/configurations/android/nix-on-droid.nix b/configurations/android/nix-on-droid.nix
index ac01d6fd..ecf0d1f0 100644
--- a/configurations/android/nix-on-droid.nix
+++ b/configurations/android/nix-on-droid.nix
@@ -52,7 +52,6 @@
           user = "nix-on-droid";
 
           ideConfig = {
-            enableGolang = false;
             enableJava = false;
             enableNix = false;
           };
diff --git a/devShells/neovim-shells/default.nix b/devShells/neovim-shells/default.nix
index a733726f..a80a6d66 100644
--- a/devShells/neovim-shells/default.nix
+++ b/devShells/neovim-shells/default.nix
@@ -25,6 +25,7 @@ in
     "kotlin"
     "lua"
     "markdown"
+    "golang"
     "python"
     "qml"
     "rust"
diff --git a/homeManagerModules/neovim/default.nix b/homeManagerModules/neovim/default.nix
index fd4bbdd8..b10a79ed 100644
--- a/homeManagerModules/neovim/default.nix
+++ b/homeManagerModules/neovim/default.nix
@@ -25,10 +25,6 @@ in {
         type = types.bool;
         default = true;
       };
-      enableGolang = mkOption {
-        type = types.bool;
-        default = true;
-      };
       enableJava = mkOption {
         type = types.bool;
         default = true;
diff --git a/homeManagerModules/neovim/langs/c-lang/default.nix b/homeManagerModules/neovim/langs/c-lang/default.nix
index 006beb58..e588157b 100644
--- a/homeManagerModules/neovim/langs/c-lang/default.nix
+++ b/homeManagerModules/neovim/langs/c-lang/default.nix
@@ -15,6 +15,7 @@ in {
         extraLuaConfig =
           # lua
           ''
+            --
             vim.api.nvim_create_autocmd({ 'FileType', 'BufEnter' }, {
                 pattern = { 'cpp', 'c' },
 
@@ -39,6 +40,7 @@ in {
             config =
               # lua
               ''
+                --
                 local lsp = require('lspconfig');
                 local default_capabilities = require('cmp_nvim_lsp').default_capabilities();
 
diff --git a/homeManagerModules/neovim/langs/csharp/default.nix b/homeManagerModules/neovim/langs/csharp/default.nix
index 05a0b1e5..03ee72c9 100644
--- a/homeManagerModules/neovim/langs/csharp/default.nix
+++ b/homeManagerModules/neovim/langs/csharp/default.nix
@@ -22,6 +22,7 @@ in {
             config =
               # lua
               ''
+                --
                 vim.api.nvim_create_autocmd('User', {
                     pattern = 'RoslynInitialized',
 
diff --git a/homeManagerModules/neovim/langs/default.nix b/homeManagerModules/neovim/langs/default.nix
index 84f0f723..3751003f 100644
--- a/homeManagerModules/neovim/langs/default.nix
+++ b/homeManagerModules/neovim/langs/default.nix
@@ -36,6 +36,7 @@ in {
         mkBefore
         # lua
         ''
+          --
           -- Init object to keep track of loaded devShells
           local devShells = {};
 
@@ -93,6 +94,7 @@ in {
           config =
             # lua
             ''
+              --
               require('nvim-autopairs').setup({});
             '';
         };
@@ -103,6 +105,7 @@ in {
           config =
             # lua
             ''
+              --
               -- Disable virtual_text since it's redundant due to tiny-inline-diagnostic.
               vim.diagnostic.config({
                   virtual_text = false,
diff --git a/homeManagerModules/neovim/langs/golang/default.nix b/homeManagerModules/neovim/langs/golang/default.nix
index 55d109c5..0c270e86 100644
--- a/homeManagerModules/neovim/langs/golang/default.nix
+++ b/homeManagerModules/neovim/langs/golang/default.nix
@@ -1,27 +1,42 @@
 {
   config,
   lib,
-  pkgs,
   ...
 }: let
   inherit (lib) mkIf;
 
   cfg = config.programs.neovim;
+  flakeEnv = config.programs.bash.sessionVariables.FLAKE;
 in {
-  config = mkIf (cfg.enable && cfg.ideConfig.enableGolang) {
+  config = mkIf cfg.enable {
     programs = {
       neovim = {
-        extraPackages = with pkgs; [go gopls];
-
         extraLuaConfig =
           # lua
           ''
+            --
             local lsp = require('lspconfig');
             local default_capabilities = require('cmp_nvim_lsp').default_capabilities();
 
             lsp.gopls.setup({
-                cmd = { '${pkgs.gopls}/bin/gopls' },
                 capabilities = default_capabilities,
+                autostart = false,
+            });
+
+            vim.api.nvim_create_autocmd({ 'FileType', 'BufEnter' }, {
+                pattern = { 'go', 'gomod', 'gowork', 'gotmpl' },
+
+                callback = function()
+                    vim.cmd[[setlocal ts=4 sw=4 sts=0 expandtab]];
+
+                    if (devShells['golang'] == nil) then
+                        devShells['golang'] = 1;
+
+                        require('nix-develop').nix_develop_extend({'${flakeEnv}#golang'}, function()
+                            vim.cmd[[LspStart]];
+                        end);
+                    end
+                end,
             });
           '';
       };
diff --git a/homeManagerModules/neovim/langs/golang/shell.nix b/homeManagerModules/neovim/langs/golang/shell.nix
new file mode 100644
index 00000000..f966c132
--- /dev/null
+++ b/homeManagerModules/neovim/langs/golang/shell.nix
@@ -0,0 +1,12 @@
+{
+  mkShell,
+  go,
+  gopls,
+  ...
+}:
+mkShell {
+  packages = [
+    go
+    gopls
+  ];
+}
diff --git a/homeManagerModules/neovim/langs/hyprlang/default.nix b/homeManagerModules/neovim/langs/hyprlang/default.nix
index 24df0f66..74214396 100644
--- a/homeManagerModules/neovim/langs/hyprlang/default.nix
+++ b/homeManagerModules/neovim/langs/hyprlang/default.nix
@@ -13,6 +13,7 @@ in {
         extraLuaConfig =
           # lua
           ''
+            --
             vim.filetype.add({
                 pattern = { [ '.*/hypr/.*%.conf' ] = 'hyprlang' },
             });
diff --git a/homeManagerModules/neovim/langs/java/default.nix b/homeManagerModules/neovim/langs/java/default.nix
index 3da9abc1..1e00a555 100644
--- a/homeManagerModules/neovim/langs/java/default.nix
+++ b/homeManagerModules/neovim/langs/java/default.nix
@@ -22,6 +22,7 @@ in {
         extraLuaConfig =
           # lua
           ''
+            --
             vim.api.nvim_create_autocmd({ 'FileType', 'BufEnter' }, {
                pattern = 'java',
                command = 'setlocal ts=4 sw=4 sts=0 expandtab',
@@ -36,6 +37,7 @@ in {
             config =
               # lua
               ''
+                --
                 local startJdtls = function()
                     local config = {
                         capabilities = require('cmp_nvim_lsp').default_capabilities(),
diff --git a/homeManagerModules/neovim/langs/json/default.nix b/homeManagerModules/neovim/langs/json/default.nix
index d0038d19..e94e8e5c 100644
--- a/homeManagerModules/neovim/langs/json/default.nix
+++ b/homeManagerModules/neovim/langs/json/default.nix
@@ -14,6 +14,7 @@ in {
         extraLuaConfig =
           # lua
           ''
+            --
             vim.api.nvim_create_autocmd({ 'FileType', 'BufEnter' }, {
                 pattern = { 'json', 'yaml', '.clang-.*' },
 
diff --git a/homeManagerModules/neovim/langs/kotlin/default.nix b/homeManagerModules/neovim/langs/kotlin/default.nix
index 4a048882..6903e642 100644
--- a/homeManagerModules/neovim/langs/kotlin/default.nix
+++ b/homeManagerModules/neovim/langs/kotlin/default.nix
@@ -14,6 +14,7 @@ in {
         extraLuaConfig =
           # lua
           ''
+            --
             vim.api.nvim_create_autocmd({ 'FileType', 'BufEnter' }, {
                 pattern = { 'kotlin' },
 
diff --git a/homeManagerModules/neovim/langs/lua/default.nix b/homeManagerModules/neovim/langs/lua/default.nix
index 09662361..c7698ebc 100644
--- a/homeManagerModules/neovim/langs/lua/default.nix
+++ b/homeManagerModules/neovim/langs/lua/default.nix
@@ -20,6 +20,7 @@ in {
             config =
               # lua
               ''
+                --
                 local default_capabilities = require('cmp_nvim_lsp').default_capabilities();
 
                 vim.api.nvim_create_autocmd({ 'FileType', 'BufEnter' }, {
diff --git a/homeManagerModules/neovim/langs/markdown/default.nix b/homeManagerModules/neovim/langs/markdown/default.nix
index 8a97cbc1..cb4be85a 100644
--- a/homeManagerModules/neovim/langs/markdown/default.nix
+++ b/homeManagerModules/neovim/langs/markdown/default.nix
@@ -27,6 +27,7 @@ in {
         extraLuaConfig =
           # lua
           ''
+            --
             vim.api.nvim_create_autocmd({ 'FileType', 'BufEnter' }, {
                 pattern = { 'markdown', 'tex' },
 
@@ -69,6 +70,7 @@ in {
             config =
               # lua
               ''
+                --
                 require('easytables').setup();
               '';
           }
@@ -99,6 +101,7 @@ in {
             in
               # lua
               ''
+                --
                 vim.g.knap_settings = {
                     -- HTML
                     htmloutputext = 'html',
diff --git a/homeManagerModules/neovim/langs/nix-lang/default.nix b/homeManagerModules/neovim/langs/nix-lang/default.nix
index fd028467..214e9591 100644
--- a/homeManagerModules/neovim/langs/nix-lang/default.nix
+++ b/homeManagerModules/neovim/langs/nix-lang/default.nix
@@ -74,6 +74,7 @@ in {
         extraLuaConfig =
           # lua
           ''
+            --
             require('lspconfig').nixd.setup({
                 capabilities = require('cmp_nvim_lsp').default_capabilities(),
 
diff --git a/homeManagerModules/neovim/langs/python/default.nix b/homeManagerModules/neovim/langs/python/default.nix
index 0ef2422c..8bfcf4ac 100644
--- a/homeManagerModules/neovim/langs/python/default.nix
+++ b/homeManagerModules/neovim/langs/python/default.nix
@@ -14,6 +14,7 @@ in {
         extraLuaConfig =
           # lua
           ''
+            --
             local lsp = require('lspconfig');
             local default_capabilities = require('cmp_nvim_lsp').default_capabilities();
 
diff --git a/homeManagerModules/neovim/langs/qml/default.nix b/homeManagerModules/neovim/langs/qml/default.nix
index c173ac22..168b0003 100644
--- a/homeManagerModules/neovim/langs/qml/default.nix
+++ b/homeManagerModules/neovim/langs/qml/default.nix
@@ -14,6 +14,7 @@ in {
         extraLuaConfig =
           # lua
           ''
+            --
             vim.api.nvim_create_autocmd({ 'FileType', 'BufEnter' }, {
                 pattern = { 'qml' },
 
diff --git a/homeManagerModules/neovim/langs/rust/default.nix b/homeManagerModules/neovim/langs/rust/default.nix
index d59047f6..a049b7eb 100644
--- a/homeManagerModules/neovim/langs/rust/default.nix
+++ b/homeManagerModules/neovim/langs/rust/default.nix
@@ -14,6 +14,7 @@ in {
         extraLuaConfig =
           # lua
           ''
+            --
             vim.api.nvim_create_autocmd({ 'FileType', 'BufEnter' }, {
                 pattern = { 'rust' },
 
diff --git a/homeManagerModules/neovim/langs/web/default.nix b/homeManagerModules/neovim/langs/web/default.nix
index 3127ab8e..6b83de5a 100644
--- a/homeManagerModules/neovim/langs/web/default.nix
+++ b/homeManagerModules/neovim/langs/web/default.nix
@@ -20,6 +20,7 @@ in {
         extraLuaConfig =
           # lua
           ''
+            --
             local lsp = require('lspconfig');
             local tsserver = require('typescript-tools');
             local default_capabilities = require('cmp_nvim_lsp').default_capabilities();
@@ -35,7 +36,16 @@ in {
             end;
 
             vim.api.nvim_create_autocmd({ 'FileType', 'BufEnter' }, {
-                pattern = { 'javascript', 'javascriptreact', 'javascript.jsx', 'typescript', 'typescriptreact', 'typescript.tsx', 'css', 'scss' },
+                pattern = {
+                    'javascript',
+                    'javascriptreact',
+                    'javascript.jsx',
+                    'typescript',
+                    'typescriptreact',
+                    'typescript.tsx',
+                    'css',
+                    'scss',
+                },
 
                 callback = function()
                     vim.cmd[[setlocal ts=4 sw=4 sts=0 expandtab]];
@@ -185,6 +195,7 @@ in {
             config =
               # lua
               ''
+                --
                 local packageInfo = require('package-info');
 
                 packageInfo.setup({