aboutsummaryrefslogtreecommitdiff
path: root/.config/nvim/lua/autosession_conf.lua
blob: 26e2509ddd4d57bdecd6e0ba0a8284685d62f9d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function string.starts(String, Start)
  return string.sub(String, 1, string.len(Start)) == Start
end

-- for reasons beyond my comprehension, sessions get corrupted whenever a term buffer is left open, so let's just close all term to minimize friction
local function close_term_bufs()
  for _, buf_hndl in ipairs(vim.api.nvim_list_bufs()) do
    local name = vim.api.nvim_buf_get_name(buf_hndl)
    if string.starts(name, "term://") then
      vim.api.nvim_buf_delete(buf_hndl, { force = true })
    end
  end
end

local opts = {
  log_level = 'error',
  auto_session_enable_last_session = false,
  auto_session_root_dir = vim.fn.stdpath('data') .. "/sessions/",
  auto_session_enabled = true,
  auto_save_enabled = true,
  auto_restore_enabled = true,
  auto_session_suppress_dirs = { "~/", "~/Downloads", "/" },
  auto_session_use_git_branch = nil,
  -- the configs below are lua only
  bypass_session_save_file_types = nil,
  cwd_change_handling = {            -- table: Config for handling the DirChangePre and DirChanged autocmds, can be set to nil to disable altogether
    restore_upcoming_session = true, -- boolean: restore session for upcoming cwd on cwd change
    pre_cwd_changed_hook = nil,      -- function: This is called after auto_session code runs for the `DirChangedPre` autocmd
    post_cwd_changed_hook = nil,     -- function: This is called after auto_session code runs for the `DirChanged` autocmd
  },
  pre_save_cmds = { close_term_bufs }
}

vim.o.sessionoptions = "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions"

require('auto-session').setup(opts)