dotfiles/modules/cli/fish.nix

78 lines
2.4 KiB
Nix

{ config, lib, pkgs, inputs, ... }:
{
users.users.moritz.shell = pkgs.fish;
# needed for nix completions
programs.fish.enable = true;
home-manager.users.moritz = {
programs = {
fish = {
enable = true;
shellAbbrs = {
us = "systemctl --user";
rs = "doas systemctl";
ga = "git add";
gb = "git branch";
gc = "git commit";
gco = "git checkout";
gd = "git diff";
gds = "git diff --staged";
gp = "git push";
gs = "git status";
};
shellAliases = {
du = "dust";
ls = "exa -lh --icons --git";
cat = "bat";
feh = "feh --auto-zoom --scale-down";
grep = "rg";
ssh = "TERM=xterm-color command ssh";
nix-switch = "doas nixos-rebuild switch --flake ~/.dotfiles";
nix-boot = "doas nixos-rebuild boot --flake ~/.dotfiles";
nix-lock =
"doas nixos-rebuild dry-activate --flake ~/.dotfiles --recreate-lock-file";
};
shellInit = ''
fzf_configure_bindings --git_log=\cg
# Vi Mode
fish_vi_key_bindings
# Emulates vim's cursor shape behavior
# Set the normal and visual mode cursors to a block
set fish_cursor_default block
# Set the insert mode cursor to a line
set fish_cursor_insert line
# Set the replace mode cursor to an underscore
set fish_cursor_replace_one underscore
# The following variable can be used to configure cursor shape in
# visual mode, but due to fish_cursor_default, is redundant here
set fish_cursor_visual block
'';
functions = {
gi = ''
set url https://www.gitignore.io/api
if test (count $argv) -ne 1
set list (curl -sL $url/list | string split ",")
set choice (string split " " $list | fzf -m --preview "curl -sL $url/{}" | string join ",")
else
set choice $argv[1]
end
curl -sL $url/$choice > .gitignore
'';
fish_greeting = "";
cheat = "cht.sh $argv | bat -p";
};
plugins = [{
name = "dracula";
src = inputs.dracula-fish;
}];
};
};
home.packages = with pkgs.fishPlugins; [ fzf-fish pisces ];
};
}