2025-02-02 21:45:34 -05:00

101 lines
2.6 KiB
Nix

{
config,
pkgs,
lib,
...
}:
let
cfg = config.nmasur.presets.programs.fzf;
in
{
options.nmasur.presets.programs.fzf.enable = lib.mkEnableOption "Fzf fuzzy finder";
config = lib.mkIf cfg.enable {
programs.fzf = {
enable = true;
enableFishIntegration = true;
enableBashIntegration = true;
};
programs.fish = {
functions = {
edit = {
description = "Open a file in Vim";
body = builtins.readFile ./fish/edit.fish;
};
fcd = {
description = "Jump to directory";
argumentNames = "directory";
body = builtins.readFile ./fish/fcd.fish;
};
projects = {
description = "Jump to a project";
body = # fish
''
set projdir ( \
fd \
--search-path $HOME/dev \
--type directory \
--exact-depth 2 \
| ${lib.getExe pkgs.proximity-sort} $PWD \
| sed 's/\\/$//' \
| fzf --tiebreak=index \
)
and cd $projdir
and commandline -f execute
'';
};
recent = {
description = "Open a recent file in Vim";
body = builtins.readFile ./edit/recent.fish;
};
search-and-edit = {
description = "Search and open the relevant file in Vim";
body = builtins.readFile ./edit/search-and-edit.fish;
};
};
shellAbbrs = {
lsf = "ls -lh | fzf";
};
};
config.nmasur.presets.programs.fish.fish_user_key_bindings = # fish
''
# Ctrl-o
bind -M insert \co edit
bind -M default \co edit
# Ctrl-s
bind -M insert \cs search-and-edit
bind -M default \cs search-and-edit
# Ctrl-a
bind -M insert \ca 'cd ~; and edit; and commandline -a "; cd -"; commandline -f execute'
bind -M default \ca 'cd ~; and edit; and commandline -a "; cd -"; commandline -f execute'
# Ctrl-e
bind -M insert \ce recent
bind -M default \ce recent
# Ctrl-f
bind -M insert \cf fcd
bind -M default \cf fcd
# Ctrl-p
bind -M insert \cp projects
bind -M default \cp projects
'';
# Global fzf configuration
home.sessionVariables =
let
fzfCommand = "${lib.getExe pkgs.fd} --type file";
in
{
FZF_DEFAULT_COMMAND = fzfCommand;
FZF_CTRL_T_COMMAND = fzfCommand;
FZF_DEFAULT_OPTS = "-m --height 50% --border";
};
};
}