diff --git a/home/editors/neovim/alpha.lua b/home/editors/neovim/alpha.lua new file mode 100644 index 0000000..b2e9018 --- /dev/null +++ b/home/editors/neovim/alpha.lua @@ -0,0 +1,33 @@ +local status_ok, alpha = pcall(require, "alpha") +if not status_ok then + return +end + +local keybind_opts = { noremap = true, silent = true, nowait = true } +local dashboard = require("alpha.themes.dashboard") +dashboard.section.header.val = { + [[ __ ]], + [[ ___ ___ ___ __ __ /\_\ ___ ___ ]], + [[ / _ `\ / __`\ / __`\/\ \/\ \\/\ \ / __` __`\ ]], + [[/\ \/\ \/\ __//\ \_\ \ \ \_/ |\ \ \/\ \/\ \/\ \ ]], + [[\ \_\ \_\ \____\ \____/\ \___/ \ \_\ \_\ \_\ \_\]], + [[ \/_/\/_/\/____/\/___/ \/__/ \/_/\/_/\/_/\/_/]], +} +dashboard.section.buttons.val = { + dashboard.button("p", " " .. " Find project", ":Telescope project display_type=full <CR>", keybind_opts), + dashboard.button("s", " " .. " Restore session", ":RestoreSession <CR>", keybind_opts), + dashboard.button("f", " " .. " Find file", ":Telescope find_files <CR>", keybind_opts), + dashboard.button("e", " " .. " New file", ":ene <BAR> startinsert <CR>", keybind_opts), + dashboard.button("r", " " .. " Recent files", ":Telescope oldfiles <CR>", keybind_opts), + dashboard.button("t", " " .. " Find text", ":Telescope live_grep <CR>", keybind_opts), + dashboard.button("h", " " .. " Neovim Help", ":help<CR>", keybind_opts), + dashboard.button("R", " " .. " Neovim Reference", ":help reference<CR>", keybind_opts), + dashboard.button("q", " " .. " Quit", ":qa<CR>", keybind_opts), +} + +dashboard.section.footer.opts.hl = "Type" +dashboard.section.header.opts.hl = "Include" +dashboard.section.buttons.opts.hl = "Keyword" + +dashboard.opts.opts.noautocmd = true +alpha.setup(dashboard.opts) diff --git a/home/editors/neovim/auto-session.lua b/home/editors/neovim/auto-session.lua new file mode 100644 index 0000000..de8b5af --- /dev/null +++ b/home/editors/neovim/auto-session.lua @@ -0,0 +1,17 @@ +vim.o.sessionoptions = "buffers,curdir,tabpages,winsize" + +require("auto-session").setup { + auto_session_suppress_dirs = { "~/", "~/dev", "~/dev/work" }, + auto_session_enabled = false, + pre_save_cmds = { "tabdo NvimTreeClose" }, +} + +local wk = require("which-key") +wk.register({ + S = { + name = "Session", + d = { require("auto-session").DeleteSession, "Delete session" }, + s = { require("auto-session").SaveSession, "Save session" }, + r = { require("auto-session").RestoreSession, "Restore session" }, + }, +}, { mode = "n", prefix = "<leader>" }) diff --git a/home/editors/neovim/default.nix b/home/editors/neovim/default.nix index de0ca77..ee6ad8b 100644 --- a/home/editors/neovim/default.nix +++ b/home/editors/neovim/default.nix @@ -18,12 +18,14 @@ in { editorconfig-nvim direnv-vim telescope-nvim + telescope-project-nvim telescope-fzy-native-nvim lualine-nvim nvim-web-devicons nvim-tree-lua toggleterm-nvim - vim-startify + alpha-nvim + auto-session vim-visual-multi vim-surround kommentary @@ -66,7 +68,8 @@ in { # readFile ./vim-surround-fix.vim + vimLua (lib.foldl (r: f: r + "\n" + readFile f) "" [ ./init.lua - ./startify.lua + ./alpha.lua + ./auto-session.lua ./lualine.lua ./which-key.lua ./gitsigns.lua diff --git a/home/editors/neovim/startify.lua b/home/editors/neovim/startify.lua deleted file mode 100644 index 6957aa6..0000000 --- a/home/editors/neovim/startify.lua +++ /dev/null @@ -1,49 +0,0 @@ -local function formatDirs(files) - local results = {} - for _, file in ipairs(files) do - table.insert(results, { line = file, path = file }) - end - return results -end - -local function gitModified() - local files = vim.fn.systemlist("git ls-files -m 2>/dev/null") - return formatDirs(files) -end - -local function gitUntracked() - local files = vim.fn.systemlist("git ls-files -o --exclude-standard 2>/dev/null") - return formatDirs(files) -end - -local function escapePattern(text) - return text:gsub("([^%w])", "%%%1") -end - -local function listProjects() - local gitDirs = vim.fn.finddir(".git", vim.env.HOME .. "/dev/**4", -1) - table.insert(gitDirs, 1, "/etc/nixos") - return vim.fn.map(gitDirs, function(_, gitDir) - local dir = gitDir:gsub(escapePattern(".git"), "") - dir = dir == "" and "." or dir - local line = dir:gsub(escapePattern(vim.env.HOME), "~") - return { - line = line, - path = dir, - } end - ) -end - -vim.g.startify_commands = { - {h = {"Vim Help", "help"}}, - {r = {"Vim Reference", "help reference"}}, -} - -vim.g.startify_lists = { - { header = {" Sessions"}, type = "sessions" }, - { header = {" git modified"}, type = gitModified }, - { header = {" git untracked"}, type = gitUntracked }, - { header = {" Projects"}, type = listProjects }, - { header = {" Recent files"}, type = "files" }, - { header = {" Commands"}, type = "commands" }, -} diff --git a/home/editors/neovim/telescope.lua b/home/editors/neovim/telescope.lua index c30cea5..1435855 100644 --- a/home/editors/neovim/telescope.lua +++ b/home/editors/neovim/telescope.lua @@ -1,5 +1,17 @@ -require("telescope").setup() +require("telescope").setup { + extensions = { + project = { + base_dirs = { + { "/etc/nixos" }, + { "~/dev", max_depth = 3 }, + { "~/dev/work", max_depth = 3 }, + }, + }, + }, +} + require("telescope").load_extension("fzy_native") +require("telescope").load_extension("project") local wk = require("which-key") @@ -43,7 +55,8 @@ wk.register({ m = { require("telescope.builtin").marks, "Marks" }, M = { require("telescope.builtin").man_pages, "Man pages" }, o = { require("telescope.builtin").oldfiles, "Previously open files" }, - p = { require("telescope.builtin").pickers, "Pickers" }, + p = { require("telescope").extensions.project.project, "Pickers" }, + P = { require("telescope.builtin").pickers, "Pickers" }, q = { require("telescope.builtin").quickfix, "Quickfix" }, Q = { require("telescope.builtin").quickfixhistory, "Quickfix history" }, r = { require("telescope.builtin").resume, "Resume" },