2023-12-02 00:46:56 +01:00
|
|
|
{ pkgs, config, lib, ... }:
|
2024-02-09 20:15:32 +01:00
|
|
|
let
|
|
|
|
repaint = "commandline -f repaint";
|
|
|
|
fishKeybinds = {
|
|
|
|
# C-x to clear screen
|
|
|
|
"\\cx" = "clear && ${repaint}";
|
|
|
|
# C-z to return to background process
|
|
|
|
"\\cz" = "fg && ${repaint}";
|
|
|
|
# C-y to yank current command
|
|
|
|
"\\cy" = "wl-copy \$(commandline)";
|
|
|
|
# C-e to launch $EDITOR
|
|
|
|
"\\ce" = "$EDITOR";
|
|
|
|
# C-S-e to edit commandline using $EDITOR
|
|
|
|
"\\e\\[69\\;5u" = "edit_command_buffer";
|
|
|
|
# C-enter to run command through a pager
|
|
|
|
"\\e\\[13\\;2u" = "commandline -a ' | $PAGER' && commandline -f execute";
|
2024-02-25 05:51:41 +01:00
|
|
|
# C-g to open lazygit
|
|
|
|
"\\cg" = "lazygit";
|
2024-07-06 19:32:14 +02:00
|
|
|
# C-S-f to open mini.files
|
|
|
|
"\\e\\[70\\;5u" = ''nvim +":lua require('mini.files').open()"'';
|
2024-02-09 20:15:32 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
mkKeybind = key: value:
|
|
|
|
let escaped = lib.escapeShellArg value;
|
|
|
|
in
|
|
|
|
''
|
|
|
|
bind -M default ${key} ${escaped}
|
|
|
|
bind -M insert ${key} ${escaped}
|
|
|
|
'';
|
|
|
|
in
|
2023-02-10 00:11:54 +01:00
|
|
|
{
|
2023-12-07 22:35:57 +01:00
|
|
|
# {{{ Fzf
|
|
|
|
programs.fzf = {
|
|
|
|
enable = true;
|
|
|
|
defaultOptions = [ "--no-scrollbar" ];
|
|
|
|
|
|
|
|
changeDirWidgetOptions = [
|
|
|
|
"--preview '${lib.getExe pkgs.eza} --icons --tree --color=always {}'"
|
|
|
|
];
|
|
|
|
|
|
|
|
fileWidgetOptions = [
|
|
|
|
"--preview '${lib.getExe pkgs.bat} --number --color=always {}'"
|
|
|
|
];
|
|
|
|
};
|
|
|
|
|
|
|
|
stylix.targets.fzf.enable = true;
|
|
|
|
# }}}
|
|
|
|
# {{{ Fish
|
2023-02-10 00:11:54 +01:00
|
|
|
programs.fish = {
|
|
|
|
enable = true;
|
2023-12-10 19:45:28 +01:00
|
|
|
interactiveShellInit = ''
|
2024-02-09 20:15:32 +01:00
|
|
|
# ❄️ Fish keybinds generated using nix ^~^
|
|
|
|
function fish_nix_key_bindings
|
|
|
|
${lib.concatStringsSep "\n" (lib.mapAttrsToList mkKeybind fishKeybinds)}
|
|
|
|
end
|
|
|
|
|
2023-12-10 19:45:28 +01:00
|
|
|
${builtins.readFile ./config.fish}
|
|
|
|
|
|
|
|
# Modify nix-shell to use `fish` as it's default shell
|
|
|
|
${lib.getExe pkgs.nix-your-shell} fish | source
|
|
|
|
'';
|
2023-02-10 00:11:54 +01:00
|
|
|
|
2023-12-07 22:35:57 +01:00
|
|
|
# {{{ Plugins
|
2023-12-02 00:46:56 +01:00
|
|
|
plugins =
|
|
|
|
let
|
|
|
|
plugins = with pkgs.fishPlugins; [
|
|
|
|
z # Jump to directories by typing "z <directory-name>"
|
|
|
|
grc # Adds color to a bunch of built in commands
|
|
|
|
done # Trigger a notification when long commands finish execution
|
|
|
|
puffer # Text expansion (i.e. expanding .... to ../../../)
|
|
|
|
sponge # Remove failed commands and whatnot from history
|
|
|
|
forgit # Git tui thingy? (I'm still trying this one out)
|
|
|
|
colored-man-pages # Self explainatory:)
|
|
|
|
];
|
|
|
|
in
|
|
|
|
# For some reason home-manager expects a slightly different format 🤔
|
|
|
|
lib.forEach plugins
|
|
|
|
(plugin: {
|
|
|
|
name = plugin.pname;
|
|
|
|
inherit (plugin) src;
|
|
|
|
});
|
2023-12-07 22:35:57 +01:00
|
|
|
# }}}
|
2023-02-10 00:11:54 +01:00
|
|
|
};
|
2023-11-04 20:18:14 +01:00
|
|
|
|
2023-12-10 23:53:19 +01:00
|
|
|
# I sometimes get errors about `grc` being missing, so I gave up and added it here.
|
|
|
|
home.packages = [ pkgs.grc ];
|
|
|
|
|
2023-11-04 20:18:14 +01:00
|
|
|
satellite.persistence.at.state.apps.fish.directories = [
|
|
|
|
"${config.xdg.dataHome}/fish"
|
2024-02-25 06:34:40 +01:00
|
|
|
"${config.xdg.dataHome}/z" # The z fish plugin requires this
|
2023-11-04 20:18:14 +01:00
|
|
|
];
|
2023-12-07 22:35:57 +01:00
|
|
|
# }}}
|
2023-02-10 00:11:54 +01:00
|
|
|
}
|