From 0d3545a90c5b6a9f992f1257bb74d5b94ebc4ff7 Mon Sep 17 00:00:00 2001 From: candifloss Date: Mon, 23 Dec 2024 14:00:36 +0530 Subject: [PATCH] Initial config --- .gitignore | 1 + README.md | 16 +++++++++++-- completions/tab.fish | 14 ++++++++++++ conf.d/fish_alias_common.fish | 6 +++++ conf.d/fish_greeting.fish | 1 + conf.d/fish_prompt.fish | 41 ++++++++++++++++++++++++++++++++++ conf.d/fish_right_prompt.fish | 37 ++++++++++++++++++++++++++++++ config.fish | 3 +++ fish_variables | 42 +++++++++++++++++++++++++++++++++++ 9 files changed, 159 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 completions/tab.fish create mode 100644 conf.d/fish_alias_common.fish create mode 100644 conf.d/fish_greeting.fish create mode 100644 conf.d/fish_prompt.fish create mode 100644 conf.d/fish_right_prompt.fish create mode 100644 config.fish create mode 100644 fish_variables diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..682b4e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +conf.d/fish_alias_work.fish diff --git a/README.md b/README.md index 0d2c0e6..172a36c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,15 @@ -# dotfiles_fish +# Fish shell configurations -Fish shell configurations \ No newline at end of file +- Left prompt + - SSH session indicator + - Git repo indicator + - Root user indicator + - Error indicator +- Right prompt: pwd, git repo name +- Color scheme +- Common aliases + +To install this configuration, just clone this repo to the config dir(`~/.config/fish/`): +```bash +git clone https://git.candifloss.cc/candifloss/dotfiles_fish.git ~/.config/fish +``` \ No newline at end of file diff --git a/completions/tab.fish b/completions/tab.fish new file mode 100644 index 0000000..82a75eb --- /dev/null +++ b/completions/tab.fish @@ -0,0 +1,14 @@ +# `tab` autocompletions for fish + +complete -c tab -f -a '(tab --_autocomplete_tab)' +# hack here with `-o w`, to get fish to insert a space after the `tab -w` completion +complete -c tab -n "__fish_use_subcommand" -o w -l close -d 'closes the tab with the given name' -x -a '(tab --_autocomplete_close_tab)' +complete -c tab -n "__fish_use_subcommand" -o z -l disconnect -d 'disconnects any active sessions for the given tab' -x -a '(tab --_autocomplete_close_tab)' + +complete -c tab -l completion -d 'prints raw autocomplete scripts' -x -a 'bash elvish fish powershell zsh' +complete -c tab -n "__fish_use_subcommand" -s k -l check -d 'checks the current workspace for errors and warnings' +complete -c tab -n "__fish_use_subcommand" -s l -l list -d 'lists the active tabs' +complete -c tab -n "__fish_use_subcommand" -s W -l shutdown -d 'terminates the tab daemon and all active pty sessions' +complete -c tab -n "__fish_use_subcommand" -s h -l help -d 'Prints help information' +complete -c tab -n "__fish_use_subcommand" -s V -l version -d 'Prints version information' + diff --git a/conf.d/fish_alias_common.fish b/conf.d/fish_alias_common.fish new file mode 100644 index 0000000..1e86fdb --- /dev/null +++ b/conf.d/fish_alias_common.fish @@ -0,0 +1,6 @@ +alias c="clear" +alias inst="sudo apt-get install -y" +alias systemctl="sudo systemctl" +alias ls="lsd" +alias bat="bat --paging=never -p" +alias updt="sudo apt-get update && sudo apt-get upgrade -y && sudo snap refresh && rustup update" diff --git a/conf.d/fish_greeting.fish b/conf.d/fish_greeting.fish new file mode 100644 index 0000000..f9d312c --- /dev/null +++ b/conf.d/fish_greeting.fish @@ -0,0 +1 @@ +set -U fish_greeting "" \ No newline at end of file diff --git a/conf.d/fish_prompt.fish b/conf.d/fish_prompt.fish new file mode 100644 index 0000000..64defdf --- /dev/null +++ b/conf.d/fish_prompt.fish @@ -0,0 +1,41 @@ +function fish_prompt + # Check the last command status and set the error color + if test $status -eq 0 + set error_color "\033[38;2;0;255;180m" # rgb(0, 255, 180) for success + else + set error_color "\033[38;2;255;53;94m" # rgb(255, 53, 94) for error + end + + # Get SSH session status + if test -n "$SSH_CONNECTION" + set ssh_color "\033[38;2;255;149;0m" # rgb(255, 149, 0) for SSH + else + set ssh_color "\033[38;2;82;82;82m" # rgb(82, 82, 82) for non-SSH + end + + # Try to get the git branch, avoid error if not in a git repo + set git_color "\033[38;2;82;82;82m" # Default git color when not in a git repo + if test -d .git + set git_branch (git rev-parse --abbrev-ref HEAD) + if test -n "$git_branch" + switch $git_branch + case 'main' 'master' + set git_color "\033[38;2;178;98;44m" # rgb(178, 98, 44) for main/master + case 'dev' + set git_color "\033[38;2;54;159;150m" # rgb(54, 159, 150) for dev + case '*' + set git_color "\033[38;2;255;255;255m" # rgb(255, 255, 255) for other branches + end + end + end + + # Set the user color + if test $USER = "root" + set user_color "\033[38;2;255;53;94m" # rgb(255, 53, 94) for root + else + set user_color "\033[38;2;0;255;180m" # rgb(0, 255, 180) for non-root users + end + + # Print the custom prompt with the symbol and different colors + echo -n -e "$ssh_color❯$git_color❯$user_color❯$error_color❯\033[0m " +end diff --git a/conf.d/fish_right_prompt.fish b/conf.d/fish_right_prompt.fish new file mode 100644 index 0000000..5d156b9 --- /dev/null +++ b/conf.d/fish_right_prompt.fish @@ -0,0 +1,37 @@ +function fish_right_prompt + # Check if we're in a Git repo + set git_dir (git rev-parse --show-toplevel 2>/dev/null) + if test -n "$git_dir" + # Escape + set escaped_git_dir (string replace "/" "\\/" $git_dir) + + # Get the repo name + set repo_name (basename $git_dir) + + # Relative path in git + set relative_path (string replace -r "^$escaped_git_dir/" "" (pwd)) + + # RGB color codes + set repo_color "\033[38;2;55;120;130m" # RGB for repo name (dark cyan) + set separator_color "\033[38;2;178;98;44m" # RGB for separator (bronze) + set path_color "\033[38;2;82;82;82m" # RGB for path (gray) + set reset_color "\033[0m" # Reset color + + # Ensure the relative path starts with a single slash + if not string match -r "^/" $relative_path + set relative_path "/$relative_path" + end + + # Check if we're at the Git root or inside the repo + if test "$relative_path" = "" + # At the repo root + printf "$repo_color$repo_name$reset_color" + else + # Inside the repo, print the repo name, separator, and path + printf "$repo_color$repo_name$separator_color 󰊢 $path_color$relative_path$reset_color" + end + else + # Not in a Git repo, use the default prompt_pwd function + prompt_pwd + end +end \ No newline at end of file diff --git a/config.fish b/config.fish new file mode 100644 index 0000000..d714361 --- /dev/null +++ b/config.fish @@ -0,0 +1,3 @@ +if status is-interactive + # Commands to run in interactive sessions can go here +end diff --git a/fish_variables b/fish_variables new file mode 100644 index 0000000..8724d6b --- /dev/null +++ b/fish_variables @@ -0,0 +1,42 @@ +# This file contains fish universal variable definitions. +# VERSION: 3.0 +SETUVAR __fish_initialized:3400 +SETUVAR fish_color_autosuggestion:767676 +SETUVAR fish_color_cancel:\x2d\x2dreverse +SETUVAR fish_color_command:00d75f +SETUVAR fish_color_comment:3a3a3a +SETUVAR fish_color_cwd:green +SETUVAR fish_color_cwd_root:red +SETUVAR fish_color_end:00d7ff +SETUVAR fish_color_error:ff5f5f +SETUVAR fish_color_escape:brcyan +SETUVAR fish_color_history_current:\x2d\x2dbold +SETUVAR fish_color_host:normal +SETUVAR fish_color_host_remote:\x1d +SETUVAR fish_color_keyword:\x1d +SETUVAR fish_color_normal:normal +SETUVAR fish_color_operator:brcyan +SETUVAR fish_color_option:\x1d +SETUVAR fish_color_param:d7d7af +SETUVAR fish_color_quote:d7d7d7 +SETUVAR fish_color_redirection:cyan\x1e\x2d\x2dbold +SETUVAR fish_color_search_match:bryellow\x1e\x2d\x2dbackground\x3dbrblack +SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack +SETUVAR fish_color_status:red +SETUVAR fish_color_user:brgreen +SETUVAR fish_color_valid_path:\x2d\x2dunderline +SETUVAR fish_greeting: +SETUVAR fish_key_bindings:fish_default_key_bindings +SETUVAR fish_pager_color_background:\x1d +SETUVAR fish_pager_color_completion:normal +SETUVAR fish_pager_color_description:yellow\x1e\x2d\x2ditalics +SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline +SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan +SETUVAR fish_pager_color_secondary_background:\x1d +SETUVAR fish_pager_color_secondary_completion:\x1d +SETUVAR fish_pager_color_secondary_description:\x1d +SETUVAR fish_pager_color_secondary_prefix:\x1d +SETUVAR fish_pager_color_selected_background:\x2d\x2dreverse +SETUVAR fish_pager_color_selected_completion:\x1d +SETUVAR fish_pager_color_selected_description:\x1d +SETUVAR fish_pager_color_selected_prefix:\x1d