106 lines
2.8 KiB
Nix
106 lines
2.8 KiB
Nix
{
|
||
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;
|
||
};
|
||
};
|
||
};
|
||
}
|