Compare commits

...

9 Commits

Author SHA1 Message Date
3218ceada1 move config 2026-02-04 02:35:42 -08:00
dca8f0df32 update 2026-02-04 02:14:03 -08:00
da80481d63 update symlink 2026-02-03 17:19:03 -08:00
e6c89cf38b update 2026-02-03 17:13:42 -08:00
35357f1674 update scripts 2026-02-03 17:13:21 -08:00
bd6eefe084 change to jsonc 2026-02-03 17:13:20 -08:00
4eda790932 update 2026-02-03 15:14:29 -08:00
d57275597d update 2026-02-03 10:29:34 -08:00
75a9cc360c update 2026-02-03 10:23:20 -08:00
13 changed files with 234 additions and 189 deletions

View File

@@ -1 +0,0 @@
settings.json##os.Linux

View File

@@ -0,0 +1,43 @@
{
"attribution": {
"commit": "",
"pr": ""
},
"permissions": {
"deny": [
"Read(.env)",
"Read(~/.aws/**)"
]
},
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "notify-send 'Claude Code' 'Claude Code needs your attention'"
}
]
}
]
},
"enabledPlugins": {
"pyright-lsp@claude-plugins-official": true,
"typescript-lsp@claude-plugins-official": true,
"clangd-lsp@claude-plugins-official": true
},
"sandbox": {
"enabled": false,
"autoAllowBashIfSandboxed": true,
"network": {
"allowUnixSockets": [
"/var/run/docker.sock"
],
"allowLocalBinding": true
},
"excludedCommands": [
"docker"
]
}
}

View File

@@ -39,6 +39,5 @@
"excludedCommands": [
"docker"
]
},
"model": "haiku"
}
}

View File

@@ -32,7 +32,7 @@ bind = $mainMod SHIFT, j, movewindow, d
bind = $mainMod SHIFT, k, movewindow, u
bind = $mainMod SHIFT, h, movewindow, l
bind = $mainMod SHIFT, l, movewindow, r
bind = CTRL+SHIFT, c, centerwindow
bind = $mainMod+SHIFT, c, centerwindow
# Move focus to next monitor

View File

@@ -1,123 +0,0 @@
{
"subtitlePosition": {
"yPercent": 15.376111685625649
},
"keybindings": [
{
"key": "Space",
"command": [
"cycle",
"pause"
]
},
{
"key": "ArrowRight",
"command": [
"seek",
5
]
},
{
"key": "ArrowLeft",
"command": [
"seek",
-5
]
},
{
"key": "Ctrl+Shift+KeyN",
"command": [
"script-binding",
"mpvacious-export-note"
]
},
{
"key": "Ctrl+KeyC",
"command": [
"script-binding",
"mpvacious-copy-primary-sub-to-clipboard"
]
},
{
"key": "Ctrl+Shift+KeyV",
"command": [
"script-binding",
"mpvacious-secondary-sid-toggle"
]
},
{
"key": "Shift+KeyL",
"command": [
"script-binding",
"mpvacious-sub-seek-forward"
]
},
{
"key": "Shift+KeyH",
"command": [
"script-binding",
"mpvacious-sub-seek-back"
]
},
{
"key": "Ctrl+Shift+KeyH",
"command": [
"script-binding",
"mpvacious-sub-replay"
]
},
{
"key": "Ctrl+Shift+KeyL",
"command": [
"script-binding",
"mpvacious-sub-play-up-to-next"
]
},
{
"key": "Ctrl+KeyV",
"command": [
"script-binding",
"animecards/update-anki-card"
]
},
{
"key": "KeyQ",
"command": [
"quit"
]
},
{
"key": "Ctrl+KeyW",
"command": [
"quit"
]
}
],
"texthooker": {
"openBrowser": false
},
"websocket": {
"enabled": "auto",
"port": 6677
},
"ankiConnect": {
"enabled": true,
"url": "http://127.0.0.1:8765",
"deck": "Minecraft",
"pollingRate": 200,
"audioField": "ExpressionAudio",
"imageField": "Picture",
"sentenceField": "Sentence",
"generateAudio": true,
"generateImage": true,
"imageType": "avif",
"imageFormat": "webp",
"miscInfoPattern": "[mpv-yomitan] %f (%t)",
"overwriteAudio": true,
"overwriteImage": true,
"highlightWord": true,
"showNotificationOnUpdate": true,
"audioPadding": 0.5,
"fallbackDuration": 3
}
}

View File

@@ -8,7 +8,7 @@ dither=fruit # Lightweight dithering
ontop=yes
border=no
no-border
autofit=50% # Reasonable default size
autofit=69% # Reasonable default size
# Audio (macOS-specific)
volume=75
@@ -155,7 +155,7 @@ profile-cond=width >= 1920 and filename:match("mkv$|mp4$")
glsl-shaders=""
scale=ewa_lanczos
target-peak=800
hdr-tone-mapping=bt.2390
# hdr-tone-mapping=bt.2390
# HDR profile
[hdr]

View File

@@ -1 +0,0 @@
../../submodules/mpv-anilist-updater/anilistUpdater/anilistUpdater.py

View File

@@ -1 +0,0 @@
../../submodules/mpv-anilist-updater/anilistUpdater/main.lua

View File

@@ -1 +1 @@
../../../projects/lua/mpv-youtube-queue/mpv-youtube-queue.lua
../../mpv-modules/mpv-youtube-queue/mpv-youtube-queue.lua

View File

@@ -1,17 +1,17 @@
-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)

View File

@@ -0,0 +1,129 @@
{
"subtitlePosition": {
"yPercent": 17.38459152016546
},
"keybindings": [
{
"key": "Space",
"command": [
"cycle",
"pause"
]
},
{
"key": "ArrowRight",
"command": [
"seek",
5
]
},
{
"key": "ArrowLeft",
"command": [
"seek",
-5
]
},
{
"key": "ArrowRight",
"command": [
"seek",
5
]
},
{
"key": "ArrowUp",
"command": [
"seek",
60
]
},
{
"key": "ArrowDown",
"command": [
"seek",
-60
]
},
{
"key": "KeyQ",
"command": [
"quit"
]
},
{
"key": "Ctrl+KeyW",
"command": [
"quit"
]
}
],
"texthooker": {
"openBrowser": false
},
"websocket": {
"enabled": "auto",
"port": 6677
},
"ankiConnect": {
"enabled": true,
"url": "http://127.0.0.1:8765",
"deck": "Minecraft",
"pollingRate": 200,
"audioField": "ExpressionAudio",
"imageField": "Picture",
"sentenceField": "Sentence",
"generateAudio": true,
"generateImage": true,
"imageType": "avif",
"imageFormat": "webp",
"miscInfoPattern": "[mpv-yomitan] %f (%t)",
"overwriteAudio": false,
"overwriteImage": true,
"highlightWord": true,
"showNotificationOnUpdate": true,
"notificationType": "system",
"audioPadding": 0.5,
"fallbackDuration": 3,
"animatedFps": 24,
"animatedMaxWidth": 640,
"animatedMaxHeight": null,
"animatedCrf": 35,
"autoUpdateNewCards": false,
"sentenceCardModel": "Lapis Morph",
"sentenceCardSentenceField": "Sentence",
"sentenceCardAudioField": "SentenceAudio",
"isLapis": true,
"mediaInsertMode": "append",
"auto_start_overlay": false,
"secondarySub": {
"autoLoadSecondarySub": true,
"secondarySubLanguages": [
"en",
"eng"
]
}
},
"subtitleStyle": {
"ontFamily": "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"
}
},
"shortcuts": {
"copySubtitle": "CommandOrControl+C",
"copySubtitleMultiple": "CommandOrControl+Shift+C",
"updateLastCardFromClipboard": "CommandOrControl+V",
"mineSentence": "CommandOrControl+S",
"mineSentenceMultiple": "CommandOrControl+Shift+S",
"toggleSecondarySub": "CommandOrControl+Shift+V",
"multiCopyTimeoutMs": 3000
}
}

View File

@@ -10,9 +10,9 @@ import sys
import requests
# Configuration
OPENROUTER_API_KEY = os.environ.get("OPENROUTER_API_KEY", "")
MODEL = os.environ.get("OPENROUTER_MODEL", "google/gemini-2.0-flash-001")
# MODEL = os.environ.get("OPENROUTER_MODEL", "google/gemini-2.0-flash-001")
MODEL = os.environ.get("OPENROUTER_MODEL", "openai/gpt-oss-120b:free")
API_URL = "https://openrouter.ai/api/v1/chat/completions"
# Try to load API key from file if not in environment

View File

@@ -7,74 +7,74 @@ VIDEO_EXTENSIONS="mkv|mp4|avi|webm|mov|flv|wmv|m4v|ts|m2ts"
# Parse command-line options first
while getopts ":it:" opt; do
case $opt in
i)
COMMAND="$COMMAND --profile=immersion"
;;
t)
THEME="$OPTARG"
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
case $opt in
i)
COMMAND="$COMMAND --profile=immersion"
;;
t)
THEME="$OPTARG"
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
shift $((OPTIND - 1))
find_videos() {
find "$PWD" -maxdepth 1 -type f -regextype posix-extended \
-iregex ".*\.($VIDEO_EXTENSIONS)$" 2>/dev/null | sort -V
find "$PWD" -maxdepth 1 -type f -regextype posix-extended \
-iregex ".*\.($VIDEO_EXTENSIONS)$" 2> /dev/null | sort -V
}
build_rofi_menu() {
while IFS= read -r video; do
[ -z "$video" ] && continue
local display_name
display_name=$(basename "$video")
printf '%s\0icon\x1fthumbnail://%s\n' "$display_name" "$video"
done < <(find_videos)
while IFS= read -r video; do
[ -z "$video" ] && continue
local display_name
display_name=$(basename "$video")
printf '%s\0icon\x1fthumbnail://%s\n' "$display_name" "$video"
done < <(find_videos)
}
get_video_thumbnail() {
local video="$1"
local thumb_dir="$HOME/.cache/thumbnails/large"
local video_uri="file://$(realpath "$video")"
local thumb_hash=$(echo -n "$video_uri" | md5sum | cut -d' ' -f1)
local thumb_path="$thumb_dir/$thumb_hash.png"
local video="$1"
local thumb_dir="$HOME/.cache/thumbnails/large"
local video_uri="file://$(realpath "$video")"
local thumb_hash=$(echo -n "$video_uri" | md5sum | cut -d' ' -f1)
local thumb_path="$thumb_dir/$thumb_hash.png"
if [[ -f "$thumb_path" ]]; then
echo "$thumb_path"
return 0
fi
if [[ -f "$thumb_path" ]]; then
echo "$thumb_path"
return 0
fi
local tmp_thumb="/tmp/rmpv-thumb-$$.jpg"
if command -v ffmpegthumbnailer &>/dev/null; then
ffmpegthumbnailer -i "$video" -o "$tmp_thumb" -s 512 -q 5 2>/dev/null && echo "$tmp_thumb"
elif command -v ffmpeg &>/dev/null; then
ffmpeg -i "$video" -ss 00:00:30 -vframes 1 -vf "scale=512:-1" "$tmp_thumb" 2>/dev/null && echo "$tmp_thumb"
fi
local tmp_thumb="/tmp/rmpv-thumb-$$.jpg"
if command -v ffmpegthumbnailer &> /dev/null; then
ffmpegthumbnailer -i "$video" -o "$tmp_thumb" -s 512 -q 5 2> /dev/null && echo "$tmp_thumb"
elif command -v ffmpeg &> /dev/null; then
ffmpeg -i "$video" -ss 00:00:30 -vframes 1 -vf "scale=512:-1" "$tmp_thumb" 2> /dev/null && echo "$tmp_thumb"
fi
}
selection=$(build_rofi_menu | rofi -dmenu -i -show-icons -theme "$THEME" \
-theme-str 'listview {columns: 1; lines: 15;} window {width: 88%;}' -p "Choose Video ")
-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
echo "No video selected."
exit 1
fi
choice="./$selection"
THUMBNAIL_PATH=$(get_video_thumbnail "$choice")
if [[ -n "$THUMBNAIL_PATH" && -f "$THUMBNAIL_PATH" ]]; then
notify-send -i "$THUMBNAIL_PATH" "Playing Video" "$(basename "$choice")"
notify-send -i "$THUMBNAIL_PATH" "Playing Video" "$(basename "$choice")"
else
notify-send "Playing Video" "$(basename "$choice")"
notify-send "Playing Video" "$(basename "$choice")"
fi
$COMMAND "$choice" &