1 Commits

Author SHA1 Message Date
83c37fbf3f Add autoenv reload subcommand
The `autoenv reload` subcommand reloads the current environment.
2021-02-09 16:45:52 +00:00
14 changed files with 116 additions and 330 deletions

6
$
View File

@@ -1,6 +0,0 @@
#!/usr/bin/env zsh
read -p "Are you sure? [y/N]: " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
exec "$@"
fi

47
.conduit.yaml Normal file
View File

@@ -0,0 +1,47 @@
---
- location: ~/.config/zsh
- apt:
- zsh
- zsh-doc
- pinentry-curses
- brew:
- zsh
- pacman:
- zsh
- dnf:
- util-linux-user
- zsh
- command:
- install: sudo chsh -s `which zsh` $USER
remove: sudo chsh -s `which bash` $USER
- symlink:
- {src: zlogin, dst: ~/.zlogin}
- {src: zlogout, dst: ~/.zlogout}
- {src: zprofile, dst: ~/.zprofile}
- {src: zshenv, dst: ~/.zshenv}
- {src: zshrc, dst: ~/.zshrc}
- src: prompt_fresh_setup
dst: ~/.local/share/zsh/site-functions/prompt_fresh_setup
- src: build/_build-dir
dst: ~/.local/share/zsh/site-functions/_build-dir
- src: sandbox/_sandbox
dst: ~/.local/share/zsh/site-functions/_sandbox
- src: layout/_layout
dst: ~/.local/share/zsh/site-functions/_layout
- src: notes/_note
dst: ~/.local/share/zsh/site-functions/_note
- repo:
- https://github.com/zsh-users/zsh-autosuggestions.git
- https://github.com/zsh-users/zsh-history-substring-search.git
- https://github.com/zsh-users/zsh-syntax-highlighting.git
- https://github.com/zsh-users/zsh-completions.git
- https://github.com/junegunn/fzf.git
- command:
- fzf/install --bin
- symlink:
- {src: fzf/bin/fzf, dst: ~/.local/bin/fzf}
- {src: fzf/bin/fzf-tmux, dst: ~/.local/bin/fzf-tmux}
- {src: cmake-uninstall, dst: ~/.local/bin/cmake-uninstall}
- command:
- zsh update-completion-links.zsh
- message: zsh will be the default prompt after next login

View File

@@ -2,13 +2,15 @@
<!-- TODO: GIF --> <!-- TODO: GIF -->
## Ansible ## [conduit][conduit]
To install this Zsh configuration: Simple, local, configuration manager.
```console Installation of the configuration files in this repository is orchestrated by
$ ansible-playbook main.yaml --ask-become-pass [conduit][conduit] as defined in the [`.conduit.yaml`](.conduit.yaml) file. This
``` includes [Zsh][zsh] package installs, setting [Zsh][zsh] as the users default
shell, and symbolic linking file such as [`zshrc`](zshrc) to `~/.zshrc`, and
cloning plugin repositories. The repository is cloned to `~/.config/zsh`.
## Prompt ## Prompt

View File

@@ -17,7 +17,6 @@ _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

@@ -12,7 +12,7 @@ autoenv() {
case "$cmd" in case "$cmd" in
-h|--help) # Display help. -h|--help) # Display help.
echo "\ echo "\
usage: autoenv [-h] {init,edit,deinit,reload,add=py} usage: autoenv [-h] {init,edit,deinit}
options: options:
-h, --help show this help message and exit -h, --help show this help message and exit
@@ -22,7 +22,6 @@ 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"
;; ;;
@@ -50,7 +49,7 @@ commands:
if which vim &> /dev/null; then if which vim &> /dev/null; then
# Exit the autoenv before editing. # Exit the autoenv before editing.
_autoenv_exit $PWD _autoenv_exit $PWD
if $EDITOR -p $PWD/.enter $PWD/.exit; then if vim -p $PWD/.enter $PWD/.exit; then
# If enter script exists, authorize it. # If enter script exists, authorize it.
[ -f $PWD/.enter ] && _autoenv_authorized $PWD/.enter yes [ -f $PWD/.enter ] && _autoenv_authorized $PWD/.enter yes
# If exit script exists, authorize it. # If exit script exists, authorize it.
@@ -93,39 +92,17 @@ 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 -p `command -v python` .local virtualenv .local
echo 'source ${0:a:h}/.local/bin/activate' >> .enter echo 'source .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
_autoenv_enter $PWD _autoenv_enter $PWD
pip install pynvim
;; ;;
*) # Invalid arguments, show help then error. *) # Invalid arguments, show help then error.

View File

@@ -1,7 +1,6 @@
#compdef build-dir #compdef build-dir
_arguments \ _arguments \
'(-h --help)'{-h,--help}'[show this help message and exit]' \ '(-h --help)'{-h,--help}'[]' \
'(-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

@@ -32,8 +32,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 show do_build local -a help do_build
zparseopts -D h=help -help=help s=show -show=show -build=do_build zparseopts -D h=help -help=help -build=do_build
if [[ -n $help ]]; then if [[ -n $help ]]; then
cat << EOF cat << EOF
$usage $usage
@@ -45,22 +45,12 @@ 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

@@ -21,11 +21,6 @@
} }
#endif #endif
#define color8(CODE) "\e[3" #CODE "m"
#define color256(CODE) "\e[38;5;" #CODE "m"
#define bold "\e[1m"
#define reset "\e[0m"
typedef struct process { typedef struct process {
pid_t pid; pid_t pid;
FILE* out; FILE* out;
@@ -109,7 +104,7 @@ int main() {
} }
char* branch = trim(branch_buf); char* branch = trim(branch_buf);
char prompt[1024] = {}; char prompt[1024] = {};
append(prompt, 3, " " color256(66), branch, reset); append(prompt, 3, " %{%F{66}%}", branch, "%{%f%}");
// get the upstream remote if one exists // get the upstream remote if one exists
char command[1024] = {}; char command[1024] = {};
@@ -183,22 +178,22 @@ int main() {
if (indexed || modified || deleted || unmerged || untracked) { // modified if (indexed || modified || deleted || unmerged || untracked) { // modified
char int_buf[32]; char int_buf[32];
if (indexed) { if (indexed) {
append(prompt, 3, color8(2) "*", inttostr(int_buf, indexed), reset); append(prompt, 3, "%{%F{2}%}*", inttostr(int_buf, indexed), "%{%f%}");
} }
if (modified) { if (modified) {
append(prompt, 3, color8(1) "+", inttostr(int_buf, modified), reset); append(prompt, 3, "%{%F{1}%}+", inttostr(int_buf, modified), "%{%f%}");
} }
if (deleted) { if (deleted) {
append(prompt, 3, color8(1) "-", inttostr(int_buf, deleted), reset); append(prompt, 3, "%{%F{1}%}-", inttostr(int_buf, deleted), "%{%f%}");
} }
if (unmerged) { if (unmerged) {
append(prompt, 3, bold color8(1) "×", inttostr(int_buf, unmerged), reset); append(prompt, 3, "%{%B%F{1}%}×", inttostr(int_buf, unmerged), "%{%f%b%}");
} }
if (untracked) { if (untracked) {
append(prompt, 1, color8(1) "" reset); append(prompt, 1, "%{%F{1}%}…%{%f%}");
} }
} else { // clean } else { // clean
append(prompt, 1, bold color8(2) "" reset); append(prompt, 1, "%{%B%F{2}%}✓%{%f%b%}");
} }
// print the prompt // print the prompt

View File

@@ -27,11 +27,9 @@ prompt_fresh_setup() {
if [ $almostontop -eq 1 ]; then if [ $almostontop -eq 1 ]; then
# Hook to clear the screen then prints the prompt with previous command at # Hook to clear the screen then prints the prompt with previous command at
# the top of the screen. # the top of the screen.
add-zsh-hook precmd fresh_almostontop_precmd add-zsh-hook preexec fresh_almostontop
add-zsh-hook preexec fresh_almostontop_preexec
else else
add-zsh-hook -d preexec fresh_almostontop_preexec add-zsh-hook -d preexec fresh_almostontop
add-zsh-hook -d precmd fresh_almostontop_precmd
fi fi
[ $recompile -eq 1 ] && prompt_cleanup [ $recompile -eq 1 ] && prompt_cleanup
@@ -44,7 +42,7 @@ prompt_fresh_setup() {
fi fi
local userhost=$USER local userhost=$USER
if [ "$SSH_CONNECTION" != "" ] || [ "$DISTROBOX_ENTER_PATH" != "" ]; then if [ "$SSH_CONNECTION" != "" ]; then
local user="$user@%{%F{244}%}%M%{%f%}" local user="$user@%{%F{244}%}%M%{%f%}"
local userhost="$userhost@`hostname`" local userhost="$userhost@`hostname`"
fi fi
@@ -66,7 +64,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{220}%}$SANDBOX_NAME${PWD#$SANDBOX_HOME}%{%f%}" || \ local directory="%{%F{3}%}$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
@@ -130,43 +128,10 @@ fresh_line_one() {
print -P "$time_stamp $directory$git$py$docker$result" print -P "$time_stamp $directory$git$py$docker$result"
} }
# Executed before each prompt. fresh_almostontop() {
fresh_almostontop_precmd() { clear
# CSI ESC[6n gets the cursor position in the form ESC[<row>;<column>R fresh_line_one
printf "\033[6n" print -P "$PROMPT"'$1'
# Discard prefix delimited by [
read -s -d [
# Store the <row> delimited by ; in row_before
read -s -d \; row_before
# Discard suffix delimted by R otherwise it is output to the tty
read -s -d R
}
# Executed just after a command has been read and is about to be executed.
fresh_almostontop_preexec() {
# CSI ESC[6n gets the cursor position in the form ESC[<row>;<column>R
printf "\033[6n"
# Discard prefix delimited by [
read -s -d [
# Store the <row> delimited by ; in row
read -s -d \; row
# Discard suffix delimted by R otherwise it is output to the tty
read -s -d R
# Move the cursor to the bottom of the terminal
# CSI ESC[<num>B moves the cursor down <num> lines
let "down = $LINES - $row"
printf "\033[${down}B"
# Calculate the number of lines in the prompt
let "prompt_lines = ($row - $row_before) + 2"
# Print new lines to push the old command out of view
let "new = $row - $prompt_lines"
for (( i = 0; i < $new; i++ )); do
printf "\n"
done
# Move the cursor to the line below the prompt
# CSI ESC[<num>A moves the cursor up <num> lines
let "up = $LINES - $prompt_lines"
printf "\033[${up}A"
} }
fresh_compile_git_prompt() { fresh_compile_git_prompt() {

View File

@@ -1,99 +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:
- pinentry-curses
- silversearcher-ag
- unzip
- zsh-doc
state: present
- name: zsh install macOS packages
when: ansible_os_family == "Darwin"
become: false
homebrew:
name: the_silver_searcher
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

@@ -11,7 +11,7 @@ for completion in $zsh_completions/src/_*; do
# Remove existing completion file if it exists. # Remove existing completion file if it exists.
[ -f $symlink ] && rm $symlink [ -f $symlink ] && rm $symlink
# Check if the command exists on the PATH. # Check if the command exists on the PATH.
if command -v ${name:1} &> /dev/null; then if which ${name:1} &> /dev/null; then
# Symlink the completion for the existing command. # Symlink the completion for the existing command.
[ `uname` = Darwin ] && \ [ `uname` = Darwin ] && \
ln -s $completion $symlink || ln -sr $completion $symlink ln -s $completion $symlink || ln -sr $completion $symlink

View File

@@ -1,104 +1,24 @@
# A collection of various shell utilities. # A collection of various shell utilities.
autoload colors && colors
# Abstract different ways to copy to the clipboard.
if [ -n "$SSH_CONNECTION" ] ; then
# Use OSC-52 to set the clipboard
alias copy='base64 | xargs -0 printf "\033]52;c;%s\a"'
elif [ "`uname`" = "Darwin" ]; then
# Use pbcopy to set the clipboard
alias copy='pbcopy'
elif which xclip &> /dev/null; then
# Use xclip to set the clipboard
alias copy='xclip -selection c'
fi
# Abstract different ways to paste from the clipboard.
# TODO: Use OSC-52 to get the clipboard, not widely supported though
if [ "`uname`" = "Darwin" ]; then
# Use pbpaste to get the clipboard
alias paste='pbpaste'
elif which xclip &> /dev/null; then
# Use xclip to get the clipboard
alias paste='xclip -selection c -o'
fi
# Passthrough an escape sequences tmux doesn't know about.
tmux-dcs-passthrough() {
if [ -n "$TMUX" ]; then
printf "\x1bPtmux;\x1b$1\x1b\\"
else
printf "$1"
fi
}
# OSC 9 - Post a notification - supported by iTerm2, maybe others?
notify() {
tmux-dcs-passthrough "\x1b]9;$*\x7"
}
# Detect the type and extract an archive file. # Detect the type and extract an archive file.
extract() { extract() {
if [ -f $1 ]; then if [ -f $1 ]; then
case $1 in case $1 in
*.tar.bz2) tar xvjf $1 ;; *.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;; *.tar.gz) tar xvzf $1 ;;
*.tar.xz) [ `"uname"` = "Darwin" ] && tar xvJf $1 || tar xf $1 ;; *.tar.xz) gunzip $1 ;;
*.bz2) bunzip2 $1 ;; *.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;; *.rar) unrar x $1 ;;
*.gz) gunzip $1 ;; *.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;; *.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;; *.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;; *.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;; *.zip) unzip $1 ;;
*.Z) uncompress $1 ;; *.Z) uncompress $1 ;;
*.7z) 7zr x $1 ;; *.7z) 7zr x $1 ;;
*) echo "$fg[red]error:$reset_color unable to extract '$1'" ;; *) echo "error: unable to extract '$1'" ;;
esac esac
else else
echo "$fg[red]error:$reset_color file not found '$1'" echo "error: file not found '$1'"
fi fi
} }
if which bat &> /dev/null; then
# Wrap bat to specify a theme, always enable color, pipe the output to less.
# Both --theme and --color can be specified multiple times and will override
# these defaults.
bat() {
command bat --theme='TwoDark' --color always --paging auto "$@"
}
elif which batcat &> /dev/null; then
bat() {
command batcat --theme='TwoDark' --color always --paging auto "$@"
}
fi
if which docker-machine &> /dev/null; then
# Wrap the docker command to print a message if a docker-machine is not
# running, rather than just stating it can not find it's socket.
docker() {
command docker "$@"
if ! docker-machine active &> /dev/null; then
echo "$fg[red]error:$reset_color no active host found, run:" \
"docker-machine start <machine>"
return 1
fi
}
# Wrap the docker-machine command to automatically update the environment.
# When a machine is started, set the environment variables provided by
# docker-machine env <machine>. When a machine is stopped, unset the same
# variables.
docker-machine() {
command docker-machine "$@"
if [ "start" = "$1" ]; then
eval `docker-machine env $2`
elif [ "stop" = "$1" ]; then
unset DOCKER_MACHINE_NAME
unset DOCKER_CERT_PATH
unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
fi
}
fi

28
zshenv
View File

@@ -37,7 +37,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
command -v ninja &> /dev/null && \ which ninja &> /dev/null && \
export CMAKE_GENERATOR=Ninja export CMAKE_GENERATOR=Ninja
# Remove duplicates from environment variables # Remove duplicates from environment variables
@@ -47,12 +47,8 @@ typeset -U MANPATH; export MANPATH
typeset -U INFOPATH; export INFOPATH typeset -U INFOPATH; export INFOPATH
# Set default editor. # Set default editor.
if command -v nvim &> /dev/null; then which vim &> /dev/null && \
export EDITOR=`command -v nvim` export EDITOR=`which vim`
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
@@ -81,25 +77,25 @@ 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
command -v pinentry-curses &> /dev/null && \ which 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 which cargo &> /dev/null && \
command -v cargo &> /dev/null && \
export CARGO_HOME=$HOME/.local/share/cargo export CARGO_HOME=$HOME/.local/share/cargo
if command -v ccache &> /dev/null; then if which 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
command -v conan &> /dev/null && \ which conan &> /dev/null && \
export CONAN_USER_HOME=$HOME/.local/share/conan export CONAN_USER_HOME=$HOME/.local/share/conan
command -v docker &> /dev/null && \ which 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
export PYLINTHOME=$HOME/.cache/pylint which rustup &> /dev/null && \
command -v rustup &> /dev/null && \
export RUSTUP_HOME=$HOME/.local/share/rustup export RUSTUP_HOME=$HOME/.local/share/rustup
export WGETRC=$HOME/.config/wget/rc export PYLINTHOME=$HOME/.cache/pylint
# TODO: terminfo # TODO: terminfo
which wget &> /dev/null && \
export WGETRC=$HOME/.config/wgetrc

25
zshrc
View File

@@ -17,8 +17,6 @@ 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
@@ -67,10 +65,10 @@ setopt completeinword
# Initialize completions # Initialize completions
autoload -U compinit autoload -U compinit
compinit -d ~/.cache/zsh/compdump compinit
# Add pip to the old completion engine if present # Add pip to the old completion engine if present
if command -v pip &> /dev/null; then if which pip &> /dev/null; then
function _pip_completion { function _pip_completion {
local words cword local words cword
read -Ac words read -Ac words
@@ -140,13 +138,17 @@ if [[ `uname` = Linux ]]; then
[[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line [[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line
fi fi
# Get the shells parent process name.
ppid_name() { echo $(ps -p $(ps -p $(echo $$) -o ppid=) -o comm=) }
# Enable changing cursor shape based on vi mode # Enable changing cursor shape based on vi mode
if [ "$ITERM_PROFILE" != "" ] && [ "$TMUX" = "" ]; then if [ "$ITERM_PROFILE" != "" ] && [ "$TMUX" = "" ]; then
# iTerm2 cursor shape escape sequences outside tmux # iTerm2 cursor shape escape sequences outside tmux
cursor_block="\e]50;CursorShape=0\C-G" cursor_block="\e]50;CursorShape=0\C-G"
cursor_line="\e]50;CursorShape=1\C-G" cursor_line="\e]50;CursorShape=1\C-G"
else elif [ "$(ppid_name)" != "python2" ]; then
# iTerm2 inside tmux or VTE compatible cursor shape escape sequences. # iTerm2 inside tmux or VTE compatible cursor shape escape sequences,
# exclude Guake even though it's VTE based it doesn't like these
cursor_block="\e[2 q" cursor_block="\e[2 q"
cursor_line="\e[6 q" cursor_line="\e[6 q"
fi fi
@@ -174,16 +176,15 @@ fi
# Frequntly used directories # Frequntly used directories
function frequent-directory() { export $1; hash -d $1 } function frequent-directory() { export $1; 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
# Aliases # Aliases
alias grep='grep --color=always' alias grep='grep --color=always'
command -v cmake &> /dev/null && \ which cmake &> /dev/null && \
alias cninja='cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON' alias cninja='cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON'
command -v ssh &> /dev/null && \ which 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'"
@@ -191,15 +192,15 @@ 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 command -v cgdb &> /dev/null; then if which cgdb &> /dev/null; then
alias debug='cgdb --args' alias debug='cgdb --args'
elif command -v gdb &> /dev/null; then elif which gdb &> /dev/null; then
alias debug='gdb --args' alias debug='gdb --args'
fi fi
;; ;;
Darwin) Darwin)
alias ls='ls -GFh' alias ls='ls -GFh'
command -v lldb &> /dev/null && \ which lldb &> /dev/null && \
alias debug='lldb --' alias debug='lldb --'
;; ;;
esac esac