diff --git a/modules/home/common/default.nix b/modules/home/common/default.nix index d8763a7..1269453 100644 --- a/modules/home/common/default.nix +++ b/modules/home/common/default.nix @@ -24,8 +24,6 @@ in { programs.direnv.enable = true; programs.nix-index.enable = true; programs.ssh.enable = true; - programs.zoxide.enable = true; - programs.ripgrep.enable = true; programs.git = { enable = true; difftastic.enable = true; diff --git a/wrappers/fish/default.nix b/wrappers/fish/default.nix index b6840ce..8f34374 100644 --- a/wrappers/fish/default.nix +++ b/wrappers/fish/default.nix @@ -19,13 +19,17 @@ config.wrappers.fish.pathAdd; config-fish = pkgs.writeText "config.fish" '' ${path-add-lines} + source ${./config.fish} + source ${./prompt.fish} + + ${lib.getExe pkgs.zoxide} init fish | source ''; in [ "-C" "source ${config-fish}" ]; - pathAdd = with pkgs; [eza bat fzf]; + pathAdd = with pkgs; [eza bat fzf ripgrep]; }; } diff --git a/wrappers/fish/prompt.fish b/wrappers/fish/prompt.fish new file mode 100644 index 0000000..161514c --- /dev/null +++ b/wrappers/fish/prompt.fish @@ -0,0 +1,124 @@ +# name: Nim +# author: Guilhem "Nim" Saurel − https://github.com/nim65s/dotfiles/ + +function fish_prompt + set -l retc red + test $status = 0; and set retc green + + set -q __fish_git_prompt_showupstream + or set -g __fish_git_prompt_showupstream auto + + function _nim_prompt_wrapper + set retc $argv[1] + set -l field_name $argv[2] + set -l field_value $argv[3] + + set_color normal + set_color $retc + echo -n '─' + set_color -o green + echo -n '[' + set_color normal + test -n $field_name + and echo -n $field_name: + set_color $retc + echo -n $field_value + set_color -o green + echo -n ']' + end + + set_color $retc + echo -n '┬─' + set_color -o green + echo -n [ + + if functions -q fish_is_root_user; and fish_is_root_user + set_color -o red + else + set_color -o yellow + end + + echo -n $USER + set_color -o white + echo -n @ + + if test -z "$SSH_CLIENT" + set_color -o blue + else + set_color -o cyan + end + + echo -n (prompt_hostname) + set_color -o white + echo -n :(prompt_pwd) + set_color -o green + echo -n ']' + + test -n "$IN_NIX_SHELL" + and _nim_prompt_wrapper $retc '' 'nix-shell' + + # Date + _nim_prompt_wrapper $retc '' (date +%X) + + # Vi-mode + # The default mode prompt would be prefixed, which ruins our alignment. + function fish_mode_prompt + end + + if test "$fish_key_bindings" = fish_vi_key_bindings + or test "$fish_key_bindings" = fish_hybrid_key_bindings + set -l mode + switch $fish_bind_mode + case default + set mode (set_color --bold red)N + case insert + set mode (set_color --bold green)I + case replace_one + set mode (set_color --bold green)R + echo '[R]' + case replace + set mode (set_color --bold cyan)R + case visual + set mode (set_color --bold magenta)V + end + set mode $mode(set_color normal) + _nim_prompt_wrapper $retc '' $mode + end + + + # Virtual Environment + set -q VIRTUAL_ENV_DISABLE_PROMPT + or set -g VIRTUAL_ENV_DISABLE_PROMPT true + set -q VIRTUAL_ENV + and _nim_prompt_wrapper $retc V (path basename "$VIRTUAL_ENV") + + # git + set -l prompt_git (fish_git_prompt '%s') + test -n "$prompt_git" + and _nim_prompt_wrapper $retc G $prompt_git + + # Battery status + type -q acpi + and test (acpi -a 2> /dev/null | string match -r off) + and _nim_prompt_wrapper $retc B (acpi -b | cut -d' ' -f 4-) + + # New line + echo + + # Background jobs + set_color normal + + for job in (jobs) + set_color $retc + echo -n '│ ' + set_color brown + echo $job + end + + set_color normal + set_color $retc + echo -n '╰─>' + set_color -o red + echo -n '$ ' + set_color normal +end