mirror of
https://github.com/LazyVim/LazyVim.git
synced 2026-07-25 14:01:06 +00:00
feat(chezmoi): replace leader-fc with chezmoi edit
For telescope, pick all nvim config files, edit with or without chezmoi. For fzf, only pick nvim config files which managed by chezmoi for now. Remove unnecessary `--watch` args for fzf-lua since we have autocmd, besides telescope don't have that args anyway.
This commit is contained in:
parent
9d91b813dd
commit
16db75c4d9
1 changed files with 89 additions and 23 deletions
|
|
@ -1,26 +1,84 @@
|
||||||
local pick_chezmoi = function()
|
---@param targets? string|string[]
|
||||||
if LazyVim.pick.picker.name == "telescope" then
|
local function fzf_chezmoi(targets)
|
||||||
require("telescope").extensions.chezmoi.find_files()
|
|
||||||
elseif LazyVim.pick.picker.name == "fzf" then
|
|
||||||
local fzf_lua = require("fzf-lua")
|
local fzf_lua = require("fzf-lua")
|
||||||
local results = require("chezmoi.commands").list({
|
local chezmoi = require("chezmoi.commands")
|
||||||
|
local results = chezmoi.list({
|
||||||
|
targets = targets or {},
|
||||||
args = { "--include", "files" }, -- exclude directories
|
args = { "--include", "files" }, -- exclude directories
|
||||||
})
|
})
|
||||||
local chezmoi = require("chezmoi.commands")
|
|
||||||
|
|
||||||
local opts = {
|
local opts = {
|
||||||
fzf_opts = {},
|
fzf_opts = {},
|
||||||
fzf_colors = true,
|
fzf_colors = true,
|
||||||
actions = {
|
actions = {
|
||||||
["default"] = function(selected)
|
["default"] = function(selected)
|
||||||
|
if not vim.tbl_isempty(selected) then
|
||||||
chezmoi.edit({
|
chezmoi.edit({
|
||||||
targets = { "~/" .. selected[1] },
|
targets = "~/" .. selected[1],
|
||||||
args = { "--watch" },
|
|
||||||
})
|
})
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
fzf_lua.fzf_exec(results, opts)
|
fzf_lua.fzf_exec(results, opts)
|
||||||
|
end
|
||||||
|
|
||||||
|
local pick_chezmoi = function()
|
||||||
|
if LazyVim.pick.picker.name == "telescope" then
|
||||||
|
require("telescope").extensions.chezmoi.find_files()
|
||||||
|
elseif LazyVim.pick.picker.name == "fzf" then
|
||||||
|
fzf_chezmoi()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- pick nvim config
|
||||||
|
local pick_config = function()
|
||||||
|
local chezmoi = require("chezmoi.commands")
|
||||||
|
local config_dir = vim.fn.stdpath("config")
|
||||||
|
local managed_config_files = chezmoi.list({
|
||||||
|
targets = config_dir,
|
||||||
|
args = { "--path-style", "absolute", "--include", "files" },
|
||||||
|
})
|
||||||
|
|
||||||
|
if vim.tbl_isempty(managed_config_files) then
|
||||||
|
LazyVim.pick.config_files()()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if LazyVim.pick.picker.name == "telescope" then
|
||||||
|
local actions = require("telescope.actions")
|
||||||
|
local action_state = require("telescope.actions.state")
|
||||||
|
local config = require("chezmoi").config
|
||||||
|
|
||||||
|
require("telescope.builtin").find_files({
|
||||||
|
prompt_title = "Config Files",
|
||||||
|
cwd = config_dir,
|
||||||
|
attach_mappings = function(prompt_bufnr, map)
|
||||||
|
local edit_action = function()
|
||||||
|
actions.close(prompt_bufnr)
|
||||||
|
local selection = action_state.get_selected_entry()
|
||||||
|
if selection then
|
||||||
|
chezmoi.edit({
|
||||||
|
targets = config_dir .. "/" .. selection.value,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for _, v in ipairs(config.telescope.select) do
|
||||||
|
map("i", v, "select_default")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- it's possible that only part of nvim config files are managed with chezmoi
|
||||||
|
-- pick all and just edit if unmanaged
|
||||||
|
actions.select_default:replace_if(function()
|
||||||
|
local selection = action_state.get_selected_entry()
|
||||||
|
return selection and vim.tbl_contains(managed_config_files, config_dir .. "/" .. selection.value)
|
||||||
|
end, edit_action)
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
elseif LazyVim.pick.picker.name == "fzf" then
|
||||||
|
-- only pick the managed config files
|
||||||
|
fzf_chezmoi(config_dir)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -36,11 +94,8 @@ return {
|
||||||
{
|
{
|
||||||
"xvzc/chezmoi.nvim",
|
"xvzc/chezmoi.nvim",
|
||||||
keys = {
|
keys = {
|
||||||
{
|
{ "<leader>sz", pick_chezmoi, desc = "Chezmoi" },
|
||||||
"<leader>sz",
|
{ "<leader>fc", pick_config, desc = "Find Config File" },
|
||||||
pick_chezmoi,
|
|
||||||
desc = "Chezmoi",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
opts = {
|
opts = {
|
||||||
edit = {
|
edit = {
|
||||||
|
|
@ -66,6 +121,17 @@ return {
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"ibhagwan/fzf-lua",
|
||||||
|
optional = true,
|
||||||
|
keys = { { "<leader>fc", false } },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nvim-telescope/telescope.nvim",
|
||||||
|
optional = true,
|
||||||
|
keys = { { "<leader>fc", false } },
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"nvimdev/dashboard-nvim",
|
"nvimdev/dashboard-nvim",
|
||||||
optional = true,
|
optional = true,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue