dotfiles/modules/shell/fish.nix

150 lines
4.2 KiB
Nix
Raw Normal View History

2022-05-06 13:29:25 +00:00
{ config, pkgs, lib, ... }: {
users.users.${config.user}.shell = pkgs.fish;
2022-04-29 01:56:21 +00:00
home-manager.users.${config.user} = {
2022-04-30 15:08:16 +00:00
2022-05-06 13:29:25 +00:00
home.packages = with pkgs; [ exa fd bat ripgrep curl ];
2022-04-30 15:08:16 +00:00
programs.fish = {
enable = true;
2022-04-30 14:21:43 +00:00
functions = {
commandline-git-commits = {
description = "Insert commit into commandline";
body = builtins.readFile
../../fish.configlink/functions/commandline-git-commits.fish;
};
copy = {
description = "Copy file contents into clipboard";
body = "cat $argv | pbcopy"; # Need to fix for non-macOS
};
edit = {
description = "Open a file in Vim";
body = builtins.readFile ../../fish.configlink/functions/edit.fish;
};
envs = {
description = "Evaluate a bash-like environment variables file";
body = ''set -gx (cat $argv | tr "=" " " | string split ' ')'';
};
fcd = {
description = "Jump to directory";
argumentNames = "directory";
body = builtins.readFile ../../fish.configlink/functions/fcd.fish;
};
fish_user_key_bindings = {
body = builtins.readFile
../../fish.configlink/functions/fish_user_key_bindings.fish;
};
ip = {
body = builtins.readFile ../../fish.configlink/functions/ip.fish;
};
json = {
description = "Tidy up JSON using jq";
body = "pbpaste | jq '.' | pbcopy"; # Need to fix for non-macOS
};
2022-04-30 15:08:16 +00:00
ls = { body = "exa $argv"; };
2022-04-30 14:21:43 +00:00
note = {
description = "Edit or create a note";
argumentNames = "filename";
body = builtins.readFile ../../fish.configlink/functions/note.fish;
};
recent = {
description = "Open a recent file in Vim";
body = builtins.readFile ../../fish.configlink/functions/recent.fish;
};
syncnotes = {
description = "Full git commit on notes";
body =
builtins.readFile ../../fish.configlink/functions/syncnotes.fish;
};
};
2022-04-30 15:08:16 +00:00
interactiveShellInit = ''
bind yy fish_clipboard_copy
bind Y fish_clipboard_copy
bind -M visual y fish_clipboard_copy
bind p fish_clipboard_paste
set -g fish_vi_force_cursor
set -g fish_cursor_default block
set -g fish_cursor_insert line
set -g fish_cursor_visual block
set -g fish_cursor_replace_one underscore
'';
loginShellInit = "";
2022-04-30 15:08:16 +00:00
shellAliases = { };
shellAbbrs = {
# Directory aliases
2022-05-06 12:58:44 +00:00
l = "ls -lh";
lh = "ls -lh";
ll = "ls -alhF";
la = "ls -a";
c = "cd";
"-" = "cd -";
mkd = "mkdir -pv";
# System
s = "sudo";
sc = "systemctl";
scs = "systemctl status";
2022-05-06 13:29:25 +00:00
m = "make";
# Tmux
ta = "tmux attach-session";
tan = "tmux attach-session -t noah";
tnn = "tmux new-session -s noah";
# Vim
v = "vim";
vl = "vim -c 'normal! `0'";
# Notes
sn = "syncnotes";
# Fun CLI Tools
weather = "curl wttr.in/$WEATHER_CITY";
moon = "curl wttr.in/Moon";
# Cheat Sheets
ssl =
"openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr";
fingerprint = "ssh-keyscan myhost.com | ssh-keygen -lf -";
publickey = "ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub";
forloop = "for i in (seq 1 100)";
# Docker
dc = "$DOTS/bin/docker_cleanup";
dr = "docker run --rm -it";
db = "docker build . -t";
# Terraform
te = "terraform";
# Kubernetes
k = "kubectl";
pods = "kubectl get pods -A";
nodes = "kubectl get nodes";
deploys = "kubectl get deployments -A";
dash = "kube-dashboard";
ks = "k9s";
# Python
py = "python";
po = "poetry";
pr = "poetry run python";
# Rust
ca = "cargo";
};
shellInit = "";
2022-04-28 22:55:15 +00:00
};
2022-05-06 13:29:25 +00:00
home.sessionVariables.fish_greeting = "";
2022-04-28 23:11:33 +00:00
2022-05-06 13:29:25 +00:00
programs.starship.enableFishIntegration = true;
programs.zoxide.enableFishIntegration = true;
programs.fzf.enableFishIntegration = true;
2022-04-30 15:08:16 +00:00
2022-04-28 23:11:33 +00:00
};
2022-04-28 22:55:15 +00:00
}