25 Commits

Author SHA1 Message Date
2dc143a839 Add url command to {en,de}code text 2023-10-19 17:48:05 +01:00
5c62ff219c Remove unused tasks.yaml 2023-10-19 17:47:46 +01:00
1121b9a193 Alias wol to wakeonlan 2023-10-05 19:59:28 +01:00
0c4cd8880b Add sourcing of local ignored file 2023-06-21 22:05:57 +01:00
e30f86800d Don't check for vim when using $EDITOR 2023-06-17 15:15:00 +01:00
ad5dc95e4d Add script to list completions available for instlled commands 2023-02-18 15:06:04 +00:00
d226ac7097 Also load ~/.config/private/zshrc if present 2023-02-16 10:26:38 +00:00
e7750cb0a9 Remove chevrons from prompt 2023-02-03 11:20:21 +00:00
Benie
efbfa23241 Add new homebrew install locaiton to PATH 2022-12-10 15:59:39 +00:00
b95b365276 Don't attempt to set invalid environment variable names 2022-11-25 13:28:49 +00:00
501353a534 Add sandbox error message for invalid commands 2022-11-09 16:42:46 +00:00
02abb0960c Always use nvim for vimdebug command 2022-11-06 22:05:49 +00:00
a81465daad Only set WGETRC if $HOME/.config/wget/rc exists 2022-11-06 14:56:49 +00:00
5a33d2b5ac Add autoenv add=local subcommand
The `add=local` subcommand creates `.local/bin` if it doesn't exit and
then updates the autoenv to add it to `PATH`.
2022-10-26 20:31:51 +01:00
c691d335c0 Disable zsh-history-substring-search highlights 2022-10-11 17:16:23 +01:00
715014ed3d Specify compdump file location to compinit 2022-09-20 22:45:54 +01:00
efcea9e8a5 Change value of WGETRC 2022-09-20 22:45:42 +01:00
ea61bde858 Change sandbox prompt highlight color 2022-07-29 17:45:12 +01:00
a96aa50fbe Add --show option to build-dir command
The new option shows the current build directory, if present.
2022-07-11 13:47:05 +01:00
c61c86e979 Add ~Sandbox hashed directory 2022-06-12 21:03:54 +01:00
8790bc0c4e Use $EDITOR rather the vim directory 2022-03-31 22:13:26 +01:00
b349befbf4 Be explicit about python absolute path
One some distros `virtualenv` still uses a Python 2 executable, I always
set `python` to point to Python 3 so be explicit about getting the
absolute path to `python` when creating a `virtualenv` with `autoenv
add=py`.
2022-03-22 13:29:33 +00:00
74f2dd7dae Fix autoenv add=py .enter when run in subdirectory 2022-03-22 13:29:33 +00:00
a362ab0e04 Prefer nvim over vim for EDITOR, don't use which 2022-02-26 17:22:51 +00:00
a422ab1125 Also install ag 2022-02-19 11:13:39 +00:00
15 changed files with 189 additions and 191 deletions

3
.gitignore vendored
View File

@@ -1,2 +1,3 @@
# Ignore all plugin files in subdirectories # Ignore all plugin files in subdirectories
*/ zsh-*/
local

View File

@@ -17,6 +17,7 @@ _autoenv() {
edit:'edit .enter and .exit scripts in current directory' edit:'edit .enter and .exit scripts in current directory'
deinit:'remove .enter and .exit scripts in current directory' deinit:'remove .enter and .exit scripts in current directory'
reload:'reload the current environment' reload:'reload the current environment'
add=local:'add .local/bin to PATH'
add=py:'add Python virtualenv to the autoenv' add=py:'add Python virtualenv to the autoenv'
) )
_describe -t commands command commands && ret=0 ;; _describe -t commands command commands && ret=0 ;;

View File

@@ -22,6 +22,7 @@ commands:
edit edit .enter and .exit scripts in current directory edit edit .enter and .exit scripts in current directory
deinit remove .enter and .exit scripts in current directory deinit remove .enter and .exit scripts in current directory
reload reload the current environment reload reload the current environment
add=local add .local/bin to PATH
add=py add Python virtualenv to the autoenv" add=py add Python virtualenv to the autoenv"
;; ;;
@@ -45,21 +46,16 @@ commands:
if ! [ -f $PWD/.enter ] || ! [ -f $PWD/.exit ]; then if ! [ -f $PWD/.enter ] || ! [ -f $PWD/.exit ]; then
echo '.enter or .exit not found'; return 1 echo '.enter or .exit not found'; return 1
fi fi
# If vim exists, edit enter and exit scripts. # Exit the autoenv before editing.
if which vim &> /dev/null; then _autoenv_exit $PWD
# Exit the autoenv before editing. if $EDITOR -p $PWD/.enter $PWD/.exit; then
_autoenv_exit $PWD # If enter script exists, authorize it.
if vim -p $PWD/.enter $PWD/.exit; then [ -f $PWD/.enter ] && _autoenv_authorized $PWD/.enter yes
# If enter script exists, authorize it. # If exit script exists, authorize it.
[ -f $PWD/.enter ] && _autoenv_authorized $PWD/.enter yes [ -f $PWD/.exit ] && _autoenv_authorized $PWD/.exit yes
# If exit script exists, authorize it.
[ -f $PWD/.exit ] && _autoenv_authorized $PWD/.exit yes
fi
# Enter the autoenv.
_autoenv_enter $PWD
else
echo 'vim not found'; return 1
fi fi
# Enter the autoenv.
_autoenv_enter $PWD
;; ;;
deinit) # Remove .enter and .exit scripts in current directory. deinit) # Remove .enter and .exit scripts in current directory.
@@ -92,13 +88,34 @@ commands:
_autoenv_enter $PWD _autoenv_enter $PWD
;; ;;
add=local) # Add .local/bin to PATH
if ! [ -f $PWD/.enter ] || ! [ -f $PWD/.exit ]; then
echo '.enter or .exit not found'; return 1
fi
_autoenv_exit $PWD
# Create .local/bin if not present
if ! [ -d $PWD/.local/bin ]; then
mkdir -p $PWD/.local/bin
fi
# On enter: store PATH and insert .local/bin
echo 'OLDPATH=$PATH' >> .enter
echo 'PATH=$PWD/.local/bin:$PATH' >> .enter
# On exit: reset PATH
echo 'PATH=$OLDPATH' >> .exit
echo 'unset OLDPATH' >> .exit
# Authorize modified autoenv
_autoenv_authorized $PWD/.enter yes
_autoenv_authorized $PWD/.exit yes
_autoenv_enter $PWD
;;
add=py) # Add Python virtualenv to the sandbox add=py) # Add Python virtualenv to the sandbox
if ! [ -f $PWD/.enter ] || ! [ -f $PWD/.exit ]; then if ! [ -f $PWD/.enter ] || ! [ -f $PWD/.exit ]; then
echo '.enter or .exit not found'; return 1 echo '.enter or .exit not found'; return 1
fi fi
_autoenv_exit $PWD _autoenv_exit $PWD
virtualenv .local virtualenv -p `command -v python` .local
echo 'source .local/bin/activate' >> .enter echo 'source ${0:a:h}/.local/bin/activate' >> .enter
echo 'deactivate' >> .exit echo 'deactivate' >> .exit
_autoenv_authorized $PWD/.enter yes _autoenv_authorized $PWD/.enter yes
_autoenv_authorized $PWD/.exit yes _autoenv_authorized $PWD/.exit yes

View File

@@ -1,6 +1,7 @@
#compdef build-dir #compdef build-dir
_arguments \ _arguments \
'(-h --help)'{-h,--help}'[]' \ '(-h --help)'{-h,--help}'[show this help message and exit]' \
'(-s --show)'{-s,--show}'[show the current build directory]' \
'--build[invoke a build after selection]' \ '--build[invoke a build after selection]' \
'1:directory:_files' '1:directory:_files'

View File

@@ -7,21 +7,17 @@ alias build="build-dir --build"
# Detect installed debugger and set the `debug` alias to debug a program with # Detect installed debugger and set the `debug` alias to debug a program with
# command line arguments. # command line arguments.
if [ `uname` = Linux ]; then if [ `uname` = Linux ]; then
if [[ "`vim --version|head -1|cut -c 19-21`" =~ "^8\.[123456789]$" ]]; then autoload -U regexp-replace
autoload -U regexp-replace function vimdebug() {
function vimdebug() { # For each item in $* replace * and \* and then replace \ with \\
# For each item in $* replace * and \* and then replace \ with \\ local args=()
local args=() for arg in "$@"; do
for arg in "$@"; do regexp-replace arg '\*' '\\*'
regexp-replace arg '\*' '\\*' args+=($arg)
args+=($arg) done
done nvim "+packadd termdebug" "+TermdebugCommand $args"
vim "+packadd termdebug" "+TermdebugCommand $args" }
} if which gdb &> /dev/null; then
alias debug='vimdebug'
elif which cgdb &> /dev/null; then
alias debug='cgdb --args'
elif which gdb &> /dev/null; then
alias debug='gdb --args' alias debug='gdb --args'
fi fi
elif [ `uname` = Darwin ]; then elif [ `uname` = Darwin ]; then
@@ -32,8 +28,8 @@ fi
# Interactively choose a `~build` directory for `build` to build. # Interactively choose a `~build` directory for `build` to build.
build-dir() { build-dir() {
local usage='usage: build-dir [-h] [--build] [<directory>]' local usage='usage: build-dir [-h] [--build] [<directory>]'
local -a help do_build local -a help show do_build
zparseopts -D h=help -help=help -build=do_build zparseopts -D h=help -help=help s=show -show=show -build=do_build
if [[ -n $help ]]; then if [[ -n $help ]]; then
cat << EOF cat << EOF
$usage $usage
@@ -45,12 +41,22 @@ positional arguments:
optional arguments: optional arguments:
-h, --help show this help message and exit -h, --help show this help message and exit
-s, --show show the current build directory
--build invoke a build after selection --build invoke a build after selection
EOF EOF
return return
fi fi
error() { echo "\e[31merror:\e[0m $1" } error() { echo "\e[31merror:\e[0m $1" }
warning() { echo "\e[33mwarning:\e[0m $1" } warning() { echo "\e[33mwarning:\e[0m $1" }
if [[ -n $show ]]; then
if [[ ! -n $build_dir ]]; then
error "build directory not set"
return 1
else
echo "$build_dir"
return
fi
fi
local local_build_dir local local_build_dir
if [[ ${#*} -gt 1 ]]; then if [[ ${#*} -gt 1 ]]; then
echo $usage echo $usage

View File

@@ -0,0 +1,22 @@
#!/usr/bin/env zsh
# Loop over available completions and add existing commands to array.
local -a completions
completions=(~/.config/zsh/zsh-completions/src/*)
local -a command_list
for completion in $completions; do
local filename=$(basename $completion)
local name=${filename:1}
if command -v $name &> /dev/null; then
command_list+=($name)
fi
done
# Print JSON array of commands Ansible can consume.
echo '['
local length=${#command_list[@]}
for (( i = 1; i < $length; i++ )); do
echo " \"${command_list[$i]}\","
done
echo " \"${command_list[-1]}\""
echo ']'

View File

@@ -49,8 +49,8 @@ prompt_fresh_setup() {
local userhost="$userhost@`hostname`" local userhost="$userhost@`hostname`"
fi fi
PS1="«$user» " PS1="$user "
PS2="«${(l:${#userhost}:: :)}» " PS2="${(l:${#userhost}:: :)} "
prompt_opts=(percent sp subst) prompt_opts=(percent sp subst)
} }
@@ -66,7 +66,7 @@ fresh_line_one() {
# Construct the time and directory portions of the prompt # Construct the time and directory portions of the prompt
local time_stamp="%{%F{244}%}%D{%H:%M:%S}%{%f%}" local time_stamp="%{%F{244}%}%D{%H:%M:%S}%{%f%}"
[[ -n $SANDBOX_HOME ]] && \ [[ -n $SANDBOX_HOME ]] && \
local directory="%{%F{3}%}$SANDBOX_NAME${PWD#$SANDBOX_HOME}%{%f%}" || \ local directory="%{%F{220}%}$SANDBOX_NAME${PWD#$SANDBOX_HOME}%{%f%}" || \
local directory="%{%F{37}%}%~%{%f%}" local directory="%{%F{37}%}%~%{%f%}"
# Check we are in a git repository # Check we are in a git repository

View File

@@ -44,14 +44,11 @@ usage: sandbox [-h] {create,rename,destroy,enable,disable,list} ..
fi fi
done done
unset git unset git
[[ -z "$name" ]] && \ [[ -z "$name" ]] && \
error "missing argument <name>\n$usage" && return 1 error "missing argument <name>\n$usage" && return 1
local sandbox=$SANDBOX_ROOT/$name local sandbox=$SANDBOX_ROOT/$name
[[ -d "$sandbox" ]] && \ [[ -d "$sandbox" ]] && \
error "sandbox already exists $name" && return 1 error "sandbox already exists $name" && return 1
if [[ -n "$repo" ]]; then if [[ -n "$repo" ]]; then
mkdir -p $SANDBOX_ROOT &> /dev/null mkdir -p $SANDBOX_ROOT &> /dev/null
git clone $repo $sandbox git clone $repo $sandbox
@@ -61,55 +58,49 @@ usage: sandbox [-h] {create,rename,destroy,enable,disable,list} ..
cd $sandbox cd $sandbox
git init &> /dev/null git init &> /dev/null
fi fi
echo "SANDBOX_HOME=\$(dirname -- "\$0:a")" >> $sandbox/.enter echo "SANDBOX_HOME=\$(dirname -- "\$0:a")" >> $sandbox/.enter
echo "SANDBOX_NAME=$name" >> $sandbox/.enter echo "SANDBOX_NAME=$name" >> $sandbox/.enter
_autoenv_authorized $sandbox/.enter yes _autoenv_authorized $sandbox/.enter yes
echo "unset SANDBOX_NAME" >> $sandbox/.exit echo "unset SANDBOX_NAME" >> $sandbox/.exit
echo "unset SANDBOX_HOME" >> $sandbox/.exit echo "unset SANDBOX_HOME" >> $sandbox/.exit
_autoenv_authorized $sandbox/.exit yes _autoenv_authorized $sandbox/.exit yes
_autoenv_enter $sandbox _autoenv_enter $sandbox
;; ;;
rename) rename)
local old_name=$1 new_name=$2 local old_name=$1 new_name=$2
[[ -z "$old_name" ]] && \ [[ -z "$old_name" ]] && \
error "missing argument <old-name>\n$usage" && return 1 error "missing argument <old-name>\n$usage" && return 1
[[ -z "$new_name" ]] && \ [[ -z "$new_name" ]] && \
error "missing argument <new-name>\n$usage" && return 1 error "missing argument <new-name>\n$usage" && return 1
local old=$SANDBOX_ROOT/$old_name new=$SANDBOX_ROOT/$new_name local old=$SANDBOX_ROOT/$old_name new=$SANDBOX_ROOT/$new_name
[[ ! -d "$old" ]] && \ [[ ! -d "$old" ]] && \
error "sandbox does not exist $old_name" && return 1 error "sandbox does not exist $old_name" && return 1
[[ -d "$new" ]] && \ [[ -d "$new" ]] && \
error "sandbox already exists $new_name" && return 1 error "sandbox already exists $new_name" && return 1
[[ "$PWD" = "$old"* ]] && _autoenv_exit $PWD [[ "$PWD" = "$old"* ]] && _autoenv_exit $PWD
mv $old $new mv $old $new
sed -i "s/$old_name/$new_name/g" $new/.enter sed -i "s/$old_name/$new_name/g" $new/.enter
_autoenv_authorized $new/.enter yes _autoenv_authorized $new/.enter yes
_autoenv_authorized $new/.exit yes _autoenv_authorized $new/.exit yes
[[ "$PWD" = "$old"* ]] && cd $new [[ "$PWD" = "$old"* ]] && cd $new
;; ;;
destroy) destroy)
local name=$1 local name=$1
[[ -z "$name" ]] && \ [[ -z "$name" ]] && \
error "missing argument <name>\n$usage" && return 1 error "missing argument <name>\n$usage" && return 1
local sandbox=$SANDBOX_ROOT/$name local sandbox=$SANDBOX_ROOT/$name
[[ ! -d $sandbox ]] && \ [[ ! -d $sandbox ]] && \
error "sandbox does not exist $name" && return 1 error "sandbox does not exist $name" && return 1
[[ "$PWD" = "$sandbox"* ]] && cd ~ [[ "$PWD" = "$sandbox"* ]] && cd ~
rm -rf $sandbox rm -rf $sandbox
;; ;;
list) list)
ls -1 $SANDBOX_ROOT | less -F -K -R -X ls -1 $SANDBOX_ROOT | less -F -K -R -X
;; ;;
enable) enable)
local name=$1 local name=$1
[[ -z "$name" ]] && \ [[ -z "$name" ]] && \
@@ -118,16 +109,19 @@ usage: sandbox [-h] {create,rename,destroy,enable,disable,list} ..
local sandbox=$SANDBOX_ROOT/$name local sandbox=$SANDBOX_ROOT/$name
[[ ! -d $sandbox ]] && \ [[ ! -d $sandbox ]] && \
error "sandbox does not exist $name" && return 1 error "sandbox does not exist $name" && return 1
export SANDBOX_RETURN=$PWD export SANDBOX_RETURN=$PWD
cd $sandbox cd $sandbox
;; ;;
disable) disable)
[[ -z "$SANDBOX_RETURN" ]] && \ [[ -z "$SANDBOX_RETURN" ]] && \
error "sandbox is not currently active" && return 1 error "sandbox is not currently active" && return 1
cd $SANDBOX_RETURN cd $SANDBOX_RETURN
unset SANDBOX_RETURN unset SANDBOX_RETURN
;; ;;
*)
error "invalid sandbox command: $cmd" && return 1
;;
esac esac
} }

View File

@@ -1,91 +0,0 @@
---
- name: zsh install packages
become: '{{package_become}}'
package:
name: zsh
state: present
- name: zsh install Debian packages
when: ansible_os_family == "Debian"
become: true
apt:
name:
- zsh-doc
- pinentry-curses
- unzip
state: present
- name: zsh clone plugin repos
git:
repo: '{{item.repo}}'
dest: '{{item.dest}}'
with_items:
- repo: https://github.com/zsh-users/zsh-autosuggestions.git
dest: ~/.config/zsh/zsh-autosuggestions
- repo: https://github.com/zsh-users/zsh-history-substring-search.git
dest: ~/.config/zsh/zsh-history-substring-search
- repo: https://github.com/zsh-users/zsh-syntax-highlighting.git
dest: ~/.config/zsh/zsh-syntax-highlighting
- repo: https://github.com/zsh-users/zsh-completions.git
dest: ~/.config/zsh/zsh-completions
- repo: https://github.com/junegunn/fzf.git
dest: ~/.config/zsh/fzf
- name: zsh install fzf binaries
command:
cmd: ~/.config/zsh/fzf/install --bin
creates: ~/.config/zsh/fzf/bin/fzf
- name: zsh create directories
file:
state: directory
dest: '{{item}}'
with_items:
- ~/.local/bin
- ~/.local/share/zsh/site-functions
- name: zsh create symbolic links
file:
state: link
src: '{{item.src}}'
dest: '{{item.dest}}'
with_items:
- src: ~/.config/zsh/zlogin
dest: ~/.zlogin
- src: ~/.config/zsh/zlogout
dest: ~/.zlogout
- src: ~/.config/zsh/zprofile
dest: ~/.zprofile
- src: ~/.config/zsh/zshenv
dest: ~/.zshenv
- src: ~/.config/zsh/zshrc
dest: ~/.zshrc
- src: ~/.config/zsh/prompt_fresh_setup
dest: ~/.local/share/zsh/site-functions/prompt_fresh_setup
- src: ~/.config/zsh/build/_build-dir
dest: ~/.local/share/zsh/site-functions/_build-dir
- src: ~/.config/zsh/sandbox/_sandbox
dest: ~/.local/share/zsh/site-functions/_sandbox
- src: ~/.config/zsh/layout/_layout
dest: ~/.local/share/zsh/site-functions/_layout
- src: ~/.config/zsh/notes/_note
dest: ~/.local/share/zsh/site-functions/_note
- src: ~/.config/zsh/fzf/bin/fzf
dest: ~/.local/bin/fzf
- src: ~/.config/zsh/fzf/bin/fzf-tmux
dest: ~/.local/bin/fzf-tmux
- src: ~/.config/zsh/cmake-uninstall
dest: ~/.local/bin/cmake-uninstall
- src: ~/.config/zsh/$
dest: ~/.local/bin/$
- name: zsh get absolute path
shell: command -v zsh
register: zsh
changed_when: false
- name: zsh set default shell
user:
name: '{{lookup("env", "USER")}}'
shell: '{{zsh.stdout}}'
become: true

View File

@@ -1,19 +0,0 @@
#!/usr/bin/env zsh
# Check if third party completions are present.
local zsh_completions=~/.config/zsh/zsh-completions
[ ! -d $zsh_completions ] && return 0
# Loop over all completions.
for completion in $zsh_completions/src/_*; do
local name=`basename $completion`
local symlink=~/.local/share/zsh/site-functions/$name
# Remove existing completion file if it exists.
[ -f $symlink ] && rm $symlink
# Check if the command exists on the PATH.
if which ${name:1} &> /dev/null; then
# Symlink the completion for the existing command.
[ `uname` = Darwin ] && \
ln -s $completion $symlink || ln -sr $completion $symlink
fi
done

22
url/_url Normal file
View File

@@ -0,0 +1,22 @@
#compdef url
_url() {
local ret=1 context curcontext="$curcontext" state line
typeset -A opt_args
_arguments -C -w -s \
'(-h --help)'{-h,--help}'[show this help message and exit]' \
'1: :->command'
case $state in
(command)
declare -a commands
local commands=(
encode:'encode unencoded text'
decode:'decode encoded text'
)
_describe -t commands command commands && ret=0 ;;
esac
return ret
}

22
url/url Executable file
View File

@@ -0,0 +1,22 @@
#!/usr/bin/env python
from argparse import ArgumentParser
from urllib import parse
def main():
cli = ArgumentParser(description=__doc__)
cli.add_argument('command', choices=['encode', 'decode'])
cli.add_argument('text')
args = cli.parse_args()
print({
'encode': parse.quote_plus,
'decode': parse.unquote_plus,
}[args.command](args.text))
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
exit(130)

View File

@@ -16,10 +16,7 @@ fi
# Abstract different ways to paste from the clipboard. # Abstract different ways to paste from the clipboard.
# TODO: Use OSC-52 to get the clipboard, not widely supported though # TODO: Use OSC-52 to get the clipboard, not widely supported though
if [ -n "$SSH_CONNECTION" ]; then if [ "`uname`" = "Darwin" ]; then
# Use OSC-52 to get the clipboard
alias paste='printf "\033]52;c;?\a"'
elif [ "`uname`" = "Darwin" ]; then
# Use pbpaste to get the clipboard # Use pbpaste to get the clipboard
alias paste='pbpaste' alias paste='pbpaste'
elif which xclip &> /dev/null; then elif which xclip &> /dev/null; then

43
zshenv
View File

@@ -22,10 +22,17 @@ INFOPATH=$HOME/.local/share/info:$INFOPATH
# Add ccache compiler aliases to PATH and use XDG base dir paths # Add ccache compiler aliases to PATH and use XDG base dir paths
if [ `uname` = Darwin ]; then if [ `uname` = Darwin ]; then
[ -d /usr/local/opt/python/libexec/bin ] && \ if [ `uname -m` = arm64 ]; then
PATH=/usr/local/opt/python/libexec/bin:$PATH homebrew_root=/opt/homebrew
[ -f /usr/local/bin/ccache ] && \ [ -d /opt/homebrew/bin ] && \
PATH=/usr/local/opt/ccache/libexec:$PATH PATH=$homebrew_root/bin:$PATH
else
homebrew_root=/usr/local
fi
[ -d $homebrew_root/opt/python/libexec/bin ] && \
PATH=$homebrew_root/opt/python/libexec/bin:$PATH
[ -f $homebrew_root/bin/ccache ] && \
PATH=$homebrew_root/opt/ccache/libexec:$PATH
elif [ -f /usr/bin/ccache ]; then elif [ -f /usr/bin/ccache ]; then
if [ -d /usr/lib/ccache/bin ]; then if [ -d /usr/lib/ccache/bin ]; then
PATH=/usr/lib/ccache/bin:$PATH PATH=/usr/lib/ccache/bin:$PATH
@@ -37,7 +44,7 @@ export CCACHE_CONFIGPATH=$HOME/.config/ccache
export CCACHE_DIR=$HOME/.cache/ccache export CCACHE_DIR=$HOME/.cache/ccache
# Add default CMake generator # Add default CMake generator
which ninja &> /dev/null && \ command -v ninja &> /dev/null && \
export CMAKE_GENERATOR=Ninja export CMAKE_GENERATOR=Ninja
# Remove duplicates from environment variables # Remove duplicates from environment variables
@@ -47,8 +54,12 @@ typeset -U MANPATH; export MANPATH
typeset -U INFOPATH; export INFOPATH typeset -U INFOPATH; export INFOPATH
# Set default editor. # Set default editor.
which vim &> /dev/null && \ if command -v nvim &> /dev/null; then
export EDITOR=`which vim` export EDITOR=`command -v nvim`
elif command -v vim &> /dev/null; then
export EDITOR=`command -v vim`
fi
export GIT_EDITOR=$EDITOR
# Use ~/.local for pip installs on macOS # Use ~/.local for pip installs on macOS
[ "`uname`" = "Darwin" ] && export PYTHONUSERBASE=$HOME/.local [ "`uname`" = "Darwin" ] && export PYTHONUSERBASE=$HOME/.local
@@ -77,26 +88,26 @@ export PYLINTHOME=~/.local/share/pylint
export VIRTUAL_ENV_DISABLE_PROMPT=1 export VIRTUAL_ENV_DISABLE_PROMPT=1
# If pinentry-curses exists, use it for lastpass-cli # If pinentry-curses exists, use it for lastpass-cli
which pinentry-curses &> /dev/null && \ command -v pinentry-curses &> /dev/null && \
export LPASS_PINENTRY=pinentry-curses export LPASS_PINENTRY=pinentry-curses
# Teach these some XDG Base Directory Spec manners # Teach these some XDG Base Directory Spec manners
export IPYTHONDIR=$HOME/.config/ipython export IPYTHONDIR=$HOME/.config/ipython
which cargo &> /dev/null && \ command -v cargo &> /dev/null && \
export CARGO_HOME=$HOME/.local/share/cargo export CARGO_HOME=$HOME/.local/share/cargo
if which ccache &> /dev/null; then if command -v ccache &> /dev/null; then
export CCACHE_CONFIGPATH=$HOME/.config/ccache.conf export CCACHE_CONFIGPATH=$HOME/.config/ccache.conf
export CCACHE_DIR=$HOME/.cache/ccache export CCACHE_DIR=$HOME/.cache/ccache
fi fi
which conan &> /dev/null && \ command -v conan &> /dev/null && \
export CONAN_USER_HOME=$HOME/.local/share/conan export CONAN_USER_HOME=$HOME/.local/share/conan
which docker &> /dev/null && \ command -v docker &> /dev/null && \
export DOCKER_CONFIG=$HOME/.local/share/docker export DOCKER_CONFIG=$HOME/.local/share/docker
export GTK_RC_FILES=$HOME/.config/gtk/gtkrc export GTK_RC_FILES=$HOME/.config/gtk/gtkrc
export GTK2_RC_FILES=$HOME/.config/gtk-2.0/gtkrc export GTK2_RC_FILES=$HOME/.config/gtk-2.0/gtkrc
which rustup &> /dev/null && \
export RUSTUP_HOME=$HOME/.local/share/rustup
export PYLINTHOME=$HOME/.cache/pylint export PYLINTHOME=$HOME/.cache/pylint
command -v rustup &> /dev/null && \
export RUSTUP_HOME=$HOME/.local/share/rustup
[ -f $HOME/.config/wget/rc ] && \
export WGETRC=$HOME/.config/wget/rc
# TODO: terminfo # TODO: terminfo
[ -f $HOME/.config/wgetrc ] &&
export WGETRC=$HOME/.config/wgetrc

30
zshrc
View File

@@ -17,6 +17,8 @@ ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=(end-of-line vi-end-of-line)
# Search history with a command substring # Search history with a command substring
source-plugin zsh-history-substring-search source-plugin zsh-history-substring-search
HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND=
HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND=
# Command syntax highlighting # Command syntax highlighting
source-plugin zsh-syntax-highlighting source-plugin zsh-syntax-highlighting
@@ -65,10 +67,10 @@ setopt completeinword
# Initialize completions # Initialize completions
autoload -U compinit autoload -U compinit
compinit compinit -d ~/.cache/zsh/compdump
# Add pip to the old completion engine if present # Add pip to the old completion engine if present
if which pip &> /dev/null; then if command -v pip &> /dev/null; then
function _pip_completion { function _pip_completion {
local words cword local words cword
read -Ac words read -Ac words
@@ -170,17 +172,26 @@ if [[ ! -z "$cursor_block" && ! -z "$cursor_line" ]]; then
fi fi
# Frequntly used directories # Frequntly used directories
function frequent-directory() { export $1; hash -d $1 } function frequent-directory() {
# Replace - with _ in environment variable name.
local name=$(echo $1 | sed 's/^\(.*\)=.*$/\1/g' | sed 's/-/_/g')
local value=$(echo $1 | sed 's/^.*=\(.*$\)/\1/g')
export $name=$value
hash -d $1
}
frequent-directory Projects="$HOME/Projects" frequent-directory Projects="$HOME/Projects"
frequent-directory Sandbox="$HOME/Sandbox"
# Load work related config # Load work related config
[ -f ~/.config/work/zshrc ] && source ~/.config/work/zshrc [ -f ~/.config/work/zshrc ] && source ~/.config/work/zshrc
[ -f ~/.config/private/zshrc ] && source ~/.config/private/zshrc
[ -f ~/.config/zsh/local ] && source ~/.config/zsh/local
# Aliases # Aliases
alias grep='grep --color=always' alias grep='grep --color=always'
which cmake &> /dev/null && \ command -v cmake &> /dev/null && \
alias cninja='cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON' alias cninja='cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON'
which ssh &> /dev/null && \ command -v ssh &> /dev/null && \
alias ssh='TERM=xterm-256color ssh' alias ssh='TERM=xterm-256color ssh'
alias weather="curl wttr.in" alias weather="curl wttr.in"
alias cls="clear && printf '\e[3J'" alias cls="clear && printf '\e[3J'"
@@ -188,15 +199,18 @@ alias cls="clear && printf '\e[3J'"
case `uname` in case `uname` in
Linux) Linux)
alias ls='ls -F --color=auto' alias ls='ls -F --color=auto'
if which cgdb &> /dev/null; then if command -v cgdb &> /dev/null; then
alias debug='cgdb --args' alias debug='cgdb --args'
elif which gdb &> /dev/null; then elif command -v gdb &> /dev/null; then
alias debug='gdb --args' alias debug='gdb --args'
fi fi
;; ;;
Darwin) Darwin)
alias ls='ls -GFh' alias ls='ls -GFh'
which lldb &> /dev/null && \ command -v lldb &> /dev/null && \
alias debug='lldb --' alias debug='lldb --'
;; ;;
esac esac
command -v wol > /dev/null && \
alias wakeonlan='wol'