diff --git a/.Brewfile b/.Brewfile new file mode 100644 index 0000000..d9f0c5b --- /dev/null +++ b/.Brewfile @@ -0,0 +1,23 @@ +brew "cmake" +brew "exiv2" +brew "ffmpeg" +brew "git-filter-repo" +brew "go" +brew "jpeg" +brew "leveldb" +brew "neovim" +brew "nmap" +brew "node" +brew "pass" +brew "podman" +brew "python@3.12" +brew "restic" +brew "samba" +brew "subfinder" +brew "yarn" +brew "yt-dlp" +brew "zoxide" +cask "amethyst" +cask "amorphousdiskmark" +cask "android-platform-tools" +cask "iterm2" diff --git a/.environment.d/nas.env b/.environment.d/01_nas.env similarity index 100% rename from .environment.d/nas.env rename to .environment.d/01_nas.env diff --git a/.environment.d/youtube.env b/.environment.d/youtube.env.skel similarity index 55% rename from .environment.d/youtube.env rename to .environment.d/youtube.env.skel index cf2c388..4deb20e 100644 --- a/.environment.d/youtube.env +++ b/.environment.d/youtube.env.skel @@ -1 +1,2 @@ TUBE_TOKEN_NAME_IN_STORE="tube.lan" +TUBE_DEFAULT_USERS=("a" "b") diff --git a/.zsh_functions/download.zsh b/.zsh_functions/download.zsh index 8baa34e..0d289f8 100644 --- a/.zsh_functions/download.zsh +++ b/.zsh_functions/download.zsh @@ -29,8 +29,9 @@ fi mdl () { cwd=$(pwd) -share_on_nas="192.168.84.3/media" +share_on_nas="$NAS_IP/media" path_on_nas="Music/__INBOX" +jelly_wait=150 check_smb_mount() { mount | grep -q "$mount_point" } @@ -66,23 +67,45 @@ fi echo "Unmounting SMB share..." sleep 1 -umount "$mount_point" +/sbin/umount -f "$mount_point" cd $cwd -open "http://bliss.lan/" +if declare -f jelly_rescan > /dev/null; then + echo "Waiting $jelly_wait secs before triggering automatic library scan..." + sleep $jelly_wait + jelly_rescan + echo "done" +fi } - d () { local url="${1:-$(pbpaste)}" - if [[ -z "$url" ]] - then + local used_clipboard=0 + + if [[ -z "$url" ]]; then echo "No URL provided and clipboard is empty." return 1 fi + + # Check if URL came from clipboard + if [[ -z "$1" ]]; then + echo "started via clipboard" + used_clipboard=1 + fi + case "$url" in - (*youtube*|*youtu.be*) echo "Detected YouTube URL: $url" - ytr "$url" ;; - (*qobuz*) echo "Detected Qobuz URL: $url" - mdl "$url" ;; - (*) echo "Unknown URL: $url" ;; + (*youtube*|*youtu.be*) + echo "Detected YouTube URL: $url" + ytr "$url" + ;; + (*qobuz*) + echo "Detected Qobuz URL: $url" + mdl "$url" + if [[ $used_clipboard -eq 1 ]]; then + osascript -e "display dialog \"Done with Qobuz: $url\" buttons {\"OK\"}" + fi + ;; + (*) + echo "Unknown URL: $url" + ;; esac } + diff --git a/.zsh_functions/insta.zsh b/.zsh_functions/insta.zsh index 779cf25..a899cbd 100644 --- a/.zsh_functions/insta.zsh +++ b/.zsh_functions/insta.zsh @@ -1,68 +1,75 @@ -function insta() { - local cwd=$(pwd) +insta () { + local cwd=$(pwd) + check_smb_mount () { + /sbin/mount | grep -q "$insta_mount_point" + } - check_smb_mount() { - /sbin/mount | grep -q "$insta_mount_point" - } + local stories_only=false + local user_list=() + while [[ $# -gt 0 ]] + do + case "$1" in + --cron) + local random_wait=$((RANDOM % 1800)) + echo "--------------------------------------------" + echo "Waiting for $((random_wait / 60)) minutes..." + sleep $random_wait + stories_only=true + ;; + --stories) + stories_only=true + ;; + *) + user_list+=("$1") + ;; + esac + shift + done - local stories_only=false - local user_list=() + echo "-----$(date)------" - # Parse arguments - while [[ $# -gt 0 ]]; do - case "$1" in - --cron) - local random_wait=$((RANDOM % 1800)) - echo "--------------------------------------------" - echo "Waiting for $((random_wait / 60)) minutes..." - sleep $random_wait - stories_only=true - ;; - --stories) - stories_only=true - ;; - *) - user_list+=("$1") - ;; - esac - shift - done - echo "-----$(date)------" - if [ ! -d "$insta_mount_point" ]; then - echo "Creating mount point directory..." - mkdir -p "$insta_mount_point" - fi + local is_local_nas=false + if [[ "$NAS_IP" == "127.0.0.1" || "$NAS_IP" == "localhost" ]]; then + is_local_nas=true + fi + if [ ! -d "$insta_mount_point" ]; then + echo "Creating mount point directory..." + mkdir -p "$insta_mount_point" + fi + + if ! $is_local_nas; then if ! check_smb_mount; then - echo "Mounting SMB share..." - /sbin/mount_smbfs "smb://janolehuebner:$(pass sudo-lana)@$insta_share_on_nas" "$insta_mount_point" + echo "Mounting SMB share..." + /sbin/mount_smbfs "smb://janolehuebner:$(pass sudo-lana 2>/dev/null)@$insta_share_on_nas" "$insta_mount_point" fi - if ! check_smb_mount; then - echo "Failed to mount SMB share. Exiting." - return 1 + echo "Failed to mount SMB share. Exiting." + return 1 fi + fi - cd "$insta_mount_point/$insta_path_on_nas" || return 1 + cd "$insta_mount_point/$insta_path_on_nas" || return 1 - # Use default users if no user was specified - if [[ ${#user_list[@]} -eq 0 ]]; then - user_list=("${insta_default_users[@]}") - fi + if [[ ${#user_list[@]} -eq 0 ]]; then + user_list=("${insta_default_users[@]}") + fi - # Build the instaloader command - local cmd=(uvx --with browser_cookie3 instaloader -b Safari -B "$insta_cookiefile" "${user_list[@]}" --fast-update) + local cmd=(uvx --with browser_cookie3 instaloader -b Safari "${user_list[@]}" --fast-update --abort-on=302,400,401,429) + if $stories_only; then + cmd+=(--stories --no-profile-pic --no-posts) + else + cmd+=(--stories --reels) + fi - if $stories_only; then - cmd+=(--stories --no-profile-pic --no-posts) - else - cmd+=(--stories --reels) - fi - - "${cmd[@]}" + "${cmd[@]}" + if ! $is_local_nas; then echo "Unmounting SMB share..." sleep 3 /sbin/umount -f "$insta_mount_point" - cd "$cwd" + fi + + cd "$cwd" } + diff --git a/.zsh_functions/jellyfin.zsh b/.zsh_functions/jellyfin.zsh new file mode 100644 index 0000000..79b15db --- /dev/null +++ b/.zsh_functions/jellyfin.zsh @@ -0,0 +1,8 @@ +jelly_rescan(){ +JELLYFIN_URL="http://$NAS_IP:8096" +API_KEY="$(pass jelly)" +LIBRARY_ID="8a05b0252259a1dbd62df97522638439" + +curl -X POST -H "X-Emby-Token: $API_KEY" \ + "$JELLYFIN_URL/Library/VirtualFolders/$LIBRARY_ID/Refresh" +} diff --git a/.zsh_functions/youtube.zsh b/.zsh_functions/youtube.zsh index 007bf5e..4651f39 100644 --- a/.zsh_functions/youtube.zsh +++ b/.zsh_functions/youtube.zsh @@ -29,7 +29,7 @@ ytr () { return 1 fi - local token="$(pass $TUBE_TOKEN_NAME_IN_STORE)" + local token="$(pass $TUBE_TOKEN_NAME_IN_STORE 2>/dev/null)" local json_data=$(jq -n --arg youtube_id "$youtube_id" '{ data: [ { @@ -58,7 +58,7 @@ yts() { fi # Set the token and URL - local token="$(pass $TUBE_TOKEN_NAME_IN_STORE)" + local token="$(pass $TUBE_TOKEN_NAME_IN_STORE 2>/dev/null)" # Initialize an empty array to store video data local video_data="[]" @@ -67,7 +67,7 @@ yts() { while read -r youtube_id; do # Add each video ID to the array of data (accumulating in $video_data) video_data=$(echo "$video_data" | jq --arg youtube_id "$youtube_id" '. + [{youtube_id: $youtube_id, status: "pending"}]') - done < <(yt-dlp "https://www.youtube.com/@$1/shorts" --flat-playlist --print "%(id)s") + done < <(uvx yt-dlp "https://www.youtube.com/@$1/shorts" --flat-playlist --print "%(id)s") # Check if video_data is still an empty array (meaning no videos were found) if [[ "$video_data" == "[]" ]]; then @@ -90,13 +90,7 @@ yts() { # check_shorts() { - # List of channels to check (you can hardcode them or pass them as arguments) - channels=( - "DarkBlondii" - "littlesiha" - "lenaindica" - ) - + channels=("${TUBE_DEFAULT_USERS[@]}") # Loop through each channel and call yts for channel in "${channels[@]}"; do echo "Checking shorts for channel: $channel" diff --git a/.zshrc b/.zshrc index b541348..eb977ad 100755 --- a/.zshrc +++ b/.zshrc @@ -30,7 +30,7 @@ autosource milan autosource nas autosource fuck autosource download +autosource jellyfin -#test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh" - +eval "$(zoxide init --cmd cd zsh)" diff --git a/.zshrc.d/install_dotfiles.zsh b/.zshrc.d/install_dotfiles.zsh index ec5a27f..419dd9b 100644 --- a/.zshrc.d/install_dotfiles.zsh +++ b/.zshrc.d/install_dotfiles.zsh @@ -37,6 +37,11 @@ install_dotfiles () { /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" fi + #----uv + command -v uv >/dev/null 2>&1 || curl -LsSf https://astral.sh/uv/install.sh | sh + # + + if [[ "$OSTYPE" == "darwin"* ]]; then /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"