changes to scripts

This commit is contained in:
Jeremie Fraeys 2024-12-18 22:28:04 -05:00
parent e5bf66dc8a
commit b9a3eef410
11 changed files with 281 additions and 177 deletions

View file

130
.brew_lists/brew_list.txt.new Executable file → Normal file
View file

@ -1,130 +0,0 @@
autoconf
bat
bats-core
bfg
brotli
c-ares
ca-certificates
cairo
coreutils
curl
ddgr
docker
docker-completion
dog
eza
fd
fontconfig
freetype
fzf
gcc
gettext
gh
giflib
git
gitleaks
glib
gmp
go
gpatch
graphite2
harfbuzz
hyperfine
ical-buddy
icu4c
isl
jpeg-turbo
jq
julia
krb5
libevent
libgit2
libidn2
liblinear
libmpc
libnghttp2
libpng
libssh2
libtiff
libunistring
libuv
libvterm
libx11
libxau
libxcb
libxdmcp
libxext
libxrender
little-cms2
lpeg
lua
luajit
luarocks
luv
lz4
lzo
m4
marp-cli
mbedtls@2
mpdecimal
mpfr
msgpack
ncurses
neovim
nmap
node
oniguruma
opam
openblas
openjdk
openldap
openlibm
openssl@3
p7zip
pcre
pcre2
pixman
pkg-config
postgresql@14
pyenv
python@3.11
python@3.12
readline
ripgrep
rtmpdump
sk
skhd
sqlite
starship
stow
tmux
tree
tree-sitter
unibilium
utf8proc
uv
xorgproto
xz
yabai
zoxide
zsh
zstd
base
docker
drawio
firefox
font-symbols-only-nerd-font
google-drive
hiddenbar
insomnia
logi-options-plus
maccy
miniforge
mos
pycharm
raycast
spotify
vscodium
wezterm
zoom
zotero

View file

19
.brew_lists/cask_list.txt.new Executable file → Normal file
View file

@ -1,19 +0,0 @@
base
docker
drawio
firefox
font-symbols-only-nerd-font
google-drive
hiddenbar
insomnia
logi-options-plus
maccy
miniforge
mos
pycharm
raycast
spotify
vscodium
wezterm
zoom
zotero

3
.gitignore vendored
View file

@ -1,3 +1,6 @@
*.log *.log
__pycache__* __pycache__*
pip*
poertry

1
poetry Symbolic link
View file

@ -0,0 +1 @@
/Users/jfraeys/Library/Application Support/pypoetry/venv/bin/poetry

View file

@ -56,4 +56,3 @@ fi
# Run the provided command # Run the provided command
"$@" "$@"

View file

@ -17,18 +17,19 @@ set_fzf_theme() {
fi fi
fi fi
# Set fzf theme based on appearance # Set FZF theme based on appearance
if [[ $appearance == *"Dark"* || -n "$TMUX" ]]; then if [[ $appearance == *"Dark"* || -n "$TMUX" ]]; then
FZF_DEFAULT_OPTS="--color=bg+:#272822,bg:#272822,spinner:#f92672,hl:#66d9ee,fg:#f8f8f2,header:#f92672,info:#66d9ee,pointer:#a6e22e,marker:#a6e22e,fg+:#f8f8f2,prompt:#66d9ee,hl+:#66d9ee" # Monokai (Dark Theme) with slight adjustments
FZF_DEFAULT_OPTS="--color=bg+:#272822,bg:#272822,spinner:#ff669d,hl:#66d9ee,fg:#f8f8f2,header:#ff669d,info:#66d9ee,pointer:#a6e22e,marker:#a6e22e,fg+:#e8e8e3,prompt:#66d9ee,hl+:#66d9ee"
else else
FZF_DEFAULT_OPTS="--color=bg+:#fdf6e3,bg:#fdf6e3,spinner:#d33682,hl:#b58900,fg:#657b83,header:#d33682,info:#268bd2,pointer:#859900,marker:#859900,fg+:#657b83,prompt:#268bd2,hl+:#b58900" # Solarized Light with better contrast for readability
FZF_DEFAULT_OPTS="--color=bg+:#fdf6e3,bg:#fdf6e3,spinner:#d33682,hl:#cb4b16,fg:#586e75,header:#d33682,info:#268bd2,pointer:#859900,marker:#859900,fg+:#073642,prompt:#268bd2,hl+:#cb4b16"
fi fi
# export FZF_DEFAULT_OPTS
echo "$FZF_DEFAULT_OPTS" echo "$FZF_DEFAULT_OPTS"
} }
# Call the function to set FZF_DEFAULT_OPTS # Call the function if executed directly
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
set_fzf_theme "$1" set_fzf_theme "$1"
fi

171
scripts/kaggle_manager Executable file
View file

@ -0,0 +1,171 @@
#!/bin/bash
# Default settings
DATASET_DIR="data/raw" # Directory to store downloaded datasets
NOTEBOOK_DIR="notebooks" # Directory to store downloaded notebooks
COMMIT_MESSAGE="Added dataset or notebook" # Default commit message
VERBOSE=0 # Default verbosity flag
# Usage function
usage() {
echo "Usage: $0 [options]"
echo " -d, --dataset Kaggle dataset name (e.g., 'username/dataset-name') to download"
echo " -n, --notebook Kaggle notebook URL suffix (e.g., 'username/notebook-name') to download"
echo " -s, --submit Notebook file to submit to a competition"
echo " -c, --competition Competition name for notebook submission"
echo " -g, --git Flag to add and commit changes to Git after download or submission"
echo " -v, --verbose Enable verbose output"
echo " -h, --help Display this help message"
exit 1
}
# Parse command-line arguments
COMMIT_FLAG=0
DATASET_NAME=""
NOTEBOOK_NAME=""
NOTEBOOK_FILE=""
COMPETITION_NAME=""
while [[ "$#" -gt 0 ]]; do
case $1 in
-d | --dataset)
DATASET_NAME="$2"
shift
;;
-n | --notebook)
NOTEBOOK_NAME="$2"
shift
;;
-s | --submit)
NOTEBOOK_FILE="$2"
shift
;;
-c | --competition)
COMPETITION_NAME="$2"
shift
;;
-g | --git) COMMIT_FLAG=1 ;;
-v | --verbose) VERBOSE=1 ;;
-h | --help) usage ;; # Call usage function for help
*) usage ;;
esac
shift
done
# Extract Kaggle credentials from kaggle.json
if ! KAGGLE_USERNAME=$(jq -r .username ~/.kaggle/kaggle.json) || ! KAGGLE_KEY=$(jq -r .key ~/.kaggle/kaggle.json); then
echo "Failed to retrieve Kaggle credentials from kaggle.json."
exit 1
fi
# Check if credentials were successfully extracted
if [[ -z "$KAGGLE_USERNAME" || -z "$KAGGLE_KEY" ]]; then
echo "Kaggle credentials are empty. Please check your kaggle.json file."
exit 1
fi
# Function to echo messages if verbosity is enabled
verbose_echo() {
if [[ $VERBOSE -eq 1 ]]; then
echo "$1"
fi
}
# Download dataset
if [[ -n "$DATASET_NAME" ]]; then
# Create the dataset directory if it doesn't exist
mkdir -p "$DATASET_DIR"
# Download the dataset using curl
verbose_echo "Downloading dataset: $DATASET_NAME to $DATASET_DIR"
if ! curl -L -o "${DATASET_DIR}/dataset.zip" \
-u "$KAGGLE_USERNAME:$KAGGLE_KEY" \
"https://www.kaggle.com/api/v1/datasets/download/$DATASET_NAME"; then
echo "Failed to download dataset: $DATASET_NAME"
exit 1
fi
# Unzip the dataset and remove the zip file
verbose_echo "Unzipping dataset..."
if ! unzip -o "${DATASET_DIR}/dataset.zip" -d "$DATASET_DIR"; then
echo "Failed to unzip dataset."
exit 1
fi
rm "${DATASET_DIR}/dataset.zip"
# Git add and commit if the flag is set
if [[ $COMMIT_FLAG -eq 1 ]]; then
if ! git add "$DATASET_DIR"; then
echo "Failed to add dataset to Git."
exit 1
fi
if ! git commit -m "$COMMIT_MESSAGE: Dataset $DATASET_NAME"; then
echo "Failed to commit dataset to Git."
exit 1
fi
verbose_echo "Committed dataset $DATASET_NAME to Git."
fi
fi
# Download notebook
if [[ -n "$NOTEBOOK_NAME" ]]; then
# Create the notebook directory if it doesn't exist
mkdir -p "$NOTEBOOK_DIR"
# Download the notebook using curl
verbose_echo "Downloading notebook: $NOTEBOOK_NAME to $NOTEBOOK_DIR"
if ! curl -L -o "${NOTEBOOK_DIR}/${NOTEBOOK_NAME##*/}.ipynb" \
-u "$KAGGLE_USERNAME:$KAGGLE_KEY" \
"https://www.kaggle.com/api/v1/kernels/source/$NOTEBOOK_NAME"; then
echo "Failed to download notebook: $NOTEBOOK_NAME"
exit 1
fi
# Git add and commit if the flag is set
if [[ $COMMIT_FLAG -eq 1 ]]; then
if ! git add "$NOTEBOOK_DIR"; then
echo "Failed to add notebook to Git."
exit 1
fi
if ! git commit -m "$COMMIT_MESSAGE: Notebook $NOTEBOOK_NAME"; then
echo "Failed to commit notebook to Git."
exit 1
fi
verbose_echo "Committed notebook $NOTEBOOK_NAME to Git."
fi
fi
# Submit a notebook to a Kaggle competition
if [[ -n "$NOTEBOOK_FILE" && -n "$COMPETITION_NAME" ]]; then
verbose_echo "Submitting notebook: $NOTEBOOK_FILE to competition $COMPETITION_NAME"
# Submit the notebook
if ! curl -L -X POST \
-F "file=@${NOTEBOOK_FILE}" \
-u "$KAGGLE_USERNAME:$KAGGLE_KEY" \
"https://www.kaggle.com/api/v1/competitions/submissions/upload/$COMPETITION_NAME"; then
echo "Notebook submission failed."
exit 1
else
echo "Notebook submitted successfully!"
# Git add and commit if the flag is set
if [[ $COMMIT_FLAG -eq 1 ]]; then
if ! git add "$NOTEBOOK_FILE"; then
echo "Failed to add submitted notebook to Git."
exit 1
fi
if ! git commit -m "$COMMIT_MESSAGE: Submitted notebook $NOTEBOOK_FILE to $COMPETITION_NAME"; then
echo "Failed to commit submitted notebook to Git."
exit 1
fi
verbose_echo "Committed submitted notebook $NOTEBOOK_FILE to Git."
fi
fi
fi
# If no operation was specified
if [[ -z "$DATASET_NAME" && -z "$NOTEBOOK_NAME" && -z "$NOTEBOOK_FILE" ]]; then
echo "No operation specified. Please provide a dataset, notebook, or submission to process."
usage
fi

View file

@ -69,20 +69,22 @@ handle_terminal() {
local selected="$1" local selected="$1"
local selected_name local selected_name
if pgrep -x tmux >/dev/null && [[ -n "$TMUX" ]]; then
selected_name=$(basename "$selected" | tr '.' '_') selected_name=$(basename "$selected" | tr '.' '_')
local full_path="${selected/#\~/$HOME}"
if pgrep -x tmux >/dev/null && [[ -n "$TMUX" ]]; then
if ! tmux has-session -t="$selected_name" 2>/dev/null; then if ! tmux has-session -t="$selected_name" 2>/dev/null; then
tmux new-session -ds "$selected_name" -c "$selected" tmux new-session -ds "$selected_name" -c "$selected"
fi fi
tmux switch-client -t "$selected_name" tmux switch-client -t "$selected_name"
elif command -v wezterm >/dev/null && wezterm --version | grep -q "wezterm"; then elif command -v wezterm >/dev/null && wezterm --version | grep -q "wezterm"; then
local tab_id local workspace_exists
tab_id=$(wezterm cli list | awk -v selected="$selected" 'match($0, "file://.*" selected) {print $2; exit}') workspace_exists=$(wezterm cli list-workspaces | grep -w "$selected_name")
if [[ -z $tab_id ]]; then
wezterm cli spawn --cwd "$selected" if [[ -z $workspace_exists ]]; then
else wezterm cli create-workspace --name "$selected_name" --cwd "$full_path" # Create a new workspace
wezterm cli activate-tab --tab-id "$tab_id"
fi fi
wezterm cli switch-to-workspace --name "$selected_name"
else else
echo "Warning: No terminal multiplexer detected (tmux or WezTerm)." >&2 echo "Warning: No terminal multiplexer detected (tmux or WezTerm)." >&2
exit 1 exit 1

View file

@ -133,7 +133,7 @@ set_package_manager() {
exit 1 exit 1
fi fi
else else
echo "Unsupported operating system. Exiting." echo "Unsupported operating system $(uname). Exiting."
exit 1 exit 1
fi fi
} }
@ -141,23 +141,36 @@ set_package_manager() {
# Function to handle auto-updates for Homebrew # Function to handle auto-updates for Homebrew
handle_auto_update() { handle_auto_update() {
if [ "$ENABLE_AUTO_UPDATE" == true ] && [ "$PACKAGE_MANAGER" == "brew" ]; then if [ "$ENABLE_AUTO_UPDATE" == true ] && [ "$PACKAGE_MANAGER" == "brew" ]; then
if command_exists brew; then
brew autoupdate --start --upgrade --cleanup brew autoupdate --start --upgrade --cleanup
fi fi
fi
} }
# Function to install and configure zsh # Function to install and configure zsh
install_and_configure_shell() { install_and_configure_shell() {
if ! command_exists zsh; then if ! command_exists zsh; then
install_dependencies "$PACKAGE_MANAGER" zsh install_dependencies "$PACKAGE_MANAGER" zsh
if [ ! -d "$HOME/.oh-my-zsh" ]; then # Replaced by zinit in .zshrc
git clone https://github.com/ohmyzsh/ohmyzsh.git "$HOME/.oh-my-zsh" # if [ ! -d "$HOME/.oh-my-zsh" ]; then
fi # git clone https://github.com/ohmyzsh/ohmyzsh.git "$HOME/.oh-my-zsh"
# fi
if [ "$SHELL" != "$(command -v zsh)" ]; then
chsh -s "$(command -v zsh)" chsh -s "$(command -v zsh)"
fi fi
exec zsh -l
fi
} }
# Function to install essential tools # Function to install essential tools
install_essential_tools() { install_essential_tools() {
if ! command_exists curl; then
install_dependencies "$PACKAGE_MANAGER" curl
fi
if ! command_exists unzip; then
install_dependencies "$PACKAGE_MANAGER" unzip
fi
if ! command_exists git; then if ! command_exists git; then
install_dependencies "$PACKAGE_MANAGER" git fd ripgrep fzf tree install_dependencies "$PACKAGE_MANAGER" git fd ripgrep fzf tree
fi fi
@ -166,18 +179,80 @@ install_essential_tools() {
fi fi
} }
# Function to install programming languages # Function to install Go
install_programming_languages() { install_go() {
case $PACKAGE_MANAGER in case $PACKAGE_MANAGER in
"brew") install_dependencies "$PACKAGE_MANAGER" go python ;; "brew") install_dependencies "$PACKAGE_MANAGER" go ;;
"apt-get") install_dependencies "$PACKAGE_MANAGER" golang python3 python3-pip ;; "apt-get" | "yum") install_dependencies "$PACKAGE_MANAGER" golang ;;
"yum") install_dependencies "$PACKAGE_MANAGER" golang python3 python3-pip ;; *)
echo "Unsupported package manager: $PACKAGE_MANAGER"
exit 1
;;
esac esac
} }
# Function to install Python and Poetry
install_python() {
# Check if "global" argument is passed
GLOBAL_INSTALL=true
if [[ "$1" == "local" ]]; then
GLOBAL_INSTALL=false
fi
# Install pyenv if it's not already installed
if ! command -v pyenv >/dev/null 2>&1; then
echo "Installing pyenv..."
curl https://pyenv.run | bash
# Set up pyenv in the current shell session
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
fi
# Ensure Python 3.7+ is installed via pyenv
REQUIRED_VERSION="3.7.0"
# Function to check if the installed Python version is at least the required version
check_python_version() {
INSTALLED_VERSION=$(python -c "import sys; print('{}.{}'.format(sys.version_info.major, sys.version_info.minor))")
if [[ $(printf '%s\n' "$REQUIRED_VERSION" "$INSTALLED_VERSION" | sort -V | head -n 1) == "$REQUIRED_VERSION" ]]; then
echo "Python version $INSTALLED_VERSION is installed and meets the requirement."
else
echo "Python version is less than $REQUIRED_VERSION. Exiting."
exit 1
fi
}
check_python_version
# Set Python version globally or locally
if [[ "$GLOBAL_INSTALL" == true ]]; then
echo "Setting Python $REQUIRED_VERSION as the global version..."
pyenv global "$REQUIRED_VERSION"
else
echo "Setting Python $REQUIRED_VERSION as the local version..."
pyenv local "$REQUIRED_VERSION"
fi
# Rehash pyenv to make the new version available
pyenv rehash
# Install Poetry using the pyenv-installed Python
echo "Installing Poetry..."
curl -sSL https://install.python-poetry.org | python3 -
}
# Function to install all programming languages
install_programming_languages() {
install_go
install_python global # Pass "global" as an argument to set Python globally
}
# Function to install MesloLGS Nerd Font # Function to install MesloLGS Nerd Font
install_meslolgs_nerd_font() { install_meslolgs_nerd_font() {
if [ ! -f "$HOME/.local/share/fonts/MesloLGS NF Regular.tff" ]; then if [ ! -f "$HOME/.local/share/fonts/MesloLGS NF Regular.ttf" ]; then
mkdir -p ~/.local/share/fonts mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts || return cd ~/.local/share/fonts || return
curl -fLo "MesloLGS NF Regular.ttf" https://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/Meslo.zip curl -fLo "MesloLGS NF Regular.ttf" https://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/Meslo.zip
@ -202,6 +277,8 @@ start_shell() {
zsh zsh
elif command -v bash &>/dev/null; then elif command -v bash &>/dev/null; then
bash bash
elif command -v fish &>/dev/null; then
fish
else else
echo "Neither zsh nor bash is installed. Please install one of them manually." echo "Neither zsh nor bash is installed. Please install one of them manually."
fi fi
@ -253,4 +330,3 @@ fi
show_installed_dependencies show_installed_dependencies
start_shell start_shell