diff --git a/.claude/settings.json##os.Linux b/.claude/settings.json##os.Linux
index 687350d..a887226 100644
--- a/.claude/settings.json##os.Linux
+++ b/.claude/settings.json##os.Linux
@@ -17,7 +17,17 @@
"mcp__plugin_playwright_playwright__browser_click",
"mcp__plugin_playwright_playwright__browser_take_screenshot",
"mcp__plugin_playwright_playwright__browser_close",
- "Bash(bun run:*)"
+ "Bash(bun run:*)",
+ "mcp__plugin_playwright_playwright__browser_evaluate",
+ "Read(//home/sudacode/.config/**)",
+ "Bash(find ~/.config -path */SubMiner/* -type f)",
+ "Bash(sqlite3 /home/sudacode/.config/SubMiner/immersion.sqlite \"SELECT name FROM sqlite_master WHERE type=''table'' LIMIT 5;\")",
+ "Bash(sqlite3 /home/sudacode/.config/SubMiner/immersion.sqlite \".tables\")",
+ "Bash(sqlite3 /home/sudacode/.config/SubMiner/immersion.sqlite \"SELECT text FROM imm_subtitle_lines ORDER BY RANDOM\\(\\) LIMIT 25\")",
+ "Bash(pkill -f \"python3 -m http.server 9876\")",
+ "Read(//home/sudacode/.claude/plugins/cache/claude-plugins-official/superpowers/5.0.5/skills/brainstorming/**)",
+ "Bash(/home/sudacode/.claude/plugins/cache/claude-plugins-official/superpowers/5.0.5/skills/brainstorming/scripts/start-server.sh --project-dir /home/sudacode/projects/japanese/SubMiner)",
+ "Read(//home/sudacode/**)"
],
"deny": [
"Bash(curl *)",
@@ -51,7 +61,8 @@
"code-simplifier@claude-plugins-official": true,
"playwright@claude-plugins-official": true,
"superpowers@claude-plugins-official": true,
- "coderabbit@claude-plugins-official": true
+ "coderabbit@claude-plugins-official": true,
+ "discord@claude-plugins-official": true
},
"sandbox": {
"enabled": false,
diff --git a/.codex/config.toml##os.Linux b/.codex/config.toml##os.Linux
index e4e1693..c4d1958 100644
--- a/.codex/config.toml##os.Linux
+++ b/.codex/config.toml##os.Linux
@@ -1,4 +1,4 @@
-model = "gpt-5.4"
+model = "gpt-5.4-mini"
model_reasoning_effort = "high"
personality = "pragmatic"
tool_output_token_limit = 25000
@@ -132,6 +132,24 @@ trust_level = "trusted"
[projects."/home/sudacode/.config/ranger"]
trust_level = "trusted"
+[projects."/home/sudacode/projects/japanese/texthooker-ui"]
+trust_level = "trusted"
+
+[projects."/home/sudacode/.config/uwsm"]
+trust_level = "trusted"
+
+[projects."/home/sudacode/.cache/paru/clone/t3code-bin"]
+trust_level = "trusted"
+
+[projects."/home/sudacode/.config/yt-dlp/plugins/yt-dlp-hianime/yt_dlp_plugins/extractor"]
+trust_level = "trusted"
+
+[projects."/home/sudacode/.config"]
+trust_level = "trusted"
+
+[projects."/home/sudacode/.config/mpv-modules/ModernZ"]
+trust_level = "trusted"
+
[notice.model_migrations]
"gpt-5.3-codex" = "gpt-5.4"
diff --git a/.config/SubMiner/config.jsonc##os.Linux b/.config/SubMiner/config.jsonc##os.Linux
index a2a6a30..0527a34 100644
--- a/.config/SubMiner/config.jsonc##os.Linux
+++ b/.config/SubMiner/config.jsonc##os.Linux
@@ -87,6 +87,7 @@
"animatedCrf": 35,
"audioPadding": 0.5,
"fallbackDuration": 3,
+ "syncAnimatedImageToWordAudio": true,
},
"behavior": {
"overwriteAudio": false,
@@ -99,12 +100,13 @@
},
"knownWords": {
"decks": {
- "Minecraft": ["Expression", "Reading"],
- "Kaishi 1.5k": ["Word", "Word Reading"]
+ "Minecraft": ["Expression", "Reading"],
+ "Kaishi 1.5k": ["Word", "Word Reading"],
},
"highlightEnabled": true,
"refreshMinutes": 60,
"matchMode": "headword",
+ "addMinedWordsImmediately": true,
},
"nPlusOne": {
"minSentenceWords": 3,
@@ -154,6 +156,7 @@
"textShadow": "0 3px 10px rgba(0,0,0,0.69)",
"fontStyle": "normal",
// "backgroundColor": "transparent",
+ "backgroundColor": "#232634",
"hoverTokenColor": "#f4dbd6",
"hoverBackground": "rgba(54, 58, 79, 0.84)",
"preserveLineBreaks": false,
@@ -258,10 +261,6 @@
"subtitleDictionaries": true,
"jellyfinRemoteSession": false,
},
- "controller": {
- "preferredGamepadId": "8BitDo 8BitDo Ultimate 2 Wireless Controller for PC (Vendor: 2dc8 Product: 310b)",
- "preferredGamepadLabel": "8BitDo 8BitDo Ultimate 2 Wireless Controller for PC (Vendor: 2dc8 Product: 310b)",
- },
"yomitan": {
"externalProfilePath": "",
},
@@ -271,4 +270,21 @@
"autoStartServer": true, // Automatically start the stats server on launch. Values: true | false
"autoOpenBrowser": false,
}, // Local immersion stats dashboard served on localhost and available as an in-app overlay.
+ "subtitleSidebar": {
+ "enabled": true,
+ "layout": "embedded",
+ "toggleKey": "Backslash",
+ "pauseVideoOnHover": true,
+ "autoScroll": true,
+ "maxWidth": 420,
+ "opacity": 0.69,
+ "backgroundColor": "rgba(36, 39, 58, 0.78)",
+ "textColor": "#cad3f5",
+ "fontFamily": "\"M PLUS 1\", \"Noto Sans CJK JP\", sans-serif",
+ "fontSize": 16,
+ "timestampColor": "#a5adcb",
+ "activeLineColor": "#f5bde6",
+ "activeLineBackgroundColor": "rgba(138, 173, 244, 0.22)",
+ "hoverLineBackgroundColor": "rgba(54, 58, 79, 0.84)",
+ },
}
diff --git a/.config/ghostty/config##Default b/.config/ghostty/config##Default
index 551c4b0..cbc4329 100644
--- a/.config/ghostty/config##Default
+++ b/.config/ghostty/config##Default
@@ -27,6 +27,10 @@ term=xterm-ghostty
link-url = true
link-previews = true
bell-features=system,attention,no-audio
+
+quit-after-last-window-closed = true
+quit-after-last-window-closed-delay = 5m
+
keybind = all:ctrl+enter=unbind
keybind = all:ctrl+shift+j=next_tab
keybind = all:ctrl+shift+k=last_tab
diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
index ef0afdc..40d1415 100644
--- a/.config/hypr/hyprland.conf
+++ b/.config/hypr/hyprland.conf
@@ -34,7 +34,7 @@ monitorv2 {
min_luminance = 0
max_luminance = 1000
max_avg_luminance = 200
- sdrbrightness = 1.2
+ sdrbrightness = 1.0
sdrsaturation = 0.98
}
@@ -72,14 +72,14 @@ exec-once = uwsm app -sb -- hyprpm update -n
exec-once = uwsm app -sb -- hyprpm reload -n
exec-once = $notification_daemon
exec-once = $terminal
-exec-once = uwsm app -sb -S both -t scope -- hyprpm update -nn
-exec-once = uwsm app -sb -S both -t scope -- hyprpm reload -nn
+exec-once = uwsm app -sb -S both -t scope -- hyprpm update -n
+exec-once = uwsm app -sb -S both -t scope -- hyprpm reload -n
exec-once = uwsm app -sb -t service -- nm-applet
exec-once = uwsm app -sb -t service -- waybar -c ~/.config/waybar/catppuccin-macchiato/config.jsonc -s ~/.config/waybar/catppuccin-macchiato/style.css
exec-once = uwsm app -sb -t service -- hyprsunset
exec-once = uwsm app -sb -t service -- /usr/lib/polkit-kde-authentication-agent-1
exec-once = uwsm app -sb -t service -- gnome-keyring-daemon --start --components=secrets,ssh,pkcs11
-# exec-once = uwsm app -sb -t service -- variety
+exec-once = uwsm app -sb -t service -- tailscale systray
exec-once = ~/.local/bin/aria
# exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
diff --git a/.config/hypr/hyprqt6engine.conf b/.config/hypr/hyprqt6engine.conf
index a9f493b..ddecac2 100644
--- a/.config/hypr/hyprqt6engine.conf
+++ b/.config/hypr/hyprqt6engine.conf
@@ -1,5 +1,5 @@
-theme = {
- color_schema = "/usr/share/themes/Colloid-Purple-Dark-Catppuccin"
+theme {
+ color_scheme = "/home/sudacode/.local/share/color-schemes/CatppuccinMacchiatoMauve.colors"
icon_theme = "Colloid-Purple-Catppuccin-Dark"
style = "kvantum-dark"
font_fixed = "JetBrainsMono Nerd Font"
diff --git a/.config/hypr/keybindings.conf b/.config/hypr/keybindings.conf
index 5b73b7e..4df889a 100644
--- a/.config/hypr/keybindings.conf
+++ b/.config/hypr/keybindings.conf
@@ -113,7 +113,7 @@ bind = SUPER, m, exec, ~/.local/bin/mpv-add.sh
bind = SUPER SHIFT, s, exec, slurp | grim -g - - | wl-copy
bind = ,code:107, exec, ~/.local/bin/screenshot
bind = SHIFT ,code:107, exec, ~/.local/bin/screenshot-active-window.sh
-bind = SUPER,code:107, exec, flameshot screen
+bind = SUPER,code:107, exec, ~/.local/bin/screenshot-active-window.sh -s
bind = SUPER, o, exec, ~/.local/bin/ocr.sh
bind = $mainMod, o, exec, ~/.local/bin/rofi-open tab
# bind = $mainMod SHIFT, o, exec, ~/.local/bin/rofi-open window
diff --git a/.config/hypr/windowrules.conf b/.config/hypr/windowrules.conf
index a07f855..dab02ef 100644
--- a/.config/hypr/windowrules.conf
+++ b/.config/hypr/windowrules.conf
@@ -45,6 +45,7 @@ windowrule = opacity 1.0 override, match:class dolphin-emu
windowrule = opacity 1.0 override, match:class steam_app_default
windowrule = opacity 1.0 override, match:class steam_app.*
windowrule = opacity 1.0 override, match:class Rustdesk
+windowrule = opacity 1.0 override, match:class google-chrome
# }}}
# {{{ Misc
@@ -81,7 +82,11 @@ windowrule = border_size 0, match:class SubMiner
windowrule = xray off override, match:class SubMiner
windowrule = no_shadow on, match:class SubMiner
windowrule = no_blur on, match:class SubMiner
+windowrule = no_dim on, match:class SubMiner
+windowrule = opaque on, match:class SubMiner
+windowrule = dim_around off, match:class SubMiner
windowrule = allows_input offf, match:class SubMiner
windowrule = border_size 0, match:class steam_app_1277940
+windowrule = opacity 1.0 override, match:class SubMiner
# {{{ GSM Overlay and LunaTranslator tweaks
diff --git a/.config/mpv-modules/ModernZ b/.config/mpv-modules/ModernZ
index 74885f5..b4c27a8 160000
--- a/.config/mpv-modules/ModernZ
+++ b/.config/mpv-modules/ModernZ
@@ -1 +1 @@
-Subproject commit 74885f5deca861bc913fb4be79001282ade60a2b
+Subproject commit b4c27a8cf4a43c330fcb1dddce5984f25ec4e7f3
diff --git a/.config/mpv-modules/mpv-anilist-updater b/.config/mpv-modules/mpv-anilist-updater
index 2177ee4..5f9400d 160000
--- a/.config/mpv-modules/mpv-anilist-updater
+++ b/.config/mpv-modules/mpv-anilist-updater
@@ -1 +1 @@
-Subproject commit 2177ee4711e396cf9b86f5d379109fc16bfa8434
+Subproject commit 5f9400dd4b852f8cd5dd9800ca90aa0949b80c04
diff --git a/.config/mpv-modules/mpv-youtube-queue b/.config/mpv-modules/mpv-youtube-queue
index 9d1b6d7..236f4ab 160000
--- a/.config/mpv-modules/mpv-youtube-queue
+++ b/.config/mpv-modules/mpv-youtube-queue
@@ -1 +1 @@
-Subproject commit 9d1b6d7eabed9495952201e42a7b66dedb0de032
+Subproject commit 236f4ab39e6e894573aa60e92ca095329c556ec2
diff --git a/.config/mpv/input.conf##os.Linux b/.config/mpv/input.conf##os.Linux
index 6e9c0d1..8abd3b2 100644
--- a/.config/mpv/input.conf##os.Linux
+++ b/.config/mpv/input.conf##os.Linux
@@ -202,6 +202,8 @@ ctrl+K cycle-values keep-open "yes" "no"
ctrl+r script-binding reload-scripts
ctrl+s script_binding autosubsync-menu
+# MBTN_RIGHT script-binding select/context-menu
+
# {{{ sponsorblock
ctrl+g script-binding sponsorblock/set_segment
ctrl+G script-binding sponsorblock/submit_segment
diff --git a/.config/waybar/catppuccin-macchiato/config.jsonc b/.config/waybar/catppuccin-macchiato/config.jsonc
index 91fba80..ed12705 100644
--- a/.config/waybar/catppuccin-macchiato/config.jsonc
+++ b/.config/waybar/catppuccin-macchiato/config.jsonc
@@ -312,13 +312,13 @@
"format": "{icon}",
"format-icons": {
"notification": "",
- "none": " ",
+ "none": "",
"dnd-notification": "",
- "dnd-none": " ",
+ "dnd-none": "",
"inhibited-notification": "",
- "inhibited-none": " ",
+ "inhibited-none": "",
"dnd-inhibited-notification": "",
- "dnd-inhibited-none": " ",
+ "dnd-inhibited-none": "",
},
"return-type": "json",
"exec-if": "which swaync-client",
diff --git a/.config/waybar/catppuccin-macchiato/style.css b/.config/waybar/catppuccin-macchiato/style.css
index 93f6e39..c4fc1f4 100644
--- a/.config/waybar/catppuccin-macchiato/style.css
+++ b/.config/waybar/catppuccin-macchiato/style.css
@@ -185,6 +185,7 @@ label:focus {
#network {
background-color: @peach;
color: @mantle;
+ padding: 0 18px 0 10px;
}
#network.disconnected {
@@ -273,7 +274,7 @@ label:focus {
background-color: @yellow;
color: @mantle;
padding: 0 10px;
- margin: 5px 1px 5px 5px;
+ margin: 5px 1px 5px 1px;
}
#custom-launcher {
@@ -330,7 +331,6 @@ label:focus {
font-family: inherit;
padding: 0 10px;
margin: 5px 1px;
- min-width: 1em;
background-color: @maroon;
color: @mantle;
}
diff --git a/.config/waybar/scripts/wttr.sh b/.config/waybar/scripts/wttr.sh
index da67c44..789c2c0 100755
--- a/.config/waybar/scripts/wttr.sh
+++ b/.config/waybar/scripts/wttr.sh
@@ -116,7 +116,7 @@ fetch_weather() {
--show-error \
--fail \
--max-time 10 \
- "https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m,relative_humidity_2m,apparent_temperature,weather_code,wind_speed_10m,is_day&timezone=$(url_encode "$timezone")" 2>/dev/null || true
+ "https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m,relative_humidity_2m,apparent_temperature,weather_code,wind_speed_10m,is_day&temperature_unit=fahrenheit&wind_speed_unit=mph&timezone=$(url_encode "$timezone")" 2>/dev/null || true
}
format_weather() {
@@ -140,8 +140,8 @@ format_weather() {
humidity="$(jq -r '.current.relative_humidity_2m | round | "\(.)"' <<<"$weather_json")"
wind="$(jq -r '.current.wind_speed_10m | round | "\(.)"' <<<"$weather_json")"
- text="${icon} ${temperature}°C"
- tooltip="${place}: ${description}. Feels like ${feels_like}°C, humidity ${humidity}%, wind ${wind} km/h"
+ text="${icon} ${temperature}°F"
+ tooltip="${place}: ${description}. Feels like ${feels_like}°F, humidity ${humidity}%, wind ${wind} mph"
emit_json "$text" "$tooltip"
}
diff --git a/projects/scripts/screenshot-active-window.sh b/projects/scripts/screenshot-active-window.sh
index 4a73141..2f3ae63 100755
--- a/projects/scripts/screenshot-active-window.sh
+++ b/projects/scripts/screenshot-active-window.sh
@@ -1,7 +1,27 @@
#!/usr/bin/env bash
+save_to_disk=false
+while getopts "s" opt; do
+ case $opt in
+ s) save_to_disk=true ;;
+ *) echo "Usage: $0 [-s]" && exit 1 ;;
+ esac
+done
+
tmpfile=$(mktemp /tmp/screenshot-XXXXXX.png)
grim -g "$(hyprctl activewindow -j | jq -r '.at[0],.at[1],.size[0],.size[1]' | tr '\n' ' ' | awk '{print $1","$2" "$3"x"$4}')" "$tmpfile"
-wl-copy < "$tmpfile"
-notify-send -i "$tmpfile" "Screenshot of active window copied to clipboard"
+
+if $save_to_disk; then
+ savepath=$(zenity --file-selection --save --confirm-overwrite --title="Save Screenshot" --filename="screenshot.png" --file-filter="PNG files|*.png")
+ if [[ -n "$savepath" ]]; then
+ cp "$tmpfile" "$savepath"
+ notify-send -i "$savepath" "Screenshot saved to $savepath"
+ else
+ notify-send "Screenshot save cancelled"
+ fi
+else
+ wl-copy < "$tmpfile"
+ notify-send -i "$tmpfile" "Screenshot of active window copied to clipboard"
+fi
+
rm -f "$tmpfile"