styler: Remove from repo
This commit is contained in:
parent
3827ba15b3
commit
3e19a38b38
3 changed files with 3 additions and 367 deletions
|
@ -1,6 +1,6 @@
|
||||||
# `~/🌹`
|
# `~/🌹`
|
||||||
|
|
||||||
Note that the below screenshots still show the X configuration from [v0.1](https://gitlab.com/marty-oehme/dotfiles/-/tags/v0.1).
|
Note that the below screenshots still show the X configuration from [v0.1](https://gitlab.com/marty-oehme/dotfiles/-/tags/v0.1) which is very old by now.
|
||||||
The current dotfiles are geared toward wayland for which the setup looks similar but not identical to the previews below.
|
The current dotfiles are geared toward wayland for which the setup looks similar but not identical to the previews below.
|
||||||
|
|
||||||
## What's in these dotfiles
|
## What's in these dotfiles
|
||||||
|
@ -10,8 +10,8 @@ The current dotfiles are geared toward wayland for which the setup looks similar
|
||||||
* [x] simple, efficient waybar with package update notification, and spotify (mpris) integration
|
* [x] simple, efficient waybar with package update notification, and spotify (mpris) integration
|
||||||
* [x] tmux session management through `tm` and `tl` tools
|
* [x] tmux session management through `tm` and `tl` tools
|
||||||
* [x] tmux fuzzy-searching of terminal sessions to switch to with hot-key (`<C-A><C-s>`) in addition to normal session switching
|
* [x] tmux fuzzy-searching of terminal sessions to switch to with hot-key (`<C-A><C-s>`) in addition to normal session switching
|
||||||
* [x] system-wide color management (terminals, vim, qutebrowser, polybar, xresources) through `styler` command using [base16](http://chriskempson.com/projects/base16/) themes
|
* [x] system-wide color management (terminals, vim, qutebrowser, polybar, xresources) through [`flavours`](https://github.com/Misterio77/flavours) application using [base16](http://chriskempson.com/projects/base16/) themes
|
||||||
* [x] quick theme switching by activating `styler` and fuzzy-searching themes with hot-key (default `<Super>=<Shift>+S`)
|
* [x] quick theme switching by activating `flavours` and fuzzy-searching themes with hot-key (default `<Super>=<Shift>+S`)
|
||||||
* [x] many vim color-schemes with quick light/dark switching (`F8`) and individual theme switch (`<Space>+F8`)
|
* [x] many vim color-schemes with quick light/dark switching (`F8`) and individual theme switch (`<Space>+F8`)
|
||||||
* [x] quick directory jumping using `z`, with `fzf` integration
|
* [x] quick directory jumping using `z`, with `fzf` integration
|
||||||
* [x] `fzf`-like integrations for bibtex citation, vim buffer management, most recently used switching, shell command history, and more
|
* [x] `fzf`-like integrations for bibtex citation, vim buffer management, most recently used switching, shell command history, and more
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
#compdef styler
|
|
||||||
# the above line should contain all commands to be completed using this file
|
|
||||||
# zsh autocompletions for styler script
|
|
||||||
|
|
||||||
local curcontext="$curcontext" state line ret=1
|
|
||||||
local cmdnames=(theme set download list help version)
|
|
||||||
|
|
||||||
_arguments -C \
|
|
||||||
'1: :->cmds' \
|
|
||||||
'2: :->args' \
|
|
||||||
'3: :->subrout' && ret=0
|
|
||||||
|
|
||||||
local -a initial_commands=(
|
|
||||||
'theme:Temporarily switch theme to specified argument'
|
|
||||||
'set:Permanently set theme to specified argument'
|
|
||||||
'download:Download a base16 compatible template'
|
|
||||||
'list:Display installed processors, templates, or themes'
|
|
||||||
'help:Display help text and exit'
|
|
||||||
'version:Display styler information and exit'
|
|
||||||
)
|
|
||||||
|
|
||||||
__themes() {
|
|
||||||
echo "$(styler list themes)"
|
|
||||||
}
|
|
||||||
|
|
||||||
case $state in
|
|
||||||
cmds)
|
|
||||||
_describe -t commands 'styler cmd' initial_commands && ret=0
|
|
||||||
;;
|
|
||||||
|
|
||||||
args)
|
|
||||||
case $words[2] in
|
|
||||||
theme | set)
|
|
||||||
_values 'themes' $(__themes) && ret=0
|
|
||||||
;;
|
|
||||||
|
|
||||||
list)
|
|
||||||
_values 'listopts' \
|
|
||||||
'processors[Display available application processors]' \
|
|
||||||
'templates[Display available base16 templates]' \
|
|
||||||
'themes[Display available base16 themes]' && ret=0
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
((ret)) && _message 'no more arguments'
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
esac
|
|
|
@ -1,314 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
readonly BASE_PATH="${STYLER_DATA_PATH:-${XDG_DATA_HOME:-$HOME/.local/share}/styler}"
|
|
||||||
readonly CACHE_PATH="${STYLER_CACHE_PATH:-${XDG_CACHE_HOME:-$HOME/.cache}/styler}"
|
|
||||||
|
|
||||||
readonly PACKAGE_PATH="$BASE_PATH/packages"
|
|
||||||
readonly PROCESSOR_PATH="$BASE_PATH/processors"
|
|
||||||
|
|
||||||
readonly VERSION="0.4.1"
|
|
||||||
|
|
||||||
main() {
|
|
||||||
local cmd=""
|
|
||||||
local ret=0
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
theme)
|
|
||||||
cmd="switch_theme"
|
|
||||||
;;
|
|
||||||
set)
|
|
||||||
cmd="set_theme"
|
|
||||||
;;
|
|
||||||
list)
|
|
||||||
cmd="list"
|
|
||||||
;;
|
|
||||||
download)
|
|
||||||
cmd="download"
|
|
||||||
;;
|
|
||||||
-v | --version | version)
|
|
||||||
printf "Program theming script.\n\n©Marty Oehme\n\nVersion: %s\n" "$VERSION"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
-h | --help | help | *)
|
|
||||||
cmd="usage"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
|
|
||||||
$cmd "$@"
|
|
||||||
ret=$((ret + $?))
|
|
||||||
exit $ret
|
|
||||||
}
|
|
||||||
|
|
||||||
usage() {
|
|
||||||
printf "%s\n" \
|
|
||||||
"" \
|
|
||||||
" styler Quickly switch your linux style." \
|
|
||||||
" Uses base16 themes to quickly set them for a variety of applications." \
|
|
||||||
"" \
|
|
||||||
" Usage: styler [-hv][set|theme base16-themename]" \
|
|
||||||
"" \
|
|
||||||
" Arguments:" \
|
|
||||||
"" \
|
|
||||||
" theme [theme] Temporarily switch theme. Use any valid base16 theme name (without base16- prefix)." \
|
|
||||||
" Theme will be lost upon restart, or application restarts." \
|
|
||||||
"" \
|
|
||||||
" set [theme] Set the theme. Use any valid base16 theme name (without base16- prefix)." \
|
|
||||||
" Same as 'theme' option, but changes will be made permanent." \
|
|
||||||
"" \
|
|
||||||
" list [processors|packages|themes] Print out all currently installed processors, templates, or themes from selection. " \
|
|
||||||
" list themes Will print out themes which are available for all installed packages." \
|
|
||||||
" list themes all Will print out every single installed theme, regardless of its universal availability." \
|
|
||||||
"" \
|
|
||||||
" download [username/repository] Download a base16 template into the package directory or download a processor16" \
|
|
||||||
" into the processor directory. Use user/repo format to automatically pull from github." \
|
|
||||||
"" \
|
|
||||||
" help | -h | --help Print out this help." \
|
|
||||||
"" \
|
|
||||||
" version | -v | --version Print out program information." \
|
|
||||||
"" \
|
|
||||||
""
|
|
||||||
}
|
|
||||||
|
|
||||||
# base directory should always exist
|
|
||||||
base_dir_exists_or_create() {
|
|
||||||
[[ -d "$BASE_PATH" ]] || mkdir "$BASE_PATH"
|
|
||||||
[[ -d "$PACKAGE_PATH" ]] || mkdir "$PACKAGE_PATH"
|
|
||||||
[[ -d "$PROCESSOR_PATH" ]] || mkdir "$BASE_PATH"
|
|
||||||
}
|
|
||||||
|
|
||||||
# retrieves all relevant packages from BASE_PATH/packages
|
|
||||||
# 'relevant' here means they follow github pattern of author/repository
|
|
||||||
get_packages() {
|
|
||||||
for author in "$PACKAGE_PATH"/*; do
|
|
||||||
# TODO should eventually be used to either distinguish between author/pkg and pkg packages
|
|
||||||
# or to spit out a warning if they should not be used.
|
|
||||||
# if grep -q -e '^base16-' <<<"$(basename -- "$author")"; then
|
|
||||||
# echo ERROR
|
|
||||||
# fi
|
|
||||||
for package in "$author"/*; do
|
|
||||||
[[ -e "$author" ]] || break
|
|
||||||
[[ -d "$package" ]] || break
|
|
||||||
printf "%s/%s\n" "$(basename -- "$author")" "$(basename -- "$package")"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# retrieves all processors from BASE_PATH/processors
|
|
||||||
# 'relevant' here means they follow github pattern of author/repository
|
|
||||||
get_processors() {
|
|
||||||
for author in "$PROCESSOR_PATH"/*; do
|
|
||||||
for package in "$author"/*; do
|
|
||||||
for processor in "$package"/*; do
|
|
||||||
[[ -e "$processor" ]] || break
|
|
||||||
[[ -f "$processor" ]] || break
|
|
||||||
if grep -q -e '/theme_[[:alnum:]]\{1,\}$' <<<"$processor"; then
|
|
||||||
printf "%s\n" "$(basename -- "$processor")"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# retrieves all installed themes available to all packages
|
|
||||||
# can be called with `all` argument to return themes which only exist for some packages
|
|
||||||
get_themes() {
|
|
||||||
local themes
|
|
||||||
themes=$(find "$PACKAGE_PATH" -type f -name 'base16-*')
|
|
||||||
|
|
||||||
local filtered
|
|
||||||
if [[ "$1" = "all" ]]; then
|
|
||||||
filtered="$(get_unique_themes "$themes")"
|
|
||||||
else
|
|
||||||
filtered="$(get_universal_themes "$themes")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$filtered"
|
|
||||||
}
|
|
||||||
|
|
||||||
# filter down the list passed in to keep repeating base16 themes only once per name
|
|
||||||
# and remove surrounding path information (and file ending)
|
|
||||||
get_unique_themes() {
|
|
||||||
if _cache_invalid "$CACHED_UNIQUE_THEMES" "$PACKAGE_PATH"; then
|
|
||||||
notify-send "styler cache invalid" "rebuilding cache will take a moment..."
|
|
||||||
_cache_rebuild "$CACHED_UNIQUE_THEMES" _fetch_unique_themes "$@"
|
|
||||||
else
|
|
||||||
cat "$CACHED_UNIQUE_THEMES"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
readonly CACHED_UNIQUE_THEMES=${CACHE_PATH}/unique_themes
|
|
||||||
|
|
||||||
# returns themes which are available in all installed packages
|
|
||||||
# returns cached version or rebuilds cache
|
|
||||||
get_universal_themes() {
|
|
||||||
if _cache_invalid "$CACHED_UNIVERSAL_THEMES" "$PACKAGE_PATH"; then
|
|
||||||
notify-send "styler cache invalid" "rebuilding cache will take a moment..."
|
|
||||||
_cache_rebuild "$CACHED_UNIVERSAL_THEMES" _fetch_universal_themes "$@"
|
|
||||||
else
|
|
||||||
cat "$CACHED_UNIVERSAL_THEMES"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
readonly CACHED_UNIVERSAL_THEMES=${CACHE_PATH}/universal_themes
|
|
||||||
|
|
||||||
_fetch_unique_themes() {
|
|
||||||
echo "$1" | sed "s/.*\\/base16-//;s/\\..*//" | sort | uniq
|
|
||||||
}
|
|
||||||
|
|
||||||
# only keep themes which are available in every installed package
|
|
||||||
_fetch_universal_themes() {
|
|
||||||
local themes="$1"
|
|
||||||
local unique
|
|
||||||
unique="$(get_unique_themes "$themes")"
|
|
||||||
|
|
||||||
local packages
|
|
||||||
packages="$(get_packages)"
|
|
||||||
|
|
||||||
local filtered
|
|
||||||
for t in $unique; do
|
|
||||||
for p in $packages; do
|
|
||||||
if ! echo "$themes" | grep -qe "^.*$p.*$t.*$" -; then
|
|
||||||
themes="$(echo "$themes" | sed "/$t/d")"
|
|
||||||
unique="$(echo "$unique" | sed "/$t/d")"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
echo "$unique"
|
|
||||||
}
|
|
||||||
|
|
||||||
# returns true if changes to $2 are newer than $1
|
|
||||||
# used to pass in cache file for $1, what it is caching for $2
|
|
||||||
_cache_invalid() {
|
|
||||||
cache_upd="$(_last_update "$1")"
|
|
||||||
live_upd="$(_last_update "$2")"
|
|
||||||
if [ "${live_upd%.*}" -gt "${cache_upd%.*}" ]; then
|
|
||||||
true
|
|
||||||
else
|
|
||||||
false
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# recreates target cache with output of function
|
|
||||||
# arguments: "target_cache_file" "function_name" "arguments_for_function"
|
|
||||||
_cache_rebuild() {
|
|
||||||
local target="$1"
|
|
||||||
shift
|
|
||||||
local fct="$1"
|
|
||||||
shift
|
|
||||||
local new
|
|
||||||
new="$($fct "$@")"
|
|
||||||
mkdir -p "$CACHE_PATH"
|
|
||||||
echo "$new" | tee "$target"
|
|
||||||
}
|
|
||||||
|
|
||||||
# returns time of last update to argument passed in
|
|
||||||
# argument can be path to file or directory (searched recursively)
|
|
||||||
# if argument does not exist gives 0
|
|
||||||
_last_update() {
|
|
||||||
[[ ! -e "$1" ]] && echo 0 && return
|
|
||||||
find "$1" -type f -printf "%T@\n" | sort -n | tail -n 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# temporarily switch theme, same thing as setting, only with permanence flag turned off for processors
|
|
||||||
switch_theme() {
|
|
||||||
set_theme "$1" "false"
|
|
||||||
}
|
|
||||||
|
|
||||||
# call processors for all installed packages
|
|
||||||
set_theme() {
|
|
||||||
local theme="$1"
|
|
||||||
if [[ -z $theme ]]; then
|
|
||||||
printf "Theme application requires an argument.\n"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
local permanent="${2:-true}"
|
|
||||||
|
|
||||||
local packages
|
|
||||||
packages="$(get_packages)"
|
|
||||||
if [[ -z "$packages" ]]; then
|
|
||||||
printf "ERROR: No base16 packages installed. Please install at least 1 base16 package in %s/.\n" "$PACKAGE_PATH" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
local processors
|
|
||||||
processors="$(get_processors)"
|
|
||||||
if [[ -z "$processors" ]]; then
|
|
||||||
printf "ERROR: No application processors installed. Please install at least one processor in %s/.\n" "$PROCESSOR_PATH" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
for pkg in $packages; do
|
|
||||||
local appext
|
|
||||||
|
|
||||||
# filter the application a package targets, since base16 packages
|
|
||||||
# carry standard names this removes everything before base16-
|
|
||||||
# the result is the application it targets
|
|
||||||
# shellcheck disable=SC2001
|
|
||||||
appext=$(sed -e 's|^[A-Za-z0-9-]\{1,\}/base16-||' <<<"$pkg")
|
|
||||||
|
|
||||||
# Compares application extension with existing processors and runs the appropriate processor if found
|
|
||||||
processor=$(find "$PROCESSOR_PATH" -type f | grep -e "theme_$appext")
|
|
||||||
if [[ -f "$processor" ]]; then
|
|
||||||
"$processor" "$PACKAGE_PATH" "$pkg" "$theme" "$permanent"
|
|
||||||
else
|
|
||||||
printf "WARN: No processor found for application %s in %s. Make sure you install a processor for the application.\n" "$appext" "$PROCESSOR_PATH/" >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
list() {
|
|
||||||
local selected="$1"
|
|
||||||
shift
|
|
||||||
|
|
||||||
case "$selected" in
|
|
||||||
packages)
|
|
||||||
get_packages
|
|
||||||
;;
|
|
||||||
processors)
|
|
||||||
get_processors
|
|
||||||
;;
|
|
||||||
themes)
|
|
||||||
get_themes "$@"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Please select one of packages | processors | themes to list."
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
download() {
|
|
||||||
local pkg="$1"
|
|
||||||
local page="https://github.com"
|
|
||||||
local repo="$page/$pkg"
|
|
||||||
|
|
||||||
[[ -z "$pkg" ]] && {
|
|
||||||
echo "No package to download passed in. Please provide a package to download in the form user/repository."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
type git >/dev/null 2>&1 || {
|
|
||||||
echo "git is required to clone base16 package. Please install git."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
base_dir_exists_or_create
|
|
||||||
|
|
||||||
if ! git ls-remote --exit-code -h "$repo" >/dev/null; then
|
|
||||||
echo "Repository $repo not found."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# if package has patter name/base16-program, put it in packages; if name/process16-program put it in processors
|
|
||||||
# if none of the above, assume it's a processor but warn the user
|
|
||||||
if grep -q -e '^[0-9A-Za-z-]\{1,\}/base16-[0-9A-Za-z-]\{1,\}$' <<<"$pkg"; then
|
|
||||||
git clone "$repo" "$PACKAGE_PATH/$pkg"
|
|
||||||
elif grep -q -e '^[0-9A-Za-z-]\{1,\}/process16-[0-9A-Za-z-]\{1,\}$' <<<"$pkg"; then
|
|
||||||
git clone "$repo" "$PROCESSOR_PATH/$pkg"
|
|
||||||
else
|
|
||||||
echo "Package does not fit default naming scheme of packages/processors. Assuming it is a processor but please check manually."
|
|
||||||
git clone "$repo" "$PROCESSOR_PATH/$pkg"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
Loading…
Reference in a new issue