mirror of
https://github.com/nmasur/dotfiles
synced 2025-02-07 19:12:03 +00:00
101 lines
2.6 KiB
Nix
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";
|
|
};
|
|
|
|
};
|
|
}
|