{
  config,
  lib,
  ...
}: let
  inherit
    (lib)
    mkEnableOption
    mkIf
    ;

  cfg = config.my.home.fish;
in {
  options.my.home.fish.enable = (mkEnableOption "Fish shell") // {default = true;};

  config = mkIf cfg.enable {
    home.sessionVariables = {
      # automatically prompt to run program in nix-shell if it's not installed
      NIX_AUTO_RUN = "1";
      NIX_AUTO_RUN_INTERACTIVE = "1";
    };

    programs.fish = {
      enable = true;
      shellAliases = {
        "bt" = "bluetoothctl";
      };
      shellAbbrs = {
        "bton" = "bluetoothctl power on";
        "btoff" = "bluetoothctl power off";
        "btcon" = "bluetoothctl connect";
        "btdis" = "bluetoothctl disconnect";
        "btinfo" = "bluetoothctl info";
      };
    };

    xdg.configFile."fish/functions" = {source = ./. + "/functions";};
  };
}