This commit is contained in:
2026-02-15 21:13:57 -08:00
parent e3b0fdbddb
commit 7db8a5908a
11 changed files with 316 additions and 179 deletions

View File

@@ -127,4 +127,5 @@ alias hypr='cd ~/.config/hypr && vim ~/.config/hypr/hyprland.conf && cd -'
alias wlc='wl-copy'
alias wlp='wl-paste'
alias vn32='WINEPREFIX=/home/sudacode/S/lutris/wineprefix32 WINEARCH=win32'
alias impv='mpv --profile=immersion'
alias impv='mpv --profile=subminer'
alias smpv='mpv --profile=subminer'

View File

@@ -39,19 +39,23 @@
"pyright-lsp@claude-plugins-official": true,
"typescript-lsp@claude-plugins-official": true,
"clangd-lsp@claude-plugins-official": true,
"claude-mem@thedotmack": true,
"frontend-design@claude-plugins-official": true,
"code-review@claude-plugins-official": true,
"code-simplifier@claude-plugins-official": true,
"playwright@claude-plugins-official": true
"playwright@claude-plugins-official": true,
"superpowers@claude-plugins-official": true
},
"sandbox": {
"enabled": false,
"autoAllowBashIfSandboxed": true,
"network": {
"allowUnixSockets": ["/var/run/docker.sock"],
"allowUnixSockets": [
"/var/run/docker.sock"
],
"allowLocalBinding": true
},
"excludedCommands": ["docker"]
"excludedCommands": [
"docker"
]
}
}

View File

@@ -0,0 +1,131 @@
{
"keybindings": [],
"shortcuts": {
"copySubtitle": "CommandOrControl+C",
"copySubtitleMultiple": "CommandOrControl+Shift+C",
"updateLastCardFromClipboard": "CommandOrControl+V",
"triggerFieldGrouping": "CommandOrControl+G",
"triggerSubsync": "CommandOrControl+Alt+S",
"mineSentence": "CommandOrControl+S",
"mineSentenceMultiple": "CommandOrControl+Shift+S",
"multiCopyTimeoutMs": 3000,
"toggleSecondarySub": "CommandOrControl+Shift+V",
"markAudioCard": "CommandOrControl+Shift+A",
"openRuntimeOptions": "CommandOrControl+Shift+O",
"toggleVisibleOverlayGlobal": "Alt+Shift+O",
"toggleInvisibleOverlayGlobal": "Alt+Shift+I",
},
"auto_start_overlay": false,
"bind_visible_overlay_to_mpv_sub_visibility": false,
"texthooker": {
"openBrowser": false,
},
"websocket": {
"enabled": "auto",
"port": 6677,
},
"ankiConnect": {
"enabled": true,
"url": "http://127.0.0.1:8765",
"deck": "Minecraft",
"pollingRate": 500,
"fields": {
"audio": "ExpressionAudio",
"image": "Picture",
"sentence": "Sentence",
"miscInfo": "MiscInfo",
"translation": "SelectionText",
},
"openRouter": {
"enabled": true,
"alwaysUseAiTranslation": true,
"apiKey": "",
"model": "openai/gpt-oss-120b:free",
"baseUrl": "https://openrouter.ai/api/v1",
"sourceLanguage": "Japanese",
"systemPrompt": "You are a translation engine for translating Japanese into natural-sounding, context-aware English. Return only the translated text with no extra explanations or commentary. The translation must preserve the original tone and intent of the source. If the input is not in the target language, translate it to the target language. If the input is already in the target language, return it as is.",
},
"media": {
"generateAudio": true,
"generateImage": true,
"imageType": "avif",
"imageFormat": "webp",
"animatedFps": 24,
"animatedMaxWidth": 640,
"animatedMaxHeight": null,
"animatedCrf": 35,
"audioPadding": 0.5,
"fallbackDuration": 3,
},
"behavior": {
"overwriteAudio": false,
"overwriteImage": true,
"mediaInsertMode": "append",
"highlightWord": true,
"notificationType": "system",
"showNotificationOnUpdate": true,
"autoUpdateNewCards": false,
},
"nPlusOne": {
"decks": ["Minecraft", "Kaishi 1.5k"],
"highlightEnabled": true,
"refreshMinutes": 60,
"matchMode": "headword",
},
"metadata": {
"pattern": "[SubMiner] %f (%t)",
},
"isLapis": {
"enabled": true,
"sentenceCardModel": "Lapis Morph",
"sentenceCardSentenceField": "Sentence",
"sentenceCardAudioField": "SentenceAudio",
},
"isKiku": {
"enabled": true,
"fieldGrouping": "manual",
"deleteDuplicateInAuto": true,
},
},
"secondarySub": {
"autoLoadSecondarySub": true,
"secondarySubLanguages": ["en", "eng"],
},
"subsync": {
"defaultMode": "manual",
"alass_path": null,
"ffsubsync_path": null,
"ffmpeg_path": null,
},
"subtitleStyle": {
"fontFamily": "Noto Sans CJK JP Regular, Noto Sans CJK JP, Arial Unicode MS, Arial, sans-serif",
"fontSize": 35,
"fontColor": "#cad3f5",
"fontWeight": "normal",
"fontStyle": "normal",
"backgroundColor": "rgb(30, 32, 48, 0.88)",
"secondary": {
"fontSize": 24,
"fontColor": "#cad3f5",
"backgroundColor": "transparent",
},
},
"jimaku": {
// "apiKey": "YOUR_API_KEY",
// or use a command that outputs the key:
"apiKeyCommand": "cat ~/.jimaku-api-key",
"apiBaseUrl": "https://jimaku.cc",
"languagePreference": "ja",
"maxEntryResults": 10,
},
"invisibleOverlay": {
// "platform-default" => hidden on Wayland, visible elsewhere
// other values: "visible", "hidden"
"startupVisibility": "platform-default",
},
"youtubeSubgen": {
"mode": "automatic", // automatic | preprocess | off
"whisperBin": "/usr/bin/whisper-cli",
"whisperModel": "~/models/whisper.cpp/ggml-small.bin",
},
}

View File

@@ -133,7 +133,7 @@ bind = $mainMod, z, exec, uwsm app -sb -- zen-browser
bind = $mainMod SHIFT, s, exec , rofi -show ssh -theme "$HOME/.config/rofi/launchers/type-2/style-2.rasi" -terminal -theme-str 'window{width: 25%;} listview {columns: 1; lines: 10;}' ghostty -ssh-command "ghostty --initial-command='TERM=kitty ssh {host}'"
# reload monitors
bind = $mainMod SHIFT, R, exec, hyprctl dispatch dpms off && sleep 1 && hyprctl dispatch dpms on
bind = CTRL $mainMod SHIFT, R, exec, hyprctl dispatch dpms off && sleep 1 && hyprctl dispatch dpms on
# Disable keybinds with one master keybind
# https://wiki.hypr.land/0.49.0/Configuring/Uncommon-tips--tricks/#disabling-keybinds-with-one-master-keybind

View File

@@ -3,142 +3,16 @@
"plugin": [
"opencode-openai-codex-auth",
"opencode-antigravity-auth@beta",
"@mohak34/opencode-notifier@latest",
"@mohak34/opencode-notifier@latest"
],
"mcp": {
"backlog": {
"type": "local",
"command": ["backlog", "mcp", "start"],
"enabled": true
}
},
"provider": {
"openai": {
"name": "OpenAI",
"options": {
"reasoningEffort": "medium",
"reasoningSummary": "auto",
"textVerbosity": "medium",
"include": [
"reasoning.encrypted_content"
],
"store": false
},
"models": {
"gpt-5.2": {
"name": "GPT 5.2 (OAuth)",
"limit": {
"context": 272000,
"output": 128000
},
"modalities": {
"input": [
"text",
"image"
],
"output": [
"text"
]
},
"variants": {
"none": {
"reasoningEffort": "none",
"reasoningSummary": "auto",
"textVerbosity": "medium"
},
"low": {
"reasoningEffort": "low",
"reasoningSummary": "auto",
"textVerbosity": "medium"
},
"medium": {
"reasoningEffort": "medium",
"reasoningSummary": "auto",
"textVerbosity": "medium"
},
"high": {
"reasoningEffort": "high",
"reasoningSummary": "detailed",
"textVerbosity": "medium"
},
"xhigh": {
"reasoningEffort": "xhigh",
"reasoningSummary": "detailed",
"textVerbosity": "medium"
}
}
},
"gpt-5.2-codex": {
"name": "GPT 5.2 Codex (OAuth)",
"limit": {
"context": 272000,
"output": 128000
},
"modalities": {
"input": [
"text",
"image"
],
"output": [
"text"
]
},
"variants": {
"low": {
"reasoningEffort": "low",
"reasoningSummary": "auto",
"textVerbosity": "medium"
},
"medium": {
"reasoningEffort": "medium",
"reasoningSummary": "auto",
"textVerbosity": "medium"
},
"high": {
"reasoningEffort": "high",
"reasoningSummary": "detailed",
"textVerbosity": "medium"
},
"xhigh": {
"reasoningEffort": "xhigh",
"reasoningSummary": "detailed",
"textVerbosity": "medium"
}
}
},
"gpt-5.2-codex-max": {
"name": "GPT 5.2 Codex Max (OAuth)",
"limit": {
"context": 272000,
"output": 128000
},
"modalities": {
"input": [
"text",
"image"
],
"output": [
"text"
]
},
"variants": {
"low": {
"reasoningEffort": "low",
"reasoningSummary": "detailed",
"textVerbosity": "medium"
},
"medium": {
"reasoningEffort": "medium",
"reasoningSummary": "detailed",
"textVerbosity": "medium"
},
"high": {
"reasoningEffort": "high",
"reasoningSummary": "detailed",
"textVerbosity": "medium"
},
"xhigh": {
"reasoningEffort": "xhigh",
"reasoningSummary": "detailed",
"textVerbosity": "medium"
}
}
}
}
},
"google": {
"name": "Google",
"models": {
@@ -151,14 +25,8 @@
"output": 65535
},
"modalities": {
"input": [
"text",
"image",
"pdf"
],
"output": [
"text"
]
"input": ["text", "image", "pdf"],
"output": ["text"]
}
},
"antigravity-gemini-3-pro-low": {
@@ -170,14 +38,8 @@
"output": 65535
},
"modalities": {
"input": [
"text",
"image",
"pdf"
],
"output": [
"text"
]
"input": ["text", "image", "pdf"],
"output": ["text"]
}
},
"antigravity-gemini-3-flash": {
@@ -188,14 +50,8 @@
"output": 65536
},
"modalities": {
"input": [
"text",
"image",
"pdf"
],
"output": [
"text"
]
"input": ["text", "image", "pdf"],
"output": ["text"]
}
}
}

View File

@@ -85,6 +85,8 @@ bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind r source-file ~/.tmux.conf \; display "Reloaded tmux config"
set-window-option -g mode-keys vi
set -g mode-keys vi
set -g status-keys vi

3
.gitmodules vendored
View File

@@ -25,3 +25,6 @@
[submodule ".config/mpv-modules/animecards"]
path = .config/mpv-modules/animecards
url = git@github.com:ksyasuda/Anacreon-Script
[submodule ".config/mpv-modules/ani-skip"]
path = .config/mpv-modules/ani-skip
url = https://github.com/synacktraa/ani-skip.git

View File

@@ -102,3 +102,11 @@ zle -N bracketed-paste bracketed-paste-magic
alias claude-mem='bun "/home/sudacode/.claude/plugins/marketplaces/thedotmack/plugin/scripts/worker-service.cjs"'
fpath=(/home/sudacode/.zsh/completions $fpath)
autoload -Uz compinit && compinit
# pnpm
export PNPM_HOME="/home/sudacode/.local/share/pnpm"
case ":$PATH:" in
*":$PNPM_HOME:"*) ;;
*) export PATH="$PNPM_HOME:$PATH" ;;
esac
# pnpm end

View File

@@ -2,28 +2,82 @@
set -Eeuo pipefail
URL="${1:-$(wl-paste -p)}"
MPV_SOCKET=/tmp/mpvsocket
URL="${1:-}"
MPV_SOCKET="/tmp/mpvsocket"
ICON_PATH="$HOME/.local/share/icons/Magna-Glassy-Dark-Icons/apps/48/mpv.svg"
TITLE="mpv-add.sh"
notify() {
local message="$1"
notify-send -i "$ICON_PATH" "$TITLE" "$message"
}
trim() {
printf '%s' "$1" | sed 's/^[[:space:]]\+//;s/[[:space:]]\+$//'
}
play_direct() {
mpv -- "$URL" &> /dev/null &
}
wait_for_socket() {
local timeout_ms=2000
local waited=0
while ((waited < timeout_ms)); do
if [[ -S "$MPV_SOCKET" ]]; then
return 0
fi
sleep 0.05
waited=$((waited + 50))
done
return 1
}
is_valid_input() {
local input="$1"
if [[ -f "$input" ]]; then
return 0
fi
if ! command -v yt-dlp > /dev/null 2>&1; then
return 1
fi
if yt-dlp --simulate "$input" > /dev/null 2>&1; then
return 0
fi
return 1
}
if [[ -z "$URL" ]] && command -v wl-paste > /dev/null 2>&1; then
URL="$(wl-paste -p || true)"
fi
URL="$(trim "$URL")"
if [[ -z "$URL" ]]; then
notify-send -i "$ICON_PATH" "$TITLE" "No URL provided"
notify "No URL provided"
exit 1
fi
if ! [[ -f "$URL" ]] && ! yt-dlp --simulate "$URL"; then
notify-send -i "$ICON_PATH" "$TITLE" "Invalid URL"
if ! is_valid_input "$URL"; then
notify "Invalid input: provide a local file path or a yt-dlp supported URL"
exit 1
fi
if ! pgrep -x mpv &> /dev/null; then
mpv "$URL" &> /dev/null &
notify-send -i "$ICON_PATH" "$TITLE" "Playing $URL"
rm -f "$MPV_SOCKET"
mpv --input-ipc-server="$MPV_SOCKET" -- "$URL" &> /dev/null &
notify "Playing $URL"
else
if echo "{ \"command\": [\"script-message\", \"add_to_queue\", \"$URL\" ] }" | socat - "$MPV_SOCKET" &> /dev/null; then
notify-send -i "$ICON_PATH" "$TITLE" "Added $URL to queue"
else
notify-send -i "$ICON_PATH" "$TITLE" "Failed to add $URL to queue"
if [[ -S "$MPV_SOCKET" ]] && wait_for_socket && echo "{ \"command\": [\"script-message\", \"add_to_queue\", \"$URL\" ] }" | socat - "$MPV_SOCKET" &> /dev/null; then
notify "Added $URL to queue"
exit 0
fi
notify "Queue unavailable, opening in new player"
play_direct
notify "Playing $URL"
fi

View File

@@ -4,6 +4,7 @@ THEME="${THEME:-$HOME/.local/share/SubMiner/themes/subminer.rasi}"
FONTCONFIG_FILE=$HOME/.config/mpv/mpv-fonts.conf
COMMAND=mpv
VIDEO_EXTENSIONS="mkv|mp4|avi|webm|mov|flv|wmv|m4v|ts|m2ts"
TARGET_DIRECTORY=""
# Parse command-line options first
while getopts ":st:" opt; do
@@ -26,6 +27,19 @@ while getopts ":st:" opt; do
done
shift $((OPTIND - 1))
if [[ $# -gt 1 ]]; then
echo "Usage: $0 [-s] [-t theme] [directory]" >&2
exit 1
fi
if [[ $# -eq 1 ]]; then
if [[ ! -d "$1" ]]; then
echo "Invalid directory: $1" >&2
exit 1
fi
TARGET_DIRECTORY="$(realpath "$1")"
fi
find_videos() {
find "$PWD" -maxdepth 1 -type f -regextype posix-extended \
-iregex ".*\.($VIDEO_EXTENSIONS)$" 2> /dev/null | sort -V
@@ -40,6 +54,60 @@ build_rofi_menu() {
done < <(find_videos)
}
is_video_file() {
local file="$1"
local regex="\\.($VIDEO_EXTENSIONS)$"
if [[ ! "${file,,}" =~ $regex ]]; then
return 1
fi
if command -v file > /dev/null 2>&1; then
local mime
mime=$(file -b --mime-type "$file" 2>/dev/null || true)
[[ "$mime" == video/* ]] && return 0
fi
return 0
}
select_video_via_rofi() {
if [[ -n "$TARGET_DIRECTORY" ]]; then
local selection=""
local prompt="Choose Video "
while true; do
selection=$(rofi -show filebrowser -show-icons -theme "$THEME" \
-theme-str 'configuration {font: "JetBrainsMono Nerd Font 10";} listview {columns: 1; lines: 15;} window {width: 88%;}' \
-p "$prompt" \
-filebrowser-directory "$TARGET_DIRECTORY" \
-filebrowser-cancel-returns-1 true)
[[ -z "$selection" ]] && return 1
if [[ "$selection" != /* ]]; then
selection="$TARGET_DIRECTORY/$selection"
fi
if [[ -d "$selection" ]]; then
prompt="Choose Video (folders are not selectable)"
continue
fi
if is_video_file "$selection"; then
echo "$selection"
return 0
fi
prompt="Choose Video (select a video file)"
done
fi
build_rofi_menu | rofi -dmenu -i -show-icons -theme "$THEME" \
-theme-str 'configuration {font: "JetBrainsMono Nerd Font 10";} listview {columns: 1; lines: 15;} window {width: 88%;}' -p "Choose Video "
}
selection=$(select_video_via_rofi)
get_video_thumbnail() {
local video="$1"
local thumb_dir="$HOME/.cache/thumbnails/large"
@@ -60,15 +128,24 @@ get_video_thumbnail() {
fi
}
selection=$(build_rofi_menu | rofi -dmenu -i -show-icons -theme "$THEME" \
-theme-str 'configuration {font: "JetBrainsMono Nerd Font 10";} listview {columns: 1; lines: 15;} window {width: 88%;}' -p "Choose Video ")
if [[ -z "$selection" ]]; then
echo "No video selected."
exit 1
fi
if [[ -n "$TARGET_DIRECTORY" ]]; then
choice="$selection"
if [[ "$choice" != /* ]]; then
choice="$TARGET_DIRECTORY/$choice"
fi
else
choice="./$selection"
fi
if [[ ! -f "$choice" ]]; then
echo "Selected item is not a valid file: $choice" >&2
exit 1
fi
THUMBNAIL_PATH=$(get_video_thumbnail "$choice")
if [[ -n "$THUMBNAIL_PATH" && -f "$THUMBNAIL_PATH" ]]; then