install.fairie/.local/bin/logg
Brian Zalewski e0842d80ea Update .local/bin/chrome-profile-export, .local/bin/firefox-profile-export, .local/bin/firefox-profile-import, .local/bin/install-dotfiles, .local/bin/install-rofi-theme, .local/bin/install-terminal-theme, .local/bin/ksetwallpaper, .local/bin/logg, .local/bin/opener, .local/bin/provision, .local/bin/quickstart, .local/bin/ramqube, .local/bin/run, .local/bin/squash-symlink, .local/delta/themes.gitconfig, .local/konsole/Default.profile, .local/share/bash-completion/completions/deno.bash, .local/share/bash-completion/completions/direnv.bash, .local/share/bash-completion/completions/fig.bash, .local/share/bash-completion/completions/fzf-key-bindings.bash, .local/share/bash-completion/completions/fzf.bash, .local/share/bash-completion/completions/gcloud.bash, .local/share/bash-completion/completions/gh.bash, .local/share/bash-completion/completions/googler.bash, .local/share/bash-completion/completions/gradle.bash, .local/share/bash-completion/completions/helm.bash, .local/share/bash-completion/completions/hyperfine.bash, .local/share/bash-completion/completions/kubectl.bash, .local/share/bash-completion/completions/mcfly.bash, .local/share/bash-completion/completions/nb.bash, .local/share/bash-completion/completions/nnn.bash, .local/share/bash-completion/completions/poetry.bash, .local/share/bash-completion/completions/volta.bash, .local/share/bash-completion/completions/wp.bash, .local/share/bash-completion/completions/zoxide.bash, .local/share/bash-completion/generate.sh, .local/share/chezmoi/home/.chezmoiscripts/archlinux/run_onchange_before_10_install-archlinux-dependencies.tmpl, .local/share/chezmoi/home/.chezmoiscripts/centos/run_onchange_before_10-install-centos-dependencies.tmpl, .local/share/chezmoi/home/.chezmoiscripts/darwin/run_onchange_after_10_configure-macos.tmpl, .local/share/chezmoi/home/.chezmoiscripts/darwin/run_onchange_after_20-ensure-zsh-macos.tmpl, .local/share/chezmoi/home/.chezmoiscripts/darwin/run_onchange_before_10_install-darwin-dependencies.tmpl, .local/share/chezmoi/home/.chezmoiscripts/debian/run_onchange_before_10-install-debian-dependencies.tmpl, .local/share/chezmoi/home/.chezmoiscripts/fedora/run_onchange_before_10-install-fedora-dependencies.tmpl, .local/share/chezmoi/home/.chezmoiscripts/freebsd/run_onchange_before_11-install-freebsd-packages.tmpl, .local/share/chezmoi/home/.chezmoiscripts/opensuse/run_onchange_before_11-install-opensuse-software.tmpl, .local/share/chezmoi/home/.chezmoiscripts/ubuntu/run_onchange_before_10_install-ubuntu-dependencies.tmpl, .local/share/chezmoi/home/.chezmoiscripts/universal/run_once_before_decrypt-age-key.tmpl, .local/share/chezmoi/home/.chezmoiscripts/universal/run_onchange_after_10_install-aqua-packages.sh.tmpl, .local/share/chezmoi/home/.chezmoiscripts/universal/run_onchange_after_15_install-asdf-packages.tmpl, .local/share/chezmoi/home/.chezmoiscripts/universal/run_onchange_after_50-crontab.tmpl, .local/share/chezmoi/home/.chezmoiscripts/universal/run_onchange_after_60-cleanup.tmpl, .local/share/chezmoi/home/.chezmoiscripts/universal/run_onchange_after_80-bash-completions.tmpl, .local/share/chezmoi/home/.chezmoiscripts/universal/run_onchange_after_99_bootstrap-z4h.tmpl, .local/share/chezmoi/home/.chezmoiscripts/universal/run_onchange_before_5-install-homebrew.tmpl, .local/share/chezmoi/home/.chezmoiscripts/universal/run_onchange_before_8-install-zx.tmpl, .local/share/chezmoi/home/.chezmoiscripts/universal/run_onchange_before_90-install-packages.tmpl, .local/share/chezmoi/home/.chezmoiscripts/universal/run_onchange_before_91-configure-gpg.tmpl, .local/share/chezmoi/home/.chezmoiscripts/windows/run_onchange_before_10-install-windows-dependencies.tmpl, .local/share/chezmoi/home/.chezmoiscripts/windows/run_onchange_before_11-install-windows-packages.tmpl, .local/share/chezmoi/home/.chezmoitemplates/darwin/Brewfile, .local/share/chezmoi/home/.chezmoitemplates/universal/essential-packages, .local/share/chezmoi/home/.chezmoitemplates/universal/logg, .local/share/chezmoi/home/.chezmoitemplates/universal/logg-compat, .local/share/chezmoi/home/.chezmoitemplates/universal/profile, .local/share/chezmoi/home/AppData/Local/clink/oh-my-posh.lua, .local/share/chezmoi/home/Library/Application Support/tabby/plugins/package-lock.json, .local/share/chezmoi/home/Library/Developer/Xcode/UserData/FontAndColorThemes/Betelgeuse Dark.dvtcolortheme, .local/share/chezmoi/home/Library/Developer/Xcode/UserData/FontAndColorThemes/Betelgeuse Light.dvtcolortheme, .local/share/chezmoi/home/Library/Preferences/com.apple.Terminal.plist, .local/share/chezmoi/home/Library/VirtualBox/VirtualBox.xml, .local/share/chezmoi/home/dot_VirtualBox/VirtualBox.xml, .local/share/chezmoi/home/dot_cache/readonly_rclone/.gitkeep, .local/share/chezmoi/home/dot_cache/zsh/.gitkeep, .local/share/chezmoi/home/dot_gnupg/public/apt.hashicorp.sig, .local/share/chezmoi/home/dot_gnupg/public/linux.wazuh.sig, .local/share/chezmoi/home/dot_gnupg/public/qubes.uman.sig, .local/share/chezmoi/home/dot_local/.config/symlink_taskfiles, .local/share/chezmoi/home/dot_local/assets/Betelgeuse.macOS.terminal, .local/share/chezmoi/home/dot_local/bin/executable_bwc, .local/share/chezmoi/home/dot_local/bin/executable_chrome-profile-export, .local/share/chezmoi/home/dot_local/bin/executable_chrome-profile-import, .local/share/chezmoi/home/dot_local/bin/executable_firefox-profile-export, .local/share/chezmoi/home/dot_local/bin/executable_firefox-profile-import, .local/share/chezmoi/home/dot_local/bin/executable_fonttest, .local/share/chezmoi/home/dot_local/bin/executable_install-dotfiles.tmpl, .local/share/chezmoi/home/dot_local/bin/executable_install-gnome-extensions, .local/share/chezmoi/home/dot_local/bin/executable_install-software, .local/share/chezmoi/home/dot_local/bin/executable_install-terminal-theme, .local/share/chezmoi/home/dot_local/bin/executable_ksetwallpaper, .local/share/chezmoi/home/dot_local/bin/executable_load-secrets, .local/share/chezmoi/home/dot_local/bin/executable_logg, .local/share/chezmoi/home/dot_local/bin/executable_opener, .local/share/chezmoi/home/dot_local/bin/executable_provision, .local/share/chezmoi/home/dot_local/bin/executable_quickstart, .local/share/chezmoi/home/dot_local/bin/executable_ramqube, .local/share/chezmoi/home/dot_local/bin/executable_run, .local/share/chezmoi/home/dot_local/bin/executable_slack, .local/share/chezmoi/home/dot_local/bin/executable_squash-symlink, .local/share/chezmoi/home/dot_local/bin/executable_tinypng.tmpl, .local/share/chezmoi/home/dot_local/bin/run_onchange_ensure-executable.tmpl, .local/share/chezmoi/home/dot_local/bin/symlink_bat.tmpl, .local/share/chezmoi/home/dot_local/bin/symlink_bombshell-client.tmpl, .local/share/chezmoi/home/dot_local/bin/symlink_fd.tmpl, .local/share/chezmoi/home/dot_local/bin/symlink_qrun.tmpl, .local/share/chezmoi/home/dot_local/bin/symlink_qscp, .local/share/chezmoi/home/dot_local/bin/symlink_qssh.tmpl, .local/share/chezmoi/home/dot_local/bin/symlink_readlink.tmpl, .local/share/chezmoi/home/dot_local/konsole/Default.profile, .local/share/chezmoi/home/dot_local/log/remove_dot_gitkeep, .local/share/chezmoi/home/dot_local/scripts/motd.bash, .local/share/chezmoi/home/dot_local/scripts/p10k.zsh, .local/share/chezmoi/home/dot_local/share/ansible/plugins/action/symlink_commonlib.py.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/plugins/action/symlink_qubes_pass.py.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/plugins/action/symlink_qubesformation.py.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/plugins/action/symlink_qubesguid.py.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/plugins/action/symlink_qubessls.py.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/plugins/connection/symlink_qubes.py.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/plugins/library/symlink_qubes_pass.py.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/plugins/library/symlink_qubesformation.py.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/plugins/library/symlink_qubesguid.py.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/plugins/library/symlink_qubessls.py.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/plugins/lookup/symlink_jq.py.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/plugins/lookup/symlink_qubes-pass.py.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/roles/run_onchange_after_symlink-ansible-roles.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/tasks/symlink_qubes.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/run_onchange_after_symlink-ansible-configs.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/symlink_README.md.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/symlink_Vagrantfile.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/symlink_ansible.cfg.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/symlink_docs.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/symlink_environments.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/symlink_main.yml.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/symlink_playbooks.tmpl, .local/share/chezmoi/home/dot_local/share/ansible/symlink_requirements.yml.tmpl, .local/share/chezmoi/home/dot_local/share/fonts/FontAwesome.ttf, .local/share/chezmoi/home/dot_local/share/fonts/Weather-Icons.ttf, .local/share/chezmoi/home/dot_local/share/git-core/templates/hooks/post-commit, .local/share/chezmoi/home/dot_local/state/bash/remove_dot_gitkeep, .local/share/chezmoi/home/dot_local/state/zsh/remove_dot_gitkeep, .local/share/chezmoi/home/dot_local/Taskfile-local.yml, .local/share/chezmoi/home/dot_ssh/authorized_keys.github.tmpl, .local/share/chezmoi/home/dot_ssh/create_private_readonly_private_id_rsa.tmpl, .local/share/chezmoi/home/dot_ssh/private_config.tmpl, .local/share/chezmoi/home/dot_ssh/run_onchanges_after_generate-public-keys.tmpl, .local/share/chezmoi/home/dot_vim/autoload/lightline/colorscheme/Betelgeuse.vim, .local/share/chezmoi/home/dot_vim/colors/Betelgeuse.vim, .local/share/chezmoi/home/dot_vim/vimrc, .local/share/chezmoi/home/private_dot_config/Kvantum/kvantum.config, .local/share/chezmoi/home/private_dot_config/VirtualBox/VirtualBox.xml.tmpl, .local/share/chezmoi/home/private_dot_config/alacritty/alacritty.yml, .local/share/chezmoi/home/private_dot_config/asdf/asdfrc.tmpl, .local/share/chezmoi/home/private_dot_config/asdf/default-cargo-pkgs.tmpl, .local/share/chezmoi/home/private_dot_config/asdf/default-golang-pkgs.tmpl, .local/share/chezmoi/home/private_dot_config/asdf/default-npm-packages, .local/share/chezmoi/home/private_dot_config/asdf/default-python-pkgs.tmpl, .local/share/chezmoi/home/private_dot_config/asdf/default-ruby-pkgs.tmpl, .local/share/chezmoi/home/private_dot_config/bashtop/bashtop.cfg, .local/share/chezmoi/home/private_dot_config/bat/config, .local/share/chezmoi/home/private_dot_config/brew/Brewfile.tmpl, .local/share/chezmoi/home/private_dot_config/brew/whalebrew, .local/share/chezmoi/home/private_dot_config/crontab/config, .local/share/chezmoi/home/private_dot_config/desktop/plasmoids.yml, .local/share/chezmoi/home/private_dot_config/direnv/direnv.toml, .local/share/chezmoi/home/private_dot_config/environments/desktop, .local/share/chezmoi/home/private_dot_config/environments/development, .local/share/chezmoi/home/private_dot_config/environments/terminal, .local/share/chezmoi/home/private_dot_config/fd/ignore, .local/share/chezmoi/home/private_dot_config/firejail/bitwarden.local, .local/share/chezmoi/home/private_dot_config/firejail/chromium.local, .local/share/chezmoi/home/private_dot_config/firejail/code.local, .local/share/chezmoi/home/private_dot_config/firejail/gcloud.local, .local/share/chezmoi/home/private_dot_config/firejail/google-chrome-stable.local, .local/share/chezmoi/home/private_dot_config/firejail/slack.local, .local/share/chezmoi/home/private_dot_config/firejail/thunderbird.local, .local/share/chezmoi/home/private_dot_config/fontconfig/fonts.conf, .local/share/chezmoi/home/private_dot_config/ghorg/conf.yaml.tmpl, .local/share/chezmoi/home/private_dot_config/git/attributes, .local/share/chezmoi/home/private_dot_config/git/commit-template, .local/share/chezmoi/home/private_dot_config/git/config.tmpl, .local/share/chezmoi/home/private_dot_config/git/ignore, .local/share/chezmoi/home/private_dot_config/gtk-1.0/.gitkeep, .local/share/chezmoi/home/private_dot_config/gtk-2.0/gtkrc, .local/share/chezmoi/home/private_dot_config/gtk-3.0/settings.ini, .local/share/chezmoi/home/private_dot_config/heroku/deploy.yml.tmpl, .local/share/chezmoi/home/private_dot_config/himalaya/config.toml.tmpl.TODO, .local/share/chezmoi/home/private_dot_config/k9s/plugin.yml, .local/share/chezmoi/home/private_dot_config/kitty/Betelgeuse-dark.conf, .local/share/chezmoi/home/private_dot_config/kitty/Betelgeuse-light.conf, .local/share/chezmoi/home/private_dot_config/kitty/kitty.conf, .local/share/chezmoi/home/private_dot_config/ngrok/ngrok.yml.tmpl, .local/share/chezmoi/home/private_dot_config/npm/npmrc.tmpl.TODO, .local/share/chezmoi/home/private_dot_config/oh-my-posh/Betelgeuse-minimal.omp.json, .local/share/chezmoi/home/private_dot_config/oh-my-posh/Betelgeuse.omp.json, .local/share/chezmoi/home/private_dot_config/pg/.gitkeep, .local/share/chezmoi/home/private_dot_config/pgcli/config, .local/share/chezmoi/home/private_dot_config/powershell/user_profile.ps1.TODO, .local/share/chezmoi/home/private_dot_config/private_Code/User/extensions/theme-betelgeuse-vscode/themes/themer-dark-color-theme.json, .local/share/chezmoi/home/private_dot_config/private_Code/User/extensions/theme-betelgeuse-vscode/themes/themer-light-color-theme.json, .local/share/chezmoi/home/private_dot_config/private_Code/User/extensions/theme-betelgeuse-vscode/README.md, .local/share/chezmoi/home/private_dot_config/private_Code/User/extensions/theme-betelgeuse-vscode/icon.svg, .local/share/chezmoi/home/private_dot_config/private_Code/User/extensions/theme-betelgeuse-vscode/package.json, .local/share/chezmoi/home/private_dot_config/private_Code/User/extensions.json, .local/share/chezmoi/home/private_dot_config/private_Code/User/keybindings.json, .local/share/chezmoi/home/private_dot_config/private_Code/User/settings.json, .local/share/chezmoi/home/private_dot_config/putty/.gitkeep, .local/share/chezmoi/home/private_dot_config/rclone/merge_rclone.conf, .local/share/chezmoi/home/private_dot_config/readline/inputrc, .local/share/chezmoi/home/private_dot_config/ripgrep/config, .local/share/chezmoi/home/private_dot_config/rofi/config.rasi.tmpl, .local/share/chezmoi/home/private_dot_config/shell/aliases.tmpl, .local/share/chezmoi/home/private_dot_config/shell/exports.tmpl, .local/share/chezmoi/home/private_dot_config/shell/functions, .local/share/chezmoi/home/private_dot_config/shell/motd, .local/share/chezmoi/home/private_dot_config/shell/private_dot_private, .local/share/chezmoi/home/private_dot_config/shell/profile, .local/share/chezmoi/home/private_dot_config/slack-term/config.tmpl, .local/share/chezmoi/home/private_dot_config/tabby/config.yaml.tmpl, .local/share/chezmoi/home/private_dot_config/terminator/config, .local/share/chezmoi/home/private_dot_config/tmux/.gitkeep, .local/share/chezmoi/home/private_dot_config/wget/wgetrc, .local/share/chezmoi/home/private_dot_config/xfce4/terminal/terminalrc, .local/share/chezmoi/home/private_dot_config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml, .local/share/chezmoi/home/private_dot_config/xsettingsd/xsettingsd.conf, .local/share/chezmoi/home/private_dot_config/youtube-dl/config, .local/share/chezmoi/home/private_dot_config/chromium-flags.conf, .local/share/chezmoi/home/private_dot_config/gtkrc, .local/share/chezmoi/home/private_dot_config/kcminputrc, .local/share/chezmoi/home/private_dot_config/kdeglobals, .local/share/chezmoi/home/private_dot_config/konsolerc, .local/share/chezmoi/home/private_dot_config/ksplashrc, .local/share/chezmoi/home/private_dot_config/ktimezonedrc, .local/share/chezmoi/home/private_dot_config/kwinrc, .local/share/chezmoi/home/private_dot_config/mimeapps.list, .local/share/chezmoi/home/private_dot_config/plasma-localerc, .local/share/chezmoi/home/private_dot_config/plasmarc, .local/share/chezmoi/home/.chezmoi.yaml.tmpl, .local/share/chezmoi/home/.chezmoidata.yaml, .local/share/chezmoi/home/.chezmoiexternal.toml, .local/share/chezmoi/home/.chezmoiignore, .local/share/chezmoi/home/.chezmoiremove, .local/share/chezmoi/home/chezmoi.txt.age, .local/share/chezmoi/home/dot_Xresources, .local/share/chezmoi/home/dot_bashrc, .local/share/chezmoi/home/dot_editorconfig, .local/share/chezmoi/home/dot_tool-versions.tmpl, .local/share/chezmoi/home/dot_zshrc, .local/share/chezmoi/system/Applications/Firefox.app/Contents/Resources/distribution/policies.json, .local/share/chezmoi/system/etc/fonts/local.conf, .local/share/chezmoi/system/etc/grub.d/31_hold-shift, .local/share/chezmoi/system/etc/keybase/config.json, .local/share/chezmoi/system/etc/opt/chrome/policies/managed/policies.json, .local/share/chezmoi/system/etc/systemd/system/r2-docker.service, .local/share/chezmoi/system/etc/systemd/system/r2-{{ .user.username }}.service.tmpl, .local/share/chezmoi/system/etc/timeshift/timeshift.json, .local/share/chezmoi/system/etc/rcloneignore, .local/share/chezmoi/system/mnt/private_r2-docker/remove_dot_gitkeep, .local/share/chezmoi/system/usr/lib/firefox/distribution/policies.json, .local/share/chezmoi/system/usr/lib/firefox-esr/distribution/policies.json, .local/share/chezmoi/system/usr/local/bin/executable_rclone-mount, .local/share/chezmoi/system/var/cache/rclone/remove_dot_gitkeep, .local/share/chezmoi/system/var/log/user/run_onchange_after-symlink-user-logs, .local/share/chezmoi/system/.chezmoiexternal.toml, .local/share/chezmoi/.chezmoiignore, .local/share/chezmoi/.chezmoiroot, .local/share/chezmoi/software.json, .local/share/chezmoi/software.yml, .local/share/fonts/FontAwesome.ttf, .local/share/fonts/Hack Bold Italic Nerd Font Complete Mono Windows Compatible.ttf, .local/share/fonts/Hack Bold Italic Nerd Font Complete Mono.ttf, .local/share/fonts/Hack Bold Italic Nerd Font Complete Windows Compatible.ttf, .local/share/fonts/Hack Bold Italic Nerd Font Complete.ttf, .local/share/fonts/Hack Bold Nerd Font Complete Mono Windows Compatible.ttf, .local/share/fonts/Hack Bold Nerd Font Complete Mono.ttf, .local/share/fonts/Hack Bold Nerd Font Complete Windows Compatible.ttf, .local/share/fonts/Hack Bold Nerd Font Complete.ttf, .local/share/fonts/Hack Italic Nerd Font Complete Mono Windows Compatible.ttf, .local/share/fonts/Hack Italic Nerd Font Complete Mono.ttf, .local/share/fonts/Hack Italic Nerd Font Complete Windows Compatible.ttf, .local/share/fonts/Hack Italic Nerd Font Complete.ttf, .local/share/fonts/Hack Regular Nerd Font Complete Mono Windows Compatible.ttf, .local/share/fonts/Hack Regular Nerd Font Complete Mono.ttf, .local/share/fonts/Hack Regular Nerd Font Complete Windows Compatible.ttf, .local/share/fonts/Hack Regular Nerd Font Complete.ttf, .local/share/fonts/Montserrat-Black.ttf, .local/share/fonts/Montserrat-BlackItalic.ttf, .local/share/fonts/Montserrat-Bold.ttf, .local/share/fonts/Montserrat-BoldItalic.ttf, .local/share/fonts/Montserrat-ExtraBold.ttf, .local/share/fonts/Montserrat-ExtraBoldItalic.ttf, .local/share/fonts/Montserrat-ExtraLight.ttf, .local/share/fonts/Montserrat-ExtraLightItalic.ttf, .local/share/fonts/Montserrat-Italic.ttf, .local/share/fonts/Montserrat-Light.ttf, .local/share/fonts/Montserrat-LightItalic.ttf, .local/share/fonts/Montserrat-Medium.ttf, .local/share/fonts/Montserrat-MediumItalic.ttf, .local/share/fonts/Montserrat-Regular.ttf, .local/share/fonts/Montserrat-SemiBold.ttf, .local/share/fonts/Montserrat-SemiBoldItalic.ttf, .local/share/fonts/Montserrat-Thin.ttf, .local/share/fonts/Montserrat-ThinItalic.ttf, .local/share/fonts/Weather-Icons.ttf, .local/share/fonts/ZillaSlab-Bold.ttf, .local/share/fonts/ZillaSlab-BoldItalic.ttf, .local/share/fonts/ZillaSlab-Italic.ttf, .local/share/fonts/ZillaSlab-Light.ttf, .local/share/fonts/ZillaSlab-LightItalic.ttf, .local/share/fonts/ZillaSlab-Medium.ttf, .local/share/fonts/ZillaSlab-MediumItalic.ttf, .local/share/fonts/ZillaSlab-Regular.ttf, .local/share/fonts/ZillaSlab-SemiBold.ttf, .local/share/fonts/ZillaSlab-SemiBoldItalic.ttf, .local/share/kactivitymanagerd/resources/database, .local/share/kactivitymanagerd/resources/database-shm, .local/share/kactivitymanagerd/resources/database-wal, .local/software/desktop/Brewfile, .local/software/desktop/Packages.config, .local/software/desktop/Wingetfile, .local/software/development/Brewfile, .local/software/development/Packages.config, .local/software/development/Scoopfile, .local/software/terminal/Brewfile, .local/software/terminal/Packages.config, .local/software/terminal/Scoopfile, .local/software/Gasfile.yml, .local/theme/Betelgeuse.macOS.terminal, .local/theme/background.jpg, .local/vagrant.d/.gitkeep, .local/Taskfile-localhost.yml, .local/aliases, .local/antigen.zsh, .local/dockerfunc.sh, .local/functions, .local/fzf-tmux.sh, .local/motd.sh, .local/p10k.zsh
Deleted dotfiles/.local/android-sdk/.gitkeep
2022-11-30 05:44:09 +00:00

393 lines
13 KiB
Bash

#!/usr/bin/env bash
# @file .config/log
# @brief Logger / prompt library that logs pretty console messages and provides several prompt methods
# @description
# This file contains several functions that log content in different formats. It also provides an
# interface for [Gum](https://github.com/charmbracelet/gum) based prompts. The available methods include:
#
# * `choose` - Prompt user with choices
# * `confirm` - Fancy Yes/No confirmation prompt
# * `error` - Logs an error message
# * `filter` - Filterable list of choices (with choices passed in as a line-return seperated file)
# * `info` - Logs a regular message
# * `input` - Prompt for a text input
# * `md` - Render a markdown file with [Glow](https://github.com/charmbracelet/glow)
# * `password` - Prompt for text that is masked by the prompt
# * `prompt` - Log a description for a prompt that follows
# * `spin` - Show a spinner while background job completes
# * `star` - Logs a message with a star icon at the beginning
# * `start` - Log a job start message
# * `success` - Logs a success message
# * `warn` - Logs a warning message
# * `write` - Multi-line input prompt
#
# If the `docker` environment variable is not set, the script / library will ensure both Gum and Glow are installed.
# @description Installs glow (a markdown renderer) from GitHub releases
# @example installGlow
installGlow() {
# TODO: Add support for other architecture types
if [ -d '/Applications' ] && [ -d '/Library' ] && [ -d '/Users' ]; then
GLOW_DOWNLOAD_URL="https://github.com/charmbracelet/glow/releases/download/v1.4.1/glow_1.4.1_Darwin_x86_64.tar.gz"
elif [ -f '/etc/ubuntu-release' ] || [ -f '/etc/debian_version' ] || [ -f '/etc/redhat-release' ] || [ -f '/etc/SuSE-release' ] || [ -f '/etc/arch-release' ] || [ -f '/etc/alpine-release' ]; then
GLOW_DOWNLOAD_URL="https://github.com/charmbracelet/glow/releases/download/v1.4.1/glow_1.4.1_linux_x86_64.tar.gz"
fi
if type curl &> /dev/null; then
if { [ -d '/Applications' ] && [ -d '/Library' ] && [ -d '/Users' ]; } || [ -f '/etc/ubuntu-release' ] || [ -f '/etc/debian_version' ] || [ -f '/etc/redhat-release' ] || [ -f '/etc/SuSE-release' ] || [ -f '/etc/arch-release' ] || [ -f '/etc/alpine-release' ]; then
TMP="$(mktemp)"
TMP_DIR="$(dirname "$TMP")"
curl -sSL "$GLOW_DOWNLOAD_URL" > "$TMP"
tar -xzf "$TMP" -C "$TMP_DIR"
if [ -n "$HOME" ]; then
if mkdir -p "$HOME/.local/bin" && mv "$TMP_DIR/glow" "$HOME/.local/bin/glow"; then
GLOW_PATH="$HOME/.local/bin/glow"
else
GLOW_PATH="$(dirname "${BASH_SOURCE[0]}")/glow"
mv "$TMP_DIR/gum" "$GLOW_PATH"
fi
chmod +x "$GLOW_PATH"
else
echo "WARNING: The HOME environment variable is not set! (Glow)"
fi
else
echo "WARNING: Unable to detect system type. (Glow)"
fi
fi
}
# @description Installs gum (a logging CLI) from GitHub releases
# @example installGum
installGum() {
# TODO: Add support for other architecture types
if [ -d '/Applications' ] && [ -d '/Library' ] && [ -d '/Users' ]; then
GUM_DOWNLOAD_URL="https://github.com/charmbracelet/gum/releases/download/v0.4.0/gum_0.4.0_Darwin_x86_64.tar.gz"
elif [ -f '/etc/ubuntu-release' ] || [ -f '/etc/debian_version' ] || [ -f '/etc/redhat-release' ] || [ -f '/etc/SuSE-release' ] || [ -f '/etc/arch-release' ] || [ -f '/etc/alpine-release' ]; then
GUM_DOWNLOAD_URL="https://github.com/charmbracelet/gum/releases/download/v0.4.0/gum_0.4.0_linux_x86_64.tar.gz"
fi
if type curl &> /dev/null; then
if { [ -d '/Applications' ] && [ -d '/Library' ] && [ -d '/Users' ]; } || [ -f '/etc/ubuntu-release' ] || [ -f '/etc/debian_version' ] || [ -f '/etc/redhat-release' ] || [ -f '/etc/SuSE-release' ] || [ -f '/etc/arch-release' ] || [ -f '/etc/alpine-release' ]; then
TMP="$(mktemp)"
TMP_DIR="$(dirname "$TMP")"
curl -sSL "$GUM_DOWNLOAD_URL" > "$TMP"
tar -xzf "$TMP" -C "$TMP_DIR"
if [ -n "$HOME" ]; then
if mkdir -p "$HOME/.local/bin" && mv "$TMP_DIR/gum" "$HOME/.local/bin/gum"; then
GUM_PATH="$HOME/.local/bin/gum"
else
GUM_PATH="$(dirname "${BASH_SOURCE[0]}")/gum"
mv "$TMP_DIR/gum" "$GLOW_PATH"
fi
chmod +x "$GUM_PATH"
else
echo "WARNING: The HOME environment variable is not set! (Gum)"
fi
else
echo "WARNING: Unable to detect system type. (Gum)"
fi
fi
}
# @description Configure the logger to use echo or gum
if [ "${container:=}" != 'docker' ]; then
# Acquire gum's path or attempt to install it
if type gum &> /dev/null; then
GUM_PATH="$(which gum)"
elif [ -f "$HOME/.local/bin/gum" ]; then
GUM_PATH="$HOME/.local/bin/gum"
elif [ -f "$(dirname "${BASH_SOURCE[0]}")/gum" ]; then
GUM_PATH="$(dirname "${BASH_SOURCE[0]}")/gum"
elif type brew &> /dev/null; then
brew install gum
GUM_PATH="$(which gum)"
else
installGum
fi
# If gum's path was set, then turn on enhanced logging
if [ -n "$GUM_PATH" ]; then
chmod +x "$GUM_PATH"
ENHANCED_LOGGING=true
fi
fi
# @description Disable logging for Semantic Release because it tries to parse it as JSON
if [ -n "$SEMANTIC_RELEASE" ]; then
NO_LOGGING=true
fi
# @description Logs using Node.js
# @example logger info "An informative log"
logger() {
if [ "$1" == 'error' ]; then
"$GUM_PATH" style --border="thick" "$("$GUM_PATH" style --foreground="#ff0000" "✖") $("$GUM_PATH" style --bold --background="#ff0000" --foreground="#ffffff" " ERROR ") $("$GUM_PATH" style --bold "$(format "$2")")"
elif [ "$1" == 'info' ]; then
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#00ffff" "○") $2"
elif [ "$1" == 'md' ]; then
# @description Ensure glow is installed
if [ "${container:=}" != 'docker' ]; then
if type glow &> /dev/null; then
GLOW_PATH="$(which glow)"
elif [ -f "$HOME/.local/bin/glow" ]; then
GLOW_PATH="$HOME/.local/bin/glow"
elif [ -f "$(dirname "${BASH_SOURCE[0]}")/glow" ]; then
GLOW_PATH="$(dirname "${BASH_SOURCE[0]}")/glow"
elif type brew &> /dev/null; then
brew install glow
GLOW_PATH="$(which glow)"
else
installGlow
fi
if [ -n "$GLOW_PATH" ]; then
chmod +x "$GLOW_PATH"
ENHANCED_LOGGING=true
fi
fi
"$GLOW_PATH" "$2"
elif [ "$1" == 'prompt' ]; then
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#00008b" "▶") $("$GUM_PATH" style --bold "$(format "$2")")"
elif [ "$1" == 'star' ]; then
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#d1d100" "◆") $("$GUM_PATH" style --bold --underline "$(format "$2")")"
elif [ "$1" == 'start' ]; then
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#00ff00" "▶") $("$GUM_PATH" style --bold "$(format "$2")")"
elif [ "$1" == 'success' ]; then
"$GUM_PATH" style "$("$GUM_PATH" style --foreground="#00ff00" "✔") $("$GUM_PATH" style --bold "$(format "$2")")"
elif [ "$1" == 'warn' ]; then
"$GUM_PATH" style " $("$GUM_PATH" style --foreground="#d1d100" "◆") $("$GUM_PATH" style --bold --background="#ffff00" --foreground="#000000" " WARNING ") $("$GUM_PATH" style --bold --italic "$(format "$2")")"
else
echo "WARNING: Unknown log type"
echo "$2"
fi
}
format() {
# shellcheck disable=SC2001,SC2016
ANSI_STR="$(echo "$1" | sed 's/^\([^`]*\)`\([^`]*\)`/\1\\u001b[47;1;30m \2 \\e[0;39m/')"
if [[ $ANSI_STR == *'`'*'`'* ]]; then
ANSI_STR="$(format "$ANSI_STR")"
fi
echo -e "$ANSI_STR"
}
# @description Display prompt that allows you to choose between options
# @example RESPONSE="$(.config/log choose "file.png" "another-file.jpg")"
choose() {
if type gum &> /dev/null; then
CHOOSE_ARGS="gum choose"
for CURRENT_VAR in "$@"; do
CHOOSE_ARGS="$CHOOSE_ARGS \"$CURRENT_VAR\""
done
eval $CHOOSE_ARGS
else
echo "ERROR: gum is not installed!"
fi
}
# @description Display a confirmation prompt that returns an exit code if "No" is selected
# @example RESPONSE="$(.config/log confirm "Are you sure?" "Yeah" "Naa")"
confirm() {
if type gum &> /dev/null; then
GUM_OPTS=""
if [ -n "$2" ]; then
# shellcheck disable=SC089
GUM_OPTS="$GUM_OPTS --affirmative=""'$2'"
fi
if [ -n "$3" ]; then
GUM_OPTS="$GUM_OPTS --negative=""'$3'"
fi
if [ -n "$1" ]; then
if [ -n "$GUM_OPTS" ]; then
gum confirm "$1" "$GUM_OPTS"
else
gum confirm "$1"
fi
else
gum confirm
fi
else
echo "ERROR: gum is not installed!"
fi
}
# @description Logs an error message
# @example .config/log error "Something happened!"
error() {
if [ -z "$NO_LOGGING" ]; then
if [ -n "$ENHANCED_LOGGING" ]; then
logger error "$1"
else
echo -e "\e[1;41m ERROR \e[0m $(format "$1")\e[0;39m"
fi
fi
}
# @description Display a filterable prompt that is populated with options from a text file
# @example echo Strawberry >> flavors.text && echo Banana >> flavors.text && RESPONSE="$(.config/log filter flavors.txt)"
filter() {
if type gum &> /dev/null; then
TMP="$(mktemp)"
gum filter < "$1"
else
echo "ERROR: gum is not installed!"
fi
}
# @description Logs an info message
# @example .config/log info "Here is some information"
info() {
if [ -z "$NO_LOGGING" ]; then
if [ -n "$ENHANCED_LOGGING" ]; then
logger info "$1"
else
echo -e "\e[1;46m INFO \e[0m $(format "$1")\e[0;39m"
fi
fi
}
# @description Displays an input with masked characters
# @example INPUT="$(.config/log input 'Enter the value..')"
input() {
if type gum &> /dev/null; then
if [ -n "$1" ]; then
gum input --placeholder="$1"
else
gum input
fi
else
echo "ERROR: gum is not installed!"
fi
}
# @description Logs a message written in markdown
# @example .config/log md "[styled_link](https://google.com)"
# @example .config/log md mymarkdown/file.md
md() {
if [ ! -f "$1" ]; then
echo "ERROR: A markdown file must be passed in as the parameter" && exit 1
fi
if [ -n "$ENHANCED_LOGGING" ]; then
logger md "$1"
fi
}
# @description Displays an input with masked characters
# @example PASSWORD="$(.config/log password 'Enter the Ansible vault password')"
password() {
if type gum &> /dev/null; then
if [ -n "$1" ]; then
gum input --password --placeholder="$1"
else
gum input --password
fi
else
echo "ERROR: gum is not installed!"
fi
}
# @description Logs a message that describes a prompt
# @example .config/log prompt "Enter text into the following prompt"
prompt() {
if [ -z "$NO_LOGGING" ]; then
if [ -n "$ENHANCED_LOGGING" ]; then
logger prompt "$1"
else
echo -e "\e[1;104m PROMPT \e[0m $(format "$1")\e[0;39m"
fi
fi
}
# @description Display a spinner that stays until a command is completed
# @example .config/log spin "brew install yq" "Installing yq..")"
spin() {
if type gum &> /dev/null; then
if [ -n "$1" ] && [ -n "$2" ]; then
gum spin --title="$2" "$1"
elif [ -n "$1" ]; then
gum spin "$1"
else
gum input
fi
else
echo "ERROR: gum is not installed!"
fi
}
# @description Logs a message that starts with a star emoji
# @example .config/log star "Congratulations"
star() {
if [ -z "$NO_LOGGING" ]; then
if [ -n "$ENHANCED_LOGGING" ]; then
logger star "$1"
else
echo -e "\e[1;104m LINK \e[0m $(format "$1")\e[0;39m"
fi
fi
}
# @description Logs a message at the beginning of a task
# @example .config/log start "Starting the process.."
start() {
if [ -z "$NO_LOGGING" ]; then
if [ -n "$ENHANCED_LOGGING" ]; then
logger start "$1"
else
echo -e "\e[1;46m START \e[0m $(format "$1")\e[0;39m"
fi
fi
}
# @description Logs a success message
# @example .config/log success "Yay!"
success() {
if [ -z "$NO_LOGGING" ]; then
if [ -n "$ENHANCED_LOGGING" ]; then
logger success "$1"
else
echo -e "\e[1;42m SUCCESS \e[0m $(format "$1")\e[0;39m"
fi
fi
}
# @description Logs a warning message
# @example .config/log warn "Just so you know.."
warn() {
if [ -z "$NO_LOGGING" ]; then
if [ -n "$ENHANCED_LOGGING" ]; then
logger warn "$1"
else
echo -e "\e[1;43m WARNING \e[0m $(format "$1")\e[0;39m"
fi
fi
}
# @description Displays a multi-line prompt for text input
# @example .config/log write "Write something..")"
write() {
if type gum &> /dev/null; then
if [ -n "$1" ]; then
gum write --placeholder="$1"
else
gum write
fi
else
echo "ERROR: gum is not installed!"
fi
}
if [ -n "$1" ] && [ -n "$2" ]; then
# Public functions that require at least two parameters to be used
if [ "$1" == 'warn' ] || [ "$1" == 'success' ] || [ "$1" == 'star' ] || [ "$1" == 'info' ] \
|| [ "$1" == 'error' ] || [ "$1" == 'md' ] || [ "$1" == 'write' ] || [ "$1" == 'start' ] \
|| [ "$1" == 'spin' ] || [ "$1" == 'prompt' ] || [ "$1" == 'filter' ] || [ "$1" == 'input' ] \
|| [ "$1" == 'confirm' ] || [ "$1" == 'password' ]; then
"$1" "$2"
elif [[ "$1" == 'choose' ]]; then
"$@"
fi
elif [ -n "$1" ]; then
# Public functions that can run with only one argument passed to .config/log (i.e. `.config/log password`)
if [ "$1" == 'write' ] || [ "$1" == 'password' ] || [ "$1" == 'confirm' ] || [ "$1" == 'input' ]; then
"$1"
fi
fi