1

Modules/Neovim: Replace telescope with Snacks.picker

This commit is contained in:
2025-06-19 21:00:24 +02:00
parent 2cdefc6809
commit 862363b5c6
2 changed files with 137 additions and 230 deletions

View File

@ -80,8 +80,8 @@ in {
}; };
programs.nixvim = { programs.nixvim = {
enable = true;
defaultEditor = true; defaultEditor = true;
enable = true;
enableMan = false; # Nixvim man pages enableMan = false; # Nixvim man pages
luaLoader.enable = true; # NOTE: Experimental luaLoader.enable = true; # NOTE: Experimental
viAlias = neovim.alias; viAlias = neovim.alias;
@ -228,25 +228,6 @@ in {
end end
''; '';
} }
# This breaks if the preview buffer does not refer to a file, e.g. when showing previous notifications
# {
# desc = "Enable line wrapping in telescope preview";
# event = ["User"];
# pattern = ["TelescopePreviewerLoaded"];
# callback.__raw = ''
# -- The callback arg is of this format:
# -- {
# -- title: string, # preview window title
# -- filetype: string,
# -- bufname: string,
# -- }
# function(args)
# vim.wo.wrap = true
# end
# '';
# }
]; ];
keymaps = import ./mappings.nix {inherit lib mylib;}; keymaps = import ./mappings.nix {inherit lib mylib;};
@ -541,34 +522,6 @@ in {
}; };
}; };
# TODO: Don't autosave, but if a session exists, update it (using should_autosave)
_persisted = {
name = "persisted";
pkg = pkgs.vimPlugins.persisted-nvim;
dependencies = [telescope];
lazy = true;
cmd = ["SessionSave" "SessionDelete" "Telescope persisted"];
config = ''
function(_, opts)
require("persisted").setup(opts)
require("telescope").load_extension("persisted")
end
'';
opts = {
silent = false;
use_git_branch = false;
autosave = false;
autoload = false;
follow_cwd = true;
ignored_dirs = [
"/"
"~/"
"~/Projects/"
];
};
};
direnv = { direnv = {
name = "direnv"; name = "direnv";
pkg = pkgs.vimPlugins.direnv-vim; pkg = pkgs.vimPlugins.direnv-vim;
@ -627,7 +580,6 @@ in {
filetypesDenylist = [ filetypesDenylist = [
"DressingSelect" "DressingSelect"
"Outline" "Outline"
"TelescopePrompt"
"alpha" "alpha"
"harpoon" "harpoon"
"toggleterm" "toggleterm"
@ -1004,7 +956,7 @@ in {
} }
''; '';
in { in {
extensions = ["fzf" "lazy" "neo-tree" "oil" "quickfix" "toggleterm" "trouble"]; extensions = ["fzf" "lazy" "quickfix" "toggleterm" "trouble"];
options = { options = {
# theme = "catppuccin"; # theme = "catppuccin";
@ -1256,6 +1208,28 @@ in {
}; };
}; };
# TODO: Don't autosave, but if a session exists, update it (using should_save)
# TODO: No idea which opts below really exist...
persisted = rec {
name = "persisted";
pkg = pkgs.vimPlugins.persisted-nvim;
lazy = false;
config = mkDefaultConfig name;
opts = {
silent = false;
use_git_branch = false;
autostart = false;
autosave = false;
autoload = false;
follow_cwd = true;
ignored_dirs = [
"/"
"~/"
"~/Projects/"
];
};
};
presence = rec { presence = rec {
name = "presence"; name = "presence";
pkg = pkgs.vimPlugins.presence-nvim; pkg = pkgs.vimPlugins.presence-nvim;
@ -1349,7 +1323,6 @@ in {
pkg = pkgs.vimPlugins.snacks-nvim; pkg = pkgs.vimPlugins.snacks-nvim;
dependencies = [ dependencies = [
web-devicons web-devicons
_persisted
]; ];
lazy = false; lazy = false;
priority = 1000; priority = 1000;
@ -1396,7 +1369,7 @@ in {
icon = " "; icon = " ";
key = "s"; key = "s";
desc = "Restore Session"; desc = "Restore Session";
action = "<cmd>Telescope persisted<cr>"; action = "<cmd>lua require('persisted').select()<cr>";
} }
{ {
icon = "󰒲 "; icon = "󰒲 ";
@ -1428,6 +1401,27 @@ in {
enabled = true; enabled = true;
replace_netrw = true; replace_netrw = true;
}; };
picker = let
defaultLayout = ''
--- Use the default layout or vertical if the window is too narrow
function()
return vim.o.columns >= 120 and "default" or "vertical"
end
'';
in {
enabled = true;
layout = {
cycle = true;
preset.__raw = defaultLayout;
};
sources = {
lines = {
layout.__raw = defaultLayout;
};
};
};
}; };
}; };
@ -1483,98 +1477,11 @@ in {
}; };
_plenary = { _plenary = {
name = "plenary"; # For telescope name = "plenary";
pkg = pkgs.vimPlugins.plenary-nvim; pkg = pkgs.vimPlugins.plenary-nvim;
lazy = true; lazy = true;
}; };
_telescope-fzf-native = {
name = "telescope-fzf-native";
pkg = pkgs.vimPlugins.telescope-fzf-native-nvim;
lazy = true;
};
# TODO: Build broken
# _telescope-tabs = {
# name = "telescope-tabs";
# pkg = pkgs.vimUtils.buildVimPlugin {
# name = "telescope-tabs";
# src = pkgs.fetchFromGitHub {
# owner = "LukasPietzschmann";
# repo = "telescope-tabs";
# rev = "0a678eefcb71ebe5cb0876aa71dd2e2583d27fd3";
# sha256 = "sha256-IvxZVHPtApnzUXIQzklT2C2kAxgtAkBUq3GNxwgPdPY=";
# };
# };
# lazy = true;
# };
_telescope-undo = {
name = "telescope-undo";
pkg = pkgs.vimPlugins.telescope-undo-nvim;
lazy = true;
};
_telescope-ui-select = {
name = "telescope-ui-select";
pkg = pkgs.vimPlugins.telescope-ui-select-nvim;
lazy = true;
};
telescope = {
name = "telescope";
pkg = pkgs.vimPlugins.telescope-nvim;
lazy = true;
cmd = ["Telescope"];
dependencies = [
_plenary
_telescope-fzf-native
# _telescope-tabs
_telescope-undo
_telescope-ui-select
];
config = let
extensions = mylib.generators.toLuaObject [
"undo"
"ui-select"
"fzf"
# "telescope-tabs"
];
in ''
function(_, opts)
local telescope = require("telescope")
telescope.setup(opts)
for i, extension in ipairs(${extensions}) do
telescope.load_extension(extension)
end
end
'';
opts = {
defaults = {
wrap_results = false; # Do wrapping in the preview instead, see autoCmd
preview = {
treesitter = true;
};
mappings = {
i = {
# TODO: This mappings throws an error.
# Doesn't matter if defined as function or like "<C-h"> = "which_key";.
"<C-h>" = {__raw = ''function(...) return require("telescope.actions").which_key(...) end'';};
"<Esc>" = {__raw = ''function(...) return require("telescope.actions").close(...) end'';};
};
};
};
pickers = {
buffers = {
# See :h telescope.builtin.buffers() for opts
ignore_current_buffer = true;
sort_mru = true;
};
};
};
};
todo-comments = rec { todo-comments = rec {
name = "todo-comments"; name = "todo-comments";
pkg = pkgs.vimPlugins.todo-comments-nvim; pkg = pkgs.vimPlugins.todo-comments-nvim;
@ -1975,6 +1882,7 @@ in {
# overseer # Run tasks from within neovim (e.g. cargo) # TODO: # overseer # Run tasks from within neovim (e.g. cargo) # TODO:
persisted # Session management
presence # Discord rich presence presence # Discord rich presence
quickfix-reflector # Make the quickfix list editable and saveable to apply changes quickfix-reflector # Make the quickfix list editable and saveable to apply changes
rainbow-delimiters # Bracket/Paren colorization rainbow-delimiters # Bracket/Paren colorization
@ -1985,7 +1893,6 @@ in {
snacks # Lots of QoL snacks # Lots of QoL
tabby # Nicer tabline (only showing tabpages) tabby # Nicer tabline (only showing tabpages)
telescope # Option picker frontend
todo-comments # Highlight TODOs todo-comments # Highlight TODOs
toggleterm # Integrated terminal toggleterm # Integrated terminal
treesitter # AST based syntax highlighting + indentation treesitter # AST based syntax highlighting + indentation

View File

@ -1,4 +1,4 @@
{...}: let _: let
# TODO: Doesn't work reliably. I think they are rebound by plugins after? Try setting in extraConfigLuaPost... # TODO: Doesn't work reliably. I think they are rebound by plugins after? Try setting in extraConfigLuaPost...
disabled-mappings = let disabled-mappings = let
mkDisabledMapping = mapping: { mkDisabledMapping = mapping: {
@ -268,14 +268,8 @@
{ {
mode = "n"; mode = "n";
key = "/"; key = "/";
action = "<cmd>Telescope current_buffer_fuzzy_find<cr>"; action = "<cmd>lua Snacks.picker.lines()<cr>";
options.desc = "Grep Buffer"; options.desc = "Find in Buffer";
}
{
mode = "v";
key = "?";
action = "<cmd>Telescope grep_string<cr>";
options.desc = "Find Selection";
} }
{ {
mode = "n"; mode = "n";
@ -310,46 +304,52 @@
action = "<cmd>Navbuddy<cr>"; action = "<cmd>Navbuddy<cr>";
options.desc = "Toggle NavBuddy"; options.desc = "Toggle NavBuddy";
} }
{
mode = "n";
key = "<leader>p";
action = "<cmd>lua Snacks.picker.pickers()<cr>";
options.desc = "Show Pickers";
}
{ {
mode = "n"; mode = "n";
key = "<leader>N"; key = "<leader>N";
action = "<cmd>Telescope notify<cr>"; action = "<cmd>lua Snacks.picker.notifications()<cr>";
options.desc = "Telescope Notify"; options.desc = "Notifications Picker";
} }
{ {
mode = "n"; mode = "n";
key = "<leader>r"; key = "<leader>r";
action = "<cmd>Telescope resume<cr>"; action = "<cmd>lua Snacks.picker.resume()<cr>";
options.desc = "Last Telescope"; options.desc = "Last Picker";
}
{
mode = "n";
key = "<leader>;";
action = "<cmd>lua Snacks.picker.command_history()<cr>";
options.desc = "Command History";
} }
# {
# mode = "n";
# key = "<leader>;";
# action = "<cmd>Telescope command_history<cr>";
# options.desc = "Last Commands";
# }
{ {
mode = "n"; mode = "n";
key = "<leader>:"; key = "<leader>:";
action = "<cmd>Telescope commands<cr>"; action = "<cmd>lua Snacks.picker.commands()<cr>";
options.desc = "Telescope Command"; options.desc = "Commands Picker";
}
{
mode = "n";
key = "<leader>M";
action = "<cmd>Telescope marks<cr>";
options.desc = "Telescope Marks";
} }
# { # {
# mode = "n"; # mode = "n";
# key = "<leader>M";
# action = "<cmd>lua Snacks.picker.marks()<cr>";
# options.desc = "Marks Picker";
# }
# {
# mode = "n";
# key = "<leader>J"; # key = "<leader>J";
# action = "<cmd>Telescope jumplist<cr>"; # action = "<cmd>lua Snacks.picker.jumps()<cr>";
# options.desc = "Telescope Jumps"; # options.desc = "Jumps Picker";
# } # }
{ {
mode = "n"; mode = "n";
key = "<leader>d"; key = "<leader>d";
action = "<cmd>TodoTelescope<cr>"; action = "<cmd>lua Snacks.picker.todo_comments()<cr>";
options.desc = "List TODOs"; options.desc = "List TODOs";
} }
{ {
@ -361,13 +361,13 @@
{ {
mode = "n"; mode = "n";
key = "<leader>/"; key = "<leader>/";
action = "<cmd>Telescope live_grep<cr>"; action = "<cmd>lua Snacks.picker.grep()<cr>";
options.desc = "Find in Project"; options.desc = "Find in Project";
} }
{ {
mode = "n"; mode = "n";
key = "<leader>Q"; key = "<leader>Q";
action = "<cmd>Telescope quickfixhistory<cr>"; action = "<cmd>lua Snacks.picker.qflist()<cr>";
options.desc = "Quickfix History"; options.desc = "Quickfix History";
} }
# { # {
@ -393,13 +393,13 @@
{ {
mode = "n"; mode = "n";
key = "<leader>ff"; key = "<leader>ff";
action = "<cmd>Telescope find_files<cr>"; action = "<cmd>lua Snacks.picker.files()<cr>";
options.desc = "Find File"; options.desc = "Find File";
} }
{ {
mode = "n"; mode = "n";
key = "<leader>fl"; key = "<leader>fl";
action = "<cmd>Telescope oldfiles<cr>"; action = "<cmd>lua Snacks.picker.recent()<cr>";
options.desc = "Last Files"; options.desc = "Last Files";
} }
{ {
@ -417,8 +417,8 @@
{ {
mode = "n"; mode = "n";
key = "<leader>fu"; key = "<leader>fu";
action = "<cmd>Telescope undo<cr>"; action = "<cmd>lua Snacks.picker.und()<cr>";
options.desc = "Telescope Undo"; options.desc = "Undo Picker";
} }
{ {
mode = "n"; mode = "n";
@ -445,29 +445,29 @@
key = "<leader>h"; key = "<leader>h";
action = "+help"; action = "+help";
} }
{ # {
mode = "n"; # mode = "n";
key = "<leader>hv"; # key = "<leader>hv";
action = "<cmd>Telescope vim_options<cr>"; # action = "<cmd>Telescope vim_options<cr>";
options.desc = "Telescope Vimopts"; # options.desc = "Telescope Vimopts";
} # }
{ {
mode = "n"; mode = "n";
key = "<leader>hk"; key = "<leader>hk";
action = "<cmd>Telescope keymaps<cr>"; action = "<cmd>lua Snacks.picker.keymaps()<cr>";
options.desc = "Telescope Keys"; options.desc = "Keymaps Picker";
} }
{ {
mode = "n"; mode = "n";
key = "<leader>hm"; key = "<leader>hm";
action = "<cmd>Telescope man_pages<cr>"; action = "<cmd>lua Snacks.picker.man()<cr>";
options.desc = "Telescope Manpages"; options.desc = "Manpages Picker";
} }
{ {
mode = "n"; mode = "n";
key = "<leader>hh"; key = "<leader>hh";
action = "<cmd>Telescope help_tags<cr>"; action = "<cmd>lua Snacks.picker.help()<cr>";
options.desc = "Telescope Helptags"; options.desc = "Helptags Picker";
} }
]; ];
@ -500,7 +500,7 @@
{ {
mode = "n"; mode = "n";
key = "<leader>sl"; key = "<leader>sl";
action = "<cmd>Telescope persisted<cr>"; action = "<cmd>lua require('persisted').select()<cr>";
options.desc = "Restore Session"; options.desc = "Restore Session";
} }
{ {
@ -526,14 +526,14 @@
{ {
mode = "n"; mode = "n";
key = "<leader>bb"; key = "<leader>bb";
action = "<cmd>Telescope buffers<cr>"; action = "<cmd>lua Snacks.picker.buffers()<cr>";
options.desc = "List Buffers"; options.desc = "Buffers Picker";
} }
{ {
mode = "n"; mode = "n";
key = "<leader><Space>"; key = "<leader><Space>";
action = "<cmd>Telescope buffers<cr>"; action = "<cmd>lua Snacks.picker.buffers()<cr>";
options.desc = "List Buffers"; options.desc = "Buffers Picker";
} }
{ {
mode = "n"; mode = "n";
@ -567,18 +567,18 @@
key = "<leader>t"; key = "<leader>t";
action = "+tab"; action = "+tab";
} }
{ # {
mode = "n"; # mode = "n";
key = "<leader>tt"; # key = "<leader>tt";
action = "<cmd>Telescope telescope-tabs list_tabs<cr>"; # action = "<cmd>Telescope telescope-tabs list_tabs<cr>";
options.desc = "List Tabpages"; # options.desc = "List Tabpages";
} # }
{ # {
mode = "n"; # mode = "n";
key = "<leader><C-Space>"; # key = "<leader><C-Space>";
action = "<cmd>Telescope telescope-tabs list_tabs<cr>"; # action = "<cmd>Telescope telescope-tabs list_tabs<cr>";
options.desc = "List Tabpages"; # options.desc = "List Tabpages";
} # }
{ {
mode = "n"; mode = "n";
key = "<leader>tn"; key = "<leader>tn";
@ -697,25 +697,25 @@
{ {
mode = "n"; mode = "n";
key = "<leader>gs"; key = "<leader>gs";
action = "<cmd>Telescope git_status<cr>"; action = "<cmd>lua Snacks.picker.git_status()<cr>";
options.desc = "Git Status"; options.desc = "Git Status";
} }
{ {
mode = "n"; mode = "n";
key = "<leader>gl"; key = "<leader>gl";
action = "<cmd>Telescope git_commits<cr>"; action = "<cmd>lua Snacks.picker.git_log()<cr>";
options.desc = "Git Log"; options.desc = "Git Log";
} }
{ {
mode = "n"; mode = "n";
key = "<leader>gb"; key = "<leader>gb";
action = "<cmd>Telescope git_branches<cr>"; action = "<cmd>lua Snacks.picker.git_branches()<cr>";
options.desc = "Git Branches"; options.desc = "Git Branches";
} }
{ {
mode = "n"; mode = "n";
key = "<leader>gf"; key = "<leader>gf";
action = "<cmd>Telescope git_bcommits<cr>"; action = "<cmd>lua Snacks.picker.git_log_file()<cr>";
options.desc = "Git File History"; options.desc = "Git File History";
} }
{ {
@ -748,7 +748,7 @@
{ {
mode = "n"; mode = "n";
key = "<leader>cD"; key = "<leader>cD";
action = "<cmd>Telescope diagnostics<cr>"; action = "<cmd>lua Snacks.picker.diagnostics()<cr>";
options.desc = "List Diagnostics"; options.desc = "List Diagnostics";
} }
@ -764,18 +764,18 @@
action = "<cmd>lua vim.lsp.buf.code_action()<cr>"; action = "<cmd>lua vim.lsp.buf.code_action()<cr>";
options.desc = "Code Actions"; options.desc = "Code Actions";
} }
{ # {
mode = "n"; # mode = "n";
key = "<leader>cI"; # key = "<leader>cI";
action = "<cmd>Telescope lsp_incoming_calls<cr>"; # action = "<cmd>Telescope lsp_incoming_calls<cr>";
options.desc = "LSP Incoming Calls"; # options.desc = "LSP Incoming Calls";
} # }
{ # {
mode = "n"; # mode = "n";
key = "<leader>cO"; # key = "<leader>cO";
action = "<cmd>Telescope lsp_outgoing_calls<cr>"; # action = "<cmd>Telescope lsp_outgoing_calls<cr>";
options.desc = "LSP Outgoing Calls"; # options.desc = "LSP Outgoing Calls";
} # }
{ {
mode = "n"; mode = "n";
key = "<leader>cC"; key = "<leader>cC";
@ -835,26 +835,26 @@
{ {
mode = "n"; mode = "n";
key = "<leader>cgr"; key = "<leader>cgr";
action = "<cmd>Telescope lsp_references<cr>"; action = "<cmd>lua Snacks.picker.lsp_references()<cr>";
options.desc = "LSP References"; options.desc = "LSP References";
} }
{ {
mode = "n"; mode = "n";
key = "<leader>cgd"; key = "<leader>cgd";
action = "<cmd>Telescope lsp_definitions<cr>"; action = "<cmd>lua Snacks.picker.lsp_definitions()<cr>";
options.desc = "LSP Definition"; options.desc = "LSP Definitions";
} }
{ {
mode = "n"; mode = "n";
key = "<leader>cgi"; key = "<leader>cgi";
action = "<cmd>Telescope lsp_implementations<cr>"; action = "<cmd>lua Snacks.picker.lsp_implementations()<cr>";
options.desc = "LSP Implementation"; options.desc = "LSP Implementations";
} }
{ {
mode = "n"; mode = "n";
key = "<leader>cgt"; key = "<leader>cgt";
action = "<cmd>Telescope lsp_type_definitions<cr>"; action = "<cmd>lua Snacks.picker.lsp_type_definitions()<cr>";
options.desc = "LSP Type Definition"; options.desc = "LSP Type Definitions";
} }
{ {
mode = "n"; mode = "n";