dotfiles

Author: Kyle Fuller <kyle@fuller.li> 2025-07-12 17:16:39 +0100 +0100
Committer: Kyle Fuller <kyle@fuller.li> 2025-07-12 17:16:39 +0100 +0100
Commit: f2b7b1e5fa404b4b801284ff053cc1087ea76ffd
Parent: 9ffe81f22ce350bebbdd9707717b0996f866191b


feat(vim): enable treesitter
diff --git a/.config/home-manager/home.nix b/.config/home-manager/home.nix
index bf819b89148644c5f987a21e48aa3659e73aad0b..e80c16e63b6d40f539e6cd880af7ef66d3f9fdc7 100644
--- a/.config/home-manager/home.nix
+++ b/.config/home-manager/home.nix
@@ -152,6 +152,21 @@       cmp-buffer
       cmp-nvim-lsp
       vim-vsnip
       cmp-vsnip
+
+      # treesitter
+      nvim-treesitter
+      nvim-treesitter-textobjects
+      nvim-treesitter-parsers.bash
+      nvim-treesitter-parsers.dockerfile
+      nvim-treesitter-parsers.go
+      nvim-treesitter-parsers.java
+      nvim-treesitter-parsers.lua
+      nvim-treesitter-parsers.make
+      nvim-treesitter-parsers.markdown
+      nvim-treesitter-parsers.markdown_inline
+      nvim-treesitter-parsers.python
+      nvim-treesitter-parsers.terraform
+      nvim-treesitter-parsers.toml
     ];
   };
   programs.direnv.enable = true;
diff --git a/.config/nvim/lua/kyle/init.lua b/.config/nvim/lua/kyle/init.lua
index 294fa6b97008840cd7586d109299a46c03927fe8..b465de0fa0a799215781c43b35dce3ff53d7df1f 100644
--- a/.config/nvim/lua/kyle/init.lua
+++ b/.config/nvim/lua/kyle/init.lua
@@ -1,3 +1,4 @@
 require('kyle.lspconfig')
 require('kyle.mapping')
 require('kyle.options')
+require('kyle.treesitter')
diff --git a/.config/nvim/lua/kyle/treesitter.lua b/.config/nvim/lua/kyle/treesitter.lua
new file mode 100644
index 0000000000000000000000000000000000000000..b4b313df13166924e7508995121286b35d85a61b
--- /dev/null
+++ b/.config/nvim/lua/kyle/treesitter.lua
@@ -0,0 +1,55 @@
+require'nvim-treesitter.configs'.setup {
+  highlight = {
+    enable = true
+  },
+  textobjects = {
+    select = {
+      enable = true,
+      lookahead = true,
+      keymaps = {
+        ["ac"] = "@class.outer",
+        ["ic"] = "@class.inner",
+        ["af"] = "@function.outer",
+        ["if"] = "@function.inner",
+        ["ap"] = "@parameter.outer",
+        ["ip"] = "@parameter.inner",
+      },
+      selection_modes = {
+        ['@class.outer'] = '<c-v>', -- blockwise
+        ['@function.outer'] = 'V', -- linewise
+        ['@parameter.outer'] = 'v', -- charwise
+      },
+    },
+    swap = {
+      enable = true,
+      swap_next = {
+        ["<leader>a"] = "@parameter.inner",
+      },
+      swap_previous = {
+        ["<leader>A"] = "@parameter.inner",
+      },
+    },
+    move = {
+      enable = true,
+      set_jumps = true,
+      goto_next_start = {
+        ["]]"] = "@class.outer",
+        ["]m"] = "@function.outer",
+        ["]p"] = "@parameter.outer",
+      },
+      goto_next_end = {
+        ["]["] = "@class.outer",
+        ["]M"] = "@function.outer",
+      },
+      goto_previous_start = {
+        ["[["] = "@class.outer",
+        ["[m"] = "@function.outer",
+        ["[p"] = "@parameter.outer",
+      },
+      goto_previous_end = {
+        ["[]"] = "@class.outer",
+        ["[M"] = "@function.outer",
+      },
+    },
+  },
+}