local M = {} function M.themeselector(opts) local pickers = require("telescope.pickers") local finders = require("telescope.finders") local conf = require("telescope.config").values local actions = require("telescope.actions") local action_state = require("telescope.actions.state") local action_set = require("telescope.actions.set") local configDir = vim.fn.stdpath("config") local prefsFile = configDir .. "/lua/taken/prefs.lua" local oldstring = 'M.colorscheme = .*"' vim.api.nvim_exec_autocmds("User", { pattern = "ThemeSwitcher", modeline = false }) local colors = vim.fn.globpath(vim.o.rtp, "colors/*", 1, 1) local dataDir = vim.fn.stdpath("data") local newpath = string.gsub(dataDir, "%-", "%%-") local themes = {} for i, v in ipairs(colors) do if string.find(v, "lazy") then local filename = "" if vim.loop.os_uname().sysname == "Windows_NT" then filename = string.gsub(v, newpath .. "\\lazy\\.*\\", "") else filename = string.gsub(v, newpath .. "/lazy/.*/", "") end local themename = string.gsub(filename, ".vim", "") local themename2 = string.gsub(themename, ".lua", "") table.insert(themes, themename2) end end local function change_theme(old, new) -- function from nvchad local file = io.open(prefsFile, "r") local added_pattern = string.gsub(old, "-", "%%-") local new_content = file:read("*all"):gsub(added_pattern, new) file = io.open(prefsFile, "w") file:write(new_content) file:close() end local exec = function(choice) if choice == nil then vim.notify("No theme selected!", 4) return end vim.cmd("colorscheme " .. choice) local newstring = 'M.colorscheme = "' .. choice .. '"' change_theme(oldstring, newstring) local cursorcolumncolor = vim.fn.synIDattr(vim.fn.hlID("CursorColumn"), "bg") if cursorcolumncolor ~= "" then vim.cmd("hi CursorLine guibg=" .. cursorcolumncolor) end end opts = opts or {} pickers .new(opts, { prompt_title = "Colorscheme", finder = finders.new_table({ results = themes, }), sorter = conf.generic_sorter(opts), attach_mappings = function(prompt_bufnr) actions.select_default:replace(function() actions.close(prompt_bufnr) local selection = action_state.get_selected_entry() exec(selection.value) end) action_set.shift_selection:enhance({ post = function() local selection = action_state.get_selected_entry() if selection == nil then vim.notify("Error while selecting theme", vim.log.levels.ERROR) end vim.cmd("colorscheme " .. selection.value) end, }) -- actions.close:enhance({ -- post = function() -- local selection = action_state.get_selected_entry() -- if selection == nil then -- vim.notify("Error while selecting theme", vim.log.levels.ERROR) -- end -- exec(selection.value) -- end, -- }) return true end, }) :find() end return M