Compare commits
203 commits
e49e0ca025
...
450acd25d3
Author | SHA1 | Date | |
---|---|---|---|
![]() |
450acd25d3 | ||
![]() |
1426bceb39 | ||
![]() |
cee8b5a21e | ||
![]() |
196fe7fe5c | ||
![]() |
dfbd85f366 | ||
![]() |
61b1bbaf0e | ||
![]() |
8534eab109 | ||
![]() |
edb0f0774c | ||
![]() |
2598b15d21 | ||
![]() |
95da0d61e8 | ||
![]() |
e7154d9e16 | ||
![]() |
9729640018 | ||
![]() |
995ac9fece | ||
![]() |
1c9e85dbdf | ||
![]() |
c3d53fecd0 | ||
![]() |
53f2c3e035 | ||
![]() |
753572bb43 | ||
![]() |
b4415e5abf | ||
![]() |
2590494861 | ||
![]() |
90bcbedbee | ||
![]() |
1c025b6f4a | ||
![]() |
20d213ff10 | ||
![]() |
32c1b02ebe | ||
![]() |
1caefe331e | ||
![]() |
f96777c213 | ||
![]() |
89f5804513 | ||
![]() |
353d99146d | ||
![]() |
553158db13 | ||
![]() |
8606d515cf | ||
![]() |
4d056e0f52 | ||
![]() |
c2a15979c2 | ||
![]() |
89569ed26c | ||
![]() |
c8b816fd31 | ||
![]() |
df3bd9fa20 | ||
![]() |
80fea4fe2c | ||
![]() |
98f11984cc | ||
![]() |
709cd2d7a7 | ||
![]() |
09953219e9 | ||
![]() |
a2daf25767 | ||
![]() |
8338bb3a6a | ||
![]() |
dd9b6c424b | ||
![]() |
8786113894 | ||
![]() |
92f4335802 | ||
![]() |
4dd967618a | ||
![]() |
ea03437a69 | ||
![]() |
a3dcba050a | ||
![]() |
ef1a659b4c | ||
![]() |
58f522a29a | ||
![]() |
22fa662211 | ||
![]() |
ae952575fc | ||
![]() |
276c0dfb5e | ||
![]() |
205108d994 | ||
![]() |
4613ecb89e | ||
![]() |
059b6b5191 | ||
![]() |
b8157b09ab | ||
![]() |
20a3c0641f | ||
![]() |
e53f48f4d7 | ||
![]() |
58d134e3c1 | ||
![]() |
c71446ee15 | ||
![]() |
14fdcd0d39 | ||
![]() |
c68d87c320 | ||
![]() |
23edfbb890 | ||
![]() |
f704cda8b7 | ||
![]() |
7a9614f675 | ||
![]() |
c31670db5a | ||
![]() |
9d78c49ae7 | ||
![]() |
0ab50d62f5 | ||
![]() |
238d9372c6 | ||
![]() |
e2bd23b90e | ||
![]() |
709e3fe7b6 | ||
![]() |
ac228fa3f2 | ||
![]() |
0a3aaba336 | ||
![]() |
83b4613674 | ||
![]() |
ff1d11da22 | ||
![]() |
ef6ba42b34 | ||
![]() |
1beed880fb | ||
![]() |
0f98bdb7e0 | ||
![]() |
d8d32f2813 | ||
![]() |
e30f58d181 | ||
![]() |
1155dcf308 | ||
![]() |
2a3bb1b2b0 | ||
![]() |
1d83a2ceb8 | ||
![]() |
ff4fea7c5c | ||
![]() |
5744d49a4d | ||
![]() |
3b588211c0 | ||
![]() |
873133c3c0 | ||
![]() |
565298b457 | ||
![]() |
6440b955fc | ||
![]() |
b7ba43670f | ||
![]() |
50ffd3a435 | ||
![]() |
0269094a4e | ||
![]() |
e3497e0bc1 | ||
![]() |
0cd13cde91 | ||
![]() |
d29dddfb0f | ||
![]() |
337107676d | ||
![]() |
18005bd4b1 | ||
![]() |
551ee71a8b | ||
![]() |
fc203fa00a | ||
![]() |
b0cb008127 | ||
![]() |
ea08474d7b | ||
![]() |
19ab197c23 | ||
![]() |
1f7a1fef17 | ||
![]() |
0f9d765776 | ||
![]() |
b927d6deda | ||
![]() |
f049c7a1ad | ||
![]() |
201bd16d02 | ||
![]() |
1834ec1567 | ||
![]() |
3d74562317 | ||
![]() |
c8b09f19d7 | ||
![]() |
563da8f118 | ||
![]() |
2e7d8199fd | ||
![]() |
442034e71c | ||
![]() |
ce4223f097 | ||
![]() |
373c9ef2c8 | ||
![]() |
efc37aa8f9 | ||
![]() |
4866d1a307 | ||
![]() |
9ddb852b34 | ||
![]() |
144bbb54bd | ||
![]() |
e7f96fcc1c | ||
![]() |
bfe32e8d09 | ||
![]() |
d4dd4ba74c | ||
![]() |
8faea5e389 | ||
![]() |
063ac3be46 | ||
![]() |
7807d07fd9 | ||
![]() |
46dc71246b | ||
![]() |
b91fb3aca0 | ||
![]() |
08389f78ba | ||
![]() |
43aa8bcb80 | ||
![]() |
86164bf875 | ||
![]() |
04daca30a9 | ||
![]() |
28545dbb8e | ||
![]() |
567b29eb34 | ||
![]() |
5ed6cf8ce8 | ||
![]() |
2ecff5f0bb | ||
![]() |
594058127c | ||
![]() |
c0c5d5611d | ||
![]() |
d9280a8e1b | ||
![]() |
424dfe8f69 | ||
![]() |
12bd679967 | ||
![]() |
91b02ef3d5 | ||
![]() |
e0239c2e44 | ||
![]() |
575b261b0a | ||
![]() |
fd82a06131 | ||
![]() |
e5c3f5f230 | ||
![]() |
0d497156cc | ||
![]() |
af2f2615e4 | ||
![]() |
7a8975d2f5 | ||
![]() |
5643ec6b12 | ||
![]() |
dd3c3efa54 | ||
![]() |
c66a74dd3c | ||
![]() |
39c59a0894 | ||
![]() |
4490efa17c | ||
![]() |
4b20918bfe | ||
![]() |
4fac578b44 | ||
![]() |
fcb26c98d6 | ||
![]() |
38736b5a1f | ||
![]() |
0fd3b177e0 | ||
![]() |
c764658115 | ||
![]() |
8b2b1dc1cd | ||
![]() |
e65566bda1 | ||
![]() |
91aafc4907 | ||
![]() |
bf7190eb53 | ||
![]() |
4c736e0a76 | ||
![]() |
b31ca44be7 | ||
![]() |
edc225a169 | ||
![]() |
1e7f9cb9a9 | ||
![]() |
8053426b94 | ||
![]() |
82b9f08fab | ||
![]() |
c68dbe9f1d | ||
![]() |
e254fdf93e | ||
![]() |
abf362c5e7 | ||
![]() |
da64f3f6e3 | ||
![]() |
96c45d89d6 | ||
![]() |
d932529e8c | ||
![]() |
aac556d735 | ||
![]() |
0395decfd8 | ||
![]() |
0da4791437 | ||
![]() |
f702f8167e | ||
![]() |
c0b362ec32 | ||
![]() |
9127ac68b5 | ||
![]() |
d3ff78b802 | ||
![]() |
19164d6333 | ||
![]() |
0f6a99667f | ||
![]() |
2b0da323af | ||
![]() |
42abe59383 | ||
![]() |
3fc3c60182 | ||
![]() |
98d5649546 | ||
![]() |
dd01f4ae93 | ||
![]() |
b98e19d3d1 | ||
![]() |
8b426ba2a6 | ||
![]() |
29b78fdb53 | ||
![]() |
3a030a3db6 | ||
![]() |
3805b4e6d3 | ||
![]() |
deb70d53a8 | ||
![]() |
a6f7167c5c | ||
![]() |
0810798f0b | ||
![]() |
16956dc64b | ||
![]() |
35d0aae058 | ||
![]() |
b639fcdb50 | ||
![]() |
2dd80237ad | ||
![]() |
a65716787d | ||
![]() |
8628da6092 | ||
![]() |
9a33169d46 |
298 changed files with 36886 additions and 4735 deletions
14
.bash_profile
Normal file
14
.bash_profile
Normal file
|
@ -0,0 +1,14 @@
|
|||
#
|
||||
# ~/.bash_profile
|
||||
#
|
||||
|
||||
|
||||
export QT_STYLE_OVERIDE=GTK+
|
||||
export GDK_BACKEND=wayland
|
||||
export GTK_THEME=Adwaita:dark
|
||||
export GTK2_RC_FILES=/usr/share/themes/Raleigh/gtk-3.0/gtkrc
|
||||
export _JAVA_AWT_WM_NONREPARENTING=1
|
||||
[[ -f ~/.bashrc ]] && . ~/.bashrc
|
||||
|
||||
# [ -z "$DISPLAY" ] &&
|
||||
[ `tty` = '/dev/tty1' ] && exec dbus-run-session Hyprland
|
1
.bashrc
Symbolic link
1
.bashrc
Symbolic link
|
@ -0,0 +1 @@
|
|||
/home/kappa/dotfiles/.bashrc
|
BIN
.config/MangoHud/.github/title.png
vendored
BIN
.config/MangoHud/.github/title.png
vendored
Binary file not shown.
Before Width: | Height: | Size: 24 KiB |
|
@ -1,358 +0,0 @@
|
|||
### MangoHud configuration file
|
||||
### Uncomment any options you wish to enable. Default options are left uncommented
|
||||
### Use some_parameter=0 to disable a parameter (only works with on/off parameters)
|
||||
### Everything below can be used / overridden with the environment variable MANGOHUD_CONFIG instead
|
||||
|
||||
################ INFORMATIONAL #################
|
||||
## prints possible options on stdout
|
||||
# help
|
||||
|
||||
################ PERFORMANCE #################
|
||||
|
||||
### Limit the application FPS. Comma-separated list of one or more FPS values (e.g. 0,30,60). 0 means unlimited (unless VSynced)
|
||||
# fps_limit=0
|
||||
|
||||
### early = wait before present, late = wait after present
|
||||
# fps_limit_method=
|
||||
|
||||
### VSync [0-3] 0 = adaptive; 1 = off; 2 = mailbox; 3 = on
|
||||
# vsync=-1
|
||||
|
||||
### OpenGL VSync [0-N] 0 = off; >=1 = wait for N v-blanks, N > 1 acts as a FPS limiter (FPS = display refresh rate / N)
|
||||
# gl_vsync=-2
|
||||
|
||||
### Mip-map LoD bias. Negative values will increase texture sharpness (and aliasing)
|
||||
## Positive values will increase texture blurriness (-16 to 16)
|
||||
# picmip=-17
|
||||
|
||||
### Anisotropic filtering level. Improves sharpness of textures viewed at an angle (0 to 16)
|
||||
# af=-1
|
||||
|
||||
### Force bicubic filtering
|
||||
# bicubic
|
||||
|
||||
### Force trilinear filtering
|
||||
# trilinear
|
||||
|
||||
### Disable linear texture filtering. Makes textures look blocky
|
||||
# retro
|
||||
|
||||
################### VISUAL ###################
|
||||
|
||||
### Legacy layout
|
||||
# legacy_layout=0
|
||||
|
||||
### pre defined presets
|
||||
# -1 = default
|
||||
# 0 = no display
|
||||
# 1 = fps only
|
||||
# 2 = horizontal view
|
||||
# 3 = extended
|
||||
# 4 = high detailed information
|
||||
# preset=-1
|
||||
|
||||
### Enable most of the toggleable parameters (currently excludes `histogram`)
|
||||
# full
|
||||
|
||||
### Show FPS only. ***Not meant to be used with other display params***
|
||||
# fps_only
|
||||
|
||||
### Display custom centered text, useful for a header
|
||||
# custom_text_center=
|
||||
|
||||
### Display the current system time
|
||||
# time
|
||||
## removes the time label
|
||||
# time_no_label
|
||||
|
||||
### Time formatting examples
|
||||
## %H:%M
|
||||
## [ %T %F ]
|
||||
## %X # locally formatted time, because of limited glyph range, missing characters may show as '?' (e.g. Japanese)
|
||||
# time_format="%T"
|
||||
|
||||
### Display MangoHud version
|
||||
# version
|
||||
|
||||
### Display the current GPU information
|
||||
## Note: gpu_mem_clock and gpu_mem_temp also need "vram" to be enabled
|
||||
gpu_stats
|
||||
gpu_temp
|
||||
# gpu_junction_temp
|
||||
# gpu_core_clock
|
||||
# gpu_mem_temp
|
||||
# gpu_mem_clock
|
||||
# gpu_power
|
||||
# gpu_text=
|
||||
# gpu_load_change
|
||||
# gpu_load_value=60,90
|
||||
# gpu_load_color=39F900,FDFD09,B22222
|
||||
## GPU fan in rpm on AMD, FAN in percent on NVIDIA
|
||||
# gpu_fan
|
||||
## gpu_voltage only works on AMD GPUs
|
||||
# gpu_voltage
|
||||
|
||||
### Display the current CPU information
|
||||
cpu_stats
|
||||
cpu_temp
|
||||
# cpu_power
|
||||
# cpu_text=
|
||||
# cpu_mhz
|
||||
# cpu_load_change
|
||||
# cpu_load_value=60,90
|
||||
# cpu_load_color=39F900,FDFD09,B22222
|
||||
|
||||
### Display the current CPU load & frequency for each core
|
||||
# core_load
|
||||
# core_load_change
|
||||
|
||||
### Display IO read and write for the app (not system)
|
||||
# io_read
|
||||
# io_write
|
||||
|
||||
### Display system vram / ram / swap space usage
|
||||
# vram
|
||||
# ram
|
||||
# swap
|
||||
|
||||
### Display per process memory usage
|
||||
## Show resident memory and other types, if enabled
|
||||
# procmem
|
||||
# procmem_shared
|
||||
# procmem_virt
|
||||
|
||||
### Display battery information
|
||||
# battery
|
||||
# battery_icon
|
||||
# device_battery=gamepad,mouse
|
||||
# device_battery_icon
|
||||
# battery_watt
|
||||
# battery_time
|
||||
|
||||
### Display FPS and frametime
|
||||
fps
|
||||
# fps_sampling_period=500
|
||||
# fps_color_change
|
||||
# fps_value=30,60
|
||||
# fps_color=B22222,FDFD09,39F900
|
||||
frametime
|
||||
# frame_count
|
||||
## fps_metrics takes a list of decimal values or the value avg
|
||||
# fps_metrics=avg,0.01
|
||||
|
||||
### Display GPU throttling status based on Power, current, temp or "other"
|
||||
## Only shows if throttling is currently happening
|
||||
throttling_status
|
||||
## Same as throttling_status but displays throttling on the frametime graph
|
||||
#throttling_status_graph
|
||||
|
||||
### Display miscellaneous information
|
||||
# engine_version
|
||||
# engine_short_names
|
||||
# gpu_name
|
||||
# vulkan_driver
|
||||
# wine
|
||||
# exec_name
|
||||
# winesync
|
||||
|
||||
### Display loaded MangoHud architecture
|
||||
# arch
|
||||
|
||||
### Display the frametime line graph
|
||||
frame_timing
|
||||
# histogram
|
||||
|
||||
### Display GameMode / vkBasalt running status
|
||||
# gamemode
|
||||
# vkbasalt
|
||||
|
||||
### Gamescope related options
|
||||
## Display the status of FSR (only works in gamescope)
|
||||
# fsr
|
||||
## Hides the sharpness info for the `fsr` option (only available in gamescope)
|
||||
# hide_fsr_sharpness
|
||||
## Shows the graph of gamescope app frametimes and latency (only on gamescope obviously)
|
||||
# debug
|
||||
## Display the status of HDR (only works in gamescope)
|
||||
# hdr
|
||||
## Display the current refresh rate (only works in gamescope)
|
||||
# refresh_rate
|
||||
|
||||
|
||||
### graphs displays one or more graphs that you chose
|
||||
## seperated by ",", available graphs are
|
||||
## gpu_load,cpu_load,gpu_core_clock,gpu_mem_clock,vram,ram,cpu_temp,gpu_temp
|
||||
# graphs=
|
||||
|
||||
### mangoapp related options
|
||||
## Enables mangoapp to be displayed above the Steam UI
|
||||
# mangoapp_steam
|
||||
|
||||
### Steam Deck options
|
||||
## Shows the Steam Deck fan rpm
|
||||
# fan
|
||||
|
||||
### Display current FPS limit
|
||||
# show_fps_limit
|
||||
|
||||
### Display the current resolution
|
||||
# resolution
|
||||
|
||||
### Display custom text
|
||||
# custom_text=
|
||||
### Display output of Bash command in next column
|
||||
# exec=
|
||||
|
||||
### Display media player metadata
|
||||
# media_player
|
||||
## for example spotify
|
||||
# media_player_name=
|
||||
## Format metadata, lines are delimited by ; (wip)
|
||||
## example: {title};{artist};{album}
|
||||
## example: Track:;{title};By:;{artist};From:;{album}
|
||||
# media_player_format=title,artist,album
|
||||
|
||||
### Network interface throughput
|
||||
# network
|
||||
## Network can take arguments but it's not required.
|
||||
## without arguments it shows all interfaces
|
||||
## arguments set which interfaces will be displayed
|
||||
# network=eth0,wlo1
|
||||
|
||||
|
||||
### Change the hud font size
|
||||
font_size=22
|
||||
# font_scale=1.0
|
||||
# font_size_text=24
|
||||
# font_scale_media_player=0.55
|
||||
# no_small_font
|
||||
|
||||
### Change default font (set location to TTF/OTF file)
|
||||
## Set font for the whole hud
|
||||
font_file=/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Regular.ttf
|
||||
|
||||
## Set font only for text like media player metadata
|
||||
# font_file_text=
|
||||
|
||||
## Set font glyph ranges. Defaults to Latin-only. Don't forget to set font_file/font_file_text to font that supports these
|
||||
## Probably don't enable all at once because of memory usage and hardware limits concerns
|
||||
## If you experience crashes or text is just squares, reduce glyph range or reduce font size
|
||||
# font_glyph_ranges=korean,chinese,chinese_simplified,japanese,cyrillic,thai,vietnamese,latin_ext_a,latin_ext_b
|
||||
|
||||
### Outline text
|
||||
text_outline
|
||||
# text_outline_color = 000000
|
||||
# text_outline_thickness = 1.5
|
||||
|
||||
### Change the hud position
|
||||
position=top-right
|
||||
|
||||
### Change the corner roundness
|
||||
round_corners=10
|
||||
|
||||
### Remove margins around MangoHud
|
||||
# hud_no_margin
|
||||
|
||||
### Display compact version of MangoHud
|
||||
# hud_compact
|
||||
|
||||
### Display MangoHud in a horizontal position
|
||||
# horizontal
|
||||
# horizontal_stretch
|
||||
|
||||
### Disable / hide the hud by default
|
||||
no_display
|
||||
|
||||
### Hud position offset
|
||||
# offset_x=0
|
||||
# offset_y=0
|
||||
|
||||
### Hud dimensions
|
||||
# width=0
|
||||
# height=140
|
||||
# table_columns=3
|
||||
# cellpadding_y=-0.085
|
||||
|
||||
### Hud transparency / alpha
|
||||
# background_alpha=0.5
|
||||
# alpha=1.0
|
||||
|
||||
### FCAT overlay
|
||||
### This enables an FCAT overlay to perform frametime analysis on the final image stream.
|
||||
### Enable the overlay
|
||||
# fcat
|
||||
### Set the width of the FCAT overlay.
|
||||
### 24 is a performance optimization on AMD GPUs that should not have adverse effects on nVidia GPUs.
|
||||
### A minimum of 20 pixels is recommended by nVidia.
|
||||
# fcat_overlay_width=24
|
||||
### Set the screen edge, this can be useful for special displays that don't update from top edge to bottom. This goes from 0 (left side) to 3 (top edge), counter-clockwise.
|
||||
# fcat_screen_edge=0
|
||||
|
||||
### Color customization
|
||||
text_color=cad3f5
|
||||
gpu_color=a6da95
|
||||
cpu_color=8aadf4
|
||||
# vram_color=AD64C1
|
||||
# ram_color=C26693
|
||||
engine_color=ed8796
|
||||
# io_color=A491D3
|
||||
frametime_color=eed49f
|
||||
background_color=181926
|
||||
# media_player_color=FFFFFF
|
||||
# wine_color=EB5B5B
|
||||
# battery_color=FF9078
|
||||
|
||||
### Specify GPU with PCI bus ID for AMDGPU and NVML stats
|
||||
### Set to 'domain:bus:slot.function'
|
||||
# pci_dev=0:0a:0.0
|
||||
|
||||
### Blacklist
|
||||
# blacklist=
|
||||
|
||||
### Control over socket
|
||||
### Enable and set socket name, '%p' is replaced with process id
|
||||
## example: mangohud
|
||||
## example: mangohud-%p
|
||||
# control = -1
|
||||
|
||||
################ WORKAROUNDS #################
|
||||
### Options starting with "gl_*" are for OpenGL
|
||||
### Specify what to use for getting display size. Options are "viewport", "scissorbox" or disabled. Defaults to using glXQueryDrawable
|
||||
# gl_size_query=viewport
|
||||
|
||||
### (Re)bind given framebuffer before MangoHud gets drawn. Helps with Crusader Kings III
|
||||
# gl_bind_framebuffer=0
|
||||
|
||||
### Don't swap origin if using GL_UPPER_LEFT. Helps with Ryujinx
|
||||
# gl_dont_flip=1
|
||||
|
||||
################ INTERACTION #################
|
||||
|
||||
### Change toggle keybinds for the hud & logging
|
||||
toggle_hud=Shift_L+F12
|
||||
# toggle_hud_position=Shift_R+F11
|
||||
# toggle_fps_limit=Shift_L+F1
|
||||
# toggle_logging=Shift_L+F2
|
||||
# reload_cfg=Shift_L+F4
|
||||
# upload_log=Shift_L+F3
|
||||
|
||||
#################### LOG #####################
|
||||
### Automatically start the log after X seconds
|
||||
# autostart_log=
|
||||
### Set amount of time in seconds that the logging will run for
|
||||
# log_duration=
|
||||
### Change the default log interval, 0 is default
|
||||
# log_interval=0
|
||||
### Set location of the output files (required for logging)
|
||||
# output_folder=/home/<USERNAME>/mangologs
|
||||
### Permit uploading logs directly to FlightlessMango.com
|
||||
## set to 1 to enable
|
||||
# permit_upload=0
|
||||
### Define a '+'-separated list of percentiles shown in the benchmark results
|
||||
### Use "AVG" to get a mean average. Default percentiles are 97+AVG+1+0.1
|
||||
## example: ['97', 'AVG', '1', '0.1']
|
||||
# benchmark_percentiles=97,AVG
|
||||
## Adds more headers and information such as versioning to the log. This format is not supported on flightlessmango.com (yet)
|
||||
# log_versioning
|
||||
## Enable automatic uploads of logs to flightlessmango.com
|
||||
# upload_logs
|
|
@ -29,16 +29,16 @@
|
|||
},
|
||||
|
||||
// Font
|
||||
"editor.fontFamily": "JetBrainsMono Nerd Font",
|
||||
"editor.inlayHints.fontFamily": "JetBrainsMono Nerd Font",
|
||||
"terminal.integrated.fontFamily": "JetBrainsMono Nerd Font",
|
||||
"scm.inputFontFamily": "JetBrainsMono Nerd Font",
|
||||
"chat.editor.fontFamily": "JetBrainsMono Nerd Font",
|
||||
"debug.console.fontFamily": "JetBrainsMono Nerd Font",
|
||||
"editor.codeLensFontFamily": "JetBrainsMono Nerd Font",
|
||||
"notebook.output.fontFamily": "JetBrainsMono Nerd Font",
|
||||
"markdown.preview.fontFamily": "JetBrainsMono Nerd Font",
|
||||
"errorLens.fontFamily": "JetBrainsMono Nerd Font",
|
||||
"editor.fontFamily": "Maple Mono NF",
|
||||
"editor.inlayHints.fontFamily": "Maple Mono NF",
|
||||
"terminal.integrated.fontFamily": "Maple Mono NF",
|
||||
"scm.inputFontFamily": "Maple Mono NF",
|
||||
"chat.editor.fontFamily": "Maple Mono NF",
|
||||
"debug.console.fontFamily": "Maple Mono NF",
|
||||
"editor.codeLensFontFamily": "Maple Mono NF",
|
||||
"notebook.output.fontFamily": "Maple Mono NF",
|
||||
"markdown.preview.fontFamily": "Maple Mono NF",
|
||||
"errorLens.fontFamily": "Maple Mono NF",
|
||||
"editor.fontLigatures": true,
|
||||
"editor.fontSize": 14,
|
||||
"terminal.integrated.fontSize": 14,
|
||||
|
@ -115,8 +115,8 @@
|
|||
"height": 26,
|
||||
"fontSize": 12
|
||||
},
|
||||
"apc.font.family": "JetBrainsMono Nerd Font",
|
||||
"apc.monospace.font.family": "JetBrainsMono Nerd Font",
|
||||
"apc.font.family": "Maple Mono NF",
|
||||
"apc.monospace.font.family": "Maple Mono NF",
|
||||
"apc.statusBar": {
|
||||
"position": "editor-bottom",
|
||||
"height": 28,
|
||||
|
@ -1126,4 +1126,6 @@
|
|||
],
|
||||
"editor.matchBrackets": "never",
|
||||
"workbench.statusBar.visible": false
|
||||
"dart.flutterSdkPath": "/home/kappa/down/pkgs/flutter",
|
||||
"dart.flutterCustomEmulators": []
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ update_check = true
|
|||
## how often to sync history. note that this is only triggered when a command
|
||||
## is ran, so sync intervals may well be longer
|
||||
## set it to 0 to sync after every command
|
||||
sync_frequency = "0"
|
||||
sync_frequency = "10m"
|
||||
|
||||
## which search mode to use
|
||||
## possible values: prefix, fulltext, fuzzy, skim
|
||||
|
|
|
@ -1,958 +0,0 @@
|
|||
/* GLOBAL SETTING */
|
||||
|
||||
/* Fonts */
|
||||
|
||||
* {
|
||||
font-family: monospace !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Background Color */
|
||||
|
||||
#browser {
|
||||
background-color: #1e2030 !important;
|
||||
}
|
||||
|
||||
#tabbrowser-tabpanels,
|
||||
#appcontent,
|
||||
#tabbrowser-tabbox {
|
||||
background: none !important;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#navigator-toolbox,
|
||||
.browser-sidebar2 {
|
||||
background: #181926 !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
#navigator-toolbox,
|
||||
.browser-sidebar2 {
|
||||
background: #e6e6e6 !important;
|
||||
}
|
||||
}
|
||||
|
||||
#PersonalToolbar,
|
||||
#nav-bar {
|
||||
background: transparent !important;
|
||||
}
|
||||
|
||||
/* Hide Status Messages */
|
||||
/*
|
||||
#statuspanel[type="overLink"] {
|
||||
opacity: 0 !important;
|
||||
}
|
||||
#statuspanel {
|
||||
opacity: 0 !important;
|
||||
}
|
||||
*/
|
||||
|
||||
/*============================================================================================*/
|
||||
/* NAV BAR */
|
||||
|
||||
/* Auto hide icons on the Nav Bar */
|
||||
#nav-bar
|
||||
> #nav-bar-customization-target
|
||||
*:not(#urlbar-container):not(#urlbar-container *),
|
||||
#PanelUI-button {
|
||||
opacity: 0 !important;
|
||||
transition: opacity 0.7s ease !important;
|
||||
}
|
||||
|
||||
#nav-bar:hover
|
||||
> #nav-bar-customization-target
|
||||
*:not(#urlbar-container):not(#urlbar-container *),
|
||||
#nav-bar:hover > #PanelUI-button {
|
||||
opacity: 1 !important;
|
||||
transition: opacity 0.3s ease !important;
|
||||
}
|
||||
|
||||
#forward-button {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#back-button {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Remove line between website content and top bar */
|
||||
|
||||
#navigator-toolbox {
|
||||
border-bottom: var(--firefoxcss-top-bar-border-bottom-size) solid
|
||||
var(--firefoxcss-top-bar-border-bottom-color) !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Remove the all tab and new tab button */
|
||||
#alltabs-button,
|
||||
#tabs-newtab-button {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Remove the 3 dots from Alt Key */
|
||||
|
||||
#titlebar #toolbar-menubar .titlebar-buttonbox-container {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Move menu buttons to the left side */
|
||||
|
||||
#nav-bar #PanelUI-button #PanelUI-menu-button {
|
||||
padding-right: 2px !important;
|
||||
padding-left: 4px !important;
|
||||
}
|
||||
|
||||
#nav-bar #PanelUI-button {
|
||||
-moz-box-ordinal-group: 0 !important;
|
||||
order: 0 !important;
|
||||
}
|
||||
|
||||
toolbar:not([customizing]) > #nav-bar-overflow-button {
|
||||
-moz-box-ordinal-group: 1 !important;
|
||||
order: 1 !important;
|
||||
}
|
||||
|
||||
toolbar:not([customizing]) > #nav-bar-customization-target {
|
||||
-moz-box-ordinal-group: 2 !important;
|
||||
order: 2 !important;
|
||||
}
|
||||
|
||||
#appMenu-popup {
|
||||
margin-inline: -244px !important;
|
||||
}
|
||||
|
||||
#widget-overflow {
|
||||
margin-inline: -320px !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
#TabsToolbar .titlebar-buttonbox-container .titlebar-close {
|
||||
background: #f25056 !important;
|
||||
display: none !important;
|
||||
overflow: hidden !important;
|
||||
transition: background-color 200ms ease !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Make Tab Bar join with URL Bar on the left */
|
||||
|
||||
:root {
|
||||
--tab-border-radius: 3px !important;
|
||||
--NavbarWidth: 2;
|
||||
--TabsHeight: 36;
|
||||
--TabsBorder: 8;
|
||||
--NavbarHeightSmall: calc(var(--TabsHeight) + var(--TabsBorder));
|
||||
}
|
||||
|
||||
#nav-bar {
|
||||
margin-top: calc(
|
||||
var(--TabsHeight) * -0.7px - var(--TabsBorder) * 1px
|
||||
) !important;
|
||||
height: calc((var(--TabsHeight) * 1px + var(--TabsBorder) * 1px) + 0px);
|
||||
}
|
||||
|
||||
#urlbar-container {
|
||||
min-width: 0px !important;
|
||||
flex: auto !important;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 100px) {
|
||||
#TabsToolbar {
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
#nav-bar {
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Fix for Firefox 123 */
|
||||
#nav-bar:not([tabs-hidden="true"]) {
|
||||
position: static !important;
|
||||
}
|
||||
|
||||
#nav-bar-customization-target,
|
||||
#PanelUI-button {
|
||||
position: relative !important;
|
||||
z-index: 3 !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Make active tab to hidden tab */
|
||||
|
||||
tab:not([selected="true"]),
|
||||
[part="overflow-start-indicator"],
|
||||
[part="overflow-end-indicator"],
|
||||
#scrollbutton-up,
|
||||
#scrollbutton-down,
|
||||
#TabsToolbar .titlebar-spacer,
|
||||
.tabbrowser-tab[selected="true"] .tab-text,
|
||||
.tabbrowser-tab[selected="true"] .tab-close-button,
|
||||
.tab-line,
|
||||
.tab-throbber {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.tabbrowser-tab[selected="true"] {
|
||||
min-width: 0px !important;
|
||||
max-width: 0px !important;
|
||||
background-color: #181926 !important;
|
||||
}
|
||||
|
||||
tab,
|
||||
.tabbrowser-tab {
|
||||
padding-left: 0 !important;
|
||||
margin-left: 0 !important;
|
||||
background-color: #181926 !important;
|
||||
}
|
||||
|
||||
.tab-background {
|
||||
outline: none !important;
|
||||
box-shadow: none !important;
|
||||
background-color: #181926 !important;
|
||||
}
|
||||
|
||||
.tab-icon-image {
|
||||
height: 32px !important;
|
||||
width: 32px !important;
|
||||
border-radius: 10px !important;
|
||||
background-color: #181926 !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Hide all buttons in active tab context menu except for split tab and extensions */
|
||||
|
||||
#main-window #context_openANewTab,
|
||||
#main-window #context_reloadTab,
|
||||
#main-window #context_toggleMuteTab,
|
||||
#main-window #context_playTab,
|
||||
#main-window #context_pinTab,
|
||||
#main-window #context_duplicateTab,
|
||||
#main-window #context_bookmarkTab,
|
||||
#main-window #context_moveTabOptions,
|
||||
#main-window #context_reopenInContainer,
|
||||
#main-window #context_toggleToPrivateContainer,
|
||||
#main-window #context_selectAllTabs,
|
||||
#main-window #context_closeTab,
|
||||
#main-window #context_closeTabOptions,
|
||||
#main-window #context_undoCloseTab,
|
||||
#context_MoveTabToOtherWorkspace,
|
||||
#main-window #tabContextMenu menuseparator {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/*============================================================================================*/
|
||||
/* EXTENSION */
|
||||
|
||||
/* Make extensions looks minimal */
|
||||
|
||||
#unified-extensions-view
|
||||
#unified-extensions-manage-extensions
|
||||
.toolbarbutton-text::before {
|
||||
content: "• • •";
|
||||
font-size: 15px;
|
||||
visibility: visible !important;
|
||||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#unified-extensions-panel #unified-extensions-view {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
#unified-extensions-view {
|
||||
--uei-icon-size: 22px;
|
||||
--firefoxcss-number-of-extensions-in-a-row: 4;
|
||||
}
|
||||
|
||||
#unified-extensions-view .unified-extensions-item-menu-button.subviewbutton,
|
||||
#unified-extensions-view
|
||||
.unified-extensions-item-action-button
|
||||
.unified-extensions-item-contents {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#unified-extensions-view .panel-subview-body {
|
||||
padding: 10px !important;
|
||||
}
|
||||
|
||||
#unified-extensions-view .unified-extensions-item .unified-extensions-item-icon,
|
||||
#unified-extensions-view .unified-extensions-item .toolbarbutton-badge-stack {
|
||||
margin-inline-end: 0px !important;
|
||||
}
|
||||
|
||||
#unified-extensions-view #overflowed-extensions-list,
|
||||
#unified-extensions-view #unified-extensions-area,
|
||||
#unified-extensions-view .unified-extensions-list {
|
||||
display: grid !important;
|
||||
grid-template-columns: repeat(
|
||||
var(--firefoxcss-number-of-extensions-in-a-row),
|
||||
auto
|
||||
);
|
||||
justify-items: left !important;
|
||||
align-items: left !important;
|
||||
}
|
||||
|
||||
/*============================================================================================*/
|
||||
/* URL BAR */
|
||||
|
||||
/* Make text in URL bar in the center */
|
||||
|
||||
#nav-bar {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#urlbar-container {
|
||||
flex: 1;
|
||||
max-width: 1000px;
|
||||
min-width: 200px;
|
||||
margin: auto !important;
|
||||
}
|
||||
|
||||
#main-window #urlbar {
|
||||
z-index: 9999 !important;
|
||||
width: 100% !important;
|
||||
margin-top: 0 !important;
|
||||
margin-left: 0 !important;
|
||||
margin-right: 0 !important;
|
||||
transition:
|
||||
width 0.3s ease,
|
||||
left 0.3s ease,
|
||||
margin-top 0.3s ease,
|
||||
margin-left 0.3s ease,
|
||||
margin-right 0.3s ease;
|
||||
}
|
||||
|
||||
#main-window #urlbar[breakout][breakout-extend] {
|
||||
opacity: 0.97 !important;
|
||||
width: 100% !important;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin-left: auto !important;
|
||||
margin-right: auto !important;
|
||||
margin-top: 30vh !important;
|
||||
transition:
|
||||
width 0.3s ease,
|
||||
left 0.3s ease,
|
||||
margin-top 0.3s ease,
|
||||
margin-left 0.3s ease,
|
||||
margin-right 0.3s ease;
|
||||
}
|
||||
|
||||
#urlbar-background,
|
||||
#urlbar-input-container {
|
||||
--toolbarbutton-border-radius: calc(var(--urlbar-min-height) / 2);
|
||||
}
|
||||
|
||||
#urlbar-input-container {
|
||||
--urlbar-icon-border-radius: calc(var(--toolbarbutton-border-radius) - 1px);
|
||||
}
|
||||
|
||||
#urlbar:not([focused]) #urlbar-input {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
#urlbar:not([breakout][breakout-extend]) #urlbar-input {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Change URL Bar background color */
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#urlbar-background {
|
||||
background-color: #1e2030 !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
#urlbar-background {
|
||||
background-color: #d6d6d6 !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#urlbar-results > *[selected=""] {
|
||||
background-color: #1e2030 !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
#urlbar-results > *[selected=""] {
|
||||
background-color: #e8e8e8 !important;
|
||||
}
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Hide and Hover icons in URL Bar */
|
||||
|
||||
#nav-bar:not([customizing="true"]):not(.searchButton)
|
||||
> #nav-bar-customization-target
|
||||
> #urlbar-container:not(:hover)
|
||||
> #urlbar:not([focused])
|
||||
> #urlbar-input-container
|
||||
> #page-action-buttons
|
||||
.urlbar-page-action {
|
||||
opacity: 0;
|
||||
transition-delay: 500ms;
|
||||
}
|
||||
|
||||
#nav-bar:not([customizing="true"]):not(.searchButton)
|
||||
> #nav-bar-customization-target
|
||||
> #urlbar-container:not(:hover)
|
||||
> #urlbar:not([focused])
|
||||
> #urlbar-input-container
|
||||
> #identity-box
|
||||
> #identity-permission-box:not([open]) {
|
||||
opacity: 0;
|
||||
transition-delay: 500ms;
|
||||
}
|
||||
|
||||
#page-action-buttons .urlbar-page-action,
|
||||
#identity-permission-box,
|
||||
#notification-popup-box .notification-anchor-icon {
|
||||
transition: opacity 0.2s ease;
|
||||
}
|
||||
|
||||
#urlbar #identity-icon-box,
|
||||
#urlbar #identity-permission-box {
|
||||
opacity: 0 !important;
|
||||
margin-inline-start: calc(-16px - 2 * var(--urlbar-icon-padding));
|
||||
transition:
|
||||
margin-inline-start 100ms linear,
|
||||
opacity 200ms linear;
|
||||
}
|
||||
|
||||
#urlbar #identity-box.notSecureText #identity-icon-box {
|
||||
margin-inline-start: initial !important;
|
||||
opacity: 1 !important;
|
||||
color: #e36f6f !important;
|
||||
}
|
||||
|
||||
#urlbar #identity-box.extensionPage #identity-icon-box {
|
||||
margin-inline-start: initial !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
#identity-box:hover #identity-icon-box,
|
||||
#identity-box:hover #identity-permission-box,
|
||||
#identity-box #identity-permission-box[open="true"] {
|
||||
opacity: 1 !important;
|
||||
margin-inline-start: initial !important;
|
||||
}
|
||||
|
||||
#urlbar-input-container .urlbar-input-box {
|
||||
padding-inline-start: 2px !important;
|
||||
}
|
||||
|
||||
#identity-box:hover ~ .urlbar-input-box > #urlbar-input {
|
||||
mask-image: linear-gradient(to right, transparent, black 3ch) !important;
|
||||
}
|
||||
|
||||
#page-action-buttons {
|
||||
padding-inline-start: 8px;
|
||||
}
|
||||
|
||||
#page-action-buttons .urlbar-page-action {
|
||||
margin-inline-end: calc(-16px - 2 * var(--urlbar-icon-padding));
|
||||
opacity: 0;
|
||||
transition:
|
||||
margin-inline-end 100ms linear,
|
||||
opacity 200ms linear;
|
||||
}
|
||||
|
||||
#page-action-buttons:hover > .urlbar-page-action,
|
||||
.urlbar-page-action[open],
|
||||
.urlbar-page-action[open] ~ .urlbar-page-action {
|
||||
opacity: 1;
|
||||
margin-inline-end: 0px !important;
|
||||
}
|
||||
|
||||
#identity-box.chromeUI #identity-icon-box {
|
||||
opacity: 1 !important;
|
||||
margin-inline-start: initial;
|
||||
}
|
||||
|
||||
#identity-box.chromeUI::after,
|
||||
#identity-box.chromeUI:hover::after {
|
||||
opacity: 0 !important;
|
||||
}
|
||||
|
||||
#page-action-buttons:not(:hover)
|
||||
#translations-button[translationsactive="true"]:not([open]) {
|
||||
visibility: collapse !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Create visual dots on both sides */
|
||||
#identity-box::after,
|
||||
#page-action-buttons::before {
|
||||
position: relative;
|
||||
content: "•••";
|
||||
pointer-events: none;
|
||||
transition: opacity 100ms ease;
|
||||
align-self: center;
|
||||
font-size: 0.7em;
|
||||
}
|
||||
|
||||
#identity-box::after,
|
||||
#page-action-buttons::before {
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
#identity-box::after {
|
||||
transform: rotate(90deg);
|
||||
left: 4px;
|
||||
}
|
||||
|
||||
#page-action-buttons::before {
|
||||
transform: rotate(-90deg);
|
||||
right: 4px;
|
||||
}
|
||||
|
||||
#identity-box:hover::after,
|
||||
#page-action-buttons:hover::before {
|
||||
opacity: 0.2 !important;
|
||||
transition: opacity 50ms ease;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
#identity-box[pageproxystate="invalid"]::after,
|
||||
#urlbar-input-container[pageproxystate="invalid"]
|
||||
> #page-action-buttons::before {
|
||||
opacity: 0 !important;
|
||||
transition: opacity 50ms ease;
|
||||
}
|
||||
|
||||
/* Linux changes for visual dots */
|
||||
@media (-moz-platform: linux) {
|
||||
#identity-box::after,
|
||||
#page-action-buttons::before {
|
||||
content: url('data:image/svg+xml,<%3Fxml version="1.0" encoding="utf-8"%3F><svg fill="%23FFFFFF" width="11px" height="11px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M20.25 16c0 2.347-1.903 4.25-4.25 4.25s-4.25-1.903-4.25-4.25c0-2.347 1.903-4.25 4.25-4.25s4.25 1.903 4.25 4.25zM20.25 27c0 2.347-1.903 4.25-4.25 4.25s-4.25-1.903-4.25-4.25c0-2.347 1.903-4.25 4.25-4.25s4.25 1.903 4.25 4.25zM20.25 5c0 2.347-1.903 4.25-4.25 4.25s-4.25-1.903-4.25-4.25c0-2.347 1.903-4.25 4.25-4.25s4.25 1.903 4.25 4.25z"></path></svg>');
|
||||
transform: none;
|
||||
font-size: unset;
|
||||
}
|
||||
|
||||
#page-action-buttons::before {
|
||||
right: 2px;
|
||||
}
|
||||
|
||||
#identity-box::after {
|
||||
left: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button,
|
||||
#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button,
|
||||
#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button,
|
||||
#urlbar-label-box,
|
||||
#urlbar-zoom-button {
|
||||
background-color: var(--firefoxcss-item-bg-color) !important;
|
||||
}
|
||||
|
||||
#urlbar-zoom-button:hover {
|
||||
background-color: var(--firefoxcss-urlbar-zoom-button) !important;
|
||||
}
|
||||
|
||||
#urlbar-input-container #identity-box > .identity-box-button,
|
||||
#tracking-protection-icon-container,
|
||||
#urlbar-go-button,
|
||||
#page-action-buttons .urlbar-page-action,
|
||||
#notification-popup-box {
|
||||
border-radius: 8px !important;
|
||||
}
|
||||
|
||||
#urlbar-go-button,
|
||||
#tracking-protection-icon-container {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/*============================================================================================*/
|
||||
/* BOOKMARK BAR */
|
||||
|
||||
/* Variables for toolbar & bookmark attributes */
|
||||
:root {
|
||||
--uc-bm-height: 24px;
|
||||
--uc-bm-padding: 6px;
|
||||
}
|
||||
|
||||
/* Style for Personal Toolbar */
|
||||
#PersonalToolbar {
|
||||
position: relative !important;
|
||||
padding: 1px 6px !important;
|
||||
}
|
||||
|
||||
/* Additional padding for touch density */
|
||||
:root[uidensity="touch"] #PersonalToolbar {
|
||||
--uc-bm-padding: 6px;
|
||||
}
|
||||
|
||||
/* Transform and delay transition of Personal Toolbar */
|
||||
#PersonalToolbar:not([customizing]) {
|
||||
margin-bottom: calc(
|
||||
2px - var(--uc-bm-height) - 2 * var(--uc-bm-padding)
|
||||
) !important;
|
||||
transform: rotateX(90deg) !important;
|
||||
transform-origin: top !important;
|
||||
transition: transform 0.1s ease-in-out 0.6s !important;
|
||||
z-index: 2 !important;
|
||||
}
|
||||
|
||||
/* Bookmark item padding and icon transition */
|
||||
#PlacesToolbarItems > .bookmark-item {
|
||||
padding-block: var(--uc-bm-padding) !important;
|
||||
padding-left: 6px !important;
|
||||
padding-right: 6px !important;
|
||||
}
|
||||
#PlacesToolbarItems > .bookmark-item .toolbarbutton-icon {
|
||||
transition: opacity 0.1s ease-in-out 0.4s !important;
|
||||
opacity: 0 !important;
|
||||
}
|
||||
|
||||
/* Hover effect for toolbar and bookmark icon/text */
|
||||
#navigator-toolbox:hover > #PersonalToolbar,
|
||||
#navigator-toolbox:hover
|
||||
#PlacesToolbarItems
|
||||
> .bookmark-item
|
||||
.toolbarbutton-icon,
|
||||
#navigator-toolbox:hover
|
||||
#PlacesToolbarItems
|
||||
> .bookmark-item
|
||||
.toolbarbutton-text {
|
||||
transition-delay: 100ms !important;
|
||||
transform: rotateX(0) !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
/* Bookmark item text transition */
|
||||
#PlacesToolbarItems > .bookmark-item .toolbarbutton-text {
|
||||
transition: opacity 0.1s ease-in-out 0.4s !important;
|
||||
opacity: 0 !important;
|
||||
}
|
||||
|
||||
/* Fix the white line above the bookmarks bar when it's empty */
|
||||
#personal-toolbar-empty {
|
||||
padding: 2px !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Make it good in transparent bg */
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#PlacesToolbarItems > * {
|
||||
background: #333333 !important;
|
||||
}
|
||||
|
||||
#PlacesToolbarItems > *:hover {
|
||||
background: #555555 !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
#PlacesToolbarItems > * {
|
||||
background: #cccccc !important;
|
||||
}
|
||||
|
||||
#PlacesToolbarItems > *:hover {
|
||||
background: #eeeeee !important;
|
||||
}
|
||||
}
|
||||
|
||||
/*============================================================================================*/
|
||||
/* SIDE BAR */
|
||||
|
||||
/* Expand Side bar on hover */
|
||||
|
||||
#sidebar-box[sidebarcommand="_3c078156-979c-498b-8990-85f7987dd929_-sidebar-action"] {
|
||||
--sidebar-width: 69px;
|
||||
--sidebar-hover-width: 350px;
|
||||
background: none !important;
|
||||
position: relative;
|
||||
min-width: var(--sidebar-width) !important;
|
||||
width: var(--sidebar-width) !important;
|
||||
max-width: var(--sidebar-width) !important;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
#sidebar-box[sidebarcommand="_3c078156-979c-498b-8990-85f7987dd929_-sidebar-action"]
|
||||
> #sidebar {
|
||||
transition: min-width 200ms ease-in-out !important;
|
||||
min-width: var(--sidebar-width) !important;
|
||||
will-change: min-width;
|
||||
transition-delay: 0.3s !important; /* Delay on hover off */
|
||||
}
|
||||
|
||||
#sidebar-box[sidebarcommand="_3c078156-979c-498b-8990-85f7987dd929_-sidebar-action"]:hover
|
||||
> #sidebar {
|
||||
min-width: var(--sidebar-hover-width) !important;
|
||||
transition-delay: 0.1s !important; /* No delay on hover on */
|
||||
}
|
||||
|
||||
/* #sidebar-box { */
|
||||
/* backdrop-filter: blur(10px); */
|
||||
/* } */
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Hide Side bar header and line */
|
||||
|
||||
#sidebar-header,
|
||||
#sidebar-splitter {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Sidebar Border */
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#sidebar-box #sidebar,
|
||||
#sidebar-box #webextpanels-window {
|
||||
border-radius: 15px !important;
|
||||
margin: 10px 10px 10px 5px !important;
|
||||
border: 3px solid rgba(0, 0, 0, 0);
|
||||
transition: border 0.3s ease !important;
|
||||
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#sidebar-box #sidebar:hover,
|
||||
#sidebar-box #webextpanels-:hover {
|
||||
border: 3px solid rgba(183, 189, 248, 0.4) !important;
|
||||
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
#sidebar-box #sidebar,
|
||||
#sidebar-box #webextpanels-window {
|
||||
border-radius: 15px !important;
|
||||
margin: 10px 10px 10px 5px !important;
|
||||
border: 3px solid rgba(51, 51, 51, 0.1);
|
||||
transition: border 0.3s ease;
|
||||
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
|
||||
#sidebar-box #sidebar:hover,
|
||||
#sidebar-box #webextpanels-window:hover {
|
||||
border: 3px solid rgba(51, 51, 51, 0.6);
|
||||
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
/*============================================================================================*/
|
||||
/* SIDE BAR 2 (FLOORP) */
|
||||
|
||||
/* Make splitter invisible */
|
||||
|
||||
#sidebar-splitter2 {
|
||||
appearance: none !important;
|
||||
width: 10px !important; /* Set initial width */
|
||||
transition:
|
||||
width 0.3s ease-in-out,
|
||||
opacity 0.3s ease-in-out; /* Add transitions */
|
||||
}
|
||||
|
||||
#sidebar-splitter2:hover {
|
||||
width: 20px !important; /* Width on hover */
|
||||
opacity: 1; /* Opacity on hover */
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Hide Floorp sidebar header */
|
||||
|
||||
#sidebar2-header {
|
||||
max-height: 0.5em !important;
|
||||
min-height: 0.5em !important;
|
||||
opacity: 0 !important;
|
||||
transition:
|
||||
max-height 0.3s ease-in-out,
|
||||
min-height 0.3s ease-in-out,
|
||||
opacity 0.3s ease-in-out;
|
||||
}
|
||||
|
||||
#sidebar2-header:hover {
|
||||
max-height: 2.5em !important;
|
||||
min-height: 2.5em !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Floorp Sidebar Border */
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#sidebar2-box browser {
|
||||
border-radius: 15px !important;
|
||||
margin: 3px 10px 10px 0px !important;
|
||||
border: 3px solid rgba(0, 0, 0, 0);
|
||||
transition: border 0.3s ease;
|
||||
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#sidebar2-box browser:hover {
|
||||
border: 3px solid rgba(183, 189, 248, 0.4) !important;
|
||||
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
}
|
||||
|
||||
.browser-sidebar2 {
|
||||
background: none !important;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
#sidebar2-box browser {
|
||||
border-radius: 15px !important;
|
||||
margin: 10px 10px 10px 0px !important;
|
||||
border: 3px solid rgba(51, 51, 51, 0.1);
|
||||
transition: border 0.3s ease;
|
||||
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
|
||||
#sidebar2-box browser:hover {
|
||||
border: 3px solid rgba(51, 51, 51, 0.6);
|
||||
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Floorp Sidebar Select Box Styling */
|
||||
|
||||
#sidebar-select-box {
|
||||
align-items: center !important;
|
||||
}
|
||||
|
||||
.sidepanel-icon {
|
||||
border-radius: 10px !important;
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Floorp Sidebar Border */
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#sidebar-select-box {
|
||||
background-color: #181926 !important;
|
||||
border-radius: 15px !important;
|
||||
margin: 10px 10px 10px 0px !important;
|
||||
border: 3px solid rgba(0, 0, 0, 0);
|
||||
transition: border 0.3s ease;
|
||||
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#sidebar-select-box:hover {
|
||||
border: 3px solid rgba(183, 189, 248, 0.4) !important;
|
||||
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
#sidebar-select-box {
|
||||
border-radius: 15px !important;
|
||||
margin: 10px 10px 10px 0px !important;
|
||||
border: 3px solid rgba(51, 51, 51, 0.1) !important;
|
||||
transition: border 0.3s ease;
|
||||
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
|
||||
#sidebar-select-box:hover {
|
||||
border: 3px solid rgba(51, 51, 51, 0.6) !important;
|
||||
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Hide random stuff coming out of Floorp Sidebar */
|
||||
|
||||
.browser-sidebar2 {
|
||||
border: none !important;
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
||||
#sidebar2-box[style="min-width: 0px; order: 6; width: 415px; max-width: 0px;"]
|
||||
> * {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/*============================================================================================*/
|
||||
/* MAIN BROWSER */
|
||||
|
||||
/* Browser Border */
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#main-window:not([sizemode="fullscreen"]) #appcontent browser {
|
||||
border-radius: 15px !important;
|
||||
margin: 10px 10px 10px 10px !important;
|
||||
border: 3px solid rgba(0, 0, 0, 0);
|
||||
transition: border 0.3s ease;
|
||||
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
|
||||
clip-path: circle(80%) !important;
|
||||
}
|
||||
|
||||
#main-window:not([sizemode="fullscreen"]) #appcontent browser:hover {
|
||||
border: 3px solid rgba(183, 189, 248, 0.4);
|
||||
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
#main-window:not([sizemode="fullscreen"]) #appcontent browser {
|
||||
border-radius: 15px !important;
|
||||
margin: 10px 10px 10px 10px !important;
|
||||
border: 3px solid rgba(51, 51, 51, 0.1);
|
||||
transition: border 0.3s ease;
|
||||
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
|
||||
clip-path: circle(80%) !important;
|
||||
}
|
||||
|
||||
#main-window:not([sizemode="fullscreen"]) #appcontent browser:hover {
|
||||
border: 3px solid rgba(51, 51, 51, 0.6);
|
||||
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
/*============================================================================================*/
|
||||
/* FIND BAR */
|
||||
|
||||
/* CTRL+F Search Bar Border */
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.browserContainer > findbar {
|
||||
border-radius: 15px !important;
|
||||
margin: 0px 15px 0px 15px !important;
|
||||
border: 3px solid rgba(0, 0, 0, 0) !important;
|
||||
transition: border 0.3s ease !important;
|
||||
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
|
||||
background-image: none !important;
|
||||
background-color: #181926 !important;
|
||||
}
|
||||
|
||||
.browserContainer > findbar:hover {
|
||||
border: 3px solid rgba(183, 189, 248, 0.4) !important;
|
||||
box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.browserContainer > findbar .findbar-container {
|
||||
background-color: #181926 !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
.browserContainer > findbar {
|
||||
border-radius: 15px !important;
|
||||
margin: 0px 15px 0px 15px !important;
|
||||
border: 3px solid rgba(51, 51, 51, 0.1) !important;
|
||||
transition: border 0.3s ease !important;
|
||||
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
|
||||
.browserContainer > findbar:hover {
|
||||
border: 3px solid rgba(51, 51, 51, 0.6) !important;
|
||||
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
/*------------------------------------------------*/
|
||||
/* Text in the center */
|
||||
.browserContainer > findbar .findbar-textbox {
|
||||
border-radius: 10px !important;
|
||||
text-align: center !important;
|
||||
}
|
|
@ -1,992 +0,0 @@
|
|||
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
|
||||
|
||||
* {
|
||||
/*--tab-corner-rounding: 5px;*/
|
||||
--animation-speed: 0.4s;
|
||||
--button-corner-rounding: 10px;
|
||||
--urlbar-container-height: 40px !important;
|
||||
--urlbar-min-height: 30px !important;
|
||||
--urlbar-height: 30px !important;
|
||||
--urlbar-toolbar-height: 38px !important;
|
||||
--moz-hidden-unscrollable: scroll !important;
|
||||
--toolbarbutton-border-radius: 3px !important;
|
||||
--tabs-border-color: transparent;
|
||||
}
|
||||
|
||||
#TabsToolbar .tabbrowser-tab,
|
||||
#TabsToolbar .tabbrowser-tab .tab-stack,
|
||||
#TabsToolbar .tabbrowser-tab .tab-background,
|
||||
#TabsToolbar .tabbrowser-tab .tab-content {
|
||||
border-top-left-radius: 10px !important;
|
||||
border-top-right-radius: 10px !important;
|
||||
border-bottom-left-radius: 10px !important;
|
||||
border-bottom-right-radius: 10px !important;
|
||||
margin-top: 0px;
|
||||
max-height: 36px !important;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#TabsToolbar:not([brighttext])
|
||||
#tabbrowser-tabs:not([noshadowfortests])
|
||||
.tabbrowser-tab:is([visuallyselected="true"], [multiselected])
|
||||
> .tab-stack
|
||||
> .tab-background {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.tab-background,
|
||||
.tab-stack {
|
||||
min-height: 36px !important;
|
||||
}
|
||||
|
||||
.tab-background {
|
||||
margin-block: 0 0 !important;
|
||||
}
|
||||
|
||||
.tabbrowser-tab {
|
||||
min-height: 36px !important;
|
||||
}
|
||||
|
||||
#TabsToolbar:hover {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#star-button[starred],
|
||||
#star-button {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#bookmarks-menu-button toolbarbutton {
|
||||
visibility: collapse !important;
|
||||
}
|
||||
|
||||
/* multi tab selection */
|
||||
#tabbrowser-tabs:not([noshadowfortests])
|
||||
.tabbrowser-tab:is([multiselected])
|
||||
> .tab-stack
|
||||
> .tab-background:-moz-lwtheme {
|
||||
outline-color: var(--toolbarseparator-color) !important;
|
||||
}
|
||||
|
||||
.tab-line {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#urlbar[breakout][breakout-extend],
|
||||
#urlbar[breakout][breakout-extend-disabled][open] {
|
||||
/* The z-index needs to be big enough to trump other positioned UI pieces
|
||||
that we want to overlay. 3 is used in the tab bar. */
|
||||
z-index: 3;
|
||||
height: var(--urlbar-height) !important;
|
||||
}
|
||||
|
||||
#urlbar-search-button {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
/* Hide the »Go«-arrow in the URL Bar */
|
||||
#urlbar-go-button {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* #page-action-buttons > :not(#urlbar-zoom-button) { display: none !important; } */
|
||||
|
||||
tab:not(:active) .tab-background {
|
||||
transition: background-color var(--animation-speed) !important;
|
||||
}
|
||||
|
||||
#back-button,
|
||||
#forward-button {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.titlebar-buttonbox-container {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#pageActionButton {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#PanelUI-menu-button {
|
||||
padding: 0px !important;
|
||||
}
|
||||
|
||||
#PanelUI-menu-button .toolbarbutton-icon {
|
||||
width: 1px !important;
|
||||
}
|
||||
|
||||
#PanelUI-menu-button .toolbarbutton-badge-stack {
|
||||
padding: 0px !important;
|
||||
}
|
||||
|
||||
/*---+---+---+---+---+---+---+
|
||||
| T | A | B | — | B | A | R |
|
||||
+---+---+---+---+---+---+---*/
|
||||
/* multi tab selection */
|
||||
#tabbrowser-tabs:not([noshadowfortests])
|
||||
.tabbrowser-tab:is([multiselected])
|
||||
> .tab-stack
|
||||
> .tab-background:-moz-lwtheme {
|
||||
outline-color: var(--toolbarseparator-color) !important;
|
||||
}
|
||||
|
||||
/* tab close button options */
|
||||
.tabbrowser-tab:not([pinned]) .tab-close-button {
|
||||
display: var(--show-tab-close-button) !important;
|
||||
}
|
||||
|
||||
.tabbrowser-tab:not([pinned]):hover .tab-close-button {
|
||||
display: var(--show-tab-close-button-hover) !important;
|
||||
}
|
||||
|
||||
/* adaptive tab width */
|
||||
.tabbrowser-tab[selected][fadein]:not([pinned]) {
|
||||
max-width: var(--uc-active-tab-width) !important;
|
||||
}
|
||||
|
||||
.tabbrowser-tab[fadein]:not([selected]):not([pinned]) {
|
||||
max-width: var(--uc-inactive-tab-width) !important;
|
||||
}
|
||||
|
||||
/* container tabs indicator */
|
||||
.tabbrowser-tab[usercontextid]
|
||||
> .tab-stack
|
||||
> .tab-background
|
||||
> .tab-context-line {
|
||||
margin: -1px var(--container-tabs-indicator-margin) 0
|
||||
var(--container-tabs-indicator-margin) !important;
|
||||
height: 1px !important;
|
||||
|
||||
box-shadow: var(--uc-identity-glow) var(--identity-tab-color) !important;
|
||||
}
|
||||
|
||||
/* show favicon when media is playing but tab is hovered */
|
||||
.tab-icon-image:not([pinned]) {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
/* Makes the speaker icon to always appear if the tab is playing (not only on hover) */
|
||||
.tab-icon-overlay:not([crashed]),
|
||||
.tab-icon-overlay[pinned][crashed][selected] {
|
||||
top: 5px !important;
|
||||
z-index: 1 !important;
|
||||
|
||||
padding: 1.5px !important;
|
||||
inset-inline-end: -8px !important;
|
||||
width: 16px !important;
|
||||
height: 16px !important;
|
||||
|
||||
border-radius: 10px !important;
|
||||
}
|
||||
|
||||
/* style and position speaker icon */
|
||||
.tab-icon-overlay:not([sharing], [crashed]):is(
|
||||
[soundplaying],
|
||||
[muted],
|
||||
[activemedia-blocked]
|
||||
) {
|
||||
stroke: transparent !important;
|
||||
background: transparent !important;
|
||||
opacity: 1 !important;
|
||||
fill-opacity: 0.8 !important;
|
||||
|
||||
color: currentColor !important;
|
||||
|
||||
stroke: var(--toolbar-bgcolor) !important;
|
||||
background-color: var(--toolbar-bgcolor) !important;
|
||||
}
|
||||
|
||||
/* change the colours of the speaker icon on active tab to match tab colours */
|
||||
.tabbrowser-tab[selected]
|
||||
.tab-icon-overlay:not([sharing], [crashed]):is(
|
||||
[soundplaying],
|
||||
[muted],
|
||||
[activemedia-blocked]
|
||||
) {
|
||||
stroke: var(--toolbar-bgcolor) !important;
|
||||
background-color: var(--toolbar-bgcolor) !important;
|
||||
box-shadow: 3px 3px 1px 1px #181926;
|
||||
}
|
||||
|
||||
.tab-icon-overlay:not([pinned], [sharing], [crashed]):is(
|
||||
[soundplaying],
|
||||
[muted],
|
||||
[activemedia-blocked]
|
||||
) {
|
||||
margin-inline-end: 9.5px !important;
|
||||
}
|
||||
|
||||
.tabbrowser-tab:not([image])
|
||||
.tab-icon-overlay:not([pinned], [sharing], [crashed]) {
|
||||
top: 0 !important;
|
||||
|
||||
padding: 0 !important;
|
||||
margin-inline-end: 5.5px !important;
|
||||
inset-inline-end: 0 !important;
|
||||
}
|
||||
|
||||
.tab-icon-overlay:not([crashed])[soundplaying]:hover,
|
||||
.tab-icon-overlay:not([crashed])[muted]:hover,
|
||||
.tab-icon-overlay:not([crashed])[activemedia-blocked]:hover {
|
||||
color: currentColor !important;
|
||||
stroke: var(--toolbar-color) !important;
|
||||
background-color: var(--toolbar-color) !important;
|
||||
fill-opacity: 0.95 !important;
|
||||
}
|
||||
|
||||
.tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[soundplaying]:hover,
|
||||
.tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[muted]:hover,
|
||||
.tabbrowser-tab[selected]
|
||||
.tab-icon-overlay:not([crashed])[activemedia-blocked]:hover {
|
||||
color: currentColor !important;
|
||||
stroke: var(--toolbar-color) !important;
|
||||
background-color: var(--toolbar-color) !important;
|
||||
fill-opacity: 0.95 !important;
|
||||
box-shadow: 3px 3px 1px 1px #181926;
|
||||
}
|
||||
|
||||
/* speaker icon colour fix */
|
||||
#TabsToolbar .tab-icon-overlay:not([crashed])[soundplaying],
|
||||
#TabsToolbar .tab-icon-overlay:not([crashed])[muted],
|
||||
#TabsToolbar .tab-icon-overlay:not([crashed])[activemedia-blocked] {
|
||||
color: var(--toolbar-color) !important;
|
||||
}
|
||||
|
||||
/* speaker icon colour fix on hover */
|
||||
#TabsToolbar .tab-icon-overlay:not([crashed])[soundplaying]:hover,
|
||||
#TabsToolbar .tab-icon-overlay:not([crashed])[muted]:hover,
|
||||
#TabsToolbar .tab-icon-overlay:not([crashed])[activemedia-blocked]:hover {
|
||||
color: var(--toolbar-bgcolor) !important;
|
||||
}
|
||||
|
||||
:root {
|
||||
/* Allow tabs to have dynamic widths based on
|
||||
* the Tab Bars maximum width
|
||||
*/
|
||||
--uc-active-tab-width: clamp(50px, 25vw, 200px);
|
||||
--uc-inactive-tab-width: clamp(100px, 20vw, 200px);
|
||||
|
||||
/* Enable this to always show the Tab Close button
|
||||
* possible values:
|
||||
* show: -moz-inline-block
|
||||
* hide: none
|
||||
*/
|
||||
--show-tab-close-button: none;
|
||||
|
||||
/* Enable this to only show the Tab Close button on tab hover
|
||||
* possible values:
|
||||
* show: -moz-inline-block
|
||||
* hide: none
|
||||
*/
|
||||
--show-tab-close-button-hover: none;
|
||||
|
||||
/* Hide the all Tabs button from the Tab Bar
|
||||
* possible values:
|
||||
* show: -moz-box
|
||||
* hide: none
|
||||
*/
|
||||
--uc-show-all-tabs-button: none;
|
||||
|
||||
/* Left and Right "dip" of the container indicator
|
||||
* 0px equals tab width
|
||||
* higer values make the indicator smaller
|
||||
*/
|
||||
--container-tabs-indicator-margin: 10px;
|
||||
|
||||
/* Amount of Glow to add to the container indicator
|
||||
* Setting it to 0 disables the Glow
|
||||
*/
|
||||
--uc-identity-glow: 0 1px 10px 1px;
|
||||
|
||||
font-family: "JetBrainsMono NF";
|
||||
}
|
||||
|
||||
:root:not([customizing]) :hover > .tabbrowser-tab:not(:hover) {
|
||||
transition:
|
||||
blur,
|
||||
ease 0.5s !important;
|
||||
--uc-active-tab-width: clamp(100px, 30vw, 300px);
|
||||
--uc-inactive-tab-width: clamp(100px, 20vw, 200px);
|
||||
}
|
||||
|
||||
:root:not([customizing]) :not(:hover) > .tabbrowser-tab {
|
||||
transition:
|
||||
blur,
|
||||
ease 0.2s !important;
|
||||
--uc-active-tab-width: clamp(100px, 30vw, 300px);
|
||||
--uc-inactive-tab-width: clamp(100px, 20vw, 200px);
|
||||
}
|
||||
|
||||
#tabbrowser-tabs .tab-label-container[customizing] {
|
||||
color: transparent;
|
||||
transition: ease 0.5s;
|
||||
transition-delay: 3s;
|
||||
}
|
||||
|
||||
:root[uidensity="compact"] {
|
||||
--tab-min-height: 38px !important;
|
||||
--uc-active-tab-width: clamp(100px, 30vw, 300px);
|
||||
--uc-inactive-tab-width: clamp(100px, 20vw, 200px);
|
||||
}
|
||||
|
||||
tab:not([selected]):hover .tab-background {
|
||||
background-color: var(
|
||||
--toolbarbutton-hover-background,
|
||||
rgba(182, 182, 182, 0.11)
|
||||
) !important;
|
||||
}
|
||||
|
||||
.tab-close-button {
|
||||
list-style-image: url("active_close.png");
|
||||
border-radius: 10px;
|
||||
transition: list-style-image var(--animation-speed) ease-out !important;
|
||||
}
|
||||
|
||||
.tab-close-button:hover {
|
||||
list-style-image: url("mouseover_close.png");
|
||||
}
|
||||
|
||||
#navigator-toolbox::after {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.titlebar-button {
|
||||
padding-left: 10px !important;
|
||||
padding-right: 15px !important;
|
||||
padding-top: 10px !important;
|
||||
}
|
||||
|
||||
#urlbar {
|
||||
/*border-radius: calc(1px + var(--button-corner-rounding)) !important;*/
|
||||
height: 30px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
#urlbar-container *:not(#identity-box) {
|
||||
border-color: transparent !important;
|
||||
}
|
||||
|
||||
#pageActionSeparator {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#urlbar:hover .urlbar-icon,
|
||||
#urlbar:active .urlbar-icon,
|
||||
#urlbar[focused] .urlbar-icon,
|
||||
#urlbar:hover .urlbar-icon:not([open]) image,
|
||||
#urlbar:active .urlbar-icon image,
|
||||
#urlbar[focused] .urlbar-icon image {
|
||||
fill: var(--toolbar-color) !important;
|
||||
}
|
||||
|
||||
.urlbar-page-action[open] {
|
||||
background-color: var(--toolbarbutton-active-background) !important;
|
||||
fill: var(--toolbar-color) !important;
|
||||
}
|
||||
|
||||
.urlbar-page-action[open]:hover {
|
||||
background-color: var(--toolbarbutton-active-background) !important;
|
||||
fill: var(--toolbar-color) !important;
|
||||
}
|
||||
|
||||
#urlbar[breakout] {
|
||||
width: 100% !important;
|
||||
padding: 0px !important;
|
||||
z-index: 99 !important;
|
||||
}
|
||||
|
||||
#urlbar[breakout][breakout-extend] {
|
||||
transition: width 1.9s ease !important;
|
||||
top: 3px !important;
|
||||
left: 0 !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
#urlbar[breakout] {
|
||||
top: 4.9px !important;
|
||||
}
|
||||
|
||||
#urlbar[breakout][breakout-extend] > #urlbar-input-container {
|
||||
height: 100% !important;
|
||||
padding-block: 0 !important;
|
||||
padding-inline: 0 !important;
|
||||
}
|
||||
|
||||
.urlbar-page-action[open] .urlbar-icon {
|
||||
fill: var(--toolbar-color) !important;
|
||||
}
|
||||
|
||||
#library-button[animate] {
|
||||
margin-bottom: 0px !important;
|
||||
margin-top: 50px !important;
|
||||
}
|
||||
|
||||
#library-button[animate] image {
|
||||
margin-bottom: -120px !important;
|
||||
margin-top: 100px !important;
|
||||
}
|
||||
|
||||
.urlbar-scheme {
|
||||
padding-bottom: 11px !important;
|
||||
}
|
||||
|
||||
#urlbar-container {
|
||||
margin-left: -5px !important;
|
||||
margin-right: 2px !important;
|
||||
}
|
||||
|
||||
.urlbar-input::-moz-selection {
|
||||
background-color: red !important;
|
||||
}
|
||||
|
||||
#urlbar-container #urlbar[pageproxystate="invalid"] {
|
||||
margin-left: 5px !important;
|
||||
}
|
||||
|
||||
.urlbar-input-box {
|
||||
padding: 5px 5px !important;
|
||||
}
|
||||
|
||||
/* #urlbar {
|
||||
background-color: transparent !important;
|
||||
color: var(--lwt-toolbar-field-color, black) !important;
|
||||
} */
|
||||
|
||||
.urlbarView {
|
||||
background: var(--toolbar-field-focus-background-color) !important;
|
||||
border-bottom-left-radius: 10px !important;
|
||||
border-bottom-right-radius: 10px !important;
|
||||
box-shadow: 10px 45px 146px -64px rgba(0, 0, 0, 0.65);
|
||||
margin-inline: 0 !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
#TabsToolbar .toolbarbutton-1 > .toolbarbutton-icon,
|
||||
#TabsToolbar .toolbarbutton-1 > .toolbarbutton-text,
|
||||
#TabsToolbar .toolbarbutton-1 > .toolbarbutton-badge-stack {
|
||||
border-radius: 50rem !important;
|
||||
height: 2rem !important;
|
||||
width: 2rem !important;
|
||||
padding: 4px !important;
|
||||
}
|
||||
|
||||
#pocket-button {
|
||||
padding-bottom: 4px !important;
|
||||
}
|
||||
|
||||
.urlbar-icon-wrapper > .urlbar-icon:hover {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.urlbar-icon-wrapper {
|
||||
background-color: transparent !important;
|
||||
transition: background-color var(--animation-speed) !important;
|
||||
}
|
||||
|
||||
#urlbar:not([focused]) {
|
||||
border-radius: 4px !important;
|
||||
}
|
||||
|
||||
#identity-box:hover,
|
||||
.urlbar-icon:hover,
|
||||
.urlbar-icon-wrapper:hover,
|
||||
[anonid="urlbar-go-button"]:hover {
|
||||
border-radius: 10px !important;
|
||||
}
|
||||
|
||||
#identity-box:active,
|
||||
.urlbar-icon:active,
|
||||
.urlbar-icon-wrapper:active,
|
||||
[anonid="urlbar-go-button"]:active {
|
||||
background-color: var(--toolbarbutton-active-background) !important;
|
||||
}
|
||||
|
||||
[lwthemetextcolor="dark"] .urlbarView-body-outer {
|
||||
background-color: #ff5340 !important;
|
||||
color: var(--toolbar-color) !important;
|
||||
}
|
||||
|
||||
.urlbarView-body-inner {
|
||||
background-color: var(--toolbar-bgcolor) !important;
|
||||
}
|
||||
|
||||
.downloadsPanelFooterButton:hover {
|
||||
outline: none !important;
|
||||
}
|
||||
|
||||
#TabsToolbar > .titlebar-buttonbox-container {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
#urlbar,
|
||||
#searchbar {
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
#page-action-buttons > *:not(#star-button-box),
|
||||
.urlbar-history-dropmarker {
|
||||
opacity: 0 !important;
|
||||
}
|
||||
|
||||
#urlbar:hover #page-action-buttons > *,
|
||||
#urlbar:hover .urlbar-history-dropmarker {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
menu,
|
||||
menuitem,
|
||||
menucaption {
|
||||
-moz-appearance: none !important;
|
||||
height: 36px !important;
|
||||
}
|
||||
|
||||
menu[disabled="true"][_moz-menuactive="false"],
|
||||
menuitem[disabled="true"][_moz-menuactive="false"],
|
||||
menucaption[disabled="true"][_moz-menuactive="false"] {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
menu[disabled="true"],
|
||||
menuitem[disabled="true"],
|
||||
menucaption[disabled="true"] {
|
||||
color: var(
|
||||
--toolbarbutton-hover-background,
|
||||
rgba(182, 182, 182, 0.11)
|
||||
) !important;
|
||||
}
|
||||
|
||||
menu[disabled="true"][_moz-menuactive="true"],
|
||||
menuitem[disabled="true"][_moz-menuactive="true"],
|
||||
menucaption[disabled="true"][_moz-menuactive="true"] {
|
||||
color: var(
|
||||
--toolbarbutton-hover-background,
|
||||
rgba(182, 182, 182, 0.11)
|
||||
) !important;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
menu:not(.subviewbutton) > .menu-right {
|
||||
margin-top: 2px !important;
|
||||
margin-right: 0px !important;
|
||||
width: 0px !important;
|
||||
}
|
||||
|
||||
menu:not(.subviewbutton) > .menu-right image {
|
||||
margin-right: -5px !important;
|
||||
margin-top: -2px !important;
|
||||
/*border: 6px solid var(--toolbar-color) !important;*/
|
||||
border-top-color: transparent !important;
|
||||
border-right-color: transparent !important;
|
||||
border-bottom-color: transparent !important;
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp),
|
||||
(-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7),
|
||||
(-moz-os-version: windows-win8),
|
||||
(-moz-os-version: windows-win10) {
|
||||
menupopup .popup-internal-box {
|
||||
margin: -2px !important;
|
||||
padding-bottom: 3px !important;
|
||||
padding-top: 3px !important;
|
||||
}
|
||||
|
||||
.bookmark-item .scrollbutton-up {
|
||||
margin-top: -3px !important;
|
||||
}
|
||||
|
||||
.bookmark-item .scrollbutton-up > .toolbarbutton-icon {
|
||||
margin-top: -2px !important;
|
||||
border: 6px solid MenuText !important;
|
||||
border-top-color: transparent !important;
|
||||
border-right-color: transparent !important;
|
||||
border-left-color: transparent !important;
|
||||
}
|
||||
|
||||
.bookmark-item .scrollbutton-down {
|
||||
margin-bottom: -3px !important;
|
||||
}
|
||||
|
||||
.bookmark-item .scrollbutton-down > .toolbarbutton-icon {
|
||||
margin-bottom: -2px !important;
|
||||
border: 6px solid MenuText !important;
|
||||
border-bottom-color: transparent !important;
|
||||
border-right-color: transparent !important;
|
||||
border-left-color: transparent !important;
|
||||
}
|
||||
|
||||
menupopup {
|
||||
margin-left: 1px !important;
|
||||
}
|
||||
|
||||
menu,
|
||||
menuitem,
|
||||
menucaption {
|
||||
padding-left: 5px !important;
|
||||
padding-right: 5px !important;
|
||||
}
|
||||
|
||||
menu:not(.subviewbutton) > .menu-right {
|
||||
margin-right: 0px !important;
|
||||
padding-left: 0px !important;
|
||||
}
|
||||
}
|
||||
|
||||
.titlebar-spacer[type="pre-tabs"],
|
||||
.titlebar-spacer[type="post-tabs"] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
:root:-moz-lwtheme-brighttext {
|
||||
--autocomplete-popup-background: #2a2a2e !important;
|
||||
--autocomplete-popup-highlight-background: #ff5340 !important;
|
||||
--uc-active-tab-width: clamp(100px, 30vw, 300px);
|
||||
--uc-inactive-tab-width: clamp(100px, 20vw, 200px);
|
||||
/* Enable this to always show the Tab Close button
|
||||
* possible values:
|
||||
* show: -moz-inline-block
|
||||
* hide: none
|
||||
*/
|
||||
--show-tab-close-button: none;
|
||||
|
||||
/* Enable this to only show the Tab Close button on tab hover
|
||||
* possible values:
|
||||
* show: -moz-inline-block
|
||||
* hide: none
|
||||
*/
|
||||
--show-tab-close-button-hover: none;
|
||||
}
|
||||
|
||||
@-moz-document url(about:blank),
|
||||
url(about:newtab),
|
||||
url(about:home) {
|
||||
html:not(#ublock0-epicker),
|
||||
html:not(#ublock0-epicker) body,
|
||||
#newtab-customize-overlay {
|
||||
background: black !important;
|
||||
}
|
||||
}
|
||||
|
||||
.tabbrowser-tab .tab-close-button {
|
||||
visibility: collapse !important;
|
||||
}
|
||||
|
||||
#tabs-newtab-button {
|
||||
display: none;
|
||||
margin-left: 4px !important;
|
||||
border-radius: 100% !important;
|
||||
}
|
||||
|
||||
.tabbrowser-tab::before,
|
||||
.tabbrowser-tab::after {
|
||||
display: none !important;
|
||||
--uc-active-tab-width: clamp(100px, 30vw, 300px);
|
||||
--uc-inactive-tab-width: clamp(100px, 20vw, 200px);
|
||||
}
|
||||
|
||||
.tab-background[selected="true"] {
|
||||
color: #111111 !important;
|
||||
}
|
||||
|
||||
.tabbrowser-tab {
|
||||
text-align: center !important;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: 6px 0px 6px 6px !important;
|
||||
border: 2px solid rgba(183, 189, 248, 0.5);
|
||||
background-clip: padding-box;
|
||||
padding-inline: 0 !important;
|
||||
box-shadow: 3px 3px 1px 1px #18192637;
|
||||
--uc-active-tab-width: clamp(100px, 30vw, 300px);
|
||||
--uc-inactive-tab-width: clamp(100px, 20vw, 200px);
|
||||
}
|
||||
|
||||
.tabbrowser-tab[selected="true"] {
|
||||
box-shadow: 3px 3px 1px 1px #181926;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
.tab-label-container[selected="true"] {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
@keyframes fade {
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
#nav-bar:not([customizing]) {
|
||||
visibility: visible;
|
||||
margin-top: -40px;
|
||||
transition-delay: 1s;
|
||||
filter: alpha(opacity=0);
|
||||
opacity: 0;
|
||||
transition:
|
||||
visibility,
|
||||
ease 0.5s,
|
||||
margin-top,
|
||||
ease 0.5s,
|
||||
opacity,
|
||||
ease 0.5s,
|
||||
rotate,
|
||||
ease 0.4s !important;
|
||||
}
|
||||
|
||||
#tabs-newtab-button {
|
||||
padding: 0.75rem 0.2rem 0.2rem 0.2rem !important;
|
||||
}
|
||||
|
||||
#nav-bar:hover,
|
||||
#nav-bar:focus-within,
|
||||
#urlbar[focused="true"],
|
||||
#identity-box[open="true"],
|
||||
#titlebar:hover + #nav-bar:not([customizing]),
|
||||
#toolbar-menubar:not([inactive="true"]) ~ #nav-bar:not([customizing]) {
|
||||
visibility: visible;
|
||||
|
||||
margin-top: 0px;
|
||||
filter: alpha(opacity=100);
|
||||
opacity: 100;
|
||||
margin-bottom: -0.2px;
|
||||
}
|
||||
#PersonalToolbar {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
#nav-bar .toolbarbutton-1[open="true"] {
|
||||
visibility: visible;
|
||||
opacity: 100;
|
||||
}
|
||||
|
||||
:-moz-any(#content, #appcontent) browser {
|
||||
overflow-y: scroll;
|
||||
margin-bottom: 0px !important;
|
||||
overflow-x: scroll;
|
||||
}
|
||||
|
||||
/*tooltip*/
|
||||
#tabbrowser-tab-tooltip {
|
||||
-moz-appearance: none !important;
|
||||
font-size: 1.4rem !important;
|
||||
width: 170px !important;
|
||||
height: auto;
|
||||
font-weight: normal !important;
|
||||
color: var(--lwt-tab-text) !important;
|
||||
background-color: var(--toolbar-bgcolor) !important;
|
||||
padding: 6px;
|
||||
border-radius: 10px;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
#bookmarksPanel {
|
||||
--lwt-toolbar-field-focus: white !important;
|
||||
--lwt-tab-text: black !important;
|
||||
}
|
||||
|
||||
window#places[title="Library"] {
|
||||
--lwt-toolbar-field-focus: white !important;
|
||||
--lwt-tab-text: black !important;
|
||||
}
|
||||
|
||||
menupopup {
|
||||
-moz-appearance: none !important;
|
||||
padding: 8px !important;
|
||||
border-radius: 10px !important;
|
||||
background: red !important;
|
||||
background: var(--toolbar-field-focus-background-color) !important;
|
||||
border: none !important;
|
||||
min-width: 280px !important;
|
||||
}
|
||||
|
||||
.menuitem-with-favicon {
|
||||
color: var(--lwt-toolbar-field-focus-color) !important;
|
||||
}
|
||||
|
||||
.openintabs-menuitem {
|
||||
color: var(--lwt-toolbar-field-focus-color) !important;
|
||||
}
|
||||
|
||||
.bookmark-item:hover {
|
||||
color: var(--lwt-toolbar-field-focus-color) !important;
|
||||
}
|
||||
|
||||
menuseparator {
|
||||
-moz-appearance: none !important;
|
||||
border: none !important;
|
||||
background-color: none !important;
|
||||
}
|
||||
|
||||
menuitem,
|
||||
menu {
|
||||
-moz-appearance: none !important;
|
||||
padding: 7.5px 6px !important;
|
||||
}
|
||||
|
||||
menuitem[disabled="true"],
|
||||
menuitem[disabled="true"] > .menu-text {
|
||||
color: gray !important;
|
||||
}
|
||||
|
||||
menuitem:hover,
|
||||
menu:hover,
|
||||
menu[open="true"],
|
||||
menuitem[_moz-menuactive="true"] {
|
||||
-moz-appearance: none !important;
|
||||
background-color: var(--toolbarbutton-hover-background) !important;
|
||||
/* filter: brightness(200%); */
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
menugroup {
|
||||
padding: 0px !important;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
menuitem[type="checkbox"] {
|
||||
padding-left: 8px !important;
|
||||
padding-top: 6.5px !important;
|
||||
padding-bottom: 6.5px !important;
|
||||
}
|
||||
|
||||
menuitem[type="radio"] {
|
||||
padding-left: 8px !important;
|
||||
padding-top: 6.5px !important;
|
||||
padding-bottom: 6.5px !important;
|
||||
}
|
||||
|
||||
menuitem[type="checkbox"] > .menu-iconic-text,
|
||||
menuitem[type="radio"] > .menu-iconic-text {
|
||||
padding-left: 5px !important;
|
||||
}
|
||||
|
||||
menuitem[checked="true"][type="checkbox"] > .menu-iconic-left {
|
||||
padding: 7px 0px 0px 0px !important;
|
||||
border: solid white;
|
||||
border-width: 0 0 2px 2px;
|
||||
transform: rotate(-45deg) scale(0.75);
|
||||
margin-bottom: 4px !important;
|
||||
}
|
||||
|
||||
menuitem[checked="true"][type="radio"] > .menu-iconic-left {
|
||||
padding: 1px !important;
|
||||
border: solid white;
|
||||
height: 17px !important;
|
||||
border-radius: 100%;
|
||||
background: white;
|
||||
transform: scale(0.5);
|
||||
}
|
||||
|
||||
menucaption {
|
||||
background-color: transparent !important;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
#ContentSelectDropdown > menupopup {
|
||||
background-image: none !important;
|
||||
}
|
||||
|
||||
#ContentSelectDropdown {
|
||||
padding: 0px !important;
|
||||
}
|
||||
|
||||
menulist {
|
||||
-moz-appearance: none !important;
|
||||
padding: 4px 4px 4px 4px !important;
|
||||
border: 2px solid #666666 !important;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
menulist:hover {
|
||||
padding: 4px 4px 4px 4px !important;
|
||||
border: 2px solid #999999 !important;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
menulist[open="true"] {
|
||||
border: 2px solid #666666 !important;
|
||||
background-color: #333333 !important;
|
||||
}
|
||||
|
||||
#context-back > .menu-iconic-left,
|
||||
#context-forward > .menu-iconic-left,
|
||||
#context-reload > .menu-iconic-left,
|
||||
#context-stop > .menu-iconic-left,
|
||||
#context-bookmarkpage > .menu-iconic-left {
|
||||
transform: scale(1.8);
|
||||
}
|
||||
|
||||
.menu-iconic-left {
|
||||
-moz-appearance: none !important;
|
||||
padding: 0px 5px 0px 9px !important;
|
||||
}
|
||||
|
||||
.menu-right {
|
||||
-moz-appearance: none !important;
|
||||
padding: 7.5px !important;
|
||||
margin-right: 6px !important;
|
||||
color: white !important;
|
||||
border: solid white;
|
||||
border-width: 0 2px 2px 0px;
|
||||
transform: rotate(-45deg) scale(0.55);
|
||||
}
|
||||
|
||||
menu[_moz-menuactive="true"],
|
||||
menuitem[_moz-menuactive="true"] {
|
||||
-moz-font-smoothing-background-color: -moz-mac-active-menuitem;
|
||||
color: inherit !important;
|
||||
}
|
||||
|
||||
/*
|
||||
Clean and tight extensions menu
|
||||
#unified-extensions-view .panel-header,
|
||||
#unified-extensions-view .panel-header + toolbarseparator,
|
||||
#unified-extensions-view .panel-subview-body + toolbarseparator,
|
||||
#unified-extensions-view #unified-extensions-manage-extensions {
|
||||
display:none !important;
|
||||
}
|
||||
|
||||
#unified-extensions-view .unified-extensions-item-menu-button.subviewbutton{
|
||||
visibility: hidden !important;
|
||||
transition: 300ms !important;
|
||||
-moz-margin-end: -3.6em !important;
|
||||
}
|
||||
|
||||
#unified-extensions-view .panel-subview-body {
|
||||
padding-top: 8px !important;
|
||||
padding-bottom: 8px !important;
|
||||
}
|
||||
|
||||
#unified-extensions-view:hover
|
||||
.unified-extensions-item-menu-button.subviewbutton{
|
||||
visibility: visible !important;
|
||||
transition: 300ms !important;
|
||||
-moz-margin-end: initial !important;
|
||||
}
|
||||
|
||||
#unified-extensions-view .unified-extensions-item-icon,
|
||||
#unified-extensions-view .unified-extensions-item[unified-extensions="true"] .webextension-browser-action
|
||||
> .toolbarbutton-badge-stack > .toolbarbutton-icon {
|
||||
height: 20px !important;
|
||||
width: 20px !important;
|
||||
}
|
||||
|
||||
#unified-extensions-view .unified-extensions-item-icon,
|
||||
#unified-extensions-view .unified-extensions-item[unified-extensions="true"] .webextension-browser-action > .toolbarbutton-badge-stack {
|
||||
margin-inline-end: 2px !important;
|
||||
}
|
||||
|
||||
#unified-extensions-view .unified-extensions-item-name,
|
||||
#unified-extensions-view .unified-extensions-item-message {
|
||||
padding-inline-start: 0.5em !important;
|
||||
width: 21em !important;
|
||||
}
|
||||
|
||||
#unified-extensions-view .unified-extensions-item-action-button.subviewbutton {
|
||||
padding-top: 2px !important;
|
||||
padding-bottom: 2px !important;
|
||||
}*/
|
|
@ -1,11 +1,12 @@
|
|||
/* Theming */
|
||||
/* Catppuccin Macchiato Lavender userChrome.css*/
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--zen-colors-primary: #24273a !important;
|
||||
--zen-colors-primary: #363a4f !important;
|
||||
--zen-primary-color: #b7bdf8 !important;
|
||||
--zen-colors-secondary: #363a4f !important;
|
||||
--zen-colors-tertiary: #1e2030 !important;
|
||||
--zen-colors-border: #363a4f !important;
|
||||
--zen-colors-border: #b7bdf8 !important;
|
||||
--toolbarbutton-icon-fill: #b7bdf8 !important;
|
||||
--lwt-text-color: #cad3f5 !important;
|
||||
--toolbar-field-color: #cad3f5 !important;
|
||||
|
@ -22,10 +23,13 @@
|
|||
--newtab-background-color: #24273a !important;
|
||||
--zen-themed-toolbar-bg: #1e2030 !important;
|
||||
--zen-main-browser-background: #1e2030 !important;
|
||||
--newtab-primary-action-background: #b7bdf8 !important;
|
||||
--toolbox-bgcolor-inactive: #1e2030 !important;
|
||||
}
|
||||
|
||||
#permissions-granted-icon {
|
||||
color: #1e2030 !important;
|
||||
}
|
||||
|
||||
.sidebar-placesTree {
|
||||
background-color: #24273a !important;
|
||||
}
|
||||
|
@ -39,7 +43,7 @@
|
|||
}
|
||||
|
||||
#urlbar-background {
|
||||
background-color: #1e2030 !important;
|
||||
background-color: #24273a !important;
|
||||
}
|
||||
|
||||
.content-shortcuts {
|
||||
|
@ -54,6 +58,75 @@
|
|||
#zenEditBookmarkPanelFaviconContainer {
|
||||
background: #181926 !important;
|
||||
}
|
||||
|
||||
#zen-media-controls-toolbar {
|
||||
& #zen-media-progress-bar {
|
||||
&::-moz-range-track {
|
||||
background: #363a4f !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
toolbar .toolbarbutton-1 {
|
||||
&:not([disabled]) {
|
||||
&:is([open], [checked])
|
||||
> :is(
|
||||
.toolbarbutton-icon,
|
||||
.toolbarbutton-text,
|
||||
.toolbarbutton-badge-stack
|
||||
) {
|
||||
fill: #181926;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.identity-color-blue {
|
||||
--identity-tab-color: #8aadf4 !important;
|
||||
--identity-icon-color: #8aadf4 !important;
|
||||
}
|
||||
|
||||
.identity-color-turquoise {
|
||||
--identity-tab-color: #8bd5ca !important;
|
||||
--identity-icon-color: #8bd5ca !important;
|
||||
}
|
||||
|
||||
.identity-color-green {
|
||||
--identity-tab-color: #a6da95 !important;
|
||||
--identity-icon-color: #a6da95 !important;
|
||||
}
|
||||
|
||||
.identity-color-yellow {
|
||||
--identity-tab-color: #eed49f !important;
|
||||
--identity-icon-color: #eed49f !important;
|
||||
}
|
||||
|
||||
.identity-color-orange {
|
||||
--identity-tab-color: #f5a97f !important;
|
||||
--identity-icon-color: #f5a97f !important;
|
||||
}
|
||||
|
||||
.identity-color-red {
|
||||
--identity-tab-color: #ed8796 !important;
|
||||
--identity-icon-color: #ed8796 !important;
|
||||
}
|
||||
|
||||
.identity-color-pink {
|
||||
--identity-tab-color: #f5bde6 !important;
|
||||
--identity-icon-color: #f5bde6 !important;
|
||||
}
|
||||
|
||||
.identity-color-purple {
|
||||
--identity-tab-color: #c6a0f6 !important;
|
||||
--identity-icon-color: #c6a0f6 !important;
|
||||
}
|
||||
|
||||
hbox#titlebar {
|
||||
background-color: #1e2030 !important;
|
||||
}
|
||||
|
||||
#zen-appcontent-navbar-container {
|
||||
background-color: #1e2030 !important;
|
||||
}
|
||||
}
|
||||
|
||||
#zen-essentials-container {
|
|
@ -1,3 +1,5 @@
|
|||
/* Catppuccin Macchiato Lavender userContent.css*/
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
/* Common variables affecting all pages */
|
||||
@-moz-document url-prefix("about:") {
|
||||
|
@ -19,6 +21,7 @@
|
|||
--newtab-element-hover-color: #363a4f !important;
|
||||
--newtab-text-primary-color: #cad3f5 !important;
|
||||
--newtab-wordmark-color: #cad3f5 !important;
|
||||
--newtab-primary-action-background: #b7bdf8 !important;
|
||||
}
|
||||
|
||||
.icon {
|
||||
|
@ -83,6 +86,46 @@
|
|||
.main-content {
|
||||
background-color: #181926 !important;
|
||||
}
|
||||
|
||||
.identity-color-blue {
|
||||
--identity-tab-color: #8aadf4 !important;
|
||||
--identity-icon-color: #8aadf4 !important;
|
||||
}
|
||||
|
||||
.identity-color-turquoise {
|
||||
--identity-tab-color: #8bd5ca !important;
|
||||
--identity-icon-color: #8bd5ca !important;
|
||||
}
|
||||
|
||||
.identity-color-green {
|
||||
--identity-tab-color: #a6da95 !important;
|
||||
--identity-icon-color: #a6da95 !important;
|
||||
}
|
||||
|
||||
.identity-color-yellow {
|
||||
--identity-tab-color: #eed49f !important;
|
||||
--identity-icon-color: #eed49f !important;
|
||||
}
|
||||
|
||||
.identity-color-orange {
|
||||
--identity-tab-color: #f5a97f !important;
|
||||
--identity-icon-color: #f5a97f !important;
|
||||
}
|
||||
|
||||
.identity-color-red {
|
||||
--identity-tab-color: #ed8796 !important;
|
||||
--identity-icon-color: #ed8796 !important;
|
||||
}
|
||||
|
||||
.identity-color-pink {
|
||||
--identity-tab-color: #f5bde6 !important;
|
||||
--identity-icon-color: #f5bde6 !important;
|
||||
}
|
||||
|
||||
.identity-color-purple {
|
||||
--identity-tab-color: #c6a0f6 !important;
|
||||
--identity-icon-color: #c6a0f6 !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Variables and styles specific to about:addons */
|
File diff suppressed because one or more lines are too long
|
@ -1,347 +0,0 @@
|
|||
//
|
||||
/* You may copy+paste this file and use it as it is.
|
||||
*
|
||||
* If you make changes to your about:config while the program is running, the
|
||||
* changes will be overwritten by the user.js when the application restarts.
|
||||
*
|
||||
* To make lasting changes to preferences, you will have to edit the user.js.
|
||||
*/
|
||||
|
||||
/****************************************************************************
|
||||
* Betterfox *
|
||||
* "Ad meliora" *
|
||||
* version: 129 *
|
||||
* url: https://github.com/yokoffing/Betterfox *
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: FASTFOX *
|
||||
****************************************************************************/
|
||||
/** GENERAL ***/
|
||||
user_pref("content.notify.interval", 100000);
|
||||
|
||||
/** GFX ***/
|
||||
user_pref("gfx.canvas.accelerated.cache-items", 4096);
|
||||
user_pref("gfx.canvas.accelerated.cache-size", 512);
|
||||
user_pref("gfx.content.skia-font-cache-size", 20);
|
||||
|
||||
/** DISK CACHE ***/
|
||||
user_pref("browser.cache.jsbc_compression_level", 3);
|
||||
|
||||
/** MEDIA CACHE ***/
|
||||
user_pref("media.memory_cache_max_size", 65536);
|
||||
user_pref("media.cache_readahead_limit", 7200);
|
||||
user_pref("media.cache_resume_threshold", 3600);
|
||||
|
||||
/** IMAGE CACHE ***/
|
||||
user_pref("image.mem.decode_bytes_at_a_time", 32768);
|
||||
|
||||
/** NETWORK ***/
|
||||
user_pref("network.http.max-connections", 1800);
|
||||
user_pref("network.http.max-persistent-connections-per-server", 10);
|
||||
user_pref("network.http.max-urgent-start-excessive-connections-per-host", 5);
|
||||
user_pref("network.http.pacing.requests.enabled", false);
|
||||
user_pref("network.dnsCacheExpiration", 3600);
|
||||
user_pref("network.ssl_tokens_cache_capacity", 10240);
|
||||
|
||||
/** SPECULATIVE LOADING ***/
|
||||
user_pref("network.dns.disablePrefetch", true);
|
||||
user_pref("network.dns.disablePrefetchFromHTTPS", true);
|
||||
user_pref("network.prefetch-next", false);
|
||||
user_pref("network.predictor.enabled", false);
|
||||
user_pref("network.predictor.enable-prefetch", false);
|
||||
|
||||
/** EXPERIMENTAL ***/
|
||||
user_pref("layout.css.grid-template-masonry-value.enabled", true);
|
||||
user_pref("dom.enable_web_task_scheduling", true);
|
||||
user_pref("dom.security.sanitizer.enabled", true);
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: SECUREFOX *
|
||||
****************************************************************************/
|
||||
/** TRACKING PROTECTION ***/
|
||||
user_pref("browser.contentblocking.category", "strict");
|
||||
user_pref(
|
||||
"urlclassifier.trackingSkipURLs",
|
||||
"*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com",
|
||||
);
|
||||
user_pref(
|
||||
"urlclassifier.features.socialtracking.skipURLs",
|
||||
"*.instagram.com, *.twitter.com, *.twimg.com",
|
||||
);
|
||||
user_pref("network.cookie.sameSite.noneRequiresSecure", true);
|
||||
user_pref("browser.download.start_downloads_in_tmp_dir", true);
|
||||
user_pref("browser.helperApps.deleteTempFileOnExit", true);
|
||||
user_pref("browser.uitour.enabled", false);
|
||||
user_pref("privacy.globalprivacycontrol.enabled", true);
|
||||
|
||||
/** OCSP & CERTS / HPKP ***/
|
||||
user_pref("security.OCSP.enabled", 0);
|
||||
user_pref("security.remote_settings.crlite_filters.enabled", true);
|
||||
user_pref("security.pki.crlite_mode", 2);
|
||||
|
||||
/** SSL / TLS ***/
|
||||
user_pref("security.ssl.treat_unsafe_negotiation_as_broken", true);
|
||||
user_pref("browser.xul.error_pages.expert_bad_cert", true);
|
||||
user_pref("security.tls.enable_0rtt_data", false);
|
||||
|
||||
/** DISK AVOIDANCE ***/
|
||||
user_pref("browser.privatebrowsing.forceMediaMemoryCache", true);
|
||||
user_pref("browser.sessionstore.interval", 60000);
|
||||
|
||||
/** SHUTDOWN & SANITIZING ***/
|
||||
user_pref("privacy.history.custom", true);
|
||||
|
||||
/** SEARCH / URL BAR ***/
|
||||
user_pref("browser.urlbar.trimHttps", true);
|
||||
user_pref("browser.urlbar.untrimOnUserInteraction.featureGate", true);
|
||||
user_pref("browser.search.separatePrivateDefault.ui.enabled", true);
|
||||
user_pref("browser.urlbar.update2.engineAliasRefresh", true);
|
||||
user_pref("browser.search.suggest.enabled", false);
|
||||
user_pref("browser.urlbar.quicksuggest.enabled", false);
|
||||
user_pref("browser.urlbar.suggest.quicksuggest.sponsored", false);
|
||||
user_pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false);
|
||||
user_pref("browser.urlbar.groupLabels.enabled", false);
|
||||
user_pref("browser.formfill.enable", false);
|
||||
user_pref("security.insecure_connection_text.enabled", true);
|
||||
user_pref("security.insecure_connection_text.pbmode.enabled", true);
|
||||
user_pref("network.IDN_show_punycode", true);
|
||||
|
||||
/** HTTPS-FIRST POLICY ***/
|
||||
user_pref("dom.security.https_first", true);
|
||||
|
||||
/** PASSWORDS ***/
|
||||
user_pref("signon.formlessCapture.enabled", false);
|
||||
user_pref("signon.privateBrowsingCapture.enabled", false);
|
||||
user_pref("network.auth.subresource-http-auth-allow", 1);
|
||||
user_pref("editor.truncate_user_pastes", false);
|
||||
|
||||
/** MIXED CONTENT + CROSS-SITE ***/
|
||||
user_pref("security.mixed_content.block_display_content", true);
|
||||
user_pref("pdfjs.enableScripting", false);
|
||||
user_pref("extensions.postDownloadThirdPartyPrompt", false);
|
||||
|
||||
/** HEADERS / REFERERS ***/
|
||||
user_pref("network.http.referer.XOriginTrimmingPolicy", 2);
|
||||
|
||||
/** CONTAINERS ***/
|
||||
user_pref("privacy.userContext.ui.enabled", true);
|
||||
|
||||
/** WEBRTC ***/
|
||||
user_pref("media.peerconnection.ice.proxy_only_if_behind_proxy", true);
|
||||
user_pref("media.peerconnection.ice.default_address_only", true);
|
||||
|
||||
/** SAFE BROWSING ***/
|
||||
user_pref("browser.safebrowsing.downloads.remote.enabled", false);
|
||||
|
||||
/** MOZILLA ***/
|
||||
user_pref("permissions.default.desktop-notification", 2);
|
||||
user_pref("permissions.default.geo", 2);
|
||||
user_pref("permissions.manager.defaultsUrl", "");
|
||||
user_pref("webchannel.allowObject.urlWhitelist", "");
|
||||
|
||||
/** TELEMETRY ***/
|
||||
user_pref("datareporting.policy.dataSubmissionEnabled", false);
|
||||
user_pref("datareporting.healthreport.uploadEnabled", false);
|
||||
user_pref("toolkit.telemetry.unified", false);
|
||||
user_pref("toolkit.telemetry.enabled", false);
|
||||
user_pref("toolkit.telemetry.server", "data:,");
|
||||
user_pref("toolkit.telemetry.archive.enabled", false);
|
||||
user_pref("toolkit.telemetry.newProfilePing.enabled", false);
|
||||
user_pref("toolkit.telemetry.shutdownPingSender.enabled", false);
|
||||
user_pref("toolkit.telemetry.updatePing.enabled", false);
|
||||
user_pref("toolkit.telemetry.bhrPing.enabled", false);
|
||||
user_pref("toolkit.telemetry.firstShutdownPing.enabled", false);
|
||||
user_pref("toolkit.telemetry.coverage.opt-out", true);
|
||||
user_pref("toolkit.coverage.opt-out", true);
|
||||
user_pref("toolkit.coverage.endpoint.base", "");
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
|
||||
user_pref("browser.newtabpage.activity-stream.telemetry", false);
|
||||
|
||||
/** EXPERIMENTS ***/
|
||||
user_pref("app.shield.optoutstudies.enabled", false);
|
||||
user_pref("app.normandy.enabled", false);
|
||||
user_pref("app.normandy.api_url", "");
|
||||
|
||||
/** CRASH REPORTS ***/
|
||||
user_pref("breakpad.reportURL", "");
|
||||
user_pref("browser.tabs.crashReporting.sendReport", false);
|
||||
user_pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false);
|
||||
|
||||
/** DETECTION ***/
|
||||
user_pref("captivedetect.canonicalURL", "");
|
||||
user_pref("network.captive-portal-service.enabled", false);
|
||||
user_pref("network.connectivity-service.enabled", false);
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: PESKYFOX *
|
||||
****************************************************************************/
|
||||
/** MOZILLA UI ***/
|
||||
user_pref("browser.privatebrowsing.vpnpromourl", "");
|
||||
user_pref("extensions.getAddons.showPane", false);
|
||||
user_pref("extensions.htmlaboutaddons.recommendations.enabled", false);
|
||||
user_pref("browser.discovery.enabled", false);
|
||||
user_pref("browser.shell.checkDefaultBrowser", false);
|
||||
user_pref(
|
||||
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons",
|
||||
false,
|
||||
);
|
||||
user_pref(
|
||||
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features",
|
||||
false,
|
||||
);
|
||||
user_pref("browser.preferences.moreFromMozilla", false);
|
||||
user_pref("browser.aboutConfig.showWarning", false);
|
||||
user_pref("browser.aboutwelcome.enabled", false);
|
||||
user_pref("browser.tabs.tabmanager.enabled", false);
|
||||
user_pref("browser.profiles.enabled", true);
|
||||
|
||||
/** THEME ADJUSTMENTS ***/
|
||||
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
|
||||
user_pref("browser.compactmode.show", true);
|
||||
user_pref("browser.display.focus_ring_on_anything", true);
|
||||
user_pref("browser.display.focus_ring_style", 0);
|
||||
user_pref("browser.display.focus_ring_width", 0);
|
||||
user_pref("layout.css.prefers-color-scheme.content-override", 2);
|
||||
user_pref("browser.privateWindowSeparation.enabled", false); // WINDOWS
|
||||
user_pref(
|
||||
"browser.newtabpage.activity-stream.newtabWallpapers.v2.enabled",
|
||||
true,
|
||||
);
|
||||
|
||||
/** COOKIE BANNER HANDLING ***/
|
||||
user_pref("cookiebanners.service.mode", 1);
|
||||
user_pref("cookiebanners.service.mode.privateBrowsing", 1);
|
||||
|
||||
/** FULLSCREEN NOTICE ***/
|
||||
user_pref("full-screen-api.transition-duration.enter", "0 0");
|
||||
user_pref("full-screen-api.transition-duration.leave", "0 0");
|
||||
user_pref("full-screen-api.warning.delay", -1);
|
||||
user_pref("full-screen-api.warning.timeout", 0);
|
||||
|
||||
/** URL BAR ***/
|
||||
user_pref("browser.urlbar.suggest.calculator", true);
|
||||
user_pref("browser.urlbar.unitConversion.enabled", true);
|
||||
user_pref("browser.urlbar.trending.featureGate", false);
|
||||
|
||||
/** NEW TAB PAGE ***/
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", false);
|
||||
user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
|
||||
|
||||
/** POCKET ***/
|
||||
user_pref("extensions.pocket.enabled", false);
|
||||
|
||||
/** DOWNLOADS ***/
|
||||
user_pref("browser.download.manager.addToRecentDocs", false);
|
||||
|
||||
/** PDF ***/
|
||||
user_pref("browser.download.open_pdf_attachments_inline", true);
|
||||
|
||||
/** TAB BEHAVIOR ***/
|
||||
user_pref("browser.bookmarks.openInTabClosesMenu", false);
|
||||
user_pref("browser.menu.showViewImageInfo", true);
|
||||
user_pref("findbar.highlightAll", true);
|
||||
user_pref("layout.word_select.eat_space_to_next_word", false);
|
||||
|
||||
/****************************************************************************
|
||||
* START: MY OVERRIDES *
|
||||
****************************************************************************/
|
||||
// visit https://github.com/yokoffing/Betterfox/wiki/Common-Overrides
|
||||
// visit https://github.com/yokoffing/Betterfox/wiki/Optional-Hardening
|
||||
// Enter your personal overrides below this line:
|
||||
// PREF: enable HTTPS-Only Mode
|
||||
// Warn me before loading sites that don't support HTTPS
|
||||
// in both Normal and Private Browsing windows.
|
||||
user_pref("dom.security.https_only_mode", true);
|
||||
user_pref("dom.security.https_only_mode_error_page_user_suggestions", true);
|
||||
|
||||
// PREF: disable the Firefox View tour from popping up
|
||||
user_pref("browser.firefox-view.feature-tour", '{"screen":"","complete":true}');
|
||||
|
||||
// PREF: preferred color scheme for websites and sub-pages
|
||||
// Dark (0), Light (1), System (2), Browser (3)
|
||||
user_pref("layout.css.prefers-color-scheme.content-override", 0);
|
||||
|
||||
// PREF: disable login manager
|
||||
user_pref("signon.rememberSignons", false);
|
||||
|
||||
// PREF: disable address and credit card manager
|
||||
user_pref("extensions.formautofill.addresses.enabled", false);
|
||||
user_pref("extensions.formautofill.creditCards.enabled", false);
|
||||
|
||||
// PREF: disable telemetry of what default browser you use [WINDOWS]
|
||||
user_pref("default-browser-agent.enabled", false);
|
||||
|
||||
/****************************************************************************
|
||||
* SECTION: SMOOTHFOX *
|
||||
****************************************************************************/
|
||||
// visit https://github.com/yokoffing/Betterfox/blob/main/Smoothfox.js
|
||||
// Enter your scrolling overrides below this line:
|
||||
|
||||
/****************************************************************************************
|
||||
* Smoothfox *
|
||||
* "Faber est suae quisque fortunae" *
|
||||
* priority: better scrolling *
|
||||
* version: 126.1 *
|
||||
* url: https://github.com/yokoffing/Betterfox *
|
||||
***************************************************************************************/
|
||||
|
||||
// Use only one option at a time!
|
||||
// Reset prefs if you decide to use different option.
|
||||
|
||||
/****************************************************************************************
|
||||
* OPTION: SHARPEN SCROLLING *
|
||||
****************************************************************************************/
|
||||
// credit: https://github.com/black7375/Firefox-UI-Fix
|
||||
// only sharpen scrolling
|
||||
// user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
|
||||
// user_pref("general.smoothScroll", true); // DEFAULT
|
||||
// user_pref("mousewheel.min_line_scroll_amount", 10); // 10-40; adjust this number to your liking; default=5
|
||||
// user_pref("general.smoothScroll.mouseWheel.durationMinMS", 80); // default=50
|
||||
// user_pref("general.smoothScroll.currentVelocityWeighting", "0.15"); // default=.25
|
||||
// user_pref("general.smoothScroll.stopDecelerationWeighting", "0.6"); // default=.4
|
||||
// Firefox Nightly only:
|
||||
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1846935
|
||||
// user_pref("general.smoothScroll.msdPhysics.enabled", false); // [FF122+ Nightly]
|
||||
|
||||
/****************************************************************************************
|
||||
* OPTION: INSTANT SCROLLING (SIMPLE ADJUSTMENT) *
|
||||
****************************************************************************************/
|
||||
// recommended for 60hz+ displays
|
||||
// user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
|
||||
// user_pref("general.smoothScroll", true); // DEFAULT
|
||||
// user_pref("mousewheel.default.delta_multiplier_y", 275); // 250-400; adjust this number to your liking
|
||||
// // Firefox Nightly only:
|
||||
// // [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1846935
|
||||
// user_pref("general.smoothScroll.msdPhysics.enabled", false); // [FF122+ Nightly]
|
||||
|
||||
/****************************************************************************************
|
||||
* OPTION: SMOOTH SCROLLING *
|
||||
****************************************************************************************/
|
||||
// recommended for 90hz+ displays
|
||||
user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
|
||||
user_pref("general.smoothScroll", true); // DEFAULT
|
||||
user_pref("general.smoothScroll.msdPhysics.enabled", true);
|
||||
user_pref("mousewheel.default.delta_multiplier_y", 300); // 250-400; adjust this number to your liking
|
||||
|
||||
/****************************************************************************************
|
||||
* OPTION: NATURAL SMOOTH SCROLLING V3 [MODIFIED] *
|
||||
****************************************************************************************/
|
||||
// credit: https://github.com/AveYo/fox/blob/cf56d1194f4e5958169f9cf335cd175daa48d349/Natural%20Smooth%20Scrolling%20for%20user.js
|
||||
// recommended for 120hz+ displays
|
||||
// largely matches Chrome flags: Windows Scrolling Personality and Smooth Scrolling
|
||||
// user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
|
||||
// user_pref("general.smoothScroll", true); // DEFAULT
|
||||
// user_pref("general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS", 12);
|
||||
// user_pref("general.smoothScroll.msdPhysics.enabled", true);
|
||||
// user_pref("general.smoothScroll.msdPhysics.motionBeginSpringConstant", 600);
|
||||
// user_pref("general.smoothScroll.msdPhysics.regularSpringConstant", 650);
|
||||
// user_pref("general.smoothScroll.msdPhysics.slowdownMinDeltaMS", 25);
|
||||
// user_pref("general.smoothScroll.msdPhysics.slowdownMinDeltaRatio", "2");
|
||||
// user_pref("general.smoothScroll.msdPhysics.slowdownSpringConstant", 250);
|
||||
// user_pref("general.smoothScroll.currentVelocityWeighting", "1");
|
||||
// user_pref("general.smoothScroll.stopDecelerationWeighting", "1");
|
||||
// user_pref("mousewheel.default.delta_multiplier_y", 300); // 250-400; adjust this number to your liking
|
||||
/****************************************************************************
|
||||
* END: BETTERFOX *
|
||||
****************************************************************************/
|
41
.config/browser/userjs/user.js
Normal file
41
.config/browser/userjs/user.js
Normal file
|
@ -0,0 +1,41 @@
|
|||
// THIS USER.JS IS INTENTED TO USE ONLY WITH ZEN BROWSER
|
||||
// Smooth Scrolling
|
||||
user_pref("apz.overscroll.enabled", true);
|
||||
user_pref("general.smoothScroll", true);
|
||||
user_pref("general.smoothScroll.msdPhysics.enabled", true);
|
||||
user_pref("mousewheel.default.delta_multiplier_y", 250);
|
||||
|
||||
// Custom Options
|
||||
user_pref("ui.key.menuAccessKey", 0); // Disable alt key to allow custom bindings that uses it
|
||||
|
||||
// Firefox Options
|
||||
user_pref("privacy.history.custom", true);
|
||||
user_pref("privacy.clearHistory.formdata", true);
|
||||
user_pref("browser.ctrlTab.sortByRecentlyUsed", true);
|
||||
user_pref("browser.download.useDownloadDir", false);
|
||||
user_pref("devtools.editor.keymap", "jim");
|
||||
user_pref("devtools.theme", "dark");
|
||||
user_pref("font.name.serif.x-western", "Maple Mono NF");
|
||||
user_pref("signon.rememberSignons", false);
|
||||
user_pref("signon.autofillForms", false);
|
||||
|
||||
// Zen Options
|
||||
user_pref("browser.urlbar.trimURLs", true);
|
||||
user_pref("browser.tabs.hoverPreview.enabled", true);
|
||||
user_pref("toolkit.tabbox.switchByScrolling", false);
|
||||
user_pref("zen.urlbar.replace-newtab", true);
|
||||
user_pref("zen.tabs.vertical.right-side", true);
|
||||
user_pref("zen.workspaces.open-new-tab-if-last-unpinned-tab-is-closed", false);
|
||||
user_pref("zen.theme.gradient", true);
|
||||
user_pref("zen.view.experimental-rounded-view", true);
|
||||
user_pref("zen.view.experimental-force-window-controls-left", false); // Using the sidebar at the right
|
||||
user_pref("zen.widget.linux.transparency", true);
|
||||
user_pref("zen.pinned-tab-manager.restore-pinned-tabs-to-pinned-url", true);
|
||||
user_pref("zen.splitView.change-on-hover", true);
|
||||
user_pref("zen.tabs.show-newtab-under", false);
|
||||
user_pref("zen.tabs.show-newtab-button-top", false);
|
||||
user_pref("zen.tabs.show-newtab-vertical", false);
|
||||
user_pref("zen.urlbar.behavior", "float");
|
||||
user_pref("zen.view.compact.hide-toolbar", true);
|
||||
user_pref("zen.workspaces.force-container-workspace", true);
|
||||
user_pref("zen.glance.open-essential-external-links", false);
|
|
@ -1,87 +0,0 @@
|
|||
/****************************************************************************************
|
||||
* Smoothfox *
|
||||
* "Faber est suae quisque fortunae" *
|
||||
* priority: better scrolling *
|
||||
* version: 126.1 *
|
||||
* url: https://github.com/yokoffing/Betterfox *
|
||||
***************************************************************************************/
|
||||
|
||||
// Use only one option at a time!
|
||||
// Reset prefs if you decide to use different option.
|
||||
|
||||
/****************************************************************************************
|
||||
* OPTION: SHARPEN SCROLLING *
|
||||
****************************************************************************************/
|
||||
// credit: https://github.com/black7375/Firefox-UI-Fix
|
||||
// only sharpen scrolling
|
||||
// user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
|
||||
// user_pref("general.smoothScroll", true); // DEFAULT
|
||||
// user_pref("mousewheel.min_line_scroll_amount", 10); // 10-40; adjust this number to your liking; default=5
|
||||
// user_pref("general.smoothScroll.mouseWheel.durationMinMS", 80); // default=50
|
||||
// user_pref("general.smoothScroll.currentVelocityWeighting", "0.15"); // default=.25
|
||||
// user_pref("general.smoothScroll.stopDecelerationWeighting", "0.6"); // default=.4
|
||||
// Firefox Nightly only:
|
||||
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1846935
|
||||
// user_pref("general.smoothScroll.msdPhysics.enabled", false); // [FF122+ Nightly]
|
||||
|
||||
/****************************************************************************************
|
||||
* OPTION: INSTANT SCROLLING (SIMPLE ADJUSTMENT) *
|
||||
****************************************************************************************/
|
||||
// recommended for 60hz+ displays
|
||||
// user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
|
||||
// user_pref("general.smoothScroll", true); // DEFAULT
|
||||
// user_pref("mousewheel.default.delta_multiplier_y", 275); // 250-400; adjust this number to your liking
|
||||
// // Firefox Nightly only:
|
||||
// // [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1846935
|
||||
// user_pref("general.smoothScroll.msdPhysics.enabled", false); // [FF122+ Nightly]
|
||||
|
||||
/****************************************************************************************
|
||||
* OPTION: SMOOTH SCROLLING *
|
||||
****************************************************************************************/
|
||||
// recommended for 90hz+ displays
|
||||
user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
|
||||
user_pref("general.smoothScroll", true); // DEFAULT
|
||||
user_pref("general.smoothScroll.msdPhysics.enabled", true);
|
||||
user_pref("mousewheel.default.delta_multiplier_y", 250); // 250-400; adjust this number to your liking
|
||||
|
||||
/****************************************************************************************
|
||||
* OPTION: NATURAL SMOOTH SCROLLING V3 [MODIFIED] *
|
||||
****************************************************************************************/
|
||||
// credit: https://github.com/AveYo/fox/blob/cf56d1194f4e5958169f9cf335cd175daa48d349/Natural%20Smooth%20Scrolling%20for%20user.js
|
||||
// recommended for 120hz+ displays
|
||||
// largely matches Chrome flags: Windows Scrolling Personality and Smooth Scrolling
|
||||
// user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
|
||||
// user_pref("general.smoothScroll", true); // DEFAULT
|
||||
// user_pref("general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS", 12);
|
||||
// user_pref("general.smoothScroll.msdPhysics.enabled", true);
|
||||
// user_pref("general.smoothScroll.msdPhysics.motionBeginSpringConstant", 600);
|
||||
// user_pref("general.smoothScroll.msdPhysics.regularSpringConstant", 650);
|
||||
// user_pref("general.smoothScroll.msdPhysics.slowdownMinDeltaMS", 25);
|
||||
// user_pref("general.smoothScroll.msdPhysics.slowdownMinDeltaRatio", "2");
|
||||
// user_pref("general.smoothScroll.msdPhysics.slowdownSpringConstant", 250);
|
||||
// user_pref("general.smoothScroll.currentVelocityWeighting", "1");
|
||||
// user_pref("general.smoothScroll.stopDecelerationWeighting", "1");
|
||||
// user_pref("mousewheel.default.delta_multiplier_y", 300); // 250-400; adjust this number to your liking
|
||||
|
||||
// Custom Options
|
||||
user_pref("ui.key.menuAccessKey", 0);
|
||||
user_pref("browser.tabs.hoverPreview.enabled", true);
|
||||
user_pref("zen.urlbar.replace-newtab", false);
|
||||
user_pref("zen.workspaces.open-new-tab-if-last-unpinned-tab-is-closed", false);
|
||||
user_pref("browser.tabs.groups.enabled", false);
|
||||
user_pref("browser.urlbar.trimURLs", true);
|
||||
user_pref("zen.theme.gradient", true);
|
||||
user_pref("zen.view.experimental-rounded-view", true);
|
||||
user_pref("zen.view.experimental-force-window-controls-left", false); // Using the sidebar at the right
|
||||
user_pref("toolkit.tabbox.switchByScrolling", false);
|
||||
user_pref("zen.widget.linux.transparency", true);
|
||||
user_pref("zen.pinned-tab-manager.restore-pinned-tabs-to-pinned-url", true);
|
||||
user_pref("zen.splitView.change-on-hover", true);
|
||||
user_pref("zen.tabs.show-newtab-under", false);
|
||||
user_pref("zen.tabs.show-newtab-button-top", false);
|
||||
user_pref("zen.tabs.show-newtab-vertical", false);
|
||||
user_pref("zen.urlbar.behavior", "float");
|
||||
user_pref("zen.view.compact.hide-toolbar", true);
|
||||
user_pref("zen.workspaces.force-container-workspace", true);
|
||||
user_pref("zen.workspaces.open-new-tab-if-last-unpinned-tab-is-closed", false);
|
||||
user_pref("zen.glance.open-essential-external-links", false);
|
|
@ -1,4 +1,4 @@
|
|||
#? Config file for btop v. 1.4.0
|
||||
#? Config file for btop v. 1.4.2
|
||||
|
||||
#* 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"
|
||||
|
@ -210,6 +210,9 @@ 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
|
||||
|
||||
|
@ -226,6 +229,9 @@ log_level = "WARNING"
|
|||
#* 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
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
{
|
||||
"output": {
|
||||
"blocklist": [],
|
||||
"equalizer": {
|
||||
"equalizer#0": {
|
||||
"balance": 0.0,
|
||||
"bypass": false,
|
||||
"input-gain": -2.0,
|
||||
"left": {
|
||||
"band0": {
|
||||
|
@ -12,7 +14,8 @@
|
|||
"q": 1.504760237537245,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band1": {
|
||||
"frequency": 64.0,
|
||||
|
@ -22,7 +25,8 @@
|
|||
"q": 1.5047602375372453,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band2": {
|
||||
"frequency": 125.0,
|
||||
|
@ -32,7 +36,8 @@
|
|||
"q": 1.504760237537245,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band3": {
|
||||
"frequency": 250.0,
|
||||
|
@ -42,7 +47,8 @@
|
|||
"q": 1.504760237537245,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band4": {
|
||||
"frequency": 500.0,
|
||||
|
@ -52,7 +58,8 @@
|
|||
"q": 1.5047602375372453,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band5": {
|
||||
"frequency": 1000.0,
|
||||
|
@ -62,7 +69,8 @@
|
|||
"q": 1.504760237537245,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band6": {
|
||||
"frequency": 2000.0,
|
||||
|
@ -72,7 +80,8 @@
|
|||
"q": 1.5047602375372449,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band7": {
|
||||
"frequency": 4000.0,
|
||||
|
@ -82,7 +91,8 @@
|
|||
"q": 1.5047602375372449,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band8": {
|
||||
"frequency": 8000.0,
|
||||
|
@ -92,7 +102,8 @@
|
|||
"q": 1.5047602375372453,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band9": {
|
||||
"frequency": 16000.0,
|
||||
|
@ -102,12 +113,15 @@
|
|||
"q": 1.504760237537245,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
}
|
||||
},
|
||||
"mode": "IIR",
|
||||
"num-bands": 10,
|
||||
"output-gain": 0.0,
|
||||
"output-gain": 1.0,
|
||||
"pitch-left": 0.0,
|
||||
"pitch-right": 0.0,
|
||||
"right": {
|
||||
"band0": {
|
||||
"frequency": 32.0,
|
||||
|
@ -117,7 +131,8 @@
|
|||
"q": 1.504760237537245,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band1": {
|
||||
"frequency": 64.0,
|
||||
|
@ -127,7 +142,8 @@
|
|||
"q": 1.5047602375372453,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band2": {
|
||||
"frequency": 125.0,
|
||||
|
@ -137,7 +153,8 @@
|
|||
"q": 1.504760237537245,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band3": {
|
||||
"frequency": 250.0,
|
||||
|
@ -147,7 +164,8 @@
|
|||
"q": 1.504760237537245,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band4": {
|
||||
"frequency": 500.0,
|
||||
|
@ -157,7 +175,8 @@
|
|||
"q": 1.5047602375372453,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band5": {
|
||||
"frequency": 1000.0,
|
||||
|
@ -167,7 +186,8 @@
|
|||
"q": 1.504760237537245,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band6": {
|
||||
"frequency": 2000.0,
|
||||
|
@ -177,7 +197,8 @@
|
|||
"q": 1.5047602375372449,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band7": {
|
||||
"frequency": 4000.0,
|
||||
|
@ -187,7 +208,8 @@
|
|||
"q": 1.5047602375372449,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band8": {
|
||||
"frequency": 8000.0,
|
||||
|
@ -197,7 +219,8 @@
|
|||
"q": 1.5047602375372453,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
},
|
||||
"band9": {
|
||||
"frequency": 16000.0,
|
||||
|
@ -207,13 +230,14 @@
|
|||
"q": 1.504760237537245,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
"type": "Bell",
|
||||
"width": 4.0
|
||||
}
|
||||
},
|
||||
"split-channels": false
|
||||
},
|
||||
"plugins_order": [
|
||||
"equalizer"
|
||||
"equalizer#0"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,8 +13,8 @@ SETUVAR --export XDG_CACHE_HOME:/home/matt/\x2ecache
|
|||
SETUVAR --export XDG_CONFIG_HOME:/home/matt/\x2econfig
|
||||
SETUVAR --export XDG_DATA_HOME:/home/matt/\x2elocal/share
|
||||
SETUVAR --export XDG_SCRIPT_HOME:/home/matt/\x2elocal/script
|
||||
SETUVAR --export __ABBR_TIPS_KEYS:g\x1ed\x1ea__bruh\x1ea__c\x1ea__cat\x1ea__catp\x1ea__cl\x1ea__clock\x1ea__codeinfo\x1ea__cv\x1ea__disks\x1ea__dots\x1ea__dsize\x1ea__ex\x1ea__f\x1ea__fetch\x1ea__gfetch\x1ea__gpt\x1ea__gr\x1ea__i\x1ea__info\x1ea__ip\x1ea__l\x1ea__ld\x1ea__ldh\x1ea__lg\x1ea__lh\x1ea__lm\x1ea__ls\x1ea__lsh\x1ea__lt\x1ea__lth\x1ea__matrix\x1ea__mkdir\x1ea__ni\x1ea__nid\x1ea__nis\x1ea__nls\x1ea__nlsg\x1ea__no\x1ea__nu\x1ea__nud\x1ea__nup\x1ea__nus\x1ea__op\x1ea__pages\x1ea__proc\x1ea__pse\x1ea__q\x1ea__r\x1ea__s\x1ea__sc\x1ea__svn\x1ea__t\x1ea__ta\x1ea__test\x2dnet\x1ea__tr\x1ea__u\x1ea__up\x1ea__upall\x1ea__v\x1ea__vcl\x1ea__vv\x1ea__vvl\x1ea__vvn\x1ea__wget\x1ea__yarn\x1ea__z\x1ea__zi
|
||||
SETUVAR --export __ABBR_TIPS_VALUES:git\x1edocker\x1egenact\x20\x2ds\x204\x1ez\x1ebat\x1ebat\x20\x2d\x2dpaging\x3dalways\x1eclear\x1etty\x2dclock\x20\x2dsbc\x1escc\x20\x2e/\x1ez\x20\x26\x26\x20v\x1eduf\x1eyadm\x20enter\x20lazygit\x1edua\x20i\x1esudo\x20chmod\x20\x2bx\x1efzf\x1efastfetch\x1eonefetch\x1etgpt\x20\x2di\x1ecd\x20\x22\x24\x28git\x20rev\x2dparse\x20\x2d\x2dshow\x2dtoplevel\x29\x22\x1eyay\x20\x2dS\x20\x1etldr\x1eip\x20\x2dc\x20a\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1elazydocker\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2dD\x20\x2d\x2dgit\x1elazygit\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1el\x3deza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dtree\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2d\x2dtree\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eunimatrix\x20\x2ds\x2095\x1emkdir\x20\x2dp\x1enpm\x20install\x1enpm\x20install\x20\x2d\x2dsave\x2ddev\x1enpm\x20install\x20\x2d\x2dsave\x1enpm\x20list\x1enpm\x20list\x20\x2d\x2dglobal\x1efloaterm\x1enpm\x20uninstall\x1enpm\x20uninstall\x20\x2d\x2dsave\x2ddev\x1enpm\x20update\x1enpm\x20uninstall\x20\x2d\x2dsave\x1ecd\x20\x7e/Documents/Obsidian/obsidianVault\x1enavi\x1esysz\x1epacseek\x1eexit\x1emise\x20run\x1esudo\x1er\x3dsource\x20\x24XDG_CONFIG_HOME/fish/config\x2efish\x1esvn\x20\x2d\x2dconfig\x2ddir\x20\x5c\x5c\x5c\x5c\x22\x24XDG_CONFIG_HOME\x5c\x5c\x5c\x5c\x22/subversion\x1etmux\x1etmux\x20attach\x20\x2dt\x1ecommand\x20up\x1etrash\x1eyay\x20\x2dR\x20\x1eyay\x20\x2dSyu\x1etopgrade\x1envim\x1envim\x20\x2d\x2dclean\x1ebob\x1ebob\x20use\x20latest\x1ebob\x20use\x20nightly\x1ewget\x20\x2d\x2dhsts\x2dfile\x3d\x22\x24XDG_DATA_HOME/wget\x2dhsts\x22\x1eyarn\x20\x2d\x2duse\x2dyarnrc\x20\x22\x24XDG_CONFIG_HOME/yarn/config\x22\x1e__zoxide_z\x1e__zoxide_zi
|
||||
SETUVAR --export __ABBR_TIPS_KEYS:g\x1ed\x1ea__bruh\x1ea__c\x1ea__cat\x1ea__catp\x1ea__cl\x1ea__clock\x1ea__codeinfo\x1ea__cv\x1ea__disks\x1ea__dots\x1ea__dsize\x1ea__ex\x1ea__f\x1ea__fetch\x1ea__gfetch\x1ea__gpt\x1ea__gr\x1ea__i\x1ea__info\x1ea__ip\x1ea__l\x1ea__ld\x1ea__ldh\x1ea__lg\x1ea__lh\x1ea__lm\x1ea__ls\x1ea__lsh\x1ea__lt\x1ea__lth\x1ea__lzd\x1ea__matrix\x1ea__mkdir\x1ea__op\x1ea__pages\x1ea__proc\x1ea__pse\x1ea__q\x1ea__r\x1ea__s\x1ea__sc\x1ea__svn\x1ea__t\x1ea__ta\x1ea__test\x2dnet\x1ea__tr\x1ea__u\x1ea__up\x1ea__upall\x1ea__v\x1ea__vcl\x1ea__vv\x1ea__vvl\x1ea__vvn\x1ea__wget\x1ea__yarn\x1ea__z\x1ea__zi
|
||||
SETUVAR --export __ABBR_TIPS_VALUES:git\x1edocker\x1egenact\x20\x2ds\x204\x1ez\x1ebat\x1ebat\x20\x2d\x2dpaging\x3dalways\x1eclear\x1etty\x2dclock\x20\x2dsbc\x1escc\x20\x2e/\x1ez\x20\x26\x26\x20v\x1eduf\x1eyadm\x20enter\x20lazygit\x1edua\x20i\x1esudo\x20chmod\x20\x2bx\x1efzf\x1efastfetch\x1eonefetch\x1etgpt\x20\x2di\x1ecd\x20\x22\x24\x28git\x20rev\x2dparse\x20\x2d\x2dshow\x2dtoplevel\x29\x22\x1eyay\x20\x2dS\x20\x1etldr\x1eip\x20\x2dc\x20a\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1elazydocker\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2dD\x20\x2d\x2dgit\x1elazygit\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1el\x3deza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dtree\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2d\x2dtree\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1elazydocker\x1eunimatrix\x20\x2ds\x2095\x1emkdir\x20\x2dp\x1ecd\x20\x7e/Documents/Obsidian/obsidianVault\x1enavi\x1esysz\x1epacseek\x1eexit\x1emise\x20run\x1esudo\x1er\x3dsource\x20\x24XDG_CONFIG_HOME/fish/config\x2efish\x1esvn\x20\x2d\x2dconfig\x2ddir\x20\x5c\x5c\x5c\x5c\x22\x24XDG_CONFIG_HOME\x5c\x5c\x5c\x5c\x22/subversion\x1etmux\x1etmux\x20attach\x20\x2dt\x1ecommand\x20up\x1etrash\x1eyay\x20\x2dR\x20\x1eyay\x20\x2dSyu\x1etopgrade\x1envim\x1envim\x20\x2d\x2dclean\x1ebob\x1ebob\x20use\x20latest\x1ebob\x20use\x20nightly\x1ewget\x20\x2d\x2dhsts\x2dfile\x3d\x22\x24XDG_DATA_HOME/wget\x2dhsts\x22\x1eyarn\x20\x2d\x2duse\x2dyarnrc\x20\x22\x24XDG_CONFIG_HOME/yarn/config\x22\x1e__zoxide_z\x1e__zoxide_zi
|
||||
SETUVAR __fish_initialized:3800
|
||||
SETUVAR _fish_abbr_d:docker
|
||||
SETUVAR _fish_abbr_g:git
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
function cat --wraps=bat --description 'alias cat=bat'
|
||||
if type -f bat &>/dev/null
|
||||
if type -f bat &>/dev/null; and [ -t 1 ]
|
||||
bat $argv
|
||||
else
|
||||
cat $argv
|
||||
command cat $argv
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
function fish_greeting
|
||||
if type -q colorscript
|
||||
colorscript random
|
||||
end
|
||||
# if type -q colorscript
|
||||
# colorscript random
|
||||
# end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
function lg --wraps=lazygit --description 'alias lg=lazygit'
|
||||
if type -f eza &>/dev/null
|
||||
if type -f lazygit &>/dev/null
|
||||
lazygit $argv
|
||||
else
|
||||
missing_package lazygit
|
||||
|
|
7
.config/fish/functions/lzd.fish
Normal file
7
.config/fish/functions/lzd.fish
Normal file
|
@ -0,0 +1,7 @@
|
|||
function lzd --wraps=lazydocker --description 'alias lzd=lazydocker'
|
||||
if type -f lazydocker &>/dev/null
|
||||
lazydocker $argv
|
||||
else
|
||||
missing_package lazygit
|
||||
end
|
||||
end
|
|
@ -1,7 +0,0 @@
|
|||
function ni --wraps='npm install' --description 'alias ni=npm install'
|
||||
if type -f npm &>/dev/null
|
||||
npm install $argv
|
||||
else
|
||||
missing_package npm
|
||||
end
|
||||
end
|
|
@ -1,7 +0,0 @@
|
|||
function nid --wraps='npm install --save-dev' --description 'alias nid=npm install --save-dev'
|
||||
if type -f npm &>/dev/null
|
||||
npm install --save-dev $argv
|
||||
else
|
||||
missing_package npm
|
||||
end
|
||||
end
|
|
@ -1,7 +0,0 @@
|
|||
function nis --wraps='npm install --save' --description 'alias nis=npm install --save'
|
||||
if type -f npm &>/dev/null
|
||||
npm install --save $argv
|
||||
else
|
||||
missing_package npm
|
||||
end
|
||||
end
|
|
@ -1,7 +0,0 @@
|
|||
function nls --wraps='npm list' --description 'alias nls=npm list'
|
||||
if type -f npm &>/dev/null
|
||||
npm list $argv
|
||||
else
|
||||
missing_package npm
|
||||
end
|
||||
end
|
|
@ -1,7 +0,0 @@
|
|||
function nlsg --wraps='npm list --global' --description 'alias nlsg=npm list --global'
|
||||
if type -f npm &>/dev/null
|
||||
npm list --global $argv
|
||||
else
|
||||
missing_package npm
|
||||
end
|
||||
end
|
|
@ -1,3 +0,0 @@
|
|||
function no --wraps=floaterm --description 'alias no=floaterm'
|
||||
floaterm $argv
|
||||
end
|
|
@ -1,7 +0,0 @@
|
|||
function nu --wraps='npm uninstall' --description 'alias nu=npm uninstall'
|
||||
if type -f npm &>/dev/null
|
||||
npm uninstall $argv
|
||||
else
|
||||
missing_package npm
|
||||
end
|
||||
end
|
|
@ -1,7 +0,0 @@
|
|||
function nud --wraps='npm uninstall --save-dev' --description 'alias nud=npm uninstall --save-dev'
|
||||
if type -f npm &>/dev/null
|
||||
npm uninstall --save-dev $argv
|
||||
else
|
||||
missing_package npm
|
||||
end
|
||||
end
|
|
@ -1,7 +0,0 @@
|
|||
function nup --wraps='npm update' --description 'alias nup=npm update'
|
||||
if type -f npm &>/dev/null
|
||||
npm update $argv
|
||||
else
|
||||
missing_package npm
|
||||
end
|
||||
end
|
|
@ -1,7 +0,0 @@
|
|||
function nus --wraps='npm uninstall --save' --description 'alias nus=npm uninstall --save'
|
||||
if type -f npm &>/dev/null
|
||||
npm uninstall --save $argv
|
||||
else
|
||||
missing_package npm
|
||||
end
|
||||
end
|
|
@ -1,3 +1,3 @@
|
|||
function op --wraps='cd ~/Documents/Obsidian/obsidianVault' --description 'alias op=cd ~/Documents/Obsidian/obsidianVault'
|
||||
cd ~/documents/obsidian/personal-brain/ $argv
|
||||
tmuxp load -y notes-tasks
|
||||
end
|
||||
|
|
|
@ -70,9 +70,11 @@ set -xg GPG_TTY (tty)
|
|||
# FZF
|
||||
set -xg FZF_DEFAULT_COMMAND fd
|
||||
set -xg FZF_DEFAULT_OPTS "--height=90% --layout=reverse --info=inline --border rounded --margin=1 --padding=1 \
|
||||
--color=bg+:#363a4f,spinner:#f4dbd6,hl:#ed8796 \
|
||||
--color=fg:#cad3f5,header:#ed8796,info:#c6a0f6,pointer:#f4dbd6 \
|
||||
--color=marker:#f4dbd6,fg+:#cad3f5,prompt:#c6a0f6,hl+:#ed8796 \
|
||||
--color=bg+:#363A4F,bg:#24273A,spinner:#F4DBD6,hl:#ED8796 \
|
||||
--color=fg:#CAD3F5,header:#ED8796,info:#B7BDF8,pointer:#F4DBD6 \
|
||||
--color=marker:#B7BDF8,fg+:#CAD3F5,prompt:#B7BDF8,hl+:#ED8796 \
|
||||
--color=selected-bg:#494D64 \
|
||||
--color=border:#6E738D,label:#CAD3F5 \
|
||||
--bind 'ctrl-u:preview-half-page-up'
|
||||
--bind 'ctrl-d:preview-half-page-down'
|
||||
--bind 'ctrl-y:execute-silent(printf {} | cut -f 2- | wl-copy --trim-newline)'"
|
||||
|
@ -85,3 +87,4 @@ if type -q vivid
|
|||
set -xg LS_COLORS (vivid generate catppuccin-macchiato)
|
||||
end
|
||||
set -xg STARSHIP_LOG error
|
||||
set -xg ATAC_KEY_BINDINGS $XDG_CONFIG_HOME/atac/vim_key_bindings.toml
|
||||
|
|
BIN
.config/ghostty/.github/title.png
vendored
Normal file
BIN
.config/ghostty/.github/title.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
36
.config/ghostty/config
Normal file
36
.config/ghostty/config
Normal file
|
@ -0,0 +1,36 @@
|
|||
theme = catppuccin-macchiato
|
||||
background-blur-radius = 20
|
||||
|
||||
font-family = Maple Mono NF
|
||||
font-feature = +ss02
|
||||
font-feature = +ss03
|
||||
font-feature = +ss05
|
||||
font-feature = +ss07
|
||||
|
||||
font-size = 14
|
||||
adjust-cell-height = 28%
|
||||
cursor-style = block
|
||||
cursor-style-blink = true
|
||||
cursor-invert-fg-bg = false
|
||||
|
||||
gtk-single-instance = true
|
||||
window-theme = system
|
||||
gtk-titlebar = false
|
||||
gtk-wide-tabs = false
|
||||
gtk-adwaita = false
|
||||
|
||||
macos-titlebar-style = hidden
|
||||
macos-option-as-alt = true
|
||||
mouse-hide-while-typing = true
|
||||
|
||||
confirm-close-surface = false
|
||||
window-padding-x = 6
|
||||
window-padding-y = 5,5
|
||||
window-padding-balance = false
|
||||
|
||||
auto-update = check
|
||||
auto-update-channel = stable
|
||||
|
||||
# extras
|
||||
shell-integration-features = no-cursor
|
||||
copy-on-select = clipboard
|
|
@ -31,10 +31,11 @@
|
|||
excludesfile = ~/.config/git/ignore
|
||||
|
||||
[interactive]
|
||||
diffFilter = delta --color-only
|
||||
diffFilter = delta
|
||||
|
||||
[delta]
|
||||
features = catppuccin-macchiato
|
||||
decoration = true
|
||||
side-by-side = false
|
||||
true-color = always
|
||||
hyperlinks = true
|
||||
|
@ -51,6 +52,7 @@
|
|||
rebase = false
|
||||
|
||||
[commit]
|
||||
template = ~/.config/git/gitmessage
|
||||
gpgsign = true
|
||||
|
||||
[gpg]
|
||||
|
|
7
.config/git/gitmessage
Normal file
7
.config/git/gitmessage
Normal file
|
@ -0,0 +1,7 @@
|
|||
|
||||
# Section 1: type(scope):subject line (try to keep under 50 characters)
|
||||
# Types of Commits: feat, fix, docs, style, refactor, perf, test, chore, ci, build
|
||||
|
||||
# Section 2: Body (Try to keep under 72 characters)
|
||||
|
||||
# Section 3: Footer (Jira ID Issue)
|
|
@ -1,10 +1,10 @@
|
|||
[delta "catppuccin-latte"]
|
||||
blame-palette = "#eff1f5 #e6e9ef #dce0e8 #ccd0da #bcc0cc"
|
||||
commit-decoration-style = box ul
|
||||
commit-decoration-style = "#9ca0b0" bold box ul
|
||||
light = true
|
||||
file-decoration-style = "#4c4f69"
|
||||
file-decoration-style = "#9ca0b0"
|
||||
file-style = "#4c4f69"
|
||||
hunk-header-decoration-style = box ul
|
||||
hunk-header-decoration-style = "#9ca0b0" box ul
|
||||
hunk-header-file-style = bold
|
||||
hunk-header-line-number-style = bold "#6c6f85"
|
||||
hunk-header-style = file line-number syntax
|
||||
|
@ -31,11 +31,11 @@
|
|||
|
||||
[delta "catppuccin-frappe"]
|
||||
blame-palette = "#303446 #292c3c #232634 #414559 #51576d"
|
||||
commit-decoration-style = box ul
|
||||
commit-decoration-style = "#737994" bold box ul
|
||||
dark = true
|
||||
file-decoration-style = "#c6d0f5"
|
||||
file-decoration-style = "#737994"
|
||||
file-style = "#c6d0f5"
|
||||
hunk-header-decoration-style = box ul
|
||||
hunk-header-decoration-style = "#737994" box ul
|
||||
hunk-header-file-style = bold
|
||||
hunk-header-line-number-style = bold "#a5adce"
|
||||
hunk-header-style = file line-number syntax
|
||||
|
@ -62,11 +62,11 @@
|
|||
|
||||
[delta "catppuccin-macchiato"]
|
||||
blame-palette = "#24273a #1e2030 #181926 #363a4f #494d64"
|
||||
commit-decoration-style = box ul
|
||||
commit-decoration-style = "#6e738d" bold box ul
|
||||
dark = true
|
||||
file-decoration-style = "#cad3f5"
|
||||
file-decoration-style = "#6e738d"
|
||||
file-style = "#cad3f5"
|
||||
hunk-header-decoration-style = box ul
|
||||
hunk-header-decoration-style = "#6e738d" box ul
|
||||
hunk-header-file-style = bold
|
||||
hunk-header-line-number-style = bold "#a5adcb"
|
||||
hunk-header-style = file line-number syntax
|
||||
|
@ -93,11 +93,11 @@
|
|||
|
||||
[delta "catppuccin-mocha"]
|
||||
blame-palette = "#1e1e2e #181825 #11111b #313244 #45475a"
|
||||
commit-decoration-style = box ul
|
||||
commit-decoration-style = "#6c7086" bold box ul
|
||||
dark = true
|
||||
file-decoration-style = "#cdd6f4"
|
||||
file-decoration-style = "#6c7086"
|
||||
file-style = "#cdd6f4"
|
||||
hunk-header-decoration-style = box ul
|
||||
hunk-header-decoration-style = "#6c7086" box ul
|
||||
hunk-header-file-style = bold
|
||||
hunk-header-line-number-style = bold "#a6adc8"
|
||||
hunk-header-style = file line-number syntax
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
include "~/.gtkrc-2.0.mine"
|
||||
gtk-theme-name="Catppuccin-Macchiato-Standard-Lavender-Dark"
|
||||
gtk-icon-theme-name="Catppuccin-SE"
|
||||
gtk-font-name="JetBrainsMono Nerd Font 10"
|
||||
gtk-font-name="Maple Mono NF 10"
|
||||
gtk-cursor-theme-name="Catppuccin-Macchiato-Dark-Cursors"
|
||||
gtk-cursor-theme-size=24
|
||||
gtk-toolbar-style=GTK_TOOLBAR_BOTH
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
[Settings]
|
||||
gtk-theme-name=catppuccin-macchiato-lavender-standard+default
|
||||
gtk-icon-theme-name=Catppuccin-SE
|
||||
gtk-font-name=JetBrainsMono Nerd Font 10
|
||||
gtk-font-name=Maple Mono NF 10
|
||||
gtk-cursor-theme-name=catppuccin-macchiato-dark-cursors
|
||||
gtk-cursor-theme-size=24
|
||||
gtk-toolbar-style=GTK_TOOLBAR_BOTH
|
||||
|
|
|
@ -7,56 +7,49 @@ $launcher-scripts = ~/.config/rofi/scripts
|
|||
|
||||
# Applications
|
||||
bind = $mainMod, W, exec, $scripts/launch_app $browser
|
||||
bind = $mainMod, O, exec, $scripts/launch_app $notetaking-app
|
||||
bind = $mainMod SHIFT, O, exec, $scripts/launch_app $office-suite
|
||||
bind = $mainMod SHIFT, E,exec, $scripts/launch_app $alter-file-manager
|
||||
bind = $mainMod, E, exec, $scripts/launch_app $alter-file-manager
|
||||
bind = $mainMod, RETURN, exec, $scripts/launch_app $terminal
|
||||
bind = $mainMod, BACKSPACE, exec, $scripts/launch_app $editor
|
||||
bind = $mainMod SHIFT, BACKSPACE, exec, $scripts/launch_app $alter-editor
|
||||
|
||||
## Notifications Menu
|
||||
bind = $mainMod, N, exec, $notifications-menu-toggle
|
||||
bind = $mainMod SHIFT, R, exec, $notifications-menu-reload
|
||||
bind = $mainMod SHIFT, N, exec, $notifications-menu-read
|
||||
bind = $mainMod CTRL, N, exec, $notifications-menu-disturb
|
||||
|
||||
## Bar
|
||||
bind = $mainMod CTRL, R, exec, $bar-reload
|
||||
bind = $mainMod CTRL, T, exec, $bar-toggle
|
||||
bind = $mainMod, R, exec, $bar-reload
|
||||
bind = $mainMod, T, exec, $bar-toggle
|
||||
|
||||
# Pickers/Launchers
|
||||
bind = $mainMod, 23, exec, $launcher # Tab
|
||||
bind = $mainMod, TAB, exec, $launcher
|
||||
bind = $mainMod, ESCAPE, exec, $launcher-windows
|
||||
bind = $mainMod SHIFT, W, exec, $launcher-scripts/wallpaper/wallpaper
|
||||
bind = $mainMod, 61, exec, $launcher-scripts/keybindings/keybindings # /
|
||||
bind = $mainMod SHIFT, V, exec, $launcher-scripts/wireguard/wireguard_selection menu
|
||||
bind = $mainMod, ESCAPE, exec, $launcher-scripts/powermenu/powermenu
|
||||
bind = ALT, ESCAPE, exec, $launcher-scripts/powermenu/powermenu
|
||||
bind = $mainMod, Y, exec, $launcher-scripts/clipboard/clipboard
|
||||
bind = $mainMod CTRL, E, exec, $launcher-scripts/emoji/emoji
|
||||
bind = $mainMod, P, exec, rofi-rbw --action=copy --clear-after 10
|
||||
|
||||
## Screenshots
|
||||
bind = CTRL, ESCAPE, exec, $launcher-scripts/screenshot/screenshot
|
||||
bind = SHIFT, ESCAPE, exec, $launcher-scripts/screenshot/screenshot --freeze
|
||||
bind = CTRL, ESCAPE, exec, $launcher-scripts/screenshot/screenshot --freeze
|
||||
|
||||
# Pyprland
|
||||
## Scratchpad Module
|
||||
bind = $mainMod, V, exec, pypr toggle volume
|
||||
bind = $mainMod, 51, exec, pypr toggle terminal # Backslash
|
||||
bind = $mainMod, T, exec, pypr toggle btop
|
||||
bind = $mainMod SHIFT, T, exec, pypr toggle nvtop
|
||||
bind = $mainMod SHIFT, I, exec, pypr toggle gpt
|
||||
bind = $mainMod SHIFT, B, exec, pypr toggle bluetooth
|
||||
bind = $mainMod, E, exec, pypr toggle yazi
|
||||
bind = $mainMod, D, exec, pypr toggle dots
|
||||
bind = $mainMod, B, exec, pypr toggle bluetooth
|
||||
|
||||
## Other Modules
|
||||
bind = $mainMod, Z, exec, pypr zoom
|
||||
bind = $mainMod CTRL, W, exec, $scripts/random_wallpaper_hyprpaper
|
||||
bind = $mainMod CTRL, W, exec, $scripts/random_wallpaper
|
||||
|
||||
# Windows
|
||||
## Basic Operations
|
||||
bind = $mainMod, Q, killactive,
|
||||
bind = $mainMod, A, exec, $scripts/toggle_floating
|
||||
bind = $mainMod, P, pseudo
|
||||
bind = $mainMod SHIFT, P, pseudo
|
||||
bind = $mainMod, F, fullscreen, 0
|
||||
bind = ALT, TAB, focuscurrentorlast
|
||||
|
||||
## Mouse
|
||||
bindm = $mainMod, mouse:272, movewindow
|
||||
|
@ -92,7 +85,7 @@ bind = $mainMod, C, exec, hyprctl dispatch centerwindow 1
|
|||
## Group Control
|
||||
bind = $mainMod, G, togglegroup
|
||||
bind = $mainMod CTRL, G, lockactivegroup, toggle
|
||||
bind = ALT, TAB, changegroupactive
|
||||
bind = CTRL ALT, TAB, changegroupactive
|
||||
|
||||
## Resizing Windows
|
||||
bind = $mainMod, R, submap, resize
|
||||
|
@ -125,26 +118,26 @@ bind = $mainMod, 8, workspace, r~8
|
|||
bind = $mainMod, 9, workspace, r~9
|
||||
|
||||
## Moving Windows to other Workspaces
|
||||
bind = $mainMod SHIFT, 1, movetoworkspace, r~1
|
||||
bind = $mainMod SHIFT, 2, movetoworkspace, r~2
|
||||
bind = $mainMod SHIFT, 3, movetoworkspace, r~3
|
||||
bind = $mainMod SHIFT, 4, movetoworkspace, r~4
|
||||
bind = $mainMod SHIFT, 5, movetoworkspace, r~5
|
||||
bind = $mainMod SHIFT, 6, movetoworkspace, r~6
|
||||
bind = $mainMod SHIFT, 7, movetoworkspace, r~7
|
||||
bind = $mainMod SHIFT, 8, movetoworkspace, r~8
|
||||
bind = $mainMod SHIFT, 9, movetoworkspace, r~9
|
||||
bind = $mainMod SHIFT, 1, movetoworkspacesilent, r~1
|
||||
bind = $mainMod SHIFT, 2, movetoworkspacesilent, r~2
|
||||
bind = $mainMod SHIFT, 3, movetoworkspacesilent, r~3
|
||||
bind = $mainMod SHIFT, 4, movetoworkspacesilent, r~4
|
||||
bind = $mainMod SHIFT, 5, movetoworkspacesilent, r~5
|
||||
bind = $mainMod SHIFT, 6, movetoworkspacesilent, r~6
|
||||
bind = $mainMod SHIFT, 7, movetoworkspacesilent, r~7
|
||||
bind = $mainMod SHIFT, 8, movetoworkspacesilent, r~8
|
||||
bind = $mainMod SHIFT, 9, movetoworkspacesilent, r~9
|
||||
|
||||
## Moving Windows to other Workspaces (Silent)
|
||||
bind = $mainMod ALT, 1, movetoworkspacesilent, r~1
|
||||
bind = $mainMod ALT, 2, movetoworkspacesilent, r~2
|
||||
bind = $mainMod ALT, 3, movetoworkspacesilent, r~3
|
||||
bind = $mainMod ALT, 4, movetoworkspacesilent, r~4
|
||||
bind = $mainMod ALT, 5, movetoworkspacesilent, r~5
|
||||
bind = $mainMod ALT, 6, movetoworkspacesilent, r~6
|
||||
bind = $mainMod ALT, 7, movetoworkspacesilent, r~7
|
||||
bind = $mainMod ALT, 8, movetoworkspacesilent, r~8
|
||||
bind = $mainMod ALT, 9, movetoworkspacesilent, r~9
|
||||
bind = $mainMod ALT, 1, movetoworkspace, r~1
|
||||
bind = $mainMod ALT, 2, movetoworkspace, r~2
|
||||
bind = $mainMod ALT, 3, movetoworkspace, r~3
|
||||
bind = $mainMod ALT, 4, movetoworkspace, r~4
|
||||
bind = $mainMod ALT, 5, movetoworkspace, r~5
|
||||
bind = $mainMod ALT, 6, movetoworkspace, r~6
|
||||
bind = $mainMod ALT, 7, movetoworkspace, r~7
|
||||
bind = $mainMod ALT, 8, movetoworkspace, r~8
|
||||
bind = $mainMod ALT, 9, movetoworkspace, r~9
|
||||
|
||||
## Moving to other Workspace with Mouse Control
|
||||
bind = $mainMod, mouse_down, workspace, m-1
|
||||
|
@ -164,8 +157,6 @@ bind = $mainMod, 60, focusmonitor, +1 # Period
|
|||
|
||||
# Media
|
||||
## Audio
|
||||
bind = $mainMod CTRL, V, exec, ~/.local/bin/restartAudio
|
||||
|
||||
bindl = $mainMod CTRL, mouse:280, exec, swayosd-client --output-volume mute-toggle # Extra Up Button
|
||||
bindl = , XF86AudioMute, exec, swayosd-client --output-volume mute-toggle
|
||||
bindl = $mainMod CTRL, mouse:281, exec, swayosd-client --input-volume mute-toggle # Extra Down Button
|
||||
|
@ -183,9 +174,9 @@ bindl = $mainMod CTRL, mouse:276, exec, playerctl next # Extra Forward Button
|
|||
bindl = $mainMod CTRL, 21, exec, playerctl next # Plus Key
|
||||
|
||||
bindle = , XF86AudioRaiseVolume, exec, swayosd-client --output-volume +10
|
||||
bindle = $mainMod ALT, 21, exec, swayosd-client --output-volume raise # Minus key
|
||||
bindle = $mainMod, 21, exec, swayosd-client --output-volume raise # Minus key
|
||||
bindle = , XF86AudioLowerVolume, exec, swayosd-client --output-volume -10
|
||||
bindle = $mainMod ALT, 20, exec, swayosd-client --output-volume lower # Plus key
|
||||
bindle = $mainMod, 20, exec, swayosd-client --output-volume lower # Plus key
|
||||
|
||||
bindle = , XF86InputRaiseVolume, exec, swayosd-client --input-volume raise
|
||||
bindle = $mainMod SHIFT, 21, exec, swayosd-client --input-volume raise # Minus key
|
||||
|
@ -197,7 +188,7 @@ bindle = , XF86MonBrightnessUp, exec, swayosd-client --brightness +10
|
|||
bindle = , XF86MonBrightnessDown, exec, swayosd-client --brightness -10
|
||||
|
||||
# Other
|
||||
# Color picker
|
||||
## Color picker
|
||||
bind = $mainMod, INSERT, exec, $scripts/color_picker
|
||||
|
||||
## Disable anim, blur, etc
|
||||
|
@ -212,3 +203,9 @@ bind = $mainMod, F1, exec, xdg-open https://wiki.hyprland.org/
|
|||
## Zoom
|
||||
bind = $mainMod SHIFT, mouse:276, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor | awk '/^float.*/ {print $2 + 0.5}')
|
||||
bind = $mainMod SHIFT, mouse:275, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor | awk '/^float.*/ {print $2 - 0.5}')
|
||||
|
||||
## VM Keys
|
||||
bind = $mainMod, 119, submap, passthru # Supr
|
||||
submap = passthru
|
||||
bind = $mainMod SHIFT, 119, submap, reset # Supr
|
||||
submap = reset
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# Define your programs
|
||||
$launcher = rofi -show drun
|
||||
$launcher-windows = rofi -show window
|
||||
|
||||
$bar = waybar
|
||||
$bar-toggle = killall -SIGUSR1 $bar
|
||||
|
@ -8,13 +9,14 @@ $bar-reload = killall $bar; $bar
|
|||
$notifications-menu = swaync-client
|
||||
$notifications-menu-read = $notifications-menu -C
|
||||
$notifications-menu-toggle = $notifications-menu -t
|
||||
$notifications-menu-disturb = $notifications-menu -d
|
||||
$notifications-menu-reload = $notifications-menu -R && $notifications-menu -rs
|
||||
|
||||
$browser = zen-browser
|
||||
$browser = librewolf
|
||||
$notetaking-app = obsidian
|
||||
$terminal = kitty
|
||||
$terminal = ghostty --gtk-single-instance=true
|
||||
$office-suite = libreoffice
|
||||
$editor = $terminal nvim
|
||||
$editor = $terminal vim
|
||||
$alter-editor = vscodium
|
||||
$file-manager = yazi
|
||||
$file-manager = ranger
|
||||
$alter-file-manager = nemo
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
input {
|
||||
kb_layout = us, es
|
||||
kb_options = compose:rctrl, level3:ralt_switch, grp:win_space_toggle
|
||||
kb_layout=us,rs,rs,de
|
||||
kb_variant=,latinyz,yz,qwerty
|
||||
kb_options=caps:swapescape,grp:alt_shift_toggle
|
||||
|
||||
follow_mouse = 1
|
||||
numlock_by_default = true
|
||||
repeat_rate=50
|
||||
repeat_delay=300
|
||||
|
||||
touchpad {
|
||||
natural_scroll = yes
|
||||
|
@ -11,3 +14,7 @@ input {
|
|||
scroll_factor = 1
|
||||
}
|
||||
}
|
||||
|
||||
cursor {
|
||||
inactive_timeout = 3
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ misc {
|
|||
animate_manual_resizes = true
|
||||
animate_mouse_windowdragging = false
|
||||
enable_swallow = true
|
||||
font_family = JetBrainsMono Nerd Font
|
||||
font_family = Maple Mono NF
|
||||
}
|
||||
|
||||
binds {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Main Monitor
|
||||
monitor=DP-1, 2560x1080@74.99, 0x1080,1.0
|
||||
monitor=eDP-1, preferred, auto, 1
|
||||
|
||||
# Second Monitor
|
||||
monitor=DP-3, 2560x1080@74.99, 0x0,1.0
|
||||
|
|
|
@ -1,32 +1,32 @@
|
|||
# Main Monitor
|
||||
workspace = 1, monitor:DP-1, default:true
|
||||
workspace = 2, monitor:DP-1
|
||||
workspace = 3, monitor:DP-1
|
||||
workspace = 4, monitor:DP-1
|
||||
workspace = 5, monitor:DP-1
|
||||
workspace = 6, monitor:DP-1
|
||||
workspace = 7, monitor:DP-1, rounding:false, decorate:false, gapsin:0, gapsout:0, border:false, decorate:false # Gaming Workspace
|
||||
workspace = 8, monitor:DP-1
|
||||
workspace = 9, monitor:DP-1
|
||||
workspace = 1, monitor:eDP-1, default:true
|
||||
workspace = 2, monitor:eDP-1
|
||||
workspace = 3, monitor:eDP-1
|
||||
workspace = 4, monitor:eDP-1
|
||||
workspace = 5, monitor:eDP-1
|
||||
workspace = 6, monitor:eDP-1
|
||||
workspace = 7, monitor:eDP-1, rounding:false, decorate:false, gapsin:0, gapsout:0, border:false, decorate:false # Gaming Workspace
|
||||
workspace = 8, monitor:eDP-1
|
||||
workspace = 9, monitor:eDP-1
|
||||
|
||||
# Second Monitor
|
||||
workspace = 10, monitor:DP-3, default:true
|
||||
workspace = 11, monitor:DP-3
|
||||
workspace = 12, monitor:DP-3
|
||||
workspace = 13, monitor:DP-3
|
||||
workspace = 14, monitor:DP-3
|
||||
workspace = 15, monitor:DP-3
|
||||
workspace = 16, monitor:DP-3
|
||||
workspace = 17, monitor:DP-3
|
||||
workspace = 18, monitor:DP-3
|
||||
workspace = 10, monitor:HDMI-A-1, default:true
|
||||
workspace = 11, monitor:HDMI-A-1
|
||||
workspace = 12, monitor:HDMI-A-1
|
||||
workspace = 13, monitor:HDMI-A-1
|
||||
workspace = 14, monitor:HDMI-A-1
|
||||
workspace = 15, monitor:HDMI-A-1
|
||||
workspace = 16, monitor:HDMI-A-1
|
||||
workspace = 17, monitor:HDMI-A-1
|
||||
workspace = 18, monitor:HDMI-A-1
|
||||
|
||||
# Third Monitor
|
||||
workspace = 19, monitor:HDMI-A-1, default:true
|
||||
workspace = 20, monitor:HDMI-A-1
|
||||
workspace = 21, monitor:HDMI-A-1
|
||||
workspace = 22, monitor:HDMI-A-1
|
||||
workspace = 23, monitor:HDMI-A-1
|
||||
workspace = 24, monitor:HDMI-A-1
|
||||
workspace = 25, monitor:HDMI-A-1
|
||||
workspace = 26, monitor:HDMI-A-1
|
||||
workspace = 27, monitor:HDMI-A-1
|
||||
workspace = 19, monitor:HDMI-A-2, default:true
|
||||
workspace = 20, monitor:HDMI-A-2
|
||||
workspace = 21, monitor:HDMI-A-2
|
||||
workspace = 22, monitor:HDMI-A-2
|
||||
workspace = 23, monitor:HDMI-A-2
|
||||
workspace = 24, monitor:HDMI-A-2
|
||||
workspace = 25, monitor:HDMI-A-2
|
||||
workspace = 26, monitor:HDMI-A-2
|
||||
workspace = 27, monitor:HDMI-A-2
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
source = ./theme/colors.conf
|
||||
|
||||
$font = JetBrains Mono Nerd Font 10
|
||||
$font = Maple Mono NF 10
|
||||
|
||||
general {
|
||||
hide_cursor = true
|
||||
|
|
2
.config/hypr/hyprpaper.conf
Normal file
2
.config/hypr/hyprpaper.conf
Normal file
|
@ -0,0 +1,2 @@
|
|||
# If you want a wallpaper that doesn't change everytime the system reloads
|
||||
# preload = /home/matt/.config/hypr/theme/walls/city.png
|
|
@ -5,7 +5,7 @@ plugin {
|
|||
hyprbars {
|
||||
bar_height = 20
|
||||
bar_color = $mantle
|
||||
bar_text_font = "JetBrainsMono Nerd Font"
|
||||
bar_text_font = "Maple Mono NF"
|
||||
bar_part_of_window = true
|
||||
bar_precedence_over_border = false
|
||||
|
||||
|
|
|
@ -15,4 +15,4 @@ plugin {
|
|||
}
|
||||
|
||||
# Keybinds
|
||||
bind = ALT, ESCAPE, hyprexpo:expo, toggle
|
||||
bind = SHIFT, ESCAPE, hyprexpo:expo, toggle
|
||||
|
|
|
@ -8,7 +8,6 @@ plugin {
|
|||
gap_size = 15
|
||||
bg_color = $base
|
||||
border_size = 3
|
||||
exit_behavior = active
|
||||
|
||||
gaps {
|
||||
rows = 3
|
||||
|
@ -23,4 +22,4 @@ plugin {
|
|||
}
|
||||
|
||||
# Keybinds
|
||||
bind = ALT, ESCAPE, hyprtasking:toggle, cursor
|
||||
bind = SHIFT, ESCAPE, hyprtasking:toggle, cursor
|
||||
|
|
|
@ -2,50 +2,15 @@
|
|||
plugins = ["scratchpads", "magnify"]
|
||||
|
||||
[scratchpads.volume]
|
||||
command = "pavucontrol"
|
||||
unfocus = "hide"
|
||||
command = "ghostty --class=com.ghostty-volume -e wiremix"
|
||||
position = "1% 8%"
|
||||
lazy = true
|
||||
force_monitor = "DP-1"
|
||||
|
||||
[scratchpads.terminal]
|
||||
command = "kitty --class scratchpad-large"
|
||||
lazy = true
|
||||
|
||||
[scratchpads.yazi]
|
||||
command = "kitty --class scratchpad-large fish -c yazi"
|
||||
unfocus = "hide"
|
||||
hysteresis = 0.1
|
||||
lazy = true
|
||||
|
||||
[scratchpads.gpt]
|
||||
command = "kitty --class scratchpad-large tgpt -m"
|
||||
lazy = true
|
||||
|
||||
[scratchpads.dots]
|
||||
command = "kitty --class scratchpad-large yadm enter lazygit"
|
||||
lazy = true
|
||||
|
||||
[scratchpads.btop]
|
||||
command = "kitty --class scratchpad-large btop"
|
||||
lazy = true
|
||||
|
||||
[scratchpads.nvtop]
|
||||
command = "kitty --class scratchpad-large nvtop"
|
||||
lazy = true
|
||||
|
||||
[scratchpads.topgrade-system]
|
||||
command = "kitty --class scratchpad-large fish -c 'up'"
|
||||
lazy = true
|
||||
|
||||
[scratchpads.topgrade-all]
|
||||
command = "kitty --class scratchpad-large fish -c 'upall'"
|
||||
lazy = true
|
||||
|
||||
[scratchpads.bluetooth]
|
||||
command = "overskride"
|
||||
animation = "fromRight"
|
||||
margin = 20
|
||||
command = "ghostty --class=com.ghostty-volume -e bluetui"
|
||||
position = "1% 8%"
|
||||
unfocus = "hide"
|
||||
lazy = true
|
||||
|
||||
[scratchpads.wifi]
|
||||
|
@ -59,3 +24,10 @@ command = "nm-connection-editor"
|
|||
animation = "fromRight"
|
||||
margin = 20
|
||||
lazy = true
|
||||
|
||||
[wallpapers]
|
||||
path = "~/.config/hypr/theme/walls/"
|
||||
interval = 1440 # change every day
|
||||
command = "swww img --transition-bezier 0.5,1.19,.8,.4 --transition-type wipe --transition-duration 2 --transition-fps 75 \"[file]\" && notify-send 'Wallpaper Changed' -i \"[file]\" --app-name=Wallpaper"
|
||||
clear_command = "swww clear"
|
||||
extensions = ["jpg", "png", "gif", "jpeg"]
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Apps
|
||||
spotify &
|
||||
vesktop &
|
||||
thunderbird &
|
||||
obsidian &
|
||||
feishin &
|
||||
|
||||
# Terminal Apps
|
||||
kitty --class btop btop &
|
||||
kitty --class nvtop nvtop &
|
||||
kitty --class radeontop radeontop &
|
||||
ghostty --gtk-single-instance=true --quit-after-last-window-closed=false --initial-window=false &
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Wallpaper engine
|
||||
# swww-daemon --format xrgb &
|
||||
hyprpaper &
|
||||
|
||||
# Automounter for removable media
|
||||
udiskie &
|
||||
|
||||
|
@ -15,9 +19,6 @@ swaync &
|
|||
# OSD Window
|
||||
swayosd-server &
|
||||
|
||||
# Notify about devices connecting and disconnecting
|
||||
devify &
|
||||
|
||||
# Idle daemon to screen lock
|
||||
hypridle &
|
||||
|
||||
|
@ -27,14 +28,17 @@ wl-paste --watch cliphist store &
|
|||
# Polkit authentication
|
||||
/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &
|
||||
|
||||
# Audio
|
||||
pipewire &
|
||||
wireplumber &
|
||||
pipewire-pulse &
|
||||
easyeffects --gapplication-service &
|
||||
|
||||
libinput-gestures &
|
||||
|
||||
# Random Wallpaper
|
||||
"$HOME"/.config/hypr/scripts/random_wallpaper &
|
||||
|
||||
# Screen sharing and portals
|
||||
"$HOME"/.config/hypr/scripts/portal &
|
||||
# xwaylandvideobridge & # Off when using Vesktop instead of Discord
|
||||
|
||||
# Audio
|
||||
easyeffects --gapplication-service &
|
||||
|
||||
# Wallpaper Backend
|
||||
hyprpaper &
|
||||
# swww-daemon --format xrgb &
|
||||
"$HOME"/.config/hypr/scripts/random_wallpaper &
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
animations {
|
||||
enabled = 1
|
||||
enabled = false
|
||||
|
||||
bezier = default, 0.05, 0.9, 0.1, 1.02
|
||||
bezier = wind, 0.05, 0.9, 0.1, 1.02
|
||||
|
@ -37,5 +37,5 @@ animations {
|
|||
animation = fadeLayers, 1, 4, default
|
||||
animation = workspaces, 1, 3.25, easeOutQuint, slide
|
||||
animation = border, 1, 1, liner
|
||||
animation = borderangle, 1, 30, liner, loop
|
||||
# animation = borderangle, 1, 30, liner, loop
|
||||
}
|
||||
|
|
|
@ -2,18 +2,18 @@ source = ./colors.conf
|
|||
|
||||
general {
|
||||
border_size = 2
|
||||
col.inactive_border = rgba($lavenderAlpha69)
|
||||
col.active_border = rgba($textAlphaee) rgba($lavenderAlpha69) rgba($lavenderAlpha69) rgba($textAlphaee) 45deg
|
||||
col.active_border = rgba($lavenderAlpha80)
|
||||
col.inactive_border = rgba($textAlpha40)
|
||||
|
||||
gaps_in = 10
|
||||
gaps_out = 15
|
||||
gaps_in = 5
|
||||
gaps_out = 10
|
||||
}
|
||||
|
||||
decoration {
|
||||
rounding = 7
|
||||
rounding = 4
|
||||
|
||||
active_opacity = 0.92
|
||||
inactive_opacity = 0.90
|
||||
active_opacity = 1
|
||||
inactive_opacity = 1
|
||||
|
||||
blur {
|
||||
enabled = yes
|
||||
|
@ -27,12 +27,12 @@ decoration {
|
|||
}
|
||||
|
||||
shadow {
|
||||
enabled = yes
|
||||
range = 30
|
||||
enabled = false
|
||||
range = 10
|
||||
scale = 2
|
||||
render_power = 5
|
||||
color = $crust
|
||||
color_inactive = $surface0
|
||||
color = $surface0
|
||||
color_inactive = $crust
|
||||
}
|
||||
|
||||
dim_inactive = false
|
||||
|
@ -55,7 +55,7 @@ group {
|
|||
col.inactive = rgba($subtext1Alpha99)
|
||||
col.locked_active = rgba($maroonAlphaCC)
|
||||
col.locked_inactive = rgba($subtext1Alpha99)
|
||||
font_family = JetBrainsMono Nerd Font
|
||||
font_family = Maple Mono NF
|
||||
font_size = 15
|
||||
text_color = $crust
|
||||
height = 20
|
||||
|
|
|
@ -1,9 +1,4 @@
|
|||
# Base Rules
|
||||
$center-float-large = class:^(center-float-large)$|^(.*qimgv.*)$|^(.*mpv.*)$
|
||||
windowrule = float, $center-float-large
|
||||
windowrule = size 70% 70%, $center-float-large
|
||||
windowrule = center 1, $center-float-large
|
||||
|
||||
$center-float = class:^(center-float)$
|
||||
$center-float-title = title:^(.*Open Folder.*)$|^(.*Open File.*)$|^(.*Save File.*)$|^(.*Save Folder.*)$|^(.*Save Image.*)$|^(.*Save As.*)$|^(.*Open As.*)$
|
||||
windowrule = float, $center-float
|
||||
|
@ -24,6 +19,17 @@ windowrule = float, xfce-polkit|wleave|title:branchdialog|nwg-look|nm-connection
|
|||
|
||||
|
||||
# Workspace Rules
|
||||
## Smart Gaps
|
||||
# workspace = w[t1], gapsout:0, gapsin:0
|
||||
# workspace = w[tg1], gapsout:0, gapsin:0
|
||||
# workspace = f[1], gapsout:0, gapsin:0
|
||||
# windowrulev2 = bordersize 0, floating:0, onworkspace:w[t1]
|
||||
# windowrulev2 = rounding 0, floating:0, onworkspace:w[t1]
|
||||
# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tg1]
|
||||
# windowrulev2 = rounding 0, floating:0, onworkspace:w[tg1]
|
||||
# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
|
||||
# windowrulev2 = rounding 0, floating:0, onworkspace:f[1]
|
||||
|
||||
## System
|
||||
windowrule = workspace 8, class:^(.*virt-manager.*)$|(.*PikaBackup.*)$|(.*VirtualBox Manager.*)$|(.*Vmware*)$
|
||||
windowrule = workspace 17, class:^(.*GParted.*)$|(.*clamtk.*)$|(.*gnome.Logs.*)$
|
||||
|
@ -38,11 +44,12 @@ windowrule = workspace 6, class:^(.*kdenlive.*)$
|
|||
windowrule = workspace 21 silent, class:^(.*thunderbird.*)$
|
||||
windowrule = workspace 22 silent, class:^(.*btop.*)$
|
||||
windowrule = workspace 22 silent, class:^(.*nvtop.*)$
|
||||
windowrule = workspace 19 silent, class:^(.*[Ss]potify.*)$|(.*tidal-hifi.*)$|(.*You[Tt]ube Music.*)$
|
||||
windowrule = workspace 20 silent, class:^(.*discord.*)$|(.*vesktop.*)$|(.*WebCord.*)$
|
||||
windowrule = workspace 22 silent, class:^(.*radeontop.*)$
|
||||
windowrule = workspace 19 silent, class:^(.*[Ss]potify.*)$|(.*tidal-hifi.*)$|(.*You[Tt]ube Music.*)$|^(.*feishin.*)$
|
||||
windowrule = workspace 20 silent, class:^(.*discord.*)$|(.*vesktop.*)$|(.*WebCord.*)$|(.*legcord.*)$
|
||||
windowrule = workspace 15, class:^(.*obsproject.*)$
|
||||
windowrule = workspace 14, class:^(.*easyeffects.*)$|^(.*qpwgraph.*)$|(.*Helvum.*)$
|
||||
windowrule = workspace 5, class:^(.*vital.*)$|(.*fl64.*)$|(.*nicotine_plus.*)$|(.*Picard*)$
|
||||
windowrule = workspace 14, class:^(.*easyeffects.*)$|^(.*qpwgraph.*)$|(.*Helvum.*)$|(.*nicotine_plus.*)$|(.*Picard*)$
|
||||
windowrule = workspace 5, class:^(.*vital.*)$|(.*fl64.*)$
|
||||
windowrule = workspace 5, title:^(.*FL Studio.*)$
|
||||
windowrule = workspace 4, class:^(.*pinta.*)$|(.*krita.*)$|(.*blender.*)$|(.*Upscayl.*)$
|
||||
|
||||
|
@ -78,7 +85,7 @@ windowrule = size 30% 40%, $scratchpad-mini
|
|||
windowrule = animation slide, $scratchpad-mini
|
||||
windowrule = workspace special: scratchpad-mini silent, $scratchpad-mini
|
||||
|
||||
$sideScratchpad = class:^(.*pavucontrol.*)$|(.*blueman-manager.*)$
|
||||
$sideScratchpad = class:^(.*com.ghostty-bluetooth.*)$|(.*com.ghostty-volume.*)$
|
||||
windowrule = workspace special:scratchpad silent, $sideScratchpad
|
||||
windowrule = size 30% 90%, $sideScratchpad
|
||||
windowrule = float, $sideScratchpad
|
||||
|
@ -93,20 +100,15 @@ windowrule = noblur, $videobridge
|
|||
windowrule = noinitialfocus, $videobridge
|
||||
windowrule = maxsize 1 1, $videobridge
|
||||
|
||||
$zathura = class:^(.*zathura.*)$
|
||||
windowrule = float, $zathura
|
||||
windowrule = size 35% 90%, $zathura
|
||||
windowrule = center 1, $zathura
|
||||
|
||||
$scrcpy = class:^(.*scrcpy.*)$
|
||||
windowrule = center 1, $scrcpy
|
||||
windowrule = float, $scrcpy
|
||||
|
||||
windowrule = noinitialfocus, class:(.*[Ss]potify.*)|(.*tidal-hifi.*)$|(.*You[Tt]ube Music.*)
|
||||
windowrule = noinitialfocus, class:(.*[Ss]potify.*)|(.*tidal-hifi.*)$|(.*You[Tt]ube Music.*)|^(.*feishin.*)$
|
||||
|
||||
windowrule = idleinhibit always, class:^(.*steam_app.*)$
|
||||
windowrule = idleinhibit focus, class:^(.*[Ss]potify.*)$|^(.*feishin.*)$
|
||||
windowrule = idleinhibit fullscreen, class:^(.*celluloid.*)$|^(.*mpv.*)$|^(.*vlc.*)$
|
||||
windowrule = idleinhibit fullscreen, class:^(.*[Ss]potify.*)$
|
||||
windowrule = idleinhibit fullscreen, class:^(.*LibreWolf.*)$|^(.*floorp.*)$|^(.*Brave.*)$|^(.*firefox.*)$|^(.*chromium.*)$|^(.*zen-alpha.*)$
|
||||
|
||||
windowrule = immediate, class:^(.*steam_app.*)$
|
||||
|
@ -121,6 +123,7 @@ layerrule = blur, waybar
|
|||
layerrule = ignorezero, waybar
|
||||
|
||||
layerrule = ignorezero, swaync-notification-window
|
||||
layerrule = ignorezero, swaync-control-center
|
||||
layerrule = animation slide, swaync-notification-window
|
||||
layerrule = animation slide, swaync-control-center
|
||||
|
||||
|
|
BIN
.config/hypr/theme/walls/car-3.png
Normal file
BIN
.config/hypr/theme/walls/car-3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.3 MiB |
|
@ -1,10 +1,10 @@
|
|||
# Font
|
||||
|
||||
font_family JetBrainsMono Nerd Font
|
||||
bold_font JetBrainsMono NF Bold
|
||||
italic_font JetBrainsMono NF Italic
|
||||
bold_italic_font JetBrainsMono NF Medium Italic
|
||||
font_size 10.5
|
||||
font_family JetBrains Maple Mono
|
||||
bold_font Maple Mono NF Bold
|
||||
italic_font Maple Mono NF Italic
|
||||
bold_italic_font Maple Mono NF Medium Italic
|
||||
font_size 11.5
|
||||
modify_font cell_height 122%
|
||||
|
||||
# Theme
|
||||
|
|
|
@ -53,8 +53,8 @@ commandTemplates:
|
|||
checkDockerComposeConfig: "{{ .DockerCompose }} config --quiet"
|
||||
serviceTop: "{{ .DockerCompose }} top {{ .Service.Name }}"
|
||||
oS:
|
||||
openCommand: open {{filename}}
|
||||
openLinkCommand: open {{link}}
|
||||
openCommand: $EDITOR {{filename}}
|
||||
openLinkCommand: xdg-open {{link}}
|
||||
stats:
|
||||
graphs:
|
||||
- caption: CPU (%)
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
gui:
|
||||
scrollHeight: 10 # how many lines you scroll by
|
||||
scrollPastBottom: false # enable scrolling past the bottom
|
||||
sidePanelWidth: 0.25 # number from 0 to 1
|
||||
sidePanelWidth: 0.22 # number from 0 to 1
|
||||
expandFocusedSidePanel: true
|
||||
theme:
|
||||
activeBorderColor:
|
||||
|
@ -33,24 +33,28 @@ gui:
|
|||
"feature": "#a6da95"
|
||||
showBottomLine: false # for hiding the bottom information line (unless it has important information to tell you)
|
||||
nerdFontsVersion: "3" # nerd fonts version to use ("2" or "3"); empty means don't show nerd font icons
|
||||
showNumstatInFilesView: true
|
||||
commandLogSize: 5
|
||||
showDivergenceFromBaseBranch: "arrowAndNumber"
|
||||
filterMode: "fuzzy"
|
||||
showPanelJumps: false
|
||||
skipRewordInEditorWarning: false # for skipping the confirmation before launching the reword editor
|
||||
skipRewordInEditorWarning: true # for skipping the confirmation before launching the reword editor
|
||||
border: "rounded" # one of 'single' | 'double' | 'rounded' | 'hidden'
|
||||
statusPanelView: "dashboard"
|
||||
statusPanelView: allBranchesLog
|
||||
git:
|
||||
paging:
|
||||
colorArg: always
|
||||
pager: delta --paging=never --hyperlinks-file-link-format="lazygit-edit://{path}:{line}"
|
||||
branchLogCmd: "git log --graph --color=always --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)' {{branchName}} --"
|
||||
allBranchesLogCmd: "git log --graph --all --color=always --abbrev-commit --date-relative --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'"
|
||||
pager: delta --paging=never --dark --hyperlinks-file-link-format="lazygit-edit://{path}:{line}"
|
||||
branchLogCmd: "git log --graph --color=always --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)' {{branchName}} --"
|
||||
parseEmoji: true
|
||||
allBranchesLogCmds:
|
||||
- git log --graph --all --color=always --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
|
||||
os:
|
||||
edit: '[ -z "$NVIM" ] && (nvim -- {{filename}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote {{filename}})'
|
||||
editPreset: "nvim-remote"
|
||||
# edit: '[ -z "$NVIM" ] && (nvim -- {{filename}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote {{filename}})'
|
||||
disableStartupPopups: true
|
||||
notARepository: "skip" # one of: 'prompt' | 'create' | 'skip' | 'quit'
|
||||
promptToReturnFromSubprocess: false
|
||||
keybinding:
|
||||
universal:
|
||||
quit: "q"
|
||||
|
@ -116,10 +120,10 @@ keybinding:
|
|||
checkForUpdate: "u"
|
||||
recentRepos: "<enter>"
|
||||
files:
|
||||
commitChanges: "c"
|
||||
commitChanges: "<c-c>"
|
||||
commitChangesWithoutHook: "w" # commit changes without pre-commit hook
|
||||
amendLastCommit: "A"
|
||||
commitChangesWithEditor: "C"
|
||||
commitChangesWithEditor: "c"
|
||||
ignoreFile: "i"
|
||||
refreshFiles: "r"
|
||||
stashAllChanges: "s"
|
||||
|
@ -146,8 +150,8 @@ keybinding:
|
|||
fetchRemote: "f"
|
||||
commits:
|
||||
squashDown: "s"
|
||||
renameCommit: "r"
|
||||
renameCommitWithEditor: "R"
|
||||
renameCommit: "R"
|
||||
renameCommitWithEditor: "r"
|
||||
viewResetOptions: "g"
|
||||
markCommitAsFixup: "f"
|
||||
createFixupCommit: "F" # create fixup commit for this commit
|
||||
|
@ -176,9 +180,134 @@ keybinding:
|
|||
update: "u"
|
||||
bulkMenu: "b"
|
||||
customCommands:
|
||||
- key: "<c-n>"
|
||||
description: "New branch with prefix"
|
||||
prompts:
|
||||
- type: "menu"
|
||||
title: "Creating new branch. What kind of branch is it?"
|
||||
options:
|
||||
- name: "feature"
|
||||
value: "feat"
|
||||
- name: "hotfix"
|
||||
value: "hotfix"
|
||||
- name: "fix/bugfix"
|
||||
value: "fix"
|
||||
- name: "chore"
|
||||
value: "chore"
|
||||
- name: "experiment"
|
||||
value: "experiment"
|
||||
- type: "input"
|
||||
title: "What is the new branch name?"
|
||||
initialValue: ""
|
||||
command: "git checkout -b {{index .PromptResponses 0}}/{{index .PromptResponses 1}}"
|
||||
context: "localBranches"
|
||||
loadingText: "Creating branch"
|
||||
- key: "<c-r>"
|
||||
description: "Create pull request on GitHub"
|
||||
context: files, localBranches
|
||||
prompts:
|
||||
- type: "input"
|
||||
title: "Pull Request Title"
|
||||
key: "title"
|
||||
initialValue: ""
|
||||
- type: "input"
|
||||
title: "Base Branch (leave empty for default branch)"
|
||||
key: "base"
|
||||
initialValue: ""
|
||||
- type: "menu"
|
||||
title: "Create as draft PR?"
|
||||
key: "draft"
|
||||
options:
|
||||
- name: "No"
|
||||
value: ""
|
||||
- name: "Yes"
|
||||
value: "--draft"
|
||||
- type: "menu"
|
||||
title: "Add Reviewers"
|
||||
key: "reviewers"
|
||||
options:
|
||||
- name: "CNS"
|
||||
value: "--reviewer peterbornerup,farhadh,benjaminbruun"
|
||||
- name: "None"
|
||||
value: ""
|
||||
command: >
|
||||
gh pr create --assignee @me --title "{{.Form.title}}" --fill {{ if ne .Form.base "" }}--base "{{.Form.base}}"{{ end }} {{.Form.draft}} {{ if eq .Form.reviewers "other" }}--reviewer "{{.Form.customReviewers}}"{{ else }}{{.Form.reviewers}}{{ end }}
|
||||
|
||||
loadingText: "Creating pull request on GitHub"
|
||||
- key: "o"
|
||||
command: "gh repo view --web"
|
||||
context: "localBranches"
|
||||
description: "View Repo on GitHub"
|
||||
loadingText: "Opening GitHub - Repository ..."
|
||||
- key: "O"
|
||||
command: "gh pr view --web"
|
||||
context: "localBranches"
|
||||
description: "View PR on GitHub"
|
||||
loadingText: "Opening GitHub - Pull request ..."
|
||||
- key: "C"
|
||||
command: "git cz"
|
||||
description: "commit with commitizen"
|
||||
context: "global"
|
||||
description: "Create new conventional commit"
|
||||
prompts:
|
||||
- type: "menu"
|
||||
key: "Type"
|
||||
title: "Type of change"
|
||||
options:
|
||||
- name: "feat"
|
||||
description: "A new feature"
|
||||
value: "feat"
|
||||
- name: "fix"
|
||||
description: "A bug fix"
|
||||
value: "fix"
|
||||
- name: "chore"
|
||||
description: "Other changes that don't modify src or test files"
|
||||
value: "chore"
|
||||
- name: "build"
|
||||
description: "Changes that affect the build system or external dependencies"
|
||||
value: "build"
|
||||
- name: "ci"
|
||||
description: "Changes to CI configuration files and scripts"
|
||||
value: "ci"
|
||||
- name: "docs"
|
||||
description: "Documentation only changes"
|
||||
value: "docs"
|
||||
- name: "perf"
|
||||
description: "A code change that improves performance"
|
||||
value: "perf"
|
||||
- name: "refactor"
|
||||
description: "A code change that neither fixes a bug nor adds a feature"
|
||||
value: "refactor"
|
||||
- name: "revert"
|
||||
description: "Reverts a previous commit"
|
||||
value: "revert"
|
||||
- name: "style"
|
||||
description: "Changes that do not affect the meaning of the code"
|
||||
value: "style"
|
||||
- name: "test"
|
||||
description: "Adding missing tests or correcting existing tests"
|
||||
value: "test"
|
||||
- type: "input"
|
||||
title: "Scope"
|
||||
key: "Scope"
|
||||
initialValue: ""
|
||||
- type: "menu"
|
||||
key: "Breaking"
|
||||
title: "Breaking change"
|
||||
options:
|
||||
- name: "no"
|
||||
value: ""
|
||||
- name: "yes"
|
||||
value: "!"
|
||||
- type: "input"
|
||||
title: "message"
|
||||
key: "Message"
|
||||
initialValue: ""
|
||||
- type: "confirm"
|
||||
key: "Confirm"
|
||||
title: "Commit"
|
||||
body: "Are you sure you want to commit?"
|
||||
command: "git commit --message '{{.Form.Type}}{{ if .Form.Scope }}({{ .Form.Scope }}){{ end }}{{.Form.Breaking}}: {{.Form.Message}}'"
|
||||
loadingText: "Creating conventional commit..."
|
||||
- key: "R"
|
||||
command: "git reset --soft HEAD~1"
|
||||
context: "files"
|
||||
loadingText: "opening commitizen commit tool"
|
||||
subprocess: true
|
||||
description: "Undo last commit"
|
||||
|
|
3
.config/ludusavi/.github/README.md
vendored
3
.config/ludusavi/.github/README.md
vendored
|
@ -1,3 +0,0 @@
|
|||
<div align="center">
|
||||
<a href=""><img src="./title.png"></a>
|
||||
</div>
|
BIN
.config/ludusavi/.github/title.png
vendored
BIN
.config/ludusavi/.github/title.png
vendored
Binary file not shown.
Before Width: | Height: | Size: 21 KiB |
|
@ -1,79 +0,0 @@
|
|||
runtime:
|
||||
threads: null
|
||||
release:
|
||||
check: true
|
||||
manifest:
|
||||
enable: false
|
||||
secondary:
|
||||
- url: https://cdn.losbroxas.org/manifest.yaml
|
||||
enable: true
|
||||
language: en-US
|
||||
theme: dark
|
||||
roots:
|
||||
- store: steam
|
||||
path: ~/.local/share/Steam
|
||||
- store: heroic
|
||||
path: ~/.config/heroic
|
||||
- store: steam
|
||||
path: ~/games/SteamLibrary
|
||||
- store: other
|
||||
path: ~/.local/share/dolphin-emu
|
||||
- store: other
|
||||
path: ~/.config/Ryujinx
|
||||
redirects: []
|
||||
backup:
|
||||
path: /backups/gamesaves
|
||||
ignoredGames: []
|
||||
filter:
|
||||
excludeStoreScreenshots: false
|
||||
cloud:
|
||||
exclude: false
|
||||
epic: false
|
||||
gog: false
|
||||
origin: false
|
||||
steam: false
|
||||
uplay: false
|
||||
ignoredPaths: []
|
||||
ignoredRegistry: []
|
||||
toggledPaths: {}
|
||||
toggledRegistry: {}
|
||||
sort:
|
||||
key: status
|
||||
reversed: false
|
||||
retention:
|
||||
full: 1
|
||||
differential: 0
|
||||
format:
|
||||
chosen: simple
|
||||
zip:
|
||||
compression: deflate
|
||||
compression:
|
||||
deflate:
|
||||
level: 6
|
||||
bzip2:
|
||||
level: 6
|
||||
zstd:
|
||||
level: 10
|
||||
onlyConstructive: false
|
||||
restore:
|
||||
path: /backups/gamesaves/
|
||||
ignoredGames: []
|
||||
toggledPaths: {}
|
||||
toggledRegistry: {}
|
||||
sort:
|
||||
key: status
|
||||
reversed: false
|
||||
reverseRedirects: false
|
||||
scan:
|
||||
showDeselectedGames: true
|
||||
showUnchangedGames: true
|
||||
showUnscannedGames: true
|
||||
cloud:
|
||||
remote: null
|
||||
path: ludusavi-backup
|
||||
synchronize: true
|
||||
apps:
|
||||
rclone:
|
||||
path: ""
|
||||
arguments: --fast-list --ignore-checksum
|
||||
customGames: []
|
|
@ -1,7 +1,6 @@
|
|||
[tools]
|
||||
usage = "latest"
|
||||
bun = "latest"
|
||||
"npm:five-server" = "latest"
|
||||
node = "latest"
|
||||
pnpm = "latest"
|
||||
uv = "latest"
|
||||
|
@ -10,7 +9,26 @@ age = "latest"
|
|||
deno = "latest"
|
||||
go = "latest"
|
||||
watchexec = "latest"
|
||||
|
||||
# Cargo Tools
|
||||
"cargo:cargo-cache" = "latest"
|
||||
"cargo:kanata" = "latest"
|
||||
"cargo:atac" = "latest"
|
||||
|
||||
# Go Tools
|
||||
"go:github.com/stefanlogue/meteor" = "latest"
|
||||
# "go:github.com/rszyma/kanata-tray" = "latest"
|
||||
"go:github.com/jorgerojas26/lazysql" = "latest"
|
||||
# "go:github.com/guyfedwards/nom" = "latest"
|
||||
|
||||
# Python Tools
|
||||
"pipx:darrenburns/posting" = "latest"
|
||||
"pipx:pytest" = "latest"
|
||||
"pipx:b2" = "latest"
|
||||
|
||||
# Node Tools
|
||||
"npm:five-server" = "latest"
|
||||
"npm:opencode-ai" = "latest"
|
||||
|
||||
[settings]
|
||||
# plugins can read the versions files used by other version managers (if enabled by the plugin)
|
||||
|
@ -39,8 +57,7 @@ not_found_auto_install = true # see MISE_NOT_FOUND_AUTO_INSTALL
|
|||
task_output = "prefix" # see Tasks Runner for more information
|
||||
paranoid = false # see MISE_PARANOID
|
||||
|
||||
shorthands_file = '~/.config/mise/shorthands.toml' # path to the shorthands file, see `MISE_SHORTHANDS_FILE`
|
||||
disable_default_shorthands = false # disable the default shorthands, see `MISE_DISABLE_DEFAULT_SHORTHANDS`
|
||||
disable_default_shorthands = false # disable the default shorthands, see `MISE_DISABLE_DEFAULT_SHORTHANDS`
|
||||
|
||||
env_file = '.env' # load env vars from a dotenv file, see `MISE_ENV_FILE`
|
||||
|
||||
|
@ -50,3 +67,5 @@ experimental = true # enable experimental features
|
|||
status = { missing_tools = "if_other_versions_installed", show_env = false, show_tools = false }
|
||||
cargo_binstall = true # Install pre-compiled cargo packages
|
||||
pipx_uvx = true # Use uvx instead of pipx
|
||||
idiomatic_version_file_enable_tools = ["node"]
|
||||
npm.bun = true
|
||||
|
|
|
@ -1,66 +0,0 @@
|
|||
# Progress
|
||||
# 60 seconds
|
||||
CTRL+SHIFT+l seek 60
|
||||
CTRL+SHIFT+l seek -60
|
||||
CTRL+SHIFT+RIGHT seek 60
|
||||
CTRL+SHIFT+LEFT seek -60
|
||||
|
||||
# 30 seconds
|
||||
SHIFT+l seek 30
|
||||
SHIFT+h seek -30
|
||||
SHIFT+RIGHT seek 30
|
||||
SHIFT+LEFT seek -30
|
||||
|
||||
# 10 seconds
|
||||
CTRL+l seek 10
|
||||
CTRL+h seek -10
|
||||
CTRL+RIGHT seek 10
|
||||
CTRL+LEFT seek -10
|
||||
|
||||
# 5 seconds
|
||||
l seek 5
|
||||
h seek -5
|
||||
RIGHT seek 5
|
||||
LEFT seek -5
|
||||
|
||||
# 2 seconds
|
||||
ALT+l seek 2
|
||||
ALT+h seek -2
|
||||
ALT+RIGHT seek 2
|
||||
ALT+LEFT seek -2
|
||||
|
||||
# Disables all normal mouse scrolls
|
||||
WHEEL_LEFT ignore
|
||||
WHEEL_RIGHT ignore
|
||||
|
||||
|
||||
# Audio
|
||||
# 100%
|
||||
CTRL+SHIFT+k add volume 100
|
||||
CTRL+SHIFT+j add volume -100
|
||||
CTRL+SHIFT+UP add volume 100
|
||||
CTRL+SHIFT+DOWN add volume -100
|
||||
|
||||
# 50%
|
||||
SHIFT+k add volume 50
|
||||
SHIFT+j add volume -50
|
||||
SHIFT+UP add volume 50
|
||||
SHIFT+DOWN add volume -50
|
||||
|
||||
# 25%
|
||||
CTRL+k add volume 25
|
||||
CTRL+j add volume -25
|
||||
CTRL+UP add volume 25
|
||||
CTRL+DOWN add volume -25
|
||||
|
||||
# 10%
|
||||
k add volume 10
|
||||
j add volume -10
|
||||
UP add volume 10
|
||||
DOWN add volume -10
|
||||
|
||||
# 5%
|
||||
ALT+k add volume 5
|
||||
ALT+j add volume -5
|
||||
ALT+UP add volume 5
|
||||
ALT+DOWN add volume -5
|
|
@ -3,6 +3,7 @@
|
|||
#vo=gpu
|
||||
# Can cause performance problems with some GPU drivers and GPUs.
|
||||
#profile=gpu-hq
|
||||
gpu-context=wayland
|
||||
|
||||
# ===== REMOVE THE ABOVE FOUR LINES AND RESAVE IF YOU ENCOUNTER PLAYBACK ISSUES AFTER =====
|
||||
|
||||
|
@ -19,14 +20,17 @@ osd-color='#cad3f5'
|
|||
osd-shadow-color='#24273a'
|
||||
|
||||
# Screenshots
|
||||
screenshot-directory='~/Imagenes/Capturas/PC'
|
||||
screenshot-directory='~'
|
||||
screenshot-template='mpv-%f-%p'
|
||||
|
||||
# Enables best HW decoder; turn off for software decoding
|
||||
hwdec=auto
|
||||
|
||||
# IPC
|
||||
input-ipc-server=/tmp/mpv-socket
|
||||
|
||||
# Keeps open the window after a video is finished
|
||||
keep-open
|
||||
# keep-open
|
||||
|
||||
border=no # hides the window title bar
|
||||
msg-color=yes # color log messages on terminal
|
||||
|
@ -34,7 +38,7 @@ term-osd-bar=yes # displays a progress bar on the terminal
|
|||
cursor-autohide=1000 # autohides the cursor after 1s
|
||||
|
||||
# Sets a custom font
|
||||
osd-font='JetBrainsMono Nerd Font Light'
|
||||
osd-font='Maple Mono NF'
|
||||
osd-font-size=35
|
||||
# osd-scale=0.5
|
||||
|
||||
|
@ -55,6 +59,10 @@ profile-restore=copy-equal
|
|||
|
||||
# Sets volume to 100%.
|
||||
volume=100
|
||||
# Sets maximum volume to 200%.
|
||||
volume-max=200
|
||||
# Audio language: German
|
||||
alang=ger
|
||||
|
||||
# Normalizes audio
|
||||
# af-add='dynaudnorm=g=5:f=250:r=0.9:p=0.5'
|
||||
|
@ -79,6 +87,8 @@ deband-grain=48 # dynamic grain: set to "0" if using the static grain shader
|
|||
|
||||
# ===== Subtitles =====
|
||||
blend-subtitles=yes
|
||||
sub-auto=fuzzy
|
||||
slang=ger
|
||||
|
||||
# ===== Motion Interpolation =====
|
||||
override-display-fps=75
|
||||
|
@ -288,3 +298,4 @@ profile=protocol.http
|
|||
profile-restore=copy-equal # Sets the profile restore method to "copy if equal"
|
||||
profile-desc=ytdl
|
||||
profile=protocol.http
|
||||
ytdl-raw-options=ignore-config=,sub-format=de,write-sub=
|
||||
|
|
BIN
.config/mpv/mpv_websocket
Executable file
BIN
.config/mpv/mpv_websocket
Executable file
Binary file not shown.
2
.config/mpv/scripts-opts/console.conf
Normal file
2
.config/mpv/scripts-opts/console.conf
Normal file
|
@ -0,0 +1,2 @@
|
|||
font_size=38
|
||||
scale=3
|
455
.config/mpv/scripts/animecards_v35_modified.lua
Normal file
455
.config/mpv/scripts/animecards_v35_modified.lua
Normal file
|
@ -0,0 +1,455 @@
|
|||
------------- Instructions -------------
|
||||
-- -- Video Demonstration: https://www.youtube.com/watch?v=M4t7HYS73ZQ
|
||||
-- IF USING WEBSOCKET (RECOMMENDED)
|
||||
-- -- Install the mpv_webscoket extension: https://github.com/kuroahna/mpv_websocket
|
||||
-- -- Open a LOCAL copy of https://github.com/Renji-XD/texthooker-ui
|
||||
-- -- Configure the script (if you're not using the Lapis note format)
|
||||
-- IF USING CLIPBOARD INSERTER (NOT RECOMMENDED)
|
||||
-- -- Install the clipboard inserter plugin: https://github.com/laplus-sadness/lap-clipboard-inserter
|
||||
-- -- Open the texthooker UI, enable the plugin and enable clipboard pasting: https://github.com/Renji-XD/texthooker-ui
|
||||
-- BOTH
|
||||
-- -- Wait for an unknown word and create the card with Yomichan.
|
||||
-- -- Select all the subtitle lines you wish to add to the card and copy with Ctrl + c.
|
||||
-- -- Press Ctrl + v in MPV to add the lines, their Audio and the currently paused image to the back of the card.
|
||||
---------------------------------------
|
||||
|
||||
------------- Credits -------------
|
||||
-- Credits and copyright go to Anacreon DJT: https://anacreondjt.gitlab.io/
|
||||
------------------------------------
|
||||
|
||||
------------- Original Credits (Outdated) -------------
|
||||
-- This script was made by users of 4chan's Daily Japanese Thread (DJT) on /jp/
|
||||
-- More information can be found here http://animecards.site/
|
||||
-- Message @Anacreon with bug reports and feature requests on Discord (https://animecards.site/discord/) or 4chan (https://boards.4channel.org/jp/#s=djt)
|
||||
--
|
||||
-- If you like this work please consider subscribing on Patreon!
|
||||
-- https://www.patreon.com/Quizmaster
|
||||
------------------------------------
|
||||
|
||||
local utils = require 'mp.utils'
|
||||
local msg = require 'mp.msg'
|
||||
|
||||
------------- User Config -------------
|
||||
-- Set these to match your field names in Anki
|
||||
local FRONT_FIELD = "Vocab"
|
||||
local SENTENCE_AUDIO_FIELD = "SentAudio"
|
||||
local SENTENCE_FIELD = "INVALID" -- the sentence is better taken care of by yomitan itself.
|
||||
local IMAGE_FIELD = "Image"
|
||||
-- Optional padding and fade settings in seconds.
|
||||
-- Padding grabs extra audio around your selected subs.
|
||||
-- Fade does a volume fade effect at the beginning and end of the resulting audio.
|
||||
local AUDIO_CLIP_FADE = 0.2
|
||||
local AUDIO_CLIP_PADDING = 0.75
|
||||
-- Optional play sentence audio automatically after card update
|
||||
local AUTOPLAY_AUDIO = false
|
||||
-- Optional screenshot image format. Valid options: "webp" or "png"
|
||||
-- Change to "png" if you plan to view cards on iOS or Mac.
|
||||
local IMAGE_FORMAT = "png"
|
||||
-- Optional set to true if you want your volume in mpv to affect Anki card volume.
|
||||
local USE_MPV_VOLUME = false
|
||||
-- Set to true if you want writing to clipboard to be enabled by default.
|
||||
-- The more modern and recommended alternative is to use the websocket.
|
||||
local ENABLE_SUBS_TO_CLIP = false
|
||||
|
||||
---------------------------------------
|
||||
|
||||
------------- Internal Variables -------------
|
||||
local subs = {}
|
||||
local debug_mode = true
|
||||
local use_powershell_clipboard = nil
|
||||
local prefix = ""
|
||||
---------------------------------------
|
||||
|
||||
|
||||
------------- Setup -------------
|
||||
if unpack ~= nil then table.unpack = unpack end
|
||||
|
||||
local o = {}
|
||||
-- Possible platforms: windows, linux, macos
|
||||
local platform = mp.get_property_native("platform")
|
||||
if platform == "darwin" then
|
||||
platform = "macos"
|
||||
end
|
||||
|
||||
local display_server
|
||||
if os.getenv("WAYLAND_DISPLAY") then
|
||||
display_server = 'wayland'
|
||||
elseif platform == 'linux' then
|
||||
display_server = 'xorg'
|
||||
else
|
||||
display_server = ""
|
||||
end
|
||||
|
||||
local function dlog(...)
|
||||
if debug_mode then
|
||||
print(...)
|
||||
end
|
||||
end
|
||||
|
||||
local function verfiy_libmp3lame()
|
||||
local encoderlist = mp.get_property("encoder-list")
|
||||
if not encoderlist or not string.find(encoderlist, "libmp3lame") then
|
||||
mp.osd_message("Error: libmp3lame encoder not found. Audio export will not work.\nPlease use a build of mpv with libmp3lame support.", 10)
|
||||
msg.error("Error: libmp3lame encoder not found. MP3 audio export will not work.")
|
||||
else
|
||||
dlog("libmp3lame encoder found.")
|
||||
end
|
||||
end
|
||||
|
||||
mp.register_event("file-loaded", verfiy_libmp3lame)
|
||||
|
||||
dlog("Detected Platform: " .. platform)
|
||||
dlog("Detected display server: " .. display_server)
|
||||
|
||||
---------------------------------------
|
||||
-- Handle requests to AnkiConnect
|
||||
local function anki_connect(action, params)
|
||||
local request = utils.format_json({action=action, params=params, version=6})
|
||||
local args = {'curl', '-s', 'localhost:8765', '-X', 'POST', '-d', request}
|
||||
|
||||
dlog("AnkiConnect request: " .. request)
|
||||
|
||||
local result = utils.subprocess({ args = args, cancellable = false, capture_stderr = true })
|
||||
|
||||
if result.status ~= 0 then
|
||||
msg.error("Curl command failed with status: " .. tostring(result.status))
|
||||
msg.error("Stderr: " .. (result.stderr or "none"))
|
||||
return nil
|
||||
end
|
||||
|
||||
if not result.stdout or result.stdout == "" then
|
||||
msg.error("Empty response from AnkiConnect")
|
||||
return nil
|
||||
end
|
||||
|
||||
dlog("AnkiConnect response: " .. result.stdout)
|
||||
|
||||
local success, parsed_result = pcall(function() return utils.parse_json(result.stdout) end)
|
||||
if not success or not parsed_result then
|
||||
msg.error("Failed to parse JSON response: " .. (result.stdout or "empty"))
|
||||
return nil
|
||||
end
|
||||
|
||||
return parsed_result
|
||||
end
|
||||
|
||||
-- Get media directory path from AnkiConnect
|
||||
local function set_media_dir()
|
||||
local media_dir_response = anki_connect('getMediaDirPath')
|
||||
if not media_dir_response then
|
||||
msg.error("Failed to communicate with AnkiConnect. Is Anki running and do you have AnkiConnect installed?")
|
||||
mp.osd_message("Error: Failed to communicate with AnkiConnect. Is Anki running and do you have AnkiConnect installed?", 5)
|
||||
return
|
||||
elseif media_dir_response["error"] then
|
||||
msg.error("AnkiConnect error: " .. tostring(media_dir_response["error"]))
|
||||
mp.osd_message("AnkiConnect error: " .. tostring(media_dir_response["error"]), 5)
|
||||
return
|
||||
elseif media_dir_response["result"] then
|
||||
prefix = media_dir_response["result"]
|
||||
dlog("Got media directory path from AnkiConnect: " .. prefix)
|
||||
else
|
||||
msg.error("Unexpected response format from AnkiConnect")
|
||||
mp.osd_message("Error: Unexpected response from AnkiConnect", 5)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local function clean(s)
|
||||
for _, ws in ipairs({'%s', ' ', '', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '', ' ', ' ', ' ', '', ''}) do
|
||||
s = s:gsub(ws..'+', "")
|
||||
end
|
||||
return s
|
||||
end
|
||||
|
||||
local function get_name(s, e)
|
||||
return mp.get_property("filename"):gsub('%W','').. tostring(s) .. tostring(e)
|
||||
end
|
||||
|
||||
local function get_clipboard()
|
||||
local res
|
||||
if platform == 'windows' then
|
||||
res = utils.subprocess({ args = {
|
||||
'powershell', '-NoProfile', '-Command', [[& {
|
||||
Trap {
|
||||
Write-Error -ErrorRecord $_
|
||||
Exit 1
|
||||
}
|
||||
$clip = ""
|
||||
if (Get-Command "Get-Clipboard" -errorAction SilentlyContinue) {
|
||||
$clip = Get-Clipboard -Raw -Format Text -TextFormatType UnicodeText
|
||||
} else {
|
||||
Add-Type -AssemblyName PresentationCore
|
||||
$clip = [Windows.Clipboard]::GetText()
|
||||
}
|
||||
$clip = $clip -Replace "`r",""
|
||||
$u8clip = [System.Text.Encoding]::UTF8.GetBytes($clip)
|
||||
[Console]::OpenStandardOutput().Write($u8clip, 0, $u8clip.Length)
|
||||
}]]
|
||||
} })
|
||||
elseif platform == 'macos' then
|
||||
return io.popen('LANG=en_US.UTF-8 pbpaste'):read("*a")
|
||||
else -- platform == 'linux'
|
||||
if display_server == 'wayland' then
|
||||
res = utils.subprocess({ args = {
|
||||
'wl-paste'
|
||||
} })
|
||||
else -- display_server == 'xorg'
|
||||
res = utils.subprocess({ args = {
|
||||
'xclip', '-selection', 'clipboard', '-out'
|
||||
} })
|
||||
end
|
||||
end
|
||||
if not res.error then
|
||||
return res.stdout
|
||||
end
|
||||
end
|
||||
|
||||
local function powershell_set_clipboard(text)
|
||||
utils.subprocess({ args = {
|
||||
'powershell', '-NoProfile', '-Command', [[Set-Clipboard -Value @"]] .. "\n" .. text .. "\n" .. [["@]]
|
||||
}})
|
||||
end
|
||||
|
||||
local function cmd_set_clipboard(text)
|
||||
local cmd = 'echo ' .. text .. ' | clip';
|
||||
mp.command("run cmd /D /C " .. cmd);
|
||||
end
|
||||
|
||||
local function determine_clip_type()
|
||||
powershell_set_clipboard([[Anacreon様]])
|
||||
use_powershell_clipboard = get_clipboard() == [[Anacreon様]]
|
||||
end
|
||||
|
||||
local function linux_set_clipboard(text)
|
||||
if display_server == 'wayland' then
|
||||
os.execute('wl-copy <<EOF\n' .. text .. '\nEOF\n')
|
||||
else -- display_server == 'xorg'
|
||||
os.execute('xclip -selection clipboard <<EOF\n' .. text .. '\nEOF\n')
|
||||
end
|
||||
end
|
||||
|
||||
local function macos_set_clipboard(text)
|
||||
os.execute('export LANG=en_US.UTF-8; cat <<EOF | pbcopy\n' .. text .. '\nEOF\n')
|
||||
end
|
||||
|
||||
local function record_sub(_, text)
|
||||
if text and mp.get_property_number('sub-start') and mp.get_property_number('sub-end') then
|
||||
local sub_delay = mp.get_property_native("sub-delay")
|
||||
local audio_delay = mp.get_property_native("audio-delay")
|
||||
local newtext = clean(text)
|
||||
if newtext == '' then
|
||||
return
|
||||
end
|
||||
|
||||
subs[newtext] = { mp.get_property_number('sub-start') + sub_delay - audio_delay, mp.get_property_number('sub-end') + sub_delay - audio_delay }
|
||||
dlog(string.format("%s -> %s : %s", subs[newtext][1], subs[newtext][2], newtext))
|
||||
if ENABLE_SUBS_TO_CLIP then
|
||||
-- Remove newlines from text before sending it to clipboard.
|
||||
-- This way pressing control+v without copying from texthooker page
|
||||
-- will always give last line.
|
||||
text = string.gsub(text, "[\n\r]+", " ")
|
||||
if platform == 'windows' then
|
||||
if use_powershell_clipboard == nil then
|
||||
determine_clip_type()
|
||||
end
|
||||
if use_powershell_clipboard then
|
||||
powershell_set_clipboard(text)
|
||||
else
|
||||
cmd_set_clipboard(text)
|
||||
end
|
||||
elseif platform == 'macos' then
|
||||
macos_set_clipboard(text)
|
||||
else
|
||||
linux_set_clipboard(text)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function create_audio(s, e)
|
||||
|
||||
if s == nil or e == nil then
|
||||
return
|
||||
end
|
||||
|
||||
local name = get_name(s, e)
|
||||
local destination = utils.join_path(prefix, name .. '.mp3')
|
||||
s = s - AUDIO_CLIP_PADDING
|
||||
local t = e - s + AUDIO_CLIP_PADDING
|
||||
local source = mp.get_property("path")
|
||||
local aid = mp.get_property("aid")
|
||||
|
||||
local tracks_count = mp.get_property_number("track-list/count")
|
||||
for i = 1, tracks_count do
|
||||
local track_type = mp.get_property(string.format("track-list/%d/type", i))
|
||||
local track_selected = mp.get_property(string.format("track-list/%d/selected", i))
|
||||
if track_type == "audio" and track_selected == "yes" then
|
||||
if mp.get_property(string.format("track-list/%d/external-filename", i), o) ~= o then
|
||||
source = mp.get_property(string.format("track-list/%d/external-filename", i))
|
||||
aid = 'auto'
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local cmd = {
|
||||
'run',
|
||||
'mpv',
|
||||
source,
|
||||
'--loop-file=no',
|
||||
'--video=no',
|
||||
'--no-ocopy-metadata',
|
||||
'--no-sub',
|
||||
'--audio-channels=1',
|
||||
string.format('--start=%.3f', s),
|
||||
string.format('--length=%.3f', t),
|
||||
string.format('--aid=%s', aid),
|
||||
string.format('--volume=%s', USE_MPV_VOLUME and mp.get_property('volume') or '100'),
|
||||
string.format("--af-append=afade=t=in:curve=ipar:st=%.3f:d=%.3f", s, AUDIO_CLIP_FADE),
|
||||
string.format("--af-append=afade=t=out:curve=ipar:st=%.3f:d=%.3f", s + t - AUDIO_CLIP_FADE, AUDIO_CLIP_FADE),
|
||||
string.format('-o=%s', destination)
|
||||
}
|
||||
mp.commandv(table.unpack(cmd))
|
||||
dlog(utils.to_string(cmd))
|
||||
end
|
||||
|
||||
local function create_screenshot(s, e)
|
||||
local source = mp.get_property("path")
|
||||
local img = utils.join_path(prefix, get_name(s,e) .. '.' .. IMAGE_FORMAT)
|
||||
|
||||
local cmd = {
|
||||
'run',
|
||||
'mpv',
|
||||
source,
|
||||
'--loop-file=no',
|
||||
'--audio=no',
|
||||
'--no-ocopy-metadata',
|
||||
'--no-sub',
|
||||
'--frames=1',
|
||||
}
|
||||
if IMAGE_FORMAT == 'webp' then
|
||||
table.insert(cmd, '--ovc=libwebp')
|
||||
table.insert(cmd, '--ovcopts-add=lossless=0')
|
||||
table.insert(cmd, '--ovcopts-add=compression_level=6')
|
||||
table.insert(cmd, '--ovcopts-add=preset=drawing')
|
||||
elseif IMAGE_FORMAT == 'png' then
|
||||
table.insert(cmd, '--vf-add=format=rgb24')
|
||||
end
|
||||
table.insert(cmd, '--vf-add=scale=480*iw*sar/ih:480')
|
||||
table.insert(cmd, string.format('--start=%.3f', mp.get_property_number("time-pos")))
|
||||
table.insert(cmd, string.format('-o=%s', img))
|
||||
mp.commandv(table.unpack(cmd))
|
||||
dlog(utils.to_string(cmd))
|
||||
end
|
||||
|
||||
|
||||
|
||||
local function add_to_last_added(ifield, afield, tfield)
|
||||
local added_notes = anki_connect('findNotes', {query='added:1'})["result"]
|
||||
table.sort(added_notes)
|
||||
local noteid = added_notes[#added_notes]
|
||||
local note = anki_connect('notesInfo', {notes={noteid}})
|
||||
|
||||
if note ~= nil then
|
||||
local word = note["result"][1]["fields"][FRONT_FIELD]["value"]
|
||||
local new_fields = {
|
||||
[SENTENCE_AUDIO_FIELD]=afield,
|
||||
[SENTENCE_FIELD]=tfield,
|
||||
[IMAGE_FIELD]=ifield
|
||||
}
|
||||
|
||||
anki_connect('updateNoteFields', {
|
||||
note={
|
||||
id=noteid,
|
||||
fields=new_fields
|
||||
}
|
||||
})
|
||||
|
||||
mp.osd_message("Updated note: " .. word, 3)
|
||||
msg.info("Updated note: " .. word)
|
||||
end
|
||||
end
|
||||
|
||||
local function get_extract()
|
||||
local lines = get_clipboard()
|
||||
local e = 0
|
||||
local s = 0
|
||||
for line in lines:gmatch("[^\r\n]+") do
|
||||
line = clean(line)
|
||||
dlog(line)
|
||||
if subs[line]~= nil then
|
||||
if subs[line][1] ~= nil and subs[line][2] ~= nil then
|
||||
if s == 0 then
|
||||
s = subs[line][1]
|
||||
else
|
||||
s = math.min(s, subs[line][1])
|
||||
end
|
||||
e = math.max(e, subs[line][2])
|
||||
end
|
||||
else
|
||||
mp.osd_message("ERR! Line not found: " .. line, 3)
|
||||
return
|
||||
end
|
||||
end
|
||||
dlog(string.format('s=%d, e=%d', s, e))
|
||||
if e ~= 0 then
|
||||
create_screenshot(s, e)
|
||||
create_audio(s, e)
|
||||
local ifield = '<img src='.. get_name(s,e) ..'.' .. IMAGE_FORMAT .. '>'
|
||||
local afield = "[sound:".. get_name(s,e) .. ".mp3]"
|
||||
local tfield = string.gsub(string.gsub(lines,"\n+", "<br />"), "\r", "")
|
||||
add_to_last_added(ifield, afield, tfield)
|
||||
if AUTOPLAY_AUDIO then
|
||||
local name = get_name(s, e)
|
||||
local audio = utils.join_path(prefix, name .. '.mp3')
|
||||
local cmd = {'run', 'mpv', audio, '--loop-file=no', '--load-scripts=no'}
|
||||
mp.commandv(table.unpack(cmd))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function ex()
|
||||
|
||||
if not prefix or prefix == "" then
|
||||
set_media_dir()
|
||||
end
|
||||
|
||||
if debug_mode then
|
||||
get_extract()
|
||||
else
|
||||
pcall(get_extract)
|
||||
end
|
||||
end
|
||||
|
||||
local function rec(...)
|
||||
if debug_mode then
|
||||
record_sub(...)
|
||||
else
|
||||
pcall(record_sub, ...)
|
||||
end
|
||||
end
|
||||
|
||||
local function toggle_sub_to_clipboard()
|
||||
ENABLE_SUBS_TO_CLIP = not ENABLE_SUBS_TO_CLIP
|
||||
mp.osd_message("Clipboard inserter " .. (ENABLE_SUBS_TO_CLIP and "activated" or "deactived"), 3)
|
||||
end
|
||||
|
||||
local function toggle_debug_mode()
|
||||
debug_mode = not debug_mode
|
||||
mp.osd_message("Debug mode " .. (debug_mode and "activated" or "deactived"), 3)
|
||||
end
|
||||
|
||||
local function clear_subs(_)
|
||||
subs = {}
|
||||
end
|
||||
|
||||
mp.observe_property("sub-text", 'string', rec)
|
||||
mp.observe_property("filename", "string", clear_subs)
|
||||
|
||||
mp.add_key_binding("ctrl+v", "update-anki-card", ex)
|
||||
mp.add_key_binding("ctrl+t", "toggle-clipboard-insertion", toggle_sub_to_clipboard)
|
||||
mp.add_key_binding("ctrl+d", "toggle-debug-mode", toggle_debug_mode)
|
||||
mp.add_key_binding("ctrl+V", ex)
|
||||
mp.add_key_binding("ctrl+T", toggle_sub_to_clipboard)
|
||||
mp.add_key_binding("ctrl+D", toggle_debug_mode)
|
83
.config/mpv/scripts/run_websocket_server.lua
Normal file
83
.config/mpv/scripts/run_websocket_server.lua
Normal file
|
@ -0,0 +1,83 @@
|
|||
-- mpv_websocket
|
||||
-- https://github.com/kuroahna/mpv_websocket
|
||||
|
||||
local utils = require("mp.utils")
|
||||
|
||||
local platform = mp.get_property_native("platform")
|
||||
|
||||
local config_file_path = mp.find_config_file("mpv.conf")
|
||||
local config_folder_path, config_file = utils.split_path(config_file_path)
|
||||
local mpv_websocket_path =
|
||||
utils.join_path(config_folder_path, platform == "windows" and "mpv_websocket.exe" or "mpv_websocket")
|
||||
local initialised_websocket
|
||||
|
||||
local _, err = utils.file_info(config_file_path)
|
||||
if err then
|
||||
error("failed to open mpv config file `" .. config_file_path .. "`")
|
||||
end
|
||||
|
||||
local _, err = utils.file_info(mpv_websocket_path)
|
||||
if err then
|
||||
error("failed to open mpv_websocket")
|
||||
end
|
||||
|
||||
local function find_mpv_socket(config_file_path)
|
||||
local file = io.open(config_file_path, "r")
|
||||
if file == nil then
|
||||
error("failed to read mpv config file `" .. config_file_path .. "`")
|
||||
end
|
||||
|
||||
local mpv_socket
|
||||
for line in file:lines() do
|
||||
mpv_socket = line:match("^input%-ipc%-server%s*=%s*(%g+)%s*")
|
||||
if mpv_socket then
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
file:close()
|
||||
|
||||
if not mpv_socket then
|
||||
error("input-ipc-server option does not exist in `" .. config_file_path .. "`")
|
||||
end
|
||||
|
||||
return mpv_socket
|
||||
end
|
||||
|
||||
local mpv_socket = find_mpv_socket(config_file_path)
|
||||
if platform == "windows" then
|
||||
mpv_socket = "\\\\.\\pipe" .. mpv_socket:gsub("/", "\\")
|
||||
end
|
||||
|
||||
local function start_websocket()
|
||||
initialised_websocket = mp.command_native_async({
|
||||
name = "subprocess",
|
||||
playback_only = false,
|
||||
capture_stdout = true,
|
||||
capture_stderr = true,
|
||||
args = {
|
||||
mpv_websocket_path,
|
||||
"-m",
|
||||
mpv_socket,
|
||||
"-w",
|
||||
"6677",
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
local function end_websocket()
|
||||
mp.abort_async_command(initialised_websocket)
|
||||
initialised_websocket = nil
|
||||
end
|
||||
|
||||
local function toggle_websocket()
|
||||
local paused = mp.get_property_bool("pause")
|
||||
if initialised_websocket and paused then
|
||||
end_websocket()
|
||||
elseif not initialised_websocket and not paused then
|
||||
start_websocket()
|
||||
end
|
||||
end
|
||||
|
||||
mp.register_script_message("togglewebsocket", toggle_websocket)
|
||||
start_websocket()
|
757
.config/mpv/scripts/user-input.lua
Normal file
757
.config/mpv/scripts/user-input.lua
Normal file
|
@ -0,0 +1,757 @@
|
|||
local mp = require 'mp'
|
||||
local msg = require 'mp.msg'
|
||||
local utils = require 'mp.utils'
|
||||
local options = require 'mp.options'
|
||||
|
||||
-- Default options
|
||||
local opts = {
|
||||
-- All drawing is scaled by this value, including the text borders and the
|
||||
-- cursor. Change it if you have a high-DPI display.
|
||||
scale = 1,
|
||||
-- Set the font used for the REPL and the console. This probably doesn't
|
||||
-- have to be a monospaced font.
|
||||
font = "",
|
||||
-- Set the font size used for the REPL and the console. This will be
|
||||
-- multiplied by "scale."
|
||||
font_size = 16,
|
||||
}
|
||||
|
||||
options.read_options(opts, "user_input")
|
||||
|
||||
local API_VERSION = "0.1.0"
|
||||
local API_MAJOR_MINOR = API_VERSION:match("%d+%.%d+")
|
||||
|
||||
local co = nil
|
||||
local queue = {}
|
||||
local active_ids = {}
|
||||
local histories = {}
|
||||
local request = nil
|
||||
|
||||
local line = ''
|
||||
|
||||
|
||||
--[[
|
||||
The below code is a modified implementation of text input from mpv's console.lua:
|
||||
https://github.com/mpv-player/mpv/blob/7ca14d646c7e405f3fb1e44600e2a67fc4607238/player/lua/console.lua
|
||||
|
||||
Modifications:
|
||||
removed support for log messages, sending commands, tab complete, help commands
|
||||
removed update timer
|
||||
Changed esc key to call handle_esc function
|
||||
handle_esc and handle_enter now resume the main coroutine with a response table
|
||||
made history specific to request ids
|
||||
localised all functions - reordered some to fit
|
||||
keybindings use new names
|
||||
]]--
|
||||
|
||||
------------------------------START ORIGINAL MPV CODE-----------------------------------
|
||||
----------------------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------------------
|
||||
|
||||
-- Copyright (C) 2019 the mpv developers
|
||||
--
|
||||
-- Permission to use, copy, modify, and/or distribute this software for any
|
||||
-- purpose with or without fee is hereby granted, provided that the above
|
||||
-- copyright notice and this permission notice appear in all copies.
|
||||
--
|
||||
-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
-- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
-- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
-- SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
-- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
||||
-- OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
-- CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
local assdraw = require 'mp.assdraw'
|
||||
|
||||
local function detect_platform()
|
||||
local o = {}
|
||||
-- Kind of a dumb way of detecting the platform but whatever
|
||||
if mp.get_property_native('options/vo-mmcss-profile', o) ~= o then
|
||||
return 'windows'
|
||||
elseif mp.get_property_native('options/macos-force-dedicated-gpu', o) ~= o then
|
||||
return 'macos'
|
||||
elseif os.getenv('WAYLAND_DISPLAY') then
|
||||
return 'wayland'
|
||||
end
|
||||
return 'x11'
|
||||
end
|
||||
|
||||
-- Pick a better default font for Windows and macOS
|
||||
local platform = detect_platform()
|
||||
if platform == 'windows' then
|
||||
opts.font = 'Consolas'
|
||||
elseif platform == 'macos' then
|
||||
opts.font = 'Menlo'
|
||||
else
|
||||
opts.font = 'monospace'
|
||||
end
|
||||
|
||||
local repl_active = false
|
||||
local insert_mode = false
|
||||
local cursor = 1
|
||||
local key_bindings = {}
|
||||
local global_margin_y = 0
|
||||
|
||||
-- Escape a string for verbatim display on the OSD
|
||||
local function ass_escape(str)
|
||||
-- There is no escape for '\' in ASS (I think?) but '\' is used verbatim if
|
||||
-- it isn't followed by a recognised character, so add a zero-width
|
||||
-- non-breaking space
|
||||
str = str:gsub('\\', '\\\239\187\191')
|
||||
str = str:gsub('{', '\\{')
|
||||
str = str:gsub('}', '\\}')
|
||||
-- Precede newlines with a ZWNBSP to prevent ASS's weird collapsing of
|
||||
-- consecutive newlines
|
||||
str = str:gsub('\n', '\239\187\191\\N')
|
||||
-- Turn leading spaces into hard spaces to prevent ASS from stripping them
|
||||
str = str:gsub('\\N ', '\\N\\h')
|
||||
str = str:gsub('^ ', '\\h')
|
||||
return str
|
||||
end
|
||||
|
||||
-- Render the REPL and console as an ASS OSD
|
||||
local function update()
|
||||
local dpi_scale = mp.get_property_native("display-hidpi-scale", 1.0)
|
||||
|
||||
dpi_scale = dpi_scale * opts.scale
|
||||
|
||||
local screenx, screeny, aspect = mp.get_osd_size()
|
||||
screenx = screenx / dpi_scale
|
||||
screeny = screeny / dpi_scale
|
||||
|
||||
-- Clear the OSD if the REPL is not active
|
||||
if not repl_active then
|
||||
mp.set_osd_ass(screenx, screeny, '')
|
||||
return
|
||||
end
|
||||
|
||||
local ass = assdraw.ass_new()
|
||||
local style = '{\\r' ..
|
||||
'\\1a&H00&\\3a&H00&\\4a&H99&' ..
|
||||
'\\1c&Heeeeee&\\3c&H111111&\\4c&H000000&' ..
|
||||
'\\fn' .. opts.font .. '\\fs' .. opts.font_size ..
|
||||
'\\bord1\\xshad0\\yshad1\\fsp0\\q1}'
|
||||
|
||||
local queue_style = '{\\r' ..
|
||||
'\\1a&H00&\\3a&H00&\\4a&H99&' ..
|
||||
'\\1c&Heeeeee&\\3c&H111111&\\4c&H000000&' ..
|
||||
'\\fn' .. opts.font .. '\\fs' .. opts.font_size .. '\\c&H66ccff&' ..
|
||||
'\\bord1\\xshad0\\yshad1\\fsp0\\q1}'
|
||||
|
||||
-- Create the cursor glyph as an ASS drawing. ASS will draw the cursor
|
||||
-- inline with the surrounding text, but it sets the advance to the width
|
||||
-- of the drawing. So the cursor doesn't affect layout too much, make it as
|
||||
-- thin as possible and make it appear to be 1px wide by giving it 0.5px
|
||||
-- horizontal borders.
|
||||
local cheight = opts.font_size * 8
|
||||
local cglyph = '{\\r' ..
|
||||
'\\1a&H44&\\3a&H44&\\4a&H99&' ..
|
||||
'\\1c&Heeeeee&\\3c&Heeeeee&\\4c&H000000&' ..
|
||||
'\\xbord0.5\\ybord0\\xshad0\\yshad1\\p4\\pbo24}' ..
|
||||
'm 0 0 l 1 0 l 1 ' .. cheight .. ' l 0 ' .. cheight ..
|
||||
'{\\p0}'
|
||||
local before_cur = ass_escape(line:sub(1, cursor - 1))
|
||||
local after_cur = ass_escape(line:sub(cursor))
|
||||
|
||||
ass:new_event()
|
||||
ass:an(1)
|
||||
ass:pos(2, screeny - 2 - global_margin_y * screeny)
|
||||
|
||||
if (#queue == 2) then ass:append(queue_style .. string.format("There is 1 more request queued\\N"))
|
||||
elseif (#queue > 2) then ass:append(queue_style .. string.format("There are %d more requests queued\\N", #queue-1)) end
|
||||
ass:append(style .. request.text .. '\\N')
|
||||
ass:append('> ' .. before_cur)
|
||||
ass:append(cglyph)
|
||||
ass:append(style .. after_cur)
|
||||
|
||||
-- Redraw the cursor with the REPL text invisible. This will make the
|
||||
-- cursor appear in front of the text.
|
||||
ass:new_event()
|
||||
ass:an(1)
|
||||
ass:pos(2, screeny - 2)
|
||||
ass:append(style .. '{\\alpha&HFF&}> ' .. before_cur)
|
||||
ass:append(cglyph)
|
||||
ass:append(style .. '{\\alpha&HFF&}' .. after_cur)
|
||||
|
||||
mp.set_osd_ass(screenx, screeny, ass.text)
|
||||
end
|
||||
|
||||
-- Naive helper function to find the next UTF-8 character in 'str' after 'pos'
|
||||
-- by skipping continuation bytes. Assumes 'str' contains valid UTF-8.
|
||||
local function next_utf8(str, pos)
|
||||
if pos > str:len() then return pos end
|
||||
repeat
|
||||
pos = pos + 1
|
||||
until pos > str:len() or str:byte(pos) < 0x80 or str:byte(pos) > 0xbf
|
||||
return pos
|
||||
end
|
||||
|
||||
-- As above, but finds the previous UTF-8 charcter in 'str' before 'pos'
|
||||
local function prev_utf8(str, pos)
|
||||
if pos <= 1 then return pos end
|
||||
repeat
|
||||
pos = pos - 1
|
||||
until pos <= 1 or str:byte(pos) < 0x80 or str:byte(pos) > 0xbf
|
||||
return pos
|
||||
end
|
||||
|
||||
-- Insert a character at the current cursor position (any_unicode)
|
||||
local function handle_char_input(c)
|
||||
if insert_mode then
|
||||
line = line:sub(1, cursor - 1) .. c .. line:sub(next_utf8(line, cursor))
|
||||
else
|
||||
line = line:sub(1, cursor - 1) .. c .. line:sub(cursor)
|
||||
end
|
||||
cursor = cursor + #c
|
||||
update()
|
||||
end
|
||||
|
||||
-- Remove the character behind the cursor (Backspace)
|
||||
local function handle_backspace()
|
||||
if cursor <= 1 then return end
|
||||
local prev = prev_utf8(line, cursor)
|
||||
line = line:sub(1, prev - 1) .. line:sub(cursor)
|
||||
cursor = prev
|
||||
update()
|
||||
end
|
||||
|
||||
-- Remove the character in front of the cursor (Del)
|
||||
local function handle_del()
|
||||
if cursor > line:len() then return end
|
||||
line = line:sub(1, cursor - 1) .. line:sub(next_utf8(line, cursor))
|
||||
update()
|
||||
end
|
||||
|
||||
-- Toggle insert mode (Ins)
|
||||
local function handle_ins()
|
||||
insert_mode = not insert_mode
|
||||
end
|
||||
|
||||
-- Move the cursor to the next character (Right)
|
||||
local function next_char(amount)
|
||||
cursor = next_utf8(line, cursor)
|
||||
update()
|
||||
end
|
||||
|
||||
-- Move the cursor to the previous character (Left)
|
||||
local function prev_char(amount)
|
||||
cursor = prev_utf8(line, cursor)
|
||||
update()
|
||||
end
|
||||
|
||||
-- Clear the current line (Ctrl+C)
|
||||
local function clear()
|
||||
line = ''
|
||||
cursor = 1
|
||||
insert_mode = false
|
||||
request.history.pos = #request.history.list + 1
|
||||
update()
|
||||
end
|
||||
|
||||
-- Close the REPL if the current line is empty, otherwise do nothing (Ctrl+D)
|
||||
local function maybe_exit()
|
||||
if line == '' then
|
||||
else
|
||||
handle_del()
|
||||
end
|
||||
end
|
||||
|
||||
local function handle_esc()
|
||||
coroutine.resume(co, {
|
||||
line = nil,
|
||||
err = "exited"
|
||||
})
|
||||
end
|
||||
|
||||
-- Run the current command and clear the line (Enter)
|
||||
local function handle_enter()
|
||||
if request.history.list[#request.history.list] ~= line and line ~= "" then
|
||||
request.history.list[#request.history.list + 1] = line
|
||||
end
|
||||
coroutine.resume(co, {
|
||||
line = line
|
||||
})
|
||||
end
|
||||
|
||||
-- Go to the specified position in the command history
|
||||
local function go_history(new_pos)
|
||||
local old_pos = request.history.pos
|
||||
request.history.pos = new_pos
|
||||
|
||||
-- Restrict the position to a legal value
|
||||
if request.history.pos > #request.history.list + 1 then
|
||||
request.history.pos = #request.history.list + 1
|
||||
elseif request.history.pos < 1 then
|
||||
request.history.pos = 1
|
||||
end
|
||||
|
||||
-- Do nothing if the history position didn't actually change
|
||||
if request.history.pos == old_pos then
|
||||
return
|
||||
end
|
||||
|
||||
-- If the user was editing a non-history line, save it as the last history
|
||||
-- entry. This makes it much less frustrating to accidentally hit Up/Down
|
||||
-- while editing a line.
|
||||
if old_pos == #request.history.list + 1 and line ~= '' and request.history.list[#request.history.list] ~= line then
|
||||
request.history.list[#request.history.list + 1] = line
|
||||
end
|
||||
|
||||
-- Now show the history line (or a blank line for #history + 1)
|
||||
if request.history.pos <= #request.history.list then
|
||||
line = request.history.list[request.history.pos]
|
||||
else
|
||||
line = ''
|
||||
end
|
||||
cursor = line:len() + 1
|
||||
insert_mode = false
|
||||
update()
|
||||
end
|
||||
|
||||
-- Go to the specified relative position in the command history (Up, Down)
|
||||
local function move_history(amount)
|
||||
go_history(request.history.pos + amount)
|
||||
end
|
||||
|
||||
-- Go to the first command in the command history (PgUp)
|
||||
local function handle_pgup()
|
||||
go_history(1)
|
||||
end
|
||||
|
||||
-- Stop browsing history and start editing a blank line (PgDown)
|
||||
local function handle_pgdown()
|
||||
go_history(#request.history.list + 1)
|
||||
end
|
||||
|
||||
-- Move to the start of the current word, or if already at the start, the start
|
||||
-- of the previous word. (Ctrl+Left)
|
||||
local function prev_word()
|
||||
-- This is basically the same as next_word() but backwards, so reverse the
|
||||
-- string in order to do a "backwards" find. This wouldn't be as annoying
|
||||
-- to do if Lua didn't insist on 1-based indexing.
|
||||
cursor = line:len() - select(2, line:reverse():find('%s*[^%s]*', line:len() - cursor + 2)) + 1
|
||||
update()
|
||||
end
|
||||
|
||||
-- Move to the end of the current word, or if already at the end, the end of
|
||||
-- the next word. (Ctrl+Right)
|
||||
local function next_word()
|
||||
cursor = select(2, line:find('%s*[^%s]*', cursor)) + 1
|
||||
update()
|
||||
end
|
||||
|
||||
-- Move the cursor to the beginning of the line (HOME)
|
||||
local function go_home()
|
||||
cursor = 1
|
||||
update()
|
||||
end
|
||||
|
||||
-- Move the cursor to the end of the line (END)
|
||||
local function go_end()
|
||||
cursor = line:len() + 1
|
||||
update()
|
||||
end
|
||||
|
||||
-- Delete from the cursor to the beginning of the word (Ctrl+Backspace)
|
||||
local function del_word()
|
||||
local before_cur = line:sub(1, cursor - 1)
|
||||
local after_cur = line:sub(cursor)
|
||||
|
||||
before_cur = before_cur:gsub('[^%s]+%s*$', '', 1)
|
||||
line = before_cur .. after_cur
|
||||
cursor = before_cur:len() + 1
|
||||
update()
|
||||
end
|
||||
|
||||
-- Delete from the cursor to the end of the word (Ctrl+Del)
|
||||
local function del_next_word()
|
||||
if cursor > line:len() then return end
|
||||
|
||||
local before_cur = line:sub(1, cursor - 1)
|
||||
local after_cur = line:sub(cursor)
|
||||
|
||||
after_cur = after_cur:gsub('^%s*[^%s]+', '', 1)
|
||||
line = before_cur .. after_cur
|
||||
update()
|
||||
end
|
||||
|
||||
-- Delete from the cursor to the end of the line (Ctrl+K)
|
||||
local function del_to_eol()
|
||||
line = line:sub(1, cursor - 1)
|
||||
update()
|
||||
end
|
||||
|
||||
-- Delete from the cursor back to the start of the line (Ctrl+U)
|
||||
local function del_to_start()
|
||||
line = line:sub(cursor)
|
||||
cursor = 1
|
||||
update()
|
||||
end
|
||||
|
||||
-- Returns a string of UTF-8 text from the clipboard (or the primary selection)
|
||||
local function get_clipboard(clip)
|
||||
if platform == 'x11' then
|
||||
local res = utils.subprocess({
|
||||
args = { 'xclip', '-selection', clip and 'clipboard' or 'primary', '-out' },
|
||||
playback_only = false,
|
||||
})
|
||||
if not res.error then
|
||||
return res.stdout
|
||||
end
|
||||
elseif platform == 'wayland' then
|
||||
local res = utils.subprocess({
|
||||
args = { 'wl-paste', clip and '-n' or '-np' },
|
||||
playback_only = false,
|
||||
})
|
||||
if not res.error then
|
||||
return res.stdout
|
||||
end
|
||||
elseif platform == 'windows' then
|
||||
local res = utils.subprocess({
|
||||
args = { 'powershell', '-NoProfile', '-Command', [[& {
|
||||
Trap {
|
||||
Write-Error -ErrorRecord $_
|
||||
Exit 1
|
||||
}
|
||||
|
||||
$clip = ""
|
||||
if (Get-Command "Get-Clipboard" -errorAction SilentlyContinue) {
|
||||
$clip = Get-Clipboard -Raw -Format Text -TextFormatType UnicodeText
|
||||
} else {
|
||||
Add-Type -AssemblyName PresentationCore
|
||||
$clip = [Windows.Clipboard]::GetText()
|
||||
}
|
||||
|
||||
$clip = $clip -Replace "`r",""
|
||||
$u8clip = [System.Text.Encoding]::UTF8.GetBytes($clip)
|
||||
[Console]::OpenStandardOutput().Write($u8clip, 0, $u8clip.Length)
|
||||
}]] },
|
||||
playback_only = false,
|
||||
})
|
||||
if not res.error then
|
||||
return res.stdout
|
||||
end
|
||||
elseif platform == 'macos' then
|
||||
local res = utils.subprocess({
|
||||
args = { 'pbpaste' },
|
||||
playback_only = false,
|
||||
})
|
||||
if not res.error then
|
||||
return res.stdout
|
||||
end
|
||||
end
|
||||
return ''
|
||||
end
|
||||
|
||||
-- Paste text from the window-system's clipboard. 'clip' determines whether the
|
||||
-- clipboard or the primary selection buffer is used (on X11 and Wayland only.)
|
||||
local function paste(clip)
|
||||
local text = get_clipboard(clip)
|
||||
local before_cur = line:sub(1, cursor - 1)
|
||||
local after_cur = line:sub(cursor)
|
||||
line = before_cur .. text .. after_cur
|
||||
cursor = cursor + text:len()
|
||||
update()
|
||||
end
|
||||
|
||||
-- List of input bindings. This is a weird mashup between common GUI text-input
|
||||
-- bindings and readline bindings.
|
||||
local function get_bindings()
|
||||
local bindings = {
|
||||
{ 'esc', handle_esc },
|
||||
{ 'enter', handle_enter },
|
||||
{ 'kp_enter', handle_enter },
|
||||
{ 'shift+enter', function() handle_char_input('\n') end },
|
||||
{ 'ctrl+j', handle_enter },
|
||||
{ 'ctrl+m', handle_enter },
|
||||
{ 'bs', handle_backspace },
|
||||
{ 'shift+bs', handle_backspace },
|
||||
{ 'ctrl+h', handle_backspace },
|
||||
{ 'del', handle_del },
|
||||
{ 'shift+del', handle_del },
|
||||
{ 'ins', handle_ins },
|
||||
{ 'shift+ins', function() paste(false) end },
|
||||
{ 'mbtn_mid', function() paste(false) end },
|
||||
{ 'left', function() prev_char() end },
|
||||
{ 'ctrl+b', function() prev_char() end },
|
||||
{ 'right', function() next_char() end },
|
||||
{ 'ctrl+f', function() next_char() end },
|
||||
{ 'up', function() move_history(-1) end },
|
||||
{ 'ctrl+p', function() move_history(-1) end },
|
||||
{ 'wheel_up', function() move_history(-1) end },
|
||||
{ 'down', function() move_history(1) end },
|
||||
{ 'ctrl+n', function() move_history(1) end },
|
||||
{ 'wheel_down', function() move_history(1) end },
|
||||
{ 'wheel_left', function() end },
|
||||
{ 'wheel_right', function() end },
|
||||
{ 'ctrl+left', prev_word },
|
||||
{ 'alt+b', prev_word },
|
||||
{ 'ctrl+right', next_word },
|
||||
{ 'alt+f', next_word },
|
||||
{ 'ctrl+a', go_home },
|
||||
{ 'home', go_home },
|
||||
{ 'ctrl+e', go_end },
|
||||
{ 'end', go_end },
|
||||
{ 'pgup', handle_pgup },
|
||||
{ 'pgdwn', handle_pgdown },
|
||||
{ 'ctrl+c', clear },
|
||||
{ 'ctrl+d', maybe_exit },
|
||||
{ 'ctrl+k', del_to_eol },
|
||||
{ 'ctrl+u', del_to_start },
|
||||
{ 'ctrl+v', function() paste(true) end },
|
||||
{ 'meta+v', function() paste(true) end },
|
||||
{ 'ctrl+bs', del_word },
|
||||
{ 'ctrl+w', del_word },
|
||||
{ 'ctrl+del', del_next_word },
|
||||
{ 'alt+d', del_next_word },
|
||||
{ 'kp_dec', function() handle_char_input('.') end },
|
||||
}
|
||||
|
||||
for i = 0, 9 do
|
||||
bindings[#bindings + 1] =
|
||||
{'kp' .. i, function() handle_char_input('' .. i) end}
|
||||
end
|
||||
|
||||
return bindings
|
||||
end
|
||||
|
||||
local function text_input(info)
|
||||
if info.key_text and (info.event == "press" or info.event == "down"
|
||||
or info.event == "repeat")
|
||||
then
|
||||
handle_char_input(info.key_text)
|
||||
end
|
||||
end
|
||||
|
||||
local function define_key_bindings()
|
||||
if #key_bindings > 0 then
|
||||
return
|
||||
end
|
||||
for _, bind in ipairs(get_bindings()) do
|
||||
-- Generate arbitrary name for removing the bindings later.
|
||||
local name = "_userinput_" .. bind[1]
|
||||
key_bindings[#key_bindings + 1] = name
|
||||
mp.add_forced_key_binding(bind[1], name, bind[2], {repeatable = true})
|
||||
end
|
||||
mp.add_forced_key_binding("any_unicode", "_userinput_text", text_input,
|
||||
{repeatable = true, complex = true})
|
||||
key_bindings[#key_bindings + 1] = "_userinput_text"
|
||||
end
|
||||
|
||||
local function undefine_key_bindings()
|
||||
for _, name in ipairs(key_bindings) do
|
||||
mp.remove_key_binding(name)
|
||||
end
|
||||
key_bindings = {}
|
||||
end
|
||||
|
||||
-- Set the REPL visibility ("enable", Esc)
|
||||
local function set_active(active)
|
||||
if active == repl_active then return end
|
||||
if active then
|
||||
repl_active = true
|
||||
insert_mode = false
|
||||
define_key_bindings()
|
||||
else
|
||||
clear()
|
||||
repl_active = false
|
||||
undefine_key_bindings()
|
||||
collectgarbage()
|
||||
end
|
||||
update()
|
||||
end
|
||||
|
||||
|
||||
mp.observe_property("user-data/osc/margins", "native", function(_, val)
|
||||
if val then
|
||||
global_margins = val
|
||||
else
|
||||
global_margins = { t = 0, b = 0 }
|
||||
end
|
||||
update()
|
||||
end)
|
||||
|
||||
-- Redraw the REPL when the OSD size changes. This is needed because the
|
||||
-- PlayRes of the OSD will need to be adjusted.
|
||||
mp.observe_property('osd-width', 'native', update)
|
||||
mp.observe_property('osd-height', 'native', update)
|
||||
mp.observe_property('display-hidpi-scale', 'native', update)
|
||||
|
||||
----------------------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------------------
|
||||
-------------------------------END ORIGINAL MPV CODE------------------------------------
|
||||
|
||||
--[[
|
||||
sends a response to the original script in the form of a json string
|
||||
it is expected that all requests get a response, if the input is nil then err should say why
|
||||
current error codes are:
|
||||
exited the user closed the input instead of pressing Enter
|
||||
already_queued a request with the specified id was already in the queue
|
||||
cancelled a script cancelled the request
|
||||
replace replaced by another request
|
||||
]]
|
||||
local function send_response(res)
|
||||
if res.source then
|
||||
mp.commandv("script-message-to", res.source, res.response, (utils.format_json(res)))
|
||||
else
|
||||
mp.commandv("script-message", res.response, (utils.format_json(res)))
|
||||
end
|
||||
end
|
||||
|
||||
-- push new request onto the queue
|
||||
-- if a request with the same id already exists and the queueable flag is not enabled then
|
||||
-- a nil result will be returned to the function
|
||||
function push_request(req)
|
||||
if active_ids[req.id] then
|
||||
if req.replace then
|
||||
for i, q_req in ipairs(queue) do
|
||||
if q_req.id == req.id then
|
||||
send_response{ err = "replaced", response = q_req.response, source = q_req.source }
|
||||
queue[i] = req
|
||||
if i == 1 then request = req end
|
||||
end
|
||||
end
|
||||
update()
|
||||
return
|
||||
end
|
||||
|
||||
if not req.queueable then
|
||||
send_response{ err = "already_queued", response = req.response, source = req.source }
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(queue, req)
|
||||
active_ids[req.id] = (active_ids[req.id] or 0) + 1
|
||||
if #queue == 1 then coroutine.resume(co) end
|
||||
update()
|
||||
end
|
||||
|
||||
-- safely removes an item from the queue and updates the set of active requests
|
||||
function remove_request(index)
|
||||
local req = table.remove(queue, index)
|
||||
active_ids[req.id] = active_ids[req.id] - 1
|
||||
|
||||
if active_ids[req.id] == 0 then active_ids[req.id] = nil end
|
||||
return req
|
||||
end
|
||||
|
||||
--an infinite loop that moves through the request queue
|
||||
--uses a coroutine to handle asynchronous operations
|
||||
local function driver()
|
||||
while (true) do
|
||||
while queue[1] do
|
||||
request = queue[1]
|
||||
line = request.default_input
|
||||
cursor = request.cursor_pos
|
||||
|
||||
if repl_active then update()
|
||||
else set_active(true) end
|
||||
|
||||
res = coroutine.yield()
|
||||
if res then
|
||||
res.source, res.response = request.source, request.response
|
||||
send_response(res)
|
||||
remove_request(1)
|
||||
end
|
||||
end
|
||||
|
||||
set_active(false)
|
||||
coroutine.yield()
|
||||
end
|
||||
end
|
||||
|
||||
co = coroutine.create(driver)
|
||||
|
||||
--cancels any input request that returns true for the given predicate function
|
||||
local function cancel_input_request(pred)
|
||||
for i = #queue, 1, -1 do
|
||||
if pred(i) then
|
||||
req = remove_request(i)
|
||||
send_response{ err = "cancelled", response = req.response, source = req.source }
|
||||
|
||||
--if we're removing the first item then that means the coroutine is waiting for a response
|
||||
--we will need to tell the coroutine to resume, upon which it will move to the next request
|
||||
--if there is something in the buffer then save it to the history before erasing it
|
||||
if i == 1 then
|
||||
local old_line = line
|
||||
if old_line ~= "" then table.insert(histories[req.id].list, old_line) end
|
||||
clear()
|
||||
coroutine.resume(co)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
mp.register_script_message("cancel-user-input/uid", function(uid)
|
||||
cancel_input_request(function(i) return queue[i].response == uid end)
|
||||
end)
|
||||
|
||||
-- removes all requests with the specified id from the queue
|
||||
mp.register_script_message("cancel-user-input/id", function(id)
|
||||
cancel_input_request(function(i) return queue[i].id == id end)
|
||||
end)
|
||||
|
||||
-- ensures a request has the correct fields and is correctly formatted
|
||||
local function format_request_fields(req)
|
||||
assert(req.version, "input requests require an API version string")
|
||||
if not string.find(req.version, API_MAJOR_MINOR, 1, true) then
|
||||
error(("input request has invalid version: expected %s.x, got %s"):format(API_MAJOR_MINOR, req.version))
|
||||
end
|
||||
|
||||
assert(req.response, "input requests require a response string")
|
||||
assert(req.id, "input requests require an id string")
|
||||
|
||||
req.text = ass_escape(req.request_text or "")
|
||||
req.default_input = req.default_input or ""
|
||||
req.cursor_pos = tonumber(req.cursor_pos) or 1
|
||||
req.id = req.id or "mpv"
|
||||
|
||||
if req.cursor_pos ~= 1 then
|
||||
if req.cursor_pos < 1 then req.cursor_pos = 1
|
||||
elseif req.cursor_pos > #req.default_input then req.cursor_pos = #req.default_input + 1 end
|
||||
end
|
||||
|
||||
if not histories[req.id] then histories[req.id] = {pos = 1, list = {}} end
|
||||
req.history = histories[req.id]
|
||||
return req
|
||||
end
|
||||
|
||||
-- updates the fields of a specific request
|
||||
mp.register_script_message("update-user-input/uid", function(uid, req_opts)
|
||||
req_opts = utils.parse_json(req_opts)
|
||||
req_opts.response = uid
|
||||
for i, req in ipairs(queue) do
|
||||
if req.response == uid then
|
||||
local success, result = pcall(format_request_fields, req_opts)
|
||||
if not success then return msg.error(result) end
|
||||
|
||||
queue[i] = result
|
||||
if i == 1 then request = queue[1] end
|
||||
update()
|
||||
return
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
--the function that parses the input requests
|
||||
local function input_request(req)
|
||||
req = format_request_fields(req)
|
||||
push_request(req)
|
||||
end
|
||||
|
||||
-- script message to recieve input requests, get-user-input.lua acts as an interface to call this script message
|
||||
mp.register_script_message("request-user-input", function(req)
|
||||
msg.debug(req)
|
||||
req = utils.parse_json(req)
|
||||
local success, err = pcall(input_request, req)
|
||||
if not success then
|
||||
send_response{ err = err, response = req.response, source = req.source}
|
||||
msg.error(err)
|
||||
end
|
||||
end)
|
||||
|
2734
.config/mpv/scripts/webm.lua
Normal file
2734
.config/mpv/scripts/webm.lua
Normal file
File diff suppressed because it is too large
Load diff
|
@ -672,4 +672,3 @@ may consider it more useful to permit linking proprietary applications with
|
|||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
|
74
.config/mpv/scripts/webtorrent-hook/README.org
Normal file
74
.config/mpv/scripts/webtorrent-hook/README.org
Normal file
|
@ -0,0 +1,74 @@
|
|||
* About
|
||||
This plugin allows mpv to stream magnet links (and any other torrent identifier [[https://github.com/webtorrent/webtorrent-cli][webtorrent-cli]] handles) directly. It will automatically remove videos after they are finished playing (by default) and will set the title to be the name of the video.
|
||||
|
||||
This script will detect =magnet:= links, torrent files/urls ending in =torrent=, and info hashes. You can also explicitly prefix the identifier with =webtorrent://= to let this plugin know the path/url is a torrent (e.g. you could do this to play a torrent file that didn't end in =torrent=)
|
||||
|
||||
* Comparison with using ~webtorrent --mpv~
|
||||
One benefit is consistency of syntax (e.g. if you have a shell command or keybinding to call ~mpv <clipboard>~, you don't need to handle torrents differently).
|
||||
|
||||
This script also provides more functionality and options. For example, it can automatically delete downloaded files, and it can remember and jump to the last video you played in a torrent file with multiple videos. See the settings heading below for more information.
|
||||
|
||||
Another reason you might want to use this script is that you can start mpv with a playlist of multiple magnet links or add magnet links to the playlist of an already open mpv window (e.g. using one of the scripts that allow appending a link from the clipboard to the playlist such as [[https://github.com/Eisa01/mpv-scripts#smartcopypaste-ii-script][SmartCopyPaste-II]]).
|
||||
|
||||
By using this script, you can also see mpv output (which is hidden when calling ~webtorrent~ directly). On the other hand, you won't be able to see both the normal ~webtorrent~ output and mpv's output at the same time. By default, this script will print the download speed while waiting for the video to load (see the information on the =webtorrent_verbosity= setting below for more options).
|
||||
|
||||
* Requirements
|
||||
- [[https://github.com/webtorrent/webtorrent-cli][webtorrent-cli]]
|
||||
- on linux (or maybe similar)
|
||||
- basic shell utilities (bash, awk, grep, nohup, tail)
|
||||
- [[https://github.com/stedolan/jq][jq]]
|
||||
- [[https://github.com/benibela/xidel][xidel]]
|
||||
|
||||
Webtorrent-cli does not currently provide a way to get a json list of files which is why jq and xidel are required.
|
||||
|
||||
* Installation Instructions
|
||||
Clone this repo into the mpv scripts directory (e.g. =git clone <url> ~/.config/mpv/scripts/webtorrent-hook=). You must put this whole directory in the scripts directory not just the lua file.
|
||||
|
||||
* Comparison with Peerflix-hook
|
||||
Peerflix is unmaintained, and webtorrent is supposedly significantly faster.
|
||||
|
||||
Peerflix's output is not parseable, so the peerflix version of this script had to do a bunch of extra work with ~lsof~ to figure out the location of video files, the title of video files, and the process id of peerflix (in order to kill it). This script is a lot cleaner by comparison (though it could be better if webtorrent had a way to give [[https://github.com/webtorrent/webtorrent-cli/issues/132][more script-friendly output]]).
|
||||
|
||||
This script also has a lot more functionality than the peerflix version (e.g support for torrents containing multiple media files).
|
||||
|
||||
* Comparison With Btfs-stream
|
||||
Webtorrent has parseable output but is still not very script friendly. [[https://github.com/noctuid/mpv-btfs-stream][mpv-btfs-stream]] is cleaner and simpler by comparison and does not rely on parsing output. The advantage of webtorrent over btfs is that webtorrent is much faster. Functionally, I am not aware of any downsides of using webtorrent-hook instead of btfs-stream though. See [[https://github.com/noctuid/mpv-btfs-hook#comparison-with-mpv-webtorrent-hook][here]] for a full comparison.
|
||||
|
||||
* Comparison with webtorrent-mpv-hook
|
||||
There is a similarly named plugin [[https://github.com/mrxdst/webtorrent-mpv-hook][webtorrent-mpv-hook]] which directly uses the webtorrent library instead of webtorrent-cli.
|
||||
|
||||
Here are advantages of the other plugin:
|
||||
- it directly uses the webtorrent library, which simplifies how the code works somewhat
|
||||
- it has a much prettier speed/progress display while you are waiting for the torrent to start
|
||||
|
||||
Here are missing features of the other plugin:
|
||||
- it has no option to delete files after exiting mpv
|
||||
- it has no option to continue seeding after exiting mpv
|
||||
- it does not remember the last file played for previously played torrents (it will always start at the first file)
|
||||
- it does not work correctly with scripts that allow pasting a path/url into the playlist (it only supports one webtorrent instance; this plugin supports an arbitrary number of webtorrent-cli instances)
|
||||
|
||||
* Configuration
|
||||
In =~/.config/mpv/script-opts/webtorrent-hook.conf=, you can change the following settings:
|
||||
- =close_webtorrent= - whether to close webtorrent after unloading the video; if =no=, keep seeding (default: =yes=)
|
||||
- =remove_files= - whether to remove the video file from disk after unloading; =yes= only has an effect if =close_webtorrent= is also =yes= (default: =yes=)
|
||||
- =download_directory= - directory to download videos to; the script will run mpv's =expand-path= command on the string first so that mpv path abbreviations such as =~/= and =~~/= can be used (default: =/tmp/webtorrent-hook=)
|
||||
- =webtorrent_flags= - json array of extra flags to pass to webtorrent (default: []; flags always used: =webtorrent --port 0 --out <download_directory> --keep-streaming=; keep-streaming is always passed, and =close_webtorrent= determines whether or not to stop webtorrent)
|
||||
- =show_speed= - whether to continuously output webtorrent-cli's download speed line; the output stops once the video is loaded to prevent clobbering mpv's output (default: =yes=)
|
||||
- =remember_last_played= - whether to store the last played video in a title and start at it in the future (default: =yes=)
|
||||
- =remember_directory= - directory to store last played information in; make this something outside of =/tmp= if you want it to be remembered after computer reboot (default: =/tmp/webtorrent-hook-last-played=)
|
||||
|
||||
If you set =close_webtorrent= to =no=, you will have to manually kill the =WebTorrent= processes yourself when you want to stop seeding (~pgrep WebTorrent~ should show all processes).
|
||||
|
||||
Here is an example configuration file:
|
||||
#+begin_src conf-unix
|
||||
close_webtorrent=yes
|
||||
remove_files=yes
|
||||
# change download directory
|
||||
download_directory=~/tmp/webtorrent-hook
|
||||
# do not use --out, --keep-streaming, --port or most other flags (should be
|
||||
# obvious; don't use --quiet, --mpv, etc.)
|
||||
webtorrent_flags=["--blocklist", "<blocklist url>"]
|
||||
show_speed=no
|
||||
remember_last_played=yes
|
||||
remember_directory=~/tmp/webtorrent-remember
|
||||
#+end_src
|
249
.config/mpv/scripts/webtorrent-hook/main.lua
Normal file
249
.config/mpv/scripts/webtorrent-hook/main.lua
Normal file
|
@ -0,0 +1,249 @@
|
|||
-- TODO start webtorrent instance immediately when pasting into playlist instead
|
||||
-- of waiting for load?
|
||||
-- TODO what happens with --prefetch-playlist?
|
||||
|
||||
local settings = {
|
||||
close_webtorrent = true,
|
||||
remove_files = true,
|
||||
download_directory = "/tmp/webtorrent-hook",
|
||||
webtorrent_flags = [[]],
|
||||
show_speed = true,
|
||||
remember_last_played = true,
|
||||
remember_directory = "/tmp/webtorrent-hook-last-played"
|
||||
}
|
||||
|
||||
(require "mp.options").read_options(settings, "webtorrent-hook")
|
||||
|
||||
local utils = require "mp.utils";
|
||||
|
||||
local webtorrent_instances = {}
|
||||
local webtorrent_files = {}
|
||||
local script_dir = mp.get_script_directory()
|
||||
local printer_pid = nil
|
||||
|
||||
-- * Helpers
|
||||
-- http://lua-users.org/wiki/StringRecipes
|
||||
function ends_with(str, ending)
|
||||
return ending == "" or str:sub(-#ending) == ending
|
||||
end
|
||||
|
||||
function read_file(file)
|
||||
local fh = assert(io.open(file, "rb"))
|
||||
local contents = fh:read("*all")
|
||||
fh:close()
|
||||
return contents
|
||||
end
|
||||
|
||||
function write_file(file, text)
|
||||
local fh = io.open(file, "w")
|
||||
fh:write(text)
|
||||
fh:close()
|
||||
end
|
||||
|
||||
function is_handled_url(url, load_failed)
|
||||
if load_failed then
|
||||
-- info hash
|
||||
return (load_failed and string.match(url, "%w+"))
|
||||
else
|
||||
return (url:find("magnet:") == 1 or url:find("peerflix://") == 1
|
||||
or url:find("webtorrent://") == 1 or ends_with(url, "torrent"))
|
||||
end
|
||||
end
|
||||
|
||||
function load_file_after_current(url, option_table, num_entries)
|
||||
mp.command_native({
|
||||
"loadfile", url, "append", -1, option_table
|
||||
})
|
||||
local index = mp.get_property("playlist-pos")
|
||||
mp.command_native({
|
||||
"playlist-move",
|
||||
mp.get_property("playlist-count") - 1,
|
||||
index + 1 + num_entries
|
||||
})
|
||||
end
|
||||
|
||||
-- * Store Last Played Files
|
||||
function file_info_hash(filename)
|
||||
return webtorrent_files[filename]
|
||||
end
|
||||
|
||||
function get_remember_file_path(info_hash)
|
||||
return utils.join_path(settings.remember_directory, info_hash)
|
||||
end
|
||||
|
||||
function maybe_store_last_played_torrent_file(_)
|
||||
if settings.remember_last_played then
|
||||
mp.commandv("run", "mkdir", "-p", settings.remember_directory)
|
||||
local filename = mp.get_property("media-title")
|
||||
local info_hash = file_info_hash(filename)
|
||||
if info_hash ~= nil then
|
||||
local remember_file = get_remember_file_path(info_hash)
|
||||
write_file(remember_file, filename)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
mp.register_event("file-loaded", maybe_store_last_played_torrent_file)
|
||||
|
||||
function get_last_played_filename_for_torrent(info_hash)
|
||||
local remember_file = get_remember_file_path(info_hash)
|
||||
if utils.file_info(remember_file) then
|
||||
return read_file(remember_file)
|
||||
end
|
||||
end
|
||||
|
||||
-- * Play Torrents
|
||||
function load_webtorrent_files(info_hash, webtorrent_info)
|
||||
local first = true
|
||||
local found_last_played = false
|
||||
local last_played_filename = ""
|
||||
if settings.remember_last_played then
|
||||
last_played_filename = get_last_played_filename_for_torrent(info_hash)
|
||||
end
|
||||
local should_remember = settings.remember_last_played
|
||||
and last_played_filename
|
||||
local file_index = 0
|
||||
local file_play_index = 0
|
||||
for _, file in pairs(webtorrent_info["files"]) do
|
||||
local title = file["title"]
|
||||
webtorrent_files[title] = info_hash
|
||||
local option_table = {}
|
||||
-- TODO is it actually necessary to set force-media-title for sub
|
||||
-- plugins? it seems to be correctly set by default for what I've
|
||||
-- tried
|
||||
option_table["force-media-title"] = title
|
||||
local url = file["url"]
|
||||
if first then
|
||||
load_file_after_current(url, option_table, 0)
|
||||
mp.command_native({"playlist-remove", mp.get_property("playlist-pos")})
|
||||
else
|
||||
load_file_after_current(url, option_table,
|
||||
file_index - (file_play_index + 1))
|
||||
if should_remember and not found_last_played then
|
||||
file_play_index = file_play_index + 1
|
||||
mp.set_property("playlist-pos", mp.get_property("playlist-pos") + 1)
|
||||
if title == last_played_filename then
|
||||
found_last_played = true
|
||||
end
|
||||
end
|
||||
end
|
||||
file_index = file_index + 1
|
||||
first = false
|
||||
end
|
||||
end
|
||||
|
||||
function maybe_kill_printer()
|
||||
if printer_pid then
|
||||
mp.commandv("run", "kill", printer_pid)
|
||||
printer_pid = nil
|
||||
end
|
||||
end
|
||||
|
||||
mp.register_event("file-loaded", maybe_kill_printer)
|
||||
|
||||
function start_speed_printer(out_dir)
|
||||
if utils.file_info(utils.join_path(out_dir, "webtorrent-output")) then
|
||||
local speed_printer_path =
|
||||
utils.join_path(script_dir, "webtorrent-speed-printer.sh")
|
||||
os.execute(speed_printer_path .. ' "' .. out_dir .. '"')
|
||||
printer_pid = read_file(utils.join_path(out_dir, "printer.pid"))
|
||||
end
|
||||
end
|
||||
|
||||
function start_webtorrent(url, torrent_info)
|
||||
local base_dir = mp.command_native({
|
||||
"expand-path", settings.download_directory
|
||||
})
|
||||
local info_hash = torrent_info["infoHash"]
|
||||
local out_dir = utils.join_path(base_dir, info_hash)
|
||||
|
||||
local wrapper_path =
|
||||
utils.join_path(script_dir, "webtorrent-wrap.sh")
|
||||
local webtorrent_args = {wrapper_path, out_dir, url}
|
||||
local flags = utils.parse_json(settings.webtorrent_flags)
|
||||
if flags ~= nil then
|
||||
for _, flag in pairs(flags) do
|
||||
table.insert(webtorrent_args, flag)
|
||||
end
|
||||
end
|
||||
mp.msg.info("Waiting for webtorrent server")
|
||||
local webtorrent_result = mp.command_native({
|
||||
name = "subprocess",
|
||||
playback_only = false,
|
||||
capture_stdout = true,
|
||||
args = webtorrent_args
|
||||
})
|
||||
if webtorrent_result.status == 0 then
|
||||
mp.msg.info("Webtorrent server is up")
|
||||
local webtorrent_info = utils.parse_json(webtorrent_result.stdout)
|
||||
local pid = webtorrent_info["pid"]
|
||||
mp.msg.debug(webtorrent_info)
|
||||
local name = "Unknown name"
|
||||
if torrent_info["name"] ~= nil then
|
||||
name = torrent_info["name"]
|
||||
end
|
||||
table.insert(webtorrent_instances,
|
||||
{download_dir=out_dir,pid=pid,name=name})
|
||||
|
||||
if settings.show_speed then
|
||||
start_speed_printer(out_dir)
|
||||
end
|
||||
|
||||
load_webtorrent_files(info_hash, webtorrent_info)
|
||||
else
|
||||
mp.msg.info("Failed to start webtorrent")
|
||||
end
|
||||
end
|
||||
|
||||
-- check if the url is a torrent and play it if it is
|
||||
function maybe_play_torrent(load_failed)
|
||||
local url = mp.get_property("stream-open-filename")
|
||||
if is_handled_url(url, load_failed) then
|
||||
if url:find("webtorrent://") == 1 then
|
||||
url = url:sub(14)
|
||||
end
|
||||
if url:find("peerflix://") == 1 then
|
||||
url = url:sub(12)
|
||||
end
|
||||
|
||||
local torrent_info_command = mp.command_native({
|
||||
name = "subprocess",
|
||||
playback_only = false,
|
||||
capture_stdout = true,
|
||||
args = {"webtorrent", "info", url},
|
||||
})
|
||||
if torrent_info_command.status == 0 then
|
||||
local torrent_info = utils.parse_json(torrent_info_command.stdout)
|
||||
local info_hash = torrent_info["infoHash"]
|
||||
if info_hash ~= nil then
|
||||
start_webtorrent(url, torrent_info)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function check_if_torrent_on_load()
|
||||
maybe_play_torrent(false)
|
||||
end
|
||||
|
||||
function check_if_torrent_on_load_fail()
|
||||
maybe_play_torrent(true)
|
||||
end
|
||||
|
||||
function webtorrent_cleanup()
|
||||
if settings.close_webtorrent then
|
||||
for _, instance in pairs(webtorrent_instances) do
|
||||
mp.msg.verbose("Killing WebTorrent pid " .. instance.pid)
|
||||
mp.commandv("run", "kill", instance.pid)
|
||||
if settings.remove_files then
|
||||
mp.msg.verbose("Removing files for torrent " .. instance.name)
|
||||
mp.commandv("run", "rm", "-r", instance.download_dir)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
mp.add_hook("on_load", 50, check_if_torrent_on_load)
|
||||
mp.add_hook("on_load_fail", 50, check_if_torrent_on_load_fail)
|
||||
|
||||
mp.register_event("shutdown", webtorrent_cleanup)
|
9
.config/mpv/scripts/webtorrent-hook/webtorrent-speed-printer.sh
Executable file
9
.config/mpv/scripts/webtorrent-hook/webtorrent-speed-printer.sh
Executable file
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env bash
|
||||
out_dir=$1
|
||||
output_file="$out_dir"/webtorrent-output
|
||||
printer_pid_file="$out_dir"/printer.pid
|
||||
|
||||
tail -f "$output_file" \
|
||||
| awk '/Speed:/ { printf ("\r%s%s%s", "\033[1;31m", $0, "\033[0m "); }' \
|
||||
>&2 &
|
||||
echo -n $! > "$printer_pid_file"
|
46
.config/mpv/scripts/webtorrent-hook/webtorrent-wrap.sh
Executable file
46
.config/mpv/scripts/webtorrent-hook/webtorrent-wrap.sh
Executable file
|
@ -0,0 +1,46 @@
|
|||
#!/usr/bin/env bash
|
||||
out_dir=$1
|
||||
shift
|
||||
mkdir -p "$out_dir"
|
||||
|
||||
# using file over pipe so multiple processes can read from it and because >(tee
|
||||
# "$pipe" "$second-pipe-or file") ends up blocking mpv
|
||||
webtorrent_output_file="$out_dir"/webtorrent-output
|
||||
nohup webtorrent download "$@" --port 0 --out "$out_dir" --keep-seeding \
|
||||
&> "$webtorrent_output_file" &
|
||||
pid=$!
|
||||
|
||||
cleanup() {
|
||||
if (( $? == 1 )); then
|
||||
# kill webtorrent if exit with error
|
||||
kill $pid
|
||||
fi
|
||||
}
|
||||
# shellcheck disable=SC2064
|
||||
trap cleanup EXIT
|
||||
|
||||
url=$(tail -f "$webtorrent_output_file" \
|
||||
| awk '/Server running at: ?/ {gsub(/Server running at: ?/, ""); print $1; exit}')
|
||||
|
||||
base_url=$(echo "$url" | grep --extended-regexp --only-matching \
|
||||
'http://localhost:[0-9]+')
|
||||
webtorrent_hash=$(echo "$url" | grep --extended-regexp --only-matching \
|
||||
'webtorrent/[0-9a-f]+')
|
||||
|
||||
# Get json of files
|
||||
webtorrent_results=$(xidel --silent --extract "//a/@href" "$base_url/$webtorrent_hash" |
|
||||
jq --null-input --raw-input "
|
||||
{
|
||||
pid: $pid,
|
||||
files: [inputs | select(length>0)] | map({title: . | sub(\"/$webtorrent_hash/\"; \"\"), url: (\"$base_url\" + .)})
|
||||
}
|
||||
")
|
||||
|
||||
# Uncomment for debugging info
|
||||
# echo "$webtorrent_results" > ~/webtorrent-wrap.log
|
||||
# echo "URL - $url" >> ~/webtorrent-wrap.log
|
||||
# echo "WEBTORRENT_HASH - $webtorrent_hash" >> ~/webtorrent-wrap.log
|
||||
# echo "BASE_URL - $base_url" >> ~/webtorrent-wrap.log
|
||||
|
||||
# Print results
|
||||
echo "$webtorrent_results"
|
|
@ -1,4 +1,3 @@
|
|||
prefix=${XDG_DATA_HOME}/npm
|
||||
cache=${XDG_CACHE_HOME}/npm
|
||||
tmp=${XDG_RUNTIME_DIR}/npm
|
||||
init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js
|
||||
|
|
|
@ -1,5 +1,16 @@
|
|||
vim.keymap.set({ "n", "x" }, "]#", [[/^#\+ .*<CR>]], { desc = "Next Heading", buffer = true })
|
||||
vim.keymap.set({ "n", "x" }, "[#", [[?^#\+ .*<CR>]], { desc = "Prev Heading", buffer = true })
|
||||
vim.keymap.set({ "n", "x" }, "gj", [[/^#\+ .*<CR>]], { desc = "Next Heading", buffer = true })
|
||||
vim.keymap.set({ "n", "x" }, "gk", [[?^#\+ .*<CR>]], { desc = "Prev Heading", buffer = true })
|
||||
|
||||
-- Bold selected text
|
||||
vim.keymap.set("n", "<C-b>", function()
|
||||
vim.cmd("normal viw")
|
||||
vim.cmd("normal 2gsa*")
|
||||
end, { desc = "Bold Selection" })
|
||||
vim.keymap.set("v", "<C-b>", function()
|
||||
vim.cmd("normal 2gsa*")
|
||||
end, { desc = "Bold Selection" })
|
||||
|
||||
-- stylua: ignore start
|
||||
if LazyVim.has("markdowny.nvim") then
|
||||
|
|
|
@ -1,46 +1,59 @@
|
|||
{
|
||||
"LazyVim": { "branch": "main", "commit": "3f034d0a7f58031123300309f2efd3bb0356ee21" },
|
||||
"SchemaStore.nvim": { "branch": "main", "commit": "442901b78dca4da1078b32e25e1afb32460e0082" },
|
||||
"LazyVim": { "branch": "main", "commit": "25abbf546d564dc484cf903804661ba12de45507" },
|
||||
"SchemaStore.nvim": { "branch": "main", "commit": "a28cc71857f11a7370d81f5ba3c1f5bb8383b732" },
|
||||
"autolist.nvim": { "branch": "main", "commit": "5f70a5f99e96c8fe3069de042abd2a8ed2deb855" },
|
||||
"blink.cmp": { "branch": "main", "commit": "cb5e346d9e0efa7a3eee7fd4da0b690c48d2a98e" },
|
||||
"blink.cmp": { "branch": "main", "commit": "bae4bae0eedd1fa55f34b685862e94a222d5c6f8" },
|
||||
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
|
||||
"catppuccin": { "branch": "main", "commit": "5b5e3aef9ad7af84f463d17b5479f06b87d5c429" },
|
||||
"conform.nvim": { "branch": "master", "commit": "372fc521f8421b7830ea6db4d6ea3bae1c77548c" },
|
||||
"dial.nvim": { "branch": "master", "commit": "2c7e2750372918f072a20f3cf754d845e143d7c9" },
|
||||
"catppuccin": { "branch": "main", "commit": "3aaf3ab60221bca8edb1354e41bd514a22c89de2" },
|
||||
"conform.nvim": { "branch": "master", "commit": "973f3cb73887d510321653044791d7937c7ec0fa" },
|
||||
"dial.nvim": { "branch": "master", "commit": "78bd73aaf2b9c8f80715a878feaf56f7ffa8b6ff" },
|
||||
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
|
||||
"edgy.nvim": { "branch": "main", "commit": "7e8dedc39abebe40c289b8012cc89b11c69aa7a0" },
|
||||
"flash.nvim": { "branch": "main", "commit": "3c942666f115e2811e959eabbdd361a025db8b63" },
|
||||
"friendly-snippets": { "branch": "main", "commit": "fc8f183479a472df60aa86f00e295462f2308178" },
|
||||
"gitsigns.nvim": { "branch": "main", "commit": "9cd665f46ab7af2e49d140d328b8e72ea1cf511b" },
|
||||
"friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
|
||||
"gitsigns.nvim": { "branch": "main", "commit": "6e3c66548035e50db7bd8e360a29aec6620c3641" },
|
||||
"grapple.nvim": { "branch": "main", "commit": "b41ddfc1c39f87f3d1799b99c2f0f1daa524c5f7" },
|
||||
"grug-far.nvim": { "branch": "main", "commit": "631331f9c6611b1a47e887f50b92b7cf450f51e7" },
|
||||
"grug-far.nvim": { "branch": "main", "commit": "385d1949dc21d0c39e7a74b4f4a25da18817bc86" },
|
||||
"kulala.nvim": { "branch": "main", "commit": "65d102f65cfee9f338ba8a0bd43187a7cac898e9" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
|
||||
"lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
|
||||
"lualine.nvim": { "branch": "master", "commit": "15884cee63a8c205334ab13ab1c891cd4d27101a" },
|
||||
"lualine.nvim": { "branch": "master", "commit": "b8c23159c0161f4b89196f74ee3a6d02cdc3a955" },
|
||||
"markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" },
|
||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" },
|
||||
"mason-nvim-dap.nvim": { "branch": "main", "commit": "86389a3dd687cfaa647b6f44731e492970034baa" },
|
||||
"mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" },
|
||||
"mini.ai": { "branch": "main", "commit": "e139eb1101beb0250fea322f8c07a42f0f175688" },
|
||||
"mini.icons": { "branch": "main", "commit": "397ed3807e96b59709ef3292f0a3e253d5c1dc0a" },
|
||||
"mini.pairs": { "branch": "main", "commit": "69864a2efb36c030877421634487fd90db1e4298" },
|
||||
"mini.surround": { "branch": "main", "commit": "5aab42fcdcf31fa010f012771eda5631c077840a" },
|
||||
"mini.ai": { "branch": "main", "commit": "1cd4f021a05c29acd4ab511c0981da14217daf38" },
|
||||
"mini.icons": { "branch": "main", "commit": "b8f6fa6f5a3fd0c56936252edcd691184e5aac0c" },
|
||||
"mini.pairs": { "branch": "main", "commit": "1e1ca3f60f58d4050bf814902b472eec9963a5dd" },
|
||||
"mini.surround": { "branch": "main", "commit": "7a8606333affe7ce637a0ba91bbafc46fc42bfa0" },
|
||||
"neo-tree.nvim": { "branch": "main", "commit": "8c6349bceb1d8a863964dd25dc7944d588a56aaa" },
|
||||
"neotest": { "branch": "master", "commit": "ce178308ea30f96667f1c11f022880d8c04cafd3" },
|
||||
"neotest-jest": { "branch": "main", "commit": "46ccc50273838f0b48e3c4814c1c46c0ccfe9edf" },
|
||||
"neotest-mocha": { "branch": "main", "commit": "8239023d299a692784176f202f6a4a5e0a698ad2" },
|
||||
"neotest-python": { "branch": "master", "commit": "ed9b4d794b89044cc32e5476e637936331473c6e" },
|
||||
"neotest-vitest": { "branch": "main", "commit": "a6099e1fb55a2c2851da3dd0f4d510af9a234c92" },
|
||||
"noice.nvim": { "branch": "main", "commit": "0427460c2d7f673ad60eb02b35f5e9926cf67c59" },
|
||||
"nui.nvim": { "branch": "main", "commit": "8d5b0b568517935d3c84f257f272ef004d9f5a59" },
|
||||
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
|
||||
"nvim-dap": { "branch": "master", "commit": "a479e25ed5b5d331fb46ee4b9e160ff02ac64310" },
|
||||
"nvim-dap-python": { "branch": "master", "commit": "261ce649d05bc455a29f9636dc03f8cdaa7e0e2c" },
|
||||
"nvim-dap-ui": { "branch": "master", "commit": "cf91d5e2d07c72903d052f5207511bf7ecdb7122" },
|
||||
"nvim-dap-view": { "branch": "main", "commit": "c0611ef470515e4ec7f6ffbe57b38ea640b8573b" },
|
||||
"nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" },
|
||||
"nvim-highlight-colors": { "branch": "main", "commit": "b42a5ccec7457b44e89f7ed3b3afb1b375bb2093" },
|
||||
"nvim-jqx": { "branch": "master", "commit": "07393e80fa8097e82f9038fec05e948fe8a60fd1" },
|
||||
"nvim-lint": { "branch": "master", "commit": "9dfb77ef6c5092a19502883c02dc5a02ec648729" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "88d0824d85c0f74a012521d25678a5b01c76feb1" },
|
||||
"nvim-treesitter": { "branch": "master", "commit": "3b308861a8d7d7bfbe9be51d52e54dcfd9fe3d38" },
|
||||
"nvim-treesitter-textobjects": { "branch": "master", "commit": "ed373482db797bbf71bdff37a15c7555a84dce47" },
|
||||
"nvim-lint": { "branch": "master", "commit": "7ef127aaede2a4d5ad8df8321e2eb4e567f29594" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "45ff1914044de7dbd4cd85053dc09f47312a2f4d" },
|
||||
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
|
||||
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
|
||||
"nvim-treesitter-context": { "branch": "master", "commit": "dca8726fea2c14e1ce6adbaa76a04816fbfaff61" },
|
||||
"nvim-treesitter-textobjects": { "branch": "master", "commit": "71385f191ec06ffc60e80e6b0c9a9d5daed4824c" },
|
||||
"nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" },
|
||||
"nvim_context_vt": { "branch": "master", "commit": "10e13ec47a9bb341192d893e58cf91c61cde4935" },
|
||||
"obsidian.nvim": { "branch": "main", "commit": "4fd01de50c7fea3616f6809f19e9be8d2dc6ce63" },
|
||||
"persistence.nvim": { "branch": "main", "commit": "166a79a55bfa7a4db3e26fc031b4d92af71d0b51" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
|
||||
"py-requirements.nvim": { "branch": "main", "commit": "22da9093a75a33a4e022b86e2d2cd2fb78cdd37d" },
|
||||
"refactoring.nvim": { "branch": "master", "commit": "2be7ea3f10b7e59658f5abf6dffc50b5d61964d6" },
|
||||
"render-markdown.nvim": { "branch": "main", "commit": "5eaa6c2b6bb812a096bef91070549234973966da" },
|
||||
"smart-splits.nvim": { "branch": "master", "commit": "d287d643afd928400aced3c7fa712e7ef3c3f96d" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
|
||||
"py-requirements.nvim": { "branch": "main", "commit": "62363732a45e3200f38b772f4b3c0874f85342ba" },
|
||||
"refactoring.nvim": { "branch": "master", "commit": "74b608dfee827c2372250519d433cc21cb083407" },
|
||||
"render-markdown.nvim": { "branch": "main", "commit": "3da7bb459f6cff03980dd1e106c46f3e62ff4d9f" },
|
||||
"snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" },
|
||||
"suda.vim": { "branch": "master", "commit": "9adda7d195222d4e2854efb2a88005a120296c47" },
|
||||
"todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
|
||||
|
@ -48,10 +61,10 @@
|
|||
"trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" },
|
||||
"ts-comments.nvim": { "branch": "main", "commit": "1bd9d0ba1d8b336c3db50692ffd0955fe1bb9f0c" },
|
||||
"ts-error-translator.nvim": { "branch": "main", "commit": "47e5ba89f71b9e6c72eaaaaa519dd59bd6897df4" },
|
||||
"ts-node-action": { "branch": "master", "commit": "bfaa787cc85d753af3c19245b4142ed727a534b5" },
|
||||
"tsc.nvim": { "branch": "main", "commit": "5bd25bb5c399b6dc5c00392ade6ac6198534b53a" },
|
||||
"vim-wakatime": { "branch": "master", "commit": "e46d7c4f98ee0f40782008dd60cb2a79c377fb1d" },
|
||||
"ts-node-action": { "branch": "master", "commit": "b0850ecd82a508ad846ba250ea13485b0e13321e" },
|
||||
"tsc.nvim": { "branch": "main", "commit": "8c1b4ec6a48d038a79ced8674cb15e7db6dd8ef0" },
|
||||
"vim-wakatime": { "branch": "master", "commit": "3403495670f0ee08887401a28f8430dc4ac67429" },
|
||||
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" },
|
||||
"yanky.nvim": { "branch": "main", "commit": "04775cc6e10ef038c397c407bc17f00a2f52b378" },
|
||||
"yazi.nvim": { "branch": "main", "commit": "312bef6c94c5593f41650d8b1b4da921d0363a6e" }
|
||||
"yazi.nvim": { "branch": "main", "commit": "74460dc4533bde424983702f1257df420455eebe" }
|
||||
}
|
||||
|
|
|
@ -3,34 +3,40 @@
|
|||
"lazyvim.plugins.extras.coding.mini-surround",
|
||||
"lazyvim.plugins.extras.editor.dial",
|
||||
"lazyvim.plugins.extras.editor.refactoring",
|
||||
"lazyvim.plugins.extras.formatting.prettier",
|
||||
"lazyvim.plugins.extras.test.core",
|
||||
"lazyvim.plugins.extras.ui.treesitter-context",
|
||||
"lazyvim.plugins.extras.util.dot",
|
||||
"plugins.extras.coding.blink-extended",
|
||||
"plugins.extras.coding.treesitter.node-action",
|
||||
"plugins.extras.coding.yanky-extended",
|
||||
"plugins.extras.dap.core-extended",
|
||||
"plugins.extras.editor.docs.obsidian",
|
||||
"plugins.extras.editor.flash-extended",
|
||||
"plugins.extras.editor.git.diffview",
|
||||
"plugins.extras.editor.gitsigns-extended",
|
||||
"plugins.extras.editor.marks.grapple",
|
||||
"plugins.extras.editor.suda",
|
||||
"plugins.extras.editor.trouble-extended",
|
||||
"plugins.extras.formatting.prettier-extended",
|
||||
"plugins.extras.lang.docker-extended",
|
||||
"plugins.extras.lang.fish",
|
||||
"plugins.extras.lang.markdown-extended",
|
||||
"plugins.extras.lang.python-extended",
|
||||
"plugins.extras.lang.web.html-css",
|
||||
"plugins.extras.lang.web.typescript-extended",
|
||||
"plugins.extras.lang.web.vue-3-extended",
|
||||
"plugins.extras.linting.eslint-extended",
|
||||
"plugins.extras.lsp.lspconfig-extended",
|
||||
"plugins.extras.lsp.mason-extended",
|
||||
"plugins.extras.ui.bufferline-extended",
|
||||
"plugins.extras.ui.colorschemes.catppuccin",
|
||||
"plugins.extras.ui.context",
|
||||
"plugins.extras.ui.edgy-extended",
|
||||
"plugins.extras.ui.highlight-colors",
|
||||
"plugins.extras.ui.lualine-extended",
|
||||
"plugins.extras.ui.noice-extended",
|
||||
"plugins.extras.ui.which-key-extended",
|
||||
"plugins.extras.util.persistence-extended",
|
||||
"plugins.extras.util.smart-splits",
|
||||
"plugins.extras.util.rest-extended",
|
||||
"plugins.extras.util.snacks-extended",
|
||||
"plugins.extras.util.wakatime",
|
||||
"plugins.extras.util.yazi"
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
local ac = vim.api.nvim_create_autocmd
|
||||
local ag = vim.api.nvim_create_augroup
|
||||
|
||||
-- Disable diagnostics in a .env file
|
||||
ac("BufRead", {
|
||||
pattern = ".env",
|
||||
callback = function()
|
||||
vim.diagnostic.disable(false)
|
||||
end,
|
||||
})
|
||||
-- -- Disable diagnostics in a .env file
|
||||
-- ac("BufRead", {
|
||||
-- pattern = ".env",
|
||||
-- callback = function()
|
||||
-- vim.diagnostic.disable(false)
|
||||
-- end,
|
||||
-- })
|
||||
|
||||
local auto_close_filetype = {
|
||||
"lazy",
|
||||
|
@ -70,14 +70,14 @@ ac("BufEnter", {
|
|||
end,
|
||||
})
|
||||
|
||||
-- Disable eslint on node_modules
|
||||
ac({ "BufNewFile", "BufRead" }, {
|
||||
group = ag("DisableEslintOnNodeModules", { clear = true }),
|
||||
pattern = { "**/node_modules/**", "node_modules", "/node_modules/*" },
|
||||
callback = function()
|
||||
vim.diagnostic.disable(false)
|
||||
end,
|
||||
})
|
||||
-- -- Disable eslint on node_modules
|
||||
-- ac({ "BufNewFile", "BufRead" }, {
|
||||
-- group = ag("DisableEslintOnNodeModules", { clear = true }),
|
||||
-- pattern = { "**/node_modules/**", "node_modules", "/node_modules/*" },
|
||||
-- callback = function()
|
||||
-- vim.diagnostic.disable(false)
|
||||
-- end,
|
||||
-- })
|
||||
|
||||
-- Toggle between relative/absolute line numbers
|
||||
local numbertoggle = ag("numbertoggle", { clear = true })
|
||||
|
@ -113,15 +113,3 @@ ac("BufWritePre", {
|
|||
vim.fn.mkdir(vim.fn.fnamemodify(file, ":p:h"), "p")
|
||||
end,
|
||||
})
|
||||
|
||||
-- Toggle lazygit instead of closing
|
||||
ac("TermOpen", {
|
||||
pattern = "*",
|
||||
callback = function()
|
||||
local term_title = vim.b.term_title
|
||||
if term_title and term_title:match("lazygit") then
|
||||
-- Create lazygit specific mappings
|
||||
vim.keymap.set("t", "q", "<cmd>close<cr>", { buffer = true })
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
|
|
@ -32,7 +32,7 @@ map("n", "<", "<<", { desc = "Deindent" })
|
|||
map("n", ">", ">>", { desc = "Indent" })
|
||||
|
||||
-- Save without formatting
|
||||
map("n", "<A-s>", "<cmd>noautocmd w<CR>", { desc = "Save Without Formatting" })
|
||||
map({ "n", "i" }, "<A-s>", "<cmd>noautocmd w<CR>", { desc = "Save Without Formatting" })
|
||||
|
||||
-- Cursor navigation on insert mode
|
||||
map("i", "<M-h>", "<left>", { desc = "Move Cursor Left" })
|
||||
|
@ -89,6 +89,7 @@ end, { desc = "Tabs" })
|
|||
map("n", "<leader>bf", "<cmd>bfirst<cr>", { desc = "First Buffer" })
|
||||
map("n", "<leader>ba", "<cmd>blast<cr>", { desc = "Last Buffer" })
|
||||
map("n", "<leader>b<tab>", "<cmd>tabnew %<cr>", { desc = "Current Buffer in New Tab" })
|
||||
map("n", "<M-CR>", "<cmd>e #<cr>", { desc = "Switch to Other Buffer" })
|
||||
|
||||
-- Toggle statusline
|
||||
map("n", "<leader>uS", function()
|
||||
|
|
|
@ -6,10 +6,12 @@ vim.loader.enable()
|
|||
|
||||
-- Personal Config and LazyVim global options
|
||||
go.lualine_info_extras = false
|
||||
go.snacks_animate = true
|
||||
go.codeium_cmp_hide = false
|
||||
go.lazygit_config = false
|
||||
go.lazyvim_cmp = "blink"
|
||||
go.lazyvim_picker = "snacks"
|
||||
go.trouble_lualine = false
|
||||
|
||||
-- Define leader key
|
||||
go.mapleader = " "
|
||||
|
@ -21,7 +23,7 @@ go.autoformat = true
|
|||
-- Font
|
||||
go.gui_font_default_size = 10
|
||||
go.gui_font_size = go.gui_font_default_size
|
||||
go.gui_font_face = "JetBrainsMono Nerd Font"
|
||||
go.gui_font_face = "Maple Mono NF"
|
||||
|
||||
-- Enable EditorConfig integration
|
||||
go.editorconfig = true
|
||||
|
@ -38,6 +40,9 @@ o.showcmd = false
|
|||
o.laststatus = 3
|
||||
o.cmdheight = 0
|
||||
|
||||
-- Disable native bufferline
|
||||
o.showtabline = 0
|
||||
|
||||
-- Enable spell checking
|
||||
o.spell = true
|
||||
o.spelllang:append("es")
|
||||
|
@ -52,3 +57,8 @@ if vim.fn.has("nvim-0.10") == 1 then
|
|||
end
|
||||
|
||||
o.conceallevel = 2
|
||||
|
||||
-- Fix the clipboard when using WSL. Install https://github.com/equalsraf/win32yank (https://github.com/microsoft/WSL/issues/4440#issuecomment-1212350183)
|
||||
if os.getenv("WSL_DISTRO_NAME") ~= nil then
|
||||
o.clipboard = "unnamedplus"
|
||||
end
|
||||
|
|
|
@ -37,10 +37,30 @@ return {
|
|||
},
|
||||
})
|
||||
end,
|
||||
ollama31 = function()
|
||||
return require("codecompanion.adapters").extend("ollama", {
|
||||
name = "ollama3.1",
|
||||
schema = {
|
||||
model = {
|
||||
default = "ollama3.1:latest",
|
||||
},
|
||||
},
|
||||
})
|
||||
end,
|
||||
qwen3 = function()
|
||||
return require("codecompanion.adapters").extend("ollama", {
|
||||
name = "qwen3",
|
||||
schema = {
|
||||
model = {
|
||||
default = "qwen3:14b",
|
||||
},
|
||||
},
|
||||
})
|
||||
end,
|
||||
},
|
||||
strategies = {
|
||||
chat = {
|
||||
adapter = "deepseek_r1",
|
||||
adapter = "qwen3",
|
||||
roles = {
|
||||
llm = " CodeCompanion",
|
||||
user = " " .. user:sub(1, 1):upper() .. user:sub(2),
|
||||
|
@ -50,7 +70,7 @@ return {
|
|||
stop = { modes = { n = "<C-c>" } },
|
||||
},
|
||||
},
|
||||
inline = { adapter = "deepseek_r1" },
|
||||
inline = { adapter = "ollama31" },
|
||||
agent = { adapter = "deepseek_r1" },
|
||||
},
|
||||
display = {
|
||||
|
@ -88,4 +108,14 @@ return {
|
|||
})
|
||||
end,
|
||||
},
|
||||
{
|
||||
"saghen/blink.cmp",
|
||||
opts = {
|
||||
sources = {
|
||||
per_filetype = {
|
||||
codecompanion = { "codecompanion" },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -4,11 +4,13 @@ return {
|
|||
keymap = {
|
||||
["<C-k>"] = { "select_prev", "fallback" },
|
||||
["<C-j>"] = { "select_next", "fallback" },
|
||||
["<C-u>"] = { "scroll_documentation_up", "fallback" },
|
||||
["<C-d>"] = { "scroll_documentation_down", "fallback" },
|
||||
},
|
||||
completion = {
|
||||
menu = {
|
||||
border = "rounded",
|
||||
winhighlight = "Normal:BlinkCmpDoc,FloatBorder:BlinkCmpDocBorder,CursorLine:BlinkCmpDocCursorLine,Search:None",
|
||||
scrollbar = true,
|
||||
},
|
||||
documentation = {
|
||||
window = {
|
||||
|
|
|
@ -34,7 +34,11 @@ return {
|
|||
{
|
||||
"<leader>sy",
|
||||
function()
|
||||
vim.cmd([[YankyRingHistory]])
|
||||
if LazyVim.pick.picker.name == "snacks" then
|
||||
Snacks.picker.yanky()
|
||||
else
|
||||
vim.cmd([[YankyRingHistory]])
|
||||
end
|
||||
end,
|
||||
mode = { "n", "v" },
|
||||
desc = "Yank History",
|
||||
|
|
|
@ -1,19 +1,35 @@
|
|||
local prefix = "<leader>d"
|
||||
|
||||
return {
|
||||
{ import = "lazyvim.plugins.extras.dap.core" },
|
||||
{
|
||||
"mfussenegger/nvim-dap",
|
||||
opts = {
|
||||
defaults = {
|
||||
fallback = {
|
||||
external_terminal = {
|
||||
command = "/usr/bin/kitty",
|
||||
args = { "--class", "kitty-dap", "--hold", "--detach", "nvim-dap", "-c", "DAP" },
|
||||
},
|
||||
},
|
||||
dependencies = {
|
||||
"igorlfs/nvim-dap-view",
|
||||
opts = {},
|
||||
config = function(_, opts)
|
||||
local dap = require("dap")
|
||||
dap.listeners.before.attach.dapui_config = function()
|
||||
vim.cmd("DapViewOpen")
|
||||
end
|
||||
dap.listeners.before.launch.dapui_config = function()
|
||||
vim.cmd("DapViewOpen")
|
||||
end
|
||||
dap.listeners.before.event_terminated.dapui_config = function()
|
||||
vim.cmd("DapViewClose")
|
||||
end
|
||||
dap.listeners.before.event_exited.dapui_config = function()
|
||||
vim.cmd("DapViewClose")
|
||||
end
|
||||
end,
|
||||
keys = {
|
||||
{ prefix .. "u", "<cmd>DapViewToggle<cr>", desc = "Dap UI" },
|
||||
},
|
||||
},
|
||||
-- stylua: ignore
|
||||
keys = {
|
||||
{ prefix .. "O", function() require("dap").step_out() end, desc = "Debug: Step out" },
|
||||
{ prefix .. "o", function() require("dap").step_over() end, desc = "Debug: Step over" },
|
||||
{ "<F5>", function() require("dap").continue() end, desc = "Debug: Continue" },
|
||||
{ "<F10>", function() require("dap").step_over() end, desc = "Debug: Step over" },
|
||||
{ "<F11>", function() require("dap").step_into() end, desc = "Debug: Step into" },
|
||||
|
@ -22,12 +38,16 @@ return {
|
|||
{ "<S-F2>", function() require("dap").set_breakpoint(vim.fn.input('Breakpoint condition: ')) end, desc = "Breakpoint Condition" },
|
||||
},
|
||||
},
|
||||
{
|
||||
"rcarriga/nvim-dap-ui",
|
||||
enabled = false,
|
||||
},
|
||||
{
|
||||
"nvim-neotest/neotest",
|
||||
optional = true,
|
||||
-- stylua: ignore
|
||||
keys = {
|
||||
{ "<leader>tL", function() require("neotest").run.run_last({ strategy = "dap" }) end, desc = "Debug Last Test" },
|
||||
{ "<leader>tD", function() require("neotest").run.run_last({ strategy = "dap" }) end, desc = "Debug Last" },
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -11,8 +11,8 @@ return {
|
|||
opts = {
|
||||
save_path = (os.getenv("HOME") .. "/pictures/screenshots/code"),
|
||||
title = "CodeSnap.nvim",
|
||||
code_font_family = "JetBrainsMono Nerd Font",
|
||||
watermark_font_family = "JetBrainsMono Nerd Font",
|
||||
code_font_family = "Maple Mono NF",
|
||||
watermark_font_family = "Maple Mono NF",
|
||||
watermark = "",
|
||||
bg_theme = "summer",
|
||||
},
|
||||
|
|
|
@ -5,24 +5,25 @@ return {
|
|||
{
|
||||
-- "epwalsh/obsidian.nvim",
|
||||
"obsidian-nvim/obsidian.nvim", -- NOTE: Using a fork from the community
|
||||
ft = "markdown",
|
||||
-- ft = "markdown",
|
||||
event = "BufReadPre " .. vim.fn.expand("~") .. "/documents/obsidian/**.md",
|
||||
keys = {
|
||||
{ prefix .. "o", "<cmd>ObsidianOpen<CR>", desc = "Open on App" },
|
||||
{ prefix .. "g", "<cmd>ObsidianSearch<CR>", desc = "Grep" },
|
||||
{ "<leader>sO", "<cmd>ObsidianSearch<CR>", desc = "Obsidian Grep" },
|
||||
{ prefix .. "n", "<cmd>ObsidianNew<CR>", desc = "New Note" },
|
||||
{ prefix .. "<space>", "<cmd>ObsidianQuickSwitch<CR>", desc = "Find Files" },
|
||||
{ prefix .. "b", "<cmd>ObsidianBacklinks<CR>", desc = "Backlinks" },
|
||||
{ prefix .. "t", "<cmd>ObsidianTags<CR>", desc = "Tags" },
|
||||
{ prefix .. "t", "<cmd>ObsidianTemplate<CR>", desc = "Template" },
|
||||
{ prefix .. "l", "<cmd>ObsidianLink<CR>", mode = "v", desc = "Link" },
|
||||
{ prefix .. "L", "<cmd>ObsidianLinks<CR>", desc = "Links" },
|
||||
{ prefix .. "N", "<cmd>ObsidianLinkNew<CR>", mode = "v", desc = "New Link" },
|
||||
{ prefix .. "e", "<cmd>ObsidianExtractNote<CR>", mode = "v", desc = "Extract Note" },
|
||||
{ prefix .. "w", "<cmd>ObsidianWorkspace<CR>", desc = "Workspace" },
|
||||
{ prefix .. "r", "<cmd>ObsidianRename<CR>", desc = "Rename" },
|
||||
{ prefix .. "i", "<cmd>ObsidianPasteImg<CR>", desc = "Paste Image" },
|
||||
{ prefix .. "d", "<cmd>ObsidianDailies<CR>", desc = "Daily Notes" },
|
||||
{ prefix .. "o", "<cmd>Obsidian open<CR>", desc = "Open on App" },
|
||||
{ prefix .. "g", "<cmd>Obsidian search<CR>", desc = "Grep" },
|
||||
{ prefix .. "n", "<cmd>Obsidian new<CR>", desc = "New Note" },
|
||||
{ prefix .. "N", "<cmd>Obsidian new_from_template<CR>", desc = "New Note (Template)" },
|
||||
{ prefix .. "<space>", "<cmd>Obsidian quick_switch<CR>", desc = "Find Files" },
|
||||
{ prefix .. "b", "<cmd>Obsidian backlinks<CR>", desc = "Backlinks" },
|
||||
{ prefix .. "t", "<cmd>Obsidian tags<CR>", desc = "Tags" },
|
||||
{ prefix .. "T", "<cmd>Obsidian template<CR>", desc = "Template" },
|
||||
{ prefix .. "L", "<cmd>Obsidian link<CR>", mode = "v", desc = "Link" },
|
||||
{ prefix .. "l", "<cmd>Obsidian links<CR>", desc = "Links" },
|
||||
{ prefix .. "l", "<cmd>Obsidian link_new<CR>", mode = "v", desc = "New Link" },
|
||||
{ prefix .. "e", "<cmd>Obsidian extract_note<CR>", mode = "v", desc = "Extract Note" },
|
||||
{ prefix .. "w", "<cmd>Obsidian workspace<CR>", desc = "Workspace" },
|
||||
{ prefix .. "r", "<cmd>Obsidian rename<CR>", desc = "Rename" },
|
||||
{ prefix .. "i", "<cmd>Obsidian paste_img<CR>", desc = "Paste Image" },
|
||||
{ prefix .. "d", "<cmd>Obsidian dailies<CR>", desc = "Daily Notes" },
|
||||
},
|
||||
opts = {
|
||||
workspaces = {
|
||||
|
@ -46,37 +47,65 @@ return {
|
|||
blink = true,
|
||||
},
|
||||
|
||||
create_new = false,
|
||||
|
||||
picker = {
|
||||
name = "snacks.pick",
|
||||
note_mappings = {
|
||||
-- Create a new note from your query.
|
||||
new = "<C-x>",
|
||||
-- Insert a link to the selected note.
|
||||
insert_link = "<C-l>",
|
||||
},
|
||||
tag_mappings = {
|
||||
-- Add tag(s) to current note.
|
||||
tag_note = "<C-x>",
|
||||
-- Insert a tag at the current location.
|
||||
insert_tag = "<C-l>",
|
||||
},
|
||||
},
|
||||
|
||||
mappings = {
|
||||
["gf"] = {
|
||||
action = function()
|
||||
return require("obsidian").util.gf_passthrough()
|
||||
end,
|
||||
opts = { noremap = false, expr = true, buffer = true },
|
||||
},
|
||||
["<C-c>"] = {
|
||||
action = function()
|
||||
return require("obsidian").util.toggle_checkbox()
|
||||
end,
|
||||
opts = { buffer = true },
|
||||
},
|
||||
["<cr>"] = {
|
||||
action = function()
|
||||
return require("obsidian").util.smart_action()
|
||||
end,
|
||||
opts = { buffer = true, expr = true },
|
||||
},
|
||||
callbacks = {
|
||||
enter_note = function(_, note)
|
||||
vim.keymap.set("n", "gf", "<cmd>ObsidianFollowLink<cr>", {
|
||||
buffer = note.bufnr,
|
||||
expr = note.expr,
|
||||
noremap = note.noremap,
|
||||
desc = "File Passthrough",
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
new_notes_location = "notes_subdir",
|
||||
|
||||
templates = {
|
||||
subdir = "00 - Data/Plantillas",
|
||||
date_format = "%Y-%m-%d-%a",
|
||||
date_format = "%Y-%m-%d",
|
||||
time_format = "%H:%M",
|
||||
},
|
||||
|
||||
---@param spec { id: string, dir: obsidian.Path, title: string|? }
|
||||
---@return string|obsidian.Path The full path to the new note.
|
||||
note_path_func = function(spec)
|
||||
return spec.title
|
||||
end,
|
||||
|
||||
note_frontmatter_func = function(note)
|
||||
if note.title then
|
||||
note:add_alias(note.title)
|
||||
end
|
||||
|
||||
local out = { aliases = note.aliases }
|
||||
|
||||
if note.metadata ~= nil and not vim.tbl_isempty(note.metadata) then
|
||||
for k, v in pairs(note.metadata) do
|
||||
out[k] = v
|
||||
end
|
||||
end
|
||||
|
||||
return out
|
||||
end,
|
||||
|
||||
follow_url_func = function(url)
|
||||
vim.fn.jobstart({ "xdg-open", url })
|
||||
end,
|
||||
|
@ -85,7 +114,57 @@ return {
|
|||
img_folder = "00 - Data/Documentos",
|
||||
},
|
||||
|
||||
image = {
|
||||
resolve = function(path, src)
|
||||
if require("obsidian.api").path_is_note(path) then
|
||||
return require("obsidian.api").resolve_image_path(src)
|
||||
end
|
||||
end,
|
||||
},
|
||||
|
||||
ui = { enable = false },
|
||||
|
||||
statusline = {
|
||||
enabled = true,
|
||||
format = "{{backlinks}} backlinks | {{words}} words",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"folke/snacks.nvim",
|
||||
keys = {
|
||||
{
|
||||
prefix .. "k",
|
||||
function()
|
||||
Snacks.picker.grep({
|
||||
search = "^\\s*- \\[ \\]",
|
||||
regex = true,
|
||||
dirs = { vim.fn.getcwd() },
|
||||
finder = "grep",
|
||||
format = "file",
|
||||
show_empty = true,
|
||||
supports_live = false,
|
||||
live = false,
|
||||
})
|
||||
end,
|
||||
desc = "Tasks (Unfinished)",
|
||||
},
|
||||
{
|
||||
prefix .. "K",
|
||||
function()
|
||||
Snacks.picker.grep({
|
||||
search = "^\\s*- \\[x\\]:",
|
||||
regex = true,
|
||||
dirs = { vim.fn.getcwd() },
|
||||
finder = "grep",
|
||||
format = "file",
|
||||
show_empty = true,
|
||||
supports_live = false,
|
||||
live = false,
|
||||
})
|
||||
end,
|
||||
desc = "Tasks (Finished)",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -96,4 +175,11 @@ return {
|
|||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"nvim-lualine/lualine.nvim",
|
||||
optional = true,
|
||||
opts = function(_, opts)
|
||||
table.insert(opts.sections.lualine_x, 1, "g:obsidian")
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
local prefix = "<leader>gC"
|
||||
local prefix_conflicts = "<leader>gc"
|
||||
local prefix_diffs = "<leader>gd"
|
||||
|
||||
local function toggle_diffview(cmd)
|
||||
if next(require("diffview.lib").views) == nil then
|
||||
vim.cmd(cmd)
|
||||
|
@ -12,9 +14,9 @@ return {
|
|||
"sindrets/diffview.nvim",
|
||||
-- stylua: ignore
|
||||
keys = {
|
||||
{ "<leader>gD", function() toggle_diffview("DiffviewFileHistory") end, desc = "Diff Repo" },
|
||||
{ "<leader>gd", function() toggle_diffview("DiffviewOpen") end, desc = "Diff View" },
|
||||
{ "<leader>gF", function() toggle_diffview("DiffviewFileHistory %") end, desc = "Diff Current File" },
|
||||
{ prefix_diffs .. "D", function() toggle_diffview("DiffviewFileHistory") end, desc = "Diff Repo" },
|
||||
{ prefix_diffs .. "d", function() toggle_diffview("DiffviewOpen") end, desc = "Diff View" },
|
||||
{ prefix_diffs .. "f", function() toggle_diffview("DiffviewFileHistory %") end, desc = "Diff Current File History" },
|
||||
},
|
||||
opts = function(_, opts)
|
||||
local actions = require("diffview.actions")
|
||||
|
@ -33,24 +35,24 @@ return {
|
|||
opts.keymaps = {
|
||||
--stylua: ignore
|
||||
view = {
|
||||
{ "n", prefix .. "o", actions.conflict_choose("ours"), { desc = "Choose the OURS version of a conflict" } },
|
||||
{ "n", prefix .. "t", actions.conflict_choose("theirs"), { desc = "Choose the THEIRS version of a conflict" } },
|
||||
{ "n", prefix .. "b", actions.conflict_choose("base"), { desc = "Choose the BASE version of a conflict" } },
|
||||
{ "n", prefix .. "a", actions.conflict_choose("all"), { desc = "Choose all the versions of a conflict" } },
|
||||
{ "n", prefix .. "x", actions.conflict_choose("none"), { desc = "Delete the conflict region" } },
|
||||
{ "n", prefix .. "O", actions.conflict_choose_all("ours"), { desc = "Choose the OURS version of a conflict for the whole file" } },
|
||||
{ "n", prefix .. "T", actions.conflict_choose_all("theirs"), { desc = "Choose the THEIRS version of a conflict for the whole file" } },
|
||||
{ "n", prefix .. "B", actions.conflict_choose_all("base"), { desc = "Choose the BASE version of a conflict for the whole file" } },
|
||||
{ "n", prefix .. "A", actions.conflict_choose_all("all"), { desc = "Choose all the versions of a conflict for the whole file" } },
|
||||
{ "n", prefix .. "X", actions.conflict_choose_all("none"), { desc = "Delete the conflict region for the whole file" } },
|
||||
{ "n", prefix_conflicts .. "o", actions.conflict_choose("ours"), { desc = "Ours" } },
|
||||
{ "n", prefix_conflicts .. "t", actions.conflict_choose("theirs"), { desc = "Theirs" } },
|
||||
{ "n", prefix_conflicts .. "b", actions.conflict_choose("base"), { desc = "Base" } },
|
||||
{ "n", prefix_conflicts .. "a", actions.conflict_choose("all"), { desc = "All" } },
|
||||
{ "n", prefix_conflicts .. "d", actions.conflict_choose("none"), { desc = "Delete" } },
|
||||
{ "n", prefix_conflicts .. "O", actions.conflict_choose_all("ours"), { desc = "Ours (File)" } },
|
||||
{ "n", prefix_conflicts .. "T", actions.conflict_choose_all("theirs"), { desc = "Theirs (File)" } },
|
||||
{ "n", prefix_conflicts .. "B", actions.conflict_choose_all("base"), { desc = "Base (File)" } },
|
||||
{ "n", prefix_conflicts .. "A", actions.conflict_choose_all("all"), { desc = "All (File)" } },
|
||||
{ "n", prefix_conflicts .. "D", actions.conflict_choose_all("none"), { desc = "Delete (File)" } },
|
||||
},
|
||||
--stylua: ignore
|
||||
file_panel = {
|
||||
{ "n", prefix .. "O", actions.conflict_choose_all("ours"), { desc = "Choose the OURS version of a conflict for the whole file" } },
|
||||
{ "n", prefix .. "T", actions.conflict_choose_all("theirs"), { desc = "Choose the THEIRS version of a conflict for the whole file" } },
|
||||
{ "n", prefix .. "B", actions.conflict_choose_all("base"), { desc = "Choose the BASE version of a conflict for the whole file" } },
|
||||
{ "n", prefix .. "A", actions.conflict_choose_all("all"), { desc = "Choose all the versions of a conflict for the whole file" } },
|
||||
{ "n", prefix .. "X", actions.conflict_choose_all("none"), { desc = "Delete the conflict region for the whole file" } },
|
||||
{ "n", prefix_conflicts .. "O", actions.conflict_choose_all("ours"), { desc = "Ours (File)" } },
|
||||
{ "n", prefix_conflicts .. "T", actions.conflict_choose_all("theirs"), { desc = "Theirs (File)" } },
|
||||
{ "n", prefix_conflicts .. "B", actions.conflict_choose_all("base"), { desc = "Base (File)" } },
|
||||
{ "n", prefix_conflicts .. "A", actions.conflict_choose_all("all"), { desc = "All (File)" } },
|
||||
{ "n", prefix_conflicts .. "X", actions.conflict_choose_all("none"), { desc = "Delete (File)" } },
|
||||
},
|
||||
}
|
||||
end,
|
||||
|
@ -68,7 +70,8 @@ return {
|
|||
"folke/which-key.nvim",
|
||||
opts = {
|
||||
spec = {
|
||||
{ prefix, group = "conflicts", icon = " " },
|
||||
{ prefix_conflicts, group = "conflicts", icon = " " },
|
||||
{ prefix_diffs, group = "diff", icon = " " },
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
local prefix = "<leader>gC"
|
||||
local prefix = "<leader>gc"
|
||||
|
||||
vim.api.nvim_create_autocmd("User", {
|
||||
pattern = "GitConflictDetected",
|
||||
|
@ -11,27 +11,19 @@ return {
|
|||
{
|
||||
"akinsho/git-conflict.nvim",
|
||||
opts = {
|
||||
default_mappings = {
|
||||
ours = prefix .. "o",
|
||||
theirs = prefix .. "t",
|
||||
none = prefix .. "n",
|
||||
both = prefix .. "b",
|
||||
},
|
||||
},
|
||||
cmd = {
|
||||
"GitConflictChooseTheirs",
|
||||
"GitConflictChooseOurs",
|
||||
"GitConflictChooseBoth",
|
||||
"GitConflictListQf",
|
||||
"GitConflictRefresh",
|
||||
"GitConflictNextConflict",
|
||||
"GitConflictPrevConflict",
|
||||
default_mappings = false,
|
||||
disable_diagnostics = true,
|
||||
},
|
||||
event = "VeryLazy",
|
||||
keys = {
|
||||
{ "]g", "<cmd>GitConflictNextConflict<cr>", desc = "Next Conflict" },
|
||||
{ "[g", "<cmd>GitConflictPrevConflict<cr>", desc = "Previous Conflict" },
|
||||
{ prefix .. "l", "<cmd>GitConflictListQf<cr>", desc = "List Conflicts" },
|
||||
{ prefix .. "r", "<cmd>GitConflictRefresh<cr>", desc = "Refresh Conflicts" },
|
||||
{ prefix .. "b", mode = { "n", "v" }, "<cmd>GitConflictChooseBoth<cr>", desc = "Both" },
|
||||
{ prefix .. "o", mode = { "n", "v" }, "<cmd>GitConflictChooseOurs<cr>", desc = "Ours" },
|
||||
{ prefix .. "t", mode = { "n", "v" }, "<cmd>GitConflictChooseTheirs<cr>", desc = "Theirs" },
|
||||
{ prefix .. "n", mode = { "n", "v" }, "<cmd>GitConflictChooseNone<cr>", desc = "None" },
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
|
@ -2,9 +2,7 @@ return {
|
|||
{
|
||||
"otavioschwanck/arrow.nvim",
|
||||
event = "VeryLazy",
|
||||
opts = {
|
||||
show_icons = true,
|
||||
},
|
||||
opts = {},
|
||||
-- stylua: ignore
|
||||
keys = {
|
||||
{ "<leader>m", function() require("arrow.ui").openMenu() end, desc = "Marks" },
|
||||
|
|
|
@ -4,7 +4,7 @@ local keys = {}
|
|||
|
||||
-- stylua: ignore start
|
||||
for i = 1, 9 do
|
||||
table.insert(keys, { prefix .. i, "<cmd>Grapple select index=" .. i .. "<CR>", desc = "File " .. i })
|
||||
table.insert(keys, { "<leader>" .. i, "<cmd>Grapple select index=" .. i .. "<CR>", desc = "File " .. i })
|
||||
end
|
||||
|
||||
table.insert(keys, { prefix .. "a", "<cmd>Grapple tag<CR>", desc = "Add Mark" })
|
||||
|
@ -65,13 +65,6 @@ return {
|
|||
table.insert(opts.config.center, 5, grapple)
|
||||
end,
|
||||
},
|
||||
{
|
||||
"nvim-lualine/lualine.nvim",
|
||||
optional = true,
|
||||
opts = function(_, opts)
|
||||
table.insert(opts.sections.lualine_c, { require("grapple").statusline, cond = require("grapple").exists })
|
||||
end,
|
||||
},
|
||||
{
|
||||
"folke/which-key.nvim",
|
||||
opts = {
|
||||
|
|
|
@ -1,46 +0,0 @@
|
|||
local prettier = { "prettierd", "prettier", stop_after_first = true }
|
||||
|
||||
return {
|
||||
{ import = "lazyvim.plugins.extras.formatting.prettier" },
|
||||
{
|
||||
"williamboman/mason.nvim",
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"prettierd",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"stevearc/conform.nvim",
|
||||
optional = true,
|
||||
opts = {
|
||||
formatters_by_ft = {
|
||||
["javascript"] = prettier,
|
||||
["javascriptreact"] = prettier,
|
||||
["typescript"] = prettier,
|
||||
["typescriptreact"] = prettier,
|
||||
["vue"] = prettier,
|
||||
["css"] = prettier,
|
||||
["scss"] = prettier,
|
||||
["less"] = prettier,
|
||||
["html"] = prettier,
|
||||
["json"] = prettier,
|
||||
["jsonc"] = prettier,
|
||||
["yaml"] = prettier,
|
||||
["markdown"] = prettier,
|
||||
["markdown.mdx"] = prettier,
|
||||
["graphql"] = prettier,
|
||||
["handlebars"] = prettier,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"luckasRanarison/nvim-devdocs",
|
||||
optional = true,
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"prettier",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
26
.config/nvim/lua/plugins/extras/lang/fish.lua
Normal file
26
.config/nvim/lua/plugins/extras/lang/fish.lua
Normal file
|
@ -0,0 +1,26 @@
|
|||
return {
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"fish",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
opts = {
|
||||
servers = {
|
||||
fish_lsp = {},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"williamboman/mason.nvim",
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"fish-lsp",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
|
@ -1,55 +0,0 @@
|
|||
return {
|
||||
{ import = "lazyvim.plugins.extras.lang.go" },
|
||||
{
|
||||
"williamboman/mason.nvim",
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"golangci-lint",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"ray-x/go.nvim",
|
||||
dependencies = {
|
||||
"ray-x/guihua.lua",
|
||||
"neovim/nvim-lspconfig",
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
},
|
||||
opts = {},
|
||||
ft = { "go", "gomod" },
|
||||
build = function()
|
||||
require("go.install").update_all_sync()
|
||||
end,
|
||||
},
|
||||
{
|
||||
"mfussenegger/nvim-lint",
|
||||
opts = function(_, opts)
|
||||
local function add_linters(tbl)
|
||||
for ft, linters in pairs(tbl) do
|
||||
if opts.linters_by_ft[ft] == nil then
|
||||
opts.linters_by_ft[ft] = linters
|
||||
else
|
||||
vim.list_extend(opts.linters_by_ft[ft], linters)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
add_linters({
|
||||
["go"] = { "golangcilint" },
|
||||
["gomod"] = { "golangcilint" },
|
||||
["gowork"] = { "golangcilint" },
|
||||
})
|
||||
|
||||
return opts
|
||||
end,
|
||||
},
|
||||
{
|
||||
"luckasRanarison/nvim-devdocs",
|
||||
optional = true,
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"go",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
|
@ -44,7 +44,14 @@ return {
|
|||
{
|
||||
"MeanderingProgrammer/render-markdown.nvim",
|
||||
opts = {
|
||||
preset = "lazy",
|
||||
render_modes = { "n", "c", "t" },
|
||||
checkbox = {
|
||||
enabled = true,
|
||||
},
|
||||
heading = {
|
||||
atx = false,
|
||||
},
|
||||
preset = "obsidian",
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue