diff --git a/init.lua b/init.lua
index d5ca1ef..0ce3f8e 100644
--- a/init.lua
+++ b/init.lua
@@ -1,6 +1,7 @@
 require('settings')
 require('mappings')
 require('netrw')
+require('autocmds')
 
 local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
 if not vim.loop.fs_stat(lazypath) then
diff --git a/lua/autocmds.lua b/lua/autocmds.lua
new file mode 100644
index 0000000..2ca5239
--- /dev/null
+++ b/lua/autocmds.lua
@@ -0,0 +1,24 @@
+-- Create a group to namespace autocmds
+local group = vim.api.nvim_create_augroup('benie', { clear = true })
+
+-- Restore cursor position across sessions
+-- https://github.com/neovim/neovim/issues/16339#issuecomment-1457394370
+vim.api.nvim_create_autocmd('BufRead', {
+  group = group,
+  callback = function(opts)
+    vim.api.nvim_create_autocmd('BufWinEnter', {
+      once = true,
+      buffer = opts.buf,
+      callback = function()
+        local ft = vim.bo[opts.buf].filetype
+        local last_known_line = vim.api.nvim_buf_get_mark(opts.buf, '"')[1]
+        if not (ft:match('commit') and ft:match('rebase'))
+            and last_known_line > 1
+            and last_known_line <= vim.api.nvim_buf_line_count(opts.buf)
+        then
+          vim.api.nvim_feedkeys([[g`"]], 'nx', false)
+        end
+      end
+    })
+  end
+})