diff --git a/ublue/bling/src/bling.fish b/ublue/bling/src/bling.fish new file mode 100644 index 0000000..839cb84 --- /dev/null +++ b/ublue/bling/src/bling.fish @@ -0,0 +1,26 @@ +#!/usr/bin/env fish + +# FIXME: add no-source-twice fix + +# ls aliases +if [ "$(command -v eza)" ] + alias ll='eza -l --icons=auto --group-directories-first' + alias l.='eza -d .*' + alias ls='eza' + alias l1='eza -1' +end + +# ugrep for grep +if [ "$(command -v ug)" ] + alias grep='ug' + alias egrep='ug -E' + alias fgrep='ug -F' + alias xzgrep='ug -z' + alias xzegrep='ug -zE' + alias xzfgrep='ug -zF' +end + +if status is-interactive + [ "$(command -v atuin)" ] && eval "$(atuin init fish)" + [ "$(command -v zoxide)" ] && eval "$(zoxide init fish)" +end diff --git a/ublue/bling/src/bling.sh b/ublue/bling/src/bling.sh new file mode 100755 index 0000000..e97d8b7 --- /dev/null +++ b/ublue/bling/src/bling.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env sh + +# Check if bling has already been sourced so that we dont break atuin. https://github.com/atuinsh/atuin/issues/380#issuecomment-1594014644 +[ "${BLING_SOURCED:-0}" -eq 1 ] && return +BLING_SOURCED=1 + +# ls aliases +if [ "$(command -v eza)" ]; then + alias ll='eza -l --icons=auto --group-directories-first' + alias l.='eza -d .*' + alias ls='eza' + alias l1='eza -1' +fi + +# ugrep for grep +if [ "$(command -v ug)" ]; then + alias grep='ug' + alias egrep='ug -E' + alias fgrep='ug -F' + alias xzgrep='ug -z' + alias xzegrep='ug -zE' + alias xzfgrep='ug -zF' +fi + +HOMEBREW_PREFIX="${HOMEBREW_PREFIX:-/home/linuxbrew/.linuxbrew}" + +if [ "$(basename "$SHELL")" = "bash" ]; then + #shellcheck disable=SC1091 + [ -f "${HOMEBREW_PREFIX}"/etc/profile.d/bash-preexec.sh ] && . "${HOMEBREW_PREFIX}"/etc/profile.d/bash-preexec.sh + [ "$(command -v atuin)" ] && eval "$(atuin init bash)" + [ "$(command -v zoxide)" ] && eval "$(zoxide init bash)" +elif [ "$(basename "$SHELL")" = "zsh" ]; then + [ "$(command -v atuin)" ] && eval "$(atuin init zsh)" + [ "$(command -v zoxide)" ] && eval "$(zoxide init zsh)" +fi diff --git a/ublue/bling/src/ublue-bling b/ublue/bling/src/ublue-bling new file mode 100755 index 0000000..ad90a13 --- /dev/null +++ b/ublue/bling/src/ublue-bling @@ -0,0 +1,208 @@ +#!/usr/bin/env bash + +set -eou pipefail + +# coloring / ugum chooser +source /usr/lib/ujust/ujust.sh + +get_config() { + MOTD_CONFIG_FILE="${MOTD_CONFIG_FILE:-/etc/ublue-os/bling.json}" + QUERY="$1" + FALLBACK="$2" + shift + shift + OUTPUT="$(jq -r "$QUERY" "$MOTD_CONFIG_FILE" 2>/dev/null || echo "$FALLBACK")" + if [ "$OUTPUT" == "null" ] ; then + echo "$FALLBACK" + return + fi + echo "$OUTPUT" +} + + +# Exit Handling +function Exiting() { + printf "%s%sExiting...%s\n" "${red}" "${bold}" "${normal}" + printf "Rerun script with %s%sujust $BLING_CLI_NAME%s\n" "${blue}" "${bold}" "${normal}" + exit 0 +} + +# Trap function +function ctrl_c() { + printf "\n%s\n" "Signal SIGINT caught" + Exiting +} + +# Brew Bundle Install +function brew-bundle() { + echo 'Installing bling from Homebrew 🍻🍻🍻' + brew bundle --file "$BLING_BREW_BUNDLE_PATH" --no-lock +} + +# Check if bling is already sourced +# 0 for yes +# 1 for no +function is-bling-installed() { + shell="$1" + shift + + line="" + BLING_SCRIPT_SOURCE="bling.sh" + TARGET_CONFIG_FILE="${HOME}/.bashrc" + case "${shell}" in + "fish") + BLING_SCRIPT_SOURCE="bling.fish" + TARGET_CONFIG_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/fish/config.fish" + ;; + "zsh") + BLING_SCRIPT_SOURCE="bling.sh" + TARGET_CONFIG_FILE="${ZDOTDIR:-$HOME}/.zshrc" + ;; + "bash") + BLING_SCRIPT_SOURCE="bling.sh" + TARGET_CONFIG_FILE="${HOME}/.bashrc" + ;; + *) + echo 'Unknown shell. You are on your own.' + exit 1 + ;; + esac + # Prevents grep erroring out when theres no config file for the shell + touch "$TARGET_CONFIG_FILE" + line="$(grep -n "source $BLING_CLI_DIRECTORY/$BLING_SCRIPT_SOURCE" "$TARGET_CONFIG_FILE")" + line="$(grep -Eo '^[^:]+' <<< "$line")" + + if [[ -n "${line}" ]]; then + return 0 + fi + return 1 +} + +# Add Bling +function add-bling() { + shell="$1" + shift + brew-bundle || Exiting + + echo 'Setting up your Shell 🐚🐚🐚' + case "${shell}" in + "fish") + echo 'Adding bling to your config.fish 🐟🐟🐟' + cat<> "${XDG_CONFIG_HOME:-$HOME/.config}/fish/config.fish" +### bling.fish source start +test -f $BLING_CLI_DIRECTORY/bling.fish && source $BLING_CLI_DIRECTORY/bling.fish +### bling.fish source end +EOF + ;; + "zsh") + echo 'Adding bling to your .zshrc 💤💤💤' + cat<> "${ZDOTDIR:-$HOME}/.zshrc" +### bling.sh source start +test -f $BLING_CLI_DIRECTORY/bling.sh && source $BLING_CLI_DIRECTORY/bling.sh +### bling.sh source end +EOF + ;; + "bash") + echo 'Adding bling to your .bashrc 💥💥💥' + cat<> "${HOME}/.bashrc" +### bling.sh source start +test -f $BLING_CLI_DIRECTORY/bling.sh && source $BLING_CLI_DIRECTORY/bling.sh +### bling.sh source end +EOF + ;; + *) + echo 'Unknown shell. You are on your own.' + exit 1 + ;; + esac +} + +# Remove bling, handle if old method +function remove-bling() { + shell="$1" + shift + + case "${shell}" in + "fish") + sed -i '/### bling.fish source start/,/### bling.fish source end/d' \ + "${XDG_CONFIG_HOME:-$HOME/.config}/fish/config.fish" \ + || \ + line=$(grep -n "source $BLING_CLI_DIRECTORY/bling.fish" \ + "${XDG_CONFIG_HOME:-$HOME/.config}/fish/config.fish" \ + | grep -Eo '^[^:]+') \ + && \ + sed -i "${line}"d "${XDG_CONFIG_HOME:-$HOME/.config}/fish/config.fish" + ;; + "zsh") + sed -i '/### bling.sh source start/,/### bling.sh source end/d' \ + "${ZDOTDIR:-$HOME}/.zshrc" \ + || \ + line=$(grep -n "source $BLING_CLI_DIRECTORY/bling.sh" \ + "${ZDOTDIR:-$HOME}/.zshrc" \ + | grep -Eo '^[^:]+') && sed -i "${line}"d \ + "${ZDOTDIR:-$HOME}/.zshrc" + ;; + "bash") + sed -i '/### bling.sh source start/,/### bling.sh source end/d' \ + "${HOME}/.bashrc" \ + || \ + line=$(grep -n "source $BLING_CLI_DIRECTORY/bling.sh" \ + "${HOME}/.bashrc" \ + | grep -Eo '^[^:]+') && sed -i "${line}"d \ + "${HOME}/.bashrc" + ;; + esac +} + +function main() { + # Get Shell + shell=$(basename "$SHELL") + reentry="$1" + clear + if [[ -n "${reentry:-}" ]]; then + printf "%s%s%s\n\n" "${bold}" "$reentry" "$normal" + fi + + # Check if bling is enabled and display + printf "Shell:\t%s%s%s%s\n" "${green}" "${bold}" "${shell}" "${normal}" + if is-bling-installed "${shell}"; then + printf "Bling:\t%s%sEnabled%s\n" "${green}" "${bold}" "${normal}" + else + printf "Bling:\t%s%sDisabled%s\n" "${red}" "${bold}" "${normal}" + fi + + # ugum enable/disable + CHOICE=$(Choose enable disable cancel) + + # Enable/Disable. Recurse if bad option. + case "${CHOICE,,}" in + "enable") + if is-bling-installed "${shell}"; then + main "Bling is already configured ..." + fi + trap ctrl_c SIGINT + add-bling "${shell}" + printf "%s%sInstallation Complete%s ... please close and reopen your terminal!" "${green}" "${bold}" "${normal}" + exit 0 + ;; + "disable") + if ! is-bling-installed "${shell}"; then + main "Bling is not yet configured ..." + fi + trap ctrl_c SIGINT + remove-bling "${shell}" + printf "%s%sBling Removed%s ... please close and reopen your terminal\n" "${red}" "${bold}" "${normal}" + exit 0 + ;; + *) + Exiting + ;; + esac +} + +BLING_CLI_NAME="$(get_config '."bling-cli-name"' "bluefin-cli")" +BLING_CLI_DIRECTORY="$(get_config '."bling-cli-path"' "/usr/share/ublue-os/bling")" +BLING_BREW_BUNDLE_PATH="$(get_config '."bling-brew-bundle-path"' "/usr/share/ublue-os/homebrew/$BLING_CLI_NAME.Brewfile")" + +# Entrypoint +main "" diff --git a/ublue/bling/ublue-bling.spec b/ublue/bling/ublue-bling.spec new file mode 100644 index 0000000..083537c --- /dev/null +++ b/ublue/bling/ublue-bling.spec @@ -0,0 +1,34 @@ +%global debug_package %{nil} + +Name: ublue-bling +Version: 0.1.0 +Release: 1%{?dist} +Summary: Universal Blue Bling CLI setup scripts + +License: Apache-2.0 +URL: https://github.com/ublue-os/packages +VCS: {{{ git_dir_vcs }}} +Source: {{{ git_dir_pack }}} + +# Requires: ublue-os-just but we cant add it here because it is sourced from ublue-os/config now. +# It would be interesting to move it here but we need some discussion +Requires: gum + +%description +Universal Blue Bling CLI setup scripts + +%prep +{{{ git_dir_setup_macro }}} + +%install +install -Dm0755 ./src/%{name} %{buildroot}%{_libexecdir}/ublue-motd +# Intented to either be symlinked into the correct directories or be used directly +install -Dm0755 ./src/bling.sh %{buildroot}%{_datadir}/ublue-os/bling/bling.sh +install -Dm0755 ./src/bling.fish %{buildroot}%{_datadir}/ublue-os/bling/bling.fish + +%files +%{_libexecdir}/ublue-motd +%{_datadir}/ublue-os/bling/bling.*sh + +%changelog +%autochangelog