{ config, pkgs, lib, ... }: let inherit (config.my) accent editor desktop; in { config = { programs.fish = { enable = true; shellInit = '' set -U __accent_color "${accent.color}" ''; interactiveShellInit = '' set -U fish_features stderr-nocaret qmark-noglob regex-easyesc ampersand-nobg-in-token set_color red if not test -d "$PASSWORD_STORE_DIR" echo "Password Store not yet setup" end if not test -f "$HOME/.ssh/id_rsa" echo "SSH keys not yet setup" end if command -qs rustup &> /dev/null if not command -qs rustc; or not rustc --version &> /dev/null rustup default stable &>/dev/null & end end set_color normal bind \cy 'commandline | wl-copy -n' ''; shellAliases = { rm = "trash"; tree = "eza -T"; kill_yourself = "shutdown now"; }; shellAbbrs = { off = "shutdown now"; ns = "nix develop --command $SHELL"; wcf = "wl-copy-file"; c = "cargo"; # system sv = "sudo systemct"; suv = "sudo systemct --user"; # docker abbrs d = "docker"; dc = "docker-compose"; # git abbrs g = "git"; ga = "git add"; gs = "git status"; gsh = "git show"; gl = "git log"; gg = "git graph"; gd = "git diff"; gds = "git diff --staged"; gc = "git commit"; gca = "git commit --all"; gcf = "git commit --fixup"; gp = "git push"; gw = "git switch"; gr = "cd (git root)"; gri = "git rebase --interactive FETCH_HEAD"; }; functions = { fish_greeting = ""; }; }; programs = { zoxide.enable = true; eza.enable = true; direnv.enable = true; direnv.nix-direnv.enable = true; }; xdg.configFile = { "fish/conf.d/prompt.fish".source = ./fish_prompt.fish; "fish/conf.d/" = { recursive = true; source = ./conf.d; }; }; # programs.command-not-found.enable = true; programs.nix-index.enable = true; home.packages = ( with pkgs; with fishPlugins; [ trash-cli wl-copy-file foreign-env ] ++ (lib.optionals (desktop == "sway") [ async-prompt done ]) ); }; }