diff --git a/laptop/config/keymaps.lua b/laptop/config/keymaps.lua
index d052e02..cb3ebd3 100644
--- a/laptop/config/keymaps.lua
+++ b/laptop/config/keymaps.lua
@@ -1,13 +1,22 @@
 -- This file lists all the global keymaps
 local map = vim.keymap.set
 local g = vim.g
-local api = vim.api
-local opt = vim.opt
 
 -- Change the leader and localleader
 g.mapleader = ','
 g.maplocalleader = ';'
 
+-- Make a dot-repeatable keymaps
+local function drmap(mode, motion, keycodes, opts)
+    local termcodes = vim.api.nvim_replace_termcodes(keycodes, true, true, true)
+    local function dot_repeatable()
+        _G.dot_repeat_callback = vim.api.nvim_feedkeys(termcodes, mode, false)
+        vim.go.operatorfunc = 'v:lua.dot_repeat_callback'
+        return 'g@l'
+    end
+    map(mode, motion, dot_repeatable, opts)
+end
+
 -- Use ctrl-[hjkl] to select the active split!
 map('n', '<c-k>', ":wincmd k<cr>", { silent = true })
 map('n', '<c-j>', ":wincmd j<cr>", { silent = true })
@@ -15,10 +24,11 @@ map('n', '<c-h>', ":wincmd h<cr>", { silent = true })
 map('n', '<c-l>', ":wincmd l<cr>", { silent = true })
 
 -- Use ,dd for deleting without putting into buffer etc.
-map({ 'v', 'n' }, '<leader>d', '"_d', { remap = false })
-map('n', '<leader>D', '"_D', { remap = false })
-map('n', '<leader>x', '"_x', { remap = false })
-map('n', '<leader>r', '"_viwP', { remap = false })
+drmap('n', '<leader>d', '"_d', { remap = false })
+map('v', '<leader>d', '"_d', { remap = false })
+drmap('n', '<leader>D', '"_D', { remap = false })
+drmap('n', '<leader>x', '"_x', { remap = false })
+drmap('n', '<leader>r', '"_viwP', { remap = false })
 
 -- Insert a newline in normal mode by ,o and ,O
 map('n', '<leader>o', ":<c-u>call append(line('.'), repeat([''], v:count1))<cr>", { remap = false })
diff --git a/laptop/config/plugins.lua b/laptop/config/plugins.lua
index 72dd890..a1b0156 100644
--- a/laptop/config/plugins.lua
+++ b/laptop/config/plugins.lua
@@ -80,7 +80,8 @@ require("lazy").setup(
             version = "1",
             event = "LspAttach",
             config = true,
-        }
+        },
+        "dvrlabs/takeout.nvim",
     },
     {
         lockfile = vim.fn.stdpath("config") .. "/config/lazy-lock.json",
diff --git a/pizero/init.lua b/pizero/init.lua
index 20e351d..1d8e982 100644
--- a/pizero/init.lua
+++ b/pizero/init.lua
@@ -55,6 +55,17 @@ g.loaded_python_provider = 0
 g.mapleader = ','
 g.maplocalleader = ';'
 
+-- Make a dot-repeatable keymaps
+local function drmap(mode, motion, keycodes, opts)
+    local termcodes = vim.api.nvim_replace_termcodes(keycodes, true, true, true)
+    local function dot_repeatable()
+        _G.dot_repeat_callback = vim.api.nvim_feedkeys(termcodes, mode, false)
+        vim.go.operatorfunc = 'v:lua.dot_repeat_callback'
+        return 'g@l'
+    end
+    map(mode, motion, dot_repeatable, opts)
+end
+
 -- Use ctrl-[hjkl] to select the active split!
 map('n', '<c-k>', ":wincmd k<cr>", { silent = true })
 map('n', '<c-j>', ":wincmd j<cr>", { silent = true })
@@ -62,10 +73,11 @@ map('n', '<c-h>', ":wincmd h<cr>", { silent = true })
 map('n', '<c-l>', ":wincmd l<cr>", { silent = true })
 
 -- Use ,dd for deleting without putting into buffer etc.
-map({ 'v', 'n' }, '<leader>d', '"_d', { remap = false })
-map('n', '<leader>D', '"_D', { remap = false })
-map('n', '<leader>x', '"_x', { remap = false })
-map('n', '<leader>r', '"_viwP', { remap = false })
+drmap('n', '<leader>d', '"_d', { remap = false })
+map('v', '<leader>d', '"_d', { remap = false })
+drmap('n', '<leader>D', '"_D', { remap = false })
+drmap('n', '<leader>x', '"_x', { remap = false })
+drmap('n', '<leader>r', '"_viwP', { remap = false })
 
 -- Insert a newline in normal mode by ,o and ,O
 map('n', '<leader>o', ":<c-u>call append(line('.'), repeat([''], v:count1))<cr>", { remap = false })
diff --git a/server/config/keymaps.lua b/server/config/keymaps.lua
index eaf0b77..4c8b7b8 100644
--- a/server/config/keymaps.lua
+++ b/server/config/keymaps.lua
@@ -6,12 +6,23 @@ local g = vim.g
 g.mapleader = ','
 g.maplocalleader = ';'
 
+-- Make a dot-repeatable keymaps
+local function drmap(mode, motion, keycodes, opts)
+    local termcodes = vim.api.nvim_replace_termcodes(keycodes, true, true, true)
+    local function dot_repeatable()
+        _G.dot_repeat_callback = vim.api.nvim_feedkeys(termcodes, mode, false)
+        vim.go.operatorfunc = 'v:lua.dot_repeat_callback'
+        return 'g@l'
+    end
+    map(mode, motion, dot_repeatable, opts)
+end
 
 -- Use ,dd for deleting without putting into buffer etc.
-map({ 'v', 'n' }, '<leader>d', '"_d', { remap = false })
-map('n', '<leader>D', '"_D', { remap = false })
-map('n', '<leader>x', '"_x', { remap = false })
-map('n', '<leader>r', '"_viwP', { remap = false })
+drmap('n', '<leader>d', '"_d', { remap = false })
+map('v', '<leader>d', '"_d', { remap = false })
+drmap('n', '<leader>D', '"_D', { remap = false })
+drmap('n', '<leader>x', '"_x', { remap = false })
+drmap('n', '<leader>r', '"_viwP', { remap = false })
 
 -- Insert a newline in normal mode by ,o and ,O
 map('n', '<leader>o', ":<c-u>call append(line('.'), repeat([''], v:count1))<cr>", { remap = false })
diff --git a/vps/config/keymaps.lua b/vps/config/keymaps.lua
index 0363ed3..4c8b7b8 100644
--- a/vps/config/keymaps.lua
+++ b/vps/config/keymaps.lua
@@ -6,11 +6,23 @@ local g = vim.g
 g.mapleader = ','
 g.maplocalleader = ';'
 
+-- Make a dot-repeatable keymaps
+local function drmap(mode, motion, keycodes, opts)
+    local termcodes = vim.api.nvim_replace_termcodes(keycodes, true, true, true)
+    local function dot_repeatable()
+        _G.dot_repeat_callback = vim.api.nvim_feedkeys(termcodes, mode, false)
+        vim.go.operatorfunc = 'v:lua.dot_repeat_callback'
+        return 'g@l'
+    end
+    map(mode, motion, dot_repeatable, opts)
+end
+
 -- Use ,dd for deleting without putting into buffer etc.
-map({ 'v', 'n' }, '<leader>d', '"_d', { remap = false })
-map('n', '<leader>D', '"_D', { remap = false })
-map('n', '<leader>x', '"_x', { remap = false })
-map('n', '<leader>r', '"_viwP', { remap = false })
+drmap('n', '<leader>d', '"_d', { remap = false })
+map('v', '<leader>d', '"_d', { remap = false })
+drmap('n', '<leader>D', '"_D', { remap = false })
+drmap('n', '<leader>x', '"_x', { remap = false })
+drmap('n', '<leader>r', '"_viwP', { remap = false })
 
 -- Insert a newline in normal mode by ,o and ,O
 map('n', '<leader>o', ":<c-u>call append(line('.'), repeat([''], v:count1))<cr>", { remap = false })