flakes/modules/home/shell/fish/default.nix

106 lines
2.8 KiB
Nix
Raw Normal View History

{
config,
lib,
pkgs,
...
}:
{
options.snowflake.shell.fish.enable = lib.mkEnableOption "Enable fish shell home configuration";
config = lib.mkIf config.snowflake.shell.fish.enable {
programs.fish.enable = true;
programs.fish.interactiveShellInit = ''
set fish_greeting
${pkgs.nix-index}/etc/profile.d/command-not-found.sh | source
${pkgs.starship}/bin/starship init fish | source
'';
programs.fish.plugins = [
{
inherit (pkgs.fishPlugins.autopair) src;
name = "autopair";
}
];
programs.starship =
let
elemsConcatted = lib.strings.concatStrings (
map (s: "\$${s}") [
"hostname"
"username"
"directory"
"shell"
"nix_shell"
"git_branch"
"git_commit"
"git_state"
"git_status"
"jobs"
"cmd_duration"
]
);
in
{
enable = true;
settings = {
scan_timeout = 2;
command_timeout = 2000; # nixpkgs makes starship implode with lower values
# add_newline = false;
line_break.disabled = false;
format = "${elemsConcatted}\n$character";
hostname = {
ssh_only = true;
disabled = false;
format = "@[$hostname](bold blue) "; # the whitespace at the end is actually important
};
# configure specific elements
character = {
error_symbol = "[](bold red)";
success_symbol = "[](bold green)";
vicmd_symbol = "[](bold yellow)";
format = "$symbol [|](bold bright-black) ";
};
username = {
format = "[$user]($style) in ";
};
directory = {
# removes the read_only symbol from the format, it doesn't play nicely with my folder icon
format = "[ ](bold green) [$path]($style) ";
};
# git
git_commit.commit_hash_length = 7;
git_branch.style = "bold purple";
git_status = {
style = "red";
ahead = " ";
behind = " ";
conflicted = " ";
renamed = "»";
deleted = " ";
diverged = " ";
modified = "!";
stashed = "";
staged = "+";
untracked = "?";
};
# language configurations
# the whitespaces at the end *are* necessary for proper formatting
python.symbol = "[ ](blue) ";
rust.symbol = "[ ](red) ";
nix_shell.symbol = "[󱄅 ](blue) ";
golang.symbol = "[󰟓 ](blue)";
package.disabled = true;
};
};
};
}