diff --git a/README.md b/README.md index d609885..9649e52 100755 --- a/README.md +++ b/README.md @@ -8,17 +8,23 @@ Welcome to the .local-bin repository! Find key components below to enhance your ## Binary Files - **[aactivator.py](scripts/aactivator.py):** A powerful script designed to automate the sourcing of environments in an interactive shell. Activate it effortlessly by evaluating `$(aactivator init)` in your shell. -- **[sessionizer](scripts/sessionizer):** This script simplifies the management of tmux sessions by providing an interactive interface to create or switch between sessions. If a session doesn't exist for a selected directory, it creates a new tmux session with the selected directory as the working directory. -- **[windownizer](scripts/windownizer):** This script is designed to streamline the process of sending commands to a specific tmux window. It takes a branch name (or any identifier) as an argument, creates a new window if it doesn't exist in the current tmux session, and sends the provided command to that window. -- **[update_brew_lists](scripts/update_brew_lists):** This script automates the process of updating Homebrew and associated package lists. It can be used to keep track of installed packages and update them as needed. -- **[setup_dev_environment](scripts/setup_dev_env):** This script automates the setup of a development environment by installing essential tools, configuring common settings, and providing options for customization. It supports the following options: +- **[sessionizer.sh](scripts/sessionizer.sh):** This script simplifies the management of tmux sessions by providing an interactive interface to create or switch between sessions. If a session doesn't exist for a selected directory, it creates a new tmux session with the selected directory as the working directory. +- **[windownizer.sh](scripts/windownizer.sh):** This script is designed to streamline the process of sending commands to a specific tmux window. It takes a branch name (or any identifier) as an argument, creates a new window if it doesn't exist in the current tmux session, and sends the provided command to that window. +- **[update_brew_lists.sh](scripts/update_brew_lists.sh):** This script automates the process of updating Homebrew and associated package lists. It can be used to keep track of installed packages and update them as needed. +- **[setup_dev_env.sh](scripts/setup_dev_env.sh):** This script automates the setup of a development environment by installing essential tools, configuring common settings, and providing options for customization. It supports the following options: - `-a` or `--disable-auto-update`: Disable Homebrew auto-updates. - `-n` or `--disable-notification`: Disable notifications during setup. -- **[docker_check](scripts/docker_check):** This script automates the process of ensuring Docker is installed and running before executing Docker-related commands. If Docker is not installed, it provides an option to install it via Homebrew. -- **[add_yaml_header](scripts/add_yaml_header):** This script ensures that YAML files within a specified directory contain the necessary `---` header. If a YAML file does not have the `---` header, the script adds it. -- **[wzp](scripts/wzp):** This script automates the process of starting a new Wezterm project. It allows you to select a project from a predefined list or specify a project name as an argument. -- **[volumizer](scripts/volumizer):** This script manages volume levels on macOS and Linux systems. It limits the volume to a specified maximum when headphones are connected, protecting users' hearing. It integrates notifications to alert users of volume changes and headphone status seamlessly. -- **[fzf_theme](scripts/fzf_theme):** This script configures the `fzf` color theme based on the system's appearance mode (Light or Dark) for both macOS and Linux systems. It automatically detects the system's appearance or can be overridden with a specified mode, adjusting the `fzf` theme colors accordingly. +- **[docker_check.sh](scripts/docker_check.sh):** This script automates the process of ensuring Docker is installed and running before executing Docker-related commands. If Docker is not installed, it provides an option to install it via Homebrew. +- **[add_yaml_header.sh](scripts/add_yaml_header.sh):** This script ensures that YAML files within a specified directory contain the necessary `---` header. If a YAML file does not have the `---` header, the script adds it. +- **[wzp.sh](scripts/wzp.sh):** This script automates the process of starting a new Wezterm project. It allows you to select a project from a predefined list or specify a project name as an argument. +- **[volumizer.sh](scripts/volumizer.sh):** This script manages volume levels on macOS and Linux systems. It limits the volume to a specified maximum when headphones are connected, protecting users' hearing. It integrates notifications to alert users of volume changes and headphone status seamlessly. +- **[fzf_theme.sh](scripts/fzf_theme.sh):** This script configures the `fzf` color theme based on the system's appearance mode (Light or Dark) for both macOS and Linux systems. It automatically detects the system's appearance or can be overridden with a specified mode, adjusting the `fzf` theme colors accordingly. +- **[bootstrap_setup.sh](scripts/bootstrap_setup.sh):** +- **[check_alias.sh](scripts/check_alias.sh):** +- **[most_recent_note.sh](scripts/most_recent_note.sh):** +- **[buildnote.sh](scripts/buildnote.sh):** +- **[kaggle_manager](scripts/kaggle_manager.sh):** +- **[notetaker.sh](scripts/notetaker.sh):** ## Documentation diff --git a/docs/index.md b/docs/index.md index 4b9c209..c70781b 100755 --- a/docs/index.md +++ b/docs/index.md @@ -20,6 +20,12 @@ Welcome to the documentation for the `.local-bin` repository. This collection is - [docker_check](docker_check/Usage.md): This script automates the process of ensuring Docker is installed and running before executing Docker-related commands. If Docker is not installed, it provides an option to install it via Homebrew. - [add_yaml_header](add_yaml_header/Usage.md): This script ensures that YAML files within a specified directory contain the necessary `---` header. If a YAML file does not have the `---` header, the script adds it. - [wzp](wzp/Usage.md): This script automates the process of starting a new Wezterm project. It allows you to select a project from a predefined list or specify a project name as an argument. +- **[bootstrap_setup.sh](scripts/bootstrap_setup.sh):** +- **[check_alias.sh](scripts/check_alias.sh):** +- **[most_recent_note.sh](scripts/most_recent_note.sh):** +- **[buildnote.sh](scripts/buildnote.sh):** +- **[kaggle_manager](scripts/kaggle_manager.sh):** +- **[notetaker.sh](scripts/notetaker.sh):** Feel free to use these scripts to simplify tasks and enhance your development workflow. diff --git a/scripts/aactivator.py b/scripts/aactivator.py index 6360042..9b6a5ed 100755 --- a/scripts/aactivator.py +++ b/scripts/aactivator.py @@ -23,6 +23,7 @@ remember your answer. You can later adjust your per-project preferences in the see also: https://github.com/Yelp/aactivator """ + from __future__ import absolute_import, print_function, unicode_literals import io @@ -55,9 +56,7 @@ else if ! ( echo "$PROMPT_COMMAND" | grep -Fq '{cmd}' ); then PROMPT_COMMAND='{cmd}; '"$PROMPT_COMMAND" fi -fi""".format( - version=__version__, arg0=arg0, cmd=cmd, varname=ENVIRONMENT_VARIABLE - ) +fi""".format(version=__version__, arg0=arg0, cmd=cmd, varname=ENVIRONMENT_VARIABLE) def get_filesystem_id(path): @@ -195,7 +194,7 @@ class ActivateConfig(object): if response.startswith("N"): self.disallowed.append(path) print( - "aactivator will remember this: " "~/.cache/aactivator/disallowed", + "aactivator will remember this: ~/.cache/aactivator/disallowed", file=sys.stderr, ) return False @@ -207,7 +206,7 @@ class ActivateConfig(object): elif response.startswith("y"): self.allowed.append(path) print( - "aactivator will remember this: " "~/.cache/aactivator/allowed", + "aactivator will remember this: ~/.cache/aactivator/allowed", file=sys.stderr, ) return True diff --git a/scripts/bootstrap_setup.sh b/scripts/bootstrap_setup.sh new file mode 100755 index 0000000..62983df --- /dev/null +++ b/scripts/bootstrap_setup.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +set -e + +GH_USERNAME="jfrays" + +# Dry run mode +DRY_RUN=false +if [[ "$1" == "--dry-run" ]]; then + DRY_RUN=true + echo "🧪 Dry run mode enabled: commands will be echoed but not executed." +fi + +run() { + echo "+ $*" + if [[ "$DRY_RUN" == false ]]; then + "$@" + fi +} + +run_shell() { + echo "+ $*" + if [[ "$DRY_RUN" == false ]]; then + bash -c "$*" + fi +} + +# Install package manager tools +if [[ "$OSTYPE" == "linux-gnu"* ]]; then + run sudo apt update + run sudo apt install -y git stow curl + +elif [[ "$OSTYPE" == "darwin"* ]]; then + run xcode-select --install + run_shell "/bin/bash -c '$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)'" + run brew install stow git curl +fi + +# Clone dotfiles +run git clone "https://github.com/$GH_USERNAME/dotfiles.git" "$HOME/.dotfiles" +run bash -c "cd \"$HOME/.dotfiles\" && ./setup.sh" + +# Setup dev scripts +run mkdir -p "$HOME/.local/bin/scripts" +run git clone "https://github.com/$GH_USERNAME/scripts.git" "$HOME/.local/bin/scripts" +run bash -c "cd \"$HOME/.local/bin/scripts\" && chmod +x setup_dev_env.sh && ./setup_dev_env.sh" diff --git a/scripts/check_aliases.sh b/scripts/check_aliases.sh index cb0a4ac..e87ee68 100755 --- a/scripts/check_aliases.sh +++ b/scripts/check_aliases.sh @@ -1,32 +1,41 @@ #!/usr/bin/env bash -# Check if nvim is installed +# Safer aliases that depend on tools being available + +# Use Neovim if available if command -v nvim >/dev/null; then - alias v="nvim" + alias v="nvim" fi -# Check if eza is installed +# Enhanced ls with eza if command -v eza >/dev/null; then - alias ls='eza --group-directories-first --color=auto' - alias la='eza -la --group-directories-first --color=auto' - alias ll='eza -l --group-directories-first --color=auto' - alias lt='eza -lt modified --sort newest' - alias lS='eza -lS --group-directories-first --color=auto' - alias tree='eza --tree --level=3' - alias lg='eza --git' + alias ls='eza --group-directories-first --color=auto' + alias la='eza -a --group-directories-first --color=auto' + alias ll='eza -lh --group-directories-first --color=auto' + alias lla='eza -la --group-directories-first --color=auto' + alias l='eza --classify' + alias lt='eza -lt modified --sort newest' + alias lS='eza -lS --group-directories-first --color=auto' + alias tree='eza --tree --level=3' + alias lg='eza --git' fi -# Check if bat is installed +# Bat for pretty `cat` and help if command -v bat >/dev/null; then - alias cat="bat --paging=never" + # Define a function instead of aliasing inside same unit + cat() { + command bat --paging=never "$@" + } - help() { - "$@" --help 2>&1 | bathelp - } - alias bathelp="bat --plain --language=help" + bathelp() { + bat --plain --language=help + } - # Overwriting -h and --help with bat highlights - alias -g :h='-h 2>&1 | bat --language=help --style=plain' - alias -g :help='--help 2>&1 | bat --language=help --style=plain' + help() { + "$@" --help 2>&1 | bathelp + } + + # Global aliases for help text + alias -g :h='-h 2>&1 | bat --language=help --style=plain' + alias -g :help='--help 2>&1 | bat --language=help --style=plain' fi - diff --git a/scripts/setup_dev_env.sh b/scripts/setup_dev_env.sh index 0fd5970..3f16627 100755 --- a/scripts/setup_dev_env.sh +++ b/scripts/setup_dev_env.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash DOTFILES_REPO="git@github.com:jfraeys/dotfiles.git" -DOTFILES_DIR="$HOME/.dotfiles" +DOTFILES_DIR="${XDG_HOME:-$HOME}/dotfiles" # Function to check if a command is available command_exists() { @@ -164,7 +164,6 @@ setup_macos_dock() { defaults write com.apple.dock largesize -int 64 defaults write com.apple.dock orientation -string "left" defaults write com.apple.dock mineffect -string "scale" - default } # Function to install and configure zsh diff --git a/scripts/setup_mactex_poppler.sh b/scripts/setup_mactex_poppler.sh new file mode 100755 index 0000000..dd5a360 --- /dev/null +++ b/scripts/setup_mactex_poppler.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +set -e + +echo "==> Setting up MacTeX and Poppler..." +echo "==> Checking for Homebrew..." +if ! command -v brew &>/dev/null; then + echo "Homebrew not found. Install it from https://brew.sh/" + exit 1 +fi + +brew update +brew install --cask mactex-no-gui +brew install poppler + +TEX_BIN="/Library/TeX/texbin" +if [[ ":$PATH:" != *":$TEX_BIN:"* ]]; then + echo "export PATH='/Library/TeX/texbin:$PATH'" >>~/.zprofile + export PATH="/Library/TeX/texbin:$PATH" +fi + +echo -n "pdflatex: " +pdflatex --version | head -n1 +echo -n "xelatex: " +xelatex --version | head -n1 +echo -n "latexmk: " +latexmk -v | head -n1 +echo -n "pdfinfo: " +pdfinfo -v | head -n1 + +echo "✅ Done." diff --git a/scripts/update_border_theme.sh b/scripts/update_border_theme.sh new file mode 100755 index 0000000..069f2b7 --- /dev/null +++ b/scripts/update_border_theme.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +set -euo pipefail + +CONFIG_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/aerospace/aerospace.toml" + +if [[ ! -f "$CONFIG_FILE" ]]; then + echo "Error: Aerospace config not found at $CONFIG_FILE" >&2 + exit 1 +fi + +detect_appearance() { + defaults read -g AppleInterfaceStyle 2>/dev/null | grep -qi "Dark" && echo "dark" || echo "light" +} + +# Allow override +if [[ $# -eq 1 ]]; then + mode="$1" +else + mode="$(detect_appearance)" +fi + +# Set target border config per mode +if [[ "$mode" == "dark" ]]; then + new_border_line='borders active_color=0xffe6e8eb inactive_color=0xff3a3f4b width=5.0' +elif [[ "$mode" == "light" ]]; then + new_border_line='borders active_color=0xff002b36 inactive_color=0xff93a1a1 width=5.0' +else + echo "Invalid mode: $mode" >&2 + exit 1 +fi + +# Use sd if available, fallback to sed +if command -v sd >/dev/null 2>&1; then + sd '^borders .*' "$new_border_line" "$CONFIG_FILE" +else + SED_OPTS=() + [[ "$OSTYPE" == "darwin"* ]] && SED_OPTS=(-i '') + sed "${SED_OPTS[@]}" "s/^borders .*/$new_border_line/" "$CONFIG_FILE" +fi + +eval "${new_border_line}" diff --git a/scripts/update_starship_theme.sh b/scripts/update_starship_theme.sh new file mode 100755 index 0000000..7c30321 --- /dev/null +++ b/scripts/update_starship_theme.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +set -euo pipefail + +CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}" +STARSHIP_CONFIG=$(realpath "$CONFIG_DIR/starship.toml") + +if [[ ! -f "$STARSHIP_CONFIG" ]]; then + echo "Error: starship.toml not found at $STARSHIP_CONFIG" >&2 + exit 1 +fi + +detect_appearance() { + if [[ "$OSTYPE" == "darwin"* ]]; then + defaults read -g AppleInterfaceStyle 2>/dev/null | grep -qi "Dark" && echo "dark" || echo "light" + elif command -v gsettings >/dev/null 2>&1; then + gsettings get org.gnome.desktop.interface color-scheme 2>/dev/null | grep -qi 'dark' && echo "dark" || echo "light" + else + echo "dark" + fi +} + +# Determine target palette +if [[ $# -eq 1 ]]; then + target_palette="$1" +else + case "$(detect_appearance)" in + dark) target_palette="monokai_pro" ;; + light) target_palette="solarized_light" ;; + esac +fi + +# Extract current palette from config +current_palette=$(awk -F'=' '/^palette/ {gsub(/[[:space:]"]/, "", $2); print $2}' "$STARSHIP_CONFIG") + +# Compare and update if necessary +if [[ "$current_palette" == "$target_palette" ]]; then + echo "Starship palette already set to '$target_palette'. No changes made." + exit 0 +fi + +# Update +if command -v sd >/dev/null 2>&1; then + sd 'palette\s*=.*' "palette = \"$target_palette\"" "$STARSHIP_CONFIG" +else + SED_OPTS=() + [[ "$OSTYPE" == "darwin"* ]] && SED_OPTS=(-i '') + sed "${SED_OPTS[@]}" "s/palette *=.*/palette = \"$target_palette\"/" "$STARSHIP_CONFIG" +fi + +echo "Updated Starship palette to '$target_palette' in $STARSHIP_CONFIG"