mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2026-02-04 18:36:33 -08:00
Compare commits
45 Commits
63e6fad216
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 3218ceada1 | |||
| dca8f0df32 | |||
|
da80481d63
|
|||
|
e6c89cf38b
|
|||
|
35357f1674
|
|||
|
bd6eefe084
|
|||
| 4eda790932 | |||
| d57275597d | |||
| 75a9cc360c | |||
| 5b9cbbba99 | |||
|
c867434c8d
|
|||
|
63cd7242b6
|
|||
|
7f28515e8d
|
|||
|
|
88f0d9938c | ||
|
|
7957d0b57c | ||
|
7d47044e5c
|
|||
|
baa897573e
|
|||
|
6ce0155364
|
|||
|
d32f79f406
|
|||
|
f301f16949
|
|||
|
cf14d30091
|
|||
|
b238daee8c
|
|||
|
61c4425c6e
|
|||
|
15d55786f3
|
|||
|
e9e6dfa2d3
|
|||
| fb7b605e55 | |||
| 84185b8dc6 | |||
| 063a3aaf9b | |||
| 2b53dd6ee1 | |||
|
f16148c0ca
|
|||
|
|
48b5026e98 | ||
|
af1500e5dc
|
|||
|
|
3254428cdd | ||
|
|
cdd92fdcd8 | ||
|
e97025ff7a
|
|||
|
b511d4af6c
|
|||
|
78d2487e78
|
|||
|
227f9dc0e8
|
|||
|
1f59371ef4
|
|||
|
96b74296e7
|
|||
|
d6ef1e1da7
|
|||
|
|
ec94c68671 | ||
|
|
aa1696b3f3 | ||
|
5efefaf6de
|
|||
|
6a852bb48c
|
43
.claude/settings.json##os.Darwin
Normal file
43
.claude/settings.json##os.Darwin
Normal 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"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
43
.claude/settings.json##os.Linux
Normal file
43
.claude/settings.json##os.Linux
Normal 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"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
44
.claude/settings.json##os.WSL
Normal file
44
.claude/settings.json##os.WSL
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"attribution": {
|
||||||
|
"commit": "",
|
||||||
|
"pr": ""
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"deny": [
|
||||||
|
"Read(.env)",
|
||||||
|
"Read(~/.aws/**)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hooks": {
|
||||||
|
"Notification": [
|
||||||
|
{
|
||||||
|
"matcher": "",
|
||||||
|
"hooks": [
|
||||||
|
{
|
||||||
|
"type": "command",
|
||||||
|
"command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Claude Code needs your attention', 'Claude Code')\""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"model": "haiku"
|
||||||
|
}
|
||||||
272
.config/btop/btop.conf
Normal file
272
.config/btop/btop.conf
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
#? Config file for btop v.1.4.6
|
||||||
|
|
||||||
|
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
|
||||||
|
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
|
||||||
|
color_theme = "TTY"
|
||||||
|
|
||||||
|
#* If the theme set background should be shown, set to False if you want terminal background transparency.
|
||||||
|
theme_background = true
|
||||||
|
|
||||||
|
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
|
||||||
|
truecolor = true
|
||||||
|
|
||||||
|
#* Set to true to force tty mode regardless if a real tty has been detected or not.
|
||||||
|
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
|
||||||
|
force_tty = false
|
||||||
|
|
||||||
|
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
|
||||||
|
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
|
||||||
|
#* Use whitespace " " as separator between different presets.
|
||||||
|
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
|
||||||
|
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
|
||||||
|
|
||||||
|
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
|
||||||
|
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
|
||||||
|
vim_keys = true
|
||||||
|
|
||||||
|
#* Rounded corners on boxes, is ignored if TTY mode is ON.
|
||||||
|
rounded_corners = true
|
||||||
|
|
||||||
|
#* Use terminal synchronized output sequences to reduce flickering on supported terminals.
|
||||||
|
terminal_sync = true
|
||||||
|
|
||||||
|
#* Default symbols to use for graph creation, "braille", "block" or "tty".
|
||||||
|
#* "braille" offers the highest resolution but might not be included in all fonts.
|
||||||
|
#* "block" has half the resolution of braille but uses more common characters.
|
||||||
|
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
|
||||||
|
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
|
||||||
|
graph_symbol = "braille"
|
||||||
|
|
||||||
|
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||||
|
graph_symbol_cpu = "default"
|
||||||
|
|
||||||
|
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
|
||||||
|
graph_symbol_gpu = "default"
|
||||||
|
|
||||||
|
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||||
|
graph_symbol_mem = "default"
|
||||||
|
|
||||||
|
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||||
|
graph_symbol_net = "default"
|
||||||
|
|
||||||
|
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||||
|
graph_symbol_proc = "default"
|
||||||
|
|
||||||
|
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
|
||||||
|
shown_boxes = "cpu net proc mem"
|
||||||
|
|
||||||
|
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
|
||||||
|
update_ms = 2000
|
||||||
|
|
||||||
|
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
|
||||||
|
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
|
||||||
|
proc_sorting = "memory"
|
||||||
|
|
||||||
|
#* Reverse sorting order, True or False.
|
||||||
|
proc_reversed = false
|
||||||
|
|
||||||
|
#* Show processes as a tree.
|
||||||
|
proc_tree = false
|
||||||
|
|
||||||
|
#* Use the cpu graph colors in the process list.
|
||||||
|
proc_colors = true
|
||||||
|
|
||||||
|
#* Use a darkening gradient in the process list.
|
||||||
|
proc_gradient = true
|
||||||
|
|
||||||
|
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
|
||||||
|
proc_per_core = false
|
||||||
|
|
||||||
|
#* Show process memory as bytes instead of percent.
|
||||||
|
proc_mem_bytes = true
|
||||||
|
|
||||||
|
#* Show cpu graph for each process.
|
||||||
|
proc_cpu_graphs = true
|
||||||
|
|
||||||
|
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
|
||||||
|
proc_info_smaps = false
|
||||||
|
|
||||||
|
#* Show proc box on left side of screen instead of right.
|
||||||
|
proc_left = false
|
||||||
|
|
||||||
|
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
|
||||||
|
proc_filter_kernel = false
|
||||||
|
|
||||||
|
#* In tree-view, always accumulate child process resources in the parent process.
|
||||||
|
proc_aggregate = false
|
||||||
|
|
||||||
|
#* Should cpu and memory usage display be preserved for dead processes when paused.
|
||||||
|
keep_dead_proc_usage = false
|
||||||
|
|
||||||
|
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
|
||||||
|
#* Select from a list of detected attributes from the options menu.
|
||||||
|
cpu_graph_upper = "Auto"
|
||||||
|
|
||||||
|
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
|
||||||
|
#* Select from a list of detected attributes from the options menu.
|
||||||
|
cpu_graph_lower = "Auto"
|
||||||
|
|
||||||
|
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
|
||||||
|
show_gpu_info = "Auto"
|
||||||
|
|
||||||
|
#* Toggles if the lower CPU graph should be inverted.
|
||||||
|
cpu_invert_lower = true
|
||||||
|
|
||||||
|
#* Set to True to completely disable the lower CPU graph.
|
||||||
|
cpu_single_graph = false
|
||||||
|
|
||||||
|
#* Show cpu box at bottom of screen instead of top.
|
||||||
|
cpu_bottom = false
|
||||||
|
|
||||||
|
#* Shows the system uptime in the CPU box.
|
||||||
|
show_uptime = true
|
||||||
|
|
||||||
|
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
|
||||||
|
show_cpu_watts = true
|
||||||
|
|
||||||
|
#* Show cpu temperature.
|
||||||
|
check_temp = true
|
||||||
|
|
||||||
|
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
|
||||||
|
cpu_sensor = "Auto"
|
||||||
|
|
||||||
|
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
|
||||||
|
show_coretemp = true
|
||||||
|
|
||||||
|
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
|
||||||
|
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
|
||||||
|
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
|
||||||
|
#* Example: "4:0 5:1 6:3"
|
||||||
|
cpu_core_map = ""
|
||||||
|
|
||||||
|
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
|
||||||
|
temp_scale = "celsius"
|
||||||
|
|
||||||
|
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
|
||||||
|
base_10_sizes = false
|
||||||
|
|
||||||
|
#* Show CPU frequency.
|
||||||
|
show_cpu_freq = true
|
||||||
|
|
||||||
|
#* How to calculate CPU frequency, available values: "first", "range", "lowest", "highest" and "average".
|
||||||
|
freq_mode = "first"
|
||||||
|
|
||||||
|
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
|
||||||
|
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
|
||||||
|
clock_format = "%X"
|
||||||
|
|
||||||
|
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
|
||||||
|
background_update = true
|
||||||
|
|
||||||
|
#* Custom cpu model name, empty string to disable.
|
||||||
|
custom_cpu_name = ""
|
||||||
|
|
||||||
|
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
|
||||||
|
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
|
||||||
|
disks_filter = ""
|
||||||
|
|
||||||
|
#* Show graphs instead of meters for memory values.
|
||||||
|
mem_graphs = true
|
||||||
|
|
||||||
|
#* Show mem box below net box instead of above.
|
||||||
|
mem_below_net = false
|
||||||
|
|
||||||
|
#* Count ZFS ARC in cached and available memory.
|
||||||
|
zfs_arc_cached = true
|
||||||
|
|
||||||
|
#* If swap memory should be shown in memory box.
|
||||||
|
show_swap = true
|
||||||
|
|
||||||
|
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
|
||||||
|
swap_disk = true
|
||||||
|
|
||||||
|
#* If mem box should be split to also show disks info.
|
||||||
|
show_disks = true
|
||||||
|
|
||||||
|
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
|
||||||
|
only_physical = true
|
||||||
|
|
||||||
|
#* Read disks list from /etc/fstab. This also disables only_physical.
|
||||||
|
use_fstab = true
|
||||||
|
|
||||||
|
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
|
||||||
|
zfs_hide_datasets = false
|
||||||
|
|
||||||
|
#* Set to true to show available disk space for privileged users.
|
||||||
|
disk_free_priv = false
|
||||||
|
|
||||||
|
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
|
||||||
|
show_io_stat = true
|
||||||
|
|
||||||
|
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
|
||||||
|
io_mode = false
|
||||||
|
|
||||||
|
#* Set to True to show combined read/write io graphs in io mode.
|
||||||
|
io_graph_combined = false
|
||||||
|
|
||||||
|
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
|
||||||
|
#* Example: "/mnt/media:100 /:20 /boot:1".
|
||||||
|
io_graph_speeds = ""
|
||||||
|
|
||||||
|
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
|
||||||
|
net_download = 100
|
||||||
|
|
||||||
|
net_upload = 100
|
||||||
|
|
||||||
|
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
|
||||||
|
net_auto = true
|
||||||
|
|
||||||
|
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
|
||||||
|
net_sync = true
|
||||||
|
|
||||||
|
#* Starts with the Network Interface specified here.
|
||||||
|
net_iface = ""
|
||||||
|
|
||||||
|
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
|
||||||
|
base_10_bitrate = "Auto"
|
||||||
|
|
||||||
|
#* Show battery stats in top right if battery is present.
|
||||||
|
show_battery = true
|
||||||
|
|
||||||
|
#* Which battery to use if multiple are present. "Auto" for auto detection.
|
||||||
|
selected_battery = "Auto"
|
||||||
|
|
||||||
|
#* Show power stats of battery next to charge indicator.
|
||||||
|
show_battery_watts = true
|
||||||
|
|
||||||
|
#* Set loglevel for "~/.local/state/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
|
||||||
|
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
|
||||||
|
log_level = "WARNING"
|
||||||
|
|
||||||
|
#* Automatically save current settings to config file on exit.
|
||||||
|
save_config_on_exit = true
|
||||||
|
|
||||||
|
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
|
||||||
|
nvml_measure_pcie_speeds = true
|
||||||
|
|
||||||
|
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
|
||||||
|
rsmi_measure_pcie_speeds = true
|
||||||
|
|
||||||
|
#* Horizontally mirror the GPU graph.
|
||||||
|
gpu_mirror_graph = true
|
||||||
|
|
||||||
|
#* Set which GPU vendors to show. Available values are "nvidia amd intel"
|
||||||
|
shown_gpus = "nvidia amd intel"
|
||||||
|
|
||||||
|
#* Custom gpu0 model name, empty string to disable.
|
||||||
|
custom_gpu_name0 = ""
|
||||||
|
|
||||||
|
#* Custom gpu1 model name, empty string to disable.
|
||||||
|
custom_gpu_name1 = ""
|
||||||
|
|
||||||
|
#* Custom gpu2 model name, empty string to disable.
|
||||||
|
custom_gpu_name2 = ""
|
||||||
|
|
||||||
|
#* Custom gpu3 model name, empty string to disable.
|
||||||
|
custom_gpu_name3 = ""
|
||||||
|
|
||||||
|
#* Custom gpu4 model name, empty string to disable.
|
||||||
|
custom_gpu_name4 = ""
|
||||||
|
|
||||||
|
#* Custom gpu5 model name, empty string to disable.
|
||||||
|
custom_gpu_name5 = ""
|
||||||
83
.config/btop/themes/catppuccin_frappe.theme
Normal file
83
.config/btop/themes/catppuccin_frappe.theme
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
# Main background, empty for terminal default, need to be empty if you want transparent background
|
||||||
|
theme[main_bg]="#303446"
|
||||||
|
|
||||||
|
# Main text color
|
||||||
|
theme[main_fg]="#C6D0F5"
|
||||||
|
|
||||||
|
# Title color for boxes
|
||||||
|
theme[title]="#C6D0F5"
|
||||||
|
|
||||||
|
# Highlight color for keyboard shortcuts
|
||||||
|
theme[hi_fg]="#8CAAEE"
|
||||||
|
|
||||||
|
# Background color of selected item in processes box
|
||||||
|
theme[selected_bg]="#51576D"
|
||||||
|
|
||||||
|
# Foreground color of selected item in processes box
|
||||||
|
theme[selected_fg]="#8CAAEE"
|
||||||
|
|
||||||
|
# Color of inactive/disabled text
|
||||||
|
theme[inactive_fg]="#838BA7"
|
||||||
|
|
||||||
|
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
|
||||||
|
theme[graph_text]="#F2D5CF"
|
||||||
|
|
||||||
|
# Background color of the percentage meters
|
||||||
|
theme[meter_bg]="#51576D"
|
||||||
|
|
||||||
|
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
|
||||||
|
theme[proc_misc]="#F2D5CF"
|
||||||
|
|
||||||
|
# CPU, Memory, Network, Proc box outline colors
|
||||||
|
theme[cpu_box]="#ca9ee6" #Mauve
|
||||||
|
theme[mem_box]="#a6d189" #Green
|
||||||
|
theme[net_box]="#ea999c" #Maroon
|
||||||
|
theme[proc_box]="#8caaee" #Blue
|
||||||
|
|
||||||
|
# Box divider line and small boxes line color
|
||||||
|
theme[div_line]="#737994"
|
||||||
|
|
||||||
|
# Temperature graph color (Green -> Yellow -> Red)
|
||||||
|
theme[temp_start]="#a6d189"
|
||||||
|
theme[temp_mid]="#e5c890"
|
||||||
|
theme[temp_end]="#e78284"
|
||||||
|
|
||||||
|
# CPU graph colors (Teal -> Lavender)
|
||||||
|
theme[cpu_start]="#81c8be"
|
||||||
|
theme[cpu_mid]="#85c1dc"
|
||||||
|
theme[cpu_end]="#babbf1"
|
||||||
|
|
||||||
|
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
|
||||||
|
theme[free_start]="#ca9ee6"
|
||||||
|
theme[free_mid]="#babbf1"
|
||||||
|
theme[free_end]="#8caaee"
|
||||||
|
|
||||||
|
# Mem/Disk cached meter (Sapphire -> Lavender)
|
||||||
|
theme[cached_start]="#85c1dc"
|
||||||
|
theme[cached_mid]="#8caaee"
|
||||||
|
theme[cached_end]="#babbf1"
|
||||||
|
|
||||||
|
# Mem/Disk available meter (Peach -> Red)
|
||||||
|
theme[available_start]="#ef9f76"
|
||||||
|
theme[available_mid]="#ea999c"
|
||||||
|
theme[available_end]="#e78284"
|
||||||
|
|
||||||
|
# Mem/Disk used meter (Green -> Sky)
|
||||||
|
theme[used_start]="#a6d189"
|
||||||
|
theme[used_mid]="#81c8be"
|
||||||
|
theme[used_end]="#99d1db"
|
||||||
|
|
||||||
|
# Download graph colors (Peach -> Red)
|
||||||
|
theme[download_start]="#ef9f76"
|
||||||
|
theme[download_mid]="#ea999c"
|
||||||
|
theme[download_end]="#e78284"
|
||||||
|
|
||||||
|
# Upload graph colors (Green -> Sky)
|
||||||
|
theme[upload_start]="#a6d189"
|
||||||
|
theme[upload_mid]="#81c8be"
|
||||||
|
theme[upload_end]="#99d1db"
|
||||||
|
|
||||||
|
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
|
||||||
|
theme[process_start]="#85c1dc"
|
||||||
|
theme[process_mid]="#babbf1"
|
||||||
|
theme[process_end]="#ca9ee6"
|
||||||
84
.config/btop/themes/catppuccin_latte.theme
Normal file
84
.config/btop/themes/catppuccin_latte.theme
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
# Main background, empty for terminal default, need to be empty if you want transparent background
|
||||||
|
theme[main_bg]="#EFF1F5"
|
||||||
|
|
||||||
|
# Main text color
|
||||||
|
theme[main_fg]="#4C4F69"
|
||||||
|
|
||||||
|
# Title color for boxes
|
||||||
|
theme[title]="#4C4F69"
|
||||||
|
|
||||||
|
# Highlight color for keyboard shortcuts
|
||||||
|
theme[hi_fg]="#1E66F5"
|
||||||
|
|
||||||
|
# Background color of selected item in processes box
|
||||||
|
theme[selected_bg]="#BCC0CC"
|
||||||
|
|
||||||
|
# Foreground color of selected item in processes box
|
||||||
|
theme[selected_fg]="#1E66F5"
|
||||||
|
|
||||||
|
# Color of inactive/disabled text
|
||||||
|
theme[inactive_fg]="#8C8FA1"
|
||||||
|
|
||||||
|
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
|
||||||
|
theme[graph_text]="#DC8A78"
|
||||||
|
|
||||||
|
# Background color of the percentage meters
|
||||||
|
theme[meter_bg]="#BCC0CC"
|
||||||
|
|
||||||
|
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
|
||||||
|
theme[proc_misc]="#DC8A78"
|
||||||
|
|
||||||
|
# CPU, Memory, Network, Proc box outline colors
|
||||||
|
theme[cpu_box]="#8839ef" #Mauve
|
||||||
|
theme[mem_box]="#40a02b" #Green
|
||||||
|
theme[net_box]="#e64553" #Maroon
|
||||||
|
theme[proc_box]="#1e66f5" #Blue
|
||||||
|
|
||||||
|
# Box divider line and small boxes line color
|
||||||
|
theme[div_line]="#9CA0B0"
|
||||||
|
|
||||||
|
# Temperature graph color (Green -> Yellow -> Red)
|
||||||
|
theme[temp_start]="#40a02b"
|
||||||
|
theme[temp_mid]="#df8e1d"
|
||||||
|
theme[temp_end]="#d20f39"
|
||||||
|
|
||||||
|
# CPU graph colors (Teal -> Lavender)
|
||||||
|
theme[cpu_start]="#179299"
|
||||||
|
theme[cpu_mid]="#209fb5"
|
||||||
|
theme[cpu_end]="#7287fd"
|
||||||
|
|
||||||
|
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
|
||||||
|
theme[free_start]="#8839ef"
|
||||||
|
theme[free_mid]="#7287fd"
|
||||||
|
theme[free_end]="#1e66f5"
|
||||||
|
|
||||||
|
# Mem/Disk cached meter (Sapphire -> Lavender)
|
||||||
|
theme[cached_start]="#209fb5"
|
||||||
|
theme[cached_mid]="#1e66f5"
|
||||||
|
theme[cached_end]="#7287fd"
|
||||||
|
|
||||||
|
# Mem/Disk available meter (Peach -> Red)
|
||||||
|
theme[available_start]="#fe640b"
|
||||||
|
theme[available_mid]="#e64553"
|
||||||
|
theme[available_end]="#d20f39"
|
||||||
|
|
||||||
|
|
||||||
|
# Mem/Disk used meter (Green -> Sky)
|
||||||
|
theme[used_start]="#40a02b"
|
||||||
|
theme[used_mid]="#179299"
|
||||||
|
theme[used_end]="#04a5e5"
|
||||||
|
|
||||||
|
# Download graph colors (Peach -> Red)
|
||||||
|
theme[download_start]="#fe640b"
|
||||||
|
theme[download_mid]="#e64553"
|
||||||
|
theme[download_end]="#d20f39"
|
||||||
|
|
||||||
|
# Upload graph colors (Green -> Sky)
|
||||||
|
theme[upload_start]="#40a02b"
|
||||||
|
theme[upload_mid]="#179299"
|
||||||
|
theme[upload_end]="#04a5e5"
|
||||||
|
|
||||||
|
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Lavender-> Mauve)
|
||||||
|
theme[process_start]="#209fb5"
|
||||||
|
theme[process_mid]="#7287fd"
|
||||||
|
theme[process_end]="#8839ef"
|
||||||
83
.config/btop/themes/catppuccin_macchiato.theme
Normal file
83
.config/btop/themes/catppuccin_macchiato.theme
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
# Main background, empty for terminal default, need to be empty if you want transparent background
|
||||||
|
theme[main_bg]="#24273A"
|
||||||
|
|
||||||
|
# Main text color
|
||||||
|
theme[main_fg]="#CAD3F5"
|
||||||
|
|
||||||
|
# Title color for boxes
|
||||||
|
theme[title]="#CAD3F5"
|
||||||
|
|
||||||
|
# Highlight color for keyboard shortcuts
|
||||||
|
theme[hi_fg]="#8AADF4"
|
||||||
|
|
||||||
|
# Background color of selected item in processes box
|
||||||
|
theme[selected_bg]="#494D64"
|
||||||
|
|
||||||
|
# Foreground color of selected item in processes box
|
||||||
|
theme[selected_fg]="#8AADF4"
|
||||||
|
|
||||||
|
# Color of inactive/disabled text
|
||||||
|
theme[inactive_fg]="#8087A2"
|
||||||
|
|
||||||
|
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
|
||||||
|
theme[graph_text]="#F4DBD6"
|
||||||
|
|
||||||
|
# Background color of the percentage meters
|
||||||
|
theme[meter_bg]="#494D64"
|
||||||
|
|
||||||
|
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
|
||||||
|
theme[proc_misc]="#F4DBD6"
|
||||||
|
|
||||||
|
# CPU, Memory, Network, Proc box outline colors
|
||||||
|
theme[cpu_box]="#c6a0f6" #Mauve
|
||||||
|
theme[mem_box]="#a6da95" #Green
|
||||||
|
theme[net_box]="#ee99a0" #Maroon
|
||||||
|
theme[proc_box]="#8aadf4" #Blue
|
||||||
|
|
||||||
|
# Box divider line and small boxes line color
|
||||||
|
theme[div_line]="#6E738D"
|
||||||
|
|
||||||
|
# Temperature graph color (Green -> Yellow -> Red)
|
||||||
|
theme[temp_start]="#a6da95"
|
||||||
|
theme[temp_mid]="#eed49f"
|
||||||
|
theme[temp_end]="#ed8796"
|
||||||
|
|
||||||
|
# CPU graph colors (Teal -> Lavender)
|
||||||
|
theme[cpu_start]="#8bd5ca"
|
||||||
|
theme[cpu_mid]="#7dc4e4"
|
||||||
|
theme[cpu_end]="#b7bdf8"
|
||||||
|
|
||||||
|
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
|
||||||
|
theme[free_start]="#c6a0f6"
|
||||||
|
theme[free_mid]="#b7bdf8"
|
||||||
|
theme[free_end]="#8aadf4"
|
||||||
|
|
||||||
|
# Mem/Disk cached meter (Sapphire -> Lavender)
|
||||||
|
theme[cached_start]="#7dc4e4"
|
||||||
|
theme[cached_mid]="#8aadf4"
|
||||||
|
theme[cached_end]="#b7bdf8"
|
||||||
|
|
||||||
|
# Mem/Disk available meter (Peach -> Red)
|
||||||
|
theme[available_start]="#f5a97f"
|
||||||
|
theme[available_mid]="#ee99a0"
|
||||||
|
theme[available_end]="#ed8796"
|
||||||
|
|
||||||
|
# Mem/Disk used meter (Green -> Sky)
|
||||||
|
theme[used_start]="#a6da95"
|
||||||
|
theme[used_mid]="#8bd5ca"
|
||||||
|
theme[used_end]="#91d7e3"
|
||||||
|
|
||||||
|
# Download graph colors (Peach -> Red)
|
||||||
|
theme[download_start]="#f5a97f"
|
||||||
|
theme[download_mid]="#ee99a0"
|
||||||
|
theme[download_end]="#ed8796"
|
||||||
|
|
||||||
|
# Upload graph colors (Green -> Sky)
|
||||||
|
theme[upload_start]="#a6da95"
|
||||||
|
theme[upload_mid]="#8bd5ca"
|
||||||
|
theme[upload_end]="#91d7e3"
|
||||||
|
|
||||||
|
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
|
||||||
|
theme[process_start]="#7dc4e4"
|
||||||
|
theme[process_mid]="#b7bdf8"
|
||||||
|
theme[process_end]="#c6a0f6"
|
||||||
83
.config/btop/themes/catppuccin_mocha.theme
Normal file
83
.config/btop/themes/catppuccin_mocha.theme
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
# Main background, empty for terminal default, need to be empty if you want transparent background
|
||||||
|
theme[main_bg]="#1E1E2E"
|
||||||
|
|
||||||
|
# Main text color
|
||||||
|
theme[main_fg]="#CDD6F4"
|
||||||
|
|
||||||
|
# Title color for boxes
|
||||||
|
theme[title]="#CDD6F4"
|
||||||
|
|
||||||
|
# Highlight color for keyboard shortcuts
|
||||||
|
theme[hi_fg]="#89B4FA"
|
||||||
|
|
||||||
|
# Background color of selected item in processes box
|
||||||
|
theme[selected_bg]="#45475A"
|
||||||
|
|
||||||
|
# Foreground color of selected item in processes box
|
||||||
|
theme[selected_fg]="#89B4FA"
|
||||||
|
|
||||||
|
# Color of inactive/disabled text
|
||||||
|
theme[inactive_fg]="#7F849C"
|
||||||
|
|
||||||
|
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
|
||||||
|
theme[graph_text]="#F5E0DC"
|
||||||
|
|
||||||
|
# Background color of the percentage meters
|
||||||
|
theme[meter_bg]="#45475A"
|
||||||
|
|
||||||
|
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
|
||||||
|
theme[proc_misc]="#F5E0DC"
|
||||||
|
|
||||||
|
# CPU, Memory, Network, Proc box outline colors
|
||||||
|
theme[cpu_box]="#cba6f7" #Mauve
|
||||||
|
theme[mem_box]="#a6e3a1" #Green
|
||||||
|
theme[net_box]="#eba0ac" #Maroon
|
||||||
|
theme[proc_box]="#89b4fa" #Blue
|
||||||
|
|
||||||
|
# Box divider line and small boxes line color
|
||||||
|
theme[div_line]="#6C7086"
|
||||||
|
|
||||||
|
# Temperature graph color (Green -> Yellow -> Red)
|
||||||
|
theme[temp_start]="#a6e3a1"
|
||||||
|
theme[temp_mid]="#f9e2af"
|
||||||
|
theme[temp_end]="#f38ba8"
|
||||||
|
|
||||||
|
# CPU graph colors (Teal -> Lavender)
|
||||||
|
theme[cpu_start]="#94e2d5"
|
||||||
|
theme[cpu_mid]="#74c7ec"
|
||||||
|
theme[cpu_end]="#b4befe"
|
||||||
|
|
||||||
|
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
|
||||||
|
theme[free_start]="#cba6f7"
|
||||||
|
theme[free_mid]="#b4befe"
|
||||||
|
theme[free_end]="#89b4fa"
|
||||||
|
|
||||||
|
# Mem/Disk cached meter (Sapphire -> Lavender)
|
||||||
|
theme[cached_start]="#74c7ec"
|
||||||
|
theme[cached_mid]="#89b4fa"
|
||||||
|
theme[cached_end]="#b4befe"
|
||||||
|
|
||||||
|
# Mem/Disk available meter (Peach -> Red)
|
||||||
|
theme[available_start]="#fab387"
|
||||||
|
theme[available_mid]="#eba0ac"
|
||||||
|
theme[available_end]="#f38ba8"
|
||||||
|
|
||||||
|
# Mem/Disk used meter (Green -> Sky)
|
||||||
|
theme[used_start]="#a6e3a1"
|
||||||
|
theme[used_mid]="#94e2d5"
|
||||||
|
theme[used_end]="#89dceb"
|
||||||
|
|
||||||
|
# Download graph colors (Peach -> Red)
|
||||||
|
theme[download_start]="#fab387"
|
||||||
|
theme[download_mid]="#eba0ac"
|
||||||
|
theme[download_end]="#f38ba8"
|
||||||
|
|
||||||
|
# Upload graph colors (Green -> Sky)
|
||||||
|
theme[upload_start]="#a6e3a1"
|
||||||
|
theme[upload_mid]="#94e2d5"
|
||||||
|
theme[upload_end]="#89dceb"
|
||||||
|
|
||||||
|
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
|
||||||
|
theme[process_start]="#74C7EC"
|
||||||
|
theme[process_mid]="#89DCEB"
|
||||||
|
theme[process_end]="#cba6f7"
|
||||||
@@ -15,10 +15,14 @@ confirm-close-surface = false
|
|||||||
copy-on-select = clipboard
|
copy-on-select = clipboard
|
||||||
app-notifications = no-clipboard-copy
|
app-notifications = no-clipboard-copy
|
||||||
shell-integration = zsh
|
shell-integration = zsh
|
||||||
shell-integration-features = title,sudo,ssh-env,ssh-terminfo
|
shell-integration-features = title,sudo
|
||||||
desktop-notifications = true
|
desktop-notifications = true
|
||||||
term=ghostty
|
term=xterm-ghostty
|
||||||
|
link-url = true
|
||||||
|
link-previews = true
|
||||||
|
bell-features=system,attention,no-audio
|
||||||
keybind = all:ctrl+enter=unbind
|
keybind = all:ctrl+enter=unbind
|
||||||
keybind = all:ctrl+shift+j=next_tab
|
keybind = all:ctrl+shift+j=next_tab
|
||||||
keybind = all:ctrl+shift+k=last_tab
|
keybind = all:ctrl+shift+k=last_tab
|
||||||
keybind = all:ctrl+grave_accent=toggle_quick_terminal
|
keybind = all:ctrl+grave_accent=toggle_quick_terminal
|
||||||
|
keybind = shift+enter=text:\x1b\r
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ app-notifications = no-clipboard-copy
|
|||||||
keybind = all:ctrl+enter=unbind
|
keybind = all:ctrl+enter=unbind
|
||||||
keybind = all:ctrl+grave_accent=toggle_quick_terminal
|
keybind = all:ctrl+grave_accent=toggle_quick_terminal
|
||||||
shell-integration = zsh
|
shell-integration = zsh
|
||||||
|
keybind = shift+enter=text:\x1b\r
|
||||||
shell-integration-features = title,sudo,ssh-env,ssh-terminfo
|
shell-integration-features = title,sudo,ssh-env,ssh-terminfo
|
||||||
desktop-notifications = true
|
desktop-notifications = true
|
||||||
term=ghostty
|
term=ghostty
|
||||||
|
|||||||
@@ -191,13 +191,15 @@ animations {
|
|||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||||
dwindle {
|
dwindle {
|
||||||
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
pseudotile = false # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||||
preserve_split = true # You probably want this
|
preserve_split = true
|
||||||
|
split_width_multiplier = 1.69
|
||||||
}
|
}
|
||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||||
master {
|
master {
|
||||||
new_status = master
|
new_status = slave
|
||||||
|
allow_small_split = false
|
||||||
}
|
}
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#misc
|
# https://wiki.hyprland.org/Configuring/Variables/#misc
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ bind = $mainMod SHIFT, j, movewindow, d
|
|||||||
bind = $mainMod SHIFT, k, movewindow, u
|
bind = $mainMod SHIFT, k, movewindow, u
|
||||||
bind = $mainMod SHIFT, h, movewindow, l
|
bind = $mainMod SHIFT, h, movewindow, l
|
||||||
bind = $mainMod SHIFT, l, movewindow, r
|
bind = $mainMod SHIFT, l, movewindow, r
|
||||||
bind = CTRL+SHIFT, c, centerwindow
|
bind = $mainMod+SHIFT, c, centerwindow
|
||||||
|
|
||||||
|
|
||||||
# Move focus to next monitor
|
# Move focus to next monitor
|
||||||
@@ -92,10 +92,13 @@ bindl = , XF86AudioPrev, exec, mpc prev
|
|||||||
|
|
||||||
# rofi
|
# rofi
|
||||||
bind = $mainMod SHIFT, v, exec, uwsm app -sb -- rofi-rbw
|
bind = $mainMod SHIFT, v, exec, uwsm app -sb -- rofi-rbw
|
||||||
bind = $mainMod, w, exec, rofi -show window -theme $HOME/.config/rofi/launchers/type-2/style-2.rasi -dpi 96 -theme-str 'window {width: 35%;}'
|
# bind = $mainMod, w, exec, rofi -show window -theme $HOME/.config/rofi/launchers/type-2/style-2.rasi -dpi 96 -theme-str 'window {width: 35%;}'
|
||||||
bind = $mainMod SHIFT, w, exec, $HOME/.config/rofi/scripts/rofi-wallpaper.sh
|
bind = $mainMod SHIFT, w, exec, "$HOME/.config/rofi/scripts/rofi-wallpaper.sh"
|
||||||
bind = $mainMod SHIFT, d, exec, $HOME/.config/rofi/scripts/rofi-docs.sh
|
bind = $mainMod SHIFT, d, exec, "$HOME/.config/rofi/scripts/rofi-docs.sh"
|
||||||
bind = SUPER, j, exec, "$HOME/.config/rofi/scripts/rofi-jellyfin-dir.sh"
|
bind = SUPER, j, exec, "$HOME/.config/rofi/scripts/rofi-jellyfin-dir.sh"
|
||||||
|
bind = SUPER, t, exec, "$HOME/.config/rofi/scripts/rofi-launch-texthooker-steam.sh"
|
||||||
|
bind = $mainMod SHIFT, t, exec, "$HOME/projects/scripts/popup-ai-translator.py"
|
||||||
|
bind = SUPER SHIFT, g, exec, "$HOME/.config/rofi/scripts/rofi-vn-helper.sh"
|
||||||
|
|
||||||
# ncmcppp
|
# ncmcppp
|
||||||
bind = $mainMod, n, exec, uwsm app -sb -- ghostty --command=/usr/bin/ncmpcpp
|
bind = $mainMod, n, exec, uwsm app -sb -- ghostty --command=/usr/bin/ncmpcpp
|
||||||
@@ -143,4 +146,10 @@ bind = SUPER, l, exec, hyprlock
|
|||||||
|
|
||||||
# ANKI
|
# ANKI
|
||||||
bind = $mainMod, a, exec, ~/.config/rofi/scripts/rofi-anki-script.sh
|
bind = $mainMod, a, exec, ~/.config/rofi/scripts/rofi-anki-script.sh
|
||||||
bind = $mainMod SHIFT, a, exec, ~/projects/scripts/screenshot-anki.sh -cdMinecraft
|
# bind = $mainMod SHIFT, a, exec, ~/projects/scripts/screenshot-anki.sh -cdMinecraft
|
||||||
|
|
||||||
|
# GSM
|
||||||
|
bindl = , mouse:275, exec, xdotool key alt+w # top mouse to texthooker
|
||||||
|
bindl = , mouse:276, exec, xdotool key alt+grave # bottom mouse to overlay
|
||||||
|
bind = ALT, g, exec, /opt/mpv-yomitan/mpv-yomitan.AppImage --toggle
|
||||||
|
# bind = ALT SHIFT, Y, exec, "$HOME/.config/rofi/scripts/rofi-mpv-yomitan.sh"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
41631
|
1087
|
||||||
|
|||||||
Submodule .config/mpv-modules/ModernZ updated: 3b0c750466...fadaf74b08
Submodule .config/mpv-modules/animecards updated: ae0020060e...c5950c2660
Submodule .config/mpv-modules/immersion-tracker deleted from f4a2c6012f
Submodule .config/mpv-modules/mpv-anilist-updater updated: 8c1630d8e6...ace1f74822
Submodule .config/mpv-modules/mpvacious updated: 9f9e9df06d...2629602b90
@@ -225,7 +225,8 @@ ctrl+B ignore # script-binding mpvacious-overwrite-selected-note
|
|||||||
ctrl+m ignore # script-binding mpvacious-update-last-note
|
ctrl+m ignore # script-binding mpvacious-update-last-note
|
||||||
ctrl+M ignore # script-binding mpvacious-overwrite-last-note
|
ctrl+M ignore # script-binding mpvacious-overwrite-last-note
|
||||||
G script-binding mpvacious-quick-card-menu-open
|
G script-binding mpvacious-quick-card-menu-open
|
||||||
alt+g script-binding mpvacious-quick-card-sel-menu-open
|
alt+g ignore
|
||||||
|
alt+G script-binding mpvacious-quick-card-sel-menu-open
|
||||||
ctrl+c script-binding mpvacious-copy-primary-sub-to-clipboard
|
ctrl+c script-binding mpvacious-copy-primary-sub-to-clipboard
|
||||||
ctrl+C script-binding mpvacious-copy-secondary-sub-to-clipboard
|
ctrl+C script-binding mpvacious-copy-secondary-sub-to-clipboard
|
||||||
ctrl+= script-binding mpvacious-autocopy-toggle
|
ctrl+= script-binding mpvacious-autocopy-toggle
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ sub-fix-timing=yes
|
|||||||
sub-ass-override=scale
|
sub-ass-override=scale
|
||||||
sub-gauss=1.0
|
sub-gauss=1.0
|
||||||
sub-gray=yes
|
sub-gray=yes
|
||||||
sub-pos=100
|
sub-pos=95
|
||||||
|
|
||||||
# --- Audio chain ---
|
# --- Audio chain ---
|
||||||
volume=75
|
volume=75
|
||||||
@@ -111,6 +111,8 @@ demuxer-max-back-bytes=200MiB # Keep recent data handy for quick reverse seeks
|
|||||||
cache-secs=30
|
cache-secs=30
|
||||||
demuxer-readahead-secs=30
|
demuxer-readahead-secs=30
|
||||||
|
|
||||||
|
msg-level=subs2srs,animecards,mpvacious=error
|
||||||
|
|
||||||
[anime]
|
[anime]
|
||||||
profile-desc="Anime upscaling with ArtCNN"
|
profile-desc="Anime upscaling with ArtCNN"
|
||||||
glsl-shaders="~~/shaders/ArtCNN_C4F32.glsl"
|
glsl-shaders="~~/shaders/ArtCNN_C4F32.glsl"
|
||||||
@@ -163,6 +165,7 @@ glsl-shaders="~~/shaders/ArtCNN_C4F32.glsl"
|
|||||||
scale=ewa_lanczossharp
|
scale=ewa_lanczossharp
|
||||||
dither=error-diffusion
|
dither=error-diffusion
|
||||||
deband=yes # Crucial for anime gradients
|
deband=yes # Crucial for anime gradients
|
||||||
|
input-ipc-server=/tmp/mpv-yomitan-socket
|
||||||
|
|
||||||
[anime-subs]
|
[anime-subs]
|
||||||
profile-cond=p["slang"] == "ja" or p["slang"] == "ja.hi"
|
profile-cond=p["slang"] == "ja" or p["slang"] == "ja.hi"
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ dither=fruit # Lightweight dithering
|
|||||||
ontop=yes
|
ontop=yes
|
||||||
border=no
|
border=no
|
||||||
no-border
|
no-border
|
||||||
autofit=50% # Reasonable default size
|
autofit=69% # Reasonable default size
|
||||||
|
|
||||||
# Audio (macOS-specific)
|
# Audio (macOS-specific)
|
||||||
volume=75
|
volume=75
|
||||||
@@ -129,6 +129,9 @@ cache-pause=no
|
|||||||
cache-secs=30
|
cache-secs=30
|
||||||
demuxer-readahead-secs=30
|
demuxer-readahead-secs=30
|
||||||
|
|
||||||
|
msg-level=subs2srs,animecards,mpvacious=error
|
||||||
|
|
||||||
|
|
||||||
############
|
############
|
||||||
# Profiles #
|
# Profiles #
|
||||||
############
|
############
|
||||||
@@ -152,7 +155,7 @@ profile-cond=width >= 1920 and filename:match("mkv$|mp4$")
|
|||||||
glsl-shaders=""
|
glsl-shaders=""
|
||||||
scale=ewa_lanczos
|
scale=ewa_lanczos
|
||||||
target-peak=800
|
target-peak=800
|
||||||
hdr-tone-mapping=bt.2390
|
# hdr-tone-mapping=bt.2390
|
||||||
|
|
||||||
# HDR profile
|
# HDR profile
|
||||||
[hdr]
|
[hdr]
|
||||||
@@ -195,6 +198,7 @@ glsl-shaders="~~/shaders/ArtCNN_C4F32.glsl"
|
|||||||
scale=ewa_lanczossharp
|
scale=ewa_lanczossharp
|
||||||
dither=error-diffusion
|
dither=error-diffusion
|
||||||
deband=yes # Crucial for anime gradients
|
deband=yes # Crucial for anime gradients
|
||||||
|
input-ipc-server=/tmp/mpv-yomitan-socket
|
||||||
|
|
||||||
# Anime subtitles profile
|
# Anime subtitles profile
|
||||||
[anime-subs]
|
[anime-subs]
|
||||||
|
|||||||
176
.config/mpv/mpv.conf##os.WSL
Normal file
176
.config/mpv/mpv.conf##os.WSL
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
profile=high-quality
|
||||||
|
user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
|
||||||
|
|
||||||
|
# --- Shaders ---
|
||||||
|
glsl-shaders=""
|
||||||
|
# glsl-shaders="~~/shaders/ArtCNN_C4F32_DS.glsl"
|
||||||
|
# glsl-shaders="~~/shaders/ArtCNN_C4F32.glsl"
|
||||||
|
|
||||||
|
# --- Scaling & dithering ---
|
||||||
|
scale=spline36
|
||||||
|
dither=fruit
|
||||||
|
|
||||||
|
# --- Window & interface ---
|
||||||
|
ontop=yes
|
||||||
|
border=no
|
||||||
|
no-border
|
||||||
|
autofit=50%
|
||||||
|
osc=no
|
||||||
|
blend-subtitles=video
|
||||||
|
opengl-early-flush=no
|
||||||
|
|
||||||
|
# --- Subtitle defaults ---
|
||||||
|
sub-font="JetBrainsMono Nerd Font"
|
||||||
|
sub-font-size=45
|
||||||
|
sub-auto=fuzzy
|
||||||
|
slang=en,eng
|
||||||
|
subs-with-matching-audio=no
|
||||||
|
sub-fix-timing=yes
|
||||||
|
sub-ass-override=scale
|
||||||
|
sub-gauss=1.0
|
||||||
|
sub-gray=yes
|
||||||
|
sub-pos=100
|
||||||
|
|
||||||
|
# --- Audio (Windows) ---
|
||||||
|
volume=75
|
||||||
|
ao=wasapi
|
||||||
|
audio-spdif=ac3,dts-hd,truehd
|
||||||
|
audio-stream-silence=yes
|
||||||
|
audio-wait-open=0.1
|
||||||
|
|
||||||
|
# --- Networking ---
|
||||||
|
ytdl-format=bestvideo+bestaudio/best
|
||||||
|
ytdl-raw-options=sub-langs=en.*,write-auto-subs=
|
||||||
|
ytdl-raw-options-append=sponsorblock-mark=all
|
||||||
|
ytdl-raw-options-append=sponsorblock-remove=sponsor,selfpromo,interaction
|
||||||
|
|
||||||
|
# --- Video output & decoding ---
|
||||||
|
vo=gpu-next
|
||||||
|
hwdec=nvdec
|
||||||
|
hwdec-codecs=all
|
||||||
|
gpu-api=vulkan
|
||||||
|
gpu-context=winvk
|
||||||
|
vulkan-queue-count=2
|
||||||
|
vulkan-async-compute=yes
|
||||||
|
vulkan-async-transfer=yes
|
||||||
|
vd-lavc-dr=yes
|
||||||
|
vd-lavc-threads=0
|
||||||
|
video-sync=display-resample
|
||||||
|
|
||||||
|
# --- Scaling, interpolation, dithering ---
|
||||||
|
scale=ewa_lanczossharp
|
||||||
|
dscale=catmull_rom
|
||||||
|
cscale=ewa_lanczos
|
||||||
|
tscale=oversample
|
||||||
|
interpolation=yes
|
||||||
|
interpolation-preserve=no
|
||||||
|
interpolation-threshold=0.5
|
||||||
|
sigmoid-upscaling=yes
|
||||||
|
temporal-dither=yes
|
||||||
|
dither=error-diffusion
|
||||||
|
dither-depth=auto
|
||||||
|
error-diffusion=sierra-lite
|
||||||
|
|
||||||
|
# --- Antiring ---
|
||||||
|
scale-antiring=0.5
|
||||||
|
dscale-antiring=0.5
|
||||||
|
cscale-antiring=0.5
|
||||||
|
|
||||||
|
# --- Debanding ---
|
||||||
|
deband=yes
|
||||||
|
deband-iterations=2
|
||||||
|
deband-threshold=24
|
||||||
|
deband-range=16
|
||||||
|
deband-grain=4
|
||||||
|
|
||||||
|
# --- IPC (Windows named pipe) ---
|
||||||
|
input-ipc-server=\\.\pipe\mpv-socket
|
||||||
|
|
||||||
|
# --- Screenshots ---
|
||||||
|
screenshot-format=webp
|
||||||
|
screenshot-webp-lossless=yes
|
||||||
|
screenshot-high-bit-depth=yes
|
||||||
|
screenshot-sw=no
|
||||||
|
screenshot-directory="Z:/sudacode/pictures/mpv"
|
||||||
|
screenshot-template="%f-%wH.%wM.%wS.%wT-#%#00n"
|
||||||
|
|
||||||
|
# --- Session persistence ---
|
||||||
|
save-position-on-quit
|
||||||
|
watch-later-dir="~~/.watch-later"
|
||||||
|
resume-playback=yes
|
||||||
|
save-watch-history
|
||||||
|
watch-history-path="~~/state/watch_history.jsonl"
|
||||||
|
|
||||||
|
# --- HDR hints ---
|
||||||
|
target-colorspace-hint=yes
|
||||||
|
|
||||||
|
# --- Cache ---
|
||||||
|
cache=yes
|
||||||
|
demuxer-max-bytes=1GiB
|
||||||
|
demuxer-max-back-bytes=200MiB
|
||||||
|
cache-secs=30
|
||||||
|
demuxer-readahead-secs=30
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# Profiles
|
||||||
|
# =========================
|
||||||
|
|
||||||
|
[anime]
|
||||||
|
profile-desc="Anime upscaling with ArtCNN"
|
||||||
|
glsl-shaders="~~/shaders/ArtCNN_C4F32.glsl"
|
||||||
|
scale=ewa_lanczossharp
|
||||||
|
dither=error-diffusion
|
||||||
|
deband=yes
|
||||||
|
|
||||||
|
[movies]
|
||||||
|
profile-desc="Movies and TV shows"
|
||||||
|
profile-cond=width >= 1920 and filename:match("mkv$|mp4$")
|
||||||
|
glsl-shaders=""
|
||||||
|
scale=ewa_lanczos
|
||||||
|
target-peak=800
|
||||||
|
|
||||||
|
[hdr]
|
||||||
|
tone-mapping-param=0.5
|
||||||
|
tone-mapping-max-boost=2.0
|
||||||
|
allow-delayed-peak-detect=yes
|
||||||
|
icc-profile-auto=yes
|
||||||
|
|
||||||
|
[svp]
|
||||||
|
interpolation=no
|
||||||
|
input-ipc-server=\\.\pipe\mpv-socket
|
||||||
|
hr-seek-framedrop=no
|
||||||
|
resume-playback=no
|
||||||
|
|
||||||
|
[Idle]
|
||||||
|
profile-cond=p["idle-active"]
|
||||||
|
profile-restore=copy-equal
|
||||||
|
title=' '
|
||||||
|
keepaspect=no
|
||||||
|
|
||||||
|
[immersion]
|
||||||
|
cookies=yes
|
||||||
|
cookies-file="Z:/sudacode/japanese/cookies.Japanese.txt"
|
||||||
|
ytdl-raw-options=mark-watched=,write-auto-subs=,sub-langs=ja.*
|
||||||
|
ytdl-raw-options-append=cookies=Z:/sudacode/japanese/cookies.Japanese.txt
|
||||||
|
ytdl-raw-options-append=sponsorblock-mark=all
|
||||||
|
ytdl-raw-options-append=sponsorblock-remove=sponsor,selfpromo,interaction
|
||||||
|
sub-auto=fuzzy
|
||||||
|
alang=ja,jp,jpn,japanese,en,eng,english
|
||||||
|
slang=ja,jp,jpn,japanese,en,eng,english
|
||||||
|
vlang=ja,jpn
|
||||||
|
subs-with-matching-audio=yes
|
||||||
|
sub-font="Noto Sans CJK JP Regular"
|
||||||
|
glsl-shaders="~~/shaders/ArtCNN_C4F32.glsl"
|
||||||
|
scale=ewa_lanczossharp
|
||||||
|
dither=error-diffusion
|
||||||
|
deband=yes
|
||||||
|
|
||||||
|
[anime-subs]
|
||||||
|
profile-cond=p["slang"] == "ja" or p["slang"] == "ja.hi"
|
||||||
|
sub-font="Noto Sans CJK JP Regular"
|
||||||
|
sub-font-size=42
|
||||||
|
sub-border-size=1.2
|
||||||
|
sub-shadow-color=0.0/0.0/0.0/0.6
|
||||||
|
sub-shadow-offset=3
|
||||||
|
sub-hinting=light
|
||||||
|
|
||||||
Binary file not shown.
11
.config/mpv/script-opts/anilistUpdater.conf##os.WSL
Normal file
11
.config/mpv/script-opts/anilistUpdater.conf##os.WSL
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Use 'yes' or 'no' for boolean options below
|
||||||
|
# Example for multiple directories (comma or semicolon separated):
|
||||||
|
# DIRECTORIES=D:/Torrents,D:/Anime
|
||||||
|
# or
|
||||||
|
# DIRECTORIES=D:/Torrents;D:/Anime
|
||||||
|
DIRECTORIES=/mnt/j/anime
|
||||||
|
UPDATE_PERCENTAGE=85
|
||||||
|
SET_COMPLETED_TO_REWATCHING_ON_FIRST_EPISODE=no
|
||||||
|
UPDATE_PROGRESS_WHEN_REWATCHING=yes
|
||||||
|
SET_TO_COMPLETED_AFTER_LAST_EPISODE_CURRENT=yes
|
||||||
|
SET_TO_COMPLETED_AFTER_LAST_EPISODE_REWATCHING=yes
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
# Anki Field Names
|
# Anki Field Names
|
||||||
# These must match the field names in your Anki note type
|
# These must match the field names in your Anki note type
|
||||||
# =================================================
|
# =================================================
|
||||||
|
DEBUG_MODE=no
|
||||||
FRONT_FIELD=Expression
|
FRONT_FIELD=Expression
|
||||||
SENTENCE_FIELD=Sentence
|
SENTENCE_FIELD=Sentence
|
||||||
IMAGE_FIELD=Picture
|
IMAGE_FIELD=Picture
|
||||||
@@ -28,12 +29,12 @@ ASK_TO_OVERWRITE=yes
|
|||||||
OVERWRITE_LIMIT=8
|
OVERWRITE_LIMIT=8
|
||||||
|
|
||||||
# Keep bold formatting added by yomitan? (yes/no)
|
# Keep bold formatting added by yomitan? (yes/no)
|
||||||
HIGHLIGHT_WORD=no
|
HIGHLIGHT_WORD=yes
|
||||||
|
|
||||||
# Use MPV's built-in clipboard API (requires v0.40+)? (yes/no)
|
# Use MPV's built-in clipboard API (requires v0.40+)? (yes/no)
|
||||||
# Alternative clipboard method that may reduce latency on Windows.
|
# Alternative clipboard method that may reduce latency on Windows.
|
||||||
# Supported on macOS and Wayland as well. Not supported on X11.
|
# Supported on macOS and Wayland as well. Not supported on X11.
|
||||||
USE_MPV_CLIPBOARD_API=no
|
USE_MPV_CLIPBOARD_API=yes
|
||||||
|
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
# Audio Settings
|
# Audio Settings
|
||||||
|
|||||||
33
.config/mpv/script-opts/autosubsync.conf##os.WSL
Normal file
33
.config/mpv/script-opts/autosubsync.conf##os.WSL
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# Absolute paths to the executables, if needed:
|
||||||
|
|
||||||
|
# 1. ffmpeg
|
||||||
|
ffmpeg_path=/usr/bin/ffmpeg
|
||||||
|
|
||||||
|
# 2. ffsubsync
|
||||||
|
ffsubsync_path=/usr/bin/ffsubsync
|
||||||
|
|
||||||
|
# 3. alass
|
||||||
|
alass_path=/usr/bin/alass
|
||||||
|
|
||||||
|
# Preferred retiming tool. Allowed options: 'ffsubsync', 'alass', 'ask'.
|
||||||
|
# If set to 'ask', the add-on will ask to choose the tool every time:
|
||||||
|
|
||||||
|
# 1. Preferred tool for syncing to audio.
|
||||||
|
# audio_subsync_tool=ask
|
||||||
|
audio_subsync_tool=ffsubsync
|
||||||
|
# audio_subsync_tool=alass
|
||||||
|
|
||||||
|
# 2. Preferred tool for syncing to another subtitle.
|
||||||
|
# altsub_subsync_tool=ask
|
||||||
|
# altsub_subsync_tool=ffsubsync
|
||||||
|
altsub_subsync_tool=alass
|
||||||
|
|
||||||
|
# Unload old subs (yes,no)
|
||||||
|
# After retiming, tell mpv to forget the original subtitle track.
|
||||||
|
unload_old_sub=yes
|
||||||
|
# unload_old_sub=no
|
||||||
|
|
||||||
|
# Overwrite the original subtitle file.
|
||||||
|
# Replace the old subtitle file with the retimed file.
|
||||||
|
# overwrite_old_sub=yes
|
||||||
|
overwrite_old_sub=no
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
start_tracking_key=ctrl+t
|
start_tracking_key=ctrl+t
|
||||||
data_dir=/home/sudacode/.config/mpv/scripts/immersion-tracker/data
|
data_dir=/home/sudacode/.config/mpv/scripts/immersion-tracker/data
|
||||||
csv_file=/truenas/sudacode/japanese/immersion_tracker.csv
|
csv_file=/mnt/h/japanese/immersion_tracker.csv
|
||||||
session_file=/home/sudacode/.config/mpv/scripts/immersion-tracker/data/current_session.json
|
session_file=/home/sudacode/.config/mpv/scripts/immersion-tracker/data/current_session.json
|
||||||
min_session_duration=30
|
min_session_duration=30
|
||||||
save_interval=10
|
save_interval=10
|
||||||
|
|||||||
22
.config/mpv/script-opts/immersion-tracker.conf##os.WSL
Normal file
22
.config/mpv/script-opts/immersion-tracker.conf##os.WSL
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
start_tracking_key=ctrl+t
|
||||||
|
data_dir=/home/sudacode/.config/mpv/scripts/immersion-tracker/data
|
||||||
|
csv_file=/truenas/sudacode/japanese/immersion_tracker.csv
|
||||||
|
session_file=/home/sudacode/.config/mpv/scripts/immersion-tracker/data/current_session.json
|
||||||
|
min_session_duration=30
|
||||||
|
save_interval=10
|
||||||
|
enable_debug_logging=no
|
||||||
|
backup_sessions=no
|
||||||
|
max_backup_files=10
|
||||||
|
use_title=yes
|
||||||
|
use_filename=no
|
||||||
|
custom_prefix=[Immersion]
|
||||||
|
max_title_length = 100
|
||||||
|
export_csv=yes
|
||||||
|
export_json=no
|
||||||
|
export_html=no
|
||||||
|
backup_csv=yes
|
||||||
|
show_session_start=yes
|
||||||
|
show_session_end=yes
|
||||||
|
show_progress_milestones=no
|
||||||
|
milestone_percentages=25507590
|
||||||
|
|
||||||
@@ -30,6 +30,6 @@ menu_timeout=5
|
|||||||
show_errors=yes
|
show_errors=yes
|
||||||
ytdlp_file_format=mp4
|
ytdlp_file_format=mp4
|
||||||
ytdlp_output_template=%(uploader)s/%(title)s.%(ext)s
|
ytdlp_output_template=%(uploader)s/%(title)s.%(ext)s
|
||||||
use_history_db=yes
|
use_history_db=no
|
||||||
backend_host=http://localhost
|
backend_host=http://localhost
|
||||||
backend_port=42069
|
backend_port=42069
|
||||||
|
|||||||
35
.config/mpv/script-opts/mpv-youtube-queue.conf##os.WSL
Normal file
35
.config/mpv/script-opts/mpv-youtube-queue.conf##os.WSL
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
add_to_queue=ctrl+a
|
||||||
|
default_save_method=unwatched
|
||||||
|
download_current_video=ctrl+d
|
||||||
|
download_selected_video=ctrl+D
|
||||||
|
move_cursor_down=ctrl+j
|
||||||
|
move_cursor_up=ctrl+k
|
||||||
|
load_queue=ctrl+l
|
||||||
|
move_video=ctrl+m
|
||||||
|
play_next_in_queue=ctrl+n
|
||||||
|
open_video_in_browser=ctrl+o
|
||||||
|
open_channel_in_browser=ctrl+O
|
||||||
|
play_previous_in_queue=ctrl+p
|
||||||
|
print_current_video=ctrl+P
|
||||||
|
print_queue=ctrl+q
|
||||||
|
save_queue=ctrl+s
|
||||||
|
save_full_queue=ctrl+S
|
||||||
|
remove_from_queue=ctrl+x
|
||||||
|
play_selected_video=ctrl+ENTER
|
||||||
|
browser=zen-browser
|
||||||
|
clipboard_command=powershell -command Get-Clipboard
|
||||||
|
cursor_icon=➤
|
||||||
|
display_limit=10
|
||||||
|
download_directory=~/videos/YouTube
|
||||||
|
download_quality=1080p
|
||||||
|
downloader=curl
|
||||||
|
font_name=JetBrainsMono NF
|
||||||
|
font_size=12
|
||||||
|
marked_icon=⇅
|
||||||
|
menu_timeout=5
|
||||||
|
show_errors=yes
|
||||||
|
ytdlp_file_format=mp4
|
||||||
|
ytdlp_output_template=%(uploader)s/%(title)s.%(ext)s
|
||||||
|
use_history_db=yes
|
||||||
|
backend_host=http://localhost
|
||||||
|
backend_port=42069
|
||||||
@@ -14,6 +14,7 @@ deck_name=Minecraft
|
|||||||
# If you don't have a model for Japanese, get it from
|
# If you don't have a model for Japanese, get it from
|
||||||
# https://tatsumoto.neocities.org/blog/setting-up-anki.html#import-an-example-mining-deck
|
# https://tatsumoto.neocities.org/blog/setting-up-anki.html#import-an-example-mining-deck
|
||||||
model_name=Lapis
|
model_name=Lapis
|
||||||
|
# model_name=Kiku
|
||||||
|
|
||||||
# Field names as they appear in the selected note type.
|
# Field names as they appear in the selected note type.
|
||||||
# If you set `audio_field` or `image_field` empty,
|
# If you set `audio_field` or `image_field` empty,
|
||||||
@@ -45,6 +46,9 @@ menu_font_name=Noto Serif CJK JP
|
|||||||
# Change this if you have changed webBindAddress in AnkiConnect's settings.
|
# Change this if you have changed webBindAddress in AnkiConnect's settings.
|
||||||
ankiconnect_url=127.0.0.1:8765
|
ankiconnect_url=127.0.0.1:8765
|
||||||
|
|
||||||
|
# AnkiConnect server api key (optional)
|
||||||
|
#ankiconnect_api_key=
|
||||||
|
|
||||||
##
|
##
|
||||||
## Toggleables.
|
## Toggleables.
|
||||||
## Possible values: `yes` or `no`.
|
## Possible values: `yes` or `no`.
|
||||||
@@ -329,3 +333,40 @@ ffmpeg_audio_args=-af loudnorm=I=-16:TP=-1.5:LRA=11:dual_mono=true
|
|||||||
mpv_audio_args=--af-append=loudnorm=I=-16:TP=-1.5:LRA=11:dual_mono=true
|
mpv_audio_args=--af-append=loudnorm=I=-16:TP=-1.5:LRA=11:dual_mono=true
|
||||||
#mpv_audio_args=
|
#mpv_audio_args=
|
||||||
#mpv_audio_args=--af-append=silenceremove=1:0:-50dB
|
#mpv_audio_args=--af-append=silenceremove=1:0:-50dB
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
## Custom Sub Filter
|
||||||
|
## Place a `subs2srs_sub_filter.lua` file
|
||||||
|
## in the `~/.config/mpv/subs2srs_sub_filter` directory.
|
||||||
|
## The custom script must return a table
|
||||||
|
## that includes either of a `preprocess` or a `trim` function (or both).
|
||||||
|
##
|
||||||
|
## - `preprocess(text)`: Executes before trimming/cleaning.
|
||||||
|
## - `trim(text)`: Replaces the built-in trimming logic.
|
||||||
|
##
|
||||||
|
|
||||||
|
# Enable custom sub preprocessing by default (yes, no)
|
||||||
|
custom_sub_filter_enabled=no
|
||||||
|
|
||||||
|
# Notification prefix for toggle
|
||||||
|
custom_sub_filter_notification=Custom Sub Filter
|
||||||
|
|
||||||
|
# Use a custom trim instead of the built in one (yes, no)
|
||||||
|
use_custom_trim=no
|
||||||
|
|
||||||
|
##
|
||||||
|
## New note check timer
|
||||||
|
##
|
||||||
|
|
||||||
|
# Enable the check note timer feature.
|
||||||
|
# If set to `yes`, mpvacious will periodically check for new notes in Anki
|
||||||
|
# and automatically update them with media if they match the configured note type
|
||||||
|
# I.e., you create a note with GoldenDict, Rikaitan, etc.,
|
||||||
|
# then mpvacious updates the note and adds audio and image automatically.
|
||||||
|
enable_new_note_timer=no
|
||||||
|
|
||||||
|
# Interval in seconds for checking for new notes.
|
||||||
|
# This setting controls how often mpvacious checks for new notes in Anki.
|
||||||
|
# Only used when enable_new_note_timer is set to `yes`
|
||||||
|
new_note_timer_interval_seconds=5
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
../../submodules/mpv-anilist-updater/anilistUpdater/anilistUpdater.py
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
../../submodules/mpv-anilist-updater/anilistUpdater/main.lua
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
../submodules/immersion-tracker
|
|
||||||
@@ -1 +1 @@
|
|||||||
../submodules/mpv-youtube-queue/mpv-youtube-queue.lua
|
../../mpv-modules/mpv-youtube-queue/mpv-youtube-queue.lua
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
-- mpv_websocket
|
-- mpv_websocket
|
||||||
-- https://github.com/kuroahna/mpv_websocket
|
-- https://github.com/kuroahna/mpv_websocket
|
||||||
|
|
||||||
|
local use_secondary_subs = false
|
||||||
|
|
||||||
local utils = require("mp.utils")
|
local utils = require("mp.utils")
|
||||||
|
|
||||||
local platform = mp.get_property_native("platform")
|
local platform = mp.get_property_native("platform")
|
||||||
@@ -22,12 +24,18 @@ if err then
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function find_mpv_socket(config_file_path)
|
local function find_mpv_socket(config_file_path)
|
||||||
|
-- First, try to get from mpv properties (includes command-line options)
|
||||||
|
local mpv_socket = mp.get_property("input-ipc-server")
|
||||||
|
if mpv_socket and mpv_socket ~= "" then
|
||||||
|
return mpv_socket
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Fall back to reading config file
|
||||||
local file = io.open(config_file_path, "r")
|
local file = io.open(config_file_path, "r")
|
||||||
if file == nil then
|
if file == nil then
|
||||||
error("failed to read mpv config file `" .. config_file_path .. "`")
|
error("failed to read mpv config file `" .. config_file_path .. "`")
|
||||||
end
|
end
|
||||||
|
|
||||||
local mpv_socket
|
|
||||||
for line in file:lines() do
|
for line in file:lines() do
|
||||||
mpv_socket = line:match("^input%-ipc%-server%s*=%s*(%g+)%s*")
|
mpv_socket = line:match("^input%-ipc%-server%s*=%s*(%g+)%s*")
|
||||||
if mpv_socket then
|
if mpv_socket then
|
||||||
@@ -50,18 +58,24 @@ if platform == "windows" then
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function start_websocket()
|
local function start_websocket()
|
||||||
initialised_websocket = mp.command_native_async({
|
local args = {
|
||||||
name = "subprocess",
|
|
||||||
playback_only = false,
|
|
||||||
capture_stdout = true,
|
|
||||||
capture_stderr = true,
|
|
||||||
args = {
|
|
||||||
mpv_websocket_path,
|
mpv_websocket_path,
|
||||||
"-m",
|
"-m",
|
||||||
mpv_socket,
|
mpv_socket,
|
||||||
"-w",
|
"-w",
|
||||||
"6677",
|
"6677",
|
||||||
},
|
}
|
||||||
|
|
||||||
|
if use_secondary_subs then
|
||||||
|
table.insert(args, "-s")
|
||||||
|
end
|
||||||
|
|
||||||
|
initialised_websocket = mp.command_native_async({
|
||||||
|
name = "subprocess",
|
||||||
|
playback_only = false,
|
||||||
|
capture_stdout = true,
|
||||||
|
capture_stderr = true,
|
||||||
|
args = args,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -79,5 +93,18 @@ local function toggle_websocket()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function toggle_subs_type()
|
||||||
|
if use_secondary_subs then
|
||||||
|
use_secondary_subs = false
|
||||||
|
else
|
||||||
|
use_secondary_subs = true
|
||||||
|
end
|
||||||
|
if initialised_websocket then
|
||||||
|
end_websocket()
|
||||||
|
start_websocket()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
mp.register_script_message("togglewebsocket", toggle_websocket)
|
mp.register_script_message("togglewebsocket", toggle_websocket)
|
||||||
|
mp.register_script_message("togglesubstype", toggle_subs_type)
|
||||||
start_websocket()
|
start_websocket()
|
||||||
|
|||||||
24
.config/opencode/opencode-notifier.json
Normal file
24
.config/opencode/opencode-notifier.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"sound": false,
|
||||||
|
"notification": true,
|
||||||
|
"timeout": 5,
|
||||||
|
"showProjectName": true,
|
||||||
|
"events": {
|
||||||
|
"permission": { "sound": false, "notification": true },
|
||||||
|
"complete": { "sound": false, "notification": true },
|
||||||
|
"error": { "sound": false, "notification": true },
|
||||||
|
"question": { "sound": false, "notification": true }
|
||||||
|
},
|
||||||
|
"messages": {
|
||||||
|
"permission": "Session needs permission",
|
||||||
|
"complete": "Session has finished",
|
||||||
|
"error": "Session encountered an error",
|
||||||
|
"question": "Session has a question"
|
||||||
|
},
|
||||||
|
"sounds": {
|
||||||
|
"permission": "/path/to/custom/sound.wav",
|
||||||
|
"complete": "/path/to/custom/sound.wav",
|
||||||
|
"error": "/path/to/custom/sound.wav",
|
||||||
|
"question": "/path/to/custom/sound.wav"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,49 +1,225 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://opencode.ai/config.json",
|
"$schema": "https://opencode.ai/config.json",
|
||||||
"theme": "catppuccin",
|
"plugin": [
|
||||||
"model": "github-copilot/gpt-5.1",
|
"opencode-openai-codex-auth",
|
||||||
|
"opencode-antigravity-auth@beta",
|
||||||
|
"@mohak34/opencode-notifier@latest",
|
||||||
|
],
|
||||||
"provider": {
|
"provider": {
|
||||||
"openai": {
|
"openai": {
|
||||||
"models": {
|
"name": "OpenAI",
|
||||||
"gpt-5": {
|
|
||||||
"options": {
|
"options": {
|
||||||
"reasoningEffort": "high",
|
"reasoningEffort": "medium",
|
||||||
"textVerbosity": "low",
|
|
||||||
"reasoningSummary": "auto",
|
"reasoningSummary": "auto",
|
||||||
"include": ["reasoning.encrypted_content"],
|
"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"
|
||||||
},
|
},
|
||||||
"agent": {
|
"medium": {
|
||||||
"build": {
|
"reasoningEffort": "medium",
|
||||||
"mode": "primary",
|
"reasoningSummary": "auto",
|
||||||
"model": "github-copilot/gpt-5.1",
|
"textVerbosity": "medium"
|
||||||
"tools": {
|
|
||||||
"write": true,
|
|
||||||
"edit": true,
|
|
||||||
"bash": true
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"plan": {
|
"high": {
|
||||||
"mode": "primary",
|
"reasoningEffort": "high",
|
||||||
"model": "github-copilot/gpt-5.1-codex",
|
"reasoningSummary": "detailed",
|
||||||
"tools": {
|
"textVerbosity": "medium"
|
||||||
"write": false,
|
|
||||||
"edit": false,
|
|
||||||
"bash": false
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"code-reviewer": {
|
"xhigh": {
|
||||||
"description": "Reviews code for best practices and potential issues",
|
"reasoningEffort": "xhigh",
|
||||||
"mode": "subagent",
|
"reasoningSummary": "detailed",
|
||||||
"model": "github-copilot/gpt-5.1",
|
"textVerbosity": "medium"
|
||||||
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
|
|
||||||
"tools": {
|
|
||||||
"write": false,
|
|
||||||
"edit": false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"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": {
|
||||||
|
"antigravity-gemini-3-pro-high": {
|
||||||
|
"name": "Gemini 3 Pro High (Antigravity)",
|
||||||
|
"thinking": true,
|
||||||
|
"attachment": true,
|
||||||
|
"limit": {
|
||||||
|
"context": 1048576,
|
||||||
|
"output": 65535
|
||||||
|
},
|
||||||
|
"modalities": {
|
||||||
|
"input": [
|
||||||
|
"text",
|
||||||
|
"image",
|
||||||
|
"pdf"
|
||||||
|
],
|
||||||
|
"output": [
|
||||||
|
"text"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"antigravity-gemini-3-pro-low": {
|
||||||
|
"name": "Gemini 3 Pro Low (Antigravity)",
|
||||||
|
"thinking": true,
|
||||||
|
"attachment": true,
|
||||||
|
"limit": {
|
||||||
|
"context": 1048576,
|
||||||
|
"output": 65535
|
||||||
|
},
|
||||||
|
"modalities": {
|
||||||
|
"input": [
|
||||||
|
"text",
|
||||||
|
"image",
|
||||||
|
"pdf"
|
||||||
|
],
|
||||||
|
"output": [
|
||||||
|
"text"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"antigravity-gemini-3-flash": {
|
||||||
|
"name": "Gemini 3 Flash (Antigravity)",
|
||||||
|
"attachment": true,
|
||||||
|
"limit": {
|
||||||
|
"context": 1048576,
|
||||||
|
"output": 65536
|
||||||
|
},
|
||||||
|
"modalities": {
|
||||||
|
"input": [
|
||||||
|
"text",
|
||||||
|
"image",
|
||||||
|
"pdf"
|
||||||
|
],
|
||||||
|
"output": [
|
||||||
|
"text"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"theme": "catppuccin-macchiato",
|
||||||
|
"share": "manual",
|
||||||
|
"formatter": {
|
||||||
|
"prettier": {
|
||||||
|
"disabled": false
|
||||||
|
},
|
||||||
|
"ruff": {
|
||||||
|
"disabled": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instructions": [
|
||||||
|
"AGENTS.md",
|
||||||
|
"CONTRIBUTING.md",
|
||||||
|
"CLAUDE.md",
|
||||||
|
"docs/guidelines.md",
|
||||||
|
".cursor/rules/*.md"
|
||||||
|
],
|
||||||
|
"permission": {
|
||||||
|
"edit": "ask",
|
||||||
|
"bash": "ask"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,35 @@
|
|||||||
@import "catppuccin-macchiato.rasi"
|
// @import "catppuccin-latte"
|
||||||
|
// @import "catppuccin-frappe"
|
||||||
configuration {
|
// @import "catppuccin-macchiato"
|
||||||
show-icons: true;
|
// @import "catppuccin-mocha"
|
||||||
icon-theme: "Dracula";
|
|
||||||
dpi: 144;
|
|
||||||
}
|
|
||||||
|
|
||||||
* {
|
* {
|
||||||
|
rosewater: #f4dbd6;
|
||||||
|
flamingo: #f0c6c6;
|
||||||
|
pink: #f5bde6;
|
||||||
|
mauve: #c6a0f6;
|
||||||
|
red: #ed8796;
|
||||||
|
maroon: #ee99a0;
|
||||||
|
peach: #f5a97f;
|
||||||
|
yellow: #eed49f;
|
||||||
|
green: #a6da95;
|
||||||
|
teal: #8bd5ca;
|
||||||
|
sky: #91d7e3;
|
||||||
|
sapphire: #7dc4e4;
|
||||||
|
blue: #8aadf4;
|
||||||
|
lavender: #b7bdf8;
|
||||||
|
text: #cad3f5;
|
||||||
|
subtext1: #b8c0e0;
|
||||||
|
subtext0: #a5adcb;
|
||||||
|
overlay2: #939ab7;
|
||||||
|
overlay1: #8087a2;
|
||||||
|
overlay0: #6e738d;
|
||||||
|
surface2: #5b6078;
|
||||||
|
surface1: #494d64;
|
||||||
|
surface0: #363a4f;
|
||||||
|
base: #24273a;
|
||||||
|
mantle: #1e2030;
|
||||||
|
crust: #181926;
|
||||||
selected-active-foreground: @background;
|
selected-active-foreground: @background;
|
||||||
lightfg: @text;
|
lightfg: @text;
|
||||||
separatorcolor: @foreground;
|
separatorcolor: @foreground;
|
||||||
@@ -35,6 +58,11 @@ configuration {
|
|||||||
alternate-active-foreground: @blue;
|
alternate-active-foreground: @blue;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
configuration {
|
||||||
|
show-icons: true;
|
||||||
|
icon-theme: "Dracula";
|
||||||
|
dpi: 144;
|
||||||
|
}
|
||||||
element {
|
element {
|
||||||
padding: 1px ;
|
padding: 1px ;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@@ -90,12 +118,6 @@ element-icon {
|
|||||||
text-color: inherit;
|
text-color: inherit;
|
||||||
}
|
}
|
||||||
window {
|
window {
|
||||||
border: 4;
|
|
||||||
padding: 12px;
|
|
||||||
border-radius: 12px;
|
|
||||||
anchor: center;
|
|
||||||
location: center;
|
|
||||||
|
|
||||||
padding: 5;
|
padding: 5;
|
||||||
background-color: @background;
|
background-color: @background;
|
||||||
border: 1;
|
border: 1;
|
||||||
@@ -180,4 +202,3 @@ textbox-prompt-colon {
|
|||||||
str: ":";
|
str: ":";
|
||||||
text-color: inherit;
|
text-color: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ configuration {
|
|||||||
show-icons: true;
|
show-icons: true;
|
||||||
icon-theme: "Dracula";
|
icon-theme: "Dracula";
|
||||||
dpi: 144;
|
dpi: 144;
|
||||||
|
modes: "window,run,ssh,drun,filebrowser";
|
||||||
}
|
}
|
||||||
|
|
||||||
#window {
|
#window {
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ mainbox {
|
|||||||
border-radius: 0px 0px 0px 0px;
|
border-radius: 0px 0px 0px 0px;
|
||||||
border-color: @selected;
|
border-color: @selected;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
children: [ "inputbar", "listview" ];
|
children: [ "inputbar", "listview-split" ];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****----- Inputbar -----*****/
|
/*****----- Inputbar -----*****/
|
||||||
@@ -110,6 +110,18 @@ listview {
|
|||||||
text-color: @foreground;
|
text-color: @foreground;
|
||||||
cursor: "default";
|
cursor: "default";
|
||||||
}
|
}
|
||||||
|
listview-split {
|
||||||
|
orientation: horizontal;
|
||||||
|
children: [listview, icon-current-entry];
|
||||||
|
spacing: 1em;
|
||||||
|
background-color: @background;
|
||||||
|
}
|
||||||
|
icon-current-entry {
|
||||||
|
expand: true;
|
||||||
|
size: 40%;
|
||||||
|
background-color: transparent;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
scrollbar {
|
scrollbar {
|
||||||
handle-width: 5px ;
|
handle-width: 5px ;
|
||||||
handle-color: @selected;
|
handle-color: @selected;
|
||||||
@@ -173,3 +185,10 @@ textbox {
|
|||||||
horizontal-align: 0.0;
|
horizontal-align: 0.0;
|
||||||
highlight: none;
|
highlight: none;
|
||||||
}
|
}
|
||||||
|
scrollbar {
|
||||||
|
width: 4px;
|
||||||
|
handle-color: @surface2;
|
||||||
|
handle-width: 4px;
|
||||||
|
background-color: @surface0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ set -Eeuo pipefail
|
|||||||
|
|
||||||
THEME="$HOME/.config/rofi/launchers/type-3/style-4.rasi"
|
THEME="$HOME/.config/rofi/launchers/type-3/style-4.rasi"
|
||||||
DIR="$HOME/Pictures/wallpapers/favorites"
|
DIR="$HOME/Pictures/wallpapers/favorites"
|
||||||
SELECTED_WALL=$(cd "$DIR" && for a in *.jpg *.png; do echo -en "$a\0icon\x1f$a\n"; done | rofi -dmenu -i -no-custom -theme "$THEME" -p "Select a wallpaper" -theme-str 'configuration {icon-size: 128; dpi: 96;} window {width: 45%; height: 45%;}')
|
SELECTED_WALL=$(cd "$DIR" && for a in *.jpg *.png; do echo -en "$a\0icon\x1f$a\n"; done | rofi -dmenu -i -no-custom -theme "$THEME" -p "Select a wallpaper" -theme-str 'configuration {icon-size: 256; dpi: 96;} window {width: 75%; height: 69%;} listview {rows: 5; lines: 7;}')
|
||||||
PTH="$(printf "%s" "$DIR/$SELECTED_WALL" | tr -s '/')"
|
PTH="$(printf "%s" "$DIR/$SELECTED_WALL" | tr -s '/')"
|
||||||
hyprctl hyprpaper wallpaper "DP-1, $PTH"
|
hyprctl hyprpaper wallpaper "DP-1, $PTH"
|
||||||
notify-send -a "rofi-wallpaper" "Wallpaper set to" -i "$PTH" "$PTH"
|
notify-send -a "rofi-wallpaper" "Wallpaper set to" -i "$PTH" "$PTH"
|
||||||
|
|||||||
129
.config/subminer/config.jsonc
Normal file
129
.config/subminer/config.jsonc
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -134,7 +134,8 @@ set -gq @catppuccin_pane_number_position "left" # right, left
|
|||||||
|
|
||||||
set -gq @catppuccin_window_text_color "#{@thm_surface_0}"
|
set -gq @catppuccin_window_text_color "#{@thm_surface_0}"
|
||||||
set -gq @catppuccin_window_number_color "#{@thm_overlay_2}"
|
set -gq @catppuccin_window_number_color "#{@thm_overlay_2}"
|
||||||
set -ogq @catppuccin_window_text " #T"
|
set -q @catppuccin_window_text " #W"
|
||||||
|
set -q @catppuccin_window_current_text " #W"
|
||||||
set -gq @catppuccin_window_number "#I"
|
set -gq @catppuccin_window_number "#I"
|
||||||
set -gq @catppuccin_window_current_text_color "#{@thm_surface_1}"
|
set -gq @catppuccin_window_current_text_color "#{@thm_surface_1}"
|
||||||
set -gq @catppuccin_window_current_number_color "#{@thm_mauve}"
|
set -gq @catppuccin_window_current_number_color "#{@thm_mauve}"
|
||||||
@@ -156,7 +157,6 @@ set -gq @catppuccin_window_flags_icon_format "##{?window_activity_flag,#{E:@catp
|
|||||||
set -gq allow-passthrough on
|
set -gq allow-passthrough on
|
||||||
set -g visual-activity off
|
set -g visual-activity off
|
||||||
|
|
||||||
|
|
||||||
set -g @catppuccin_window_status_style "rounded" # basic, rounded, slanted, custom, or none
|
set -g @catppuccin_window_status_style "rounded" # basic, rounded, slanted, custom, or none
|
||||||
|
|
||||||
run ~/.config/tmux/plugins/catppuccin/tmux/catppuccin.tmux
|
run ~/.config/tmux/plugins/catppuccin/tmux/catppuccin.tmux
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ export GTK_THEME=Dracula
|
|||||||
export XDG_CONFIG_HOME=$HOME/.config
|
export XDG_CONFIG_HOME=$HOME/.config
|
||||||
export COMPOSE_BAKE=true
|
export COMPOSE_BAKE=true
|
||||||
export ANKI_WAYLAND=1
|
export ANKI_WAYLAND=1
|
||||||
|
export SUDO_PROMPT=$'\a[sudo] password for %u: '
|
||||||
|
|
||||||
# nvidia
|
# nvidia
|
||||||
export NVD_BACKEND=direct
|
export NVD_BACKEND=direct
|
||||||
|
|||||||
22
.gitconfig##os.Darwin
Normal file
22
.gitconfig##os.Darwin
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
[user]
|
||||||
|
name = sudacode
|
||||||
|
email = suda@sudacode.com
|
||||||
|
[init]
|
||||||
|
defaultBranch = main
|
||||||
|
[push]
|
||||||
|
default = simple
|
||||||
|
autoSetupRemote = true
|
||||||
|
[pull]
|
||||||
|
rebase = true
|
||||||
|
[rebase]
|
||||||
|
autoStash = true
|
||||||
|
[fetch]
|
||||||
|
prune = true
|
||||||
|
[diff]
|
||||||
|
algorithm = histogram
|
||||||
|
[merge]
|
||||||
|
conflictstyle = zdiff3
|
||||||
|
[color]
|
||||||
|
ui = auto
|
||||||
|
[core]
|
||||||
|
pager = less -FRX
|
||||||
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -19,9 +19,6 @@
|
|||||||
[submodule ".config/mpv-modules/autosubsync-mpv"]
|
[submodule ".config/mpv-modules/autosubsync-mpv"]
|
||||||
path = .config/mpv-modules/autosubsync-mpv
|
path = .config/mpv-modules/autosubsync-mpv
|
||||||
url = git@github.com:joaquintorres/autosubsync-mpv.git
|
url = git@github.com:joaquintorres/autosubsync-mpv.git
|
||||||
[submodule ".config/mpv-modules/immersion-tracker"]
|
|
||||||
path = .config/mpv-modules/immersion-tracker
|
|
||||||
url = git@gitea.suda.codes:sudacode/immersion-tracker.git
|
|
||||||
[submodule ".config/mpv-modules/mpvacious"]
|
[submodule ".config/mpv-modules/mpvacious"]
|
||||||
path = .config/mpv-modules/mpvacious
|
path = .config/mpv-modules/mpvacious
|
||||||
url = git@github.com:ksyasuda/mpvacious.git
|
url = git@github.com:ksyasuda/mpvacious.git
|
||||||
|
|||||||
@@ -17,6 +17,10 @@ HISTCONTROL=Ignoreboth
|
|||||||
fpath=(/Users/sudacode/.docker/completions $fpath)
|
fpath=(/Users/sudacode/.docker/completions $fpath)
|
||||||
|
|
||||||
[[ "$TERM_PROGRAM" == "vscode" ]] && . "$(code --locate-shell-integration-path zsh)"
|
[[ "$TERM_PROGRAM" == "vscode" ]] && . "$(code --locate-shell-integration-path zsh)"
|
||||||
|
eval "$(fnm env --use-on-cd --shell zsh)"
|
||||||
|
export NVM_DIR="$HOME/.nvm"
|
||||||
|
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh" # This loads nvm
|
||||||
|
[ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion
|
||||||
|
|
||||||
bindkey -v
|
bindkey -v
|
||||||
# zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
|
# zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
|
||||||
|
|||||||
300
projects/scripts/popup-ai-translator.py
Executable file
300
projects/scripts/popup-ai-translator.py
Executable file
@@ -0,0 +1,300 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Japanese Learning Assistant using OpenRouter API
|
||||||
|
Uses Google Gemini Flash 2.0 for AJATT-aligned Japanese analysis
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
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", "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
|
||||||
|
if not OPENROUTER_API_KEY:
|
||||||
|
key_file = os.path.expanduser("~/.openrouterapikey")
|
||||||
|
if os.path.isfile(key_file):
|
||||||
|
with open(key_file, "r") as f:
|
||||||
|
OPENROUTER_API_KEY = f.read().strip()
|
||||||
|
|
||||||
|
TRANSLATION_PROMPT = """You are my Japanese-learning assistant. Help me acquire Japanese through deep, AJATT-aligned analysis.
|
||||||
|
|
||||||
|
For every input, output exactly using clean plain text formatting:
|
||||||
|
|
||||||
|
═══════════════════════════════════════
|
||||||
|
1. JAPANESE INPUT
|
||||||
|
═══════════════════════════════════════
|
||||||
|
|
||||||
|
Repeat the original text exactly. Correct only critical OCR/punctuation errors.
|
||||||
|
|
||||||
|
═══════════════════════════════════════
|
||||||
|
2. NATURAL ENGLISH TRANSLATION
|
||||||
|
═══════════════════════════════════════
|
||||||
|
|
||||||
|
Accurate and natural. Preserve tone, formality, and nuance. Avoid literalism.
|
||||||
|
|
||||||
|
═══════════════════════════════════════
|
||||||
|
3. BREAKDOWN
|
||||||
|
═══════════════════════════════════════
|
||||||
|
|
||||||
|
For each token, provide a breakdown of the vocabulary, grammar, and nuance.
|
||||||
|
|
||||||
|
▸ Vocabulary: Part of speech + concise definition
|
||||||
|
▸ Grammar: Particles, conjugations, constructions (contextual usage)
|
||||||
|
▸ Nuance: Implied meaning, connotation, emotional tone, differences from similar expressions
|
||||||
|
|
||||||
|
Core Principles:
|
||||||
|
|
||||||
|
• Preserve native phrasing—never oversimplify
|
||||||
|
• Highlight subtle grammar, register shifts, and pragmatic implications
|
||||||
|
• Encourage pattern recognition; provide contrastive examples (e.g., ~のに vs ~けど)
|
||||||
|
• Focus on real Japanese usage
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
|
||||||
|
• English explanations only (no romaji)
|
||||||
|
• Use the section dividers shown above (═══) for major sections
|
||||||
|
• Use ▸ for sub-items and • for bullet points
|
||||||
|
• Put Japanese terms in 「brackets」
|
||||||
|
• No filler text
|
||||||
|
|
||||||
|
Optional Additions (only when valuable):
|
||||||
|
|
||||||
|
• Synonyms, formality/register notes, cultural insights, common mistakes, extra native examples
|
||||||
|
|
||||||
|
Goal: Deep comprehension, natural grammar internalization, nuanced vocabulary, progress toward Japanese-only understanding."""
|
||||||
|
|
||||||
|
GRAMMAR_PROMPT = """
|
||||||
|
You are a Japanese grammar analysis assistant.
|
||||||
|
|
||||||
|
The user will provide Japanese sentences. Your task is to explain the **grammar and structure in English**, prioritizing how the sentence is constructed rather than translating word-for-word.
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
|
||||||
|
* Always show the original Japanese first.
|
||||||
|
* Provide a short, natural English gloss only if helpful.
|
||||||
|
* Explain grammar patterns, verb forms, particles, and omissions.
|
||||||
|
* Emphasize nuance, implication, and speaker intent.
|
||||||
|
* Avoid unnecessary vocabulary definitions unless they affect the grammar.
|
||||||
|
* Assume the user is actively studying Japanese and wants deep understanding.
|
||||||
|
|
||||||
|
Your explanations should help the user internalize patterns, not memorize translations.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def show_error(message: str) -> None:
|
||||||
|
"""Display an error dialog using zenity."""
|
||||||
|
subprocess.run(
|
||||||
|
["zenity", "--error", "--text", message, "--title", "Error"],
|
||||||
|
stderr=subprocess.DEVNULL,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_clipboard() -> str:
|
||||||
|
"""Get clipboard contents using wl-paste or xclip."""
|
||||||
|
# Try wl-paste first (Wayland)
|
||||||
|
result = subprocess.run(
|
||||||
|
["wl-paste", "--no-newline"],
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.DEVNULL,
|
||||||
|
text=True,
|
||||||
|
)
|
||||||
|
if result.returncode == 0:
|
||||||
|
return result.stdout.strip()
|
||||||
|
|
||||||
|
# Fall back to xclip (X11)
|
||||||
|
result = subprocess.run(
|
||||||
|
["xclip", "-selection", "clipboard", "-o"],
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.DEVNULL,
|
||||||
|
text=True,
|
||||||
|
)
|
||||||
|
if result.returncode == 0:
|
||||||
|
return result.stdout.strip()
|
||||||
|
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_input() -> str | None:
|
||||||
|
"""Get input from user via zenity entry dialog, pre-populated with clipboard."""
|
||||||
|
clipboard = get_clipboard()
|
||||||
|
|
||||||
|
cmd = [
|
||||||
|
"zenity",
|
||||||
|
"--entry",
|
||||||
|
"--title",
|
||||||
|
"Japanese Assistant",
|
||||||
|
"--text",
|
||||||
|
"Enter Japanese text to analyze (press Enter to send):",
|
||||||
|
"--width",
|
||||||
|
"600",
|
||||||
|
]
|
||||||
|
|
||||||
|
if clipboard:
|
||||||
|
cmd.extend(["--entry-text", clipboard])
|
||||||
|
|
||||||
|
result = subprocess.run(
|
||||||
|
cmd,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.DEVNULL,
|
||||||
|
text=True,
|
||||||
|
)
|
||||||
|
if result.returncode != 0:
|
||||||
|
return None
|
||||||
|
return result.stdout.strip()
|
||||||
|
|
||||||
|
|
||||||
|
def get_mode() -> str | None:
|
||||||
|
"""Ask user to choose between translation and grammar assistant."""
|
||||||
|
result = subprocess.run(
|
||||||
|
[
|
||||||
|
"zenity",
|
||||||
|
"--list",
|
||||||
|
"--title",
|
||||||
|
"Japanese Assistant",
|
||||||
|
"--text",
|
||||||
|
"Choose analysis mode:",
|
||||||
|
"--column=Mode",
|
||||||
|
"Translation (full analysis)",
|
||||||
|
"Grammar (structure focus)",
|
||||||
|
],
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.DEVNULL,
|
||||||
|
text=True,
|
||||||
|
)
|
||||||
|
if result.returncode != 0:
|
||||||
|
return None
|
||||||
|
return result.stdout.strip()
|
||||||
|
|
||||||
|
|
||||||
|
def show_notification(message: str, body: str) -> subprocess.Popen:
|
||||||
|
"""Show a notification using notify-send."""
|
||||||
|
return subprocess.Popen(
|
||||||
|
["notify-send", "-t", "0", "-a", "Japanese Assistant", message, body],
|
||||||
|
stderr=subprocess.DEVNULL,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def close_notification() -> None:
|
||||||
|
"""Close the processing notification."""
|
||||||
|
subprocess.run(
|
||||||
|
["pkill", "-f", "notify-send.*Processing.*Analyzing"],
|
||||||
|
stderr=subprocess.DEVNULL,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def display_result(content: str) -> None:
|
||||||
|
"""Display the result in a zenity text-info dialog."""
|
||||||
|
subprocess.run(
|
||||||
|
[
|
||||||
|
"zenity",
|
||||||
|
"--text-info",
|
||||||
|
"--title",
|
||||||
|
"Japanese Analysis",
|
||||||
|
"--width",
|
||||||
|
"900",
|
||||||
|
"--height",
|
||||||
|
"700",
|
||||||
|
"--font",
|
||||||
|
"monospace 11",
|
||||||
|
],
|
||||||
|
input=content,
|
||||||
|
text=True,
|
||||||
|
stderr=subprocess.DEVNULL,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def make_api_request(user_input: str, system_prompt: str) -> dict:
|
||||||
|
"""Make the API request to OpenRouter."""
|
||||||
|
headers = {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"Authorization": f"Bearer {OPENROUTER_API_KEY}",
|
||||||
|
"HTTP-Referer": "https://github.com/sudacode/scripts",
|
||||||
|
"X-Title": "Japanese Learning Assistant",
|
||||||
|
}
|
||||||
|
|
||||||
|
payload = {
|
||||||
|
"model": MODEL,
|
||||||
|
"messages": [
|
||||||
|
{"role": "system", "content": system_prompt},
|
||||||
|
{"role": "user", "content": user_input},
|
||||||
|
],
|
||||||
|
"temperature": 0.7,
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.post(API_URL, headers=headers, json=payload, timeout=60)
|
||||||
|
return response.json()
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
# Check for API key
|
||||||
|
if not OPENROUTER_API_KEY:
|
||||||
|
show_error("OPENROUTER_API_KEY environment variable is not set.")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
# Ask user for mode
|
||||||
|
mode = get_mode()
|
||||||
|
if not mode:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
# Select appropriate prompt
|
||||||
|
if "Grammar" in mode:
|
||||||
|
system_prompt = GRAMMAR_PROMPT
|
||||||
|
else:
|
||||||
|
system_prompt = TRANSLATION_PROMPT
|
||||||
|
|
||||||
|
# Get input from user
|
||||||
|
user_input = get_input()
|
||||||
|
if not user_input:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
# Show loading notification
|
||||||
|
show_notification("Processing...", f"Analyzing: {user_input[:50]}...")
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Make API request
|
||||||
|
response = make_api_request(user_input, system_prompt)
|
||||||
|
|
||||||
|
# Close loading notification
|
||||||
|
close_notification()
|
||||||
|
|
||||||
|
# Check for errors in response
|
||||||
|
if "error" in response:
|
||||||
|
error_msg = response["error"].get("message", "Unknown error")
|
||||||
|
show_error(error_msg)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
# Extract content from response
|
||||||
|
try:
|
||||||
|
content = response["choices"][0]["message"]["content"]
|
||||||
|
except (KeyError, IndexError):
|
||||||
|
show_error("Failed to parse API response")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if not content:
|
||||||
|
show_error("Empty response from API")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
# Display result
|
||||||
|
display_result(content)
|
||||||
|
|
||||||
|
except requests.RequestException as e:
|
||||||
|
close_notification()
|
||||||
|
show_error(f"API request failed: {e}")
|
||||||
|
return 1
|
||||||
|
except Exception as e:
|
||||||
|
close_notification()
|
||||||
|
show_error(f"Error: {e}")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(main())
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
THEME="${THEME:-$HOME/.config/rofi/launchers/type-2/style-2.rasi}"
|
THEME="${THEME:-/opt/mpv-yomitan/catppuccin-macchiato.rasi}"
|
||||||
THUMBNAIL_PATH="/tmp/rmpv-thumbnail.jpg"
|
|
||||||
FONTCONFIG_FILE=$HOME/.config/mpv/mpv-fonts.conf
|
FONTCONFIG_FILE=$HOME/.config/mpv/mpv-fonts.conf
|
||||||
COMMAND=mpv
|
COMMAND=mpv
|
||||||
|
VIDEO_EXTENSIONS="mkv|mp4|avi|webm|mov|flv|wmv|m4v|ts|m2ts"
|
||||||
|
|
||||||
# Parse command-line options first
|
# Parse command-line options first
|
||||||
while getopts ":it:" opt; do
|
while getopts ":it:" opt; do
|
||||||
@@ -26,81 +26,56 @@ while getopts ":it:" opt; do
|
|||||||
done
|
done
|
||||||
shift $((OPTIND - 1))
|
shift $((OPTIND - 1))
|
||||||
|
|
||||||
generate_thumbnail() {
|
find_videos() {
|
||||||
local video_file="$1"
|
find "$PWD" -maxdepth 1 -type f -regextype posix-extended \
|
||||||
local temp_thumb="/tmp/rmpv-thumbnail-$$.jpg"
|
-iregex ".*\.($VIDEO_EXTENSIONS)$" 2> /dev/null | sort -V
|
||||||
local thumbnail_file="${video_file%.*}.jpg"
|
}
|
||||||
|
|
||||||
# Clean up previous thumbnail
|
build_rofi_menu() {
|
||||||
rm -f "$THUMBNAIL_PATH"
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
# Validate input
|
get_video_thumbnail() {
|
||||||
if [[ -z "$video_file" ]]; then
|
local video="$1"
|
||||||
echo "Error: No video file specified" >&2
|
local thumb_dir="$HOME/.cache/thumbnails/large"
|
||||||
return 1
|
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
|
fi
|
||||||
|
|
||||||
if [[ ! -f "$video_file" ]]; then
|
local tmp_thumb="/tmp/rmpv-thumb-$$.jpg"
|
||||||
echo "Error: Video file '$video_file' not found" >&2
|
if command -v ffmpegthumbnailer &> /dev/null; then
|
||||||
return 1
|
ffmpegthumbnailer -i "$video" -o "$tmp_thumb" -s 512 -q 5 2> /dev/null && echo "$tmp_thumb"
|
||||||
fi
|
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"
|
||||||
# Check if it's a video file
|
|
||||||
if ! file "$video_file" | grep -qE "(video|Video)"; then
|
|
||||||
echo "Error: '$video_file' doesn't appear to be a video file" >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Generate thumbnail if it doesn't exist
|
|
||||||
if [[ ! -f "$thumbnail_file" ]]; then
|
|
||||||
echo "Generating thumbnail for $(basename "$video_file")..."
|
|
||||||
# Try generating thumbnail side-by-side
|
|
||||||
if ! ffmpeg -ss 00:00:01 -i "$video_file" \
|
|
||||||
-vf "scale=320:240:force_original_aspect_ratio=decrease,pad=320:240:(ow-iw)/2:(oh-ih)/2" \
|
|
||||||
-frames:v 1 \
|
|
||||||
-q:v 4 \
|
|
||||||
"$thumbnail_file" \
|
|
||||||
-loglevel error -y 2>/dev/null; then
|
|
||||||
|
|
||||||
# Fallback to temp file if side-by-side fails (e.g. read-only fs)
|
|
||||||
echo "Warning: Failed to write to $thumbnail_file, trying temp location" >&2
|
|
||||||
thumbnail_file="$temp_thumb"
|
|
||||||
|
|
||||||
if ! ffmpeg -ss 00:00:01 -i "$video_file" \
|
|
||||||
-vf "scale=320:240:force_original_aspect_ratio=decrease,pad=320:240:(ow-iw)/2:(oh-ih)/2" \
|
|
||||||
-frames:v 1 \
|
|
||||||
-q:v 4 \
|
|
||||||
"$thumbnail_file" \
|
|
||||||
-loglevel error -y 2>/dev/null; then
|
|
||||||
echo "Error: Failed to generate thumbnail" >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Copy to consistent location for notify-send
|
|
||||||
# We use a fixed path so notify-send always finds it
|
|
||||||
if cp "$thumbnail_file" "$THUMBNAIL_PATH" 2>/dev/null; then
|
|
||||||
echo "Thumbnail ready at: $THUMBNAIL_PATH"
|
|
||||||
ls -l "$THUMBNAIL_PATH"
|
|
||||||
file "$THUMBNAIL_PATH"
|
|
||||||
else
|
|
||||||
echo "Error: Failed to copy thumbnail to $THUMBNAIL_PATH" >&2
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
choice="$(find . -iname "*[.mkv|.mp4]" | sort -h | rofi -dmenu -i -theme "$THEME" -theme-str 'listview {columns: 1; lines: 15;} window {width: 88%;}' -p "Choose Video")"
|
selection=$(build_rofi_menu | rofi -dmenu -i -show-icons -theme "$THEME" \
|
||||||
if [[ -z "$choice" ]]; then
|
-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."
|
echo "No video selected."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
generate_thumbnail "$choice"
|
choice="./$selection"
|
||||||
if [[ ! -f "$THUMBNAIL_PATH" ]]; then
|
|
||||||
echo "Warning: Thumbnail not created, notification will have no icon" >&2
|
THUMBNAIL_PATH=$(get_video_thumbnail "$choice")
|
||||||
|
if [[ -n "$THUMBNAIL_PATH" && -f "$THUMBNAIL_PATH" ]]; then
|
||||||
|
notify-send -i "$THUMBNAIL_PATH" "Playing Video" "$(basename "$choice")"
|
||||||
|
else
|
||||||
|
notify-send "Playing Video" "$(basename "$choice")"
|
||||||
fi
|
fi
|
||||||
notify-send -i "$THUMBNAIL_PATH" "Playing Video" "$(basename "$choice")"
|
|
||||||
$COMMAND "$choice" &
|
$COMMAND "$choice" &
|
||||||
|
|
||||||
# vim: ft=sh
|
# vim: ft=sh
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user