2023-11-08 11:47:29 +00:00
|
|
|
{ config, pkgs, lib, ... }:
|
|
|
|
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
cfg = config.programs.fish.tide;
|
|
|
|
in
|
|
|
|
{
|
|
|
|
options.programs.fish.tide = {
|
|
|
|
enable = mkEnableOption "Enable tide integrations for fish";
|
|
|
|
items = mkOption {
|
|
|
|
type = types.attrsOf types.str;
|
|
|
|
description = "Additional item definitions to create";
|
|
|
|
default = { };
|
|
|
|
};
|
|
|
|
rightItems = mkOption {
|
|
|
|
type = types.listOf types.str;
|
|
|
|
description = "The list of right-items, note that `time` is not included here and will always appear last";
|
|
|
|
default = [
|
|
|
|
"status"
|
|
|
|
"cmd_duration"
|
|
|
|
"jobs"
|
|
|
|
"direnv"
|
|
|
|
"node"
|
|
|
|
"python"
|
|
|
|
"rustc"
|
|
|
|
"java"
|
|
|
|
"php"
|
|
|
|
"pulumi"
|
|
|
|
"ruby"
|
|
|
|
"go"
|
|
|
|
"gcloud"
|
|
|
|
"kubectl"
|
|
|
|
"distrobox"
|
|
|
|
"toolbox"
|
|
|
|
"terraform"
|
|
|
|
"aws"
|
|
|
|
"crystal"
|
|
|
|
"elixir"
|
|
|
|
"nix_shell"
|
|
|
|
];
|
|
|
|
};
|
|
|
|
leftItems = mkOption {
|
|
|
|
type = types.listOf types.str;
|
|
|
|
description = "The list of left-items. Note that `newline` and `character` is not included here and will always appear last";
|
|
|
|
default = [ "os" "context" "pwd" "git" ];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
config.programs.fish =
|
|
|
|
let
|
|
|
|
tideItems = attrsets.mapAttrs' (name: def: { name = "_tide_item_${name}"; value = def; });
|
|
|
|
in
|
|
|
|
mkIf cfg.enable {
|
|
|
|
functions = tideItems ({
|
|
|
|
nix_shell = ''
|
|
|
|
# In a Nix Shell
|
2023-11-08 19:56:42 +00:00
|
|
|
if set -qx DIRENV_FILE && test -f $DIRENV_FILE && rg -q "^use flake" $DIRENV_FILE
|
2023-11-08 11:47:29 +00:00
|
|
|
set -U tide_nix_shell_color "FFA500"
|
|
|
|
set -U tide_nix_shell_bg_color normal
|
|
|
|
_tide_print_item nix_shell "❄"
|
|
|
|
end
|
|
|
|
'';
|
|
|
|
} // cfg.items);
|
|
|
|
plugins = [
|
|
|
|
{
|
|
|
|
name = "tide";
|
|
|
|
src = pkgs.fetchFromGitHub {
|
|
|
|
owner = "IlanCosman";
|
|
|
|
repo = "tide";
|
|
|
|
rev = "v6.0.1";
|
|
|
|
# sha256 = lib.fakeSha256;
|
|
|
|
sha256 = "sha256-oLD7gYFCIeIzBeAW1j62z5FnzWAp3xSfxxe7kBtTLgA=";
|
|
|
|
};
|
|
|
|
}
|
|
|
|
];
|
|
|
|
};
|
2023-11-08 13:48:03 +00:00
|
|
|
|
|
|
|
config.xdg.configFile."fish/tide/init.fish" = {
|
|
|
|
text = ''
|
|
|
|
# Configure tide items
|
|
|
|
set -U tide_left_prompt_items ${concatMapStringsSep " " escapeShellArg cfg.leftItems} newline character
|
|
|
|
set -U tide_right_prompt_items ${concatMapStringsSep " " escapeShellArg cfg.rightItems} time
|
|
|
|
'';
|
|
|
|
|
|
|
|
onChange = "fish ~/.config/fish/tide/init.fish";
|
|
|
|
};
|
2023-11-08 11:47:29 +00:00
|
|
|
}
|