Compare commits

..

4 Commits

Author SHA1 Message Date
Andrew Coleman 4c3c713c2d add dbmate 2024-02-04 12:42:58 -05:00
Andrew Coleman cd44c17014 just automation 2024-01-17 11:30:05 -05:00
Andrew Coleman e7ee35ac24 split scripts for more specific steps 2024-01-17 11:29:59 -05:00
Andrew Coleman d9bb16459f template script 2024-01-17 11:29:34 -05:00
7 changed files with 520 additions and 335 deletions

26
.zshrc

File diff suppressed because one or more lines are too long

120
install-cli-tools.sh Executable file
View File

@ -0,0 +1,120 @@
#!/bin/sh
[ -n "${DEBUG-}" ] && set -x
cd "$(dirname "$0")" || exit 1
shellcheck "$0" || exit 1
shfmt -i 2 -d -s "$0"
has_bin() {
[ -e "$HOME/.nix-profile/bin/$1" ]
}
if ! pgrep nix-daemon >/dev/null 2>&1; then
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
# shellcheck disable=SC1091
. /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
# shellcheck disable=SC1091
. /nix/var/nix/profiles/default/etc/profile.d/nix.sh
else
echo "Attempting nix upgrade... may prompt for sudo password"
sudo nix upgrade-nix
fi
PATH="$PATH:$HOME/.nix-profile/bin"
has_bin "cachix" || nix profile install nixpkgs#cachix
if ! has_bin "devenv"; then
cachix use devenv
nix profile install --accept-flake-config github:cachix/devenv/latest
fi
if [ ! -d "$HOME/.cargo" ]; then
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --no-modify-path --default-toolchain stable --profile complete -y
fi
has_bin "atuin" || nix profile install nixpkgs#atuin
has_bin "bash" || nix profile install nixpkgs#bashInteractive
has_bin "bat" || nix profile install nixpkgs#bat
has_bin "bw" || nix profile install nixpkgs#bitwarden-cli
has_bin "broot" || nix profile install nixpkgs#broot
has_bin "cargo-dist" || nix profile install nixpkgs#cargo-dist
has_bin "cargo-flamegraph" || nix profile install nixpkgs#cargo-flamegraph
has_bin "cargo-release" || nix profile install nixpkgs#cargo-release
has_bin "cargo-udeps" || nix profile install nixpkgs#cargo-udeps
has_bin "cheat" || nix profile install nixpkgs#cheat
has_bin "chezmoi" || nix profile install nixpkgs#chezmoi
has_bin "croc" || nix profile install nixpkgs#croc
has_bin "curlie" || nix profile install nixpkgs#curlie
has_bin "dbmate" || nix profile install nixpkgs#dbmate
has_bin "delta" || nix profile install nixpkgs#delta
[ -e "$HOME/.cargo/bin/ddbug" ] || cargo install --git https://github.com/gimli-rs/ddbug
has_bin "difft" || nix profile install nixpkgs#difftastic
has_bin "direnv" || nix profile install nixpkgs#direnv
has_bin "dnsproxy" || nix profile install nixpkgs#dnsproxy
has_bin "dust" || nix profile install nixpkgs#du-dust
has_bin "eza" || nix profile install nixpkgs#eza
has_bin "fd" || nix profile install nixpkgs#fd
has_bin "flake-checker" || nix profile install github:DeterminateSystems/flake-checker
has_bin "flamegraph" || nix profile install nixpkgs#flamegraph
has_bin "fx" || nix profile install nixpkgs#fx
has_bin "fzf" || nix profile install nixpkgs#fzf
has_bin "git" || nix profile install nixpkgs#git
has_bin "git-gone" || nix profile install nixpkgs#git-gone
has_bin "goawk" || nix profile install nixpkgs#goawk
has_bin "grep" || nix profile install nixpkgs#gnugrep
has_bin "grex" || nix profile install nixpkgs#grex
has_bin "gron" || nix profile install nixpkgs#gron
has_bin "gum" || nix profile install nixpkgs#gum
has_bin "helix" || nix profile install nixpkgs#helix
has_bin "hexyl" || nix profile install nixpkgs#hexyl
has_bin "htop" || nix profile install nixpkgs#htop
has_bin "httpie" || nix profile install nixpkgs#httpie
has_bin "htmlq" || nix profile install nixpkgs#htmlq
has_bin "hyperfine" || nix profile install nixpkgs#hyperfine
has_bin "jc" || nix profile install nixpkgs#jc
has_bin "jiq" || nix profile install nixpkgs#jiq
has_bin "jo" || nix profile install nixpkgs#jo
has_bin "jq" || nix profile install nixpkgs#jq
has_bin "jqp" || nix profile install nixpkgs#jqp
has_bin "just" || nix profile install nixpkgs#just
has_bin "kibi" || nix profile install nixpkgs#kibi
has_bin "kondo" || nix profile install nixpkgs#kondo
has_bin "kubie" || nix profile install nixpkgs#kubie
has_bin "llama" || nix profile install nixpkgs#llama
has_bin "mdbook" || nix profile install nixpkgs#mdbook
has_bin "mosh" || nix profile install nixpkgs#mosh
has_bin "nix-bisect" || nix profile install nixpkgs#nix-bisect
# fails for some odd reason at the moment
#has_bin "nix-doc" || nix profile install nixpkgs#nix-doc
command -v "nix-doc" >/dev/null || cargo install nix-doc
has_bin "nix-init" || nix profile install nixpkgs#nix-init
has_bin "nix-search" || nix profile install github:peterldowns/nix-search-cli --refresh
has_bin "nurl" || nix profile install nixpkgs#nurl
has_bin "nvim" || nix profile install nixpkgs#neovim
has_bin "ouch" || nix profile install nixpkgs#ouch
has_bin "pstree" || nix profile install nixpkgs#pstree
#nix profile install nixpkgs#prettylist
has_bin "q" || nix profile install nixpkgs#q
has_bin "rg" || nix profile install nixpkgs#ripgrep
has_bin "rq" || nix profile install nixpkgs#rq
has_bin "rustfilt" || nix profile install nixpkgs#rustfilt
has_bin "sd" || nix profile install nixpkgs#sd
has_bin "shellcheck" || nix profile install nixpkgs#shellcheck
has_bin "shfmt" || nix profile install nixpkgs#shfmt
has_bin "spacer" || nix profile install nixpkgs#spacer
has_bin "starship" || nix profile install nixpkgs#starship
has_bin "terminal-notifier" || nix profile install nixpkgs#terminal-notifier
has_bin "tig" || nix profile install nixpkgs#tig
has_bin "tldr" || nix profile install nixpkgs#tealdeer
has_bin "tokei" || nix profile install nixpkgs#tokei
has_bin "upterm" || nix profile install nixpkgs#upterm
has_bin "vim" || nix profile install nixpkgs#vim
has_bin "watchexec" || nix profile install nixpkgs#watchexec
has_bin "xcp" || nix profile install nixpkgs#xcp
has_bin "xh" || nix profile install nixpkgs#xh
has_bin "xsv" || nix profile install nixpkgs#xsv
has_bin "zenith" || nix profile install nixpkgs#zenith
has_bin "zola" || nix profile install nixpkgs#zola
has_bin "zoxide" || nix profile install nixpkgs#zoxide

40
install-mac-apps.sh Executable file
View File

@ -0,0 +1,40 @@
#!/bin/sh
[ -n "${DEBUG-}" ] && set -x
cd "$(dirname "$0")" || exit 1
shellcheck "$0" || exit 1
shfmt -i 2 -d -s "$0"
newest_wezterm_release() {
curl -s -H "Accept: application/vnd.github+json" -L https://api.github.com/repos/wez/wezterm/releases/latest | jq -r '.assets | map(select(.name | startswith("WezTerm-macos"))) | first.browser_download_url'
}
LATEST_WEZTERM=$(newest_wezterm_release)
install_latest_wezterm() {
curl -Lo wezterm.zip "$LATEST_WEZTERM"
ouch d wezterm.zip
mv WezTerm-macos-*/WezTerm.app /Applications/ && rm -rf wezterm.zip WezTerm-macos-*
}
if [ ! -e /Applications/WezTerm.app ]; then
install_latest_wezterm
else
current_wezterm=$(/Applications/WezTerm.app/Contents/MacOS/wezterm -V | awk '{print $2}')
if ! echo "$LATEST_WEZTERM" | grep "$current_wezterm" >/dev/null; then
install_latest_wezterm
fi
fi
[ -d /usr/local/bin ] || sudo mkdir /usr/local/bin
install_typst() {
echo "manually installing typst"
curl -sLO https://github.com/typst/typst/releases/download/22-03-21-2/typst-x86_64-apple-darwin.tar.gz
ouch d typst*.tar.gz
sudo install -m 755 typst*/typst /usr/local/bin/
rm -rf ./typst*
}
[ -e "/usr/local/bin/typst" ] || install_typst

21
justfile Normal file
View File

@ -0,0 +1,21 @@
_default:
@just --list
# performs steps for mac
mac:
./install-cli-tools.sh
./setup-shell-config.sh
./install-mac-apps.sh
# performs steps for linux
linux:
./install-cli-tools.sh
./setup-shell-config.sh
# checks all shell scripts for errors
shellcheck:
shellcheck *.sh
# formats all shell scripts consistently
shfmt:
shfmt -i 2 -w -s *.sh

View File

@ -1,328 +0,0 @@
#!/bin/sh
[ -n "${DEBUG-}" ] && set -x
cd "$(dirname "$0")" || exit 1
if ! pgrep nix-daemon >/dev/null 2>&1; then
sh <"$(curl -L https://nixos.org/nix/install)"
fi
mkdir -p "$HOME/.config"
mkdir -p "$HOME/.config/nix"
if [ ! -f "$HOME/.config/nix/nix.conf" ]; then
echo "experimental-features = nix-command flakes" >>"$HOME/.config/nix/nix.conf"
echo "trusted-users = root andrew" | sudo tee -a /etc/nix/nix.conf && sudo pkill nix-daemon
cachix use devenv
nix profile install --accept-flake-config github:cachix/devenv/latest
fi
has_bin() {
[ -e "$HOME/.nix-profile/bin/$1" ]
}
has_bin "atuin" || nix profile install nixpkgs#atuin
has_bin "bash" || nix profile install nixpkgs#bashInteractive
has_bin "bat" || nix profile install nixpkgs#bat
has_bin "bw" || nix profile install nixpkgs#bitwarden-cli
has_bin "broot" || nix profile install nixpkgs#broot
has_bin "cargo-dist" || nix profile install nixpkgs#cargo-dist
has_bin "cargo-flamegraph" || nix profile install nixpkgs#cargo-flamegraph
has_bin "cargo-release" || nix profile install nixpkgs#cargo-release
has_bin "cargo-udeps" || nix profile install nixpkgs#cargo-udeps
has_bin "cheat" || nix profile install nixpkgs#cheat
has_bin "chezmoi" || nix profile install nixpkgs#chezmoi
has_bin "croc" || nix profile install nixpkgs#croc
has_bin "curlie" || nix profile install nixpkgs#curlie
has_bin "delta" || nix profile install nixpkgs#delta
has_bin "difft" || nix profile install nixpkgs#difftastic
has_bin "direnv" || nix profile install nixpkgs#direnv
has_bin "dnsproxy" || nix profile install nixpkgs#dnsproxy
has_bin "dust" || nix profile install nixpkgs#du-dust
has_bin "exa" || nix profile install nixpkgs#exa
has_bin "fd" || nix profile install nixpkgs#fd
has_bin "flake-checker" || nix profile install github:DeterminateSystems/flake-checker
has_bin "flamegraph" || nix profile install nixpkgs#flamegraph
has_bin "fx" || nix profile install nixpkgs#fx
has_bin "fzf" || nix profile install nixpkgs#fzf
has_bin "git" || nix profile install nixpkgs#git
has_bin "git-gone" || nix profile install nixpkgs#git-gone
has_bin "goawk" || nix profile install nixpkgs#goawk
has_bin "grep" || nix profile install nixpkgs#gnugrep
has_bin "grex" || nix profile install nixpkgs#grex
has_bin "gron" || nix profile install nixpkgs#gron
has_bin "gum" || nix profile install nixpkgs#gum
has_bin "hexyl" || nix profile install nixpkgs#hexyl
has_bin "htop" || nix profile install nixpkgs#htop
has_bin "httpie" || nix profile install nixpkgs#httpie
has_bin "htmlq" || nix profile install nixpkgs#htmlq
has_bin "hyperfine" || nix profile install nixpkgs#hyperfine
has_bin "jc" || nix profile install nixpkgs#jc
has_bin "jiq" || nix profile install nixpkgs#jiq
has_bin "jq" || nix profile install nixpkgs#jq
has_bin "jqp" || nix profile install nixpkgs#jqp
has_bin "just" || nix profile install nixpkgs#just
has_bin "kibi" || nix profile install nixpkgs#kibi
has_bin "kondo" || nix profile install nixpkgs#kondo
has_bin "kubie" || nix profile install nixpkgs#kubie
has_bin "llama" || nix profile install nixpkgs#llama
has_bin "mdbook" || nix profile install nixpkgs#mdbook
has_bin "mosh" || nix profile install nixpkgs#mosh
has_bin "nix-bisect" || nix profile install nixpkgs#nix-bisect
# fails for some odd reason at the moment
#has_bin "nix-doc" || nix profile install nixpkgs#nix-doc
command -v "nix-doc" >/dev/null || cargo install nix-doc
has_bin "nix-init" || nix profile install nixpkgs#nix-init
has_bin "nix-search" || nix profile install github:peterldowns/nix-search-cli --refresh
has_bin "nurl" || nix profile install nixpkgs#nurl
has_bin "nvim" || nix profile install nixpkgs#neovim
has_bin "ouch" || nix profile install nixpkgs#ouch
has_bin "pstree" || nix profile install nixpkgs#pstree
#nix profile install nixpkgs#prettylist
has_bin "q" || nix profile install nixpkgs#q
has_bin "rg" || nix profile install nixpkgs#ripgrep
has_bin "rq" || jnix profile install nixpkgs#rq
has_bin "rustfilt" || nix profile install nixpkgs#rustfilt
has_bin "sd" || nix profile install nixpkgs#sd
has_bin "shellcheck" || nix profile install nixpkgs#shellcheck
has_bin "shfmt" || nix profile install nixpkgs#shfmt
has_bin "spacer" || nix profile install nixpkgs#spacer
has_bin "starship" || nix profile install nixpkgs#starship
has_bin "terminal-notifier" || nix profile install nixpkgs#terminal-notifier
has_bin "tig" || nix profile install nixpkgs#tig
has_bin "tldr" || nix profile install nixpkgs#tealdeer
has_bin "tokei" || nix profile install nixpkgs#tokei
has_bin "upterm" || nix profile install nixpkgs#upterm
has_bin "vim" || nix profile install nixpkgs#vim
has_bin "watchexec" || nix profile install nixpkgs#watchexec
has_bin "xcp" || nix profile install nixpkgs#xcp
has_bin "xh" || nix profile install nixpkgs#xh
has_bin "xsv" || nix profile install nixpkgs#xsv
has_bin "zenith" || nix profile install nixpkgs#zenith
has_bin "zola" || nix profile install nixpkgs#zola
has_bin "zoxide" || nix profile install nixpkgs#zoxide
PATH="$PATH:$HOME/.nix-profile/bin"
newest_wezterm_release() {
curl -s -H "Accept: application/vnd.github+json" -L https://api.github.com/repos/wez/wezterm/releases/latest | jq -r '.assets | map(select(.name | startswith("WezTerm-macos"))) | first.browser_download_url'
}
LATEST_WEZTERM=$(newest_wezterm_release)
install_latest_wezterm() {
curl -Lo wezterm.zip "$LATEST_WEZTERM"
ouch d wezterm.zip
mv WezTerm-macos-*/WezTerm.app /Applications/ && rm -rf wezterm.zip WezTerm-macos-*
}
if [ ! -e /Applications/WezTerm.app ]; then
install_latest_wezterm
else
current_wezterm=$(/Applications/WezTerm.app/Contents/MacOS/wezterm -V | awk '{print $2}')
if ! echo "$LATEST_WEZTERM" | grep "$current_wezterm" >/dev/null; then
install_latest_wezterm
fi
fi
cat <<EOF >"$HOME/.wezterm.lua"
local wezterm = require 'wezterm'
local config = {}
if wezterm.config_builder then
config = wezterm.config_builder()
end
config.font = wezterm.font_with_fallback({
{ family = 'Operator Mono', weight = 'Book' },
'Symbols Nerd Font'
})
config.font_size = 22.0
config.color_scheme = 'One Light (base16)'
config.window_background_opacity = 0.9
config.initial_rows = 30
config.initial_cols = 120
config.use_fancy_tab_bar = false
config.mouse_bindings = {
{
event = { Up = { streak = 1, button = 'Left' } },
mods = 'CTRL',
action = wezterm.action.OpenLinkAtMouseCursor,
},
}
config.keys = {
-- Make Ctrl-b equivalent to Alt-b which many line editors interpret as backward-word
{key="b", mods="CTRL", action=wezterm.action{SendString="\x1bb"}},
-- Make Ctrl-f equivalent to Alt-f which many line editors interpret as forward-word
{key="f", mods="CTRL", action=wezterm.action{SendString="\x1bf"}},
}
return config
EOF
cat <<EOF >"$HOME/.config/starship.toml"
[container]
disabled=true
EOF
mkdir -p "$HOME/.config/helix/themes"
cat <<EOF >"$HOME/.config/helix/config.toml"
theme = "mylight"
[editor]
true-color = true
color-modes = true
idle-timeout = 75
mouse = false
bufferline = "multiple"
auto-pairs = false
[editor.indent-guides]
render = true
[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"
[editor.whitespace.render]
space = "all"
tab = "all"
[keys.normal]
"$" = "goto_line_end"
"^" = "goto_line_start"
EOF
cat <<EOF >"$HOME/.config/helix/themes/mylight.toml"
inherits = "onelight"
"comment" = { fg = "grey" }
"comment.line" = { fg = "grey" }
"comment.block" = { fg = "grey" }
"comment.block.documentation" = { fg = "grey" }
EOF
cat <<EOF >"$HOME/.gitconfig"
[push]
default = simple
[user]
name = Andrew Coleman
email = penguincoder@gmail.com
[advice]
detachedHead = false
[core]
filemode = true
eol = lf
autocrlf = input
pager = delta
[init]
defaultBranch = main
[delta]
line-numbers = true
#line-numbers-zero-style = white
line-numbers-minus-style = bold red
line-numbers-plus-style = bold green
file-style = omit
hunk-header-style = file
syntax-theme = OneHalfLight
[rebase]
autoStash = true
[merge]
tool = vimdiff
conflictstyle = diff3
prompt = false
[pull]
rebase = true
[color]
branch = auto
diff = auto
status = auto
ui = true
[color "branch"]
current = yellow reverse
local = yellow
remote = green
[color "diff"]
meta = yellow bold
frag = magenta bold
old = red bold
new = green bold
[color "status"]
added = yellow
changed = green
untracked = red
[alias]
logp = log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
lg = log --graph --date-order --first-parent \
--pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'
lgb = log --graph --date-order --branches --first-parent \
--pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'
lga = log --graph --date-order --all \
--pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'
up = pull --rebase
branches-last-updated = branch -rv --sort=committerdate --format='%(HEAD) %(color:green)%(committerdate:relative)%(color:reset)\t%(color:magenta)%(authorname)%(color:reset)\t%(color:yellow)%(refname:short)%(color:reset)'
EOF
if [ ! -d "$HOME/.cargo" ]; then
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --no-modify-path --default-toolchain stable --profile complete -y
fi
cat <<EOF >"$HOME/.tmux.conf"
set-option -g update-environment "SSH_AUTH_SOCK SSH_CONNECTION"
EOF
cat <<EOF >"$HOME/.vimrc"
" gratis https://swordandsignals.com/2020/12/13/5-lines-in-vimrc.html
set hlsearch " highlight all search results
set ignorecase " do case insensitive search
set incsearch " show incremental search results as you type
set number " display line number
set noswapfile " disable swap file
" can also be summarized as
set hls ic is nu noswf
" from https://www.guckes.net/vim/setup.html
set ai nocp ek hid ru sc vb wmnu noeb noet nosol
set bs=2 fo=cqrt ls=2 shm=at ww=<,>,h,l
set comments=b:#,:%,n:>
set list listchars=tab:>=,trail:-
set viminfo=%,'50,\"100,:100,n~/.viminfo
EOF
install -m 640 ./.zshrc "$HOME/"
AUTO_FILE="$HOME/.zshrc.auto"
{
atuin init zsh --disable-up-arrow
direnv hook zsh
starship init zsh --print-full-init
zoxide init zsh
} >"$AUTO_FILE"
[ -d /usr/local/bin ] || sudo mkdir /usr/local/bin
install_typst() {
echo "manually installing typst"
curl -sLO https://github.com/typst/typst/releases/download/22-03-21-2/typst-x86_64-apple-darwin.tar.gz
ouch d typst*.tar.gz
sudo install -m 755 typst*/typst /usr/local/bin/
rm -rf ./typst*
}
[ -e "/usr/local/bin/typst" ] || install_typst
shellcheck "$0" || exit 1
shfmt -i 2 -d -s "$0"

170
setup-shell-configs.sh Executable file
View File

@ -0,0 +1,170 @@
#!/bin/sh
[ -n "${DEBUG-}" ] && set -x
cd "$(dirname "$0")" || exit 1
shellcheck "$0" || exit 1
shfmt -i 2 -d -s "$0"
mkdir -p "$HOME/.config"
cat <<EOF >"$HOME/.wezterm.lua"
local wezterm = require 'wezterm'
local config = {}
if wezterm.config_builder then
config = wezterm.config_builder()
end
config.font = wezterm.font_with_fallback({
{ family = 'Operator Mono', weight = 'Book' },
'Symbols Nerd Font'
})
config.font_size = 22.0
-- config.color_scheme = 'One Light (base16)'
config.color_scheme = 'Material Darker (base16)'
config.window_background_opacity = 0.9
config.initial_rows = 30
config.initial_cols = 120
config.use_fancy_tab_bar = false
config.mouse_bindings = {
{
event = { Up = { streak = 1, button = 'Left' } },
mods = 'CTRL',
action = wezterm.action.OpenLinkAtMouseCursor,
},
}
config.keys = {
-- Make Ctrl-b equivalent to Alt-b which many line editors interpret as backward-word
{key="b", mods="CTRL", action=wezterm.action{SendString="\x1bb"}},
-- Make Ctrl-f equivalent to Alt-f which many line editors interpret as forward-word
{key="f", mods="CTRL", action=wezterm.action{SendString="\x1bf"}},
}
return config
EOF
cat <<EOF >"$HOME/.config/starship.toml"
[container]
disabled=true
EOF
mkdir -p "$HOME/.config/helix/themes"
cat <<EOF >"$HOME/.config/helix/config.toml"
theme = "Molokai"
[editor]
true-color = true
color-modes = true
idle-timeout = 75
mouse = false
bufferline = "multiple"
auto-pairs = false
[editor.indent-guides]
render = true
[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"
[editor.whitespace.render]
tab = "all"
[editor.soft-wrap]
enable = true
EOF
curl -sLo "$HOME/.config/themes.gitconfig" "https://raw.githubusercontent.com/dandavison/delta/main/themes.gitconfig"
cat <<EOF >"$HOME/.gitconfig"
[include]
path = "~/.config/themes.gitconfig"
[push]
default = simple
[user]
name = Andrew Coleman
email = penguincoder@gmail.com
[advice]
detachedHead = false
[core]
filemode = true
eol = lf
autocrlf = input
pager = delta
[init]
defaultBranch = main
[delta]
line-numbers = true
file-style = omit
hunk-header-style = file
features = calochortus-lyallii
[rebase]
autoStash = true
[merge]
tool = vimdiff
conflictstyle = diff3
prompt = false
[pull]
rebase = true
[color]
branch = auto
diff = auto
status = auto
ui = true
[color "branch"]
current = yellow reverse
local = yellow
remote = green
[color "status"]
added = yellow
changed = green
untracked = red
[alias]
logp = log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
lg = log --graph --date-order --first-parent \
--pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'
lgb = log --graph --date-order --branches --first-parent \
--pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'
lga = log --graph --date-order --all \
--pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'
up = pull --rebase
branches-last-updated = branch -rv --sort=committerdate --format='%(HEAD) %(color:green)%(committerdate:relative)%(color:reset)\t%(color:magenta)%(authorname)%(color:reset)\t%(color:yellow)%(refname:short)%(color:reset)'
EOF
cat <<EOF >"$HOME/.tmux.conf"
set-option -g update-environment "SSH_AUTH_SOCK SSH_CONNECTION"
EOF
cat <<EOF >"$HOME/.vimrc"
" gratis https://swordandsignals.com/2020/12/13/5-lines-in-vimrc.html
set hlsearch " highlight all search results
set ignorecase " do case insensitive search
set incsearch " show incremental search results as you type
set number " display line number
set noswapfile " disable swap file
" can also be summarized as
set hls ic is nu noswf
" from https://www.guckes.net/vim/setup.html
set ai nocp ek hid ru sc vb wmnu noeb noet nosol
set bs=2 fo=cqrt ls=2 shm=at ww=<,>,h,l
set comments=b:#,:%,n:>
set list listchars=tab:>=,trail:-
set viminfo=%,'50,\"100,:100,n~/.viminfo
EOF
install -m 640 ./.zshrc "$HOME/"

150
template.sh Executable file
View File

@ -0,0 +1,150 @@
#!/usr/bin/env bash
# Example Bash Shell Script
# from https://betterdev.blog/minimal-safe-bash-script-template/
set -Eeuo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1
# declare globals as readonly
readonly SCRIPT_NAME
SCRIPT_NAME="$(basename "$0")"
trap cleanup SIGINT SIGTERM ERR EXIT
usage() {
cat <<EOF
Usage: $(basename "$0") [-h] [-v] [-f] -p param_value arg1 [arg2...]
Script description here.
Available options:
-h, --help Print this help and exit
-v, --verbose Print script debug info
-f, --flag Some flag description
-p, --param Some param description
EOF
exit
}
cleanup() {
trap - SIGINT SIGTERM ERR EXIT
# script cleanup here
}
setup_colors() {
if [[ -t 2 ]] && [[ -z ${NO_COLOR-} ]] && [[ ${TERM-} != "dumb" ]]; then
NOCOLOR='\033[0m' RED='\033[0;31m' GREEN='\033[0;32m' ORANGE='\033[0;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' YELLOW='\033[1;33m'
else
# shellcheck disable=SC2034
NOCOLOR='' RED='' GREEN='' ORANGE='' BLUE='' PURPLE='' CYAN='' YELLOW=''
fi
}
# you only need one of the following two functions
# simple function to redirect output to stderr (good)
msg() {
echo >&2 -e "${1-}"
}
# more structured logging (better)
log() {
local -r level="$1"
local -r message="$2"
local -r timestamp=$(date +"%Y-%m-%d %H:%M:%S")
# colorize your log output here, if desired
echo >&2 -e "${timestamp} [${level}] [$SCRIPT_NAME] ${message}"
}
die() {
local msg=$1
local code=${2-1} # default exit status 1
log "FATAL" "$msg"
exit "$code"
}
assert_not_empty() {
local -r arg_name="$1"
local -r arg_value="$2"
if [[ -z $arg_value ]]; then
log "ERROR" "The value for '$arg_name' cannot be empty"
exit 1
fi
}
assert_is_installed() {
local -r name="$1"
if [[ ! $(command -v "$name") ]]; then
log "ERROR" "The binary '$name' is required by this script but is not installed or in the system's PATH."
exit 1
fi
}
parse_params() {
while :; do
case "${1-}" in
-h | --help)
usage
;;
-v | --verbose)
set -x
;;
--no-color)
NO_COLOR=1
;;
-f | --flag) # example flag
# FLAG=1
;;
-p | --param) # example named parameter
assert_not_empty "--param", "${2-}"
PARAM="${2-}"
shift
;;
-?*)
die "Unknown option: $1"
;;
*)
break
;;
esac
shift
done
# check required params and arguments
assert_is_installed "bash"
return 0
}
# default values of variables set from parse_params
# to avoid having these variables here, you will need to define the work of
# the script as another function that takes arguments and call it with local
# variables declared in parse_params:
#
# run() {
# local -r flag=$1
# }
#
# parse_params() {
# local flag=0
# ...
# run $flag
# }
FLAG=0
PARAM=''
readonly ARGS=("$@")
parse_params "$@"
setup_colors
# script logic here
log "INFO" "${RED}Read parameters:${NOCOLOR}"
log "INFO" "- flag: ${FLAG}"
log "INFO" "- param: ${PARAM}"
log "INFO" "- arguments: ${ARGS[*]-}"