]> Skullheadx's Git Forge - nixos.git/commitdiff
nvf neovim
authorSkullheadx <admonty1@protonmail.com>
Sat, 16 May 2026 21:25:32 +0000 (17:25 -0400)
committerSkullheadx <admonty1@protonmail.com>
Sat, 16 May 2026 21:25:32 +0000 (17:25 -0400)
flake.lock
flake.nix
nvf/keymaps.nix [new file with mode: 0644]
nvf/nvf.nix [new file with mode: 0644]
vim.nix

index 7882b6b5150cb74f236c38f715dcbb6b3f88e477..5def3af7e447871c8614e0206c7cc03ba5fd4524 100644 (file)
@@ -1,5 +1,42 @@
 {
   "nodes": {
+    "flake-compat": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1751685974,
+        "narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=",
+        "ref": "refs/heads/main",
+        "rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1",
+        "revCount": 92,
+        "type": "git",
+        "url": "https://git.lix.systems/lix-project/flake-compat.git"
+      },
+      "original": {
+        "type": "git",
+        "url": "https://git.lix.systems/lix-project/flake-compat.git"
+      }
+    },
+    "flake-parts": {
+      "inputs": {
+        "nixpkgs-lib": [
+          "nvf",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1769996383,
+        "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=",
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
+        "type": "github"
+      },
+      "original": {
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "type": "github"
+      }
+    },
     "hjem": {
       "inputs": {
         "nix-darwin": "nix-darwin",
         "type": "github"
       }
     },
+    "mnw": {
+      "locked": {
+        "lastModified": 1777828893,
+        "narHash": "sha256-gVWVnmyNr74BVKfhMMZDWkhx2699dhmZ2g0W8TTHtkk=",
+        "owner": "Gerg-L",
+        "repo": "mnw",
+        "rev": "c1c0b544bfabe6669b5a6a0383ccb475fe60258b",
+        "type": "github"
+      },
+      "original": {
+        "owner": "Gerg-L",
+        "repo": "mnw",
+        "type": "github"
+      }
+    },
     "my-dmenu": {
       "inputs": {
         "nixpkgs": [
         "type": "github"
       }
     },
+    "ndg": {
+      "inputs": {
+        "nixpkgs": [
+          "nvf",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1776882296,
+        "narHash": "sha256-DWZozXwMsgvUqfVlL1mQ8dOxW7GJ/8CdyaDN+1niZRg=",
+        "owner": "feel-co",
+        "repo": "ndg",
+        "rev": "ab7d78d4884b3a34968cf9fa3d16c0c1246d5c6e",
+        "type": "github"
+      },
+      "original": {
+        "owner": "feel-co",
+        "ref": "refs/tags/v2.6.0",
+        "repo": "ndg",
+        "type": "github"
+      }
+    },
     "nix-darwin": {
       "inputs": {
         "nixpkgs": [
         "type": "github"
       }
     },
+    "nvf": {
+      "inputs": {
+        "flake-compat": "flake-compat",
+        "flake-parts": "flake-parts",
+        "mnw": "mnw",
+        "ndg": "ndg",
+        "nixpkgs": [
+          "nixpkgs"
+        ],
+        "systems": "systems"
+      },
+      "locked": {
+        "lastModified": 1778963095,
+        "narHash": "sha256-x1rkZ2QL7stCTq/IjIBK9JuvfMPz6nyhaFKhvLXfjks=",
+        "owner": "notashelf",
+        "repo": "nvf",
+        "rev": "49bb322eba1a6c1ad201d15eefde5469c53b08d7",
+        "type": "github"
+      },
+      "original": {
+        "owner": "notashelf",
+        "repo": "nvf",
+        "type": "github"
+      }
+    },
     "root": {
       "inputs": {
         "hjem": "hjem",
         "my-slstatus": "my-slstatus",
         "my-st": "my-st",
         "my-surf": "my-surf",
-        "nixpkgs": "nixpkgs"
+        "nixpkgs": "nixpkgs",
+        "nvf": "nvf"
+      }
+    },
+    "systems": {
+      "locked": {
+        "lastModified": 1681028828,
+        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+        "owner": "nix-systems",
+        "repo": "default",
+        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-systems",
+        "repo": "default",
+        "type": "github"
       }
     }
   },
index 3d4f4c17b847f0c0c9443a47ff79c92c3a756943..fa473f086ef445925a4e0829875e7fb020fc7247 100644 (file)
--- a/flake.nix
+++ b/flake.nix
       url = "github:Skullheadx/dmenu";
       inputs.nixpkgs.follows = "nixpkgs";
     };
+    nvf = {
+      url = "github:notashelf/nvf";
+      inputs.nixpkgs.follows = "nixpkgs";
+    };
 
   };
   outputs =
       my-dwm,
       my-st,
       my-dmenu,
+      nvf,
     }@inputs:
+    let
+      system = "x86_64-linux";
+      pkgs = nixpkgs.legacyPackages.${system};
+      customNeovim = nvf.lib.neovimConfiguration {
+        inherit pkgs;
+        modules = [ ./nvf/nvf.nix ];
+      };
+    in
     {
       nixosConfigurations.nepsis = nixpkgs.lib.nixosSystem {
-        specialArgs = { inherit inputs; };
+        specialArgs = { inherit inputs customNeovim; };
         modules = [
           hjem.nixosModules.default
           ./configuration.nix
           ./overlays.nix
         ];
       };
+
+      packages.${system}.my-neovim = customNeovim.neovim;
     };
 }
diff --git a/nvf/keymaps.nix b/nvf/keymaps.nix
new file mode 100644 (file)
index 0000000..61cdcc8
--- /dev/null
@@ -0,0 +1,468 @@
+{ ... }:
+[
+  # Top Pickers & Explorer
+  {
+    key = "<leader><space>";
+    mode = "n";
+    silent = true;
+    desc = "Smart Find Files";
+    action = "<cmd>lua Snacks.picker.smart()<CR>";
+  }
+  {
+    key = "<leader>f\/";
+    mode = "n";
+    silent = true;
+    desc = "Grep";
+    action = "<cmd>lua Snacks.picker.grep()<CR>";
+  }
+  {
+    key = "<leader>:";
+    mode = "n";
+    silent = true;
+    desc = "Command History";
+    action = "<cmd>lua Snacks.picker.command_history()<CR>";
+  }
+  {
+    key = "<leader>e";
+    mode = "n";
+    silent = true;
+    desc = "File Explorer";
+    action = "<cmd>lua Snacks.explorer()<CR>";
+  }
+
+  # Find
+  {
+    key = "<leader>fb";
+    mode = "n";
+    silent = true;
+    desc = "Buffers";
+    action = "<cmd>lua Snacks.picker.buffers()<CR>";
+  }
+  {
+    key = "<leader>fc";
+    mode = "n";
+    silent = true;
+    desc = "Find Config File";
+    action = "<cmd>lua Snacks.picker.files({ cwd = vim.fn.stdpath('config') })<CR>";
+  }
+  {
+    key = "<leader>ff";
+    mode = "n";
+    silent = true;
+    desc = "Find Files";
+    action = "<cmd>lua Snacks.picker.files()<CR>";
+  }
+  {
+    key = "<leader>fg";
+    mode = "n";
+    silent = true;
+    desc = "Find Git Files";
+    action = "<cmd>lua Snacks.picker.git_files()<CR>";
+  }
+  {
+    key = "<leader>fp";
+    mode = "n";
+    silent = true;
+    desc = "Projects";
+    action = "<cmd>lua Snacks.picker.projects()<CR>";
+  }
+  {
+    key = "<leader>fr";
+    mode = "n";
+    silent = true;
+    desc = "Recent";
+    action = "<cmd>lua Snacks.picker.recent()<CR>";
+  }
+
+  # Git
+  {
+    key = "<leader>gb";
+    mode = "n";
+    silent = true;
+    desc = "Git Branches";
+    action = "<cmd>lua Snacks.picker.git_branches()<CR>";
+  }
+  {
+    key = "<leader>gl";
+    mode = "n";
+    silent = true;
+    desc = "Git Log";
+    action = "<cmd>lua Snacks.picker.git_log()<CR>";
+  }
+  {
+    key = "<leader>gL";
+    mode = "n";
+    silent = true;
+    desc = "Git Log Line";
+    action = "<cmd>lua Snacks.picker.git_log_line()<CR>";
+  }
+  {
+    key = "<leader>gs";
+    mode = "n";
+    silent = true;
+    desc = "Git Status";
+    action = "<cmd>lua Snacks.picker.git_status()<CR>";
+  }
+  {
+    key = "<leader>gS";
+    mode = "n";
+    silent = true;
+    desc = "Git Stash";
+    action = "<cmd>lua Snacks.picker.git_stash()<CR>";
+  }
+  {
+    key = "<leader>gd";
+    mode = "n";
+    silent = true;
+    desc = "Git Diff (Hunks)";
+    action = "<cmd>lua Snacks.picker.git_diff()<CR>";
+  }
+  {
+    key = "<leader>gf";
+    mode = "n";
+    silent = true;
+    desc = "Git Log File";
+    action = "<cmd>lua Snacks.picker.git_log_file()<CR>";
+  }
+
+  # GitHub
+  {
+    key = "<leader>gi";
+    mode = "n";
+    silent = true;
+    desc = "GitHub Issues (open)";
+    action = "<cmd>lua Snacks.picker.gh_issue()<CR>";
+  }
+  {
+    key = "<leader>gI";
+    mode = "n";
+    silent = true;
+    desc = "GitHub Issues (all)";
+    action = "<cmd>lua Snacks.picker.gh_issue({ state = 'all' })<CR>";
+  }
+  {
+    key = "<leader>gp";
+    mode = "n";
+    silent = true;
+    desc = "GitHub Pull Requests (open)";
+    action = "<cmd>lua Snacks.picker.gh_pr()<CR>";
+  }
+  {
+    key = "<leader>gP";
+    mode = "n";
+    silent = true;
+    desc = "GitHub Pull Requests (all)";
+    action = "<cmd>lua Snacks.picker.gh_pr({ state = 'all' })<CR>";
+  }
+
+  # Grep
+  {
+    key = "<leader>sb";
+    mode = "n";
+    silent = true;
+    desc = "Buffer Lines";
+    action = "<cmd>lua Snacks.picker.lines()<CR>";
+  }
+  {
+    key = "<leader>sB";
+    mode = "n";
+    silent = true;
+    desc = "Grep Open Buffers";
+    action = "<cmd>lua Snacks.picker.grep_buffers()<CR>";
+  }
+  {
+    key = "<leader>fg";
+    mode = "n";
+    silent = true;
+    desc = "Grep";
+    action = "<cmd>lua Snacks.picker.grep()<CR>";
+  }
+  {
+    key = "<leader>fw";
+    mode = [
+      "n"
+      "x"
+    ];
+    silent = true;
+    desc = "Visual selection or word";
+    action = "<cmd>lua Snacks.picker.grep_word()<CR>";
+  }
+
+  # Search
+  {
+    key = "<leader>s\"";
+    mode = "n";
+    silent = true;
+    desc = "Registers";
+    action = "<cmd>lua Snacks.picker.registers()<CR>";
+  }
+  {
+    key = "<leader>sa";
+    mode = "n";
+    silent = true;
+    desc = "Autocmds";
+    action = "<cmd>lua Snacks.picker.autocmds()<CR>";
+  }
+  {
+    key = "<leader>sc";
+    mode = "n";
+    silent = true;
+    desc = "Command History";
+    action = "<cmd>lua Snacks.picker.command_history()<CR>";
+  }
+  {
+    key = "<leader>sC";
+    mode = "n";
+    silent = true;
+    desc = "Commands";
+    action = "<cmd>lua Snacks.picker.commands()<CR>";
+  }
+  {
+    key = "<leader>sd";
+    mode = "n";
+    silent = true;
+    desc = "Diagnostics";
+    action = "<cmd>lua Snacks.picker.diagnostics()<CR>";
+  }
+  {
+    key = "<leader>sD";
+    mode = "n";
+    silent = true;
+    desc = "Buffer Diagnostics";
+    action = "<cmd>lua Snacks.picker.diagnostics_buffer()<CR>";
+  }
+  {
+    key = "<leader>sh";
+    mode = "n";
+    silent = true;
+    desc = "Help Pages";
+    action = "<cmd>lua Snacks.picker.help()<CR>";
+  }
+  {
+    key = "<leader>sH";
+    mode = "n";
+    silent = true;
+    desc = "Highlights";
+    action = "<cmd>lua Snacks.picker.highlights()<CR>";
+  }
+  {
+    key = "<leader>si";
+    mode = "n";
+    silent = true;
+    desc = "Icons";
+    action = "<cmd>lua Snacks.picker.icons()<CR>";
+  }
+  {
+    key = "<leader>sj";
+    mode = "n";
+    silent = true;
+    desc = "Jumps";
+    action = "<cmd>lua Snacks.picker.jumps()<CR>";
+  }
+  {
+    key = "<leader>sk";
+    mode = "n";
+    silent = true;
+    desc = "Keymaps";
+    action = "<cmd>lua Snacks.picker.keymaps()<CR>";
+  }
+  {
+    key = "<leader>sl";
+    mode = "n";
+    silent = true;
+    desc = "Location List";
+    action = "<cmd>lua Snacks.picker.loclist()<CR>";
+  }
+  {
+    key = "<leader>sm";
+    mode = "n";
+    silent = true;
+    desc = "Marks";
+    action = "<cmd>lua Snacks.picker.marks()<CR>";
+  }
+  {
+    key = "<leader>sM";
+    mode = "n";
+    silent = true;
+    desc = "Man Pages";
+    action = "<cmd>lua Snacks.picker.man()<CR>";
+  }
+  {
+    key = "<leader>sq";
+    mode = "n";
+    silent = true;
+    desc = "Quickfix List";
+    action = "<cmd>lua Snacks.picker.qflist()<CR>";
+  }
+  {
+    key = "<leader>f<CR>";
+    mode = "n";
+    silent = true;
+    desc = "Resume";
+    action = "<cmd>lua Snacks.picker.resume()<CR>";
+  }
+  {
+    key = "<leader>su";
+    mode = "n";
+    silent = true;
+    desc = "Undo History";
+    action = "<cmd>lua Snacks.picker.undo()<CR>";
+  }
+
+  # LSP
+  {
+    key = "gd";
+    mode = "n";
+    silent = true;
+    desc = "Goto Definition";
+    action = "<cmd>lua Snacks.picker.lsp_definitions()<CR>";
+  }
+  {
+    key = "gD";
+    mode = "n";
+    silent = true;
+    desc = "Goto Declaration";
+    action = "<cmd>lua Snacks.picker.lsp_declarations()<CR>";
+  }
+  {
+    key = "gr";
+    mode = "n";
+    silent = true;
+    nowait = true;
+    desc = "References";
+    action = "<cmd>lua Snacks.picker.lsp_references()<CR>";
+  }
+  {
+    key = "gI";
+    mode = "n";
+    silent = true;
+    desc = "Goto Implementation";
+    action = "<cmd>lua Snacks.picker.lsp_implementations()<CR>";
+  }
+  {
+    key = "gy";
+    mode = "n";
+    silent = true;
+    desc = "Goto Type Definition";
+    action = "<cmd>lua Snacks.picker.lsp_type_definitions()<CR>";
+  }
+  {
+    key = "<leader>ls";
+    mode = "n";
+    silent = true;
+    desc = "LSP Symbols";
+    action = "<cmd>lua Snacks.picker.lsp_symbols()<CR>";
+  }
+  {
+    key = "<leader>lS";
+    mode = "n";
+    silent = true;
+    desc = "LSP Workspace Symbols";
+    action = "<cmd>lua Snacks.picker.lsp_workspace_symbols()<CR>";
+  }
+
+  # Other
+  {
+    key = "<leader>z";
+    mode = "n";
+    silent = true;
+    desc = "Toggle Zen Mode";
+    action = "<cmd>lua Snacks.zen()<CR>";
+  }
+  {
+    key = "<leader>ss";
+    mode = "n";
+    silent = true;
+    desc = "Toggle Scratch Buffer";
+    action = "<cmd>lua Snacks.scratch()<CR>";
+  }
+  {
+    key = "<leader>sf";
+    mode = "n";
+    silent = true;
+    desc = "Select Scratch Buffer";
+    action = "<cmd>lua Snacks.scratch.select()<CR>";
+  }
+  {
+    key = "<leader>bc";
+    mode = "n";
+    silent = true;
+    desc = "Delete Buffer";
+    action = "<cmd>lua Snacks.bufdelete()<CR>";
+  }
+  {
+    key = "<leader>br";
+    mode = "n";
+    silent = true;
+    desc = "Rename File";
+    action = "<cmd>lua Snacks.rename.rename_file()<CR>";
+  }
+  {
+    key = "<leader>gB";
+    mode = [
+      "n"
+      "v"
+    ];
+    silent = true;
+    desc = "Git Browse";
+    action = "<cmd>lua Snacks.gitbrowse()<CR>";
+  }
+  {
+    key = "<leader>gg";
+    mode = "n";
+    silent = true;
+    desc = "Lazygit";
+    action = "<cmd>lua Snacks.lazygit()<CR>";
+  }
+  {
+    key = ",t";
+    mode = "n";
+    silent = true;
+    desc = "Toggle Terminal";
+    action = "<cmd>lua Snacks.terminal()<CR>";
+  }
+  {
+    key = ",t";
+    mode = "t";
+    silent = true;
+    desc = "which_key_ignore";
+    action = "<cmd>lua Snacks.terminal()<CR>";
+  }
+
+  {
+    key = "w";
+    mode = [
+      "n"
+      "o"
+      "x"
+    ];
+    action = "<cmd>lua require('spider').motion('w')<CR>";
+  }
+  {
+    key = "e";
+    mode = [
+      "n"
+      "o"
+      "x"
+    ];
+    action = "<cmd>lua require('spider').motion('e')<CR>";
+  }
+  {
+    key = "b";
+    mode = [
+      "n"
+      "o"
+      "x"
+    ];
+    action = "<cmd>lua require('spider').motion('b')<CR>";
+  }
+  {
+    key = "ge";
+    mode = [
+      "n"
+      "o"
+      "x"
+    ];
+    action = "<cmd>lua require('spider').motion('ge')<CR>";
+  }
+]
diff --git a/nvf/nvf.nix b/nvf/nvf.nix
new file mode 100644 (file)
index 0000000..ff1a3db
--- /dev/null
@@ -0,0 +1,290 @@
+{ pkgs, ... }:
+{
+  config.vim = {
+    # core
+    syntaxHighlighting = true;
+    binds.whichKey.enable = true;
+
+    # ui
+    theme = {
+      enable = true;
+      name = "tokyonight";
+      style = "storm";
+      transparent = true;
+    };
+
+    statusline.lualine.enable = true;
+    ui = {
+      noice.enable = true;
+      illuminate.enable = true;
+      nvim-highlight-colors.enable = true;
+      borders = {
+        enable = true;
+        globalStyle = "rounded";
+      };
+    };
+    mini.icons.enable = true;
+
+    visuals = {
+      nvim-web-devicons.enable = true;
+      rainbow-delimiters.enable = true;
+      tiny-devicons-auto-colors.enable = true;
+      indent-blankline.enable = true;
+      highlight-undo.enable = true;
+    };
+    dashboard.alpha = {
+      enable = true;
+      theme = "theta";
+    };
+
+    # navigation
+    navigation = {
+      harpoon = {
+        enable = true;
+        mappings = {
+          file1 = "<leader>1";
+          file2 = "<leader>2";
+          file3 = "<leader>3";
+          file4 = "<leader>4";
+          listMarks = "<leader>'";
+          markFile = "<leader>.";
+        };
+        setupOpts.defaults = {
+          save_on_toggle = true;
+          sync_on_ui_close = true;
+        };
+      };
+    };
+
+    # lsp
+    lsp = {
+      enable = true;
+      formatOnSave = true;
+      inlayHints.enable = true;
+
+      lightbulb = {
+        enable = true;
+        autocmd.enable = true;
+      };
+      lspconfig.enable = true;
+      otter-nvim.enable = true;
+    };
+
+    notes.todo-comments.enable = true;
+
+    spellcheck = {
+      enable = true;
+    };
+    comments.comment-nvim = {
+      enable = true;
+
+      mappings.toggleCurrentLine = "<leader>/";
+      # mappings.toggleOpLeaderLine = "<leader>/";
+      # mappings.toggleOpLeaderBlock = "<leader>/";
+      # mappings.toggleCurrentBlock = "<leader>/";
+      mappings.toggleSelectedLine = "<leader>/";
+      # mappings.toggleSelectedBlock = "<leader>/";
+
+      setupOpts.mappings.basic = true;
+      setupOpts.mappings.extra = true;
+    };
+
+    languages = {
+      nix = {
+        enable = true;
+        format = {
+          enable = true;
+          type = [ "alejandra" ];
+        };
+        lsp = {
+          enable = true;
+          servers = [ "nixd" ];
+        };
+        treesitter.enable = true;
+      };
+      sql.enable = true;
+      typescript.enable = true;
+      python.enable = true;
+      zig.enable = true;
+      markdown.enable = true;
+      html.enable = true;
+      go.enable = true;
+      lua.enable = true;
+      assembly.enable = true;
+      bash.enable = true;
+      clang.enable = true;
+      css.enable = true;
+      typst.enable = true;
+    };
+
+    treesitter = {
+      enable = true;
+      autotagHtml = true;
+      context.enable = true;
+      # fold = true;
+      grammars = pkgs.vimPlugins.nvim-treesitter.allGrammars;
+    };
+
+    diagnostics.nvim-lint = {
+      enable = true;
+      lint_after_save = true;
+    };
+
+    # plugins
+    extraPlugins = {
+      spider = {
+        package = pkgs.vimPlugins.nvim-spider;
+      };
+    };
+
+    utility = {
+      multicursors.enable = true;
+      surround.enable = true;
+      nix-develop.enable = true;
+      preview = {
+        glow.enable = true;
+      };
+      sleuth.enable = true;
+      snacks-nvim = {
+        enable = true;
+
+        setupOpts = {
+          bigfile.enable = true;
+          dashboard = {
+            enable = false;
+          };
+          explorer.enable = true;
+          indent.enable = true;
+          input.enable = true;
+
+          notifier = {
+            enable = true;
+            timeout = 3000;
+          };
+
+          picker = {
+            enable = true;
+          };
+          quickfile.enable = true;
+          scope.enable = true;
+          scroll.enable = true;
+          statuscolumn.enable = true;
+          words.enable = true;
+
+          styles.notification = {
+            # wo.wrap = true;
+          };
+        };
+      };
+    };
+
+    autocomplete.blink-cmp = {
+      enable = true;
+      friendly-snippets.enable = true;
+      # mappings = {
+      #   close = "<Esc>"; # abort / close the menu
+      #   complete = "<C-Space>"; # trigger completion manually
+      #   confirm = "<CR>"; # confirm selected item
+      #   next = "<C-n>"; # select next completion item
+      #   previous = "<C-p>"; # select previous completion item
+      #   scrollDocsDown = "<C-f>"; # scroll docs down
+      #   scrollDocsUp = "<C-d>"; # scroll docs up
+      # };
+      setupOpts = {
+        signature.enabled = true;
+        cmdline.keymap.preset = "default";
+        keymap.preset = "default";
+        completion.documentation.auto_show = true;
+      };
+      sourcePlugins = {
+        lsp = {
+          package = "cmp-nvim-lsp";
+        };
+        buffer = {
+          package = "cmp-buffer";
+        };
+        path = {
+          package = "cmp-path";
+        };
+        luasnip = {
+          package = "cmp-luasnip";
+        };
+        spell = {
+          package = "blink-cmp-spell";
+        };
+        emoji = {
+          package = "blink-emoji-nvim";
+        };
+        ripgrep.enable = true;
+        spell.enable = true;
+      };
+    };
+
+    autopairs.nvim-autopairs.enable = true;
+
+    # keymaps
+    keymaps = import ./keymaps.nix { };
+
+    # tools
+    extraPackages = with pkgs; [
+      ripgrep
+      lazygit
+      fd
+      imagemagick
+      alejandra
+      nixd
+      ghostscript
+      tectonic
+
+      # language server
+      bash-language-server
+      clang-tools
+      docker-language-server
+      gopls
+      golangci-lint-langserver
+      vscode-langservers-extracted
+      emmet-language-server
+      lua-language-server
+      marksman
+      nixd
+      basedpyright
+      ruff
+      sqls
+      deno
+      vtsls
+      yaml-language-server
+      zls
+
+      # formatter
+      shfmt
+      gofumpt
+      prettierd
+      prettier
+      jq
+      stylua
+      nixpkgs-fmt
+      sqlfluff
+      prettypst
+
+      # linter
+      shellcheck
+      cppcheck
+      hadolint
+      fish
+      golangci-lint
+      selene
+      markdownlint-cli2
+      statix
+      eslint
+      yamllint
+
+      # debugger
+      lldb
+      delve
+      python313Packages.debugpy
+
+      # tree sitter
+      tree-sitter
+    ];
+  };
+}
diff --git a/vim.nix b/vim.nix
index 0e81b049eb54f0a53a18069c231124f1f8d0a0c9..c49641895f438e81f82b05f9725f1f54b96a1972 100644 (file)
--- a/vim.nix
+++ b/vim.nix
@@ -1,4 +1,10 @@
-{ config, pkgs, ... }:
+{
+  config,
+  pkgs,
+
+  customNeovim,
+  ...
+}:
 {
 
   environment.systemPackages = with pkgs; [
         exec ${pkgs.nvi}/bin/vi "$@"
       '';
     })
+
+    customNeovim.neovim
   ];
 
   environment.etc."vimrc".text = ''
-    set autoread
-    au FocusGained,BufEnter * silent! checktime
+      set autoread
+      au FocusGained,BufEnter * silent! checktime
 
-    " :W sudo saves the file
-    " (useful for handling the permission-denied error)
-    command! W execute 'w !sudo tee % > /dev/null' <bar> edit!
+      " Turn on the Wild menu
+      set wildmenu
 
-    " Turn on the Wild menu
-    set wildmenu
+      " Ignore compiled files
+      set wildignore=*.o,*~,*.pyc
+      set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store
 
-    " Ignore compiled files
-    set wildignore=*.o,*~,*.pyc
-    set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store
 
+      set ruler
 
-    set ruler
+      set ignorecase
+      set smartcase
+      set hlsearch
+      set incsearch
+      set lazyredraw
+      set magic
+      set showmatch
 
-    set ignorecase
-    set smartcase
-    set hlsearch
-    set incsearch
-    set lazyredraw
-    set magic
-    set showmatch
+      syntax enable
+      set noswapfile
 
-    syntax enable
-    set noswapfile
+      " Use spaces instead of tabs
+      set expandtab
 
-    " Use spaces instead of tabs
-    set expandtab
+      " Be smart when using tabs ;)
+      set smarttab
 
-    " Be smart when using tabs ;)
-    set smarttab
+      " 1 tab == 4 spaces
+      set shiftwidth=4
+      set tabstop=4
 
-    " 1 tab == 4 spaces
-    set shiftwidth=4
-    set tabstop=4
+      set ai "Auto indent
+      set si "Smart indent
+      set wrap "Wrap lines
 
-    " Linebreak on 500 characters
-    set lbr
-    set tw=500
+      " Always show the status line
+      set laststatus=2
 
-    set ai "Auto indent
-    set si "Smart indent
-    set wrap "Wrap lines
+      set number relativenumber
 
-    " Always show the status line
-    set laststatus=2
 
-    set number relativenumber
-
-
-      " Force the cursor to a Block when Vim starts
-    let &t_ti = &t_ti . "\e[2 q"
-    let &t_te = &t_te . "\e[2 q"
-    let &t_EI = "\e[2 q"
-    let &t_SI = "\e[2 q"
+    " Force the cursor to a Block when Vim starts
+      let &t_ti = &t_ti . "\e[2 q"
+      let &t_te = &t_te . "\e[2 q"
+      let &t_EI = "\e[2 q"
+      let &t_SI = "\e[2 q"
   '';
 
-  programs.neovim = {
-    enable = true;
-    defaultEditor = true;
-    configure = {
-      customRC = ''
-
-        set autoread
-        au FocusGained,BufEnter * silent! checktime
-
-        " :W sudo saves the file
-        " (useful for handling the permission-denied error)
-        command! W execute 'w !sudo tee % > /dev/null' <bar> edit!
-
-        " Turn on the Wild menu
-        set wildmenu
-
-        " Ignore compiled files
-        set wildignore=*.o,*~,*.pyc
-        set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store
-
-
-        set ruler
-
-        set ignorecase
-        set smartcase
-        set hlsearch
-        set incsearch
-        set lazyredraw
-        set magic
-        set showmatch
-
-        syntax enable
-        set noswapfile
-
-        " Use spaces instead of tabs
-        set expandtab
-
-        " Be smart when using tabs ;)
-        set smarttab
-
-        " 1 tab == 4 spaces
-        set shiftwidth=4
-        set tabstop=4
-
-        " Linebreak on 500 characters
-        set lbr
-        set tw=500
-
-        set ai "Auto indent
-        set si "Smart indent
-        set wrap "Wrap lines
-
-        " Always show the status line
-        set laststatus=2
-
-        set number relativenumber
-
-      '';
-    };
-  };
+  #  programs.neovim = {
+  #    enable = true;
+  #    defaultEditor = true;
+  #    configure = {
+  #      customRC = ''
+  #        set autoread
+  #        au FocusGained,BufEnter * silent! checktime
+  #
+  #        " Turn on the Wild menu
+  #        set wildmenu
+  #
+  #        " Ignore compiled files
+  #        set wildignore=*.o,*~,*.pyc
+  #        set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store
+  #
+  #        set ruler
+  #
+  #        set ignorecase
+  #        set smartcase
+  #        set hlsearch
+  #        set incsearch
+  #        set lazyredraw
+  #        set magic
+  #        set showmatch
+  #
+  #        syntax enable
+  #        set noswapfile
+  #
+  #        " Use spaces instead of tabs
+  #        set expandtab
+  #
+  #        " Be smart when using tabs ;)
+  #        set smarttab
+  #
+  #        " 1 tab == 4 spaces
+  #        set shiftwidth=4
+  #        set tabstop=4
+  #
+  #
+  #        set ai "Auto indent
+  #        set si "Smart indent
+  #        set wrap "Wrap lines
+  #
+  #        " Always show the status line
+  #        set laststatus=2
+  #
+  #        set number relativenumber
+  #
+  #      '';
+  #    };
+  #  };
 
 }