diff --git a/.gitignore b/.gitignore index 1c1aafa..28ecd8b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ fish_variables NVIMS/ plugged/ -plugins/ -themes/ -resurrect/ +dotfiles/.config/tmux/serious + + diff --git a/dotfiles/.local/share/omf/themes/serious/LICENSE b/dotfiles/.local/share/omf/themes/serious/LICENSE new file mode 100644 index 0000000..a439b2e --- /dev/null +++ b/dotfiles/.local/share/omf/themes/serious/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Bruno Ferreira Pinto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/dotfiles/.local/share/omf/themes/serious/README.md b/dotfiles/.local/share/omf/themes/serious/README.md new file mode 100644 index 0000000..ecdce96 --- /dev/null +++ b/dotfiles/.local/share/omf/themes/serious/README.md @@ -0,0 +1,35 @@ +## agnoster + +A fish theme optimized for people who use: + +* Solarized +* Git +* Mercurial (requires 'hg prompt') +* SVN +* Unicode-compatible fonts and terminals (Use a Powerline patched font, e.g., from here: https://github.com/powerline/fonts) +* Fish Vi-mode + +For Mac users, I highly recommend iTerm 2 + Solarized Dark + +![agnoster theme](https://f.cloud.github.com/assets/1765209/255379/452c668e-8c0b-11e2-8a8e-d1d13e57d15f.png) + + +#### Characteristics + +* If the previous command failed (✘) +- If private mode is enabled (🔒) +* User @ Hostname (if user is not DEFAULT_USER, which can be set in your profile) +* Git/HG/SVN status +* Branch () or detached head (➦) +* Current branch / SHA1 in detached head state +* Dirty working directory (±, color change) + * By default, git repos will show as dirty if there are untracked files. This can be changed by adding `set -g fish_git_prompt_untracked_files no` to your `config.fish`. This value is passed into `git status --untracked-files`, so any value git supports is valid for this command +* Current working directory +* Elevated (root) privileges (⚡) +* Current virtual environment (Python virtualenv and Nix Shell) +You will probably want to disable the default virtualenv prompt. Add to your [`init.fish`](https://github.com/oh-my-fish/oh-my-fish#dotfiles): +`set -gx VIRTUAL_ENV_DISABLE_PROMPT 1` +* Indicate vi mode. +* Source control blacklist. To disable source control prompts in certain directories, you can add the following to your `init.fish` or `config.fish`: `set -g scm_prompt_blacklist "/path/to/blacklist"`. + +Ported from https://gist.github.com/agnoster/3712874. diff --git a/dotfiles/.local/share/omf/themes/serious/fish_mode_prompt.fish b/dotfiles/.local/share/omf/themes/serious/fish_mode_prompt.fish new file mode 100644 index 0000000..e3df11f --- /dev/null +++ b/dotfiles/.local/share/omf/themes/serious/fish_mode_prompt.fish @@ -0,0 +1,3 @@ +# Redefine fish_mode_prompt function as empty to hide fish-shell mode indicator +function fish_mode_prompt +end diff --git a/dotfiles/.local/share/omf/themes/serious/fish_prompt.fish b/dotfiles/.local/share/omf/themes/serious/fish_prompt.fish new file mode 100644 index 0000000..b8604fd --- /dev/null +++ b/dotfiles/.local/share/omf/themes/serious/fish_prompt.fish @@ -0,0 +1,304 @@ +# name: Agnoster +# agnoster's Theme - https://gist.github.com/3712874 +# A Powerline-inspired theme for FISH +# +# # README +# +# In order for this theme to render correctly, you will need a +# [Powerline-patched font](https://gist.github.com/1595572). + +## Set this options in your config.fish (if you want to :]) +# set -g theme_display_user yes +# set -g theme_hide_hostname yes +# set -g theme_hide_hostname no +# set -g default_user your_normal_user + + + +set -g current_bg NONE +set segment_separator \uE0B0 +set right_segment_separator \uE0B0 +set -q scm_prompt_blacklist; or set scm_prompt_blacklist + +# =========================== +# Color setting + +# You can set these variables in config.fish like: +# set -g color_dir_bg red +# If not set, default color from agnoster will be used. +# =========================== + +set -q color_virtual_env_bg; or set color_virtual_env_bg white +set -q color_virtual_env_str; or set color_virtual_env_str black +set -q color_user_bg; or set color_user_bg black +set -q color_user_str; or set color_user_str yellow +set -q color_dir_bg; or set color_dir_bg blue +set -q color_dir_str; or set color_dir_str black +set -q color_hg_changed_bg; or set color_hg_changed_bg yellow +set -q color_hg_changed_str; or set color_hg_changed_str black +set -q color_hg_bg; or set color_hg_bg green +set -q color_hg_str; or set color_hg_str black +set -q color_git_dirty_bg; or set color_git_dirty_bg yellow +set -q color_git_dirty_str; or set color_git_dirty_str black +set -q color_git_bg; or set color_git_bg green +set -q color_git_str; or set color_git_str black +set -q color_svn_bg; or set color_svn_bg green +set -q color_svn_str; or set color_svn_str black +set -q color_status_nonzero_bg; or set color_status_nonzero_bg black +set -q color_status_nonzero_str; or set color_status_nonzero_str red +set -q color_status_superuser_bg; or set color_status_superuser_bg black +set -q color_status_superuser_str; or set color_status_superuser_str yellow +set -q color_status_jobs_bg; or set color_status_jobs_bg black +set -q color_status_jobs_str; or set color_status_jobs_str cyan +set -q color_status_private_bg; or set color_status_private_bg black +set -q color_status_private_str; or set color_status_private_str purple + +# =========================== +# Git settings +# set -g color_dir_bg red + +set -q fish_git_prompt_untracked_files; or set fish_git_prompt_untracked_files normal + + +# =========================== +# Helper methods +# =========================== + +set -g __fish_git_prompt_showdirtystate 'yes' +set -g __fish_git_prompt_char_dirtystate '±' +set -g __fish_git_prompt_char_cleanstate '' + +function parse_git_dirty + if [ $__fish_git_prompt_showdirtystate = "yes" ] + set -l submodule_syntax + set submodule_syntax "--ignore-submodules=dirty" + set untracked_syntax "--untracked-files=$fish_git_prompt_untracked_files" + set git_dirty (command git status --porcelain $submodule_syntax $untracked_syntax 2> /dev/null) + if [ -n "$git_dirty" ] + echo -n "$__fish_git_prompt_char_dirtystate" + else + echo -n "$__fish_git_prompt_char_cleanstate" + end + end +end + +function cwd_in_scm_blacklist + for entry in $scm_prompt_blacklist + pwd | grep "^$entry" - + end +end + +# =========================== +# Segments functions +# =========================== + +function prompt_segment -d "Function to draw a segment" + set -l bg + set -l fg + if [ -n "$argv[1]" ] + set bg $argv[1] + else + set bg normal + end + if [ -n "$argv[2]" ] + set fg $argv[2] + else + set fg normal + end + if [ "$current_bg" != 'NONE' -a "$argv[1]" != "$current_bg" ] + set_color -b $bg + set_color $current_bg + echo -n "$segment_separator " + set_color -b $bg + set_color $fg + else + set_color -b $bg + set_color $fg + echo -n " " + end + set current_bg $argv[1] + if [ -n "$argv[3]" ] + echo -n -s $argv[3] " " + end +end + +function prompt_finish -d "Close open segments" + if [ -n $current_bg ] + set_color normal + set_color $current_bg + echo -n "$segment_separator " + set_color normal + end + set -g current_bg NONE +end + + +# =========================== +# Theme components +# =========================== + +function prompt_virtual_env -d "Display Python or Nix virtual environment" + set envs + + if test "$VIRTUAL_ENV" + set py_env (basename $VIRTUAL_ENV) + set envs $envs "py[$py_env]" + end + + if test "$IN_NIX_SHELL" + set envs $envs "nix[$IN_NIX_SHELL]" + end + + if test "$envs" + prompt_segment $color_virtual_env_bg $color_virtual_env_str (string join " " $envs) + end +end + +function prompt_user -d "Display current user if different from $default_user" + if [ "$theme_display_user" = "yes" ] + if [ "$USER" != "$default_user" -o -n "$SSH_CLIENT" ] + set USER (whoami) + get_hostname + if [ $HOSTNAME_PROMPT ] + set USER_PROMPT $USER@$HOSTNAME_PROMPT + else + set USER_PROMPT $USER + end + prompt_segment $color_user_bg $color_user_str $USER_PROMPT + end + else + get_hostname + if [ $HOSTNAME_PROMPT ] + prompt_segment $color_user_bg $color_user_str $HOSTNAME_PROMPT + end + end +end + +function get_hostname -d "Set current hostname to prompt variable $HOSTNAME_PROMPT if connected via SSH" + set -g HOSTNAME_PROMPT "" + if [ "$theme_hide_hostname" = "no" -o \( "$theme_hide_hostname" != "yes" -a -n "$SSH_CLIENT" \) ] + set -g HOSTNAME_PROMPT (uname -n) + end +end + +function prompt_dir -d "Display the current directory" + prompt_segment $color_dir_bg $color_dir_str (prompt_pwd) +end + + +function prompt_hg -d "Display mercurial state" + set -l branch + set -l state + if command hg id >/dev/null 2>&1 + set branch (command hg id -b) + # We use `hg bookmarks` as opposed to `hg id -B` because it marks + # currently active bookmark with an asterisk. We use `sed` to isolate it. + set bookmark (hg bookmarks | sed -nr 's/^.*\*\ +\b(\w*)\ +.*$/:\1/p') + set state (hg_get_state) + set revision (command hg id -n) + set branch_symbol \uE0A0 + set prompt_text "$branch_symbol $branch$bookmark:$revision" + if [ "$state" = "0" ] + prompt_segment $color_hg_changed_bg $color_hg_changed_str $prompt_text " ±" + else + prompt_segment $color_hg_bg $color_hg_str $prompt_text + end + end +end + +function hg_get_state -d "Get mercurial working directory state" + if hg status | grep --quiet -e "^[A|M|R|!|?]" + echo 0 + else + echo 1 + end +end + + +function prompt_git -d "Display the current git state" + set -l ref + set -l dirty + if command git rev-parse --is-inside-work-tree >/dev/null 2>&1 + set dirty (parse_git_dirty) + set ref (command git symbolic-ref HEAD 2> /dev/null) + if [ $status -gt 0 ] + set -l branch (command git show-ref --head -s --abbrev |head -n1 2> /dev/null) + set ref "➦ $branch " + end + set branch_symbol \uE0A0 + set -l branch (echo $ref | sed "s-refs/heads/-$branch_symbol -") + if [ "$dirty" != "" ] + prompt_segment $color_git_dirty_bg $color_git_dirty_str "$branch $dirty" + else + prompt_segment $color_git_bg $color_git_str "$branch $dirty" + end + end +end + + +function prompt_svn -d "Display the current svn state" + set -l ref + if command svn info >/dev/null 2>&1 + set branch (svn_get_branch) + set branch_symbol \uE0A0 + set revision (svn_get_revision) + prompt_segment $color_svn_bg $color_svn_str "$branch_symbol $branch:$revision" + end +end + +function svn_get_branch -d "get the current branch name" + svn info 2> /dev/null | awk -F/ \ + '/^URL:/ { \ + for (i=0; i<=NF; i++) { \ + if ($i == "branches" || $i == "tags" ) { \ + print $(i+1); \ + break;\ + }; \ + if ($i == "trunk") { print $i; break; } \ + } \ + }' +end + +function svn_get_revision -d "get the current revision number" + svn info 2> /dev/null | sed -n 's/Revision:\ //p' +end + + +function prompt_status -d "the symbols for a non zero exit status, root and background jobs" + if [ $RETVAL -ne 0 ] + prompt_segment $color_status_nonzero_bg $color_status_nonzero_str "✘" + end + + if [ "$fish_private_mode" ] + prompt_segment $color_status_private_bg $color_status_private_str "🔒" + end + + # if superuser (uid == 0) + set -l uid (id -u $USER) + if [ $uid -eq 0 ] + prompt_segment $color_status_superuser_bg $color_status_superuser_str "⚡" + end + + # Jobs display + if [ (jobs -l | wc -l) -gt 0 ] + prompt_segment $color_status_jobs_bg $color_status_jobs_str "⚙" + end +end + +# =========================== +# Apply theme +# =========================== + +function fish_prompt + set -g RETVAL $status + prompt_status + prompt_virtual_env + prompt_user + prompt_dir + if [ (cwd_in_scm_blacklist | wc -c) -eq 0 ] + type -q hg; and prompt_hg + type -q git; and prompt_git + type -q svn; and prompt_svn + end + prompt_finish +end diff --git a/dotfiles/.local/share/omf/themes/serious/fish_right_prompt.fish b/dotfiles/.local/share/omf/themes/serious/fish_right_prompt.fish new file mode 100644 index 0000000..5efddfe --- /dev/null +++ b/dotfiles/.local/share/omf/themes/serious/fish_right_prompt.fish @@ -0,0 +1,81 @@ +# right prompt for agnoster theme +# shows vim mode status + +# =========================== +# Color setting + +# You can set these variables in config.fish like: +# set -g color_dir_bg red +# If not set, default color from agnoster will be used. +# =========================== +set -q color_vi_mode_indicator; or set color_vi_mode_indicator black +set -q color_vi_mode_normal; or set color_vi_mode_normal green +set -q color_vi_mode_insert; or set color_vi_mode_insert blue +set -q color_vi_mode_visual; or set color_vi_mode_visual red + + +# =========================== +# Cursor setting + +# You can set these variables in config.fish like: +# set -g cursor_vi_mode_insert bar_blinking +# =========================== +set -q cursor_vi_mode_normal; or set cursor_vi_mode_normal box_steady +set -q cursor_vi_mode_insert; or set cursor_vi_mode_insert bar_steady +set -q cursor_vi_mode_visual; or set cursor_vi_mode_visual box_steady + + +function fish_cursor_name_to_code -a cursor_name -d "Translate cursor name to a cursor code" + # these values taken from + # https://github.com/gnachman/iTerm2/blob/master/sources/VT100Terminal.m#L1646 + # Beginning with the statement "case VT100CSI_DECSCUSR:" + if [ $cursor_name = "box_blinking" ] + echo 1 + else if [ $cursor_name = "box_steady" ] + echo 2 + else if [ $cursor_name = "underline_blinking" ] + echo 3 + else if [ $cursor_name = "underline_steady" ] + echo 4 + else if [ $cursor_name = "bar_blinking" ] + echo 5 + else if [ $cursor_name = "bar_steady" ] + echo 6 + else + echo 2 + end +end + +function prompt_vi_mode -d 'vi mode status indicator' + set -l right_segment_separator \uE0B2 + switch $fish_bind_mode + case default + set -l mode (fish_cursor_name_to_code $cursor_vi_mode_normal) + echo -e "\e[\x3$mode q" + set_color $color_vi_mode_normal + echo "$right_segment_separator" + set_color -b $color_vi_mode_normal $color_vi_mode_indicator + echo " N " + case insert + set -l mode (fish_cursor_name_to_code $cursor_vi_mode_insert) + echo -e "\e[\x3$mode q" + set_color $color_vi_mode_insert + echo "$right_segment_separator" + set_color -b $color_vi_mode_insert $color_vi_mode_indicator + echo " I " + case visual + set -l mode (fish_cursor_name_to_code $cursor_vi_mode_visual) + echo -e "\e[\x3$mode q" + set_color $color_vi_mode_visual + echo "$right_segment_separator" + set_color -b $color_vi_mode_visual $color_vi_mode_indicator + echo " V " + end +end + +function fish_right_prompt -d 'Prints right prompt' + if test "$fish_key_bindings" = "fish_vi_key_bindings" + prompt_vi_mode + set_color normal + end +end