This commit is contained in:
2026-05-27 18:38:21 -07:00
parent 66a79cef2f
commit a33ee950b2
3 changed files with 77 additions and 406 deletions
-318
View File
@@ -1,318 +0,0 @@
{
"keybindings": [
{
"key": "KeyF",
"command": ["cycle", "fullscreen"],
},
{
"key": "KeyR",
"command": ["add", "sub-pos", -5],
},
{
"key": "Shift+KeyR",
"command": ["add", "sub-pos", 5],
},
{
"key": "KeyJ",
"command": ["cycle", "sub"],
},
{
"key": "BracketRight",
"command": ["add", "sub-delay", 0.1],
},
{
"key": "BracketLeft",
"command": ["add", "sub-delay", -0.1],
},
{
"key": "Backslash",
"command": ["set_property", "sub-delay", 0],
},
],
"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,
"texthooker": {
"launchAtStartup": true,
"openBrowser": false,
},
"websocket": {
"enabled": "auto",
"port": 6677,
},
"ankiConnect": {
"enabled": true,
"url": "http://127.0.0.1:8765",
"deck": "Minecraft",
"pollingRate": 500,
"proxy": {
"enabled": true,
"host": "127.0.0.1",
"port": 8766,
"upstreamUrl": "http://127.0.0.1:8765",
},
"fields": {
"audio": "ExpressionAudio",
"image": "Picture",
"sentence": "Sentence",
"miscInfo": "MiscInfo",
"translation": "SelectionText",
},
"ai": {
"enabled": true,
"model": "openai/gpt-oss-120b:free",
"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,
"syncAnimatedImageToWordAudio": true,
},
"behavior": {
"overwriteAudio": false,
"overwriteImage": true,
"mediaInsertMode": "append",
"highlightWord": true,
"notificationType": "both",
"showNotificationOnUpdate": true,
"autoUpdateNewCards": true,
},
"knownWords": {
"decks": {
"Minecraft": ["Expression", "Reading"],
"Kaishi 1.5k": ["Word", "Word Reading"],
},
"highlightEnabled": true,
"refreshMinutes": 60,
"matchMode": "headword",
"addMinedWordsImmediately": true,
},
"nPlusOne": {
"minSentenceWords": 3,
},
"metadata": {
"pattern": "[SubMiner] %f (%t)",
},
"isLapis": {
"enabled": true,
"sentenceCardModel": "Lapis Morph",
},
"isKiku": {
"enabled": true,
"fieldGrouping": "manual",
"deleteDuplicateInAuto": false,
},
"tags": ["SubMiner"],
},
"ai": {
"enabled": true,
"alwaysUseAiTranslation": false,
"apiKeyCommand": "cat ~/.openrouterapikey",
"baseUrl": "https://openrouter.ai/api/v1",
"sourceLanguage": "Japanese",
},
"secondarySub": {
"autoLoadSecondarySub": true,
"secondarySubLanguages": ["en", "eng"],
},
"youtube": {
"primarySubLanguages": ["ja", "jpn"],
},
"subsync": {
"defaultMode": "manual",
"alass_path": null,
"ffsubsync_path": null,
"ffmpeg_path": null,
"replace": true,
},
"subtitleStyle": {
"hoverTokenColor": "#f4dbd6",
"hoverTokenBackgroundColor": "transparent",
"preserveLineBreaks": false,
"autoPauseVideoOnHover": true,
"autoPauseVideoOnYomitanPopup": true,
"secondary": {
"css": {
"font-family": "Manrope, Inter",
"color": "#cad3f5",
"background-color": "transparent",
"font-size": "24px",
"text-shadow": "0 1px 4px rgba(0,0,0,0.85), 0 0 10px rgba(0,0,0,0.5)",
"paint-order": "stroke fill",
"-webkit-text-stroke": "0.75px #000"
},
},
"frequencyDictionary": {
"enabled": true,
"sourcePath": "",
"topX": 10000,
"mode": "single",
"matchMode": "headword",
"singleColor": "#f5a97f",
"bandedColors": ["#ed8796", "#f5a97f", "#f9e2af", "#8bd5ca", "#8aadf4"],
},
"enableJlpt": true,
"jlptColors": {
"N1": "#ed8796",
"N2": "#f5a97f",
"N3": "#f9e2af",
"N4": "#8bd5ca",
"N5": "#8aadf4",
},
"nPlusOneColor": "#c6a0f6",
"knownWordColor": "#a6da95",
"css": {
"font-family": "Hiragino Sans, M PLUS 1, Source Han Sans JP, Noto Sans CJK JP",
"color": "#cad3f5",
"background-color": "transparent",
"font-size": "38px",
"font-weight": "500",
"font-style": "normal",
"line-height": "1.4",
"letter-spacing": "0.02em",
"word-spacing": "0",
"font-kerning": "normal",
"text-rendering": "optimizeLegibility",
"text-shadow": "0 2px 6px rgba(0,0,0,0.9), 0 0 12px rgba(0,0,0,0.55)",
"paint-order": "stroke fill",
"-webkit-text-stroke": "1.5px #000",
"backdrop-filter": "blur(6px)"
},
},
"jimaku": {
"apiKeyCommand": "cat ~/.jimaku-api-key",
"apiBaseUrl": "https://jimaku.cc",
"languagePreference": "ja",
"maxEntryResults": 10,
},
"anilist": {
"enabled": true,
"characterDictionary": {
"enabled": true,
"collapsibleSections": {
"description": false,
"characterInformation": false,
"voicedBy": false,
},
},
},
"immersionTracking": {
"enabled": true,
"dbPath": "",
},
"jellyfin": {
"enabled": true,
"serverUrl": "http://pve-main:8096",
"username": "sudacode",
"deviceId": "subminer",
"clientName": "SubMiner",
"clientVersion": "0.1.0",
"defaultLibraryId": "",
"directPlayPreferred": true,
"remoteControlEnabled": true,
"remoteControlAutoConnect": true,
"autoAnnounce": false,
"remoteControlDeviceName": "SubMiner",
"directPlayContainers": ["mkv", "mp4", "webm", "mov", "flac", "mp3", "aac"],
"transcodeVideoCodec": "h265",
"pullPictures": true,
"iconCacheDir": "~/S/japanese/subminer-jellyfin-icons",
},
"logging": {
"level": "info",
},
"discordPresence": {
"enabled": true,
"detailsTemplate": "Mining and crafting (Anki cards)",
"stateTemplate": "Idle",
"largeImageKey": "subminer-logo",
"largeImageText": "SubMiner",
"smallImageKey": "study",
"smallImageText": "Sentence Mining",
"buttonLabel": "",
"buttonUrl": "",
"updateIntervalMs": 15000,
"debounceMs": 750,
},
"startupWarmups": {
"lowPowerMode": false,
"mecab": true,
"yomitanExtension": true,
"subtitleDictionaries": true,
"jellyfinRemoteSession": false,
},
"yomitan": {
"externalProfilePath": "",
},
"stats": {
"toggleKey": "Backquote",
"serverPort": 6969,
"autoStartServer": true,
"autoOpenBrowser": false,
},
"subtitleSidebar": {
"enabled": true,
"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)",
},
"controller": {
"enabled": true,
"profiles": {
"Sony Interactive Entertainment Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 09cc)": {
"label": "Sony Interactive Entertainment Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 09cc)",
"bindings": {
"toggleMpvPause": {
"kind": "button",
"buttonIndex": 10,
},
"quitMpv": {
"kind": "button",
"buttonIndex": 8,
},
},
},
},
},
"mpv": {
"executablePath": "",
"launchMode": "normal",
},
"updates": {
"enabled": true,
"checkIntervalHours": 24,
"notificationType": "system",
"channel": "prerelease",
},
}
+25 -24
View File
@@ -41,32 +41,32 @@ hl.bind("CTRL+ALT + j", hl.dsp.focus({ monitor = "r" }))
hl.bind("CTRL+ALT + k", hl.dsp.focus({ monitor = "l" }))
-- Switch workspaces with mainMod + [0-9]
hl.bind(mainMod .. " + 1", hl.dsp.focus({ workspace = 1 }))
hl.bind(mainMod .. " + 2", hl.dsp.focus({ workspace = 2 }))
hl.bind(mainMod .. " + 3", hl.dsp.focus({ workspace = 3 }))
hl.bind(mainMod .. " + 4", hl.dsp.focus({ workspace = 4 }))
hl.bind(mainMod .. " + 5", hl.dsp.focus({ workspace = 5 }))
hl.bind(mainMod .. " + 6", hl.dsp.focus({ workspace = 6 }))
hl.bind(mainMod .. " + 7", hl.dsp.focus({ workspace = 7 }))
hl.bind(mainMod .. " + 8", hl.dsp.focus({ workspace = 8 }))
hl.bind(mainMod .. " + 9", hl.dsp.focus({ workspace = 9 }))
hl.bind(mainMod .. " + 0", hl.dsp.focus({ workspace = 10 }))
for i = 1, 10 do
local key = i % 10
hl.bind(
mainMod .. " + " .. key,
hl.dsp.focus({
workspace = i,
silent = true,
})
)
end
-- Move active window to a workspace with mainMod + SHIFT + [0-9]
hl.bind(mainMod .. " + SHIFT + 1", hl.dsp.window.move({ workspace = 1, silent = true }))
hl.bind(mainMod .. " + SHIFT + 2", hl.dsp.window.move({ workspace = 2, silent = true }))
hl.bind(mainMod .. " + SHIFT + 3", hl.dsp.window.move({ workspace = 3, silent = true }))
hl.bind(mainMod .. " + SHIFT + 4", hl.dsp.window.move({ workspace = 4, silent = true }))
hl.bind(mainMod .. " + SHIFT + 5", hl.dsp.window.move({ workspace = 5, silent = true }))
hl.bind(mainMod .. " + SHIFT + 6", hl.dsp.window.move({ workspace = 6, silent = true }))
hl.bind(mainMod .. " + SHIFT + 7", hl.dsp.window.move({ workspace = 7, silent = true }))
hl.bind(mainMod .. " + SHIFT + 8", hl.dsp.window.move({ workspace = 8, silent = true }))
hl.bind(mainMod .. " + SHIFT + 9", hl.dsp.window.move({ workspace = 9, silent = true }))
hl.bind(mainMod .. " + SHIFT + 0", hl.dsp.window.move({ workspace = 10, silent = true }))
for i = 1, 10 do
local key = i % 10 -- workspace 10 maps to key 0
hl.bind(
mainMod .. " + SHIFT + " .. key,
hl.dsp.window.move({
workspace = i,
follow = false,
silent = true,
})
)
end
-- Example special workspace (scratchpad)
hl.bind("SUPER + S", hl.dsp.workspace.toggle_special("magic"))
hl.bind("CTRL + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" }))
-- hl.bind("SUPER + S", hl.dsp.workspace.toggle_special("magic"))
-- hl.bind("CTRL + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" }))
-- Scroll through existing workspaces with mainMod + scroll
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
@@ -128,7 +128,8 @@ hl.bind(mainMod .. " + SHIFT + n", hl.dsp.exec_cmd("swaync-client -t"))
-- mpv add
hl.bind("SUPER + m", hl.dsp.exec_cmd("~/.local/bin/mpv-add.sh"))
hl.bind("SUPER + SHIFT + s", hl.dsp.exec_cmd("slurp | grim -g - - | wl-copy"))
-- hl.bind("SUPER + SHIFT + s", hl.dsp.exec_cmd("slurp | grim -g - - | wl-copy"))
hl.bind("SUPER + SHIFT + s", hl.dsp.exec_cmd([[sh -c 'grim -g "$(slurp -d)" - | wl-copy']]))
hl.bind("code:107", hl.dsp.exec_cmd("~/.local/bin/screenshot"))
hl.bind("SHIFT + code:107", hl.dsp.exec_cmd("~/.local/bin/screenshot-active-window.sh"))
hl.bind("SUPER + code:107", hl.dsp.exec_cmd("~/.local/bin/screenshot-active-window.sh -s"))
+52 -64
View File
@@ -1,6 +1,6 @@
# Language and display
# set language (for available options, see: https://github.com/Samillion/ModernZ/blob/main/docs/TRANSLATIONS.md)
language=en
language=default
# set layout: "modern" or "modern-compact"
layout=modern
# set icon theme. accepts fluent or material
@@ -14,8 +14,6 @@ font=mpv-osd-symbols
idlescreen=yes
# show OSC window top bar: "auto", "yes", or "no" (borderless/fullscreen)
window_top_bar=auto
# show window controls in fullscreen
window_controls_fullscreen=yes
# show OSC when windowed
showwindowed=yes
# show OSC when fullscreen
@@ -24,32 +22,31 @@ showfullscreen=yes
showonselect=no
# show OSC when paused
showonpause=yes
# disable OSC hide timeout when paused
keeponpause=yes
# keep OSC visible while paused: no, bottombar, both
keeponpause=both
# disable Santa hat in December
greenandgrumpy=no
# OSC behaviour and scaling
# time (in ms) before OSC hides if no mouse movement
hidetimeout=1500
# keep OSC visible while cursor hovers over bottom or top bar
keep_with_cursor=yes
# fade-out duration (in ms), set to 0 for no fade
fadeduration=200
# whether to enable fade-in effect
fadein=no
# minimum mouse movement (in pixels) required to show OSC
minmousemove=0
# mode for showing OSC/WC on mouse move: always, zones, independent
zones_hover_mode=zones
# height of the bottom hover zone (in pixels)
bottomhover_zone=130
# height of the top hover zone (in pixels)
tophover_zone=130
# controls how much of the window ignores mouse movement for showing the osc
# 0.0 always shows on movement, 1.0 only shows when directly hovered
deadzonesize=0.75
# hide behavior when cursor enters deadzone or leaves window: instant or timeout
deadzone_hide=instant
# show OSC when seeking
osc_on_seek=yes
# show OSC/window controls on start of every file (no, bottom, top, both)
osc_on_start=both
# keep OSC visible if mouse cursor is within OSC boundaries
osc_keep_with_cursor=yes
# pause video while seeking with mouse move (on button hold)
mouse_seek_pause=yes
# force show seekbar tooltip on mouse drag, even if not hovering seekbar
@@ -101,12 +98,12 @@ speed_font_size=16
# Title bar settings
# show window title in borderless/fullscreen mode
show_window_title=no
# same as title but for window_top_bar
window_title=${media-title}
# window title font size
window_title_font_size=26
# show window controls (close, minimize, maximize) in borderless/fullscreen
window_controls=yes
# show window controls (top bar) and bottom bar independently on hover
windowcontrols_independent=yes
# Subtitle and OSD display settings
# IMPORTANT: It is recommended to add the following
@@ -141,8 +138,6 @@ jump_mode=relative
jump_softrepeat=yes
# show the chapter skip backward and forward buttons
chapter_skip_buttons=no
# enable continuous skipping when holding down chapter skip buttons
chapter_softrepeat=yes
# show next/previous playlist track buttons
track_nextprev_buttons=yes
@@ -172,18 +167,11 @@ loop_button=no
shuffle_button=no
# show speed control button
speed_button=no
# speed change amount per click
speed_button_click=1
# speed change amount on scroll
speed_button_scroll=0.25
# show info button
info_button=yes
# show fullscreen toggle button
fullscreen_button=yes
# enable loop with mouse actions on pause button
loop_in_pause=yes
# force buttons to always be active. can add: playlist_prev,playlist_next
buttons_always_active=none
@@ -219,12 +207,16 @@ windowcontrols_min_hover=#A6DA95
title_color=#CAD3F5
# color of the cache information
cache_info_color=#CAD3F5
# color of the seekbar progress and handle
# color of the seekbar progress
seekbarfg_color=#C6A0F6
# color of the remaining seekbar
seekbarbg_color=#B7BDF8
# color of the cache ranges on the seekbar
seekbar_cache_color=#A5ADCB
# color of the seekbar handle
seek_handle_color=#C6A0F6
# inner border color drawn inside the seekbar handle (set to disable to disable)
seek_handle_border_color=#C6A0F6
# match volume bar color with seekbar color (ignores side_buttons_color)
volumebar_match_seek_color=no
# color of the timestamps (below seekbar)
@@ -242,42 +234,44 @@ playpause_color=#C6A0F6
held_element_color=#939AB7
# color of a hovered button when hover_effect includes "color"
hover_effect_color=#C6A0F6
# color of the border for thumbnails (with thumbfast)
thumbnail_border_color=#181926
# color of the border outline for thumbnails
thumbnail_border_outline=#363A4F
# color of the background for thumbnail box
thumbnail_box_color=#181926
# color of the border outline for thumbnail box
thumbnail_box_outline=#363A4F
# alpha of the OSC background box
fade_alpha=130
# strength of the OSC background fade (0 to disable)
osc_fade_strength=100
# blur strength for the OSC alpha fade. caution: high values can take a lot of CPU time to render
fade_blur_strength=100
# use with "fade_blur_strength=0" to create a transparency box
fade_transparency_strength=0
# alpha of the window title bar (0 to disable)
window_fade_alpha=100
# strength of the window title bar fade (0 to disable)
window_fade_strength=100
# blur strength for the window title bar. caution: high values can take a lot of CPU time to render
window_fade_blur_strength=100
# use with "window_fade_blur_strength=0" to create a transparency box
window_fade_transparency_strength=0
# width of the thumbnail border (for thumbfast)
thumbnail_border=3
# rounded corner radius for thumbnail border (0 to disable)
thumbnail_border_radius=3
# thumbnail box padding around the image
thumbnail_box_padding=4.5
# round corner radius for thumbnail box border (0 to disable)
thumbnail_box_radius=3
# thumbnail box border outline size (thickness)
thumbnail_box_outline_size=3
# Button hover effects
# active button hover effects: "glow", "size", "color"; can use multiple separated by commas
# Button interaction settings
# active button hover effects: glow, size, color, box; can use multiple separated by commas
hover_effect=size,glow,color
# relative size of a hovered button if "size" effect is active
hover_button_size=115
button_hover_size=115
# relative size of a button when held/pressed. below 100 shrinks button when held down
button_held_size=100
# alpha of the hover background box when a button is held down
button_held_box_alpha=18
# glow intensity when "glow" hover effect is active
button_glow_amount=5
# apply hover size effect to slider handle
hover_effect_for_sliders=yes
# Tooltips and hints
# enable tooltips for disabled buttons and elements
tooltips_for_disabled_elements=yes
# enable text hints for info, loop, ontop, and screenshot buttons
# relative size of a hovered slider handle (100 = no size change)
slider_hover_size=115
# enable tooltips for most buttons. seek and volume tooltips are always enabled
tooltip_hints=yes
# Progress bar settings
@@ -331,30 +325,24 @@ tick_delay_follow_display_fps=no
# Elements Position
# Useful when adjusting font size or type
# title height position above seekbar
title_height=96
# title height position if a chapter title is below it
title_with_chapter_height=108
# chapter title height position above seekbar
chapter_title_height=91
# time codes height position
time_codes_height=35
# time codes height position with portrait window
time_codes_centered_height=57
# title vertical offset relative to seekbar
title_offset=20
# title vertical offset if a chapter title is below it
title_with_chapter_offset=5
# chapter title vertical offset relative to seekbar
chapter_title_offset=18
# chapter offset when shown above title
chapter_above_title_offset=3
# time codes vertical offset relative to seekbar
time_codes_offset=0
# tooltip height position offset
tooltip_height_offset=2
# portrait window width trigger to move some elements
portrait_window_trigger=1000
# hide volume bar trigger window width
hide_volume_bar_trigger=1150
# osc height offset if title above seekbar is disabled
notitle_osc_h_offset=25
# osc height offset if chapter title is disabled or doesn't exist
nochapter_osc_h_offset=10
# seek hover timecodes tooltip height position offset
seek_hover_tooltip_h_offset=0
# osc height without offsets
osc_height=132
osc_height=100
## Mouse commands
## details: https://github.com/Samillion/ModernZ#mouse-commands-user-options