fish: Init
parent
40aba20b8c
commit
976538a385
|
@ -0,0 +1,8 @@
|
||||||
|
## TODO: This fixes upstream bug, report!
|
||||||
|
complete -c fusermount --description "Mount point" -x -a '(__fish_print_mounted)'
|
||||||
|
complete -c fusermount -s h --description "Display help and exit"
|
||||||
|
complete -c fusermount -s v --description "Display version and exit"
|
||||||
|
complete -c fusermount -s o -x --description "Mount options"
|
||||||
|
complete -c fusermount -s u --description "Unmount"
|
||||||
|
complete -c fusermount -s q --description "Quiet"
|
||||||
|
complete -c fusermount -s z --description "Lazy unmount"
|
|
@ -0,0 +1,57 @@
|
||||||
|
## fish working paths
|
||||||
|
set -q XDG_DATA_HOME; or set -l XDG_DATA_HOME $HOME/.local/share
|
||||||
|
set -q XDG_CONFIG_HOME; or set -l XDG_CONFIG_HOME $HOME/.config
|
||||||
|
set -q fish_data_path; or set -g fish_data_path $XDG_DATA_HOME/fish
|
||||||
|
set -q fish_config_path; or set -g fish_config_path $XDG_CONFIG_HOME/fish
|
||||||
|
|
||||||
|
## cdhist options
|
||||||
|
set -g fish_cdhist_path $fish_data_path/fish_cdhist
|
||||||
|
set -g fish_cdhist_max 100
|
||||||
|
|
||||||
|
## Go back to last cdhist folder. Run this before the SHELL_FILEBROWSER hook.
|
||||||
|
if grep -q . $fish_cdhist_path ^ /dev/null
|
||||||
|
set dirprev (cat $fish_cdhist_path)
|
||||||
|
set -q dirprev[$fish_cdhist_max]; and set dirprev $dirprev[-$fish_cdhist_max..-1]
|
||||||
|
cd $dirprev[(count $dirprev)]
|
||||||
|
end
|
||||||
|
|
||||||
|
## Run the following
|
||||||
|
## sh -c 'export SHELL_FILEBROWSER=true; exec $TERMCMD'
|
||||||
|
## and this will autostart the file browser.
|
||||||
|
[ -n "$SHELL_FILEBROWSER" ]; and set -u SHELL_FILEBROWSER; and ranger
|
||||||
|
|
||||||
|
## Start at a specific location. Useful when switching to a shell from a browser
|
||||||
|
## for instance.
|
||||||
|
[ -n "$SHELL_CD" ]; and cd $SHELL_CD; and set -u SHELL_CD
|
||||||
|
|
||||||
|
## Misc
|
||||||
|
set fish_greeting
|
||||||
|
|
||||||
|
## Colors
|
||||||
|
## For custom prompt.
|
||||||
|
set fish_color_user brcyan
|
||||||
|
set fish_color_hostname brcyan
|
||||||
|
|
||||||
|
## Aliases
|
||||||
|
function ls --description 'List contents of directory'
|
||||||
|
set -l param --color=auto
|
||||||
|
if isatty 1
|
||||||
|
set param $param --indicator-style=classify
|
||||||
|
end
|
||||||
|
if [ (uname -o) = "GNU/Linux" ]
|
||||||
|
set param $param --group-directories-first
|
||||||
|
end
|
||||||
|
command ls $param $argv
|
||||||
|
end
|
||||||
|
alias l 'ls -1'
|
||||||
|
alias la 'll -lAh'
|
||||||
|
|
||||||
|
alias mkdir 'mkdir -p'
|
||||||
|
function mkcd -a folder -d 'Make directory and change into it.'
|
||||||
|
mkdir -p $folder
|
||||||
|
cd $folder
|
||||||
|
end
|
||||||
|
|
||||||
|
if type -pq pacman
|
||||||
|
source $fish_config_path/pacman.fish
|
||||||
|
end
|
|
@ -0,0 +1,36 @@
|
||||||
|
# Wrap the builtin cd command to maintain a permanent directory history.
|
||||||
|
function cd --description "Change directory"
|
||||||
|
if test (count $argv) -gt 1
|
||||||
|
printf "%s\n" (_ "Too many args for cd command")
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
# Skip history in subshells.
|
||||||
|
if status --is-command-substitution
|
||||||
|
builtin cd $argv
|
||||||
|
return $status
|
||||||
|
end
|
||||||
|
|
||||||
|
if test "$argv" = "-"
|
||||||
|
set argv $dirprev[(math (count $dirprev) - 1)]
|
||||||
|
end
|
||||||
|
|
||||||
|
builtin cd $argv
|
||||||
|
set -l cd_status $status
|
||||||
|
|
||||||
|
if test $cd_status -eq 0
|
||||||
|
if set -q dirprev
|
||||||
|
## Remove duplicates.
|
||||||
|
set -g dirprev (string match -v $PWD $dirprev) $PWD
|
||||||
|
set -q dirprev[$fish_cdhist_max]; and set dirprev $dirprev[-$fish_cdhist_max..-1]
|
||||||
|
## Save history.
|
||||||
|
string join \n $dirprev > $fish_cdhist_path
|
||||||
|
else
|
||||||
|
set -g dirprev $PWD
|
||||||
|
end
|
||||||
|
set -e dirnext
|
||||||
|
set -g __fish_cd_direction prev
|
||||||
|
end
|
||||||
|
|
||||||
|
return $cd_status
|
||||||
|
end
|
|
@ -0,0 +1,12 @@
|
||||||
|
function describe -d 'Extend on "type" for executables'
|
||||||
|
for i in $argv
|
||||||
|
switch (type -t $i)
|
||||||
|
case file
|
||||||
|
set -l path (type -p $i)
|
||||||
|
ls -l $path
|
||||||
|
file $path | cut -d':' -f2 | cut -b 2-
|
||||||
|
case '*'
|
||||||
|
type $i
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,27 @@
|
||||||
|
function fish_prompt
|
||||||
|
set HOST (hostname)
|
||||||
|
printf "%s%s%s%s%s" (set_color -o)'(' \
|
||||||
|
(set_color normal) \
|
||||||
|
(set_color $fish_color_user)$USER \
|
||||||
|
(set_color normal) \
|
||||||
|
(set_color -o)@ \
|
||||||
|
(set_color normal) \
|
||||||
|
(set_color $fish_color_hostname)$HOST \
|
||||||
|
(set_color normal) \
|
||||||
|
(set_color -o)'}'
|
||||||
|
|
||||||
|
## Path
|
||||||
|
set -l cwd_color $fish_color_cwd
|
||||||
|
if test (id -u) -eq 0
|
||||||
|
set -l cwd_color $fish_color_cwd_root
|
||||||
|
end
|
||||||
|
set PROMPT_PWD (prompt_pwd)
|
||||||
|
printf "%s%s%s%s" \
|
||||||
|
(set_color -o)'[' \
|
||||||
|
(set_color -o $cwd_color)$PROMPT_PWD \
|
||||||
|
(set_color normal) \
|
||||||
|
(set_color -o)']'
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo '> '
|
||||||
|
end
|
|
@ -0,0 +1,10 @@
|
||||||
|
function fish_user_key_bindings
|
||||||
|
## fzf
|
||||||
|
if type -pq fzf
|
||||||
|
source $fish_config_path/fzf.fish
|
||||||
|
end
|
||||||
|
|
||||||
|
## Ranger
|
||||||
|
type -q ranger; and bind \e\cb ranger
|
||||||
|
end
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
function man --description 'Color and justify the on-line manual pages'
|
||||||
|
## Work around the "builtin" manpage that everything symlinks to,
|
||||||
|
## by prepending our fish datadir to man. This also ensures that man gives fish's
|
||||||
|
## man pages priority, without having to put fish's bin directories first in $PATH
|
||||||
|
|
||||||
|
# Justify man pager to current window size.
|
||||||
|
set -q MANWIDTH; and [ $COLUMNS -lt $MANWIDTH ]; and set -lx MANWIDTH $COLUMNS
|
||||||
|
|
||||||
|
## Color when using LESS.
|
||||||
|
## mb = ?
|
||||||
|
## md = bold (titles, commands)
|
||||||
|
## so = status bar
|
||||||
|
## us = italic (arguments, files)
|
||||||
|
set -lx LESS_TERMCAP_mb (printf "\e[1;31m")
|
||||||
|
set -lx LESS_TERMCAP_md (printf "\e[0;36m")
|
||||||
|
set -lx LESS_TERMCAP_me (printf "\e[0m")
|
||||||
|
set -lx LESS_TERMCAP_se (printf "\e[0m")
|
||||||
|
set -lx LESS_TERMCAP_so (printf "\e[1;4;37m")
|
||||||
|
set -lx LESS_TERMCAP_ue (printf "\e[0m")
|
||||||
|
set -lx LESS_TERMCAP_us (printf "\e[0;33m")
|
||||||
|
|
||||||
|
# Notice local but exported variable
|
||||||
|
set -lx MANPATH (string join : $MANPATH)
|
||||||
|
if test -z "$MANPATH"
|
||||||
|
type -q manpath
|
||||||
|
and set MANPATH (command manpath)
|
||||||
|
end
|
||||||
|
set -l fish_manpath (dirname $__fish_datadir)/fish/man
|
||||||
|
if test -d "$fish_manpath" -a -n "$MANPATH"
|
||||||
|
set MANPATH "$fish_manpath":$MANPATH
|
||||||
|
end
|
||||||
|
|
||||||
|
# If fish's man pages could not be found, just invoke man normally
|
||||||
|
command man $argv
|
||||||
|
end
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Compatible with ranger >= 1.4.2.
|
||||||
|
#
|
||||||
|
# To undo the effect of this function, you can type "cd -" to return to the
|
||||||
|
# original directory.
|
||||||
|
function ranger -d 'Run ranger and sync folders with shell'
|
||||||
|
[ (count $argv) -eq 0 ]; and set argv .
|
||||||
|
set -l tempfile (mktemp)
|
||||||
|
command ranger --choosedir="$tempfile" $argv
|
||||||
|
if grep -q . "$tempfile" ^ /dev/null
|
||||||
|
set -l dest (cat -- "$tempfile")
|
||||||
|
## TODO: Clear prompt so that shorter path does not print on top of longer
|
||||||
|
## path. Could be a multi-line issue. Happens on every repaint, e.g. with
|
||||||
|
## fzf widgets as well.
|
||||||
|
[ "$dest" != "$PWD" ]; and cd $dest; and commandline -f repaint
|
||||||
|
end
|
||||||
|
rm -f -- "$tempfile"
|
||||||
|
end
|
|
@ -0,0 +1,68 @@
|
||||||
|
fzf_key_bindings
|
||||||
|
bind \cT transpose-chars
|
||||||
|
bind \e\ct fzf-file-widget
|
||||||
|
bind \ec capitalize-word
|
||||||
|
bind \eC fzf-cd-widget
|
||||||
|
|
||||||
|
function __fzf-selector -d 'fzf commandline and print selection back to commandline. Awesome!'
|
||||||
|
set -l cmd (commandline)
|
||||||
|
[ $cmd ]; or return
|
||||||
|
eval $cmd | eval (__fzfcmd) -m --tiebreak=index --toggle-sort=ctrl-r | string join ' ' | read -l result
|
||||||
|
[ "$result" ]; and commandline -- $result
|
||||||
|
commandline -f repaint
|
||||||
|
end
|
||||||
|
bind \e\cm __fzf-selector
|
||||||
|
|
||||||
|
## DONE: Report missing (commandline) upstream.
|
||||||
|
## TODO: Report use of 'read'.
|
||||||
|
function fzf-history-widget
|
||||||
|
history | eval (__fzfcmd) +m --tiebreak=index --toggle-sort=ctrl-r $FZF_CTRL_R_OPTS -q '(commandline)' | read -l result
|
||||||
|
and commandline -- $result
|
||||||
|
commandline -f repaint
|
||||||
|
end
|
||||||
|
|
||||||
|
## Like original but uses last token as root for 'find'.
|
||||||
|
## If last token is a path, you can use it as $cwd in FZF_CTRL_T_COMMAND to
|
||||||
|
## restrict search to this path. $cwd will be suppressed from commandline to
|
||||||
|
## ensure clean output from the search results.
|
||||||
|
## TODO: Report upstream. Makes '**' obsolete for bash and zsh.
|
||||||
|
function fzf-file-widget
|
||||||
|
set -l cwd_esc (commandline -t)
|
||||||
|
## The commandline token might be escaped, we need to unescape it.
|
||||||
|
set -l cwd (eval "echo $cwd_esc")
|
||||||
|
if [ ! -d $cwd ]
|
||||||
|
set cwd .
|
||||||
|
end
|
||||||
|
|
||||||
|
set -q FZF_CTRL_T_COMMAND; or set -l FZF_CTRL_T_COMMAND "
|
||||||
|
command find -L \$cwd \\( -path '*/\\.*' -o -fstype 'dev' -o -fstype 'proc' \\) -prune \
|
||||||
|
-o -type f -print \
|
||||||
|
-o -type d -print \
|
||||||
|
-o -type l -print 2> /dev/null | sed 1d"
|
||||||
|
|
||||||
|
if eval $FZF_CTRL_T_COMMAND | eval (__fzfcmd) -m $FZF_CTRL_T_OPTS > $TMPDIR/fzf.result
|
||||||
|
if [ $cwd != . ]
|
||||||
|
## Remove path from commandline: it will be
|
||||||
|
set -l cmd (commandline)
|
||||||
|
set -l len (math (string length $cmd) - (string length $cwd_esc))
|
||||||
|
commandline -- (string sub -l $len (commandline))
|
||||||
|
end
|
||||||
|
for i in (seq 20); commandline -i (cat $TMPDIR/fzf.result | __fzf_escape) 2> /dev/null; and break; sleep 0.1; end
|
||||||
|
end
|
||||||
|
commandline -f repaint
|
||||||
|
rm -f $TMPDIR/fzf.result
|
||||||
|
end
|
||||||
|
|
||||||
|
function fzf-bcd-widget -d 'cd backwards'
|
||||||
|
pwd | nawk -v RS=/ '/\n/ {exit} {p=p $0 "/"; print p}' | eval (__fzfcmd) +m --tac | read -l result
|
||||||
|
[ $result ]; and cd $result
|
||||||
|
commandline -f repaint
|
||||||
|
end
|
||||||
|
bind \e\cL fzf-bcd-widget
|
||||||
|
|
||||||
|
function fzf-cdhist-widget -d 'cd to one of the previously visited location'
|
||||||
|
string join \n $dirprev | eval (__fzfcmd) +m | read -l result
|
||||||
|
[ $result ]; and cd $result
|
||||||
|
commandline -f repaint
|
||||||
|
end
|
||||||
|
bind \er fzf-cdhist-widget
|
|
@ -0,0 +1,63 @@
|
||||||
|
## TODO: Remove unnecessary aliases.
|
||||||
|
|
||||||
|
set -l listinstalled "(pacman -Q | string replace ' ' \t)"
|
||||||
|
set -l listall "(__fish_print_packages)"
|
||||||
|
|
||||||
|
function pacfiles -d 'List of files in pacman package packages sorted by size'
|
||||||
|
pacman -Qlq $argv | grep -v '/$' | xargs du -cbh | sort -h
|
||||||
|
end
|
||||||
|
complete -c pacfiles -a "$listinstalled"
|
||||||
|
|
||||||
|
function pel
|
||||||
|
set -l result
|
||||||
|
pacman -Qlq $argv | grep -v '/$' | eval (__fzfcmd) -m --tiebreak=index --toggle-sort=ctrl-r | while read -l r; set result $result $r; end
|
||||||
|
[ "$result" ]; and eval $EDITOR $result
|
||||||
|
end
|
||||||
|
complete -c pel -a "$listinstalled"
|
||||||
|
|
||||||
|
function pi
|
||||||
|
sudo pacman -S --needed $argv
|
||||||
|
end
|
||||||
|
complete -c pi -a "$listall"
|
||||||
|
|
||||||
|
function pli -a size -d 'Pacman last installed packages'
|
||||||
|
[ $size ]; or set size 30
|
||||||
|
expac -t '%F %T' '%-8l %n' | sort -rn | head -$size
|
||||||
|
end
|
||||||
|
|
||||||
|
function pqi
|
||||||
|
pacman -Qi $argv
|
||||||
|
end
|
||||||
|
complete -c pqi -a "$listinstalled"
|
||||||
|
|
||||||
|
function pql -d 'Get detailed file list (no folders) for the specified packages'
|
||||||
|
pacman -Ql $argv | grep -v '/$'
|
||||||
|
end
|
||||||
|
complete -c pql -a "$listinstalled"
|
||||||
|
|
||||||
|
function pqo
|
||||||
|
pacman -Qo $argv
|
||||||
|
end
|
||||||
|
complete -c pqo -a '(__fish_complete_command)'
|
||||||
|
|
||||||
|
function pqs
|
||||||
|
pacman -Qs $argv
|
||||||
|
end
|
||||||
|
|
||||||
|
function pr
|
||||||
|
sudo pacman -Rs $argv
|
||||||
|
end
|
||||||
|
complete -c pr -a "$listinstalled"
|
||||||
|
|
||||||
|
function psi
|
||||||
|
pacman -Si $argv
|
||||||
|
end
|
||||||
|
complete -c psi -a "$listall"
|
||||||
|
|
||||||
|
function pss
|
||||||
|
pacman -Ss $argv
|
||||||
|
end
|
||||||
|
|
||||||
|
function pu -d 'Run pacman system update'
|
||||||
|
yes | sudo pacman -Sc; and sudo pacman -Syu
|
||||||
|
end
|
Loading…
Reference in New Issue