Organizing fish structure using bother fisher and omf. Primarily fisher as it makes local development a sinch.
This commit is contained in:
parent
78e80ba3d4
commit
1c345db4d8
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-github/conf.d/github.fish
|
||||||
|
|
@ -6,29 +6,6 @@
|
||||||
# powerful commandline tools. It's interactive computing for effective
|
# powerful commandline tools. It's interactive computing for effective
|
||||||
# workflow.
|
# workflow.
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
# FZF -> Fuzzy find everything!
|
|
||||||
|
|
||||||
# Use tmux pane by default
|
|
||||||
set FZF_TMUX 1
|
|
||||||
|
|
||||||
# Use Ripgrep (Faster than Grep)
|
|
||||||
if type rg &> /dev/null
|
|
||||||
set FZF_DEFAULT_COMMAND 'rg --files --hidden --follow --glob "!.git/" --glob "!plugged/"'
|
|
||||||
set FZF_CTRL_T_COMMAND 'rg --files --hidden --follow --glob "!.git/" --glob "!plugged/" $dir'
|
|
||||||
end
|
|
||||||
|
|
||||||
# Multi-select by default
|
|
||||||
set FZF_DEFAULT_OPTS '-m'
|
|
||||||
|
|
||||||
# If installed through vim, fzf needs to be added to path
|
|
||||||
set PATH $PATH ~/.local/share/nvim/plugged/fzf/bin
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
|
||||||
# Autojump -> Faster filesystem navigation
|
|
||||||
if test -f ~/.autojump/share/autojump/autojump.fish
|
|
||||||
. ~/.autojump/share/autojump/autojump.fish
|
|
||||||
end
|
|
||||||
#-------------------------------------------------------------------------------
|
|
||||||
# Abbreviations
|
# Abbreviations
|
||||||
abbr python python3
|
abbr python python3
|
||||||
abbr vim nvim
|
abbr vim nvim
|
||||||
|
|
@ -38,17 +15,26 @@ abbr l ls -a
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
# Key Bindings
|
# Key Bindings
|
||||||
|
bind \ee '$EDITOR ~/.config/fish/config.fish' # Edit config.fish with alt-e
|
||||||
# Edit and reload
|
bind \er 'exec fish' # Reload fish config with alt-r
|
||||||
bind \ee '$EDITOR ~/.config/fish/config.fish'
|
bind \cg delete-char # Replace readline <C-d> with <C-g> because <C-d> also exits shells.
|
||||||
bind \er 'exec fish'
|
bind \ea beginning-of-line # Replace <C-a> with <Alt-a> because <C-a> is used as tmux leader key.
|
||||||
|
|
||||||
# Replace \cd with \cg because \cd also exits shells.
|
|
||||||
bind \cg delete-char
|
|
||||||
# Replace \ca with \ea because \ca is used as tmux leader key.
|
|
||||||
bind \ea beginning-of-line
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
# Forgit plugin requires sourcing to activate abbreviations
|
# FZF -> Fuzzy find everything!
|
||||||
# From https://github.com/wfxr/forgit
|
set PATH $PATH ~/.local/share/nvim/plugged/fzf/bin # Fzf is installed through vim plug
|
||||||
source ~/.config/fish/functions/forgit.plugin.fish
|
set FZF_TMUX 1 # Use tmux pane by default
|
||||||
|
set FZF_DEFAULT_OPTS '-m' # Multi-select by default
|
||||||
|
if type rg &> /dev/null # Use Ripgrep (Faster than Grep)
|
||||||
|
set FZF_DEFAULT_COMMAND 'rg --files --hidden --follow --glob "!.git/" --glob "!plugged/"'
|
||||||
|
set FZF_CTRL_T_COMMAND 'rg --files --hidden --follow --glob "!.git/" --glob "!plugged/" $dir'
|
||||||
|
end
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Autojump -> Faster filesystem navigation
|
||||||
|
if test -f ~/.autojump/share/autojump/autojump.fish
|
||||||
|
. ~/.autojump/share/autojump/autojump.fish
|
||||||
|
end
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# See fishfile for installed plugins through fisherman
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Defined in /tmp/fish.nJXl9C/pacmd-loopback.fish @ line 1
|
||||||
|
function pacmd-loopback --description 'Loop a pacmd source into a pacmd sink interactively.'
|
||||||
|
if test (set source (pacmd list-sources | grep name: | awk '{ print $2 }' | cut -d'<' -f2 | cut -d'>' -f1 | fzf-tmux --header="Select a source" --phony); set sink (pacmd list-sinks | grep name: | awk '{ print $2 }' | cut -d'<' -f2 | cut -d'>' -f1 | fzf-tmux --header="Select a sink:"); printf "No\nYes" | fzf-tmux --header="CONFIRM: <$source> -> <$sink>") = "Yes"
|
||||||
|
pacmd load-module module-loopback source=$source sink=$sink
|
||||||
|
else
|
||||||
|
echo "Aborted."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
# helper function for __fzf_search_shell_variables
|
||||||
|
function __fzf_display_value_or_error --argument-names variable_name --description "Displays either the value of the variable passed in, or an informative message if it is not available."
|
||||||
|
if set --query $variable_name
|
||||||
|
echo $$variable_name
|
||||||
|
else
|
||||||
|
set_color red
|
||||||
|
echo "$variable_name was not exported to this process so its value cannot be displayed." >&2
|
||||||
|
set_color normal
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
# helper function for __fzf_search_current_dir
|
||||||
|
function __fzf_preview_file --argument-names file_path --description "Prints a preview for the given file based on its file type."
|
||||||
|
if test -f "$file_path" # regular file
|
||||||
|
bat --style=numbers --color=always "$file_path"
|
||||||
|
else if test -d "$file_path" # directory
|
||||||
|
set --local CLICOLOR_FORCE true
|
||||||
|
ls -a "$file_path"
|
||||||
|
else if test -L "$file_path" # symlink
|
||||||
|
# notify user and recurse on the target of the symlink, which can be any of these file types
|
||||||
|
set -l target_path (realpath $file_path)
|
||||||
|
|
||||||
|
set_color yellow
|
||||||
|
echo "'$file_path' is a symlink to '$target_path'."
|
||||||
|
set_color normal
|
||||||
|
|
||||||
|
__fzf_preview_file "$target_path"
|
||||||
|
else if test -c "$file_path"
|
||||||
|
__fzf_report_file_type "$file_path" "character device file"
|
||||||
|
else if test -b "$file_path"
|
||||||
|
__fzf_report_file_type "$file_path" "block device file"
|
||||||
|
else if test -S "$file_path"
|
||||||
|
__fzf_report_file_type "$file_path" "socket"
|
||||||
|
else if test -p "$file_path"
|
||||||
|
__fzf_report_file_type "$file_path" "named pipe"
|
||||||
|
else
|
||||||
|
echo "Unexpected file symbol $file_type_char. Please open an issue at https://github.com/patrickf3139/fzf.fish." >&2
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
# helper function for __fzf_preview_file
|
||||||
|
function __fzf_report_file_type --argument-names file_path file_type --description "Explain the file type for a file."
|
||||||
|
set_color red
|
||||||
|
echo "Cannot preview '$file_path': it is a $file_type."
|
||||||
|
set_color normal
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
# originally implemented and transposed from https://github.com/patrickf3139/dotfiles/pull/11
|
||||||
|
function __fzf_search_current_dir --description "Search the current directory using fzf and fd. Insert the selected relative file path into the commandline at the cursor."
|
||||||
|
# Make sure that fzf uses fish to execute __fzf_preview_file.
|
||||||
|
# See similar comment in __fzf_search_shell_variables.fish.
|
||||||
|
set --local --export SHELL (command --search fish)
|
||||||
|
set file_path_selected (
|
||||||
|
fd --hidden --follow --color=always --exclude=.git 2> /dev/null |
|
||||||
|
fzf --ansi --preview='__fzf_preview_file {}'
|
||||||
|
)
|
||||||
|
|
||||||
|
if test $status -eq 0
|
||||||
|
commandline --insert (echo $file_path_selected | string escape)
|
||||||
|
end
|
||||||
|
|
||||||
|
commandline --function repaint
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Originally implemented in and transposed from https://github.com/patrickf3139/dotfiles/pull/2
|
||||||
|
function __fzf_search_git_log --description "Search the git log of the current git repository. Insert the selected commit hash into the commandline at the cursor."
|
||||||
|
if not git rev-parse --git-dir >/dev/null 2>&1
|
||||||
|
echo '__fzf_search_git_log: Not in a git repository.' >&2
|
||||||
|
else
|
||||||
|
set selected_log_line (
|
||||||
|
# see documentation for git format placeholders at https://git-scm.com/docs/git-log#Documentation/git-log.txt-emnem
|
||||||
|
# %h gives you the abbreviated commit hash, which is useful for saving screen space, but we will have to expand it later below
|
||||||
|
git log --color=always --format=format:'%C(bold blue)%h%C(reset) - %C(cyan)%as%C(reset) %C(yellow)%d%C(reset) %C(normal)%s%C(reset) %C(dim normal)[%an]%C(reset)' | \
|
||||||
|
fzf --ansi --tiebreak=index --preview='git show --color=always (string split --max 1 " " {})[1]'
|
||||||
|
)
|
||||||
|
if test $status -eq 0
|
||||||
|
set abbreviated_commit_hash (string split --max 1 " " $selected_log_line)[1]
|
||||||
|
set commit_hash (git rev-parse $abbreviated_commit_hash)
|
||||||
|
commandline --insert $commit_hash
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
commandline --function repaint
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
function __fzf_search_git_status --description "Search the git status of the current git repository. Insert the selected file paths into the commandline at the cursor."
|
||||||
|
if not git rev-parse --git-dir >/dev/null 2>&1
|
||||||
|
echo '__fzf_search_git_status: Not in a git repository.' >&2
|
||||||
|
else
|
||||||
|
set selected_paths (
|
||||||
|
# Pass configuration color.status=always to force status to use colors even though output is sent to a pipe
|
||||||
|
git -c color.status=always status --short |
|
||||||
|
fzf --ansi --multi
|
||||||
|
)
|
||||||
|
if test $status -eq 0
|
||||||
|
# git status --short automatically escapes the paths of most files for us so not going to bother trying to handle
|
||||||
|
# the few edges cases of weird file names that should be extremely rare (e.g. "this;needs;escaping")
|
||||||
|
for path in $selected_paths
|
||||||
|
if test (string sub --length 1 $path) = 'R'
|
||||||
|
# path has been renamed and looks like "R LICENSE -> LICENSE.md"
|
||||||
|
# extract the path to use from after the arrow
|
||||||
|
set cleaned_path (string split -- "-> " $path)[-1]
|
||||||
|
else
|
||||||
|
set cleaned_path (string sub --start=4 $path)
|
||||||
|
end
|
||||||
|
# add a space after each path to keep them separated when inserted
|
||||||
|
set cleaned_path_padded "$cleaned_path "
|
||||||
|
commandline --insert $cleaned_path_padded
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
commandline --function repaint
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
# originally implemented and transposed from https://github.com/patrickf3139/dotfiles/pull/11
|
||||||
|
function __fzf_search_history --description "Search command history using fzf. Replace the commandline with the selected command."
|
||||||
|
# history merge incorporates history changes from other fish sessions
|
||||||
|
history merge
|
||||||
|
set command_with_ts (
|
||||||
|
# Reference https://devhints.io/strftime to understand strftime format symbols
|
||||||
|
history --null --show-time="%m/%e %H:%M:%S | " |
|
||||||
|
fzf --read0 --tiebreak=index --query=(commandline)
|
||||||
|
)
|
||||||
|
|
||||||
|
if test $status -eq 0
|
||||||
|
set command_selected (string split --max 1 " | " $command_with_ts)[2]
|
||||||
|
commandline --replace $command_selected
|
||||||
|
end
|
||||||
|
|
||||||
|
commandline --function repaint
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
function __fzf_search_shell_variables --description "Search and inspect shell variables using fzf. Insert the selected variable into the commandline at the cursor."
|
||||||
|
# Make sure that fzf uses fish to execute __echo_value_or_print_message, which
|
||||||
|
# is an autoloaded fish function so doesn't exist in other shells.
|
||||||
|
# Using --local so that it does not clobber SHELL outside of this function.
|
||||||
|
set --local --export SHELL (command --search fish)
|
||||||
|
|
||||||
|
# Pipe the names of all shell variables to fzf and attempt to display the value
|
||||||
|
# of the selected variable in fzf's preview window.
|
||||||
|
# Non-exported variables will not be accessible to the fzf process, in which case
|
||||||
|
# __echo_value_or_print_message will print an informative message in lieu of the value.
|
||||||
|
set variable_name (
|
||||||
|
set --names |
|
||||||
|
fzf --preview '__fzf_display_value_or_error {}'
|
||||||
|
)
|
||||||
|
|
||||||
|
if test $status -eq 0
|
||||||
|
commandline --insert $variable_name
|
||||||
|
end
|
||||||
|
|
||||||
|
commandline --function repaint
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
# https://github.com/junegunn/fzf/wiki/Examples-(fish)
|
||||||
|
function fzf-bcd-widget -d 'cd backwards'
|
||||||
|
pwd | awk -v RS=/ '/\n/ {exit} {p=p $0 "/"; print p}' | tac | eval (__fzfcmd) +m --select-1 --exit-0 $FZF_BCD_OPTS | read -l result
|
||||||
|
[ "$result" ]; and cd $result
|
||||||
|
commandline -f repaint
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
# From https://github.com/junegunn/fzf/wiki/Examples-(fish)
|
||||||
|
function fzf-cdhist-widget -d 'cd to one of the previously visited locations'
|
||||||
|
# Clear non-existent folders from cdhist.
|
||||||
|
set -l buf
|
||||||
|
for i in (seq 1 (count $dirprev))
|
||||||
|
set -l dir $dirprev[$i]
|
||||||
|
if test -d $dir
|
||||||
|
set buf $buf $dir
|
||||||
|
end
|
||||||
|
end
|
||||||
|
set dirprev $buf
|
||||||
|
string join \n $dirprev | tac | sed 1d | eval (__fzfcmd) +m --tiebreak=index --toggle-sort=ctrl-r $FZF_CDHIST_OPTS | read -l result
|
||||||
|
[ "$result" ]; and cd $result
|
||||||
|
commandline -f repaint
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
# From https://github.com/junegunn/fzf/wiki/Examples-(fish)
|
||||||
|
function fzf-complete -d 'fzf completion and print selection back to commandline'
|
||||||
|
# As of 2.6, fish's "complete" function does not understand
|
||||||
|
# subcommands. Instead, we use the same hack as __fish_complete_subcommand and
|
||||||
|
# extract the subcommand manually.
|
||||||
|
set -l cmd (commandline -co) (commandline -ct)
|
||||||
|
switch $cmd[1]
|
||||||
|
case env sudo
|
||||||
|
for i in (seq 2 (count $cmd))
|
||||||
|
switch $cmd[$i]
|
||||||
|
case '-*'
|
||||||
|
case '*=*'
|
||||||
|
case '*'
|
||||||
|
set cmd $cmd[$i..-1]
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
set cmd (string join -- ' ' $cmd)
|
||||||
|
|
||||||
|
set -l complist (complete -C$cmd)
|
||||||
|
set -l result
|
||||||
|
string join -- \n $complist | sort | eval (__fzfcmd) -m --select-1 --exit-0 --header '(commandline)' | cut -f1 | while read -l r; set result $result $r; end
|
||||||
|
|
||||||
|
set prefix (string sub -s 1 -l 1 -- (commandline -t))
|
||||||
|
for i in (seq (count $result))
|
||||||
|
set -l r $result[$i]
|
||||||
|
switch $prefix
|
||||||
|
case "'"
|
||||||
|
commandline -t -- (string escape -- $r)
|
||||||
|
case '"'
|
||||||
|
if string match '*"*' -- $r >/dev/null
|
||||||
|
commandline -t -- (string escape -- $r)
|
||||||
|
else
|
||||||
|
commandline -t -- '"'$r'"'
|
||||||
|
end
|
||||||
|
case '~'
|
||||||
|
commandline -t -- (string sub -s 2 (string escape -n -- $r))
|
||||||
|
case '*'
|
||||||
|
commandline -t -- (string escape -n -- $r)
|
||||||
|
end
|
||||||
|
[ $i -lt (count $result) ]; and commandline -i ' '
|
||||||
|
end
|
||||||
|
|
||||||
|
commandline -f repaint
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
# From https://github.com/junegunn/fzf/wiki/Examples-(fish)
|
||||||
|
function fzf-select -d 'fzf commandline job and print unescaped selection back to commandline'
|
||||||
|
set -l cmd (commandline -j)
|
||||||
|
[ "$cmd" ]; or return
|
||||||
|
eval $cmd | eval (__fzfcmd) -m --tiebreak=index --select-1 --exit-0 | string join ' ' | read -l result
|
||||||
|
[ "$result" ]; and commandline -j -- $result
|
||||||
|
commandline -f repaint
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.local/share/nvim/plugged/fzf/shell/key-bindings.fish
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Defined in /tmp/fish.azx9vq/__github_add_org.fish @ line 1
|
||||||
|
function __github_add_org --description 'Add an organization name to the local share fzf file.' --argument org
|
||||||
|
if ! test -n "$org"
|
||||||
|
echo "Please provide and org name!"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
echo $org >> ~/.local/share/fzf/github_orgs
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Defined in /tmp/fish.mAOD6Y/__github_get_org_repos.fish @ line 2
|
||||||
|
function __github_get_org_repos --description 'Return a list of all the github repos owned by a github organization.' --argument org
|
||||||
|
if ! test -n "$org"
|
||||||
|
echo "Please provide a github organization name."
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
curl "https://api.github.com/orgs/$org/repos?per_page=100&page=1" | jq '.[].full_name' | awk -F'"' '{print $2}'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# From https://github.com/wfxr/forgit
|
||||||
|
# Forgit plugin requires sourcing to activate abbreviations
|
||||||
|
source ~/.config/fish/functions/forgit.plugin.fish
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
function fcd -d "Fuzzy change directory"
|
||||||
|
if set -q argv[1]
|
||||||
|
set searchdir $argv[1]
|
||||||
|
else
|
||||||
|
set searchdir $HOME
|
||||||
|
end
|
||||||
|
|
||||||
|
# https://github.com/fish-shell/fish-shell/issues/1362
|
||||||
|
set -l tmpfile (mktemp)
|
||||||
|
find $searchdir \( ! -regex '.*/\..*' \) ! -name __pycache__ -type d | fzf > $tmpfile
|
||||||
|
set -l destdir (cat $tmpfile)
|
||||||
|
rm -f $tmpfile
|
||||||
|
|
||||||
|
if test -z "$destdir"
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
cd $destdir
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Defined in /tmp/fish.yoQzI0/fclone.fish @ line 2
|
||||||
|
function fclone --argument org
|
||||||
|
if ! test -n "$org"
|
||||||
|
set org_file ~/.local/share/fzf/github_orgs
|
||||||
|
if ! test -e $org_file
|
||||||
|
echo -n "Please provide an organization name either as an argument to this command or in a list at $org_file"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
set org (cat $org_file | fzf-tmux -e --header="Please select an organization. Set additional orgs in $org_file")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
set repo (__github_get_org_repos $org | fzf-tmux --header="Please select a repository to clone.")
|
||||||
|
if test -n "$repo"
|
||||||
|
echo "Cloning '$repo' from Github"
|
||||||
|
git clone "https://github.com/$repo.git"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Defined in /tmp/fish.T4Z5Kp/fclone.fish @ line 2
|
||||||
|
function fhub --argument org
|
||||||
|
if ! test -n "$org"
|
||||||
|
set org_file ~/.local/share/fzf/github_orgs
|
||||||
|
if ! test -e $org_file
|
||||||
|
echo -n "Please provide an organization name either as an argument to this command or in a list at $org_file"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
set org (cat $org_file | fzf-tmux -e --header="Please select an organization. Set additional orgs in $org_file")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
set repo (__github_get_org_repos $org | fzf-tmux --header="Please select a repository to clone.")
|
||||||
|
if test -n "$repo"
|
||||||
|
echo "Opening '$repo' in Web Browser"
|
||||||
|
hub browse $repo
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
function fkill -d "Fuzzy kill"
|
||||||
|
set pid (ps -ef | sed 1d | fzf -m | awk '{print $2}')
|
||||||
|
|
||||||
|
if test -n "$pid"
|
||||||
|
echo $pid | xargs kill -9
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,299 @@
|
||||||
|
#!/usr/local/bin/fish
|
||||||
|
# MIT (c) Chris Apple
|
||||||
|
|
||||||
|
function forgit::warn
|
||||||
|
printf "%b[Warn]%b %s\n" '\e[0;33m' '\e[0m' "$argv" >&2;
|
||||||
|
end
|
||||||
|
|
||||||
|
function forgit::info
|
||||||
|
printf "%b[Info]%b %s\n" '\e[0;32m' '\e[0m' "$argv" >&2;
|
||||||
|
end
|
||||||
|
|
||||||
|
function forgit::inside_work_tree
|
||||||
|
git rev-parse --is-inside-work-tree >/dev/null;
|
||||||
|
end
|
||||||
|
|
||||||
|
set forgit_pager "$FORGIT_PAGER"
|
||||||
|
set forgit_show_pager "$FORGIT_SHOW_PAGER"
|
||||||
|
set forgit_diff_pager "$FORGIT_DIFF_PAGER"
|
||||||
|
set forgit_ignore_pager "$FORGIT_IGNORE_PAGER"
|
||||||
|
|
||||||
|
test -z "$forgit_pager"; and set forgit_pager (git config core.pager || echo 'cat')
|
||||||
|
test -z "$forgit_show_pager"; and set forgit_show_pager (git config pager.show || echo "$forgit_pager")
|
||||||
|
test -z "$forgit_diff_pager"; and set forgit_diff_pager (git config pager.diff || echo "$forgit_pager")
|
||||||
|
test -z "$forgit_ignore_pager"; and set forgit_ignore_pager (type -q bat >/dev/null 2>&1 && echo 'bat -l gitignore --color=always' || echo 'cat')
|
||||||
|
|
||||||
|
# https://github.com/wfxr/emoji-cli
|
||||||
|
type -q emojify >/dev/null 2>&1 && set forgit_emojify '|emojify'
|
||||||
|
|
||||||
|
# git commit viewer
|
||||||
|
function forgit::log
|
||||||
|
forgit::inside_work_tree || return 1
|
||||||
|
|
||||||
|
set files (echo $argv | sed -nE 's/.* -- (.*)/\1/p')
|
||||||
|
set cmd "echo {} |grep -Eo '[a-f0-9]+' |head -1 |xargs -I% git show --color=always % -- $files | $forgit_show_pager"
|
||||||
|
|
||||||
|
if test -n "$FORGIT_COPY_CMD"
|
||||||
|
set copy_cmd $FORGIT_COPY_CMD
|
||||||
|
else
|
||||||
|
set copy_cmd pbcopy
|
||||||
|
end
|
||||||
|
|
||||||
|
set opts "
|
||||||
|
$FORGIT_FZF_DEFAULT_OPTS
|
||||||
|
+s +m --tiebreak=index
|
||||||
|
--bind=\"enter:execute($cmd |env LESS='-R' less)\"
|
||||||
|
--bind=\"ctrl-y:execute-silent(echo {} |grep -Eo '[a-f0-9]+' | head -1 | tr -d '\n' | $copy_cmd)\"
|
||||||
|
$FORGIT_LOG_FZF_OPTS
|
||||||
|
"
|
||||||
|
|
||||||
|
if set -q FORGIT_LOG_GRAPH_ENABLE
|
||||||
|
set graph "--graph"
|
||||||
|
else
|
||||||
|
set graph ""
|
||||||
|
end
|
||||||
|
|
||||||
|
eval "git log $graph --color=always --format='%C(auto)%h%d %s %C(black)%C(bold)%cr' $argv $forgit_emojify" |
|
||||||
|
env FZF_DEFAULT_OPTS="$opts" fzf --preview="$cmd"
|
||||||
|
end
|
||||||
|
|
||||||
|
## git diff viewer
|
||||||
|
function forgit::diff
|
||||||
|
forgit::inside_work_tree || return 1
|
||||||
|
if count $argv > /dev/null
|
||||||
|
if git rev-parse "$1" > /dev/null 2>&1
|
||||||
|
#set commit "$1" && set files ("${@:2}")
|
||||||
|
set commit "$1" && set files "$2"
|
||||||
|
else
|
||||||
|
set files "$argv"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
set repo (git rev-parse --show-toplevel)
|
||||||
|
set opts "
|
||||||
|
$FORGIT_FZF_DEFAULT_OPTS
|
||||||
|
+m -0 --bind=\"enter:execute($cmd |env LESS='-R' less)\"
|
||||||
|
$FORGIT_DIFF_FZF_OPTS
|
||||||
|
"
|
||||||
|
|
||||||
|
set cmd "echo {} |sed 's/.*] //' | xargs -I% git diff --color=always $commit -- '$repo/%' | $forgit_diff_pager"
|
||||||
|
|
||||||
|
eval "git diff --name-only $commit -- $files*| sed -E 's/^(.)[[:space:]]+(.*)\$/[\1] \2/'" | env FZF_DEFAULT_OPTS="$opts" fzf --preview="$cmd"
|
||||||
|
end
|
||||||
|
|
||||||
|
# git add selector
|
||||||
|
function forgit::add
|
||||||
|
forgit::inside_work_tree || return 1
|
||||||
|
# Add files if passed as arguments
|
||||||
|
count $argv >/dev/null && git add "$argv" && git status --short && return
|
||||||
|
|
||||||
|
set changed (git config --get-color color.status.changed red)
|
||||||
|
set unmerged (git config --get-color color.status.unmerged red)
|
||||||
|
set untracked (git config --get-color color.status.untracked red)
|
||||||
|
|
||||||
|
set extract_file "
|
||||||
|
sed 's/^[[:space:]]*//' | # remove leading whitespace
|
||||||
|
cut -d ' ' -f 2- | # cut the line after the M or ??, this leaves just the filename
|
||||||
|
sed 's/.* -> //' | # for rename case
|
||||||
|
sed -e 's/^\\\"//' -e 's/\\\"\$//' # removes surrounding quotes
|
||||||
|
"
|
||||||
|
set preview "
|
||||||
|
set file (echo {} | $extract_file)
|
||||||
|
# exit
|
||||||
|
if test (git status -s -- \$file | grep '^??') # diff with /dev/null for untracked files
|
||||||
|
git diff --color=always --no-index -- /dev/null \$file | $forgit_diff_pager | sed '2 s/added:/untracked:/'
|
||||||
|
else
|
||||||
|
git diff --color=always -- \$file | $forgit_diff_pager
|
||||||
|
end
|
||||||
|
"
|
||||||
|
set opts "
|
||||||
|
$FORGIT_FZF_DEFAULT_OPTS
|
||||||
|
-0 -m --nth 2..,..
|
||||||
|
$FORGIT_ADD_FZF_OPTS
|
||||||
|
"
|
||||||
|
set files (git -c color.status=always -c status.relativePaths=true status -su |
|
||||||
|
grep -F -e "$changed" -e "$unmerged" -e "$untracked" |
|
||||||
|
sed -E 's/^(..[^[:space:]]*)[[:space:]]+(.*)\$/[\1] \2/' | # deal with white spaces internal to fname
|
||||||
|
env FZF_DEFAULT_OPTS="$opts" fzf --preview="$preview" |
|
||||||
|
sh -c "$extract_file") # for rename case
|
||||||
|
|
||||||
|
if test -n "$files"
|
||||||
|
for file in $files
|
||||||
|
echo $file | tr '\n' '\0' | xargs -I{} -0 git add {}
|
||||||
|
end
|
||||||
|
git status --short
|
||||||
|
return
|
||||||
|
end
|
||||||
|
echo 'Nothing to add.'
|
||||||
|
end
|
||||||
|
|
||||||
|
## git reset HEAD (unstage) selector
|
||||||
|
function forgit::reset::head
|
||||||
|
forgit::inside_work_tree || return 1
|
||||||
|
set cmd "git diff --cached --color=always -- {} | $forgit_diff_pager"
|
||||||
|
set opts "
|
||||||
|
$FORGIT_FZF_DEFAULT_OPTS
|
||||||
|
-m -0
|
||||||
|
$FORGIT_RESET_HEAD_FZF_OPTS
|
||||||
|
"
|
||||||
|
set files (git diff --cached --name-only --relative | env FZF_DEFAULT_OPTS="$opts" fzf --preview="$cmd")
|
||||||
|
if test -n "$files"
|
||||||
|
for file in $files
|
||||||
|
echo $file | tr '\n' '\0' |xargs -I{} -0 git reset -q HEAD {}
|
||||||
|
end
|
||||||
|
git status --short
|
||||||
|
return
|
||||||
|
end
|
||||||
|
echo 'Nothing to unstage.'
|
||||||
|
end
|
||||||
|
|
||||||
|
# git checkout-restore selector
|
||||||
|
function forgit::checkout_file
|
||||||
|
forgit::inside_work_tree || return 1
|
||||||
|
|
||||||
|
set cmd "git diff --color=always -- {} | $forgit_diff_pager"
|
||||||
|
set opts "
|
||||||
|
$FORGIT_FZF_DEFAULT_OPTS
|
||||||
|
-m -0
|
||||||
|
$FORGIT_CHECKOUT_FZF_OPTS
|
||||||
|
"
|
||||||
|
set git_rev_parse (git rev-parse --show-toplevel)
|
||||||
|
set files (git ls-files --modified "$git_rev_parse" | env FZF_DEFAULT_OPTS="$opts" fzf --preview="$cmd")
|
||||||
|
if test -n "$files"
|
||||||
|
for file in $files
|
||||||
|
echo $file | tr '\n' '\0' | xargs -I{} -0 git checkout -q {}
|
||||||
|
end
|
||||||
|
git status --short
|
||||||
|
return
|
||||||
|
end
|
||||||
|
echo 'Nothing to restore.'
|
||||||
|
end
|
||||||
|
|
||||||
|
# git stash viewer
|
||||||
|
function forgit::stash::show
|
||||||
|
forgit::inside_work_tree || return 1
|
||||||
|
set cmd "echo {} |cut -d: -f1 |xargs -I% git stash show --color=always --ext-diff % |$forgit_diff_pager"
|
||||||
|
set opts "
|
||||||
|
$FORGIT_FZF_DEFAULT_OPTS
|
||||||
|
+s +m -0 --tiebreak=index --bind=\"enter:execute($cmd |env LESS='-R' less)\"
|
||||||
|
$FORGIT_STASH_FZF_OPTS
|
||||||
|
"
|
||||||
|
git stash list | env FZF_DEFAULT_OPTS="$opts" fzf --preview="$cmd"
|
||||||
|
end
|
||||||
|
|
||||||
|
# git clean selector
|
||||||
|
function forgit::clean
|
||||||
|
forgit::inside_work_tree || return 1
|
||||||
|
|
||||||
|
set opts "
|
||||||
|
$FORGIT_FZF_DEFAULT_OPTS
|
||||||
|
-m -0
|
||||||
|
$FORGIT_CLEAN_FZF_OPTS
|
||||||
|
"
|
||||||
|
|
||||||
|
set files (git clean -xdffn $argv| awk '{print $3}'| env FZF_DEFAULT_OPTS="$opts" fzf |sed 's#/$##')
|
||||||
|
|
||||||
|
if test -n "$files"
|
||||||
|
for file in $files
|
||||||
|
echo $file | tr '\n' '\0'| xargs -0 -I{} git clean -xdff {}
|
||||||
|
end
|
||||||
|
git status --short
|
||||||
|
return
|
||||||
|
end
|
||||||
|
echo 'Nothing to clean.'
|
||||||
|
end
|
||||||
|
|
||||||
|
function forgit::cherry::pick
|
||||||
|
forgit::inside_work_tree || return 1
|
||||||
|
set base (git branch --show-current)
|
||||||
|
if not count $argv > /dev/null
|
||||||
|
echo "Please specify target branch"
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
set target $argv[1]
|
||||||
|
set preview "echo {1} | xargs -I% git show --color=always % | $forgit_show_pager"
|
||||||
|
set opts "
|
||||||
|
$FORGIT_FZF_DEFAULT_OPTS
|
||||||
|
-m -0
|
||||||
|
"
|
||||||
|
echo $base
|
||||||
|
echo $target
|
||||||
|
git cherry "$base" "$target" --abbrev -v | cut -d ' ' -f2- |
|
||||||
|
env FZF_DEFAULT_OPTS="$opts" fzf --preview="$preview" | cut -d' ' -f1 |
|
||||||
|
xargs -I% git cherry-pick %
|
||||||
|
end
|
||||||
|
|
||||||
|
# git ignore generator
|
||||||
|
if test -z "$FORGIT_GI_REPO_REMOTE"
|
||||||
|
set -x FORGIT_GI_REPO_REMOTE https://github.com/dvcs/gitignore
|
||||||
|
end
|
||||||
|
|
||||||
|
if test -z "$FORGIT_GI_REPO_LOCAL"
|
||||||
|
if test "XDG_CACHE_HOME"
|
||||||
|
set -x FORGIT_GI_REPO_LOCAL $XDG_CACHE_HOME/forgit/gi/repos/dvcs/gitignore
|
||||||
|
else
|
||||||
|
set -x FORGIT_GI_REPO_LOCAL $HOME/.cache/forgit/gi/repos/dvcs/gitignore
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if test -z "$FORGIT_GI_TEMPLATES"
|
||||||
|
set -x FORGIT_GI_TEMPLATES $FORGIT_GI_REPO_LOCAL/templates
|
||||||
|
end
|
||||||
|
|
||||||
|
function forgit::ignore
|
||||||
|
if not test -d "$FORGIT_GI_REPO_LOCAL"
|
||||||
|
forgit::ignore::update
|
||||||
|
end
|
||||||
|
|
||||||
|
set cmd "$forgit_ignore_pager $FORGIT_GI_TEMPLATES/{2}{,.gitignore} 2>/dev/null"
|
||||||
|
set opts "
|
||||||
|
$FORGIT_FZF_DEFAULT_OPTS
|
||||||
|
-m --preview-window='right:70%'
|
||||||
|
$FORGIT_IGNORE_FZF_OPTS
|
||||||
|
"
|
||||||
|
set IFS '\n'
|
||||||
|
|
||||||
|
set args $argv
|
||||||
|
if not count $argv > /dev/null
|
||||||
|
set args (forgit::ignore::list | nl -nrn -w4 -s' ' |
|
||||||
|
env FZF_DEFAULT_OPTS="$opts" fzf --preview="$cmd" |awk '{print $2}')
|
||||||
|
end
|
||||||
|
|
||||||
|
if not count $args > /dev/null
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
forgit::ignore::get $args
|
||||||
|
end
|
||||||
|
|
||||||
|
function forgit::ignore::update
|
||||||
|
if test -d "$FORGIT_GI_REPO_LOCAL"
|
||||||
|
forgit::info 'Updating gitignore repo...'
|
||||||
|
set pull_result (git -C "$FORGIT_GI_REPO_LOCAL" pull --no-rebase --ff)
|
||||||
|
test -n "$pull_result" || return 1
|
||||||
|
else
|
||||||
|
forgit::info 'Initializing gitignore repo...'
|
||||||
|
git clone --depth=1 "$FORGIT_GI_REPO_REMOTE" "$FORGIT_GI_REPO_LOCAL"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function forgit::ignore::get
|
||||||
|
for item in $argv
|
||||||
|
set filename (find -L "$FORGIT_GI_TEMPLATES" -type f \( -iname "$item.gitignore" -o -iname "$item}" \) -print -quit)
|
||||||
|
if test -n "$filename"
|
||||||
|
set header $filename && set header (echo $filename | sed 's/.*\.//')
|
||||||
|
echo "### $header" && cat "$filename" && echo
|
||||||
|
else
|
||||||
|
forgit::warn "No gitignore template found for '$item'." && continue
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function forgit::ignore::list
|
||||||
|
find "$FORGIT_GI_TEMPLATES" -print |sed -e 's#.gitignore$##' -e 's#.*/##' | sort -fu
|
||||||
|
end
|
||||||
|
|
||||||
|
function forgit::ignore::clean
|
||||||
|
setopt localoptions rmstarsilent
|
||||||
|
[[ -d "$FORGIT_GI_REPO_LOCAL" ]] && rm -rf "$FORGIT_GI_REPO_LOCAL"
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
function readme -a owner repo branch
|
||||||
|
if test -z "$branch"
|
||||||
|
set branch master
|
||||||
|
end
|
||||||
|
curl -s https://raw.githubusercontent.com/$owner/$repo/$branch/README.md
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
function EditDailyLog
|
||||||
|
vim (LogDirectory)/(date +%d-%B).md
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
function LogDirectory
|
||||||
|
echo ~/Documents/Session\ Notes/(date +%B)
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
function OpenLogDirectory
|
||||||
|
tmux split-window -h -c (LogDirectory)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
function RunBackup
|
||||||
|
echo Pushing ~/.vim to GitHub
|
||||||
|
cd ~/.vim
|
||||||
|
git add .
|
||||||
|
git commit --ammend -m "Running Backup: (date +%D)
|
||||||
|
git push origin master
|
||||||
|
|
||||||
|
echo Pushing ~/.config/fish to GitHub
|
||||||
|
cd ~/.config/fish
|
||||||
|
git add config.fish functions/
|
||||||
|
git commit --ammend -m "Running Backup: (date +%D)
|
||||||
|
git push origin master
|
||||||
|
|
||||||
|
echo Pushing ~/.config/tmux to GitHub
|
||||||
|
cd ~/.config/tmux
|
||||||
|
git add .
|
||||||
|
git commit --ammend -m "Running Backup: (date +%D)
|
||||||
|
git push origin master
|
||||||
|
|
||||||
|
echo Pushing ~/Documents/Notes to GitHub
|
||||||
|
cd ~/Documents/Notes/
|
||||||
|
git add .
|
||||||
|
git commit --ammend -m "Running Backup: (date +%D)
|
||||||
|
git push origin master
|
||||||
|
|
||||||
|
cp ~/Documents ~/sfuhome/Documents
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
function create_daily_log
|
||||||
|
touch (date +%d-%B).md
|
||||||
|
end
|
||||||
|
|
@ -1 +1,6 @@
|
||||||
jorgebucaran/nvm.fish
|
jorgebucaran/nvm.fish
|
||||||
|
tuvistavie/fish-completion-helpers
|
||||||
|
~/.config/fish/fisher/fish-github
|
||||||
|
~/.config/fish/fisher/fish-utils
|
||||||
|
~/.config/fish/fisher/fish-audio
|
||||||
|
~/.config/fish/fisher/fish-fzf
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,3 +0,0 @@
|
||||||
function EditDailyLog
|
|
||||||
vim (LogDirectory)/(date +%d-%B).md
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-utils/EditDailyLog.fish
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
function LogDirectory
|
|
||||||
echo ~/Documents/Session\ Notes/(date +%B)
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-utils/LogDirectory.fish
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
function OpenLogDirectory
|
|
||||||
tmux split-window -h -c (LogDirectory)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-utils/OpenLogDirectory.fish
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
function RunBackup
|
|
||||||
echo Pushing ~/.vim to GitHub
|
|
||||||
cd ~/.vim
|
|
||||||
git add .
|
|
||||||
git commit --ammend -m "Running Backup: (date +%D)
|
|
||||||
git push origin master
|
|
||||||
|
|
||||||
echo Pushing ~/.config/fish to GitHub
|
|
||||||
cd ~/.config/fish
|
|
||||||
git add config.fish functions/
|
|
||||||
git commit --ammend -m "Running Backup: (date +%D)
|
|
||||||
git push origin master
|
|
||||||
|
|
||||||
echo Pushing ~/.config/tmux to GitHub
|
|
||||||
cd ~/.config/tmux
|
|
||||||
git add .
|
|
||||||
git commit --ammend -m "Running Backup: (date +%D)
|
|
||||||
git push origin master
|
|
||||||
|
|
||||||
echo Pushing ~/Documents/Notes to GitHub
|
|
||||||
cd ~/Documents/Notes/
|
|
||||||
git add .
|
|
||||||
git commit --ammend -m "Running Backup: (date +%D)
|
|
||||||
git push origin master
|
|
||||||
|
|
||||||
cp ~/Documents ~/sfuhome/Documents
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-utils/RunBackup.fish
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
function __fish_prog_needs_command
|
||||||
|
set -l cmd (commandline -opc)
|
||||||
|
if test (count $cmd) -eq 1
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
function __fish_prog_using_command
|
||||||
|
set -l cmd (commandline -opc)
|
||||||
|
if test (count $cmd) -gt 1
|
||||||
|
if test $argv[1] = $cmd[2]
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
# helper function for __fzf_search_shell_variables
|
|
||||||
function __fzf_display_value_or_error --argument-names variable_name --description "Displays either the value of the variable passed in, or an informative message if it is not available."
|
|
||||||
if set --query $variable_name
|
|
||||||
echo $$variable_name
|
|
||||||
else
|
|
||||||
set_color red
|
|
||||||
echo "$variable_name was not exported to this process so its value cannot be displayed." >&2
|
|
||||||
set_color normal
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-fzf/__fzf_display_value_or_error.fish
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
# helper function for __fzf_search_current_dir
|
|
||||||
function __fzf_preview_file --argument-names file_path --description "Prints a preview for the given file based on its file type."
|
|
||||||
if test -f "$file_path" # regular file
|
|
||||||
bat --style=numbers --color=always "$file_path"
|
|
||||||
else if test -d "$file_path" # directory
|
|
||||||
set --local CLICOLOR_FORCE true
|
|
||||||
ls -a "$file_path"
|
|
||||||
else if test -L "$file_path" # symlink
|
|
||||||
# notify user and recurse on the target of the symlink, which can be any of these file types
|
|
||||||
set -l target_path (realpath $file_path)
|
|
||||||
|
|
||||||
set_color yellow
|
|
||||||
echo "'$file_path' is a symlink to '$target_path'."
|
|
||||||
set_color normal
|
|
||||||
|
|
||||||
__fzf_preview_file "$target_path"
|
|
||||||
else if test -c "$file_path"
|
|
||||||
__fzf_report_file_type "$file_path" "character device file"
|
|
||||||
else if test -b "$file_path"
|
|
||||||
__fzf_report_file_type "$file_path" "block device file"
|
|
||||||
else if test -S "$file_path"
|
|
||||||
__fzf_report_file_type "$file_path" "socket"
|
|
||||||
else if test -p "$file_path"
|
|
||||||
__fzf_report_file_type "$file_path" "named pipe"
|
|
||||||
else
|
|
||||||
echo "Unexpected file symbol $file_type_char. Please open an issue at https://github.com/patrickf3139/fzf.fish." >&2
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-fzf/__fzf_preview_file.fish
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
# helper function for __fzf_preview_file
|
|
||||||
function __fzf_report_file_type --argument-names file_path file_type --description "Explain the file type for a file."
|
|
||||||
set_color red
|
|
||||||
echo "Cannot preview '$file_path': it is a $file_type."
|
|
||||||
set_color normal
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-fzf/__fzf_report_file_type.fish
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
# originally implemented and transposed from https://github.com/patrickf3139/dotfiles/pull/11
|
|
||||||
function __fzf_search_current_dir --description "Search the current directory using fzf and fd. Insert the selected relative file path into the commandline at the cursor."
|
|
||||||
# Make sure that fzf uses fish to execute __fzf_preview_file.
|
|
||||||
# See similar comment in __fzf_search_shell_variables.fish.
|
|
||||||
set --local --export SHELL (command --search fish)
|
|
||||||
set file_path_selected (
|
|
||||||
fd --hidden --follow --color=always --exclude=.git 2> /dev/null |
|
|
||||||
fzf --ansi --preview='__fzf_preview_file {}'
|
|
||||||
)
|
|
||||||
|
|
||||||
if test $status -eq 0
|
|
||||||
commandline --insert (echo $file_path_selected | string escape)
|
|
||||||
end
|
|
||||||
|
|
||||||
commandline --function repaint
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-fzf/__fzf_search_current_dir.fish
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
# Originally implemented in and transposed from https://github.com/patrickf3139/dotfiles/pull/2
|
|
||||||
function __fzf_search_git_log --description "Search the git log of the current git repository. Insert the selected commit hash into the commandline at the cursor."
|
|
||||||
if not git rev-parse --git-dir >/dev/null 2>&1
|
|
||||||
echo '__fzf_search_git_log: Not in a git repository.' >&2
|
|
||||||
else
|
|
||||||
set selected_log_line (
|
|
||||||
# see documentation for git format placeholders at https://git-scm.com/docs/git-log#Documentation/git-log.txt-emnem
|
|
||||||
# %h gives you the abbreviated commit hash, which is useful for saving screen space, but we will have to expand it later below
|
|
||||||
git log --color=always --format=format:'%C(bold blue)%h%C(reset) - %C(cyan)%as%C(reset) %C(yellow)%d%C(reset) %C(normal)%s%C(reset) %C(dim normal)[%an]%C(reset)' | \
|
|
||||||
fzf --ansi --tiebreak=index --preview='git show --color=always (string split --max 1 " " {})[1]'
|
|
||||||
)
|
|
||||||
if test $status -eq 0
|
|
||||||
set abbreviated_commit_hash (string split --max 1 " " $selected_log_line)[1]
|
|
||||||
set commit_hash (git rev-parse $abbreviated_commit_hash)
|
|
||||||
commandline --insert $commit_hash
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
commandline --function repaint
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-fzf/__fzf_search_git_log.fish
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
function __fzf_search_git_status --description "Search the git status of the current git repository. Insert the selected file paths into the commandline at the cursor."
|
|
||||||
if not git rev-parse --git-dir >/dev/null 2>&1
|
|
||||||
echo '__fzf_search_git_status: Not in a git repository.' >&2
|
|
||||||
else
|
|
||||||
set selected_paths (
|
|
||||||
# Pass configuration color.status=always to force status to use colors even though output is sent to a pipe
|
|
||||||
git -c color.status=always status --short |
|
|
||||||
fzf --ansi --multi
|
|
||||||
)
|
|
||||||
if test $status -eq 0
|
|
||||||
# git status --short automatically escapes the paths of most files for us so not going to bother trying to handle
|
|
||||||
# the few edges cases of weird file names that should be extremely rare (e.g. "this;needs;escaping")
|
|
||||||
for path in $selected_paths
|
|
||||||
if test (string sub --length 1 $path) = 'R'
|
|
||||||
# path has been renamed and looks like "R LICENSE -> LICENSE.md"
|
|
||||||
# extract the path to use from after the arrow
|
|
||||||
set cleaned_path (string split -- "-> " $path)[-1]
|
|
||||||
else
|
|
||||||
set cleaned_path (string sub --start=4 $path)
|
|
||||||
end
|
|
||||||
# add a space after each path to keep them separated when inserted
|
|
||||||
set cleaned_path_padded "$cleaned_path "
|
|
||||||
commandline --insert $cleaned_path_padded
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
commandline --function repaint
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-fzf/__fzf_search_git_status.fish
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
# originally implemented and transposed from https://github.com/patrickf3139/dotfiles/pull/11
|
|
||||||
function __fzf_search_history --description "Search command history using fzf. Replace the commandline with the selected command."
|
|
||||||
# history merge incorporates history changes from other fish sessions
|
|
||||||
history merge
|
|
||||||
set command_with_ts (
|
|
||||||
# Reference https://devhints.io/strftime to understand strftime format symbols
|
|
||||||
history --null --show-time="%m/%e %H:%M:%S | " |
|
|
||||||
fzf --read0 --tiebreak=index --query=(commandline)
|
|
||||||
)
|
|
||||||
|
|
||||||
if test $status -eq 0
|
|
||||||
set command_selected (string split --max 1 " | " $command_with_ts)[2]
|
|
||||||
commandline --replace $command_selected
|
|
||||||
end
|
|
||||||
|
|
||||||
commandline --function repaint
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-fzf/__fzf_search_history.fish
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
function __fzf_search_shell_variables --description "Search and inspect shell variables using fzf. Insert the selected variable into the commandline at the cursor."
|
|
||||||
# Make sure that fzf uses fish to execute __echo_value_or_print_message, which
|
|
||||||
# is an autoloaded fish function so doesn't exist in other shells.
|
|
||||||
# Using --local so that it does not clobber SHELL outside of this function.
|
|
||||||
set --local --export SHELL (command --search fish)
|
|
||||||
|
|
||||||
# Pipe the names of all shell variables to fzf and attempt to display the value
|
|
||||||
# of the selected variable in fzf's preview window.
|
|
||||||
# Non-exported variables will not be accessible to the fzf process, in which case
|
|
||||||
# __echo_value_or_print_message will print an informative message in lieu of the value.
|
|
||||||
set variable_name (
|
|
||||||
set --names |
|
|
||||||
fzf --preview '__fzf_display_value_or_error {}'
|
|
||||||
)
|
|
||||||
|
|
||||||
if test $status -eq 0
|
|
||||||
commandline --insert $variable_name
|
|
||||||
end
|
|
||||||
|
|
||||||
commandline --function repaint
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-fzf/__fzf_search_shell_variables.fish
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
# Defined in /tmp/fish.azx9vq/__github_add_org.fish @ line 1
|
|
||||||
function __github_add_org --description 'Add an organization name to the local share fzf file.' --argument org
|
|
||||||
if ! test -n "$org"
|
|
||||||
echo "Please provide and org name!"
|
|
||||||
return 1
|
|
||||||
else
|
|
||||||
echo $org >> ~/.local/share/fzf/github_orgs
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-github/__github_add_org.fish
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
# Defined in /tmp/fish.mAOD6Y/__github_get_org_repos.fish @ line 2
|
|
||||||
function __github_get_org_repos --description 'Return a list of all the github repos owned by a github organization.' --argument org
|
|
||||||
if ! test -n "$org"
|
|
||||||
echo "Please provide a github organization name."
|
|
||||||
return 1
|
|
||||||
else
|
|
||||||
curl "https://api.github.com/orgs/$org/repos?per_page=100&page=1" | jq '.[].full_name' | awk -F'"' '{print $2}'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-github/__github_get_org_repos.fish
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
function create_daily_log
|
|
||||||
touch (date +%d-%B).md
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-utils/create_daily_log.fish
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
function -d "Fuzzy change directory" fcd
|
|
||||||
if set -q argv[1]
|
|
||||||
set searchdir $argv[1]
|
|
||||||
else
|
|
||||||
set searchdir $HOME
|
|
||||||
end
|
|
||||||
|
|
||||||
# https://github.com/fish-shell/fish-shell/issues/1362
|
|
||||||
set -l tmpfile (mktemp)
|
|
||||||
find $searchdir \( ! -regex '.*/\..*' \) ! -name __pycache__ -type d | fzf > $tmpfile
|
|
||||||
set -l destdir (cat $tmpfile)
|
|
||||||
rm -f $tmpfile
|
|
||||||
|
|
||||||
if test -z "$destdir"
|
|
||||||
return 1
|
|
||||||
end
|
|
||||||
|
|
||||||
cd $destdir
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-github/fcd.fish
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
# Defined in /tmp/fish.yoQzI0/fclone.fish @ line 2
|
|
||||||
function fclone --argument org
|
|
||||||
if ! test -n "$org"
|
|
||||||
set org_file ~/.local/share/fzf/github_orgs
|
|
||||||
if ! test -e $org_file
|
|
||||||
echo -n "Please provide an organization name either as an argument to this command or in a list at $org_file"
|
|
||||||
return 1
|
|
||||||
else
|
|
||||||
set org (cat $org_file | fzf-tmux -e --header="Please select an organization. Set additional orgs in $org_file")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
set repo (__github_get_org_repos $org | fzf-tmux --header="Please select a repository to clone.")
|
|
||||||
if test -n "$repo"
|
|
||||||
echo "Cloning '$repo' from Github"
|
|
||||||
git clone "https://github.com/$repo.git"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-github/fclone.fish
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
# Defined in /tmp/fish.T4Z5Kp/fclone.fish @ line 2
|
|
||||||
function fhub --argument org
|
|
||||||
if ! test -n "$org"
|
|
||||||
set org_file ~/.local/share/fzf/github_orgs
|
|
||||||
if ! test -e $org_file
|
|
||||||
echo -n "Please provide an organization name either as an argument to this command or in a list at $org_file"
|
|
||||||
return 1
|
|
||||||
else
|
|
||||||
set org (cat $org_file | fzf-tmux -e --header="Please select an organization. Set additional orgs in $org_file")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
set repo (__github_get_org_repos $org | fzf-tmux --header="Please select a repository to clone.")
|
|
||||||
if test -n "$repo"
|
|
||||||
echo "Opening '$repo' in Web Browser"
|
|
||||||
hub browse $repo
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-github/fhub.fish
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
function fkill -d "Fuzzy kill"
|
|
||||||
set pid (ps -ef | sed 1d | fzf -m | awk '{print $2}')
|
|
||||||
|
|
||||||
if test -n "$pid"
|
|
||||||
echo $pid | xargs kill -9
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-github/fkill.fish
|
||||||
|
|
@ -1,299 +0,0 @@
|
||||||
#!/usr/local/bin/fish
|
|
||||||
# MIT (c) Chris Apple
|
|
||||||
|
|
||||||
function forgit::warn
|
|
||||||
printf "%b[Warn]%b %s\n" '\e[0;33m' '\e[0m' "$argv" >&2;
|
|
||||||
end
|
|
||||||
|
|
||||||
function forgit::info
|
|
||||||
printf "%b[Info]%b %s\n" '\e[0;32m' '\e[0m' "$argv" >&2;
|
|
||||||
end
|
|
||||||
|
|
||||||
function forgit::inside_work_tree
|
|
||||||
git rev-parse --is-inside-work-tree >/dev/null;
|
|
||||||
end
|
|
||||||
|
|
||||||
set forgit_pager "$FORGIT_PAGER"
|
|
||||||
set forgit_show_pager "$FORGIT_SHOW_PAGER"
|
|
||||||
set forgit_diff_pager "$FORGIT_DIFF_PAGER"
|
|
||||||
set forgit_ignore_pager "$FORGIT_IGNORE_PAGER"
|
|
||||||
|
|
||||||
test -z "$forgit_pager"; and set forgit_pager (git config core.pager || echo 'cat')
|
|
||||||
test -z "$forgit_show_pager"; and set forgit_show_pager (git config pager.show || echo "$forgit_pager")
|
|
||||||
test -z "$forgit_diff_pager"; and set forgit_diff_pager (git config pager.diff || echo "$forgit_pager")
|
|
||||||
test -z "$forgit_ignore_pager"; and set forgit_ignore_pager (type -q bat >/dev/null 2>&1 && echo 'bat -l gitignore --color=always' || echo 'cat')
|
|
||||||
|
|
||||||
# https://github.com/wfxr/emoji-cli
|
|
||||||
type -q emojify >/dev/null 2>&1 && set forgit_emojify '|emojify'
|
|
||||||
|
|
||||||
# git commit viewer
|
|
||||||
function forgit::log
|
|
||||||
forgit::inside_work_tree || return 1
|
|
||||||
|
|
||||||
set files (echo $argv | sed -nE 's/.* -- (.*)/\1/p')
|
|
||||||
set cmd "echo {} |grep -Eo '[a-f0-9]+' |head -1 |xargs -I% git show --color=always % -- $files | $forgit_show_pager"
|
|
||||||
|
|
||||||
if test -n "$FORGIT_COPY_CMD"
|
|
||||||
set copy_cmd $FORGIT_COPY_CMD
|
|
||||||
else
|
|
||||||
set copy_cmd pbcopy
|
|
||||||
end
|
|
||||||
|
|
||||||
set opts "
|
|
||||||
$FORGIT_FZF_DEFAULT_OPTS
|
|
||||||
+s +m --tiebreak=index
|
|
||||||
--bind=\"enter:execute($cmd |env LESS='-R' less)\"
|
|
||||||
--bind=\"ctrl-y:execute-silent(echo {} |grep -Eo '[a-f0-9]+' | head -1 | tr -d '\n' | $copy_cmd)\"
|
|
||||||
$FORGIT_LOG_FZF_OPTS
|
|
||||||
"
|
|
||||||
|
|
||||||
if set -q FORGIT_LOG_GRAPH_ENABLE
|
|
||||||
set graph "--graph"
|
|
||||||
else
|
|
||||||
set graph ""
|
|
||||||
end
|
|
||||||
|
|
||||||
eval "git log $graph --color=always --format='%C(auto)%h%d %s %C(black)%C(bold)%cr' $argv $forgit_emojify" |
|
|
||||||
env FZF_DEFAULT_OPTS="$opts" fzf --preview="$cmd"
|
|
||||||
end
|
|
||||||
|
|
||||||
## git diff viewer
|
|
||||||
function forgit::diff
|
|
||||||
forgit::inside_work_tree || return 1
|
|
||||||
if count $argv > /dev/null
|
|
||||||
if git rev-parse "$1" > /dev/null 2>&1
|
|
||||||
#set commit "$1" && set files ("${@:2}")
|
|
||||||
set commit "$1" && set files "$2"
|
|
||||||
else
|
|
||||||
set files "$argv"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
set repo (git rev-parse --show-toplevel)
|
|
||||||
set opts "
|
|
||||||
$FORGIT_FZF_DEFAULT_OPTS
|
|
||||||
+m -0 --bind=\"enter:execute($cmd |env LESS='-R' less)\"
|
|
||||||
$FORGIT_DIFF_FZF_OPTS
|
|
||||||
"
|
|
||||||
|
|
||||||
set cmd "echo {} |sed 's/.*] //' | xargs -I% git diff --color=always $commit -- '$repo/%' | $forgit_diff_pager"
|
|
||||||
|
|
||||||
eval "git diff --name-only $commit -- $files*| sed -E 's/^(.)[[:space:]]+(.*)\$/[\1] \2/'" | env FZF_DEFAULT_OPTS="$opts" fzf --preview="$cmd"
|
|
||||||
end
|
|
||||||
|
|
||||||
# git add selector
|
|
||||||
function forgit::add
|
|
||||||
forgit::inside_work_tree || return 1
|
|
||||||
# Add files if passed as arguments
|
|
||||||
count $argv >/dev/null && git add "$argv" && git status --short && return
|
|
||||||
|
|
||||||
set changed (git config --get-color color.status.changed red)
|
|
||||||
set unmerged (git config --get-color color.status.unmerged red)
|
|
||||||
set untracked (git config --get-color color.status.untracked red)
|
|
||||||
|
|
||||||
set extract_file "
|
|
||||||
sed 's/^[[:space:]]*//' | # remove leading whitespace
|
|
||||||
cut -d ' ' -f 2- | # cut the line after the M or ??, this leaves just the filename
|
|
||||||
sed 's/.* -> //' | # for rename case
|
|
||||||
sed -e 's/^\\\"//' -e 's/\\\"\$//' # removes surrounding quotes
|
|
||||||
"
|
|
||||||
set preview "
|
|
||||||
set file (echo {} | $extract_file)
|
|
||||||
# exit
|
|
||||||
if test (git status -s -- \$file | grep '^??') # diff with /dev/null for untracked files
|
|
||||||
git diff --color=always --no-index -- /dev/null \$file | $forgit_diff_pager | sed '2 s/added:/untracked:/'
|
|
||||||
else
|
|
||||||
git diff --color=always -- \$file | $forgit_diff_pager
|
|
||||||
end
|
|
||||||
"
|
|
||||||
set opts "
|
|
||||||
$FORGIT_FZF_DEFAULT_OPTS
|
|
||||||
-0 -m --nth 2..,..
|
|
||||||
$FORGIT_ADD_FZF_OPTS
|
|
||||||
"
|
|
||||||
set files (git -c color.status=always -c status.relativePaths=true status -su |
|
|
||||||
grep -F -e "$changed" -e "$unmerged" -e "$untracked" |
|
|
||||||
sed -E 's/^(..[^[:space:]]*)[[:space:]]+(.*)\$/[\1] \2/' | # deal with white spaces internal to fname
|
|
||||||
env FZF_DEFAULT_OPTS="$opts" fzf --preview="$preview" |
|
|
||||||
sh -c "$extract_file") # for rename case
|
|
||||||
|
|
||||||
if test -n "$files"
|
|
||||||
for file in $files
|
|
||||||
echo $file | tr '\n' '\0' | xargs -I{} -0 git add {}
|
|
||||||
end
|
|
||||||
git status --short
|
|
||||||
return
|
|
||||||
end
|
|
||||||
echo 'Nothing to add.'
|
|
||||||
end
|
|
||||||
|
|
||||||
## git reset HEAD (unstage) selector
|
|
||||||
function forgit::reset::head
|
|
||||||
forgit::inside_work_tree || return 1
|
|
||||||
set cmd "git diff --cached --color=always -- {} | $forgit_diff_pager"
|
|
||||||
set opts "
|
|
||||||
$FORGIT_FZF_DEFAULT_OPTS
|
|
||||||
-m -0
|
|
||||||
$FORGIT_RESET_HEAD_FZF_OPTS
|
|
||||||
"
|
|
||||||
set files (git diff --cached --name-only --relative | env FZF_DEFAULT_OPTS="$opts" fzf --preview="$cmd")
|
|
||||||
if test -n "$files"
|
|
||||||
for file in $files
|
|
||||||
echo $file | tr '\n' '\0' |xargs -I{} -0 git reset -q HEAD {}
|
|
||||||
end
|
|
||||||
git status --short
|
|
||||||
return
|
|
||||||
end
|
|
||||||
echo 'Nothing to unstage.'
|
|
||||||
end
|
|
||||||
|
|
||||||
# git checkout-restore selector
|
|
||||||
function forgit::checkout_file
|
|
||||||
forgit::inside_work_tree || return 1
|
|
||||||
|
|
||||||
set cmd "git diff --color=always -- {} | $forgit_diff_pager"
|
|
||||||
set opts "
|
|
||||||
$FORGIT_FZF_DEFAULT_OPTS
|
|
||||||
-m -0
|
|
||||||
$FORGIT_CHECKOUT_FZF_OPTS
|
|
||||||
"
|
|
||||||
set git_rev_parse (git rev-parse --show-toplevel)
|
|
||||||
set files (git ls-files --modified "$git_rev_parse" | env FZF_DEFAULT_OPTS="$opts" fzf --preview="$cmd")
|
|
||||||
if test -n "$files"
|
|
||||||
for file in $files
|
|
||||||
echo $file | tr '\n' '\0' | xargs -I{} -0 git checkout -q {}
|
|
||||||
end
|
|
||||||
git status --short
|
|
||||||
return
|
|
||||||
end
|
|
||||||
echo 'Nothing to restore.'
|
|
||||||
end
|
|
||||||
|
|
||||||
# git stash viewer
|
|
||||||
function forgit::stash::show
|
|
||||||
forgit::inside_work_tree || return 1
|
|
||||||
set cmd "echo {} |cut -d: -f1 |xargs -I% git stash show --color=always --ext-diff % |$forgit_diff_pager"
|
|
||||||
set opts "
|
|
||||||
$FORGIT_FZF_DEFAULT_OPTS
|
|
||||||
+s +m -0 --tiebreak=index --bind=\"enter:execute($cmd |env LESS='-R' less)\"
|
|
||||||
$FORGIT_STASH_FZF_OPTS
|
|
||||||
"
|
|
||||||
git stash list | env FZF_DEFAULT_OPTS="$opts" fzf --preview="$cmd"
|
|
||||||
end
|
|
||||||
|
|
||||||
# git clean selector
|
|
||||||
function forgit::clean
|
|
||||||
forgit::inside_work_tree || return 1
|
|
||||||
|
|
||||||
set opts "
|
|
||||||
$FORGIT_FZF_DEFAULT_OPTS
|
|
||||||
-m -0
|
|
||||||
$FORGIT_CLEAN_FZF_OPTS
|
|
||||||
"
|
|
||||||
|
|
||||||
set files (git clean -xdffn $argv| awk '{print $3}'| env FZF_DEFAULT_OPTS="$opts" fzf |sed 's#/$##')
|
|
||||||
|
|
||||||
if test -n "$files"
|
|
||||||
for file in $files
|
|
||||||
echo $file | tr '\n' '\0'| xargs -0 -I{} git clean -xdff {}
|
|
||||||
end
|
|
||||||
git status --short
|
|
||||||
return
|
|
||||||
end
|
|
||||||
echo 'Nothing to clean.'
|
|
||||||
end
|
|
||||||
|
|
||||||
function forgit::cherry::pick
|
|
||||||
forgit::inside_work_tree || return 1
|
|
||||||
set base (git branch --show-current)
|
|
||||||
if not count $argv > /dev/null
|
|
||||||
echo "Please specify target branch"
|
|
||||||
return 1
|
|
||||||
end
|
|
||||||
set target $argv[1]
|
|
||||||
set preview "echo {1} | xargs -I% git show --color=always % | $forgit_show_pager"
|
|
||||||
set opts "
|
|
||||||
$FORGIT_FZF_DEFAULT_OPTS
|
|
||||||
-m -0
|
|
||||||
"
|
|
||||||
echo $base
|
|
||||||
echo $target
|
|
||||||
git cherry "$base" "$target" --abbrev -v | cut -d ' ' -f2- |
|
|
||||||
env FZF_DEFAULT_OPTS="$opts" fzf --preview="$preview" | cut -d' ' -f1 |
|
|
||||||
xargs -I% git cherry-pick %
|
|
||||||
end
|
|
||||||
|
|
||||||
# git ignore generator
|
|
||||||
if test -z "$FORGIT_GI_REPO_REMOTE"
|
|
||||||
set -x FORGIT_GI_REPO_REMOTE https://github.com/dvcs/gitignore
|
|
||||||
end
|
|
||||||
|
|
||||||
if test -z "$FORGIT_GI_REPO_LOCAL"
|
|
||||||
if test "XDG_CACHE_HOME"
|
|
||||||
set -x FORGIT_GI_REPO_LOCAL $XDG_CACHE_HOME/forgit/gi/repos/dvcs/gitignore
|
|
||||||
else
|
|
||||||
set -x FORGIT_GI_REPO_LOCAL $HOME/.cache/forgit/gi/repos/dvcs/gitignore
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if test -z "$FORGIT_GI_TEMPLATES"
|
|
||||||
set -x FORGIT_GI_TEMPLATES $FORGIT_GI_REPO_LOCAL/templates
|
|
||||||
end
|
|
||||||
|
|
||||||
function forgit::ignore
|
|
||||||
if not test -d "$FORGIT_GI_REPO_LOCAL"
|
|
||||||
forgit::ignore::update
|
|
||||||
end
|
|
||||||
|
|
||||||
set cmd "$forgit_ignore_pager $FORGIT_GI_TEMPLATES/{2}{,.gitignore} 2>/dev/null"
|
|
||||||
set opts "
|
|
||||||
$FORGIT_FZF_DEFAULT_OPTS
|
|
||||||
-m --preview-window='right:70%'
|
|
||||||
$FORGIT_IGNORE_FZF_OPTS
|
|
||||||
"
|
|
||||||
set IFS '\n'
|
|
||||||
|
|
||||||
set args $argv
|
|
||||||
if not count $argv > /dev/null
|
|
||||||
set args (forgit::ignore::list | nl -nrn -w4 -s' ' |
|
|
||||||
env FZF_DEFAULT_OPTS="$opts" fzf --preview="$cmd" |awk '{print $2}')
|
|
||||||
end
|
|
||||||
|
|
||||||
if not count $args > /dev/null
|
|
||||||
return 1
|
|
||||||
end
|
|
||||||
|
|
||||||
forgit::ignore::get $args
|
|
||||||
end
|
|
||||||
|
|
||||||
function forgit::ignore::update
|
|
||||||
if test -d "$FORGIT_GI_REPO_LOCAL"
|
|
||||||
forgit::info 'Updating gitignore repo...'
|
|
||||||
set pull_result (git -C "$FORGIT_GI_REPO_LOCAL" pull --no-rebase --ff)
|
|
||||||
test -n "$pull_result" || return 1
|
|
||||||
else
|
|
||||||
forgit::info 'Initializing gitignore repo...'
|
|
||||||
git clone --depth=1 "$FORGIT_GI_REPO_REMOTE" "$FORGIT_GI_REPO_LOCAL"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function forgit::ignore::get
|
|
||||||
for item in $argv
|
|
||||||
set filename (find -L "$FORGIT_GI_TEMPLATES" -type f \( -iname "$item.gitignore" -o -iname "$item}" \) -print -quit)
|
|
||||||
if test -n "$filename"
|
|
||||||
set header $filename && set header (echo $filename | sed 's/.*\.//')
|
|
||||||
echo "### $header" && cat "$filename" && echo
|
|
||||||
else
|
|
||||||
forgit::warn "No gitignore template found for '$item'." && continue
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function forgit::ignore::list
|
|
||||||
find "$FORGIT_GI_TEMPLATES" -print |sed -e 's#.gitignore$##' -e 's#.*/##' | sort -fu
|
|
||||||
end
|
|
||||||
|
|
||||||
function forgit::ignore::clean
|
|
||||||
setopt localoptions rmstarsilent
|
|
||||||
[[ -d "$FORGIT_GI_REPO_LOCAL" ]] && rm -rf "$FORGIT_GI_REPO_LOCAL"
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-github/forgit.plugin.fish
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
# https://github.com/junegunn/fzf/wiki/Examples-(fish)
|
|
||||||
function fzf-bcd-widget -d 'cd backwards'
|
|
||||||
pwd | awk -v RS=/ '/\n/ {exit} {p=p $0 "/"; print p}' | tac | eval (__fzfcmd) +m --select-1 --exit-0 $FZF_BCD_OPTS | read -l result
|
|
||||||
[ "$result" ]; and cd $result
|
|
||||||
commandline -f repaint
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-fzf/fzf-bcd-widget.fish
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
# From https://github.com/junegunn/fzf/wiki/Examples-(fish)
|
|
||||||
function fzf-cdhist-widget -d 'cd to one of the previously visited locations'
|
|
||||||
# Clear non-existent folders from cdhist.
|
|
||||||
set -l buf
|
|
||||||
for i in (seq 1 (count $dirprev))
|
|
||||||
set -l dir $dirprev[$i]
|
|
||||||
if test -d $dir
|
|
||||||
set buf $buf $dir
|
|
||||||
end
|
|
||||||
end
|
|
||||||
set dirprev $buf
|
|
||||||
string join \n $dirprev | tac | sed 1d | eval (__fzfcmd) +m --tiebreak=index --toggle-sort=ctrl-r $FZF_CDHIST_OPTS | read -l result
|
|
||||||
[ "$result" ]; and cd $result
|
|
||||||
commandline -f repaint
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-fzf/fzf-cdhist-widget.fish
|
||||||
|
|
@ -1,46 +0,0 @@
|
||||||
# From https://github.com/junegunn/fzf/wiki/Examples-(fish)
|
|
||||||
function fzf-complete -d 'fzf completion and print selection back to commandline'
|
|
||||||
# As of 2.6, fish's "complete" function does not understand
|
|
||||||
# subcommands. Instead, we use the same hack as __fish_complete_subcommand and
|
|
||||||
# extract the subcommand manually.
|
|
||||||
set -l cmd (commandline -co) (commandline -ct)
|
|
||||||
switch $cmd[1]
|
|
||||||
case env sudo
|
|
||||||
for i in (seq 2 (count $cmd))
|
|
||||||
switch $cmd[$i]
|
|
||||||
case '-*'
|
|
||||||
case '*=*'
|
|
||||||
case '*'
|
|
||||||
set cmd $cmd[$i..-1]
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
set cmd (string join -- ' ' $cmd)
|
|
||||||
|
|
||||||
set -l complist (complete -C$cmd)
|
|
||||||
set -l result
|
|
||||||
string join -- \n $complist | sort | eval (__fzfcmd) -m --select-1 --exit-0 --header '(commandline)' | cut -f1 | while read -l r; set result $result $r; end
|
|
||||||
|
|
||||||
set prefix (string sub -s 1 -l 1 -- (commandline -t))
|
|
||||||
for i in (seq (count $result))
|
|
||||||
set -l r $result[$i]
|
|
||||||
switch $prefix
|
|
||||||
case "'"
|
|
||||||
commandline -t -- (string escape -- $r)
|
|
||||||
case '"'
|
|
||||||
if string match '*"*' -- $r >/dev/null
|
|
||||||
commandline -t -- (string escape -- $r)
|
|
||||||
else
|
|
||||||
commandline -t -- '"'$r'"'
|
|
||||||
end
|
|
||||||
case '~'
|
|
||||||
commandline -t -- (string sub -s 2 (string escape -n -- $r))
|
|
||||||
case '*'
|
|
||||||
commandline -t -- (string escape -n -- $r)
|
|
||||||
end
|
|
||||||
[ $i -lt (count $result) ]; and commandline -i ' '
|
|
||||||
end
|
|
||||||
|
|
||||||
commandline -f repaint
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-fzf/fzf-complete.fish
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
# From https://github.com/junegunn/fzf/wiki/Examples-(fish)
|
|
||||||
function fzf-select -d 'fzf commandline job and print unescaped selection back to commandline'
|
|
||||||
set -l cmd (commandline -j)
|
|
||||||
[ "$cmd" ]; or return
|
|
||||||
eval $cmd | eval (__fzfcmd) -m --tiebreak=index --select-1 --exit-0 | string join ' ' | read -l result
|
|
||||||
[ "$result" ]; and commandline -j -- $result
|
|
||||||
commandline -f repaint
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-fzf/fzf-select.fish
|
||||||
|
|
@ -1 +1 @@
|
||||||
/home/ygg/.local/share/nvim/plugged/fzf/shell/key-bindings.fish
|
/home/ygg/.config/fish/fisher/fish-fzf/fzf_key_bindings.fish
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
# Defined in /tmp/fish.nJXl9C/pacmd-loopback.fish @ line 1
|
|
||||||
function pacmd-loopback --description 'Loop a pacmd source into a pacmd sink interactively.'
|
|
||||||
if test (set source (pacmd list-sources | grep name: | awk '{ print $2 }' | cut -d'<' -f2 | cut -d'>' -f1 | fzf-tmux --header="Select a source" --phony); set sink (pacmd list-sinks | grep name: | awk '{ print $2 }' | cut -d'<' -f2 | cut -d'>' -f1 | fzf-tmux --header="Select a sink:"); printf "No\nYes" | fzf-tmux --header="CONFIRM: <$source> -> <$sink>") = "Yes"
|
|
||||||
pacmd load-module module-loopback source=$source sink=$sink
|
|
||||||
else
|
|
||||||
echo "Aborted."
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-audio/pacmd-loopback.fish
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/home/ygg/.config/fish/fisher/fish-github/readme.fish
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
longtailfinancial
|
longtailfinancial
|
||||||
holoviz
|
holoviz
|
||||||
longtailfinancial
|
cadcad
|
||||||
|
blockscience
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue