Compare commits

...

3 Commits

Author SHA1 Message Date
2b6fa42f17 Chore: Lots of little tweaks 2023-05-05 23:03:42 +03:00
8de487250d Feat: Pure Bash Bible and TLDR in cheat 2023-05-05 23:02:31 +03:00
e5fe49834d Fix: Changes to have command usage 2023-05-05 22:59:14 +03:00
17 changed files with 203 additions and 24 deletions

View File

@@ -11,3 +11,12 @@ trim_trailing_whitespace = true
[.git{ignore,modules}]
indent_style = tab
indent_size = 1
[local/bin/*]
shell_variant = bash # --language-variant
binary_next_line = true
switch_case_indent = true # --case-indent
space_redirects = true
keep_padding = true
function_next_line = true # --func-next-line

2
.gitignore vendored
View File

@@ -5,3 +5,5 @@ Brewfile.lock.json
.idea
.vscode
config/fzf
config/cheat/cheatsheets/pure-bash-bible/*
config/cheat/cheatsheets/tldr/*

View File

@@ -1,6 +1,6 @@
---
# The editor to use with 'cheat -e <sheet>'. Defaults to $EDITOR or $VISUAL.
editor: $EDITOR
# editor: $EDITOR
# Should 'cheat' always colorize output?
colorize: true
@@ -8,7 +8,7 @@ colorize: true
# Which 'chroma' colorscheme should be applied to the output?
# Options are available here:
# https://github.com/alecthomas/chroma/tree/master/styles
style: catppuccin-mocha
style: "catppuccin"
# Which 'chroma' "formatter" should be applied?
# One of: "terminal", "terminal256", "terminal16m"
@@ -63,14 +63,22 @@ cheatpaths:
# 'readonly': shall user-created ('cheat -e') cheatsheets be saved here?
- name: community
path: ~/.config/cheat/cheatsheets/community
tags: [community]
tags: [ community ]
readonly: true
# If you have personalized cheatsheets, list them last. They will take
# precedence over the more global cheatsheets.
- name: personal
path: ~/.config/cheat/cheatsheets/personal
tags: [personal]
path: ~/.dotfiles/config/cheat/cheatsheets/personal
tags: [ personal ]
readonly: false
- name: pure-bash-bible
path: ~/.dotfiles/config/cheat/cheatsheets/pure-bash-bible
tags: [ pure-bash-bible ]
readonly: true
- name: tldr
path: ~/.dotfiles/config/cheat/cheatsheets/tldr
tags: [ tldr ]
readonly: true
# While it requires no configuration here, it's also worth noting that
# cheat will automatically append directories named '.cheat' within the

View File

@@ -110,4 +110,4 @@ export ANDROID_HOME="$XDG_DATA_HOME/android"
export GNUPGHOME="$XDG_DATA_HOME/gnupg"
export SCREENRC="$XDG_CONFIG_HOME/misc/screenrc"
export TMUX_CONF="$DOTFILES/config/tmux/tmux.conf"
export BAT_THEME="ansi"

View File

@@ -10,6 +10,8 @@
~/.cache/git:
~/.config:
~/.config/cheat/cheatsheets/personal:
~/.config/cheat/cheatsheets/pure-bash-bible:
~/.config/cheat/cheatsheets/tldr:
~/.local:
~/.local/run:
~/.local/share:

View File

@@ -164,7 +164,9 @@ function section_brew
menu_usage "$USAGE_PREFIX" "${MENU[@]}"
;;
esac
} || menu_section "$USAGE_PREFIX" "brew not available on this system"
}
! have brew && menu_section "$USAGE_PREFIX" "brew not available on this system"
}
function section_dotfiles
@@ -198,8 +200,8 @@ function section_dotfiles
~/.config/astronvim \
~/.config/nvim
msg_ok "Deleted old nvim files"
ln -s $DOTFILES/config/astronvim ~/.config/astronvim
ln -s $DOTFILES/config/nvim ~/.config/nvim
ln -s "$DOTFILES/config/astronvim" ~/.config/astronvim
ln -s "$DOTFILES/config/nvim" ~/.config/nvim
msg_ok "Linked nvim and astronvim"
have npm && $0 install npm
msg_ok "Installed packages"
@@ -207,7 +209,8 @@ function section_dotfiles
;;
yamlfmt)
# format yaml files
have yamlfmt && yamlfmt -conf "$DOTFILES/.yamlfmt" || msg_err "yamlfmt not found"
have yamlfmt && yamlfmt -conf "$DOTFILES/.yamlfmt"
! have yamlfmt && msg_err "yamlfmt not found"
;;
shfmt)
# Format shell scripts according to following rules.
@@ -215,6 +218,7 @@ function section_dotfiles
-type f -perm +111 \
-not -path '*/.git/*' \
-not -path '*dotbot*' \
-not -path '*tmux*' \
-not -name '*.pl' \
-not -name '*.py' \
-not -name '*.php' \

View File

@@ -0,0 +1,54 @@
#!/usr/bin/env bash
# shellcheck disable=SC2231,SC2034,SC2181,SC2068
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
PBB_REQUIRED_TOOLS=(basename git mkdir cheat ls grep head awk cp echo rm)
for t in ${PBB_REQUIRED_TOOLS[@]}; do
! have "$t" && echo "(!) $t is missing, can't continue..." && exit 1
done
PBB_GIT="https://github.com/dylanaraps/pure-bash-bible.git"
PBB_SOURCE="source: $PBB_GIT"
PBB_SYNTAX="syntax: bash"
PBB_TAGS="tags: [bash]"
PBB_TEMP_PREFIX=$(basename "$0")
PBB_TEMP_DIR="/tmp/pbb-$(rnd)"
# If there's no .git, clone the folder
if [ ! -d "$PBB_TEMP_DIR/.git" ]; then
git clone "$PBB_GIT" "$PBB_TEMP_DIR"
fi
PBB_CHAPTERS=$(ls -1v "$PBB_TEMP_DIR"/manuscript/chapter*)
CHEAT_DEST="$(cheat -d | grep pure-bash-bible | head -1 | awk '{print $2}')"
if [ ! -d "$CHEAT_DEST" ]; then
mkdir -p "$CHEAT_DEST"
fi
for f in ${PBB_CHAPTERS[@]}; do
# get all headers, take the first one, strip the # and return the first word in lowercase
HEADER=$(grep -e '^[#] ' "$f" | head -1 | awk '{print tolower($2)}')
CHEAT_FILE="$CHEAT_DEST/${HEADER}"
echo "(*) $CHEAT_FILE"
if [ ! -f "$CHEAT_FILE" ]; then
cp "$f" "$CHEAT_FILE"
fi
LC_ALL=C perl -pi.bak -e 's/\<\!-- CHAPTER END --\>//' "$CHEAT_FILE"
rm "$CHEAT_FILE.bak"
# add tags if the file doesn't have them
if [ '---' != "$(head -1 < "$CHEAT_FILE")" ]; then
T="$PBB_SYNTAX\n$PBB_TAGS\n$PBB_SOURCE\n"
echo -e "---\n$T---\n$(cat "$CHEAT_FILE")" > "$CHEAT_FILE"
fi
done
# Cleanup
if [ -d "$PBB_TEMP_DIR" ]; then
rm -rf "$PBB_TEMP_DIR"
fi

73
scripts/install-cheat-tldr.sh Executable file
View File

@@ -0,0 +1,73 @@
#!/usr/bin/env bash
# shellcheck disable=SC2231,SC2034,SC2181,SC2068
# shellcheck source=shared.sh
source "$HOME/.dotfiles/scripts/shared.sh"
TLDR_REQUIRED_TOOLS=(basename git mkdir cheat ls grep head awk cp echo rm)
for t in ${TLDR_REQUIRED_TOOLS[@]}; do
! have "$t" && echo "(!) $t is missing, can't continue..." && exit 1
done
TLDR_GIT="https://github.com/tldr-pages/tldr.git"
TLDR_SOURCE="source: $TLDR_GIT"
TLDR_SYNTAX="syntax: markdown"
TLDR_TAGS="tags: [bash]"
TLDR_TEMP_PREFIX=$(basename "$0")
TLDR_TEMP_DIR="/tmp/cheat-tldr-$(rnd)"
# If there's no .git, clone the folder
if [ ! -d "$TLDR_TEMP_DIR/.git" ]; then
git clone "$TLDR_GIT" "$TLDR_TEMP_DIR"
fi
# Fetch the destination directory from cheat defined directories.
TLDR_CHEAT_DEST="$(cheat -d | grep tldr | head -1 | awk '{print $2}')"
[ "$TLDR_CHEAT_DEST" = "" ] && msg_err "cheat doesn't know about the destination" && exit 1
if [ ! -d "$TLDR_CHEAT_DEST" ]; then
mkdir -p "$TLDR_CHEAT_DEST"
fi
for d in "$TLDR_TEMP_DIR"/pages/*; do
DIRNAME=$(basename "$d")
# echo "-> $DIRNAME ($d)"
case "$DIRNAME" in
*common)
SECTION_DIR="${TLDR_CHEAT_DEST}"
TLDR_TAGS="tags: [common]"
;;
*)
SECTION_DIR="${TLDR_CHEAT_DEST}/$DIRNAME"
TLDR_TAGS="tags: [$DIRNAME]"
;;
esac
if [ ! -d "$SECTION_DIR" ]; then
mkdir -p "$SECTION_DIR"
fi
for FILE in $d/*.md; do
BASENAME=$(basename "$FILE" .md)
FILENAME="${BASENAME%%.*}"
# echo "-> $FILE = $FILENAME"
TLDR_FILE="$SECTION_DIR/${FILENAME}"
# echo "-> dest: $TLDR_FILE"
if [ ! -f "$TLDR_FILE" ]; then
cp "$FILE" "$TLDR_FILE"
fi
if [ -f "$TLDR_FILE" ] && [ '---' != "$(head -1 < "$TLDR_FILE")" ]; then
echo -e "---\n$TLDR_SYNTAX\n$TLDR_TAGS\n$TLDR_SOURCE\n---\n$(cat "$TLDR_FILE")" > "$TLDR_FILE"
fi
done
done
# Cleanup
if [ -d "$TLDR_TEMP_DIR" ]; then
rm -rf "$TLDR_TEMP_DIR"
fi

View File

@@ -10,7 +10,7 @@ FZF_PATH="${XDG_CONFIG_HOME}/fzf"
if [ ! -d "$FZF_PATH" ]; then
git clone --depth 1 "$FZF_GIT" "$FZF_PATH"
$FZF_PATH/install --xdg --all --no-update-rc
"$FZF_PATH/install" --xdg --all --no-update-rc
else
msg_done "fzf ($FZF_PATH/) already installed"
fi

View File

@@ -39,4 +39,7 @@ have gh && {
done
msg_ok "Done"
} || msg_err "gh (GitHub Client) could not be found, please install it first"
}
! have gh \
&& msg_err "gh (GitHub Client) could not be found, please install it first"

View File

@@ -20,6 +20,8 @@ have go && {
github.com/cheat/cheat/cmd/cheat@latest
# Render markdown on the CLI, with pizzazz! 💅
github.com/charmbracelet/glow@latest
# Static checker for GitHub Actions workflow files
github.com/rhysd/actionlint/cmd/actionlint@latest
)
for pkg in "${packages[@]}"; do
@@ -34,4 +36,6 @@ have go && {
done
msg_ok "Done"
} || msg "go hasn't been installed yet."
}
! have go && msg "go hasn't been installed yet."

View File

@@ -36,4 +36,6 @@ have npm && {
msg_run "Upgrading all global packages"
npm -g --no-progress --no-timing --no-fund outdated
npm -g --no-timing --no-fund upgrade
} || msg_err "npm could not be found."
}
! have npm && msg_err "npm could not be found."

View File

@@ -6,9 +6,9 @@
source "$HOME/.dotfiles/scripts/shared.sh"
set -e
have ntfy && {
msg "ntfy already installed"
} || {
have ntfy && msg "ntfy already installed"
! have ntfy && {
case $(dfm check arch) in
Linux)
NTFY_ARCH="linux_$(arch)"

View File

@@ -4,6 +4,12 @@
# Ismo Vuorinen <https://github.com/ivuorinen> 2018
#
[ "$(uname)" != "Darwin" ] && echo "Not a macOS system" && exit 0
! have xcode-select \
&& msg_err "xcode-select could not be found, skipping" \
&& exit 0
# Ask for the administrator password upfront
sudo -v
@@ -14,10 +20,12 @@ while true; do
kill -0 "$$" || exit
done 2> /dev/null &
# https://unix.stackexchange.com/a/408305
# check if user has git installed and propose to install if not installed
if [ "$(which git)" ]; then
echo "You already have git. Continuing..."
XCODE_TOOLS_PATH=$(xcode-select -p)
XCODE_SWIFT_PATH="$XCODE_TOOLS_PATH/usr/bin/swift"
# Modified from https://unix.stackexchange.com/a/408305
if [ -a "$XCODE_SWIFT_PATH" ]; then
echo "You have swift from xcode-select. Continuing..."
else
XCODE_MESSAGE="$(
osascript -e \
@@ -32,7 +40,7 @@ else
fi
fi
until [ "$(which git)" ]; do
until [ -f "$XCODE_SWIFT_PATH" ]; do
echo -n "."
sleep 1
done

View File

@@ -191,7 +191,8 @@ defaults write com.apple.finder FXInfoPanesExpanded -dict \
###############################################################################
# Set default screenshot location
#defaults write com.apple.screencapture "location" -string "~/Documents/Screenshots"
mkdir -p "$HOME/Documents/Screenshots"
defaults write com.apple.screencapture "location" -string "$HOME/Documents/Screenshots"
# Exclude date and time in screenshot filenames
defaults write com.apple.screencapture "include-date" -bool true
@@ -245,7 +246,10 @@ defaults write com.apple.Safari \
-bool true
# Dont display the annoying prompt when quitting iTerm
#defaults write com.googlecode.iterm2 PromptOnQuit -bool false
defaults write com.googlecode.iterm2 PromptOnQuit -bool false
# Use iTerm2 preferences from the .dotfiles folder.
defaults write com.googlecode.iterm2 PrefsCustomFolder \
-string "$HOME/.dotfiles/config/iterm2"
# Prevent Time Machine from prompting to use new hard drives as backup volume
defaults write com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true

View File

@@ -224,3 +224,9 @@ function path_prepend
path_remove "$1"
PATH="$1${PATH:+":$PATH"}"
}
# Creates a random string
rnd()
{
echo $RANDOM | md5sum | head -c 20
}