diff --git a/roles/neovim/files/lua/opdavies/plugins.lua b/roles/neovim/files/lua/opdavies/plugins.lua
index 5cd8d3cd..c9cc33d7 100644
--- a/roles/neovim/files/lua/opdavies/plugins.lua
+++ b/roles/neovim/files/lua/opdavies/plugins.lua
@@ -46,6 +46,7 @@ return packer.startup(function()
   use "nvim-lua/popup.nvim"
   use "rcarriga/nvim-notify"
   use "sheerun/vim-polyglot"
+  use "theprimeagen/git-worktree.nvim"
   use "theprimeagen/refactoring.nvim"
   use "tjdevries/express_line.nvim"
   use "tpope/vim-repeat"
diff --git a/roles/neovim/files/lua/opdavies/telescope/mappings.lua b/roles/neovim/files/lua/opdavies/telescope/mappings.lua
index 69ed002c..6cd33a04 100644
--- a/roles/neovim/files/lua/opdavies/telescope/mappings.lua
+++ b/roles/neovim/files/lua/opdavies/telescope/mappings.lua
@@ -1,5 +1,7 @@
 TelescopeMapArgs = TelescopeMapArgs or {}
 
+local telescope = require "telescope"
+
 local telescope_mapper = function(key, f, options, buffer)
   local map_key = vim.api.nvim_replace_termcodes(key .. f, true, true, true)
 
@@ -34,4 +36,9 @@ telescope_mapper("<leader>dl", "diagnostics")
 telescope_mapper("<leader>en", "edit_neovim")
 telescope_mapper("<leader>ez", "edit_zsh")
 
+local nmap = require "opdavies.keymap".nmap
+
+nmap { "<leader>gm", telescope.extensions.git_worktree.create_git_worktree }
+nmap { "<leader>gw", telescope.extensions.git_worktree.git_worktrees }
+
 return telescope_mapper
diff --git a/roles/neovim/files/lua/opdavies/telescope/setup.lua b/roles/neovim/files/lua/opdavies/telescope/setup.lua
index d45e00ae..ba0e1261 100644
--- a/roles/neovim/files/lua/opdavies/telescope/setup.lua
+++ b/roles/neovim/files/lua/opdavies/telescope/setup.lua
@@ -60,5 +60,6 @@ telescope.setup {
 
 telescope.load_extension "file_browser"
 telescope.load_extension "fzf"
+telescope.load_extension "git_worktree"
 telescope.load_extension "refactoring"
 telescope.load_extension "ui-select"