dotfiles/modules/common/shell/fish/default.nix

159 lines
4.7 KiB
Nix
Raw Normal View History

2024-04-20 13:42:06 +00:00
{
config,
pkgs,
lib,
...
}:
{
users.users.${config.user}.shell = pkgs.fish;
2023-08-06 11:30:36 +00:00
programs.fish.enable = true; # Needed for LightDM to remember username
2022-04-29 01:56:21 +00:00
home-manager.users.${config.user} = {
2022-04-30 15:08:16 +00:00
2022-05-29 17:44:45 +00:00
# Packages used in abbreviations and aliases
home.packages = with pkgs; [ curl ];
2022-04-30 15:08:16 +00:00
programs.fish = {
enable = true;
2023-03-06 04:04:06 +00:00
shellAliases = {
2023-08-01 12:14:06 +00:00
# Version of bash which works much better on the terminal
2023-06-02 02:54:25 +00:00
bash = "${pkgs.bashInteractive}/bin/bash";
2023-08-01 12:14:06 +00:00
# Use eza (exa) instead of ls for fancier output
ls = "${pkgs.eza}/bin/eza --group";
2023-08-01 12:14:06 +00:00
# Move files to XDG trash on the commandline
2023-03-06 04:04:06 +00:00
trash = lib.mkIf pkgs.stdenv.isLinux "${pkgs.trash-cli}/bin/trash-put";
};
2022-04-30 14:21:43 +00:00
functions = {
commandline-git-commits = {
description = "Insert commit into commandline";
2022-05-06 13:44:21 +00:00
body = builtins.readFile ./functions/commandline-git-commits.fish;
2022-04-30 14:21:43 +00:00
};
copy = {
description = "Copy file contents into clipboard";
body = "cat $argv | pbcopy"; # Need to fix for non-macOS
};
edit = {
description = "Open a file in Vim";
2022-05-06 13:44:21 +00:00
body = builtins.readFile ./functions/edit.fish;
2022-04-30 14:21:43 +00:00
};
envs = {
description = "Evaluate a bash-like environment variables file";
body = ''set -gx (cat $argv | tr "=" " " | string split ' ')'';
};
fcd = {
description = "Jump to directory";
argumentNames = "directory";
2022-05-06 13:44:21 +00:00
body = builtins.readFile ./functions/fcd.fish;
2022-04-30 14:21:43 +00:00
};
fish_user_key_bindings = {
2022-05-06 13:44:21 +00:00
body = builtins.readFile ./functions/fish_user_key_bindings.fish;
2022-04-30 14:21:43 +00:00
};
2024-04-20 13:42:06 +00:00
ip = {
body = builtins.readFile ./functions/ip.fish;
};
2022-04-30 14:21:43 +00:00
json = {
description = "Tidy up JSON using jq";
body = "pbpaste | jq '.' | pbcopy"; # Need to fix for non-macOS
};
jqr = {
description = "jq repl for constructing jq syntax";
body = "echo '' | fzf --query '.' --print-query --preview \"jq {q} < $argv\"";
};
2022-04-30 14:21:43 +00:00
note = {
description = "Edit or create a note";
argumentNames = "filename";
2022-05-06 13:44:21 +00:00
body = builtins.readFile ./functions/note.fish;
2022-04-30 14:21:43 +00:00
};
recent = {
description = "Open a recent file in Vim";
2022-05-06 13:44:21 +00:00
body = builtins.readFile ./functions/recent.fish;
2022-04-30 14:21:43 +00:00
};
2022-06-20 19:20:20 +00:00
search-and-edit = {
description = "Search and open the relevant file in Vim";
body = builtins.readFile ./functions/search-and-edit.fish;
};
2022-04-30 14:21:43 +00:00
syncnotes = {
description = "Full git commit on notes";
2022-05-06 13:44:21 +00:00
body = builtins.readFile ./functions/syncnotes.fish;
2022-04-30 14:21:43 +00:00
};
2024-09-25 20:43:48 +00:00
_which = {
description = "Identify the path to a program in the shell";
body = "command --search (string sub --start=2 $argv)";
};
2022-04-30 14:21:43 +00:00
};
2022-04-30 15:08:16 +00:00
interactiveShellInit = ''
2022-06-19 13:34:17 +00:00
fish_vi_key_bindings
2022-04-30 15:08:16 +00:00
bind yy fish_clipboard_copy
bind Y fish_clipboard_copy
bind -M visual y fish_clipboard_copy
2022-06-18 19:45:51 +00:00
bind -M default p fish_clipboard_paste
2022-04-30 15:08:16 +00:00
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 = "";
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";
2024-09-25 20:43:48 +00:00
# Convert a program into its full path
"=" = {
position = "anywhere";
regex = "=\\w+";
function = "_which";
};
# System
s = "sudo";
sc = "systemctl";
scs = "systemctl status";
2024-08-18 23:35:30 +00:00
sca = "systemctl cat";
2022-05-06 13:29:25 +00:00
m = "make";
2023-03-06 04:04:06 +00:00
t = "trash";
2022-05-29 17:44:45 +00:00
# Vim (overwritten by Neovim)
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
2024-04-20 13:42:06 +00:00
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";
};
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-28 23:11:33 +00:00
};
2022-04-28 22:55:15 +00:00
}