1 Commits

Author SHA1 Message Date
44ae82b5d6 temp! 2022-02-10 23:05:16 +00:00
19 changed files with 302 additions and 515 deletions

3
.gitignore vendored
View File

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

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

@@ -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"
;; ;;
@@ -46,16 +45,21 @@ 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
# Exit the autoenv before editing. # If vim exists, edit enter and exit scripts.
_autoenv_exit $PWD if which vim &> /dev/null; then
if $EDITOR -p $PWD/.enter $PWD/.exit; then # Exit the autoenv before editing.
# If enter script exists, authorize it. _autoenv_exit $PWD
[ -f $PWD/.enter ] && _autoenv_authorized $PWD/.enter yes if vim -p $PWD/.enter $PWD/.exit; then
# If exit script exists, authorize it. # If enter script exists, authorize it.
[ -f $PWD/.exit ] && _autoenv_authorized $PWD/.exit yes [ -f $PWD/.enter ] && _autoenv_authorized $PWD/.enter 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.
@@ -88,34 +92,13 @@ 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

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

@@ -7,31 +7,33 @@ 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
autoload -U regexp-replace if [[ "`vim --version|head -1|cut -c 19-21`" =~ "^8\.[123456789]$" ]]; then
function vimdebug() { autoload -U regexp-replace
# For each item in $* replace * and \* and then replace \ with \\ function vimdebug() {
local args=() # For each item in $* replace * and \* and then replace \ with \\
for arg in "$@"; do local args=()
regexp-replace arg '\*' '\\*' for arg in "$@"; do
args+=($arg) regexp-replace arg '\*' '\\*'
done args+=($arg)
nvim "+packadd termdebug" "+TermdebugCommand $args" done
} vim "+packadd termdebug" "+TermdebugCommand $args"
if command -v nvim &> /dev/null; then }
alias debug=vimdebug alias debug='vimdebug'
elif command -v gdb &> /dev/null; then 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
command -v lldb &> /dev/null && \ which lldb &> /dev/null && \
alias debug='lldb --' alias debug='lldb --'
fi 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
@@ -43,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
@@ -84,115 +76,98 @@ EOF
integer index=0 integer index=0
if [[ ${#local_build_dirs} -eq 0 ]]; then if [[ ${#local_build_dirs} -eq 0 ]]; then
error "no build directories found"; return 1 error "no build directories found"; return 1
elif [[ ${#local_build_dirs} -eq 1 ]]; then
local_build_dir=${local_build_dirs[1]}
elif [[ ${#local_build_dirs} -gt 1 ]]; then elif [[ ${#local_build_dirs} -gt 1 ]]; then
if command -v fzf &> /dev/null; then zmodload zsh/curses && {
# Use fzf to select a build directory # Get the size of the terminal
local max=$(( $( tput lines ) / 2 )) local size=`stty size`
local best=$(( ${#local_build_dirs} + 3 )) integer height=${size% *}
local_build_dir=$( integer width=${size#* }
printf '%s\n' "${local_build_dirs[@]}" |
fzf --layout=reverse --info=hidden --border=rounded --tac \
--height=$(( $best < $max ? $best : $max ))
)
if [[ $? -ne 0 ]]; then
return 1
fi
else
# Fallback to zcurses selector when fzf is not available
zmodload zsh/curses && {
# Get the size of the terminal
local size=`stty size`
integer height=${size% *}
integer width=${size#* }
# Create the window and hide the cursor # Create the window and hide the cursor
zcurses init zcurses init
zcurses addwin build-dir $height $width 0 0 zcurses addwin build-dir $height $width 0 0
# Hide the cursor for zcurses, trap SIGINT to ensure cleanup in # Hide the cursor for zcurses, trap SIGINT to ensure cleanup in
# always-list occurs below # always-list occurs below
tput civis; trap 'return 130' INT tput civis; trap 'return 130' INT
# Enter display loop # Enter display loop
local key keypad local key keypad
while (( 1 )); do while (( 1 )); do
zcurses clear build-dir zcurses clear build-dir
# Add the prompt text # Add the prompt text
zcurses move build-dir 1 1 zcurses move build-dir 1 1
zcurses string build-dir 'Select a build directory:' zcurses string build-dir 'Select a build directory:'
# Add the selections text # Add the selections text
for (( i = 0; i < ${#local_build_dirs}; i++ )); do for (( i = 0; i < ${#local_build_dirs}; i++ )); do
integer line=$i+3 integer line=$i+3
zcurses move build-dir $line 1 zcurses move build-dir $line 1
[[ $index -eq $i ]] && [[ $index -eq $i ]] &&
zcurses string build-dir "* " || zcurses string build-dir "* " ||
zcurses string build-dir " " zcurses string build-dir " "
zcurses string build-dir ${local_build_dirs[$i+1]} zcurses string build-dir ${local_build_dirs[$i+1]}
done
# Display the text the and wait for input
zcurses refresh build-dir
zcurses input build-dir key keypad
# Handle user input
case $key in
(UP|k|$'\C-P')
[[ $index -gt 0 ]] && index=$index-1 ;;
(DOWN|j|$'\C-N')
[[ $index -lt ${#local_build_dirs}-1 ]] && index=$index+1 ;;
(ENTER|$'\n')
break ;;
esac
done done
} always {
# Restore the cursor and cleanup zcurses
tput cvvis; tput cnorm
zcurses delwin build-dir
zcurses end
}
# On success setup the build directory for use # Display the text the and wait for input
if [[ $? -eq 0 ]]; then zcurses refresh build-dir
# Set the build directory from selection if empty zcurses input build-dir key keypad
[[ -z $local_build_dir ]] && \
local_build_dir=${local_build_dirs[$index+1]} # Handle user input
fi case $key in
fi (UP|k|$'\C-P')
[[ $index -gt 0 ]] && index=$index-1 ;;
(DOWN|j|$'\C-N')
[[ $index -lt ${#local_build_dirs}-1 ]] && index=$index+1 ;;
(ENTER|$'\n')
break ;;
esac
done
} always {
# Restore the cursor and cleanup zcurses
tput cvvis; tput cnorm
zcurses delwin build-dir
zcurses end
}
fi fi
fi fi
# If `build.ninja` exists in alias `ninja`, return. # On success setup the build directory for use
local build if [[ $? -eq 0 ]]; then
[ -f $local_build_dir/build.ninja ] && \ # Set the build directory from selection if empty
build="ninja -C $local_build_dir" [[ -z $local_build_dir ]] && \
local_build_dir=${local_build_dirs[$index+1]}
# If `Makefile` exists in alias `make`, return. # If `build.ninja` exists in alias `ninja`, return.
if [ -f $local_build_dir/Makefile ]; then local build
[ `uname` = Darwin ] && \ [ -f $local_build_dir/build.ninja ] && \
local cpu_count=`sysctl -n hw.ncpu` || build="ninja -C $local_build_dir"
local cpu_count=`grep -c '^processor' /proc/cpuinfo`
build="make -j $cpu_count -C $local_build_dir"
fi
# If the build variable is not defined the command could not be determined # If `Makefile` exists in alias `make`, return.
if [ -z $build ]; then if [ -f $local_build_dir/Makefile ]; then
warning "build command detection failed: $local_build_dir" [ `uname` = Darwin ] && \
# Prompt user to enter a build command local cpu_count=`sysctl -n hw.ncpu` ||
vared -p 'enter comand: ' build local cpu_count=`grep -c '^processor' /proc/cpuinfo`
fi build="make -j $cpu_count -C $local_build_dir"
fi
# Redefine the `build` alias and update the `~build` hash directory # If the build variable is not defined the command could not be determined
alias build="$build" if [ -z $build ]; then
hash -d build=$local_build_dir warning "build command detection failed: $local_build_dir"
export build_dir=$local_build_dir # Prompt user to enter a build command
vared -p 'enter comand: ' build
fi
# If `--build` is specified then evaluate the command. # Redefine the `build` alias and update the `~build` hash directory
if [[ -n $do_build ]]; then alias build="$build"
eval build hash -d build=$local_build_dir
export build_dir=$local_build_dir
# If `--build` is specified then evaluate the command.
if [[ -n $do_build ]]; then
eval build
fi
fi fi
} }

View File

@@ -9,24 +9,24 @@
#endif #endif
#ifdef DEBUG #ifdef DEBUG
#define check(CONDITION) \ #define check(CONDITION) \
if (CONDITION) { \ if (CONDITION) { \
fprintf(stderr, "error: %s: %d: %s\n", __FILE__, __LINE__, #CONDITION); \ fprintf(stderr, "error: %s: %d: %s\n", __FILE__, __LINE__, #CONDITION); \
exit(0); \ exit(0); \
} }
#else #else
#define check(CONDITION) \ #define check(CONDITION) \
if (CONDITION) { \ if (CONDITION) { \
exit(0); \ exit(0); \
} }
#endif #endif
typedef struct process { typedef struct process {
pid_t pid; pid_t pid;
FILE *out; FILE* out;
} process_t; } process_t;
process_t process_open(char *command) { process_t process_open(char* command) {
int fds[2]; int fds[2];
check(pipe(fds)); check(pipe(fds));
int pid = fork(); int pid = fork();
@@ -35,7 +35,7 @@ process_t process_open(char *command) {
close(fds[0]); close(fds[0]);
dup2(fds[1], STDOUT_FILENO); dup2(fds[1], STDOUT_FILENO);
dup2(STDOUT_FILENO, STDERR_FILENO); dup2(STDOUT_FILENO, STDERR_FILENO);
char *argv[] = {"sh", "-c", command, NULL}; char* argv[] = {"sh", "-c", command, NULL};
exit(execvp(argv[0], argv)); exit(execvp(argv[0], argv));
} else { // parent process } else { // parent process
close(fds[1]); close(fds[1]);
@@ -54,11 +54,9 @@ int process_close(process_t process) {
return 0; return 0;
} }
char *trim(char *str) { char* trim(char* str) {
char *end; char* end;
while (isspace((unsigned char)*str)) { while (isspace((unsigned char)*str)) str++;
str++;
}
if (*str == 0) { if (*str == 0) {
return str; return str;
} }
@@ -70,17 +68,17 @@ char *trim(char *str) {
return str; return str;
} }
char *append(char *buffer, int count, ...) { char* append(char* buffer, int count, ...) {
va_list list; va_list list;
va_start(list, count); va_start(list, count);
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
strcat(buffer, va_arg(list, char *)); strcat(buffer, va_arg(list, char*));
} }
va_end(list); va_end(list);
return buffer; return buffer;
} }
char *inttostr(char *buffer, int value) { char* inttostr(char* buffer, int value) {
sprintf(buffer, "%d", value); sprintf(buffer, "%d", value);
return buffer; return buffer;
} }
@@ -104,7 +102,7 @@ int main() {
check(process_close(process)); check(process_close(process));
} }
} }
char *branch = trim(branch_buf); char* branch = trim(branch_buf);
char prompt[1024] = {}; char prompt[1024] = {};
append(prompt, 3, " %{%F{66}%}", branch, "%{%f%}"); append(prompt, 3, " %{%F{66}%}", branch, "%{%f%}");
@@ -115,7 +113,7 @@ int main() {
char remote_buf[256] = {}; char remote_buf[256] = {};
fread(remote_buf, 1, sizeof(remote_buf), process.out); fread(remote_buf, 1, sizeof(remote_buf), process.out);
if (process_close(process) == 0) { if (process_close(process) == 0) {
char *remote = trim(remote_buf); char* remote = trim(remote_buf);
// get the number of commits ahead of the remote // get the number of commits ahead of the remote
memset(command, 0, sizeof(command)); memset(command, 0, sizeof(command));
process = process_open(append(command, 5, process = process_open(append(command, 5,
@@ -123,7 +121,7 @@ int main() {
remote, "/", branch, "...HEAD --count")); remote, "/", branch, "...HEAD --count"));
char count[32] = {}; char count[32] = {};
fread(count, 1, sizeof(count), process.out); fread(count, 1, sizeof(count), process.out);
if (process_close(process) == 0 && strcmp("0", trim(count))) { if(process_close(process) == 0 && strcmp("0", trim(count))) {
append(prompt, 2, "", trim(count)); append(prompt, 2, "", trim(count));
} }
@@ -134,7 +132,7 @@ int main() {
remote, "/", branch, "...HEAD --count")); remote, "/", branch, "...HEAD --count"));
memset(count, 0, sizeof(count)); memset(count, 0, sizeof(count));
fread(count, 1, sizeof(count), process.out); fread(count, 1, sizeof(count), process.out);
if (process_close(process) == 0 && strcmp("0", trim(count))) { if(process_close(process) == 0 && strcmp("0", trim(count))) {
append(prompt, 2, "", trim(count)); append(prompt, 2, "", trim(count));
} }
} }
@@ -159,7 +157,7 @@ int main() {
case ' ': case ' ':
switch (Y) { switch (Y) {
case 'M': ++modified; break; case 'M': ++modified; break;
case 'D': ++deleted; break; case 'D': ++deleted; break;
} break; } break;
case 'D': ++indexed; case 'D': ++indexed;
switch (Y) { switch (Y) {
@@ -170,14 +168,14 @@ int main() {
switch (Y) { switch (Y) {
case ' ': break; case ' ': break;
case 'M': ++modified; break; case 'M': ++modified; break;
case 'D': ++deleted; break; case 'D': ++deleted; break;
} break; } break;
} }
} }
} }
check(process_close(process)); check(process_close(process));
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, "%{%F{2}%}*", inttostr(int_buf, indexed), "%{%f%}"); append(prompt, 3, "%{%F{2}%}*", inttostr(int_buf, indexed), "%{%f%}");
@@ -194,7 +192,7 @@ int main() {
if (untracked) { if (untracked) {
append(prompt, 1, "%{%F{1}%}…%{%f%}"); append(prompt, 1, "%{%F{1}%}…%{%f%}");
} }
} else { // clean } else { // clean
append(prompt, 1, "%{%B%F{2}%}✓%{%f%b%}"); append(prompt, 1, "%{%B%F{2}%}✓%{%f%b%}");
} }

View File

@@ -1,91 +0,0 @@
#!/usr/bin/env zsh
error() {
echo "error: $*"
exit 1
}
directories=(
~/.cache/zsh
~/.local/bin
~/.local/share/zsh/plugins
~/.local/share/zsh/site-functions
)
for directory in $directories; do
mkdir -p $directory
done
plugins=(
zsh-users/zsh-autosuggestions
zsh-users/zsh-history-substring-search
zsh-users/zsh-syntax-highlighting
zsh-users/zsh-completions
)
for plugin in $plugins; do
plugin_name=${plugin/*\//}
plugin_directory=~/.local/share/zsh/plugins/$plugin_name
if [ -d $plugin_directory ]; then
if ! git -C $plugin_directory diff-index --quiet HEAD --; then
error $plugin_directory contains unstaged changes
fi
pull=`git -C $plugin_directory pull`
if [ "$pull" != "Already up-to-date." ]; then
echo changed pulled $plugin_directory
fi
else
git clone https://github.com/$plugin.git $plugin_directory > /dev/null
echo changed cloned $plugin_directory
fi
old_plugin_directory=~/.config/zsh/$plugin_name
if [ -d $old_plugin_directory ]; then
rm -rf $old_plugin_directory
echo changed removed $old_plugin_directory
fi
done
declare -A symlinks
symlinks=(
~/.config/zsh/zlogin ~/.zlogin
~/.config/zsh/zlogout ~/.zlogout
~/.config/zsh/zprofile ~/.zprofile
~/.config/zsh/zshenv ~/.zshenv
~/.config/zsh/zshrc ~/.zshrc
~/.config/zsh/prompt_fresh_setup
~/.local/share/zsh/site-functions/prompt_fresh_setup
~/.config/zsh/cmake-uninstall ~/.local/bin/cmake-uninstall
~/.config/zsh/$ ~/.local/bin/$
~/.config/zsh/url/url ~/.local/bin/url
)
for completion in ~/.config/zsh/**/_*; do
filename=`basename $completion`
symlinks[$completion]=~/.local/share/zsh/site-functions/$filename
done
completions=( ~/.local/share/zsh/plugins/zsh-completions/src/* )
for completion in $completions; do
filename=`basename $completion`
name=${filename:1}
if command -v $name > /dev/null; then
symlinks[$completion]=~/.local/share/zsh/site-functions/$filename
fi
done
for source in ${(k)symlinks}; do
dest=$symlinks[$source]
if [ -L $dest ]; then
target=`readlink $dest`
if [ "$target" != "$source" ]; then
rm $dest
ln -s $source $dest
echo changed replace incorrect symlink $dest
fi
elif [ -f $dest ]; then
error symlink failed $dest exists but is a regular file
else
ln -s $source $dest
echo changed created symlink $dest
fi
done

View File

@@ -2,7 +2,7 @@ layout() {
if [[ "$1" == "" ]]; then if [[ "$1" == "" ]]; then
echo "usage: layout <layout> [name]" echo "usage: layout <layout> [name]"
else else
~/.local/share/tmux/layouts/$1 tmux source-file ~/.local/share/tmux/layouts/$1
if [[ "$2" != "" ]]; then if [[ "$2" != "" ]]; then
tmux rename-window $2 tmux rename-window $2
fi fi

View File

@@ -1,22 +0,0 @@
#!/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

@@ -1,6 +0,0 @@
#!/bin/bash
for d in /sys/kernel/iommu_groups/*/devices/*; do
n=${d#*/iommu_groups/*}; n=${n%%/*}
printf '%s ' "$n"
lspci -nns "${d##*/}"
done

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{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

View File

@@ -36,7 +36,7 @@ usage: sandbox [-h] {create,rename,destroy,enable,disable,list} ..
if [ "$git" = true ]; then if [ "$git" = true ]; then
local repo=$arg local repo=$arg
git=false git=false
elif [[ -z "$name" ]]; then elif [[ -n "$name" ]]; then
error "invalid argument $arg\n$usage" && return 1 error "invalid argument $arg\n$usage" && return 1
else else
local name=$arg local name=$arg
@@ -44,11 +44,14 @@ 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
@@ -58,49 +61,55 @@ 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" ]] && \
@@ -109,19 +118,16 @@ 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
} }

91
tasks.yaml Normal file
View File

@@ -0,0 +1,91 @@
---
- 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

19
update-completion-links.zsh Executable file
View File

@@ -0,0 +1,19 @@
#!/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

View File

@@ -1,22 +0,0 @@
#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
}

27
url/url
View File

@@ -1,27 +0,0 @@
#!/usr/bin/env python
"""URL encode or decode text."""
from argparse import ArgumentParser
from urllib import parse
def main():
cli = ArgumentParser(description=__doc__)
cli.add_argument('command',
choices=['encode', 'decode'],
help='type of processing to perform on text')
cli.add_argument('text',
nargs='?',
help='optional text read from stdin when omitted')
args = cli.parse_args()
print({
'encode': parse.quote_plus,
'decode': parse.unquote_plus,
}[args.command](args.text if args.text else input()))
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
exit(130)

View File

@@ -16,7 +16,10 @@ 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 [ "`uname`" = "Darwin" ]; then if [ -n "$SSH_CONNECTION" ]; 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
@@ -26,60 +29,18 @@ fi
# Passthrough an escape sequences tmux doesn't know about. # Passthrough an escape sequences tmux doesn't know about.
tmux-dcs-passthrough() { tmux-dcs-passthrough() {
local escape_sequence=$1
if [ -n "$TMUX" ]; then if [ -n "$TMUX" ]; then
# Replace single \x1b or \033 with two, this is required for tmux to printf "\x1bPtmux;\x1b$1\x1b\\"
# properly pass-through the escape sequence.
escape_sequence=${escape_sequence//\\x1b/\\x1b\\x1b}
escape_sequence=${escape_sequence//\\033/\\x1b\\x1b}
printf '\x1bPtmux;\x1b'"$escape_sequence"'\x1b\\'
else else
printf "$escape_sequence" printf "$1"
fi fi
} }
# OSC 9 - Post a notification - supported by iTerm2, kitty, WezTerm, others? # OSC 9 - Post a notification - supported by iTerm2, maybe others?
notify() { notify() {
tmux-dcs-passthrough '\x1b]9;'"$*"'\x7' tmux-dcs-passthrough "\x1b]9;$*\x7"
} }
# Send a desktop notification when long running commands complete.
notify_command_threshold=60
notify_ignore_list=(
cmatrix gh git glab man nvim ssh sudo sudoedit tmux vi vim
)
notify-ignore() {
for ignore in $notify_ignore_list; do
if [[ "$1" = "$ignore"* ]]; then
return 0
fi
done
return 1
}
notify-preexec() {
if notify-ignore $1; then
return
fi
notify_command_start=`date +%s`
notify_command=$1
}
add-zsh-hook preexec notify-preexec
notify-precmd() {
if ! [[ -z $notify_command_start ]]; then
local notify_command_end=`date +%s`
local notify_command_time=$(($notify_command_end - $notify_command_start))
if [[ $notify_command_time -gt $notify_command_threshold ]]; then
notify "completed: $notify_command"
fi
unset notify_command
unset notify_command_start
fi
}
add-zsh-hook precmd notify-precmd
# 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
@@ -144,7 +105,3 @@ if which docker-machine &> /dev/null; then
fi fi
} }
fi fi
ls-iommu() {
$HOME/.config/zsh/ls-iommu.sh | sort -n
}

52
zshenv
View File

@@ -22,17 +22,10 @@ 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
if [ `uname -m` = arm64 ]; then [ -d /usr/local/opt/python/libexec/bin ] && \
homebrew_root=/opt/homebrew PATH=/usr/local/opt/python/libexec/bin:$PATH
[ -d /opt/homebrew/bin ] && \ [ -f /usr/local/bin/ccache ] && \
PATH=$homebrew_root/bin:$PATH PATH=/usr/local/opt/ccache/libexec:$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
@@ -44,9 +37,8 @@ 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
export CMAKE_EXPORT_COMPILE_COMMANDS=ON
# Remove duplicates from environment variables # Remove duplicates from environment variables
typeset -U fpath typeset -U fpath
@@ -55,20 +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
if command -v fzf &> /dev/null; then
export FZF_DEFAULT_OPTS='--no-bold
--color=fg:#c5c9c5,fg+:#c5c9c5,bg:#000000,bg+:#393836
--color=hl:#8ea4a2,hl+:#8ea4a2,info:#afaf87,marker:#C8C093
--color=prompt:#C8C093,spinner:#8992a7,pointer:#FF9E3B,header:#87afaf
--color=gutter:#000000,border:#54546D,label:#aeaeae,query:#c5c9c5'
fi
# 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
@@ -97,26 +77,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
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 export IPYTHONDIR=$HOME/.config/ipython
command -v cargo &> /dev/null && \ which 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
[ -f $HOME/.config/wget/rc ] && \ export PYLINTHOME=$HOME/.cache/pylint
export WGETRC=$HOME/.config/wget/rc
# TODO: terminfo # TODO: terminfo
[ -f $HOME/.config/wgetrc ] &&
export WGETRC=$HOME/.config/wgetrc

73
zshrc
View File

@@ -3,12 +3,8 @@
# Load plugin scripts # Load plugin scripts
source-plugin() { source-plugin() {
local shared_plugin=~/.local/share/zsh/plugins/$1/$1.plugin.zsh if [ -d ~/.config/zsh/$1 ]; then
local local_plugin=~/.config/zsh/$1/$1.plugin.zsh source ~/.config/zsh/$1/$1.plugin.zsh
if [ -f $shared_plugin ]; then
source $shared_plugin
elif [ -f $local_plugin ]; then
source $local_plugin
else else
echo "zsh plugin not found: $1" echo "zsh plugin not found: $1"
fi fi
@@ -21,13 +17,9 @@ 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
(( ${+ZSH_HIGHLIGHT_STYLES} )) || typeset -A ZSH_HIGHLIGHT_STYLES
ZSH_HIGHLIGHT_STYLES[precommand]=fg=green
# Build system helper commands # Build system helper commands
source-plugin build source-plugin build
@@ -73,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
@@ -146,18 +138,6 @@ if [[ `uname` = Linux ]]; then
[[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line [[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line
fi fi
# Fuzzy history search with fzf
function fzf-history-search() {
local selected
selected=`history | sed 's/ *[0-9]* *//' | fzf`
if [[ -n "$selected" ]]; then
BUFFER="$selected"
zle end-of-line
fi
}
zle -N fzf-history-search
bindkey '^R' fzf-history-search
# 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
@@ -190,34 +170,17 @@ if [[ ! -z "$cursor_block" && ! -z "$cursor_line" ]]; then
fi fi
# Frequntly used directories # Frequntly used directories
function frequent-directory() { function frequent-directory() { export $1; hash -d $1 }
if [ -d "$2" ]; then frequent-directory Projects="$HOME/Projects"
# Replace - with _ in environment variable name.
local name=${1//-/_}
local value=$2
export $name=$value
hash -d $1
fi
}
frequent-directory Desktop "$HOME/Desktop"
frequent-directory Documents "$HOME/Documents"
frequent-directory Downloads "$HOME/Downloads"
frequent-directory Projects "$HOME/Projects"
frequent-directory Sandbox "$HOME/Sandbox"
frequent-directory cache "$HOME/.cache"
frequent-directory config "$HOME/.config"
frequent-directory local "$HOME/.local"
# 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'
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'"
@@ -225,29 +188,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
command -v wol > /dev/null && \
alias wakeonlan='wol'
# Append any aliases to notify_ignore_list if they contain any ignore commands
# NOTE: Keep this at the end of ~/.zshrc so all aliases are processed
for name in ${(k)aliases}; do
cmd=${${${$(alias $name)#${name}=}#\'}#\"}
for ignore in $notify_ignore_list; do
if [[ "$cmd" = "$ignore"* ]]; then
notify_ignore_list+=( $name )
fi
done
done