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;
|
|||
|
};
|
|||
|
};
|
|||
|
};
|
|||
|
}
|