From 808c59f8d715f1b3de8098e4648646e485b7eec6 Mon Sep 17 00:00:00 2001 From: andrzej Date: Mon, 6 May 2024 23:01:53 +0200 Subject: [PATCH] setup project manager --- nvim/.config/nvim/init.lua | 1 + nvim/.config/nvim/lua/plugins/project.lua | 21 ++++++++ nvim/.config/nvim/lua/plugins/sessions.lua | 9 ---- nvim/.config/nvim/lua/plugins/telescope.lua | 2 +- .../lua/project_dotfiles_autocommands.lua | 54 +++++++++++++++++++ 5 files changed, 77 insertions(+), 10 deletions(-) create mode 100644 nvim/.config/nvim/lua/plugins/project.lua delete mode 100644 nvim/.config/nvim/lua/plugins/sessions.lua create mode 100644 nvim/.config/nvim/lua/project_dotfiles_autocommands.lua diff --git a/nvim/.config/nvim/init.lua b/nvim/.config/nvim/init.lua index e4db801..da0a4d0 100644 --- a/nvim/.config/nvim/init.lua +++ b/nvim/.config/nvim/init.lua @@ -1,6 +1,7 @@ vim.g.mapleader = " " vim.g.maplocalleader = " " vim.g.have_nerd_font = true +require("project_dotfiles_autocommands") require("options.default") require("lazy_bootstrap") require("lazy").setup({ { import = "plugins" } }) diff --git a/nvim/.config/nvim/lua/plugins/project.lua b/nvim/.config/nvim/lua/plugins/project.lua new file mode 100644 index 0000000..49cf47b --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/project.lua @@ -0,0 +1,21 @@ +return { + "coffebar/neovim-project", + opts = { + projects = { -- define project roots + "~/projects/*", + "~/.config/*", + "~/dev/*", + }, + }, + init = function() + -- enable saving the state of plugins in the session + vim.opt.sessionoptions:append("globals") -- save global variables that start with an uppercase letter and contain at least one lowercase letter. + end, + dependencies = { + { "nvim-lua/plenary.nvim" }, + { "nvim-telescope/telescope.nvim", tag = "0.1.4" }, + { "Shatur/neovim-session-manager" }, + }, + lazy = false, + priority = 100, +} diff --git a/nvim/.config/nvim/lua/plugins/sessions.lua b/nvim/.config/nvim/lua/plugins/sessions.lua deleted file mode 100644 index 02f75f6..0000000 --- a/nvim/.config/nvim/lua/plugins/sessions.lua +++ /dev/null @@ -1,9 +0,0 @@ -return { - "rmagatti/auto-session", - config = function() - require("auto-session").setup({ - log_level = "error", - auto_session_suppress_dirs = { "~/", "~/Projects", "~/Downloads", "/" }, - }) - end, -} diff --git a/nvim/.config/nvim/lua/plugins/telescope.lua b/nvim/.config/nvim/lua/plugins/telescope.lua index dcf6d86..a1aa081 100644 --- a/nvim/.config/nvim/lua/plugins/telescope.lua +++ b/nvim/.config/nvim/lua/plugins/telescope.lua @@ -151,7 +151,7 @@ return { -- Fuzzy Finder (files, lsp, etc) vim.keymap.set( "n", "sp", - "lua require'telescope'.extensions.project.project{}", + ":Telescope neovim-project discover", { desc = "[S]earch [P]rojects", noremap = true, silent = true } ) -- Slightly advanced example of overriding default behavior and theme diff --git a/nvim/.config/nvim/lua/project_dotfiles_autocommands.lua b/nvim/.config/nvim/lua/project_dotfiles_autocommands.lua new file mode 100644 index 0000000..f82e389 --- /dev/null +++ b/nvim/.config/nvim/lua/project_dotfiles_autocommands.lua @@ -0,0 +1,54 @@ +local augroup = vim.api.nvim_create_augroup("user_cmds", { clear = true }) + +local function update_git_env_for_dotfiles() + -- Auto change ENV variables to enable + -- bare git repository for dotfiles after + -- loading saved session + local home = vim.fn.expand("~") + local git_dir = home .. "/dotfiles" + + if vim.env.GIT_DIR ~= nil and vim.env.GIT_DIR ~= git_dir then + return + end + + -- check dotfiles dir exists on current machine + if vim.fn.isdirectory(git_dir) ~= 1 then + vim.env.GIT_DIR = nil + vim.env.GIT_WORK_TREE = nil + return + end + + -- check if the current working directory should belong to dotfiles + local cwd = vim.loop.cwd() + if vim.startswith(cwd, home .. "/.config/") or cwd == home or cwd == home .. "/.local/bin" then + if vim.env.GIT_DIR == nil then + -- export git location into ENV + vim.env.GIT_DIR = git_dir + vim.env.GIT_WORK_TREE = home + end + else + if vim.env.GIT_DIR == git_dir then + -- unset variables + vim.env.GIT_DIR = nil + vim.env.GIT_WORK_TREE = nil + end + end +end + +vim.api.nvim_create_autocmd("DirChanged", { + pattern = { "*" }, + group = augroup, + desc = "Update git env for dotfiles after changing directory", + callback = function() + update_git_env_for_dotfiles() + end, +}) + +vim.api.nvim_create_autocmd("User", { + pattern = { "SessionLoadPost" }, + group = augroup, + desc = "Update git env for dotfiles after loading session", + callback = function() + update_git_env_for_dotfiles() + end, +})