use long form of command line options where possible

This commit is contained in:
Alan Faubert 2021-02-09 20:59:02 -05:00
parent 78ecd2ee12
commit 8b7de2edea
25 changed files with 96 additions and 96 deletions

View File

@ -11,6 +11,6 @@ Add this to `/etc/bash.bashrc`
```bash
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
eval $(dircolors -b)
eval $(dircolors --sh)
alias ls='ls --color=auto'
```

View File

@ -1,9 +1,9 @@
#!/bin/sh
if [ $# = 0 ]; then >&2 echo 'Arguments: <executable file>...'; exit 1; fi
mkdir -p ~/bin
mkdir --parents ~/bin
for bin in "$@"; do
target="$(readlink -e "$bin")" &&
target="$(readlink --canonicalize "$bin")" &&
link="$([ -d "$target" ] && echo "$target" | sed s!/!_!g || basename "$bin")" &&
rm -rf ~/bin/"$link" &&
ln -s "$target" ~/bin/"$link"
rm --force --recursive ~/bin/"$link" &&
ln --symbolic "$target" ~/bin/"$link"
done

View File

@ -6,7 +6,7 @@ for file in "$@"; do
done
for file in "$@"; do
[ "$newest" -nt "$file" ] || continue
read -rp "$newest -> $file ? [y/n] " -N1 r
read -N 1 -p "$newest -> $file ? [y/n] " -r r
echo
[ "$r" = y ] && cp --preserve "$newest" "$file"
done

View File

@ -1,5 +1,5 @@
#!/bin/bash
cd "$(dirname "$(readlink -e "$0")")"
cd "$(dirname "$(readlink --canonicalize "$0")")"
root_win="$(wslpath -w .)"
root_win_slash="$(wslpath -m .)"
while :; do
@ -16,52 +16,52 @@ while :; do
--notags --default-item "$action" 3>&2 2>&1 1>&3-)"
case "$action" in
wsl-resolvconf)
wsl.exe -d $WSL_DISTRO_NAME -u $(id -un 0) -- rm /etc/resolv.conf
wsl.exe -d $WSL_DISTRO_NAME -u $(id -un 0) -- echo $'nameserver 1.1.1.1\nnameserver 1.0.0.1' \> /etc/resolv.conf
wsl.exe --distribution $WSL_DISTRO_NAME --user $(id --name --user 0) -- rm /etc/resolv.conf
wsl.exe --distribution $WSL_DISTRO_NAME --user $(id --name --user 0) -- echo $'nameserver 1.1.1.1\nnameserver 1.0.0.1' \> /etc/resolv.conf
;;
wsl-hosts)
wsl.exe -d $WSL_DISTRO_NAME -u $(id -un 0) -- ln -frs "$(wslpath "$(wslvar WINDIR)")"/System32/drivers/etc/hosts /etc/hosts
wsl.exe --distribution $WSL_DISTRO_NAME --user $(id --name --user 0) -- ln --force --relative --symbolic "$(wslpath "$(wslvar WINDIR)")"/System32/drivers/etc/hosts /etc/hosts
;;
wsl-elevate)
wsl.exe -d $WSL_DISTRO_NAME -u $(id -un 0) -- ln -frs wsl/wsl-elevate /usr/local/bin/wsl-elevate
wsl.exe --distribution $WSL_DISTRO_NAME --user $(id --name --user 0) -- ln --force --relative --symbolic wsl/wsl-elevate /usr/local/bin/wsl-elevate
;;
wsl-scripts)
bash/scripts/2path.sh wsl/scripts
;;
wsl-win)
rm -rf ~/win &&
ln -rs "$(wslpath "$(wslvar USERPROFILE)")" ~/win
rm --force --recursive ~/win &&
ln --relative --symbolic "$(wslpath "$(wslvar USERPROFILE)")" ~/win
;;
wsl-wsltty)
(cmd.exe /c rmdir /s /q "%APPDATA%\wsltty" 2\> nul; cmd.exe /c mklink /d "%APPDATA%\wsltty" "$root_win\wsl\wsltty")
;;
bash-profile)
ln -frs bash/.profile ~/.profile
ln --force --relative --symbolic bash/.profile ~/.profile
;;
bash-scripts)
bash/scripts/2path.sh bash/scripts
;;
ssh)
rm -rf ~/.ssh &&
ln -rs ssh/config ~/.ssh &&
rm --force --recursive ~/.ssh &&
ln --relative --symbolic ssh/config ~/.ssh &&
chmod 600 ~/.ssh/*
;;
ssh-win)
(cmd.exe /c rmdir /s /q "%USERPROFILE%\.ssh" 2\> nul; cmd.exe /c mklink /d "%USERPROFILE%\.ssh" "$root_win\ssh\config")
;;
git)
ln -frs git/.gitconfig ~/.gitconfig
ln --force --relative --symbolic git/.gitconfig ~/.gitconfig
;;
git-win)
(cmd.exe /c del "%USERPROFILE%\.gitconfig" 2\> nul; cmd.exe /c mklink "%USERPROFILE%\.gitconfig" "$root_win\git\.gitconfig")
;;
git-delta)
mkdir -p ~/.bin &&
wget https://github.com"$(curl -s https://github.com/dandavison/delta/releases | grep -m1 -o '[^\"]*x86_64-unknown-linux-gnu[^\"]*')" -O- | tar xzO --strip-components=1 --no-anchored delta > ~/.bin/git-delta &&
mkdir --parents ~/.bin &&
wget https://github.com"$(curl --silent https://github.com/dandavison/delta/releases | grep --max-count=1 --only-matching '[^\"]*x86_64-unknown-linux-gnu[^\"]*')" --output-document=- | tar --extract --gzip --no-anchored --strip-components=1 --to-stdout delta > ~/.bin/git-delta &&
chmod +x ~/.bin/git-delta
;;
git-filter-repo)
([ -d ~/.bin/git-filter-repo ] || (mkdir -p ~/.bin && git clone https://github.com/newren/git-filter-repo ~/.bin/git-filter-repo)) &&
([ -d ~/.bin/git-filter-repo ] || (mkdir --parents ~/.bin && git clone https://github.com/newren/git-filter-repo ~/.bin/git-filter-repo)) &&
bash/scripts/2path.sh ~/.bin/git-filter-repo/git-filter-repo
;;
git-scripts)
@ -71,9 +71,9 @@ while :; do
code --install-extension dbaeumer.vscode-eslint --install-extension eamodio.gitlens --install-extension esbenp.prettier-vscode --install-extension ms-vscode-remote.vscode-remote-extensionpack --install-extension pkief.material-icon-theme --install-extension streetsidesoftware.code-spell-checker --install-extension svelte.svelte-vscode
;;
vscode-linux)
mkdir -p ~/.config/Code/User &&
ln -frs vscode/keybindings.json ~/.config/Code/User/keybindings.json &&
ln -frs vscode/settings.json ~/.config/Code/User/settings.json
mkdir --parents ~/.config/Code/User &&
ln --force --relative --symbolic vscode/keybindings.json ~/.config/Code/User/keybindings.json &&
ln --force --relative --symbolic vscode/settings.json ~/.config/Code/User/settings.json
;;
vscode-win)
(cmd.exe /c del "%APPDATA%\Code\User\keybindings.json" 2\> nul; cmd.exe /c mklink "%APPDATA%\Code\User\keybindings.json" "$root_win\vscode\keybindings.json") &&
@ -84,32 +84,32 @@ while :; do
bash/scripts/2path.sh ~/.volta/bin
;;
nodejs-npmrc)
ln -frs nodejs/.npmrc ~/.npmrc
ln --force --relative --symbolic nodejs/.npmrc ~/.npmrc
;;
nodejs-config)
mkdir -p ~/dev &&
mkdir --parents ~/dev &&
for file in nodejs/config/{.*,*}; do
[[ "$file" == */. ]] || [[ "$file" == */.. ]] || ln -frs "$file" ~/dev/"$(basename "$file")"
[[ "$file" == */. ]] || [[ "$file" == */.. ]] || ln --force --relative --symbolic "$file" ~/dev/"$(basename "$file")"
done
;;
nodejs-scripts)
bash/scripts/2path.sh nodejs/scripts
;;
gcloud)
([ -d ~/.bin/gcloud ] || (mkdir -p ~/.bin/gcloud && wget "$(curl -s https://cloud.google.com/sdk/docs/downloads-versioned-archives | grep -o 'https[^\"]*linux-x86_64.tar.gz')" -O- | tar xzC ~/.bin/gcloud --strip-components=1)) &&
([ -d ~/.bin/gcloud ] || (mkdir --parents ~/.bin/gcloud && wget "$(curl --silent https://cloud.google.com/sdk/docs/downloads-versioned-archives | grep --only-matching 'https[^\"]*linux-x86_64.tar.gz')" --output-document=- | tar --extract --directory ~/.bin/gcloud --gzip --strip-components=1)) &&
bash/scripts/2path.sh ~/.bin/gcloud/bin/gcloud
;;
gcloud-config)
mkdir -p ~/.config &&
rm -rf ~/.config/gcloud &&
ln -rs gcloud/config ~/.config/gcloud
mkdir --parents ~/.config &&
rm --force --recursive ~/.config/gcloud &&
ln --relative --symbolic gcloud/config ~/.config/gcloud
;;
tmux)
ln -frs tmux/.tmux.conf ~/.tmux.conf
ln --force --relative --symbolic tmux/.tmux.conf ~/.tmux.conf
;;
firefox-rebuild-win)
ls firefox/*+* | cut -c9- | while read config; do
truncate -s0 firefox/"$config"
ls firefox/*+* | cut --characters=9- | while read config; do
truncate --size=0 firefox/"$config"
IFS='+' read -a pieces <<< "$config"
for piece in "${pieces[@]}"; do
[ -f firefox/"$piece" ] && cat firefox/"$piece" >> firefox/"$config"
@ -123,7 +123,7 @@ while :; do
mapfile -t profiles < <(ls "$profile_dir")
profiles_args=()
for ((i=0; i < ${#profiles[@]}; i++)); do profiles_args[2*i]="${profiles[$i]}"; profiles_args[2*i+1]="${profiles[$i]}"; done
mapfile -t configs < <(ls firefox/*+* | cut -c9-)
mapfile -t configs < <(ls firefox/*+* | cut --characters=9-)
configs_args=()
for ((i=0; i < ${#configs[@]}; i++)); do configs_args[2*i]="${configs[$i]}"; configs_args[2*i+1]="${configs[$i]}"; done
while :; do
@ -131,7 +131,7 @@ while :; do
[ "$profile" = '' ] && break
config="$(whiptail --title "Link $profile to config" --menu '' 22 60 15 "${configs_args[@]}" --notags --default-item "$config" 3>&2 2>&1 1>&3-)"
[ "$config" = '' ] && break
rm -f "$profile_dir"/"$profile"/user.js
rm --force "$profile_dir"/"$profile"/user.js
cmd.exe /c mklink %APPDATA%\\Mozilla\\Firefox\\Profiles\\"$profile"\\user.js "$root_win"\\firefox\\"$config"
done
;;

View File

@ -1,3 +1,3 @@
#!/bin/sh
git fetch --all -p
git branch -vv | awk '/: gone]/{print $1}' | xargs -r git branch -D
git fetch --all --prune
git branch --verbose --verbose | awk '/: gone]/{print $1}' | xargs --no-run-if-empty git branch --delete --force

View File

@ -1,4 +1,4 @@
#!/bin/sh
set -e
set -o errexit
git diff HEAD --quiet
git filter-repo --force --refs ${1:-HEAD} --commit-callback 'commit.committer_date = commit.author_date'

View File

@ -1,11 +1,11 @@
#!/bin/sh
git remote get-url origin > /dev/null || exit 1
git remote get-url fork > /dev/null || exit 1
master_branch=$(git symbolic-ref refs/remotes/origin/HEAD | cut -c 21-)
git push -f fork $(git rev-list --max-parents=0 $master_branch):$master_branch
master_branch=$(git symbolic-ref refs/remotes/origin/HEAD | cut --characters=21-)
git push --force fork $(git rev-list --max-parents=0 $master_branch):$master_branch
for branch in $(git ls-remote --heads origin | sed 's?.*refs/heads/??'); do
[ $branch != $master_branch ] && git push fork :$branch
done
for tag in $(git ls-remote --tags fork | sed 's?.*refs/tags/??' | grep -v '\^{}'); do
for tag in $(git ls-remote --tags fork | sed 's?.*refs/tags/??' | grep --invert-match '\^{}'); do
git push fork :$tag
done

View File

@ -1,2 +1,2 @@
#!/bin/sh
git -c core.filemode diff -R | grep -E '^(diff|(old|new) mode)' | git apply
git -c core.filemode diff -R | grep --extended-regexp '^(diff|(old|new) mode)' | git apply

View File

@ -2,5 +2,5 @@
if [ $# = 0 ]; then >&2 echo 'Arguments: <path to file>...'; exit 1; fi
for path in "$@"; do
datetime="$(cd "$(dirname "$path")" && git log -1 --format=%aI -- "$(basename "$path")")"
[ "$datetime" ] && touch -md "$datetime" "$path"
[ "$datetime" ] && touch --date="$datetime" -m "$path"
done

View File

@ -1,2 +1,2 @@
#!/bin/sh
git branch --list 'pr/*' | xargs -r git branch -D
git branch --list 'pr/*' | xargs --no-run-if-empty git branch --delete --force

View File

@ -1,4 +1,4 @@
#!/bin/sh
set -e
set -o errexit
git diff HEAD --quiet
git filter-repo --force --refs ${1:-HEAD} --commit-callback 'commit.author_email = commit.committer_email = b"'"$(git config --get user.email)"'"; commit.author_name = commit.committer_name = b"'"$(git config --get user.name)"'"'

View File

@ -1,6 +1,6 @@
#!/bin/bash
[ $# != 1 ] && { >&2 echo 'Argument: <pull request id>'; exit 1; }
{ [[ "$(git remote get-url origin)" =~ [/@]github\.com[/:]([^/:]+)\/([^/]+)$ ]] && read branch remote < <(curl -s -H "Authorization: bearer $(echo url=https://github.com | git credential fill | sed -nE 's/password=(.*)/\1/p')" -X POST -d "{\"query\":\"{ repository(owner: \\\"${BASH_REMATCH[1]}\\\", name: \\\"${BASH_REMATCH[2]%.git}\\\") { pullRequest(number: $1) { headRef { name } headRepository { nameWithOwner } } } }\"}" https://api.github.com/graphql | cut -d'"' --output-delimiter=' https://github.com/' -f12,18); } ||
{ [[ "$(git remote get-url origin)" =~ [/@]github\.com[/:]([^/:]+)\/([^/]+)$ ]] && read branch remote < <(curl --data "{\"query\":\"{ repository(owner: \\\"${BASH_REMATCH[1]}\\\", name: \\\"${BASH_REMATCH[2]%.git}\\\") { pullRequest(number: $1) { headRef { name } headRepository { nameWithOwner } } } }\"}" --header "Authorization: bearer $(echo url=https://github.com | git credential fill | sed --quiet --regexp-extended 's/password=(.*)/\1/p')" --request POST --silent https://api.github.com/graphql | cut --delimiter='"' --fields=12,18 --output-delimiter=' https://github.com/'); } ||
{ >&2 echo Unrecognized origin.; exit 1; }
git fetch $remote $branch:pr/$1
git config branch.pr/$1.remote $remote

View File

@ -1,7 +1,7 @@
#!/bin/sh
set -e
set -o errexit
if [ $# != 2 ]; then >&2 echo 'Arguments: <remote url> <destination.bundle>'; exit 1; fi
tmp_dir="$(mktemp -d)"
trap 'rm -rf "$tmp_dir"' EXIT
tmp_dir="$(mktemp --directory)"
trap 'rm --force --recursive "$tmp_dir"' EXIT
git clone --mirror "$1" "$tmp_dir"
git -C "$tmp_dir" bundle create "$(readlink -f "$2")" --all
git -C "$tmp_dir" bundle create "$(readlink --canonicalize "$2")" --all

View File

@ -1,16 +1,16 @@
#!/bin/sh
set -e
set -o errexit
cd "$(git rev-parse --show-toplevel)"
pkg_tar="$(npm pack | tail -n 1)"
pkg_tar="$(npm pack | tail --lines=1)"
cp --preserve package.json package.json.bak
node -e '
node --eval='
const fs = require("fs");
const str = fs.readFileSync("package.json").toString();
const pkg = JSON.parse(str);
pkg.scripts && delete pkg.scripts.prepare;
fs.writeFileSync("package.json", JSON.stringify(pkg, null, str.match(/\n([\t ]+)/)?.[1] ?? "\t") + str.match(/\n?$/)[0]);
'
git rm --cached -rf .
tar tf "$pkg_tar" | cut -c 9- | xargs -d '\n' git add -f
git rm --cached --force -r .
tar --list --file "$pkg_tar" | cut --characters=9- | xargs --delimiter='\n' git add --force
rm "$pkg_tar"
mv -f package.json.bak package.json
mv --force package.json.bak package.json

View File

@ -1,13 +1,13 @@
#!/bin/sh
set -e
set -o errexit
if [ -z "$1" ]; then
git commit -n -q --allow-empty --author '_ <>' -m '_'
git -c core.filemode add -A
git commit -n -q --allow-empty --author '_ <>' -m '_'
git commit --allow-empty --author '_ <>' --message '_' --no-verify --quiet
git -c core.filemode add --all
git commit --allow-empty --author '_ <>' --message '_' --no-verify --quiet
git rev-parse HEAD
else
git reset -q --hard "$1" --
git clean -q -f -d
git reset --hard --quiet "$1" --
git clean -d --force --quiet
fi
git reset -q HEAD^ --
git reset -q --soft HEAD^ --
git reset --quiet HEAD^ --
git reset --quiet --soft HEAD^ --

View File

@ -1,2 +1,2 @@
#!/bin/sh
"$(dirname "$(readlink -e "$0")")"/cmd/git.exe credential-manager-core "$@"
"$(dirname "$(readlink --canonicalize "$0")")"/cmd/git.exe credential-manager-core "$@"

View File

@ -2,7 +2,7 @@
if [ $# = 0 ]; then >&2 echo 'Arguments: <executable file>...'; exit 1; fi
for bin in "$@"; do
(while :; do
if [ -f node_modules/.bin/"$bin" ]; then >&2 echo Found $bin; echo alias $bin=$(realpath -e node_modules/.bin)/"$bin"; break; fi
if [ -f node_modules/.bin/"$bin" ]; then >&2 echo Found $bin; echo alias $bin=$(readlink --canonicalize node_modules/.bin)/$bin; break; fi
if [ "$PWD" = / ]; then >&2 echo Could not find $bin; break; fi
cd ..
done)

View File

@ -1,10 +1,10 @@
#!/bin/sh
set -e
set -o errexit
cd "$(git rev-parse --show-toplevel)"
pkg_ver="$(node -e 'console.log(require("./package.json").version)')"
git rev-parse --verify -q "refs/tags/v$pkg_ver" && exit 1
git diff --cached --quiet || git commit -nm "version $pkg_ver"
pkg_ver="$(node --eval='console.log(require("./package.json").version)')"
git rev-parse --quiet --verify "refs/tags/v$pkg_ver" && exit 1
git diff --cached --quiet || git commit --message="version $pkg_ver" --no-verify
git npm-add
git commit -nm "version $pkg_ver (release)"
git tag "v$pkg_ver" -am ""
git commit --message="version $pkg_ver (release)" --no-verify
git tag --annotate --message='' "v$pkg_ver"
git reset HEAD^

View File

@ -8,8 +8,8 @@ for pkg in "$@"; do
while :; do
if [ -d "$base" ]; then
echo "$dest -> $PWD/$base"
rm -rf "$dest"
ln -rs "$base" "$dest"
rm --force --recursive "$dest"
ln --relative --symbolic "$base" "$dest"
break
fi
if [ "$PWD" = / ]; then >&2 echo Could not find source of $pkg; break; fi

View File

@ -1,36 +1,36 @@
# use 256 color mode in terminals
set -g default-terminal 'screen-256color'
set-option -g default-terminal 'screen-256color'
# set prefix to ctrl-a
unbind C-b
set -g prefix C-a
bind C-a send-prefix
unbind-key C-b
set-option -g prefix C-a
bind-key C-a send-prefix
# switch windows with ctrl-alt-arrows
bind -n C-M-Left select-window -p
bind -n C-M-Right select-window -n
bind-key -n C-M-Left select-window -p
bind-key -n C-M-Right select-window -n
# switch panes with alt-arrows
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
bind-key -n M-Left select-pane -L
bind-key -n M-Right select-pane -R
bind-key -n M-Up select-pane -U
bind-key -n M-Down select-pane -D
# split panes with ctrl-a | and ctrl-a -
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %
bind-key | split-window -h
bind-key - split-window -v
unbind-key '"'
unbind-key %
# reload config with ctrl-a shift-r
bind R source ~/.tmux.conf
bind-key R source ~/.tmux.conf
# enable mouse controls
set -g mouse on
set-option -g mouse on

View File

@ -4,5 +4,5 @@ echo Arguments: ^<filesystem.tar.gz^> ^<destination directory^> ^<distribution n
exit /b 1
:run
wsl.exe --import %~3 "%~2" "%~1" --version 2
wsl.exe -d %~3 -- adduser %~4; adduser %~4 sudo; echo $'[automount]\n\toptions = metadata\n[network]\n\tgenerateHosts = false\n\tgenerateResolvConf = false\n[user]\n\tdefault = %~4' ^> /etc/wsl.conf; chmod 644 /etc/wsl.conf
wsl.exe --distribution %~3 -- adduser %~4; adduser %~4 sudo; echo $'[automount]\n\toptions = metadata\n[network]\n\tgenerateHosts = false\n\tgenerateResolvConf = false\n[user]\n\tdefault = %~4' ^> /etc/wsl.conf; chmod 644 /etc/wsl.conf
wsl.exe --terminate %~3

View File

@ -1,9 +1,9 @@
#!/bin/bash
ps=$'set-psdebug -trace 1\r\nnetsh interface portproxy reset\r\nnetsh advfirewall firewall delete rule name=wsl-expose-ports\r\n'
for port in "$@"; do
: ${WSL_GUEST_IP:=$(ip addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')}
: ${WSL_GUEST_IP:=$(ip addr show eth0 | grep --only-matching --perl-regexp '(?<=inet\s)\d+(\.\d+){3}')}
ps+="netsh interface portproxy add v4tov4 listenport=${port/:*} listenaddress=0.0.0.0 connectport=${port/*:} connectaddress=${WSL_GUEST_IP}"$'\r\n'
ps+="netsh advfirewall firewall add rule name=wsl-expose-ports dir=in action=allow protocol=tcp localport=${port/:*}"$'\r\n'
done
ps+=pause
powershell.exe start powershell \"-enc\",\"$(echo -n "$ps" | iconv -t utf-16le | base64 -w 0)\" -verb runas
powershell.exe start powershell \"-enc\",\"$(echo -n "$ps" | iconv --to-code=utf-16le | base64 --wrap=0)\" -verb runas

View File

@ -1,3 +1,3 @@
#!/bin/sh
. wsl-elevate
hwclock -s
hwclock --hctosys

View File

@ -1,4 +1,4 @@
(return 0 2>/dev/null) || { >&2 echo This script must be sourced, not run directly.; exit 1; }
for i in $(pstree -np -s $$ | grep -o -E '[0-9]+'); do
for i in $(pstree --numeric-sort --show-parents --show-pids $$ | grep --extended-regexp --only-matching '[0-9]+'); do
[ -e /run/WSL/${i}_interop ] && export WSL_INTEROP=/run/WSL/${i}_interop
done

View File

@ -1,2 +1,2 @@
(return 0 2>/dev/null) || { >&2 echo This script must be sourced, not run directly.; exit 1; }
[ $(id -u) = 0 ] || { wsl.exe -d $WSL_DISTRO_NAME -u $(id -un 0) -- "$0" "$@"; exit; }
[ $(id --user) = 0 ] || { wsl.exe --distribution $WSL_DISTRO_NAME --user $(id --name --user 0) -- "$0" "$@"; exit; }