├── .config ├── anyrun │ ├── applications.ron │ ├── config.ron │ ├── scripts │ │ └── clipboard.sh │ ├── style.css │ └── websearch.ron ├── gtk-3.0 │ ├── bookmarks │ └── settings.ini ├── kitty │ ├── current-theme.conf │ ├── kitty.conf │ ├── kitty.conf.bak │ ├── neighboring_window.py │ ├── relative_resize.py │ └── split_window.py ├── mpv │ ├── fonts │ │ └── Material-Design-Iconic-Font.ttf │ ├── input.conf │ ├── mpv.conf │ ├── script-opts │ │ ├── stats.conf │ │ └── thumbfast.conf │ ├── scripts │ │ ├── modernx.lua │ │ └── thumbfast.lua │ └── shaders │ │ ├── Anime4K_Darken_HQ.glsl │ │ ├── FSRCNNX_x2_8-0-4-1.glsl │ │ ├── KrigBilateral.glsl │ │ ├── SSimDownscaler.glsl │ │ ├── SSimSuperRes.glsl │ │ ├── adaptive-sharpen.glsl │ │ └── filmgrain.hook ├── neofetch │ ├── config.conf │ └── roses.txt ├── niri │ ├── config.kdl │ ├── configs │ │ ├── animations.kdl │ │ ├── binds.kdl │ │ ├── input.kdl │ │ ├── misc.kdl │ │ ├── output.kdl │ │ ├── rules.kdl │ │ └── startup.kdl │ └── themes │ │ ├── dark.kdl │ │ └── light.kdl ├── rofi │ ├── colors │ │ └── tokyonight.rasi │ ├── config.rasi │ └── images │ │ └── z.jpg ├── swaylock │ └── config ├── swaync │ ├── config.json │ ├── s.css │ └── style.css ├── waybar │ ├── colors │ │ ├── catppuccin-latte.css │ │ └── catppuccin-mocha.css │ ├── config.jsonc │ ├── style.css │ └── themes │ │ ├── dark │ │ └── light ├── wlogout │ ├── layout │ ├── lock-hover.png │ ├── lock.png │ ├── logout-hover.png │ ├── logout.png │ ├── power-hover.png │ ├── power.png │ ├── restart-hover.png │ ├── restart.png │ ├── sleep-hover.png │ ├── sleep.png │ └── style.css ├── wofi │ ├── config │ ├── style.css │ └── wallpaper.css └── zsh │ ├── .zsh │ └── catppuccin_mocha-zsh-syntax-highlighting.zsh │ ├── .zshrc │ ├── aliases-late.zsh │ ├── aliases.zsh │ ├── compinit.zsh │ ├── environment.zsh │ ├── functions.zsh │ ├── keybinds-late.zsh │ ├── keybinds.zsh │ ├── lscolors.zsh │ ├── ohmyzsh.zsh │ ├── options.zsh │ └── profile.zsh ├── .scripts ├── combine_configs.sh ├── exec_and_signal.sh ├── record_obs.sh ├── refresh_waybar.sh ├── swayidle.sh ├── swayosd.sh ├── toggle.sh ├── wallpaper.sh ├── waybar.sh ├── window.nu ├── wlogout.sh └── workspaces.sh ├── .zshenv ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md └── SECURITY.md /.config/anyrun/applications.ron: -------------------------------------------------------------------------------- 1 | Config( 2 | desktop_actions: false, 3 | max_entries: 5, 4 | terminal: Some("kitty"), 5 | ) 6 | -------------------------------------------------------------------------------- /.config/anyrun/config.ron: -------------------------------------------------------------------------------- 1 | Config( 2 | x: Fraction(0.5), 3 | y: Absolute(40), 4 | width: Absolute(400), 5 | height: Absolute(0), 6 | hide_icons: false, 7 | hide_plugin_info: true, 8 | max_entries: Some(10), 9 | layer: Overlay, 10 | ignore_exclusive_zones: false, 11 | show_results_immediately: false, 12 | close_on_click: false, 13 | plugins: [ 14 | "libapplications.so", 15 | "libwebsearch.so" 16 | ], 17 | ) 18 | -------------------------------------------------------------------------------- /.config/anyrun/scripts/clipboard.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | selected=$(cliphist list | anyrun --plugins libstdin.so) 4 | 5 | if [ ! -z "$selected" ]; then 6 | cliphist decode <<<"$selected" | wl-copy 7 | fi 8 | -------------------------------------------------------------------------------- /.config/anyrun/style.css: -------------------------------------------------------------------------------- 1 | window#window { 2 | background-color: transparent; 3 | } 4 | 5 | box#main { 6 | padding: 8px; 7 | border: 1px solid @borders; 8 | border-radius: 16px; 9 | background-color: @theme_base_color; 10 | } 11 | 12 | entry#entry { 13 | border-radius: 10px; 14 | box-shadow: none; 15 | } 16 | 17 | list#main { 18 | background-color: transparent; 19 | } 20 | 21 | list#main > row { 22 | padding: 0; 23 | } 24 | list#main > row:hover { 25 | box-shadow: none; 26 | } 27 | 28 | row#match { 29 | border-radius: 10px; 30 | padding: 6px 8px; 31 | margin-top: 8px; 32 | } 33 | 34 | label#match-title { 35 | font-weight: bold; 36 | } 37 | 38 | label#match-desc { 39 | font-size: 0.75rem; 40 | font-weight: bold; 41 | opacity: 0.8; 42 | } 43 | -------------------------------------------------------------------------------- /.config/anyrun/websearch.ron: -------------------------------------------------------------------------------- 1 | Config( 2 | prefix: "/", 3 | engines: [DuckDuckGo, Google, Bing] 4 | ) 5 | -------------------------------------------------------------------------------- /.config/gtk-3.0/bookmarks: -------------------------------------------------------------------------------- 1 | file:///home/asuka/Downloads 2 | file:///home/asuka/Music 3 | file:///home/asuka/Pictures 4 | file:///home/asuka/Videos 5 | -------------------------------------------------------------------------------- /.config/gtk-3.0/settings.ini: -------------------------------------------------------------------------------- 1 | [Settings] 2 | gtk-theme-name=catppuccin-latte-maroon-standard+default 3 | gtk-icon-theme-name=Tela-circle-pink-light 4 | gtk-font-name=JetBrainsMono Nerd Font Medium 9 5 | gtk-cursor-theme-name=Adwaita 6 | gtk-cursor-theme-size=24 7 | gtk-toolbar-style=GTK_TOOLBAR_ICONS 8 | gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR 9 | gtk-button-images=0 10 | gtk-menu-images=0 11 | gtk-enable-event-sounds=1 12 | gtk-enable-input-feedback-sounds=0 13 | gtk-xft-antialias=1 14 | gtk-xft-hinting=1 15 | gtk-xft-hintstyle=hintslight 16 | gtk-xft-rgba=rgb 17 | gtk-application-prefer-dark-theme=0 18 | -------------------------------------------------------------------------------- /.config/kitty/current-theme.conf: -------------------------------------------------------------------------------- 1 | # vim:ft=kitty 2 | 3 | ## name: Catppuccin-Mocha 4 | ## author: Pocco81 (https://github.com/Pocco81) 5 | ## license: MIT 6 | ## upstream: https://github.com/catppuccin/kitty/blob/main/mocha.conf 7 | ## blurb: Soothing pastel theme for the high-spirited! 8 | 9 | 10 | 11 | # The basic colors 12 | foreground #CDD6F4 13 | background #1E1E2E 14 | selection_foreground #1E1E2E 15 | selection_background #F5E0DC 16 | 17 | # Cursor colors 18 | cursor #F5E0DC 19 | cursor_text_color #1E1E2E 20 | 21 | # URL underline color when hovering with mouse 22 | url_color #F5E0DC 23 | 24 | # Kitty window border colors 25 | active_border_color #B4BEFE 26 | inactive_border_color #6C7086 27 | bell_border_color #F9E2AF 28 | 29 | # OS Window titlebar colors 30 | wayland_titlebar_color system 31 | macos_titlebar_color system 32 | 33 | # Tab bar colors 34 | active_tab_foreground #11111B 35 | active_tab_background #CBA6F7 36 | inactive_tab_foreground #CDD6F4 37 | inactive_tab_background #181825 38 | tab_bar_background #11111B 39 | 40 | # Colors for marks (marked text in the terminal) 41 | mark1_foreground #1E1E2E 42 | mark1_background #B4BEFE 43 | mark2_foreground #1E1E2E 44 | mark2_background #CBA6F7 45 | mark3_foreground #1E1E2E 46 | mark3_background #74C7EC 47 | 48 | # The 16 terminal colors 49 | 50 | # black 51 | color0 #45475A 52 | color8 #585B70 53 | 54 | # red 55 | color1 #F38BA8 56 | color9 #F38BA8 57 | 58 | # green 59 | color2 #A6E3A1 60 | color10 #A6E3A1 61 | 62 | # yellow 63 | color3 #F9E2AF 64 | color11 #F9E2AF 65 | 66 | # blue 67 | color4 #89B4FA 68 | color12 #89B4FA 69 | 70 | # magenta 71 | color5 #F5C2E7 72 | color13 #F5C2E7 73 | 74 | # cyan 75 | color6 #94E2D5 76 | color14 #94E2D5 77 | 78 | # white 79 | color7 #BAC2DE 80 | color15 #A6ADC8 81 | -------------------------------------------------------------------------------- /.config/kitty/kitty.conf: -------------------------------------------------------------------------------- 1 | 2 | #: Font Settings 3 | 4 | font_size 11 5 | font_family JetBrains Mono Nerd Font 6 | bold_font auto 7 | italic_font auto 8 | bold_italic_font auto 9 | background_opacity 1 10 | 11 | #: Window Settings 12 | 13 | initial_window_width 95c 14 | initial_window_height 35c 15 | window_padding_width 20 16 | confirm_os_window_close 0 17 | 18 | draw_minimal_borders yes 19 | window_padding_width 20 20 | window_border_width 0 21 | hide_window_decorations yes 22 | # titlebar-only yes 23 | # active_border_color none 24 | 25 | #: Misc Settings 26 | 27 | enable_audio_bell no 28 | 29 | 30 | # BEGIN_KITTY_THEME 31 | # Catppuccin-Mocha 32 | include current-theme.conf 33 | # END_KITTY_THEME 34 | -------------------------------------------------------------------------------- /.config/kitty/kitty.conf.bak: -------------------------------------------------------------------------------- 1 | 2 | #: Font Settings 3 | 4 | font_size 11 5 | font_family JetBrains Mono Nerd Font 6 | bold_font auto 7 | italic_font auto 8 | bold_italic_font auto 9 | background_opacity 1 10 | 11 | #: Window Settings 12 | 13 | initial_window_width 95c 14 | initial_window_height 35c 15 | window_padding_width 20 16 | confirm_os_window_close 0 17 | 18 | draw_minimal_borders yes 19 | window_padding_width 20 20 | window_border_width 0 21 | hide_window_decorations yes 22 | # titlebar-only yes 23 | # active_border_color none 24 | 25 | #: Misc Settings 26 | 27 | enable_audio_bell no 28 | 29 | 30 | # BEGIN_KITTY_THEME 31 | # Catppuccin-Latte 32 | include current-theme.conf 33 | # END_KITTY_THEME 34 | -------------------------------------------------------------------------------- /.config/kitty/neighboring_window.py: -------------------------------------------------------------------------------- 1 | from kitty.key_encoding import KeyEvent, parse_shortcut 2 | from kittens.tui.handler import result_handler 3 | 4 | 5 | def main(): 6 | pass 7 | 8 | 9 | def encode_key_mapping(window, key_mapping): 10 | mods, key = parse_shortcut(key_mapping) 11 | event = KeyEvent( 12 | mods=mods, 13 | key=key, 14 | shift=bool(mods & 1), 15 | alt=bool(mods & 2), 16 | ctrl=bool(mods & 4), 17 | super=bool(mods & 8), 18 | hyper=bool(mods & 16), 19 | meta=bool(mods & 32), 20 | ).as_window_system_event() 21 | 22 | return window.encoded_key(event) 23 | 24 | 25 | @result_handler(no_ui=True) 26 | def handle_result(args, result, target_window_id, boss): 27 | window = boss.window_id_map.get(target_window_id) 28 | 29 | cmd = window.child.foreground_cmdline[0] 30 | if cmd == 'tmux': 31 | keymap = args[2] 32 | encoded = encode_key_mapping(window, keymap) 33 | window.write_to_child(encoded) 34 | else: 35 | boss.active_tab.neighboring_window(args[1]) 36 | -------------------------------------------------------------------------------- /.config/kitty/relative_resize.py: -------------------------------------------------------------------------------- 1 | # Based on MIT licensed code at https://github.com/chancez/dotfiles/blob/badc69d3895a6a942285amount26b8c372a55d77533eamount/kitty/.config/kitty/relative_resize.py 2 | from kittens.tui.handler import result_handler 3 | from kitty.key_encoding import KeyEvent, parse_shortcut 4 | 5 | 6 | def encode_key_mapping(window, key_mapping): 7 | mods, key = parse_shortcut(key_mapping) 8 | event = KeyEvent( 9 | mods=mods, 10 | key=key, 11 | shift=bool(mods & 1), 12 | alt=bool(mods & 2), 13 | ctrl=bool(mods & 4), 14 | super=bool(mods & 8), 15 | hyper=bool(mods & 16), 16 | meta=bool(mods & 32), 17 | ).as_window_system_event() 18 | 19 | return window.encoded_key(event) 20 | 21 | 22 | def main(args): 23 | pass 24 | 25 | 26 | def relative_resize_window(direction, amount, target_window_id, boss): 27 | window = boss.window_id_map.get(target_window_id) 28 | if window is None: 29 | return 30 | 31 | neighbors = boss.active_tab.current_layout.neighbors_for_window( 32 | window, boss.active_tab.windows 33 | ) 34 | current_window_id = boss.active_tab.active_window 35 | 36 | left_neighbors = neighbors.get('left') 37 | right_neighbors = neighbors.get('right') 38 | top_neighbors = neighbors.get('top') 39 | bottom_neighbors = neighbors.get('bottom') 40 | 41 | # has a neighbor on both sides 42 | if direction == 'left' and (left_neighbors and right_neighbors): 43 | boss.active_tab.resize_window('narrower', amount) 44 | # only has left neighbor 45 | elif direction == 'left' and left_neighbors: 46 | boss.active_tab.resize_window('wider', amount) 47 | # only has right neighbor 48 | elif direction == 'left' and right_neighbors: 49 | boss.active_tab.resize_window('narrower', amount) 50 | 51 | # has a neighbor on both sides 52 | elif direction == 'right' and (left_neighbors and right_neighbors): 53 | boss.active_tab.resize_window('wider', amount) 54 | # only has left neighbor 55 | elif direction == 'right' and left_neighbors: 56 | boss.active_tab.resize_window('narrower', amount) 57 | # only has right neighbor 58 | elif direction == 'right' and right_neighbors: 59 | boss.active_tab.resize_window('wider', amount) 60 | 61 | # has a neighbor above and below 62 | elif direction == 'up' and (top_neighbors and bottom_neighbors): 63 | boss.active_tab.resize_window('shorter', amount) 64 | # only has top neighbor 65 | elif direction == 'up' and top_neighbors: 66 | boss.active_tab.resize_window('taller', amount) 67 | # only has bottom neighbor 68 | elif direction == 'up' and bottom_neighbors: 69 | boss.active_tab.resize_window('shorter', amount) 70 | 71 | # has a neighbor above and below 72 | elif direction == 'down' and (top_neighbors and bottom_neighbors): 73 | boss.active_tab.resize_window('taller', amount) 74 | # only has top neighbor 75 | elif direction == 'down' and top_neighbors: 76 | boss.active_tab.resize_window('shorter', amount) 77 | # only has bottom neighbor 78 | elif direction == 'down' and bottom_neighbors: 79 | boss.active_tab.resize_window('taller', amount) 80 | 81 | 82 | @result_handler(no_ui=True) 83 | def handle_result(args, result, target_window_id, boss): 84 | direction = args[1] 85 | amount = int(args[2]) 86 | window = boss.window_id_map.get(target_window_id) 87 | 88 | cmd = window.child.foreground_cmdline[0] 89 | if cmd == 'tmux': 90 | keymap = args[3] 91 | encoded = encode_key_mapping(window, keymap) 92 | window.write_to_child(encoded) 93 | else: 94 | relative_resize_window(direction, amount, target_window_id, boss) 95 | -------------------------------------------------------------------------------- /.config/kitty/split_window.py: -------------------------------------------------------------------------------- 1 | from kittens.tui.handler import result_handler 2 | from kitty.key_encoding import KeyEvent, parse_shortcut 3 | 4 | 5 | def main(args): 6 | pass 7 | 8 | 9 | def encode_key_mapping(window, key_mapping): 10 | mods, key = parse_shortcut(key_mapping) 11 | event = KeyEvent( 12 | mods=mods, 13 | key=key, 14 | shift=bool(mods & 1), 15 | alt=bool(mods & 2), 16 | ctrl=bool(mods & 4), 17 | super=bool(mods & 8), 18 | hyper=bool(mods & 16), 19 | meta=bool(mods & 32), 20 | ).as_window_system_event() 21 | 22 | return window.encoded_key(event) 23 | 24 | 25 | def split_window(boss, direction): 26 | if direction == 'up' or direction == 'down': 27 | boss.launch('--cwd=current', '--location=hsplit') 28 | else: 29 | boss.launch('--cwd=current', '--location=vsplit') 30 | 31 | if direction == 'up' or direction == 'left': 32 | boss.active_tab.move_window(direction) 33 | 34 | 35 | @result_handler(no_ui=True) 36 | def handle_result(args, result, target_window_id, boss): 37 | window = boss.window_id_map.get(target_window_id) 38 | 39 | if window is None: 40 | return 41 | 42 | direction = args[1] 43 | cmd = window.child.foreground_cmdline[0] 44 | if cmd == 'tmux': 45 | keymap = args[2] 46 | encoded = encode_key_mapping(window, keymap) 47 | window.write_to_child(encoded) 48 | else: 49 | split_window(boss, direction) -------------------------------------------------------------------------------- /.config/mpv/fonts/Material-Design-Iconic-Font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NotMugil/notan/af3326633c8186de329d428f8383da27a9695b19/.config/mpv/fonts/Material-Design-Iconic-Font.ttf -------------------------------------------------------------------------------- /.config/mpv/input.conf: -------------------------------------------------------------------------------- 1 | # Progress 2 | # 60 seconds 3 | CTRL+SHIFT+L seek 60 4 | CTRL+SHIFT+H seek -60 5 | CTRL+SHIFT+RIGHT seek 60 6 | CTRL+SHIFT+LEFT seek -60 7 | 8 | # 30 seconds 9 | SHIFT+L seek 30 10 | SHIFT+H seek -30 11 | SHIFT+RIGHT seek 30 12 | SHIFT+LEFT seek -30 13 | 14 | # 10 seconds 15 | CTRL+L seek 10 16 | CTRL+H seek -10 17 | CTRL+RIGHT seek 10 18 | CTRL+LEFT seek -10 19 | 20 | # 5 seconds 21 | L seek 5 22 | H seek -5 23 | RIGHT seek 5 24 | LEFT seek -5 25 | 26 | # 2 seconds 27 | ALT+L seek 2 28 | ALT+H seek -2 29 | ALT+RIGHT seek 2 30 | ALT+LEFT seek -2 31 | 32 | # Disables all normal mouse scrolls 33 | WHEEL_LEFT ignore 34 | WHEEL_RIGHT ignore 35 | 36 | 37 | # Audio 38 | # 100% 39 | CTRL+SHIFT+K add volume 100 40 | CTRL+SHIFT+J add volume -100 41 | CTRL+SHIFT+UP add volume 100 42 | CTRL+SHIFT+DOWN add volume -100 43 | 44 | # 50% 45 | SHIFT+K add volume 50 46 | SHIFT+J add volume -50 47 | SHIFT+UP add volume 50 48 | SHIFT+DOWN add volume -50 49 | 50 | # 25% 51 | CTRL+K add volume 25 52 | CTRL+J add volume -25 53 | CTRL+UP add volume 25 54 | CTRL+DOWN add volume -25 55 | 56 | # 10% 57 | K add volume 10 58 | J add volume -10 59 | UP add volume 10 60 | DOWN add volume -10 61 | 62 | # 5% 63 | ALT+K add volume 5 64 | ALT+J add volume -5 65 | ALT+UP add volume 5 66 | ALT+DOWN add volume -5 67 | -------------------------------------------------------------------------------- /.config/mpv/mpv.conf: -------------------------------------------------------------------------------- 1 | osc = no 2 | osd-bar=no 3 | border = no # Optional, but recommended 4 | 5 | # Uses GPU-accelerated video output by default. 6 | #vo=gpu 7 | # Can cause performance problems with some GPU drivers and GPUs. 8 | #profile=gpu-hq 9 | 10 | # ===== REMOVE THE ABOVE FOUR LINES AND RESAVE IF YOU ENCOUNTER PLAYBACK ISSUES AFTER ===== 11 | 12 | # Source: https://github.com/hl2guide/better-mpv-config 13 | 14 | # External Sources: 15 | # * https://raw.githubusercontent.com/classicjazz/mpv-config/master/mpv.conf 16 | 17 | # Theme 18 | background-color='#24273a' 19 | osd-back-color='#6e738d' 20 | osd-border-color='#181926' 21 | osd-color='#cad3f5' 22 | osd-shadow-color='#24273a' 23 | 24 | # Screenshots 25 | screenshot-directory='~/Imagenes/Capturas/PC' 26 | screenshot-template='mpv-%f-%p' 27 | 28 | # Enables best HW decoder; turn off for software decoding 29 | hwdec=auto 30 | 31 | # Keeps open the window after a video is finished 32 | keep-open 33 | 34 | border=no # hides the window title bar 35 | msg-color=yes # color log messages on terminal 36 | term-osd-bar=yes # displays a progress bar on the terminal 37 | cursor-autohide=1000 # autohides the cursor after 1s 38 | 39 | # Sets a custom font 40 | osd-font='JetBrainsMono Nerd Font Light' 41 | osd-font-size=35 42 | # osd-scale=0.5 43 | 44 | # Saves the seekbar position on exit 45 | save-position-on-quit=yes 46 | 47 | # Uses a large seekable RAM cache even for local input. 48 | cache=yes 49 | # cache-secs=300 50 | # Uses extra large RAM cache (needs cache=yes to make it useful). 51 | demuxer-max-bytes=1800M 52 | demuxer-max-back-bytes=1200M 53 | 54 | # Sets the profile restore method to "copy if equal" 55 | profile-restore=copy-equal 56 | 57 | # ===== Audio ===== 58 | 59 | # Sets volume to 100%. 60 | volume=100 61 | 62 | # Normalizes audio 63 | # af-add='dynaudnorm=g=5:f=250:r=0.9:p=0.5' 64 | 65 | # ===== Color Space ===== 66 | target-trc=auto 67 | gamma-auto 68 | vf=format=colorlevels=full:colormatrix=auto 69 | video-output-levels=full 70 | 71 | # ===== Dithering ===== 72 | dither-depth=auto 73 | temporal-dither=yes 74 | dither=fruit 75 | 76 | # ===== Debanding ===== 77 | deband=yes # enabled by default 78 | deband-iterations=4 # deband steps 79 | deband-threshold=48 # deband strength 80 | deband-range=16 # deband range 81 | deband-grain=48 # dynamic grain: set to "0" if using the static grain shader 82 | 83 | # ===== Subtitles ===== 84 | 85 | 86 | # Display English Subtitles if available 87 | #sub-ass-force-margins=yes 88 | #sub-ass-force-style=Kerning=yes # allows you to override style parameters of ASS scripts 89 | #sub-auto=fuzzy # external subs don't have to match the file name exactly to autoload 90 | #sub-border-color="#FF262626" 91 | #sub-border-size=3.0 92 | #sub-color="#FFFFFFFF" 93 | #sub-shadow-color="#33000000" 94 | #sub-shadow-offset=1 95 | #sub-spacing=0.5 96 | #sub-use-margins=yes 97 | alang=en,eng # default audio languages 98 | embeddedfonts=yes # use embedded fonts for SSA/ASS subs 99 | slang=en,eng # default subtitles languages 100 | sub-auto=all 101 | sub-file-paths-append='Subs/${filename/no-ext}' # search for external subs in these relative subdirectories 102 | sub-file-paths-append='Subs/${filename}' 103 | sub-file-paths-append='subs/${filename/no-ext}' 104 | sub-file-paths-append='subs/${filename}' 105 | sub-file-paths-append=ASS 106 | sub-file-paths-append=Ass 107 | sub-file-paths-append=SRT 108 | sub-file-paths-append=Srt 109 | sub-file-paths-append=Sub 110 | sub-file-paths-append=Subs 111 | sub-file-paths-append=Subtitles 112 | sub-file-paths-append=ass 113 | sub-file-paths-append=srt 114 | sub-file-paths-append=sub 115 | sub-file-paths-append=subs 116 | sub-file-paths-append=subtitles 117 | sub-fix-timing=no # do not try to fix gaps (which might make it worse in some cases) 118 | sub-font-size=45 119 | sub-font="JetBrains Mono Nerd Font" 120 | sub-scale-with-window=yes 121 | 122 | # ===== Motion Interpolation ===== 123 | override-display-fps=75 124 | video-sync=display-resample 125 | interpolation=yes 126 | tscale=oversample # smoothmotion 127 | 128 | # ===== Anti-Ringing ===== 129 | scale-antiring=0.7 # luma upscale deringing 130 | dscale-antiring=0.7 # luma downscale deringing 131 | cscale-antiring=0.7 # chroma upscale deringing 132 | 133 | # ===== Upscaling & Processing ===== 134 | glsl-shaders-clr 135 | # luma upscaling 136 | # note: any FSRCNNX above FSRCNNX_x2_8-0-4-1 is not worth the additional computional overhead 137 | glsl-shaders="/home/rei/.config/mpv/shaders/FSRCNNX_x2_8-0-4-1.glsl" 138 | scale=ewa_lanczos 139 | # luma downscaling 140 | # note: ssimdownscaler is tuned for mitchell and downscaling=no 141 | glsl-shaders-append="/home/rei/.config/mpv/shaders/SSimDownscaler.glsl" 142 | dscale=mitchell 143 | linear-downscaling=no 144 | # chroma upscaling and downscaling 145 | glsl-shaders-append="/home/rei/.config/mpv/shaders/KrigBilateral.glsl" 146 | cscale=mitchell 147 | sigmoid-upscaling=yes 148 | 149 | # ===== Custom Profiles ===== 150 | # Uses specific naming convensions for shorter easier typing. 151 | # Naming Convensions: 152 | # V = Very Low, L = Low, M = Medium, H = High, U = Ultra, S = Supreme 153 | # Very Low = 480p, Low = 720p, Medium = 1080p, High = 1440p, Ultra = 2160p (4K), Supreme = 4320p (8K) 154 | # 30 = 30 frames per second, 60 = 60 frames per second 155 | # Use the switch e.g: --profile=H60 156 | # 4320p (8K) 60 FPS 157 | [S60] 158 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 159 | profile-desc="Supereme - 4320p (8K) - 60 FPS" 160 | ytdl-format=bestvideo[height<=?4320][fps<=?60][vcodec!=?vp9]+bestaudio/best 161 | # 4320p (8K) 30 FPS 162 | [S30] 163 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 164 | profile-desc="Supereme - 4320p (8K) - 30 FPS" 165 | ytdl-format=bestvideo[height<=?4320][fps<=?30][vcodec!=?vp9]+bestaudio/best 166 | # 2160p (4K) 60 FPS 167 | [U60] 168 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 169 | profile-desc="Ultra - 2160p (4K) - 60 FPS" 170 | ytdl-format=bestvideo[height<=?2160][fps<=?60][vcodec!=?vp9]+bestaudio/best 171 | # 2160p (4K) 30 FPS 172 | [U30] 173 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 174 | profile-desc="Ultra - 2160p (4K) - 30 FPS" 175 | ytdl-format=bestvideo[height<=?2160][fps<=?30][vcodec!=?vp9]+bestaudio/best 176 | # 1440p 60 FPS 177 | [H60] 178 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 179 | profile-desc="High - 1440p - 60 FPS" 180 | ytdl-format=bestvideo[height<=?1440][fps<=?60][vcodec!=?vp9]+bestaudio/best 181 | # 1440p 30 FPS 182 | [H30] 183 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 184 | profile-desc="High - 1440p - 30 FPS" 185 | ytdl-format=bestvideo[height<=?1440][fps<=?30][vcodec!=?vp9]+bestaudio/best 186 | # 1080p 60 FPS 187 | [M60] 188 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 189 | profile-desc="Medium - 1080p - 60 FPS" 190 | ytdl-format=bestvideo[height<=?1080][fps<=?60][vcodec!=?vp9]+bestaudio/best 191 | # 1080p 30 FPS 192 | [M30] 193 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 194 | profile-desc="Medium - 1080p - 30 FPS" 195 | ytdl-format=bestvideo[height<=?1080][fps<=?30][vcodec!=?vp9]+bestaudio/best 196 | # 720p 60 FPS 197 | [L60] 198 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 199 | profile-desc="Low - 720p - 60 FPS" 200 | ytdl-format=bestvideo[height<=?720][fps<=?60][vcodec!=?vp9]+bestaudio/best 201 | # 720p 30 FPS 202 | [L30] 203 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 204 | profile-desc="Low - 720p - 30 FPS" 205 | ytdl-format=bestvideo[height<=?720][fps<=?30][vcodec!=?vp9]+bestaudio/best 206 | # 480p 60 FPS 207 | [V60] 208 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 209 | profile-desc="Very Low - 480p - 60 FPS" 210 | ytdl-format=bestvideo[height<=?480][fps<=?60][vcodec!=?vp9]+bestaudio/best 211 | # 480p 30 FPS 212 | [V30] 213 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 214 | profile-desc="Very Low - 480p - 30 FPS" 215 | ytdl-format=bestvideo[height<=?480][fps<=?30][vcodec!=?vp9]+bestaudio/best 216 | 217 | # Other Profiles 218 | 219 | [4k60] # 2160p @ 60fps (3840x2160 UHDTV) 220 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 221 | profile-desc=4k60 222 | profile-cond=((width ==3840 and height ==2160) and p["estimated-vf-fps"]>=31) 223 | # deband=yes # necessary to avoid blue screen with KrigBilateral.glsl 224 | deband=no # turn off debanding because presume wide color gamut 225 | interpolation=no # turn off interpolation because presume 60fps 226 | # UHD videos are already 4K so no luma upscaling is needed 227 | # UHD videos are YUV420 so chroma upscaling is still needed 228 | glsl-shaders-clr 229 | # glsl-shaders="~/.config/mpv/shaders/KrigBilateral.glsl" # enable if your hardware can support it 230 | interpolation=no # no motion interpolation required because 60fps is hardware ceiling 231 | # no deinterlacer required because progressive 232 | 233 | [4k30] # 2160p @ 24-30fps (3840x2160 UHDTV) 234 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 235 | profile-desc=4k30 236 | profile-cond=((width ==3840 and height ==2160) and p["estimated-vf-fps"]<31) 237 | # deband=yes # necessary to avoid blue screen with KrigBilateral.glsl 238 | deband=no # turn off debanding because presume wide color gamut 239 | # UHD videos are already 4K so no luma upscaling is needed 240 | # UHD videos are YUV420 so chroma upscaling is still needed 241 | glsl-shaders-clr 242 | # glsl-shaders="~/.config/mpv/shaders/KrigBilateral.glsl" # enable if your hardware can support it 243 | # apply motion interpolation 244 | # no deinterlacer required because progressive 245 | 246 | [full-hd60] # 1080p @ 60fps (progressive ATSC) 247 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 248 | profile-desc=full-hd60 249 | profile-cond=((width ==1920 and height ==1080) and not p["video-frame-info/interlaced"] and p["estimated-vf-fps"]>=31) 250 | # apply all luma and chroma upscaling and downscaling settings 251 | interpolation=no # no motion interpolation required because 60fps is hardware ceiling 252 | # no deinterlacer required because progressive 253 | 254 | [full-hd30] # 1080p @ 24-30fps (NextGen TV/ATSC 3.0, progressive Blu-ray) 255 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 256 | profile-desc=full-hd30 257 | profile-cond=((width ==1920 and height ==1080) and not p["video-frame-info/interlaced"] and p["estimated-vf-fps"]<31) 258 | # apply all luma and chroma upscaling and downscaling settings 259 | # apply motion interpolation 260 | # no deinterlacer required because progressive 261 | 262 | [full-hd-interlaced] # 1080i @ 24-30fps (HDTV, interlaced Blu-rays) 263 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 264 | profile-desc=full-hd-interlaced 265 | profile-cond=((width ==1920 and height ==1080) and p["video-frame-info/interlaced"] and p["estimated-vf-fps"]<31) 266 | # apply all luma and chroma upscaling and downscaling settings 267 | # apply motion interpolation 268 | vf=bwdif # apply FFMPEG's bwdif deinterlacer 269 | 270 | [hd] # 720p @ 60 fps (HDTV, Blu-ray - progressive) 271 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 272 | profile-desc=hd 273 | profile-cond=(width ==1280 and height ==720) 274 | # apply all luma and chroma upscaling and downscaling settings 275 | interpolation=no # no motion interpolation required because 60fps is hardware ceiling 276 | # no deinterlacer required because progressive 277 | 278 | [sdtv-ntsc] # 640x480, 704x480, 720x480 @ 30fps (NTSC DVD - interlaced) 279 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 280 | profile-desc=sdtv-ntsc 281 | profile-cond=((width ==640 and height ==480) or (width ==704 and height ==480) or (width ==720 and height ==480)) 282 | # apply all luma and chroma upscaling and downscaling settings 283 | # apply motion interpolation 284 | vf=bwdif # apply FFMPEG's bwdif deinterlacer 285 | 286 | [sdtv-pal] # 352x576, 480x576, 544x576, 720x576 @ 30fps (PAL broadcast or DVD - interlaced) 287 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 288 | profile-desc=sdtv-pal 289 | profile-cond=((width ==352 and height ==576) or (width ==480 and height ==576) or (width ==544 and height ==576) or (width ==720 and height ==576)) 290 | # apply all luma and chroma upscaling and downscaling settings 291 | # apply motion interpolation 292 | vf=bwdif # apply FFMPEG's bwdif deinterlacer 293 | 294 | [default] 295 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 296 | 297 | # ===== File Type Profiles ===== 298 | # GIF Files 299 | [extension.gif] 300 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 301 | profile-desc=gif 302 | cache=no 303 | no-pause 304 | loop-file=yes 305 | # WebM Files 306 | [extension.webm] 307 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 308 | profile-desc=webm 309 | no-pause 310 | loop-file=yes 311 | 312 | # ===== Protocol Specific Configuration ===== 313 | 314 | [protocol.http] 315 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 316 | profile-desc=http 317 | hls-bitrate=max # use max quality for HLS streams 318 | cache=yes 319 | no-cache-pause # don't pause when the cache runs low 320 | 321 | [protocol.https] 322 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 323 | profile-desc=https 324 | profile=protocol.http 325 | 326 | [protocol.ytdl] 327 | profile-restore=copy-equal # Sets the profile restore method to "copy if equal" 328 | profile-desc=ytdl 329 | profile=protocol.http 330 | 331 | no-sub-ass 332 | sub-border-size=5 333 | sub-font='Trebuchet MS' 334 | sub-shadow-offset=2 335 | sub-shadow-color=0.0/0.0/0.0 336 | -------------------------------------------------------------------------------- /.config/mpv/script-opts/stats.conf: -------------------------------------------------------------------------------- 1 | # Colors are in #BBGGRR format 2 | border_color=30201e 3 | font_color=f5d3ca 4 | plot_bg_border_color=f8bdb7 5 | plot_bg_color=30201e 6 | plot_color=f8bdb7 7 | -------------------------------------------------------------------------------- /.config/mpv/script-opts/thumbfast.conf: -------------------------------------------------------------------------------- 1 | # Socket path (leave empty for auto) 2 | socket= 3 | 4 | # Thumbnail path (leave empty for auto) 5 | thumbnail= 6 | 7 | # Maximum thumbnail generation size in pixels (scaled down to fit) 8 | # Values are scaled when hidpi is enabled 9 | max_height=200 10 | max_width=200 11 | 12 | # Scale factor for thumbnail display size (requires mpv 0.38+) 13 | # Note that this is lower quality than increasing max_height and max_width 14 | scale_factor=1 15 | 16 | # Apply tone-mapping, no to disable 17 | tone_mapping=auto 18 | 19 | # Overlay id 20 | overlay_id=42 21 | 22 | # Spawn thumbnailer on file load for faster initial thumbnails 23 | spawn_first=no 24 | 25 | # Close thumbnailer process after an inactivity period in seconds, 0 to disable 26 | quit_after_inactivity=0 27 | 28 | # Enable on network playback 29 | network=no 30 | 31 | # Enable on audio playback 32 | audio=no 33 | 34 | # Enable hardware decoding 35 | hwdec=no 36 | 37 | # Windows only: use native Windows API to write to pipe (requires LuaJIT) 38 | direct_io=no 39 | 40 | # Custom path to the mpv executable 41 | mpv_path=mpv 42 | -------------------------------------------------------------------------------- /.config/mpv/shaders/Anime4K_Darken_HQ.glsl: -------------------------------------------------------------------------------- 1 | // MIT License 2 | 3 | // Copyright (c) 2019-2021 bloc97 4 | // All rights reserved. 5 | 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | //!DESC Anime4K-v3.2-Darken-DoG-(HQ)-Luma 25 | //!HOOK MAIN 26 | //!BIND HOOKED 27 | //!SAVE LINELUMA 28 | //!COMPONENTS 1 29 | 30 | float get_luma(vec4 rgba) { 31 | return dot(vec4(0.299, 0.587, 0.114, 0.0), rgba); 32 | } 33 | 34 | vec4 hook() { 35 | return vec4(get_luma(HOOKED_tex(HOOKED_pos)), 0.0, 0.0, 0.0); 36 | } 37 | 38 | //!DESC Anime4K-v3.2-Darken-DoG-(HQ)-Difference-X 39 | //!HOOK MAIN 40 | //!BIND HOOKED 41 | //!BIND LINELUMA 42 | //!SAVE LINEKERNEL 43 | //!COMPONENTS 1 44 | 45 | #define SPATIAL_SIGMA (1.0 * float(HOOKED_size.y) / 1080.0) //Spatial window size, must be a positive real number. 46 | 47 | #define KERNELSIZE (max(int(ceil(SPATIAL_SIGMA * 2.0)), 1) * 2 + 1) //Kernel size, must be an positive odd integer. 48 | #define KERNELHALFSIZE (int(KERNELSIZE/2)) //Half of the kernel size without remainder. Must be equal to trunc(KERNELSIZE/2). 49 | #define KERNELLEN (KERNELSIZE * KERNELSIZE) //Total area of kernel. Must be equal to KERNELSIZE * KERNELSIZE. 50 | 51 | float gaussian(float x, float s, float m) { 52 | float scaled = (x - m) / s; 53 | return exp(-0.5 * scaled * scaled); 54 | } 55 | 56 | float comp_gaussian_x() { 57 | 58 | float g = 0.0; 59 | float gn = 0.0; 60 | 61 | for (int i=0; iRGB matrix has 1 for every row... (which is the case for BT.709) 195 | //Otherwise we would need to convert RGB to YUV, modify Y then convert back to RGB. 196 | return HOOKED_tex(HOOKED_pos) + (comp_gaussian_y() * STRENGTH); 197 | } 198 | 199 | -------------------------------------------------------------------------------- /.config/mpv/shaders/KrigBilateral.glsl: -------------------------------------------------------------------------------- 1 | // Source: https://gist.github.com/igv/a015fc885d5c22e6891820ad89555637 2 | 3 | // KrigBilateral by Shiandow 4 | // 5 | // This library is free software; you can redistribute it and/or 6 | // modify it under the terms of the GNU Lesser General Public 7 | // License as published by the Free Software Foundation; either 8 | // version 3.0 of the License, or (at your option) any later version. 9 | // 10 | // This library is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | // Lesser General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU Lesser General Public 16 | // License along with this library. 17 | 18 | //!HOOK CHROMA 19 | //!BIND HOOKED 20 | //!BIND LUMA 21 | //!SAVE LOWRES_Y 22 | //!WIDTH LUMA.w 23 | //!WHEN CHROMA.w LUMA.w < 24 | //!DESC KrigBilateral Downscaling Y pass 1 25 | 26 | #define offset vec2(0) 27 | 28 | #define axis 1 29 | 30 | #define Kernel(x) dot(vec3(0.42659, -0.49656, 0.076849), cos(vec3(0, 1, 2) * acos(-1.) * (x + 1.))) 31 | 32 | vec4 hook() { 33 | // Calculate bounds 34 | float low = ceil((LUMA_pos - CHROMA_pt) * LUMA_size - offset - 0.5)[axis]; 35 | float high = floor((LUMA_pos + CHROMA_pt) * LUMA_size - offset - 0.5)[axis]; 36 | 37 | float W = 0.0; 38 | vec4 avg = vec4(0); 39 | vec2 pos = LUMA_pos; 40 | 41 | for (float k = low; k <= high; k++) { 42 | pos[axis] = LUMA_pt[axis] * (k - offset[axis] + 0.5); 43 | float rel = (pos[axis] - LUMA_pos[axis])*CHROMA_size[axis]; 44 | float w = Kernel(rel); 45 | 46 | vec4 y = textureGrad(LUMA_raw, pos, vec2(0.0), vec2(0.0)).xxxx * LUMA_mul; 47 | y.y *= y.y; 48 | avg += w * y; 49 | W += w; 50 | } 51 | avg /= W; 52 | avg.y = abs(avg.y - avg.x * avg.x); 53 | return avg; 54 | } 55 | 56 | //!HOOK CHROMA 57 | //!BIND HOOKED 58 | //!BIND LOWRES_Y 59 | //!SAVE LOWRES_Y 60 | //!WHEN CHROMA.w LUMA.w < 61 | //!DESC KrigBilateral Downscaling Y pass 2 62 | 63 | #define offset vec2(0) 64 | 65 | #define axis 0 66 | 67 | #define Kernel(x) dot(vec3(0.42659, -0.49656, 0.076849), cos(vec3(0, 1, 2) * acos(-1.) * (x + 1.))) 68 | 69 | vec4 hook() { 70 | // Calculate bounds 71 | float low = ceil((LOWRES_Y_pos - CHROMA_pt) * LOWRES_Y_size - offset - 0.5)[axis]; 72 | float high = floor((LOWRES_Y_pos + CHROMA_pt) * LOWRES_Y_size - offset - 0.5)[axis]; 73 | 74 | float W = 0.0; 75 | vec4 avg = vec4(0); 76 | vec2 pos = LOWRES_Y_pos; 77 | 78 | for (float k = low; k <= high; k++) { 79 | pos[axis] = LOWRES_Y_pt[axis] * (k - offset[axis] + 0.5); 80 | float rel = (pos[axis] - LOWRES_Y_pos[axis])*CHROMA_size[axis]; 81 | float w = Kernel(rel); 82 | 83 | vec4 y = textureGrad(LOWRES_Y_raw, pos, vec2(0.0), vec2(0.0)).xxxx * LOWRES_Y_mul; 84 | y.y *= y.y; 85 | avg += w * y; 86 | W += w; 87 | } 88 | avg /= W; 89 | avg.y = abs(avg.y - avg.x * avg.x) + LOWRES_Y_texOff(0).y; 90 | return avg; 91 | } 92 | 93 | //!HOOK CHROMA 94 | //!BIND HOOKED 95 | //!BIND LUMA 96 | //!BIND LOWRES_Y 97 | //!WIDTH LUMA.w 98 | //!HEIGHT LUMA.h 99 | //!WHEN CHROMA.w LUMA.w < 100 | //!OFFSET ALIGN 101 | //!DESC KrigBilateral Upscaling UV 102 | 103 | #define sqr(x) dot(x,x) 104 | #define sigma_nsq 256.0/(255.0*255.0) 105 | 106 | #define N 8 107 | 108 | #define M(i,j) Mx[min(i,j)*N + max(i,j) - (min(i,j)*(min(i,j)+1))/2] 109 | 110 | #define C(i,j) (inversesqrt(1.0 + (X[i].y + X[j].y) / Var) * exp(-0.5 * (sqr(X[i].x - X[j].x) / (localVar + X[i].y + X[j].y) + sqr((coords[i] - coords[j]) / radius))) /*+ (X[i].x - y) * (X[j].x - y) / Var*/) // commented out part works well only on test patterns 111 | #define c(i) (inversesqrt(1.0 + X[i].y / Var) * exp(-0.5 * (sqr(X[i].x - y) / (localVar + X[i].y) + sqr((coords[i] - offset) / radius)))) 112 | 113 | #define getnsum(i) X[i] = vec4(LOWRES_Y_tex(LOWRES_Y_pt*(pos+coords[i]+vec2(0.5))).xy, \ 114 | CHROMA_tex(CHROMA_pt*(pos+coords[i]+vec2(0.5))).xy); \ 115 | w = clamp(1.5 - abs(coords[i]), 0.0, 1.0); \ 116 | total += w.x*w.y*vec4(X[i].x, X[i].x * X[i].x, X[i].y, 1.0); 117 | 118 | #define I3(f, n) f(n) f(n+1) f(n+2) 119 | #define I9(f, n) I3(f, n) I3(f, n+3) I3(f, n+6) 120 | 121 | vec4 hook() { 122 | vec2 pos = CHROMA_pos * HOOKED_size - vec2(0.5); 123 | vec2 offset = pos - round(pos); 124 | pos -= offset; 125 | 126 | vec2 coords[N+1]; 127 | vec4 X[N+1]; 128 | vec2 w; 129 | vec4 total = vec4(0); 130 | 131 | coords[0] = vec2(-1,-1); coords[1] = vec2(-1, 0); coords[2] = vec2(-1, 1); 132 | coords[3] = vec2( 0,-1); coords[4] = vec2( 0, 1); coords[5] = vec2( 1,-1); 133 | coords[6] = vec2( 1, 0); coords[7] = vec2( 1, 1); coords[8] = vec2( 0, 0); 134 | 135 | I9(getnsum, 0) 136 | 137 | total.xyz /= total.w; 138 | float localVar = abs(total.y - total.x * total.x) + sigma_nsq; 139 | float Var = localVar + total.z; 140 | float radius = 1.0; 141 | 142 | float y = LUMA_texOff(0).x; 143 | float Mx[(N*(N+1))/2]; 144 | float b[N]; 145 | vec2 interp = X[N].zw; 146 | 147 | b[0] = c(0) - c(N) - C(0,N) + C(N,N); M(0, 0) = C(0,0) - C(0,N) - C(0,N) + C(N,N); M(0, 1) = C(0,1) - C(1,N) - C(0,N) + C(N,N); M(0, 2) = C(0,2) - C(2,N) - C(0,N) + C(N,N); M(0, 3) = C(0,3) - C(3,N) - C(0,N) + C(N,N); M(0, 4) = C(0,4) - C(4,N) - C(0,N) + C(N,N); M(0, 5) = C(0,5) - C(5,N) - C(0,N) + C(N,N); M(0, 6) = C(0,6) - C(6,N) - C(0,N) + C(N,N); M(0, 7) = C(0,7) - C(7,N) - C(0,N) + C(N,N); 148 | b[1] = c(1) - c(N) - C(1,N) + C(N,N); M(1, 1) = C(1,1) - C(1,N) - C(1,N) + C(N,N); M(1, 2) = C(1,2) - C(2,N) - C(1,N) + C(N,N); M(1, 3) = C(1,3) - C(3,N) - C(1,N) + C(N,N); M(1, 4) = C(1,4) - C(4,N) - C(1,N) + C(N,N); M(1, 5) = C(1,5) - C(5,N) - C(1,N) + C(N,N); M(1, 6) = C(1,6) - C(6,N) - C(1,N) + C(N,N); M(1, 7) = C(1,7) - C(7,N) - C(1,N) + C(N,N); 149 | b[2] = c(2) - c(N) - C(2,N) + C(N,N); M(2, 2) = C(2,2) - C(2,N) - C(2,N) + C(N,N); M(2, 3) = C(2,3) - C(3,N) - C(2,N) + C(N,N); M(2, 4) = C(2,4) - C(4,N) - C(2,N) + C(N,N); M(2, 5) = C(2,5) - C(5,N) - C(2,N) + C(N,N); M(2, 6) = C(2,6) - C(6,N) - C(2,N) + C(N,N); M(2, 7) = C(2,7) - C(7,N) - C(2,N) + C(N,N); 150 | b[3] = c(3) - c(N) - C(3,N) + C(N,N); M(3, 3) = C(3,3) - C(3,N) - C(3,N) + C(N,N); M(3, 4) = C(3,4) - C(4,N) - C(3,N) + C(N,N); M(3, 5) = C(3,5) - C(5,N) - C(3,N) + C(N,N); M(3, 6) = C(3,6) - C(6,N) - C(3,N) + C(N,N); M(3, 7) = C(3,7) - C(7,N) - C(3,N) + C(N,N); 151 | b[4] = c(4) - c(N) - C(4,N) + C(N,N); M(4, 4) = C(4,4) - C(4,N) - C(4,N) + C(N,N); M(4, 5) = C(4,5) - C(5,N) - C(4,N) + C(N,N); M(4, 6) = C(4,6) - C(6,N) - C(4,N) + C(N,N); M(4, 7) = C(4,7) - C(7,N) - C(4,N) + C(N,N); 152 | b[5] = c(5) - c(N) - C(5,N) + C(N,N); M(5, 5) = C(5,5) - C(5,N) - C(5,N) + C(N,N); M(5, 6) = C(5,6) - C(6,N) - C(5,N) + C(N,N); M(5, 7) = C(5,7) - C(7,N) - C(5,N) + C(N,N); 153 | b[6] = c(6) - c(N) - C(6,N) + C(N,N); M(6, 6) = C(6,6) - C(6,N) - C(6,N) + C(N,N); M(6, 7) = C(6,7) - C(7,N) - C(6,N) + C(N,N); 154 | b[7] = c(7) - c(N) - C(7,N) + C(N,N); M(7, 7) = C(7,7) - C(7,N) - C(7,N) + C(N,N); 155 | 156 | b[1] -= b[0] * M(0, 1) / M(0, 0); M(1, 1) -= M(0, 1) * M(0, 1) / M(0, 0); M(1, 2) -= M(0, 2) * M(0, 1) / M(0, 0); M(1, 3) -= M(0, 3) * M(0, 1) / M(0, 0); M(1, 4) -= M(0, 4) * M(0, 1) / M(0, 0); M(1, 5) -= M(0, 5) * M(0, 1) / M(0, 0); M(1, 6) -= M(0, 6) * M(0, 1) / M(0, 0); M(1, 7) -= M(0, 7) * M(0, 1) / M(0, 0); 157 | b[2] -= b[0] * M(0, 2) / M(0, 0); M(2, 2) -= M(0, 2) * M(0, 2) / M(0, 0); M(2, 3) -= M(0, 3) * M(0, 2) / M(0, 0); M(2, 4) -= M(0, 4) * M(0, 2) / M(0, 0); M(2, 5) -= M(0, 5) * M(0, 2) / M(0, 0); M(2, 6) -= M(0, 6) * M(0, 2) / M(0, 0); M(2, 7) -= M(0, 7) * M(0, 2) / M(0, 0); 158 | b[3] -= b[0] * M(0, 3) / M(0, 0); M(3, 3) -= M(0, 3) * M(0, 3) / M(0, 0); M(3, 4) -= M(0, 4) * M(0, 3) / M(0, 0); M(3, 5) -= M(0, 5) * M(0, 3) / M(0, 0); M(3, 6) -= M(0, 6) * M(0, 3) / M(0, 0); M(3, 7) -= M(0, 7) * M(0, 3) / M(0, 0); 159 | b[4] -= b[0] * M(0, 4) / M(0, 0); M(4, 4) -= M(0, 4) * M(0, 4) / M(0, 0); M(4, 5) -= M(0, 5) * M(0, 4) / M(0, 0); M(4, 6) -= M(0, 6) * M(0, 4) / M(0, 0); M(4, 7) -= M(0, 7) * M(0, 4) / M(0, 0); 160 | b[5] -= b[0] * M(0, 5) / M(0, 0); M(5, 5) -= M(0, 5) * M(0, 5) / M(0, 0); M(5, 6) -= M(0, 6) * M(0, 5) / M(0, 0); M(5, 7) -= M(0, 7) * M(0, 5) / M(0, 0); 161 | b[6] -= b[0] * M(0, 6) / M(0, 0); M(6, 6) -= M(0, 6) * M(0, 6) / M(0, 0); M(6, 7) -= M(0, 7) * M(0, 6) / M(0, 0); 162 | b[7] -= b[0] * M(0, 7) / M(0, 0); M(7, 7) -= M(0, 7) * M(0, 7) / M(0, 0); 163 | 164 | b[2] -= b[1] * M(1, 2) / M(1, 1); M(2, 2) -= M(1, 2) * M(1, 2) / M(1, 1); M(2, 3) -= M(1, 3) * M(1, 2) / M(1, 1); M(2, 4) -= M(1, 4) * M(1, 2) / M(1, 1); M(2, 5) -= M(1, 5) * M(1, 2) / M(1, 1); M(2, 6) -= M(1, 6) * M(1, 2) / M(1, 1); M(2, 7) -= M(1, 7) * M(1, 2) / M(1, 1); 165 | b[3] -= b[1] * M(1, 3) / M(1, 1); M(3, 3) -= M(1, 3) * M(1, 3) / M(1, 1); M(3, 4) -= M(1, 4) * M(1, 3) / M(1, 1); M(3, 5) -= M(1, 5) * M(1, 3) / M(1, 1); M(3, 6) -= M(1, 6) * M(1, 3) / M(1, 1); M(3, 7) -= M(1, 7) * M(1, 3) / M(1, 1); 166 | b[4] -= b[1] * M(1, 4) / M(1, 1); M(4, 4) -= M(1, 4) * M(1, 4) / M(1, 1); M(4, 5) -= M(1, 5) * M(1, 4) / M(1, 1); M(4, 6) -= M(1, 6) * M(1, 4) / M(1, 1); M(4, 7) -= M(1, 7) * M(1, 4) / M(1, 1); 167 | b[5] -= b[1] * M(1, 5) / M(1, 1); M(5, 5) -= M(1, 5) * M(1, 5) / M(1, 1); M(5, 6) -= M(1, 6) * M(1, 5) / M(1, 1); M(5, 7) -= M(1, 7) * M(1, 5) / M(1, 1); 168 | b[6] -= b[1] * M(1, 6) / M(1, 1); M(6, 6) -= M(1, 6) * M(1, 6) / M(1, 1); M(6, 7) -= M(1, 7) * M(1, 6) / M(1, 1); 169 | b[7] -= b[1] * M(1, 7) / M(1, 1); M(7, 7) -= M(1, 7) * M(1, 7) / M(1, 1); 170 | 171 | b[3] -= b[2] * M(2, 3) / M(2, 2); M(3, 3) -= M(2, 3) * M(2, 3) / M(2, 2); M(3, 4) -= M(2, 4) * M(2, 3) / M(2, 2); M(3, 5) -= M(2, 5) * M(2, 3) / M(2, 2); M(3, 6) -= M(2, 6) * M(2, 3) / M(2, 2); M(3, 7) -= M(2, 7) * M(2, 3) / M(2, 2); 172 | b[4] -= b[2] * M(2, 4) / M(2, 2); M(4, 4) -= M(2, 4) * M(2, 4) / M(2, 2); M(4, 5) -= M(2, 5) * M(2, 4) / M(2, 2); M(4, 6) -= M(2, 6) * M(2, 4) / M(2, 2); M(4, 7) -= M(2, 7) * M(2, 4) / M(2, 2); 173 | b[5] -= b[2] * M(2, 5) / M(2, 2); M(5, 5) -= M(2, 5) * M(2, 5) / M(2, 2); M(5, 6) -= M(2, 6) * M(2, 5) / M(2, 2); M(5, 7) -= M(2, 7) * M(2, 5) / M(2, 2); 174 | b[6] -= b[2] * M(2, 6) / M(2, 2); M(6, 6) -= M(2, 6) * M(2, 6) / M(2, 2); M(6, 7) -= M(2, 7) * M(2, 6) / M(2, 2); 175 | b[7] -= b[2] * M(2, 7) / M(2, 2); M(7, 7) -= M(2, 7) * M(2, 7) / M(2, 2); 176 | 177 | b[4] -= b[3] * M(3, 4) / M(3, 3); M(4, 4) -= M(3, 4) * M(3, 4) / M(3, 3); M(4, 5) -= M(3, 5) * M(3, 4) / M(3, 3); M(4, 6) -= M(3, 6) * M(3, 4) / M(3, 3); M(4, 7) -= M(3, 7) * M(3, 4) / M(3, 3); 178 | b[5] -= b[3] * M(3, 5) / M(3, 3); M(5, 5) -= M(3, 5) * M(3, 5) / M(3, 3); M(5, 6) -= M(3, 6) * M(3, 5) / M(3, 3); M(5, 7) -= M(3, 7) * M(3, 5) / M(3, 3); 179 | b[6] -= b[3] * M(3, 6) / M(3, 3); M(6, 6) -= M(3, 6) * M(3, 6) / M(3, 3); M(6, 7) -= M(3, 7) * M(3, 6) / M(3, 3); 180 | b[7] -= b[3] * M(3, 7) / M(3, 3); M(7, 7) -= M(3, 7) * M(3, 7) / M(3, 3); 181 | 182 | b[5] -= b[4] * M(4, 5) / M(4, 4); M(5, 5) -= M(4, 5) * M(4, 5) / M(4, 4); M(5, 6) -= M(4, 6) * M(4, 5) / M(4, 4); M(5, 7) -= M(4, 7) * M(4, 5) / M(4, 4); 183 | b[6] -= b[4] * M(4, 6) / M(4, 4); M(6, 6) -= M(4, 6) * M(4, 6) / M(4, 4); M(6, 7) -= M(4, 7) * M(4, 6) / M(4, 4); 184 | b[7] -= b[4] * M(4, 7) / M(4, 4); M(7, 7) -= M(4, 7) * M(4, 7) / M(4, 4); 185 | 186 | b[6] -= b[5] * M(5, 6) / M(5, 5); M(6, 6) -= M(5, 6) * M(5, 6) / M(5, 5); M(6, 7) -= M(5, 7) * M(5, 6) / M(5, 5); 187 | b[7] -= b[5] * M(5, 7) / M(5, 5); M(7, 7) -= M(5, 7) * M(5, 7) / M(5, 5); 188 | 189 | b[7] -= b[6] * M(6, 7) / M(6, 6); M(7, 7) -= M(6, 7) * M(6, 7) / M(6, 6); 190 | 191 | b[7] /= M(7, 7); 192 | interp += b[7] * (X[7] - X[N]).zw; 193 | 194 | b[6] -= M(6, 7) * b[7]; b[6] /= M(6, 6); 195 | interp += b[6] * (X[6] - X[N]).zw; 196 | 197 | b[5] -= M(5, 6) * b[6]; b[5] -= M(5, 7) * b[7]; b[5] /= M(5, 5); 198 | interp += b[5] * (X[5] - X[N]).zw; 199 | 200 | b[4] -= M(4, 5) * b[5]; b[4] -= M(4, 6) * b[6]; b[4] -= M(4, 7) * b[7]; b[4] /= M(4, 4); 201 | interp += b[4] * (X[4] - X[N]).zw; 202 | 203 | b[3] -= M(3, 4) * b[4]; b[3] -= M(3, 5) * b[5]; b[3] -= M(3, 6) * b[6]; b[3] -= M(3, 7) * b[7]; b[3] /= M(3, 3); 204 | interp += b[3] * (X[3] - X[N]).zw; 205 | 206 | b[2] -= M(2, 3) * b[3]; b[2] -= M(2, 4) * b[4]; b[2] -= M(2, 5) * b[5]; b[2] -= M(2, 6) * b[6]; b[2] -= M(2, 7) * b[7]; b[2] /= M(2, 2); 207 | interp += b[2] * (X[2] - X[N]).zw; 208 | 209 | b[1] -= M(1, 2) * b[2]; b[1] -= M(1, 3) * b[3]; b[1] -= M(1, 4) * b[4]; b[1] -= M(1, 5) * b[5]; b[1] -= M(1, 6) * b[6]; b[1] -= M(1, 7) * b[7]; b[1] /= M(1, 1); 210 | interp += b[1] * (X[1] - X[N]).zw; 211 | 212 | b[0] -= M(0, 1) * b[1]; b[0] -= M(0, 2) * b[2]; b[0] -= M(0, 3) * b[3]; b[0] -= M(0, 4) * b[4]; b[0] -= M(0, 5) * b[5]; b[0] -= M(0, 6) * b[6]; b[0] -= M(0, 7) * b[7]; b[0] /= M(0, 0); 213 | interp += b[0] * (X[0] - X[N]).zw; 214 | 215 | return interp.xyxy; 216 | } 217 | -------------------------------------------------------------------------------- /.config/mpv/shaders/SSimDownscaler.glsl: -------------------------------------------------------------------------------- 1 | // Source: https://gist.github.com/igv/36508af3ffc84410fe39761d6969be10 2 | 3 | // Requires linear-downscaling=no. Can be used with sharp scalers now (finally able to suppress ringing artifacts). 4 | 5 | // SSimDownscaler by Shiandow 6 | // 7 | // This library is free software; you can redistribute it and/or 8 | // modify it under the terms of the GNU Lesser General Public 9 | // License as published by the Free Software Foundation; either 10 | // version 3.0 of the License, or (at your option) any later version. 11 | // 12 | // This library is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 | // Lesser General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU Lesser General Public 18 | // License along with this library. 19 | 20 | //!HOOK POSTKERNEL 21 | //!BIND HOOKED 22 | //!BIND PREKERNEL 23 | //!SAVE L2 24 | //!WIDTH NATIVE_CROPPED.w 25 | //!WHEN NATIVE_CROPPED.h POSTKERNEL.h > 26 | //!COMPONENTS 3 27 | //!DESC SSimDownscaler L2 pass 1 28 | 29 | #define axis 1 30 | 31 | #define offset vec2(0,0) 32 | 33 | #define MN(B,C,x) (x < 1.0 ? ((2.-1.5*B-(C))*x + (-3.+2.*B+C))*x*x + (1.-(B)/3.) : (((-(B)/6.-(C))*x + (B+5.*C))*x + (-2.*B-8.*C))*x+((4./3.)*B+4.*C)) 34 | #define Kernel(x) MN(.0, .5, abs(x)) 35 | #define taps 2.0 36 | 37 | vec4 hook() { 38 | vec2 base = PREKERNEL_pt * (PREKERNEL_pos * input_size + tex_offset); 39 | 40 | float low = ceil((PREKERNEL_pos - taps*POSTKERNEL_pt) * input_size - offset + tex_offset - 0.5)[axis]; 41 | float high = floor((PREKERNEL_pos + taps*POSTKERNEL_pt) * input_size - offset + tex_offset - 0.5)[axis]; 42 | 43 | float W = 0.0; 44 | vec4 avg = vec4(0); 45 | vec2 pos = base; 46 | 47 | for (float k = low; k <= high; k++) { 48 | pos[axis] = PREKERNEL_pt[axis] * (k - offset[axis] + 0.5); 49 | float rel = (pos[axis] - base[axis])*POSTKERNEL_size[axis]; 50 | float w = Kernel(rel); 51 | 52 | vec4 tex = textureLod(PREKERNEL_raw, pos, 0.0) * PREKERNEL_mul; 53 | avg += w * tex * tex; 54 | W += w; 55 | } 56 | avg /= W; 57 | 58 | return avg; 59 | } 60 | 61 | //!HOOK POSTKERNEL 62 | //!BIND HOOKED 63 | //!BIND L2 64 | //!SAVE L2 65 | //!WHEN NATIVE_CROPPED.w POSTKERNEL.w > 66 | //!COMPONENTS 3 67 | //!DESC SSimDownscaler L2 pass 2 68 | 69 | #define axis 0 70 | 71 | #define offset vec2(0,0) 72 | 73 | #define MN(B,C,x) (x < 1.0 ? ((2.-1.5*B-(C))*x + (-3.+2.*B+C))*x*x + (1.-(B)/3.) : (((-(B)/6.-(C))*x + (B+5.*C))*x + (-2.*B-8.*C))*x+((4./3.)*B+4.*C)) 74 | #define Kernel(x) MN(.0, .5, abs(x)) 75 | #define taps 2.0 76 | 77 | vec4 hook() { 78 | float low = ceil((L2_pos - taps*POSTKERNEL_pt) * L2_size - offset - 0.5)[axis]; 79 | float high = floor((L2_pos + taps*POSTKERNEL_pt) * L2_size - offset - 0.5)[axis]; 80 | 81 | float W = 0.0; 82 | vec4 avg = vec4(0); 83 | vec2 pos = L2_pos; 84 | 85 | for (float k = low; k <= high; k++) { 86 | pos[axis] = L2_pt[axis] * (k - offset[axis] + 0.5); 87 | float rel = (pos[axis] - L2_pos[axis])*POSTKERNEL_size[axis]; 88 | float w = Kernel(rel); 89 | 90 | avg += w * textureLod(L2_raw, pos, 0.0) * L2_mul; 91 | W += w; 92 | } 93 | avg /= W; 94 | 95 | return avg; 96 | } 97 | 98 | //!HOOK POSTKERNEL 99 | //!BIND HOOKED 100 | //!BIND L2 101 | //!SAVE MR 102 | //!WHEN NATIVE_CROPPED.h POSTKERNEL.h > 103 | //!COMPONENTS 4 104 | //!DESC SSimDownscaler mean & R 105 | 106 | #define oversharp 0.0 107 | 108 | #define sigma_nsq 10. / (255.*255.) 109 | #define locality 2.0 110 | 111 | #define offset vec2(0,0) 112 | 113 | #define Kernel(x) pow(1.0 / locality, abs(x)) 114 | #define taps 3.0 115 | 116 | #define Luma(rgb) ( dot(rgb, vec3(0.2126, 0.7152, 0.0722)) ) 117 | 118 | mat3x3 ScaleH(vec2 pos) { 119 | float low = ceil(-0.5*taps - offset)[0]; 120 | float high = floor(0.5*taps - offset)[0]; 121 | 122 | float W = 0.0; 123 | mat3x3 avg = mat3x3(0); 124 | 125 | for (float k = low; k <= high; k++) { 126 | pos[0] = HOOKED_pos[0] + HOOKED_pt[0] * k; 127 | float rel = k + offset[0]; 128 | float w = Kernel(rel); 129 | 130 | vec3 L = POSTKERNEL_tex(pos).rgb; 131 | avg += w * mat3x3(L, L*L, L2_tex(pos).rgb); 132 | W += w; 133 | } 134 | avg /= W; 135 | 136 | return avg; 137 | } 138 | 139 | vec4 hook() { 140 | vec2 pos = HOOKED_pos; 141 | 142 | float low = ceil(-0.5*taps - offset)[1]; 143 | float high = floor(0.5*taps - offset)[1]; 144 | 145 | float W = 0.0; 146 | mat3x3 avg = mat3x3(0); 147 | 148 | for (float k = low; k <= high; k++) { 149 | pos[1] = HOOKED_pos[1] + HOOKED_pt[1] * k; 150 | float rel = k + offset[1]; 151 | float w = Kernel(rel); 152 | 153 | avg += w * ScaleH(pos); 154 | W += w; 155 | } 156 | avg /= W; 157 | 158 | float Sl = Luma(max(avg[1] - avg[0] * avg[0], 0.)); 159 | float Sh = Luma(max(avg[2] - avg[0] * avg[0], 0.)); 160 | return vec4(avg[0], mix(sqrt((Sh + sigma_nsq) / (Sl + sigma_nsq)) * (1. + oversharp), clamp(Sh / Sl, 0., 1.), int(Sl > Sh))); 161 | } 162 | 163 | //!HOOK POSTKERNEL 164 | //!BIND HOOKED 165 | //!BIND MR 166 | //!WHEN NATIVE_CROPPED.h POSTKERNEL.h > 167 | //!DESC SSimDownscaler final pass 168 | 169 | #define locality 2.0 170 | 171 | #define offset vec2(0,0) 172 | 173 | #define Kernel(x) pow(1.0 / locality, abs(x)) 174 | #define taps 3.0 175 | 176 | #define Gamma(x) ( pow(x, vec3(1.0/2.0)) ) 177 | #define GammaInv(x) ( pow(clamp(x, 0.0, 1.0), vec3(2.0)) ) 178 | 179 | mat3x3 ScaleH(vec2 pos) { 180 | float low = ceil(-0.5*taps - offset)[0]; 181 | float high = floor(0.5*taps - offset)[0]; 182 | 183 | float W = 0.0; 184 | mat3x3 avg = mat3x3(0); 185 | 186 | for (float k = low; k <= high; k++) { 187 | pos[0] = HOOKED_pos[0] + HOOKED_pt[0] * k; 188 | float rel = k + offset[0]; 189 | float w = Kernel(rel); 190 | 191 | vec4 MR = MR_tex(pos); 192 | avg += w * mat3x3(MR.a*MR.rgb, MR.rgb, MR.aaa); 193 | W += w; 194 | } 195 | avg /= W; 196 | 197 | return avg; 198 | } 199 | 200 | vec4 hook() { 201 | vec2 pos = HOOKED_pos; 202 | 203 | float low = ceil(-0.5*taps - offset)[1]; 204 | float high = floor(0.5*taps - offset)[1]; 205 | 206 | float W = 0.0; 207 | mat3x3 avg = mat3x3(0); 208 | 209 | for (float k = low; k <= high; k++) { 210 | pos[1] = HOOKED_pos[1] + HOOKED_pt[1] * k; 211 | float rel = k + offset[1]; 212 | float w = Kernel(rel); 213 | 214 | avg += w * ScaleH(pos); 215 | W += w; 216 | } 217 | avg /= W; 218 | vec4 L = POSTKERNEL_texOff(0); 219 | return vec4(avg[1] + avg[2] * L.rgb - avg[0], L.a); 220 | } 221 | -------------------------------------------------------------------------------- /.config/mpv/shaders/SSimSuperRes.glsl: -------------------------------------------------------------------------------- 1 | // Source: https://gist.github.com/igv/2364ffa6e81540f29cb7ab4c9bc05b6b 2 | 3 | // SSimSuperRes by Shiandow 4 | // 5 | // This library is free software; you can redistribute it and/or 6 | // modify it under the terms of the GNU Lesser General Public 7 | // License as published by the Free Software Foundation; either 8 | // version 3.0 of the License, or (at your option) any later version. 9 | // 10 | // This library is distributed in the hope that it will be useful, 11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | // Lesser General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU Lesser General Public 16 | // License along with this library. 17 | 18 | //!HOOK POSTKERNEL 19 | //!BIND HOOKED 20 | //!SAVE LOWRES 21 | //!HEIGHT NATIVE_CROPPED.h 22 | //!WHEN NATIVE_CROPPED.h OUTPUT.h < 23 | //!COMPONENTS 4 24 | //!DESC SSSR Downscaling I 25 | 26 | #define axis 1 27 | 28 | #define offset vec2(0,0) 29 | 30 | #define MN(B,C,x) (x < 1.0 ? ((2.-1.5*B-(C))*x + (-3.+2.*B+C))*x*x + (1.-(B)/3.) : (((-(B)/6.-(C))*x + (B+5.*C))*x + (-2.*B-8.*C))*x+((4./3.)*B+4.*C)) 31 | #define Kernel(x) MN(0.334, 0.333, abs(x)) 32 | #define taps 2.0 33 | 34 | #define Luma(rgb) dot(rgb*rgb, vec3(0.2126, 0.7152, 0.0722)) 35 | 36 | vec4 hook() { 37 | float low = ceil((HOOKED_pos - taps/input_size) * HOOKED_size - offset - 0.5)[axis]; 38 | float high = floor((HOOKED_pos + taps/input_size) * HOOKED_size - offset - 0.5)[axis]; 39 | 40 | float W = 0.0; 41 | vec4 avg = vec4(0); 42 | vec2 pos = HOOKED_pos; 43 | vec4 tex; 44 | 45 | for (float k = low; k <= high; k++) { 46 | pos[axis] = HOOKED_pt[axis] * (k - offset[axis] + 0.5); 47 | float rel = (pos[axis] - HOOKED_pos[axis])*input_size[axis]; 48 | float w = Kernel(rel); 49 | 50 | tex.rgb = textureLod(HOOKED_raw, pos, 0.0).rgb * HOOKED_mul; 51 | tex.a = Luma(tex.rgb); 52 | avg += w * tex; 53 | W += w; 54 | } 55 | avg /= W; 56 | 57 | return vec4(avg.rgb, max(abs(avg.a - Luma(avg.rgb)), 5e-7)); 58 | } 59 | 60 | //!HOOK POSTKERNEL 61 | //!BIND LOWRES 62 | //!SAVE LOWRES 63 | //!WIDTH NATIVE_CROPPED.w 64 | //!HEIGHT NATIVE_CROPPED.h 65 | //!WHEN NATIVE_CROPPED.w OUTPUT.w < 66 | //!COMPONENTS 4 67 | //!DESC SSSR Downscaling II 68 | 69 | #define axis 0 70 | 71 | #define offset vec2(0,0) 72 | 73 | #define MN(B,C,x) (x < 1.0 ? ((2.-1.5*B-(C))*x + (-3.+2.*B+C))*x*x + (1.-(B)/3.) : (((-(B)/6.-(C))*x + (B+5.*C))*x + (-2.*B-8.*C))*x+((4./3.)*B+4.*C)) 74 | #define Kernel(x) MN(0.334, 0.333, abs(x)) 75 | #define taps 2.0 76 | 77 | #define Luma(rgb) dot(rgb*rgb, vec3(0.2126, 0.7152, 0.0722)) 78 | 79 | vec4 hook() { 80 | float low = ceil((LOWRES_pos - taps/input_size) * LOWRES_size - offset - 0.5)[axis]; 81 | float high = floor((LOWRES_pos + taps/input_size) * LOWRES_size - offset - 0.5)[axis]; 82 | 83 | float W = 0.0; 84 | vec4 avg = vec4(0); 85 | vec2 pos = LOWRES_pos; 86 | vec4 tex; 87 | 88 | for (float k = low; k <= high; k++) { 89 | pos[axis] = LOWRES_pt[axis] * (k - offset[axis] + 0.5); 90 | float rel = (pos[axis] - LOWRES_pos[axis])*input_size[axis]; 91 | float w = Kernel(rel); 92 | 93 | tex.rgb = textureLod(LOWRES_raw, pos, 0.0).rgb * LOWRES_mul; 94 | tex.a = Luma(tex.rgb); 95 | avg += w * tex; 96 | W += w; 97 | } 98 | avg /= W; 99 | 100 | return vec4(avg.rgb, max(abs(avg.a - Luma(avg.rgb)), 5e-7) + LOWRES_texOff(0).a); 101 | } 102 | 103 | //!HOOK POSTKERNEL 104 | //!BIND PREKERNEL 105 | //!BIND LOWRES 106 | //!SAVE var 107 | //!WIDTH NATIVE_CROPPED.w 108 | //!HEIGHT NATIVE_CROPPED.h 109 | //!WHEN NATIVE_CROPPED.h OUTPUT.h < 110 | //!COMPONENTS 2 111 | //!DESC SSSR var 112 | 113 | #define spread 1.0 / 4.0 114 | 115 | #define GetL(x,y) PREKERNEL_tex(PREKERNEL_pt * (PREKERNEL_pos * input_size + tex_offset + vec2(x,y))).rgb 116 | #define GetH(x,y) LOWRES_texOff(vec2(x,y)).rgb 117 | 118 | #define Luma(rgb) dot(rgb*rgb, vec3(0.2126, 0.7152, 0.0722)) 119 | #define diff(x,y) vec2(Luma((GetL(x,y) - meanL)), Luma((GetH(x,y) - meanH))) 120 | 121 | vec4 hook() { 122 | vec3 meanL = GetL(0,0); 123 | vec3 meanH = GetH(0,0); 124 | for (int X=-1; X<=1; X+=2) { 125 | meanL += GetL(X,0) * spread; 126 | meanH += GetH(X,0) * spread; 127 | } 128 | for (int Y=-1; Y<=1; Y+=2) { 129 | meanL += GetL(0,Y) * spread; 130 | meanH += GetH(0,Y) * spread; 131 | } 132 | meanL /= (1.0 + 4.0*spread); 133 | meanH /= (1.0 + 4.0*spread); 134 | 135 | vec2 var = diff(0,0); 136 | for (int X=-1; X<=1; X+=2) 137 | var += diff(X,0) * spread; 138 | 139 | for (int Y=-1; Y<=1; Y+=2) 140 | var += diff(0,Y) * spread; 141 | 142 | return vec4(max(var / (1.0 + 4.0*spread), vec2(1e-6)), 0, 0); 143 | } 144 | 145 | //!HOOK POSTKERNEL 146 | //!BIND HOOKED 147 | //!BIND PREKERNEL 148 | //!BIND LOWRES 149 | //!BIND var 150 | //!WHEN NATIVE_CROPPED.h OUTPUT.h < 151 | //!DESC SSSR final pass 152 | 153 | #define oversharp 0.4 154 | 155 | // -- Window Size -- 156 | #define taps 3.0 157 | #define even (taps - 2.0 * floor(taps / 2.0) == 0.0) 158 | #define minX int(1.0-ceil(taps/2.0)) 159 | #define maxX int(floor(taps/2.0)) 160 | 161 | #define Kernel(x) cos(acos(-1.0)*(x)/taps) // Hann kernel 162 | 163 | // -- Input processing -- 164 | #define var(x,y) var_tex(var_pt * (pos + vec2(x,y) + 0.5)).rg 165 | #define GetL(x,y) PREKERNEL_tex(PREKERNEL_pt * (pos + tex_offset + vec2(x,y) + 0.5)).rgb 166 | #define GetH(x,y) LOWRES_tex(LOWRES_pt * (pos + vec2(x,y) + 0.5)) 167 | 168 | #define Luma(rgb) dot(rgb*rgb, vec3(0.2126, 0.7152, 0.0722)) 169 | 170 | vec4 hook() { 171 | vec4 c0 = HOOKED_texOff(0); 172 | 173 | vec2 pos = HOOKED_pos * LOWRES_size - vec2(0.5); 174 | vec2 offset = pos - (even ? floor(pos) : round(pos)); 175 | pos -= offset; 176 | 177 | vec2 mVar = vec2(0.0); 178 | for (int X=-1; X<=1; X++) 179 | for (int Y=-1; Y<=1; Y++) { 180 | vec2 w = clamp(1.5 - abs(vec2(X,Y)), 0.0, 1.0); 181 | mVar += w.r * w.g * vec2(GetH(X,Y).a, 1.0); 182 | } 183 | mVar.r /= mVar.g; 184 | 185 | // Calculate faithfulness force 186 | float weightSum = 0.0; 187 | vec3 diff = vec3(0); 188 | 189 | for (int X = minX; X <= maxX; X++) 190 | for (int Y = minX; Y <= maxX; Y++) 191 | { 192 | float R = (-1.0 - oversharp) * sqrt(var(X,Y).r / (var(X,Y).g + mVar.r)); 193 | 194 | vec2 krnl = Kernel(vec2(X,Y) - offset); 195 | float weight = krnl.r * krnl.g / (Luma((c0.rgb - GetH(X,Y).rgb)) + GetH(X,Y).a); 196 | 197 | diff += weight * (GetL(X,Y) + GetH(X,Y).rgb * R + (-1.0 - R) * (c0.rgb)); 198 | weightSum += weight; 199 | } 200 | diff /= weightSum; 201 | 202 | c0.rgb = ((c0.rgb) + diff); 203 | 204 | return c0; 205 | } 206 | -------------------------------------------------------------------------------- /.config/mpv/shaders/adaptive-sharpen.glsl: -------------------------------------------------------------------------------- 1 | // Source: https://gist.github.com/igv/8a77e4eb8276753b54bb94c1c50c317e 2 | 3 | // Requires sigmoid-upscaling=no. Best quality setting (according to objective metrics): curve_height 0.5, overshoot_ctrl true. 4 | // To use it on-demand add the following line to input.conf: n change-list glsl-shaders toggle "~~/adaptive-sharpen.glsl" 5 | 6 | // Copyright (c) 2015-2021, bacondither 7 | // All rights reserved. 8 | // 9 | // Redistribution and use in source and binary forms, with or without 10 | // modification, are permitted provided that the following conditions 11 | // are met: 12 | // 1. Redistributions of source code must retain the above copyright 13 | // notice, this list of conditions and the following disclaimer 14 | // in this position and unchanged. 15 | // 2. Redistributions in binary form must reproduce the above copyright 16 | // notice, this list of conditions and the following disclaimer in the 17 | // documentation and/or other materials provided with the distribution. 18 | // 19 | // THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 20 | // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 21 | // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 22 | // IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 23 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 24 | // NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 28 | // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | 30 | // Adaptive sharpen - version 2021-10-17 31 | // Tuned for use post-resize 32 | 33 | //!HOOK OUTPUT 34 | //!BIND HOOKED 35 | //!DESC adaptive-sharpen 36 | 37 | //--------------------------------------- Settings ------------------------------------------------ 38 | 39 | #define curve_height 1.0 // Main control of sharpening strength [>0] 40 | // 0.3 <-> 2.0 is a reasonable range of values 41 | 42 | #define overshoot_ctrl false // Allow for higher overshoot if the current edge pixel 43 | // is surrounded by similar edge pixels 44 | 45 | // Defined values under this row are "optimal" DO NOT CHANGE IF YOU DO NOT KNOW WHAT YOU ARE DOING! 46 | 47 | #define curveslope 0.5 // Sharpening curve slope, high edge values 48 | 49 | #define L_compr_low 0.167 // Light compression, default (0.167=~6x) 50 | #define L_compr_high 0.334 // Light compression, surrounded by edges (0.334=~3x) 51 | 52 | #define D_compr_low 0.250 // Dark compression, default (0.250=4x) 53 | #define D_compr_high 0.500 // Dark compression, surrounded by edges (0.500=2x) 54 | 55 | #define scale_lim 0.1 // Abs max change before compression [>0.01] 56 | #define scale_cs 0.056 // Compression slope above scale_lim 57 | 58 | #define pm_p 1.0 // Power mean p-value [>0-1.0] 59 | //------------------------------------------------------------------------------------------------- 60 | 61 | #define max4(a,b,c,d) ( max(max(a, b), max(c, d)) ) 62 | 63 | // Soft if, fast linear approx 64 | #define soft_if(a,b,c) ( sat((a + b + c + 0.056/2.5)/(maxedge + 0.03/2.5) - 0.85) ) 65 | 66 | // Soft limit, modified tanh approx 67 | #define soft_lim(v,s) ( sat(abs(v/s)*(27.0 + pow(v/s, 2.0))/(27.0 + 9.0*pow(v/s, 2.0)))*s ) 68 | 69 | // Weighted power mean 70 | #define wpmean(a,b,w) ( pow(w*pow(abs(a), pm_p) + abs(1.0-w)*pow(abs(b), pm_p), (1.0/pm_p)) ) 71 | 72 | // Get destination pixel values 73 | #define get(x,y) ( HOOKED_texOff(vec2(x, y)).rgb ) 74 | #define sat(x) ( clamp(x, 0.0, 1.0) ) 75 | #define dxdy(val) ( length(fwidth(val)) ) // =~1/2.5 hq edge without c_comp 76 | 77 | #define CtL(RGB) ( sat(dot(RGB, vec3(0.2126, 0.7152, 0.0722))) ) 78 | 79 | #define b_diff(pix) ( (blur-c[pix])*(blur-c[pix]) ) 80 | 81 | vec4 hook() { 82 | 83 | // [ c22 ] 84 | // [ c24, c9, c23 ] 85 | // [ c21, c1, c2, c3, c18 ] 86 | // [ c19, c10, c4, c0, c5, c11, c16 ] 87 | // [ c20, c6, c7, c8, c17 ] 88 | // [ c15, c12, c14 ] 89 | // [ c13 ] 90 | vec3 c[25] = vec3[](get( 0, 0), get(-1,-1), get( 0,-1), get( 1,-1), get(-1, 0), 91 | get( 1, 0), get(-1, 1), get( 0, 1), get( 1, 1), get( 0,-2), 92 | get(-2, 0), get( 2, 0), get( 0, 2), get( 0, 3), get( 1, 2), 93 | get(-1, 2), get( 3, 0), get( 2, 1), get( 2,-1), get(-3, 0), 94 | get(-2, 1), get(-2,-1), get( 0,-3), get( 1,-2), get(-1,-2)); 95 | 96 | float e[13] = float[](dxdy(c[0]), dxdy(c[1]), dxdy(c[2]), dxdy(c[3]), dxdy(c[4]), 97 | dxdy(c[5]), dxdy(c[6]), dxdy(c[7]), dxdy(c[8]), dxdy(c[9]), 98 | dxdy(c[10]), dxdy(c[11]), dxdy(c[12])); 99 | 100 | // Blur, gauss 3x3 101 | vec3 blur = sat((2.0 * (c[2]+c[4]+c[5]+c[7]) + (c[1]+c[3]+c[6]+c[8]) + 4.0 * c[0]) / 16.0); 102 | 103 | // Contrast compression, center = 0.5, scaled to 1/3 104 | float c_comp = sat(0.266666681f + 0.9*exp2(dot(blur, vec3(-7.4/3.0)))); 105 | 106 | // Edge detection 107 | // Relative matrix weights 108 | // [ 1 ] 109 | // [ 4, 5, 4 ] 110 | // [ 1, 5, 6, 5, 1 ] 111 | // [ 4, 5, 4 ] 112 | // [ 1 ] 113 | float edge = length( 1.38*b_diff(0) 114 | + 1.15*(b_diff(2) + b_diff(4) + b_diff(5) + b_diff(7)) 115 | + 0.92*(b_diff(1) + b_diff(3) + b_diff(6) + b_diff(8)) 116 | + 0.23*(b_diff(9) + b_diff(10) + b_diff(11) + b_diff(12)) ) * c_comp; 117 | 118 | vec2 cs = vec2(L_compr_low, D_compr_low); 119 | 120 | if (overshoot_ctrl) { 121 | float maxedge = max4( max4(e[1],e[2],e[3],e[4]), max4(e[5],e[6],e[7],e[8]), 122 | max4(e[9],e[10],e[11],e[12]), e[0] ); 123 | 124 | // [ x ] 125 | // [ z, x, w ] 126 | // [ z, z, x, w, w ] 127 | // [ y, y, y, 0, y, y, y ] 128 | // [ w, w, x, z, z ] 129 | // [ w, x, z ] 130 | // [ x ] 131 | float sbe = soft_if(e[2],e[9], dxdy(c[22]))*soft_if(e[7],e[12],dxdy(c[13])) // x dir 132 | + soft_if(e[4],e[10],dxdy(c[19]))*soft_if(e[5],e[11],dxdy(c[16])) // y dir 133 | + soft_if(e[1],dxdy(c[24]),dxdy(c[21]))*soft_if(e[8],dxdy(c[14]),dxdy(c[17])) // z dir 134 | + soft_if(e[3],dxdy(c[23]),dxdy(c[18]))*soft_if(e[6],dxdy(c[20]),dxdy(c[15])); // w dir 135 | 136 | cs = mix(cs, vec2(L_compr_high, D_compr_high), sat(2.4002*sbe - 2.282)); 137 | } 138 | 139 | // RGB to luma 140 | float luma[25] = float[](CtL(c[0]), CtL(c[1]), CtL(c[2]), CtL(c[3]), CtL(c[4]), CtL(c[5]), CtL(c[6]), 141 | CtL(c[7]), CtL(c[8]), CtL(c[9]), CtL(c[10]), CtL(c[11]), CtL(c[12]), 142 | CtL(c[13]), CtL(c[14]), CtL(c[15]), CtL(c[16]), CtL(c[17]), CtL(c[18]), 143 | CtL(c[19]), CtL(c[20]), CtL(c[21]), CtL(c[22]), CtL(c[23]), CtL(c[24])); 144 | 145 | float c0_Y = luma[0]; 146 | 147 | // Precalculated default squared kernel weights 148 | const vec3 w1 = vec3(0.5, 1.0, 1.41421356237); // 0.25, 1.0, 2.0 149 | const vec3 w2 = vec3(0.86602540378, 1.0, 0.54772255751); // 0.75, 1.0, 0.3 150 | 151 | // Transition to a concave kernel if the center edge val is above thr 152 | vec3 dW = pow(mix( w1, w2, sat(2.4*edge - 0.82)), vec3(2.0)); 153 | 154 | // Use lower weights for pixels in a more active area relative to center pixel area 155 | // This results in narrower and less visible overshoots around sharp edges 156 | float modif_e0 = 3.0 * e[0] + 0.02/2.5; 157 | 158 | float weights[12] = float[](( min(modif_e0/e[1], dW.y) ), 159 | ( dW.x ), 160 | ( min(modif_e0/e[3], dW.y) ), 161 | ( dW.x ), 162 | ( dW.x ), 163 | ( min(modif_e0/e[6], dW.y) ), 164 | ( dW.x ), 165 | ( min(modif_e0/e[8], dW.y) ), 166 | ( min(modif_e0/e[9], dW.z) ), 167 | ( min(modif_e0/e[10], dW.z) ), 168 | ( min(modif_e0/e[11], dW.z) ), 169 | ( min(modif_e0/e[12], dW.z) )); 170 | 171 | weights[0] = (max(max((weights[8] + weights[9])/4.0, weights[0]), 0.25) + weights[0])/2.0; 172 | weights[2] = (max(max((weights[8] + weights[10])/4.0, weights[2]), 0.25) + weights[2])/2.0; 173 | weights[5] = (max(max((weights[9] + weights[11])/4.0, weights[5]), 0.25) + weights[5])/2.0; 174 | weights[7] = (max(max((weights[10] + weights[11])/4.0, weights[7]), 0.25) + weights[7])/2.0; 175 | 176 | // Calculate the negative part of the laplace kernel and the low threshold weight 177 | float lowthrsum = 0.0; 178 | float weightsum = 0.0; 179 | float neg_laplace = 0.0; 180 | 181 | for (int pix = 0; pix < 12; ++pix) 182 | { 183 | float lowthr = sat((20.*4.5*c_comp*e[pix + 1] - 0.221)); 184 | 185 | neg_laplace += luma[pix+1] * luma[pix+1] * weights[pix] * lowthr; 186 | weightsum += weights[pix] * lowthr; 187 | lowthrsum += lowthr / 12.0; 188 | } 189 | 190 | neg_laplace = sqrt(neg_laplace / weightsum); 191 | 192 | // Compute sharpening magnitude function 193 | float sharpen_val = curve_height/(curve_height*curveslope*edge + 0.625); 194 | 195 | // Calculate sharpening diff and scale 196 | float sharpdiff = (c0_Y - neg_laplace)*(lowthrsum*sharpen_val + 0.01); 197 | 198 | // Calculate local near min & max, partial sort 199 | float temp; 200 | 201 | for (int i1 = 0; i1 < 24; i1 += 2) 202 | { 203 | temp = luma[i1]; 204 | luma[i1] = min(luma[i1], luma[i1+1]); 205 | luma[i1+1] = max(temp, luma[i1+1]); 206 | } 207 | 208 | for (int i2 = 24; i2 > 0; i2 -= 2) 209 | { 210 | temp = luma[0]; 211 | luma[0] = min(luma[0], luma[i2]); 212 | luma[i2] = max(temp, luma[i2]); 213 | 214 | temp = luma[24]; 215 | luma[24] = max(luma[24], luma[i2-1]); 216 | luma[i2-1] = min(temp, luma[i2-1]); 217 | } 218 | 219 | float min_dist = min(abs(luma[24] - c0_Y), abs(c0_Y - luma[0])); 220 | min_dist = min(min_dist, scale_lim*(1.0 - scale_cs) + min_dist*scale_cs); 221 | 222 | // Soft limited anti-ringing with tanh, wpmean to control compression slope 223 | sharpdiff = wpmean(max(sharpdiff, 0.0), soft_lim( max(sharpdiff, 0.0), min_dist ), cs.x ) 224 | - wpmean(min(sharpdiff, 0.0), soft_lim( min(sharpdiff, 0.0), min_dist ), cs.y ); 225 | 226 | float sharpdiff_lim = sat(c0_Y + sharpdiff) - c0_Y; 227 | /*float satmul = (c0_Y + max(sharpdiff_lim*0.9, sharpdiff_lim)*0.3 + 0.03)/(c0_Y + 0.03); 228 | vec3 res = c0_Y + sharpdiff_lim + (c[0] - c0_Y)*satmul; 229 | */ 230 | return vec4(sharpdiff_lim + c[0], HOOKED_texOff(0).a); 231 | } 232 | -------------------------------------------------------------------------------- /.config/mpv/shaders/filmgrain.hook: -------------------------------------------------------------------------------- 1 | //!HOOK LUMA 2 | //!BIND HOOKED 3 | //!DESC gaussian film grain 4 | 5 | #define INTENSITY 0.05 6 | 7 | float permute(float x) 8 | { 9 | x = (34.0 * x + 1.0) * x; 10 | return fract(x * 1.0/289.0) * 289.0; 11 | } 12 | 13 | float rand(inout float state) 14 | { 15 | state = permute(state); 16 | return fract(state * 1.0/41.0); 17 | } 18 | 19 | vec4 hook() 20 | { 21 | vec3 m = vec3(HOOKED_pos, random) + vec3(1.0); 22 | float state = permute(permute(m.x) + m.y) + m.z; 23 | 24 | const float a0 = 0.151015505647689; 25 | const float a1 = -0.5303572634357367; 26 | const float a2 = 1.365020122861334; 27 | const float b0 = 0.132089632343748; 28 | const float b1 = -0.7607324991323768; 29 | 30 | float p = 0.95 * rand(state) + 0.025; 31 | float q = p - 0.5; 32 | float r = q * q; 33 | 34 | float grain = q * (a2 + (a1 * r + a0) / (r*r + b1*r + b0)); 35 | grain *= 0.255121822830526; // normalize to [-1,1) 36 | 37 | vec4 color = HOOKED_tex(HOOKED_pos); 38 | color.rgb += vec3(INTENSITY * grain); 39 | return color; 40 | } 41 | -------------------------------------------------------------------------------- /.config/neofetch/roses.txt: -------------------------------------------------------------------------------- 1 | .--.---. 2 | ( \'--'/ ) 3 | ( '..-...' ) 4 | '.'-._.'.' 5 | <'-.,.-> 6 | `\( 7 | \( _ 8 | < \ / \ 9 | __\|_/ 10 | / \ \ 11 | '__'. \ > 12 | \\ 13 | -------------------------------------------------------------------------------- /.config/niri/config.kdl: -------------------------------------------------------------------------------- 1 | // Animation settings. 2 | 3 | animations { 4 | // Uncomment to turn off all animations. 5 | // off 6 | 7 | // Slow down all animations by this factor. Values below 1 speed them up instead. 8 | // slowdown 3.0 9 | } 10 | 11 | binds { 12 | // Mod-Shift-/, which is usually the same as Mod-?, 13 | // shows a list of important hotkeys. 14 | Mod+Shift+Slash { show-hotkey-overlay; } 15 | 16 | // Suggested binds for running programs: terminal, app launcher, screen locker. 17 | Mod+RETURN { spawn "kitty"; } 18 | Mod+D { spawn "anyrun"; } 19 | Mod+E { spawn "thunar"; } 20 | Super+Alt+L { spawn "swaylock"; } 21 | 22 | // Shell scripts execs 23 | Mod+W { spawn "bash" "-c" "exec ~/.scripts/waybar.sh"; } 24 | Mod+Shift+W { spawn "bash" "-c" "exec ~/.scripts/wallpaper.sh"; } 25 | Mod+M { spawn "bash" "-c" "exec ~/.scripts/wlogout.sh"; } 26 | Mod+Shift+Z { spawn "bash" "-c" "exec ~/.scripts/toggle.sh"; } 27 | 28 | // Audio controls bindings 29 | // XF86AudioRaiseVolume { spawn "bash" "-c" "exec ~/.scripts/swayosd.sh raise"; } 30 | // XF86AudioLowerVolume { spawn "bash" "-c" "exec ~/.scripts/swayosd.sh lower"; } 31 | // XF86AudioMute { spawn "bash" "-c" "exec ~/.scripts/swayosd.sh mute"; } 32 | // XF86AudioMicMute { spawn "bash" "-c" "exec ~/.scripts/swayosd.sh micmute"; } 33 | // XF86MonBrightnessUp { spawn "bash" "-c" "exec ~/.scripts/swayosd.sh brightness_up"; } 34 | // XF86MonBrightnessDown { spawn "bash" "-c" "exec ~/.scripts/swayosd.sh brightness_down"; } 35 | 36 | XF86AudioLowerVolume { spawn "swayosd-client" "--output-volume" "lower"; } 37 | XF86AudioMute { spawn "swayosd-client" "--output-volume" "mute-toggle"; } 38 | XF86AudioRaiseVolume { spawn "swayosd-client" "--output-volume" "raise"; } 39 | XF86MonBrightnessDown { spawn "swayosd-client" "--brightness" "lower"; } 40 | XF86MonBrightnessUp { spawn "swayosd-client" "--brightness" "raise"; } 41 | 42 | // Close Active window 43 | Mod+Q { close-window; } 44 | 45 | // Move focus between columns 46 | Mod+Left { focus-column-left; } 47 | Mod+Down { focus-window-down; } 48 | Mod+Up { focus-window-up; } 49 | Mod+Right { focus-column-right; } 50 | 51 | // Move entire column 52 | Mod+Ctrl+Left { move-column-left; } 53 | Mod+Ctrl+Down { move-window-down; } 54 | Mod+Ctrl+Up { move-window-up; } 55 | Mod+Ctrl+Right { move-column-right; } 56 | // Mod+Ctrl+H { move-column-left; } 57 | // Mod+Ctrl+J { move-window-down; } 58 | // Mod+Ctrl+K { move-window-up; } 59 | // Mod+Ctrl+L { move-column-right; } 60 | 61 | // Alternative commands that move across workspaces when reaching 62 | // the first or last window in a column. 63 | // Mod+J { focus-window-or-workspace-down; } 64 | // Mod+K { focus-window-or-workspace-up; } 65 | // Mod+Ctrl+J { move-window-down-or-to-workspace-down; } 66 | // Mod+Ctrl+K { move-window-up-or-to-workspace-up; } 67 | 68 | Mod+Home { focus-column-first; } 69 | Mod+End { focus-column-last; } 70 | Mod+Ctrl+Home { move-column-to-first; } 71 | Mod+Ctrl+End { move-column-to-last; } 72 | 73 | Mod+Shift+Left { focus-monitor-left; } 74 | Mod+Shift+Down { focus-monitor-down; } 75 | Mod+Shift+Up { focus-monitor-up; } 76 | Mod+Shift+Right { focus-monitor-right; } 77 | // Mod+Shift+H { focus-monitor-left; } 78 | // Mod+Shift+J { focus-monitor-down; } 79 | // Mod+Shift+K { focus-monitor-up; } 80 | // Mod+Shift+L { focus-monitor-right; } 81 | 82 | Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } 83 | Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } 84 | Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } 85 | Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } 86 | // Mod+Shift+Ctrl+H { move-column-to-monitor-left; } 87 | // Mod+Shift+Ctrl+J { move-column-to-monitor-down; } 88 | // Mod+Shift+Ctrl+K { move-column-to-monitor-up; } 89 | // Mod+Shift+Ctrl+L { move-column-to-monitor-right; } 90 | 91 | // Alternatively, there are commands to move just a single window: 92 | // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; } 93 | // ... 94 | 95 | // And you can also move a whole workspace to another monitor: 96 | // Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; } 97 | // ... 98 | 99 | Mod+Page_Down { focus-workspace-down; } 100 | Mod+Page_Up { focus-workspace-up; } 101 | Mod+U { focus-workspace-down; } 102 | Mod+I { focus-workspace-up; } 103 | Mod+Ctrl+Page_Down { move-column-to-workspace-down; } 104 | Mod+Ctrl+Page_Up { move-column-to-workspace-up; } 105 | Mod+Ctrl+U { move-column-to-workspace-down; } 106 | Mod+Ctrl+I { move-column-to-workspace-up; } 107 | 108 | // Alternatively, there are commands to move just a single window: 109 | // Mod+Ctrl+Page_Down { move-window-to-workspace-down; } 110 | // ... 111 | 112 | Mod+Shift+Page_Down { move-workspace-down; } 113 | Mod+Shift+Page_Up { move-workspace-up; } 114 | Mod+Shift+U { move-workspace-down; } 115 | Mod+Shift+I { move-workspace-up; } 116 | 117 | Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } 118 | Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } 119 | Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } 120 | Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } 121 | 122 | Mod+WheelScrollRight { focus-column-right; } 123 | Mod+WheelScrollLeft { focus-column-left; } 124 | Mod+Ctrl+WheelScrollRight { move-column-right; } 125 | Mod+Ctrl+WheelScrollLeft { move-column-left; } 126 | 127 | // Usually scrolling up and down with Shift in applications results in 128 | // horizontal scrolling; these binds replicate that. 129 | Mod+Shift+WheelScrollDown { focus-column-right; } 130 | Mod+Shift+WheelScrollUp { focus-column-left; } 131 | Mod+Ctrl+Shift+WheelScrollDown { move-column-right; } 132 | Mod+Ctrl+Shift+WheelScrollUp { move-column-left; } 133 | 134 | // Focus workspace 135 | Mod+1 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 1"; } 136 | Mod+2 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 2"; } 137 | Mod+3 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 3"; } 138 | Mod+4 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 4"; } 139 | Mod+5 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 5"; } 140 | Mod+6 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 6"; } 141 | Mod+7 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 7"; } 142 | Mod+8 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 8"; } 143 | Mod+9 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 9"; } 144 | 145 | // Move column to workspace 146 | Mod+Ctrl+1 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 1" "focus-workspace 1"; } 147 | Mod+Ctrl+2 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 2" "focus-workspace 2"; } 148 | Mod+Ctrl+3 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 3" "focus-workspace 3"; } 149 | Mod+Ctrl+4 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 4" "focus-workspace 4"; } 150 | Mod+Ctrl+5 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 5" "focus-workspace 5"; } 151 | Mod+Ctrl+6 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 6" "focus-workspace 6"; } 152 | Mod+Ctrl+7 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 7" "focus-workspace 7"; } 153 | Mod+Ctrl+8 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 8" "focus-workspace 8"; } 154 | Mod+Ctrl+9 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 9" "focus-workspace 9"; } 155 | 156 | // Alternatively, there are commands to move just a single window: 157 | // Mod+Ctrl+1 { move-window-to-workspace 1; } 158 | 159 | // Switches focus between the current and the previous workspace. 160 | // Mod+Tab { focus-workspace-previous; } 161 | 162 | Mod+Comma { consume-window-into-column; } 163 | Mod+Period { expel-window-from-column; } 164 | 165 | // There are also commands that consume or expel a single window to the side. 166 | // Mod+BracketLeft { consume-or-expel-window-left; } 167 | // Mod+BracketRight { consume-or-expel-window-right; } 168 | 169 | Mod+R { switch-preset-column-width; } 170 | Mod+Shift+R { reset-window-height; } 171 | Mod+F { maximize-column; } 172 | Mod+Shift+F { fullscreen-window; } 173 | Mod+C { center-column; } 174 | 175 | Mod+Minus { set-column-width "-10%"; } 176 | Mod+Equal { set-column-width "+10%"; } 177 | 178 | // Finer height adjustments when in column with other windows. 179 | Mod+Shift+Minus { set-window-height "-10%"; } 180 | Mod+Shift+Equal { set-window-height "+10%"; } 181 | 182 | // Actions to switch layouts. 183 | // Note: if you uncomment these, make sure you do NOT have 184 | // a matching layout switch hotkey configured in xkb options above. 185 | // Having both at once on the same hotkey will break the switching, 186 | // since it will switch twice upon pressing the hotkey (once by xkb, once by niri). 187 | Mod+Space { switch-layout "next"; } 188 | Mod+Shift+Space { switch-layout "prev"; } 189 | 190 | Print { screenshot; } 191 | Ctrl+Print { screenshot-screen; } 192 | Alt+Print { screenshot-window; } 193 | 194 | // The quit action will show a confirmation dialog to avoid accidental exits. 195 | Mod+Shift+E { quit; } 196 | 197 | // Powers off the monitors. To turn them back on, do any input like 198 | // moving the mouse or pressing any other key. 199 | Mod+Shift+P { power-off-monitors; } 200 | } 201 | 202 | // Input 203 | 204 | input { 205 | keyboard { 206 | xkb { 207 | // You can set rules, model, layout, variant and options. 208 | // For more information, see xkeyboard-config(7). 209 | layout "us" 210 | // For example: 211 | // layout "us,ru" 212 | // options "grp:win_space_toggle,compose:ralt,ctrl:nocaps" 213 | } 214 | } 215 | 216 | touchpad { 217 | tap 218 | // dwt 219 | // dwtp 220 | natural-scroll 221 | // accel-speed 0.2 222 | // accel-profile "flat" 223 | } 224 | 225 | mouse { 226 | // natural-scroll 227 | // accel-speed 0.2 228 | // accel-profile "flat" 229 | } 230 | 231 | // Uncomment this to make the mouse warp to the center of newly focused windows. 232 | // warp-mouse-to-focus 233 | 234 | // Focus windows and outputs automatically when moving the mouse into them. 235 | // focus-follows-mouse 236 | } 237 | 238 | prefer-no-csd 239 | 240 | screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" 241 | 242 | hotkey-overlay { 243 | skip-at-startup 244 | } 245 | // Remember to uncomment the node by removing "/-"! 246 | /-output "eDP-1" { 247 | // Uncomment this line to disable this output. 248 | // off 249 | 250 | // Run `niri msg outputs` while inside a niri instance to list all outputs and their modes. 251 | mode "1920x1080@120.030" 252 | 253 | // Scale is a floating-point number, but at the moment only integer values work. 254 | scale 1.0 255 | 256 | // Transform allows to rotate the output counter-clockwise, valid values are: 257 | // normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270. 258 | transform "normal" 259 | 260 | // position x=1280 y=0 261 | } 262 | 263 | output "HDMI-A-1" { 264 | // off 265 | mode "1366x768@60.0" 266 | scale 1.0 267 | 268 | // for portrait mode 269 | // transform "90" 270 | 271 | // position x=0 y=0 272 | 273 | } 274 | 275 | window-rule { 276 | match app-id=r#"^org\.wezfurlong\.wezterm$"# 277 | default-column-width {} 278 | } 279 | 280 | // Example: block out two password managers from screen capture. 281 | // (This example rule is commented out with a "/-" in front.) 282 | /-window-rule { 283 | match app-id=r#"^org\.keepassxc\.KeePassXC$"# 284 | match app-id=r#"^org\.gnome\.World\.Secrets$"# 285 | 286 | block-out-from "screen-capture" 287 | 288 | // Use this instead if you want them visible on third-party screenshot tools. 289 | // block-out-from "screencast" 290 | } 291 | 292 | window-rule { 293 | // Border radius 294 | clip-to-geometry true 295 | geometry-corner-radius 10 296 | } 297 | spawn-at-startup "waybar" 298 | spawn-at-startup "swww-daemon" 299 | spawn-at-startup "swww img ~/.wallpapers/red.jpeg" 300 | spawn-at-startup "swayosd-server" 301 | spawn-at-startup "~/.scripts/swayidle.sh" 302 | spawn-at-startup "swaync -c ~/.config/swaync/config.json -s ~/.config/swaync/style.css" 303 | // Dark theme 304 | 305 | layout { 306 | gaps 14 307 | 308 | center-focused-column "on-overflow" 309 | // center-focused-column "never" 310 | // center-focused-column "always" 311 | 312 | preset-column-widths { 313 | proportion 0.33333 314 | proportion 0.5 315 | proportion 0.66667 316 | 317 | // fixed 1920 318 | } 319 | 320 | default-column-width { proportion 0.5; } 321 | 322 | // If you leave the brackets empty, the windows themselves will decide their initial width. 323 | // default-column-width {} 324 | 325 | focus-ring { 326 | off 327 | 328 | width 3 329 | 330 | active-color "#31324400" 331 | inactive-color "#31324400" 332 | 333 | // active-gradient from="#80c8ff" to="#bbddff" angle=45 334 | // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" 335 | } 336 | 337 | border { 338 | // off 339 | 340 | width 2 341 | active-color "#313244FF" 342 | inactive-color "#1e1e2eFF" 343 | 344 | // active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view" 345 | // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" 346 | } 347 | 348 | struts { 349 | // left 64 350 | // right 64 351 | // top 64 352 | // bottom 64 353 | } 354 | } 355 | 356 | -------------------------------------------------------------------------------- /.config/niri/configs/animations.kdl: -------------------------------------------------------------------------------- 1 | // Animation settings. 2 | 3 | animations { 4 | // Uncomment to turn off all animations. 5 | // off 6 | 7 | // Slow down all animations by this factor. Values below 1 speed them up instead. 8 | // slowdown 3.0 9 | } 10 | -------------------------------------------------------------------------------- /.config/niri/configs/binds.kdl: -------------------------------------------------------------------------------- 1 | 2 | binds { 3 | // Mod-Shift-/, which is usually the same as Mod-?, 4 | // shows a list of important hotkeys. 5 | Mod+Shift+Slash { show-hotkey-overlay; } 6 | 7 | // Suggested binds for running programs: terminal, app launcher, screen locker. 8 | Mod+RETURN { spawn "kitty"; } 9 | Mod+D { spawn "anyrun"; } 10 | Mod+E { spawn "thunar"; } 11 | Super+Alt+L { spawn "swaylock"; } 12 | 13 | // Shell scripts execs 14 | Mod+W { spawn "bash" "-c" "exec ~/.scripts/waybar.sh"; } 15 | Mod+Shift+W { spawn "bash" "-c" "exec ~/.scripts/wallpaper.sh"; } 16 | Mod+M { spawn "bash" "-c" "exec ~/.scripts/wlogout.sh"; } 17 | Mod+Shift+Z { spawn "bash" "-c" "exec ~/.scripts/toggle.sh"; } 18 | 19 | // Audio controls bindings 20 | // XF86AudioRaiseVolume { spawn "bash" "-c" "exec ~/.scripts/swayosd.sh raise"; } 21 | // XF86AudioLowerVolume { spawn "bash" "-c" "exec ~/.scripts/swayosd.sh lower"; } 22 | // XF86AudioMute { spawn "bash" "-c" "exec ~/.scripts/swayosd.sh mute"; } 23 | // XF86AudioMicMute { spawn "bash" "-c" "exec ~/.scripts/swayosd.sh micmute"; } 24 | // XF86MonBrightnessUp { spawn "bash" "-c" "exec ~/.scripts/swayosd.sh brightness_up"; } 25 | // XF86MonBrightnessDown { spawn "bash" "-c" "exec ~/.scripts/swayosd.sh brightness_down"; } 26 | 27 | XF86AudioLowerVolume { spawn "swayosd-client" "--output-volume" "lower"; } 28 | XF86AudioMute { spawn "swayosd-client" "--output-volume" "mute-toggle"; } 29 | XF86AudioRaiseVolume { spawn "swayosd-client" "--output-volume" "raise"; } 30 | XF86MonBrightnessDown { spawn "swayosd-client" "--brightness" "lower"; } 31 | XF86MonBrightnessUp { spawn "swayosd-client" "--brightness" "raise"; } 32 | 33 | // Close Active window 34 | Mod+Q { close-window; } 35 | 36 | // Move focus between columns 37 | Mod+Left { focus-column-left; } 38 | Mod+Down { focus-window-down; } 39 | Mod+Up { focus-window-up; } 40 | Mod+Right { focus-column-right; } 41 | 42 | // Move entire column 43 | Mod+Ctrl+Left { move-column-left; } 44 | Mod+Ctrl+Down { move-window-down; } 45 | Mod+Ctrl+Up { move-window-up; } 46 | Mod+Ctrl+Right { move-column-right; } 47 | // Mod+Ctrl+H { move-column-left; } 48 | // Mod+Ctrl+J { move-window-down; } 49 | // Mod+Ctrl+K { move-window-up; } 50 | // Mod+Ctrl+L { move-column-right; } 51 | 52 | // Alternative commands that move across workspaces when reaching 53 | // the first or last window in a column. 54 | // Mod+J { focus-window-or-workspace-down; } 55 | // Mod+K { focus-window-or-workspace-up; } 56 | // Mod+Ctrl+J { move-window-down-or-to-workspace-down; } 57 | // Mod+Ctrl+K { move-window-up-or-to-workspace-up; } 58 | 59 | Mod+Home { focus-column-first; } 60 | Mod+End { focus-column-last; } 61 | Mod+Ctrl+Home { move-column-to-first; } 62 | Mod+Ctrl+End { move-column-to-last; } 63 | 64 | Mod+Shift+Left { focus-monitor-left; } 65 | Mod+Shift+Down { focus-monitor-down; } 66 | Mod+Shift+Up { focus-monitor-up; } 67 | Mod+Shift+Right { focus-monitor-right; } 68 | // Mod+Shift+H { focus-monitor-left; } 69 | // Mod+Shift+J { focus-monitor-down; } 70 | // Mod+Shift+K { focus-monitor-up; } 71 | // Mod+Shift+L { focus-monitor-right; } 72 | 73 | Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } 74 | Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } 75 | Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } 76 | Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } 77 | // Mod+Shift+Ctrl+H { move-column-to-monitor-left; } 78 | // Mod+Shift+Ctrl+J { move-column-to-monitor-down; } 79 | // Mod+Shift+Ctrl+K { move-column-to-monitor-up; } 80 | // Mod+Shift+Ctrl+L { move-column-to-monitor-right; } 81 | 82 | // Alternatively, there are commands to move just a single window: 83 | // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; } 84 | // ... 85 | 86 | // And you can also move a whole workspace to another monitor: 87 | // Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; } 88 | // ... 89 | 90 | Mod+Page_Down { focus-workspace-down; } 91 | Mod+Page_Up { focus-workspace-up; } 92 | Mod+U { focus-workspace-down; } 93 | Mod+I { focus-workspace-up; } 94 | Mod+Ctrl+Page_Down { move-column-to-workspace-down; } 95 | Mod+Ctrl+Page_Up { move-column-to-workspace-up; } 96 | Mod+Ctrl+U { move-column-to-workspace-down; } 97 | Mod+Ctrl+I { move-column-to-workspace-up; } 98 | 99 | // Alternatively, there are commands to move just a single window: 100 | // Mod+Ctrl+Page_Down { move-window-to-workspace-down; } 101 | // ... 102 | 103 | Mod+Shift+Page_Down { move-workspace-down; } 104 | Mod+Shift+Page_Up { move-workspace-up; } 105 | Mod+Shift+U { move-workspace-down; } 106 | Mod+Shift+I { move-workspace-up; } 107 | 108 | Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } 109 | Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } 110 | Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } 111 | Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } 112 | 113 | Mod+WheelScrollRight { focus-column-right; } 114 | Mod+WheelScrollLeft { focus-column-left; } 115 | Mod+Ctrl+WheelScrollRight { move-column-right; } 116 | Mod+Ctrl+WheelScrollLeft { move-column-left; } 117 | 118 | // Usually scrolling up and down with Shift in applications results in 119 | // horizontal scrolling; these binds replicate that. 120 | Mod+Shift+WheelScrollDown { focus-column-right; } 121 | Mod+Shift+WheelScrollUp { focus-column-left; } 122 | Mod+Ctrl+Shift+WheelScrollDown { move-column-right; } 123 | Mod+Ctrl+Shift+WheelScrollUp { move-column-left; } 124 | 125 | // Focus workspace 126 | Mod+1 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 1"; } 127 | Mod+2 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 2"; } 128 | Mod+3 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 3"; } 129 | Mod+4 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 4"; } 130 | Mod+5 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 5"; } 131 | Mod+6 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 6"; } 132 | Mod+7 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 7"; } 133 | Mod+8 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 8"; } 134 | Mod+9 { spawn "~/.scripts/exec_and_signal.sh" "focus-workspace 9"; } 135 | 136 | // Move column to workspace 137 | Mod+Ctrl+1 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 1" "focus-workspace 1"; } 138 | Mod+Ctrl+2 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 2" "focus-workspace 2"; } 139 | Mod+Ctrl+3 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 3" "focus-workspace 3"; } 140 | Mod+Ctrl+4 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 4" "focus-workspace 4"; } 141 | Mod+Ctrl+5 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 5" "focus-workspace 5"; } 142 | Mod+Ctrl+6 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 6" "focus-workspace 6"; } 143 | Mod+Ctrl+7 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 7" "focus-workspace 7"; } 144 | Mod+Ctrl+8 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 8" "focus-workspace 8"; } 145 | Mod+Ctrl+9 { spawn "~/.scripts/exec_and_signal.sh" "move-column-to-workspace 9" "focus-workspace 9"; } 146 | 147 | // Alternatively, there are commands to move just a single window: 148 | // Mod+Ctrl+1 { move-window-to-workspace 1; } 149 | 150 | // Switches focus between the current and the previous workspace. 151 | // Mod+Tab { focus-workspace-previous; } 152 | 153 | Mod+Comma { consume-window-into-column; } 154 | Mod+Period { expel-window-from-column; } 155 | 156 | // There are also commands that consume or expel a single window to the side. 157 | // Mod+BracketLeft { consume-or-expel-window-left; } 158 | // Mod+BracketRight { consume-or-expel-window-right; } 159 | 160 | Mod+R { switch-preset-column-width; } 161 | Mod+Shift+R { reset-window-height; } 162 | Mod+F { maximize-column; } 163 | Mod+Shift+F { fullscreen-window; } 164 | Mod+C { center-column; } 165 | 166 | Mod+Minus { set-column-width "-10%"; } 167 | Mod+Equal { set-column-width "+10%"; } 168 | 169 | // Finer height adjustments when in column with other windows. 170 | Mod+Shift+Minus { set-window-height "-10%"; } 171 | Mod+Shift+Equal { set-window-height "+10%"; } 172 | 173 | // Actions to switch layouts. 174 | // Note: if you uncomment these, make sure you do NOT have 175 | // a matching layout switch hotkey configured in xkb options above. 176 | // Having both at once on the same hotkey will break the switching, 177 | // since it will switch twice upon pressing the hotkey (once by xkb, once by niri). 178 | Mod+Space { switch-layout "next"; } 179 | Mod+Shift+Space { switch-layout "prev"; } 180 | 181 | Print { screenshot; } 182 | Ctrl+Print { screenshot-screen; } 183 | Alt+Print { screenshot-window; } 184 | 185 | // The quit action will show a confirmation dialog to avoid accidental exits. 186 | Mod+Shift+E { quit; } 187 | 188 | // Powers off the monitors. To turn them back on, do any input like 189 | // moving the mouse or pressing any other key. 190 | Mod+Shift+P { power-off-monitors; } 191 | } 192 | -------------------------------------------------------------------------------- /.config/niri/configs/input.kdl: -------------------------------------------------------------------------------- 1 | 2 | // Input 3 | 4 | input { 5 | keyboard { 6 | xkb { 7 | // You can set rules, model, layout, variant and options. 8 | // For more information, see xkeyboard-config(7). 9 | layout "us" 10 | // For example: 11 | // layout "us,ru" 12 | // options "grp:win_space_toggle,compose:ralt,ctrl:nocaps" 13 | } 14 | } 15 | 16 | touchpad { 17 | tap 18 | // dwt 19 | // dwtp 20 | natural-scroll 21 | // accel-speed 0.2 22 | // accel-profile "flat" 23 | } 24 | 25 | mouse { 26 | // natural-scroll 27 | // accel-speed 0.2 28 | // accel-profile "flat" 29 | } 30 | 31 | // Uncomment this to make the mouse warp to the center of newly focused windows. 32 | // warp-mouse-to-focus 33 | 34 | // Focus windows and outputs automatically when moving the mouse into them. 35 | // focus-follows-mouse 36 | } 37 | -------------------------------------------------------------------------------- /.config/niri/configs/misc.kdl: -------------------------------------------------------------------------------- 1 | 2 | prefer-no-csd 3 | 4 | screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" 5 | 6 | hotkey-overlay { 7 | skip-at-startup 8 | } 9 | -------------------------------------------------------------------------------- /.config/niri/configs/output.kdl: -------------------------------------------------------------------------------- 1 | // Remember to uncomment the node by removing "/-"! 2 | /-output "eDP-1" { 3 | // Uncomment this line to disable this output. 4 | // off 5 | 6 | // Run `niri msg outputs` while inside a niri instance to list all outputs and their modes. 7 | mode "1920x1080@120.030" 8 | 9 | // Scale is a floating-point number, but at the moment only integer values work. 10 | scale 1.0 11 | 12 | // Transform allows to rotate the output counter-clockwise, valid values are: 13 | // normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270. 14 | transform "normal" 15 | 16 | // position x=1280 y=0 17 | } 18 | 19 | output "HDMI-A-1" { 20 | // off 21 | mode "1366x768@60.0" 22 | scale 1.0 23 | 24 | // for portrait mode 25 | // transform "90" 26 | 27 | // position x=0 y=0 28 | 29 | } 30 | -------------------------------------------------------------------------------- /.config/niri/configs/rules.kdl: -------------------------------------------------------------------------------- 1 | 2 | window-rule { 3 | match app-id=r#"^org\.wezfurlong\.wezterm$"# 4 | default-column-width {} 5 | } 6 | 7 | // Example: block out two password managers from screen capture. 8 | // (This example rule is commented out with a "/-" in front.) 9 | /-window-rule { 10 | match app-id=r#"^org\.keepassxc\.KeePassXC$"# 11 | match app-id=r#"^org\.gnome\.World\.Secrets$"# 12 | 13 | block-out-from "screen-capture" 14 | 15 | // Use this instead if you want them visible on third-party screenshot tools. 16 | // block-out-from "screencast" 17 | } 18 | 19 | window-rule { 20 | // Border radius 21 | clip-to-geometry true 22 | geometry-corner-radius 10 23 | } 24 | -------------------------------------------------------------------------------- /.config/niri/configs/startup.kdl: -------------------------------------------------------------------------------- 1 | spawn-at-startup "waybar" 2 | spawn-at-startup "swww-daemon" 3 | spawn-at-startup "swww img ~/.wallpapers/red.jpeg" 4 | spawn-at-startup "swayosd-server" 5 | spawn-at-startup "~/.scripts/swayidle.sh" 6 | spawn-at-startup "swaync -c ~/.config/swaync/config.json -s ~/.config/swaync/style.css" 7 | -------------------------------------------------------------------------------- /.config/niri/themes/dark.kdl: -------------------------------------------------------------------------------- 1 | // Dark theme 2 | 3 | layout { 4 | gaps 14 5 | 6 | center-focused-column "on-overflow" 7 | // center-focused-column "never" 8 | // center-focused-column "always" 9 | 10 | preset-column-widths { 11 | proportion 0.33333 12 | proportion 0.5 13 | proportion 0.66667 14 | 15 | // fixed 1920 16 | } 17 | 18 | default-column-width { proportion 0.5; } 19 | 20 | // If you leave the brackets empty, the windows themselves will decide their initial width. 21 | // default-column-width {} 22 | 23 | focus-ring { 24 | off 25 | 26 | width 3 27 | 28 | active-color "#31324400" 29 | inactive-color "#31324400" 30 | 31 | // active-gradient from="#80c8ff" to="#bbddff" angle=45 32 | // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" 33 | } 34 | 35 | border { 36 | // off 37 | 38 | width 2 39 | active-color "#313244FF" 40 | inactive-color "#1e1e2eFF" 41 | 42 | // active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view" 43 | // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" 44 | } 45 | 46 | struts { 47 | // left 64 48 | // right 64 49 | // top 64 50 | // bottom 64 51 | } 52 | } 53 | 54 | -------------------------------------------------------------------------------- /.config/niri/themes/light.kdl: -------------------------------------------------------------------------------- 1 | // Light Theme 2 | 3 | layout { 4 | gaps 14 5 | 6 | center-focused-column "on-overflow" 7 | // center-focused-column "never" 8 | // center-focused-column "always" 9 | 10 | preset-column-widths { 11 | proportion 0.33333 12 | proportion 0.5 13 | proportion 0.66667 14 | 15 | // fixed 1920 16 | } 17 | 18 | default-column-width { proportion 0.5; } 19 | 20 | // If you leave the brackets empty, the windows themselves will decide their initial width. 21 | // default-column-width {} 22 | 23 | focus-ring { 24 | off 25 | 26 | width 3 27 | 28 | active-color "#31324400" 29 | inactive-color "#31324400" 30 | 31 | // active-gradient from="#80c8ff" to="#bbddff" angle=45 32 | // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" 33 | } 34 | 35 | border { 36 | // off 37 | 38 | width 2 39 | active-color "#6c6f85FF" 40 | inactive-color "#9ca0b0FF" 41 | 42 | // active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view" 43 | // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" 44 | } 45 | 46 | struts { 47 | // left 64 48 | // right 64 49 | // top 64 50 | // bottom 64 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /.config/rofi/colors/tokyonight.rasi: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * Author : Levi Lacoss (fishyfishfish55) 4 | * Github : @fishyfishfish55 5 | * 6 | * Colors 7 | **/ 8 | 9 | * { 10 | background: #15161EFF; 11 | background-alt: #1A1B26FF; 12 | foreground: #C0CAF5FF; 13 | selected: #33467CFF; 14 | active: #414868FF; 15 | urgent: #F7768EFF; 16 | } 17 | -------------------------------------------------------------------------------- /.config/rofi/config.rasi: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * Author : Aditya Shakya (adi1090x) 4 | * Github : @adi1090x 5 | * 6 | * Configuration For Rofi Version: 1.7.3 7 | **/ 8 | 9 | configuration { 10 | /*---------- General setting ----------*/ 11 | modi: "drun,run,filebrowser,window"; 12 | case-sensitive: false; 13 | cycle: true; 14 | filter: ""; 15 | scroll-method: 0; 16 | normalize-match: true; 17 | show-icons: true; 18 | icon-theme: "Papirus"; 19 | /* cache-dir: ;*/ 20 | steal-focus: false; 21 | /* dpi: -1;*/ 22 | 23 | /*---------- Matching setting ----------*/ 24 | matching: "normal"; 25 | tokenize: true; 26 | 27 | /*---------- SSH settings ----------*/ 28 | ssh-client: "ssh"; 29 | ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]"; 30 | parse-hosts: true; 31 | parse-known-hosts: true; 32 | 33 | /*---------- Drun settings ----------*/ 34 | drun-categories: ""; 35 | drun-match-fields: "name,generic,exec,categories,keywords"; 36 | drun-display-format: "{name} [({generic})]"; 37 | drun-show-actions: false; 38 | drun-url-launcher: "xdg-open"; 39 | drun-use-desktop-cache: false; 40 | drun-reload-desktop-cache: false; 41 | drun { 42 | /** Parse user desktop files. */ 43 | parse-user: true; 44 | /** Parse system desktop files. */ 45 | parse-system: true; 46 | } 47 | 48 | /*---------- Run settings ----------*/ 49 | run-command: "{cmd}"; 50 | run-list-command: ""; 51 | run-shell-command: "{terminal} -e {cmd}"; 52 | 53 | /*---------- Fallback Icon ----------*/ 54 | run,drun { 55 | fallback-icon: "application-x-addon"; 56 | } 57 | 58 | /*---------- Window switcher settings ----------*/ 59 | window-match-fields: "title,class,role,name,desktop"; 60 | window-command: "wmctrl -i -R {window}"; 61 | window-format: "{w} - {c} - {t:0}"; 62 | window-thumbnail: false; 63 | 64 | /*---------- Combi settings ----------*/ 65 | /* combi-modi: "window,run";*/ 66 | /* combi-hide-mode-prefix: false;*/ 67 | /* combi-display-format: "{mode} {text}";*/ 68 | 69 | /*---------- History and Sorting ----------*/ 70 | disable-history: false; 71 | sorting-method: "normal"; 72 | max-history-size: 25; 73 | 74 | /*---------- Display setting ----------*/ 75 | display-window: "Windows"; 76 | display-windowcd: "Window CD"; 77 | display-run: "Run"; 78 | display-ssh: "SSH"; 79 | display-drun: "Apps"; 80 | display-combi: "Combi"; 81 | display-keys: "Keys"; 82 | display-filebrowser: "Files"; 83 | 84 | /*---------- Misc setting ----------*/ 85 | terminal: "rofi-sensible-terminal"; 86 | font: "Mono 12"; 87 | sort: false; 88 | threads: 0; 89 | click-to-exit: true; 90 | /* ignored-prefixes: "";*/ 91 | /* pid: "/run/user/1000/rofi.pid";*/ 92 | 93 | /*---------- File browser settings ----------*/ 94 | filebrowser { 95 | /* directory: "/home";*/ 96 | directories-first: true; 97 | sorting-method: "name"; 98 | } 99 | 100 | /*---------- Other settings ----------*/ 101 | timeout { 102 | action: "kb-cancel"; 103 | delay: 0; 104 | } 105 | 106 | /*---------- Keybindings ----------*/ 107 | /* 108 | kb-primary-paste: "Control+V,Shift+Insert"; 109 | kb-secondary-paste: "Control+v,Insert"; 110 | kb-clear-line: "Control+w"; 111 | kb-move-front: "Control+a"; 112 | kb-move-end: "Control+e"; 113 | kb-move-word-back: "Alt+b,Control+Left"; 114 | kb-move-word-forward: "Alt+f,Control+Right"; 115 | kb-move-char-back: "Left,Control+b"; 116 | kb-move-char-forward: "Right,Control+f"; 117 | kb-remove-word-back: "Control+Alt+h,Control+BackSpace"; 118 | kb-remove-word-forward: "Control+Alt+d"; 119 | kb-remove-char-forward: "Delete,Control+d"; 120 | kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h"; 121 | kb-remove-to-eol: "Control+k"; 122 | kb-remove-to-sol: "Control+u"; 123 | kb-accept-entry: "Control+j,Control+m,Return,KP_Enter"; 124 | kb-accept-custom: "Control+Return"; 125 | kb-accept-custom-alt: "Control+Shift+Return"; 126 | kb-accept-alt: "Shift+Return"; 127 | kb-delete-entry: "Shift+Delete"; 128 | kb-mode-next: "Shift+Right,Control+Tab"; 129 | kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab"; 130 | kb-mode-complete: "Control+l"; 131 | kb-row-left: "Control+Page_Up"; 132 | kb-row-right: "Control+Page_Down"; 133 | kb-row-down: "Down,Control+n"; 134 | kb-page-prev: "Page_Up"; 135 | kb-page-next: "Page_Down"; 136 | kb-row-first: "Home,KP_Home"; 137 | kb-row-last: "End,KP_End"; 138 | kb-row-select: "Control+space"; 139 | kb-screenshot: "Alt+S"; 140 | kb-ellipsize: "Alt+period"; 141 | kb-toggle-case-sensitivity: "grave,dead_grave"; 142 | kb-toggle-sort: "Alt+grave"; 143 | kb-cancel: "Escape,Control+g,Control+bracketleft"; 144 | kb-custom-1: "Alt+1"; 145 | kb-custom-2: "Alt+2"; 146 | kb-custom-3: "Alt+3"; 147 | kb-custom-4: "Alt+4"; 148 | kb-custom-5: "Alt+5"; 149 | kb-custom-6: "Alt+6"; 150 | kb-custom-7: "Alt+7"; 151 | kb-custom-8: "Alt+8"; 152 | kb-custom-9: "Alt+9"; 153 | kb-custom-10: "Alt+0"; 154 | kb-custom-11: "Alt+exclam"; 155 | kb-custom-12: "Alt+at"; 156 | kb-custom-13: "Alt+numbersign"; 157 | kb-custom-14: "Alt+dollar"; 158 | kb-custom-15: "Alt+percent"; 159 | kb-custom-16: "Alt+dead_circumflex"; 160 | kb-custom-17: "Alt+ampersand"; 161 | kb-custom-18: "Alt+asterisk"; 162 | kb-custom-19: "Alt+parenleft"; 163 | kb-select-1: "Super+1"; 164 | kb-select-2: "Super+2"; 165 | kb-select-3: "Super+3"; 166 | kb-select-4: "Super+4"; 167 | kb-select-5: "Super+5"; 168 | kb-select-6: "Super+6"; 169 | kb-select-7: "Super+7"; 170 | kb-select-8: "Super+8"; 171 | kb-select-9: "Super+9"; 172 | kb-select-10: "Super+0"; 173 | ml-row-left: "ScrollLeft"; 174 | ml-row-right: "ScrollRight"; 175 | ml-row-up: "ScrollUp"; 176 | ml-row-down: "ScrollDown"; 177 | me-select-entry: "MousePrimary"; 178 | me-accept-entry: "MouseDPrimary"; 179 | me-accept-custom: "Control+MouseDPrimary"; 180 | */ 181 | } 182 | -------------------------------------------------------------------------------- /.config/rofi/images/z.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NotMugil/notan/af3326633c8186de329d428f8383da27a9695b19/.config/rofi/images/z.jpg -------------------------------------------------------------------------------- /.config/swaylock/config: -------------------------------------------------------------------------------- 1 | ignore-empty-password 2 | 3 | 4 | clock 5 | timestr=%R 6 | datestr=%a, %e of %B 7 | 8 | 9 | font=monospace 10 | font-size=16 11 | 12 | effect-blur=25x4 13 | #effect-greyscale 14 | effect-scale=0.3 15 | 16 | indicator-radius=64 17 | indicator-thickness=2 18 | 19 | color=000000ff 20 | separator-color=00000000 21 | 22 | bs-hl-color=f38ba8 23 | key-hl-color=74c7ec 24 | 25 | inside-color=00000000 26 | inside-clear-color=00000000 27 | inside-ver-color=00000000 28 | inside-wrong-color=00000000 29 | 30 | line-color=00000000 31 | line-clear-color=00000000 32 | line-ver-color=00000000 33 | line-wrong-color=00000000 34 | 35 | ring-color=585b70 36 | ring-clear-color=585b70 37 | ring-ver-color=585b70 38 | ring-wrong-color=585b70 39 | 40 | text-color=00000000 41 | text-clear-color=f5e0dc 42 | text-ver-color=74c7ec 43 | text-wrong-color=f38ba8 44 | text-caps-lock-color=f5e0dc 45 | 46 | image=~/.current_wallpaper 47 | -------------------------------------------------------------------------------- /.config/swaync/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "/etc/xdg/swaync/configSchema.json", 3 | "positionX": "right", 4 | "positionY": "bottom", 5 | "layer": "top", 6 | "cssPriority": "application", 7 | "control-center-margin-top": 0, 8 | "control-center-margin-bottom": 0, 9 | "control-center-margin-right": 0, 10 | "control-center-margin-left": 0, 11 | "notification-icon-size": 100, 12 | "notification-body-image-height": 100, 13 | "notification-body-image-width": 200, 14 | "timeout": 10, 15 | "timeout-low": 5, 16 | "timeout-critical": 0, 17 | "fit-to-screen": true, 18 | "control-center-width": 380, 19 | "control-center-height": 600, 20 | "notification-window-width": 500, 21 | "keyboard-shortcuts": true, 22 | "image-visibility": "when-available", 23 | "transition-time": 200, 24 | "hide-on-clear": false, 25 | "hide-on-action": true, 26 | "widgets": ["title","dnd","notifications","mpris","buttons-grid"], 27 | "widget-config": { 28 | "title": { 29 | "text": "Notification Center", 30 | "clear-all-button": true, 31 | "button-text": "Clear All" 32 | }, 33 | "dnd": { 34 | "text": "Do Not Disturb" 35 | }, 36 | "label": { 37 | "max-lines": 1, 38 | "text": "Notification Center" 39 | }, 40 | "mpris": { 41 | "image-size": 72, 42 | "image-radius": 8, 43 | "blur": false 44 | }, 45 | "buttons-grid": { 46 | "actions": [ 47 | { 48 | "label": "󰐥", 49 | "command": "systemctl poweroff" 50 | }, 51 | { 52 | "label": "󰜉", 53 | "command": "systemctl reboot" 54 | }, 55 | { 56 | "label": "󰌾", 57 | "command": "swaylock" 58 | }, 59 | { 60 | "label": "󰍃", 61 | "command": "niri msg exit" 62 | }, 63 | { 64 | "label": "󰏥", 65 | "command": "systemctl suspend" 66 | }, 67 | 68 | { 69 | "label": "", 70 | "command": "obs --startrecording" 71 | } 72 | ] 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /.config/swaync/s.css: -------------------------------------------------------------------------------- 1 | @define-color cc-bg rgba(0, 0, 0, 1); /* Black */ 2 | @define-color noti-border-color rgba(255, 255, 255, 0.15); /* White with opacity */ 3 | @define-color noti-bg #24273a; /* Dark blue-gray */ 4 | @define-color noti-bg-darker #363a4f; /* Dark blue-gray */ 5 | @define-color noti-bg-hover rgb(27, 27, 43); /* Dark blue */ 6 | @define-color noti-bg-focus rgba(27, 27, 27, 0.6); /* Dark blue */ 7 | @define-color noti-close-bg rgba(255, 255, 255, 0.1); /* White with opacity */ 8 | @define-color noti-close-bg-hover rgba(255, 255, 255, 0.15); /* White with opacity */ 9 | @define-color text-color #cad3f5; /* Light blue */ 10 | 11 | @define-color base #1E1D2E; /* Dark blue-gray */ 12 | @define-color mantle #181825; /* Dark blue-gray */ 13 | @define-color crust #11111b; /* Dark blue-gray */ 14 | 15 | @define-color text #cdd6f4; /* Light blue */ 16 | @define-color subtext0 #a6adc8; /* Light gray-blue */ 17 | @define-color subtext1 #bac2de; /* Light blue-gray */ 18 | 19 | @define-color surface0 #313244; /* Dark blue */ 20 | @define-color surface1 #45475a; /* Blue-gray */ 21 | @define-color surface2 #585b70; /* Light blue-gray */ 22 | 23 | @define-color overlay0 #6c7086; /* Gray-blue */ 24 | @define-color overlay1 #7f849c; /* Gray-blue */ 25 | @define-color overlay2 #9399b2; /* Light gray-blue */ 26 | 27 | @define-color blue #89b4fa; /* Light blue */ 28 | @define-color lavender #b4befe; /* Light lavender */ 29 | @define-color sapphire #74c7ec; /* Light blue */ 30 | @define-color sky #89dceb; /* Light blue */ 31 | @define-color teal #94e2d5; /* Light teal */ 32 | @define-color green #a6e3a1; /* Light green */ 33 | @define-color yellow #f9e2af; /* Light yellow */ 34 | @define-color peach #fab387; /* Light peach */ 35 | @define-color maroon #eba0ac; /* Light maroon */ 36 | @define-color red #f38ba8; /* Light red */ 37 | @define-color mauve #cba6f7; /* Light mauve */ 38 | @define-color pink #f5c2e7; /* Light pink */ 39 | @define-color flamingo #f2cdcd; /* Light flamingo */ 40 | @define-color rosewater #f5e0dc; /* Light rosewater */ 41 | 42 | * { 43 | all: unset; 44 | font-size: 12px; 45 | font-family: "JetBrainsMono Nerd Font Mono"; 46 | transition: 200ms; 47 | } 48 | 49 | .widget-mpris { 50 | background: linear-gradient(to right, #363a4f, rgba(183, 189, 248, 0.3)); 51 | 52 | padding: 14px; 53 | border-radius: 10px; 54 | } 55 | 56 | .widget-mpris-player { 57 | padding: 8px; 58 | margin: 4px; 59 | } 60 | 61 | .widget-mpris-title { 62 | font-weight: 600; 63 | font-size: 0.75rem; 64 | } 65 | 66 | .widget-mpris-subtitle { 67 | font-size: 0.52rem; 68 | } 69 | 70 | /* Buttons-Grid widget */ 71 | .widget-buttons-grid { 72 | font-size: 11px; 73 | padding: 8px; 74 | margin-top: 10px; 75 | border-radius: 10px; 76 | } 77 | 78 | .widget-buttons-grid > flowbox > flowboxchild > button { 79 | margin: 3px; 80 | padding: 12px; 81 | background: #494d64; 82 | border-radius: 6px; 83 | color: #cad3f5; 84 | } 85 | 86 | .widget-buttons-grid > flowbox > flowboxchild > button:hover { 87 | background: #6e738d; 88 | } 89 | 90 | 91 | /* DND widget */ 92 | .widget-dnd { 93 | margin: 8px; 94 | font-size: 1.1rem; 95 | } 96 | .widget-dnd > switch { 97 | font-size: initial; 98 | border-radius: 4px; 99 | background: @base; 100 | /* background: @theme_bg_color; */ 101 | /* border: 1px solid @surface1; */ 102 | } 103 | .widget-dnd > switch:checked { 104 | background: @insensitive_base_color; 105 | } 106 | 107 | .widget-dnd > switch slider { 108 | background: @base; 109 | /* background: @theme_bg_color; */ 110 | border-radius: 12px; 111 | } 112 | 113 | 114 | .floating-notifications.background .notification-row .notification-background { 115 | box-shadow: 116 | 0 0 8px 0 rgba(0, 0, 0, 0.8), 117 | inset 0 0 0 1px #363a4f; 118 | border-radius: 10px; 119 | margin: 18px; 120 | background-color: #24273a; 121 | color: #cad3f5; 122 | border: 2px solid rgba(183, 189, 248, 0.5); 123 | padding: 0; 124 | } 125 | 126 | .floating-notifications.background 127 | .notification-row 128 | .notification-background 129 | .notification { 130 | padding: 7px; 131 | border-radius: 10px; 132 | } 133 | 134 | .floating-notifications.background 135 | .notification-row 136 | .notification-background 137 | .notification.critical { 138 | box-shadow: inset 0 0 7px 0 #ed8796; 139 | } 140 | 141 | .floating-notifications.background 142 | .notification-row 143 | .notification-background 144 | .notification 145 | .notification-content { 146 | margin: 7px; 147 | } 148 | 149 | .floating-notifications.background 150 | .notification-row 151 | .notification-background 152 | .notification 153 | .notification-content 154 | .summary { 155 | color: #cad3f5; 156 | } 157 | 158 | .floating-notifications.background 159 | .notification-row 160 | .notification-background 161 | .notification 162 | .notification-content 163 | .time { 164 | color: #a5adcb; 165 | } 166 | 167 | .floating-notifications.background 168 | .notification-row 169 | .notification-background 170 | .notification 171 | .notification-content 172 | .body { 173 | color: #cad3f5; 174 | } 175 | 176 | .floating-notifications.background 177 | .notification-row 178 | .notification-background 179 | .notification 180 | > *:last-child 181 | > * { 182 | min-height: 1.4em; 183 | } 184 | 185 | .floating-notifications.background 186 | .notification-row 187 | .notification-background 188 | .notification 189 | > *:last-child 190 | > * 191 | .notification-action { 192 | border-radius: 7px; 193 | color: #cad3f5; 194 | background-color: #363a4f; 195 | box-shadow: inset 0 0 0 1px #494d64; 196 | margin: 7px; 197 | } 198 | 199 | .floating-notifications.background 200 | .notification-row 201 | .notification-background 202 | .notification 203 | > *:last-child 204 | > * 205 | .notification-action:hover { 206 | box-shadow: inset 0 0 0 1px #494d64; 207 | background-color: #363a4f; 208 | color: #cad3f5; 209 | } 210 | 211 | .floating-notifications.background 212 | .notification-row 213 | .notification-background 214 | .notification 215 | > *:last-child 216 | > * 217 | .notification-action:active { 218 | box-shadow: inset 0 0 0 1px #494d64; 219 | background-color: #7dc4e4; 220 | color: #cad3f5; 221 | } 222 | 223 | .floating-notifications.background 224 | .notification-row 225 | .notification-background 226 | .close-button { 227 | margin: 7px; 228 | padding: 2px; 229 | border-radius: 6.3px; 230 | color: #24273a; 231 | background-color: #ed8796; 232 | } 233 | 234 | .floating-notifications.background 235 | .notification-row 236 | .notification-background 237 | .close-button:hover { 238 | background-color: #ee99a0; 239 | color: #24273a; 240 | } 241 | 242 | .floating-notifications.background 243 | .notification-row 244 | .notification-background 245 | .close-button:active { 246 | background-color: #ed8796; 247 | color: #24273a; 248 | } 249 | 250 | .control-center { 251 | box-shadow: 252 | 0 0 12px 0 rgba(0, 0, 0, 0.8); 253 | border-radius: 5px; 254 | margin: 12px; 255 | background-color: #24273a; 256 | color: #cad3f5; 257 | border: 2px solid @base; 258 | padding: 10px; 259 | } 260 | 261 | .control-center .widget-title { 262 | margin: 8px; 263 | color: #cad3f5; 264 | font-size: 9px; 265 | } 266 | 267 | .button { 268 | font-size: 7px; 269 | } 270 | 271 | .control-center .widget-title button { 272 | border-radius: 7px; 273 | color: #cad3f5; 274 | background-color: #363a4f; 275 | box-shadow: inset 0 0 0 1px #494d64; 276 | padding: 8px; 277 | } 278 | 279 | .control-center .widget-title button:hover { 280 | box-shadow: inset 0 0 0 1px #494d64; 281 | background-color: #5b6078; 282 | color: #cad3f5; 283 | } 284 | 285 | .control-center .widget-title button:active { 286 | box-shadow: inset 0 0 0 1px #494d64; 287 | background-color: #7dc4e4; 288 | color: #24273a; 289 | } 290 | 291 | .control-center .notification-row .notification-background { 292 | border-radius: 5px; 293 | color: #cad3f5; 294 | background-color: #363a4f; 295 | box-shadow: inset 0 0 0 1px #494d64; 296 | margin-top: 10px; 297 | } 298 | 299 | .control-center .notification-row .notification-background .notification { 300 | padding: 5px; 301 | border-radius: 5px; 302 | } 303 | 304 | .control-center 305 | .notification-row 306 | .notification-background 307 | .notification.critical { 308 | box-shadow: inset 0 0 7px 0 #ed8796; 309 | } 310 | 311 | .control-center 312 | .notification-row 313 | .notification-background 314 | .notification 315 | .notification-content { 316 | margin: 7px; 317 | } 318 | 319 | .control-center 320 | .notification-row 321 | .notification-background 322 | .notification 323 | .notification-content 324 | .summary { 325 | color: #cad3f5; 326 | } 327 | 328 | .control-center 329 | .notification-row 330 | .notification-background 331 | .notification 332 | .notification-content 333 | .time { 334 | color: #a5adcb; 335 | } 336 | 337 | .control-center 338 | .notification-row 339 | .notification-background 340 | .notification 341 | .notification-content 342 | .body { 343 | color: #cad3f5; 344 | } 345 | 346 | .control-center 347 | .notification-row 348 | .notification-background 349 | .notification 350 | > *:last-child 351 | > * { 352 | min-height: 3.4em; 353 | } 354 | 355 | .control-center 356 | .notification-row 357 | .notification-background 358 | .notification 359 | > *:last-child 360 | > * 361 | .notification-action { 362 | border-radius: 0px; 363 | color: #cad3f5; 364 | background-color: #494d64; 365 | box-shadow: inset 0 0 0 1px #494d64; 366 | margin: 4px; 367 | } 368 | 369 | .control-center 370 | .notification-row 371 | .notification-background 372 | .notification 373 | > *:last-child 374 | > * 375 | .notification-action:hover { 376 | box-shadow: inset 0 0 0 1px #494d64; 377 | background-color: #5b6078; 378 | color: #cad3f5; 379 | } 380 | 381 | .control-center 382 | .notification-row 383 | .notification-background 384 | .notification 385 | > *:last-child 386 | > * 387 | .notification-action:active { 388 | box-shadow: inset 0 0 0 1px #494d64; 389 | background-color: #7dc4e4; 390 | color: #cad3f5; 391 | } 392 | 393 | .control-center .notification-row .notification-background .close-button { 394 | margin: 3px; 395 | padding: 2px; 396 | border-radius: 6.3px; 397 | color: #24273a; 398 | background-color: #ee99a0; 399 | } 400 | 401 | .control-center .notification-row .notification-background .close-button:hover { 402 | background-color: #ed8796; 403 | color: #24273a; 404 | } 405 | 406 | .control-center 407 | .notification-row 408 | .notification-background 409 | .close-button:active { 410 | background-color: #ed8796; 411 | color: #24273a; 412 | } 413 | 414 | .control-center .notification-row .notification-background:hover { 415 | box-shadow: inset 0 0 0 1px #494d64; 416 | background-color: #8087a2; 417 | color: #cad3f5; 418 | } 419 | 420 | .control-center .notification-row .notification-background:active { 421 | box-shadow: inset 0 0 0 1px #494d64; 422 | background-color: #7dc4e4; 423 | color: #cad3f5; 424 | } 425 | 426 | .notification-row 427 | .notification-background 428 | .notification 429 | .notification-default-action 430 | .notification-content 431 | .image { 432 | /* Notification Primary Image */ 433 | -gtk-icon-effect: none; 434 | border-radius: 4px; 435 | /* Size in px */ 436 | margin: 4px; 437 | margin-right: 20px; 438 | } 439 | 440 | /* Mpris widget */ 441 | .widget-mpris { 442 | padding: 5px; 443 | padding-bottom: 0px; 444 | margin-bottom: 0px; 445 | } 446 | .widget-mpris > box { 447 | padding: 0px; 448 | margin: 1px 1px -12px 1px; 449 | padding: 0px; 450 | border-radius: 4px; 451 | background: alpha(@mantle, 0.2); 452 | } 453 | -------------------------------------------------------------------------------- /.config/swaync/style.css: -------------------------------------------------------------------------------- 1 | /* General styles */ 2 | * { 3 | all: unset; 4 | font-size: 12px; 5 | font-family: "JetBrainsMono Nerd Font Mono"; 6 | transition: 100ms; 7 | } 8 | 9 | /* Widget styles */ 10 | .widget-mpris { 11 | padding: 14px; 12 | margin: 10px; 13 | border-radius: 10px; 14 | background: linear-gradient(to right, #e6e9ef, rgba(188, 192, 204, 0.3)); /* Mantle */ 15 | } 16 | 17 | .widget-mpris > box { 18 | padding: 0; 19 | margin: 1px; 20 | border-radius: 4px; 21 | background: rgba(230, 233, 239, 0.2); /* Mantle with opacity */ 22 | } 23 | 24 | .widget-mpris-player { 25 | padding: 8px; 26 | margin: 4px; 27 | } 28 | 29 | .widget-mpris-title { 30 | font-weight: 600; 31 | font-size: 0.75rem; 32 | } 33 | 34 | .widget-mpris-subtitle { 35 | font-size: 0.52rem; 36 | } 37 | 38 | /* Buttons-Grid widget */ 39 | .widget-buttons-grid { 40 | font-size: 11px; 41 | padding: 8px; 42 | margin-top: 10px; 43 | border-radius: 10px; 44 | } 45 | 46 | .widget-buttons-grid > flowbox > flowboxchild > button { 47 | margin: 3px; 48 | padding: 12px; 49 | background: #dc8a78; /* Rosewater */ 50 | border-radius: 6px; 51 | color: #e6e9ef; /* Mantle */ 52 | } 53 | 54 | .widget-buttons-grid > flowbox > flowboxchild > button:hover { 55 | background: #dd7878; /* Flamingo */ 56 | } 57 | 58 | /* DND widget */ 59 | .widget-dnd { 60 | margin: 8px; 61 | font-size: 1.1rem; 62 | } 63 | 64 | .widget-dnd > switch { 65 | font-size: initial; 66 | border-radius: 4px; 67 | background: #e6e9ef; /* Mantle */ 68 | } 69 | 70 | .widget-dnd > switch:checked { 71 | background: #e6e9ef; /* Mantle */ 72 | } 73 | 74 | .widget-dnd > switch slider { 75 | background: #e6e9ef; /* Mantle */ 76 | border-radius: 12px; 77 | } 78 | 79 | /* Floating notifications */ 80 | .floating-notifications.background .notification-row .notification-background { 81 | box-shadow: 82 | 0 0 8px 0 rgba(0, 0, 0, 0.8), 83 | inset 0 0 0 1px #ccd0da; /* Surface0 */ 84 | border-radius: 10px; 85 | margin: 18px; 86 | background-color: #eff1f5; /* Base */ 87 | color: #4c4f69; /* Text */ 88 | border: 2px solid rgba(204, 208, 218, 0.5); /* Surface0 with opacity */ 89 | padding: 0; 90 | } 91 | 92 | .floating-notifications.background .notification-row .notification-background .notification { 93 | padding: 7px; 94 | border-radius: 10px; 95 | } 96 | 97 | .floating-notifications.background .notification-row .notification-background .notification.critical { 98 | box-shadow: inset 0 0 7px 0 #d20f39; /* Red */ 99 | } 100 | 101 | .floating-notifications.background .notification-row .notification-background .notification .notification-content { 102 | margin: 7px; 103 | } 104 | 105 | .floating-notifications.background .notification-row .notification-background .notification .notification-content .summary { 106 | color: #4c4f69; /* Text */ 107 | padding-left: 12px; 108 | } 109 | 110 | .floating-notifications.background .notification-row .notification-background .notification .notification-content .time { 111 | color: #5c5f77; /* Subtext1 */ 112 | } 113 | 114 | .floating-notifications.background .notification-row .notification-background .notification .notification-content .body { 115 | color: #4c4f69; /* Text */ 116 | } 117 | 118 | .floating-notifications.background .notification-row .notification-background > *:last-child > * { 119 | min-height: 1.4em; 120 | } 121 | 122 | .floating-notifications.background .notification-row .notification-background > *:last-child > * .notification-action { 123 | border-radius: 7px; 124 | color: #4c4f69; /* Text */ 125 | background-color: #7287fd; /* Lavender */ 126 | box-shadow: inset 0 0 0 1px #7287fd; /* Lavender */ 127 | margin: 7px; 128 | } 129 | 130 | .floating-notifications.background .notification-row .notification-background > *:last-child > * .notification-action:hover { 131 | box-shadow: inset 0 0 0 1px #7287fd; /* Lavender */ 132 | background-color: #04a5e5; /* Sky */ 133 | color: #4c4f69; /* Text */ 134 | } 135 | 136 | .floating-notifications.background .notification-row .notification-background > *:last-child > * .notification-action:active { 137 | box-shadow: inset 0 0 0 1px #7287fd; /* Lavender */ 138 | background-color: #04a5e5; /* Sky */ 139 | color: #4c4f69; /* Text */ 140 | } 141 | 142 | .floating-notifications.background .notification-row .notification-background .close-button { 143 | margin: 7px; 144 | padding: 2px; 145 | border-radius: 6.3px; 146 | color: #d20f39; /* Red */ 147 | background-color: #e64553; /* Maroon */ 148 | } 149 | 150 | .floating-notifications.background .notification-row .notification-background .close-button:hover { 151 | background-color: #e64553; /* Maroon */ 152 | color: #d20f39; /* Red */ 153 | } 154 | 155 | .floating-notifications.background .notification-row .notification-background .close-button:active { 156 | background-color: #e64553; /* Maroon */ 157 | color: #d20f39; /* Red */ 158 | } 159 | 160 | /* Control center */ 161 | .control-center { 162 | box-shadow: 163 | 0 0 12px 0 rgba(0, 0, 0, 0.8); 164 | border-radius: 5px; 165 | margin: 12px; 166 | background-color: #eff1f5; /* Base */ 167 | color: #4c4f69; /* Text */ 168 | border: 2px solid #e6e9ef; /* Mantle */ 169 | padding: 10px; 170 | } 171 | 172 | .control-center .widget-title { 173 | margin: 8px; 174 | color: #4c4f69; /* Text */ 175 | font-size: 9px; 176 | } 177 | 178 | .control-center .widget-title button { 179 | border-radius: 7px; 180 | color: #4c4f69; /* Text */ 181 | background-color: #ccd0da; /* Surface0 */ 182 | box-shadow: inset 0 0 0 1px #9ca0b0; /* Overlay0 */ 183 | padding: 8px; 184 | } 185 | 186 | .control-center .widget-title button:active { 187 | background-color: #dd7878; /* Flamingo */ 188 | color: #ccd0da; /* Surface0 */ 189 | box-shadow: inset 0 0 0 1px #e64553; /* Maroon */ 190 | } 191 | 192 | .control-center .notification-row .notification-background { 193 | border-radius: 5px; 194 | color: #4c4f69; /* Text */ 195 | background-color: #dce0e8; /* Crust */ 196 | box-shadow: inset 0 0 0 2px #ccd0da; /* Surface0 */ 197 | margin-top: 10px; 198 | } 199 | 200 | .control-center .notification-row .notification-background .notification { 201 | padding: 5px; 202 | border-radius: 5px; 203 | } 204 | 205 | .control-center .notification-row .notification-background .notification.critical { 206 | box-shadow: inset 0 0 7px 0 #d20f39; /* Red */ 207 | } 208 | 209 | .control-center .notification-row .notification-background .notification .notification-content { 210 | margin: 7px; 211 | } 212 | 213 | .control-center .notification-row .notification-background .notification .notification-content .summary { 214 | color: #4c4f69; /* Text */ 215 | padding-left: 12px; 216 | } 217 | 218 | .control-center .notification-row .notification-background .notification .notification-content .time { 219 | color: #5c5f77; /* Subtext1 */ 220 | } 221 | 222 | .control-center .notification-row .notification-background .notification .notification-content .body { 223 | color: #4c4f69; /* Text */ 224 | } 225 | 226 | .control-center .notification-row .notification-background > *:last-child > * { 227 | min-height: 3.4em; 228 | } 229 | 230 | .control-center .notification-row .notification-background > *:last-child > * .notification-action { 231 | border-radius: 0px; 232 | color: #4c4f69; /* Text */ 233 | background-color: #7287fd; /* Lavender */ 234 | box-shadow: inset 0 0 0 1px #7287fd; /* Lavender */ 235 | margin: 4px; 236 | } 237 | 238 | .control-center .notification-row .notification-background > *:last-child > * .notification-action:hover { 239 | box-shadow: inset 0 0 0 1px #7287fd; /* Lavender */ 240 | background-color: #04a5e5; /* Sky */ 241 | color: #4c4f69; /* Text */ 242 | } 243 | 244 | .control-center .notification-row .notification-background > *:last-child > * .notification-action:active { 245 | box-shadow: inset 0 0 0 1px #7287fd; /* Lavender */ 246 | background-color: #04a5e5; /* Sky */ 247 | color: #4c4f69; /* Text */ 248 | } 249 | 250 | .control-center .notification-row .notification-background .close-button { 251 | margin: 3px; 252 | padding: 2px; 253 | border-radius: 6.3px; 254 | color: #eff1f5; /* Base */ 255 | background-color: #e64553; /* Maroon */ 256 | } 257 | 258 | .control-center .notification-row .notification-background .close-button:hover { 259 | background-color: #e64553; /* Maroon */ 260 | color: #ea76cb; /* Pink */ 261 | } 262 | 263 | .control-center .notification-row .notification-background .close-button:active { 264 | background-color: #e64553; /* Maroon */ 265 | color: #d20f39; /* Red */ 266 | } 267 | 268 | .control-center .notification-row .notification-background:hover { 269 | box-shadow: inset 0 0 0 1px #7287fd; /* Lavender */ 270 | background-color: #bcc5f7; /* Lavender */ 271 | color: #4c4f69; /* Text */ 272 | } 273 | 274 | .control-center .notification-row .notification-background:active { 275 | box-shadow: inset 0 0 0 1px #7287fd; /* Lavender */ 276 | background-color: #04a5e5; /* Sky */ 277 | color: #4c4f69; /* Text */ 278 | } 279 | 280 | /* Mpris widget */ 281 | .widget-mpris { 282 | padding: 5px; 283 | padding-bottom: 0px; 284 | margin-bottom: 0px; 285 | } 286 | -------------------------------------------------------------------------------- /.config/waybar/colors/catppuccin-latte.css: -------------------------------------------------------------------------------- 1 | @define-color rosewater #dc8a78; 2 | @define-color flamingo #dd7878; 3 | @define-color pink #ea76cb; 4 | @define-color mauve #8839ef; 5 | @define-color red #d20f39; 6 | @define-color maroon #e64553; 7 | @define-color peach #fe640b; 8 | @define-color yellow #df8e1d; 9 | @define-color green #40a02b; 10 | @define-color teal #179299; 11 | @define-color sky #04a5e5; 12 | @define-color sapphire #209fb5; 13 | @define-color blue #1e66f5; 14 | @define-color lavender #7287fd; 15 | @define-color text #4c4f69; 16 | @define-color subtext1 #5c5f77; 17 | @define-color subtext0 #6c6f85; 18 | @define-color overlay2 #7c7f93; 19 | @define-color overlay1 #8c8fa1; 20 | @define-color overlay0 #9ca0b0; 21 | @define-color surface2 #acb0be; 22 | @define-color surface1 #bcc0cc; 23 | @define-color surface0 #ccd0da; 24 | @define-color base #eff1f5; 25 | @define-color mantle #e6e9ef; 26 | @define-color crust #dce0e8; 27 | -------------------------------------------------------------------------------- /.config/waybar/colors/catppuccin-mocha.css: -------------------------------------------------------------------------------- 1 | @define-color rosewater #f5e0dc; 2 | @define-color flamingo #f2cdcd; 3 | @define-color pink #f5c2e7; 4 | @define-color mauve #cba6f7; 5 | @define-color red #f38ba8; 6 | @define-color maroon #eba0ac; 7 | @define-color peach #fab387; 8 | @define-color yellow #f9e2af; 9 | @define-color green #a6e3a1; 10 | @define-color teal #94e2d5; 11 | @define-color sky #89dceb; 12 | @define-color sapphire #74c7ec; 13 | @define-color blue #89b4fa; 14 | @define-color lavender #b4befe; 15 | @define-color text #cdd6f4; 16 | @define-color subtext1 #bac2de; 17 | @define-color subtext0 #a6adc8; 18 | @define-color overlay2 #9399b2; 19 | @define-color overlay1 #7f849c; 20 | @define-color overlay0 #6c7086; 21 | @define-color surface2 #585b70; 22 | @define-color surface1 #45475a; 23 | @define-color surface0 #313244; 24 | @define-color base #1e1e2e; 25 | @define-color mantle #181825; 26 | @define-color crust #11111b; 27 | -------------------------------------------------------------------------------- /.config/waybar/config.jsonc: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "output": ["HDMI-A-1","eDP-1"], 4 | "height": 20, // Waybar height (to be removed for auto height) 5 | "layer": "top", // Waybar at top layer 6 | "position": "top", 7 | "margin": "0px 0px 0px 0px", 8 | 9 | 10 | "modules-left": ["custom/power-button","custom/workspaces"], 11 | "modules-center": ["custom/window",], 12 | "modules-right": ["tray","group/clock","group/sys-info","battery","custom/notification"], 13 | 14 | "battery": { 15 | "bat": "BAT0", 16 | "format": "{icon}{capacity}", 17 | "format-critical": "{icon}{capacity}", 18 | "format-good": "{icon}{capacity}", 19 | "format-icons": [ 20 | "󰛞 󱢠 󱢠 󱢠 󱢠 ", 21 | "󰣐 󱢠 󱢠 󱢠 󱢠 ", 22 | "󰣐 󰛞 󱢠 󱢠 󱢠 ", 23 | "󰣐 󰣐 󱢠 󱢠 󱢠 ", 24 | "󰣐 󰣐 󰛞 󱢠 󱢠 ", 25 | "󰣐 󰣐 󰣐 󱢠 󱢠 ", 26 | "󰣐 󰣐 󰣐 󰛞 󱢠 ", 27 | "󰣐 󰣐 󰣐 󰣐 󱢠 ", 28 | "󰣐 󰣐 󰣐 󰣐 󰛞 ", 29 | "󰣐 󰣐 󰣐 󰣐 󰣐 " 30 | ], 31 | "format-time": "{H}hr & {m}min", 32 | "format-warning": "{icon}{capacity}", 33 | "interval": 60, 34 | "max-length": 25, 35 | "states": { 36 | "critical": 15, 37 | "good": 100, 38 | "warning": 30 39 | }, 40 | "tooltip-format": "{time} (󰚥 plugged), at {capacity}%", 41 | "tooltip-format-charging": "{time} (󰢟 charging), at {capacity}%", 42 | "tooltip-format-discharging": "{time} (󱧦 discharging), at {capacity}%" 43 | }, 44 | 45 | "bluetooth": { 46 | "format": "", 47 | "format-connected": "󰂱", 48 | "format-disabled": "󰂲", 49 | "format-off": "󰂲", 50 | "format-on": "", 51 | "on-click": "blueberry", 52 | "on-click-right": "rfkill toggle bluetooth", 53 | "tooltip-format": "{controller_alias}\t{controller_address}\n\n{num_connections} connected", 54 | "tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}", 55 | "tooltip-format-enumerate-connected": "{device_alias}\t{device_address}", 56 | "tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t󰥉{device_battery_percentage}%" 57 | }, 58 | 59 | "clock#date": { 60 | "actions": { 61 | "on-scroll-down": "shift_down", 62 | "on-scroll-up": "shift_up" 63 | }, 64 | 65 | "calendar": { 66 | "format": { 67 | "days": "{}", 68 | "months": "{}", 69 | "today": "{}", 70 | "weekdays": "{}", 71 | "weeks": "W{}" 72 | }, 73 | 74 | "mode": "month", 75 | "mode-mon-col": 1, 76 | "on-scroll": 1, 77 | "weeks-pos": "right" 78 | }, 79 | "format": "{:%A, %b %e}", 80 | "interval": 43200, 81 | "tooltip-format": "{calendar}" 82 | }, 83 | 84 | "clock#time": { 85 | "format": "{:%OI:%OM %p}", 86 | "format-alt": "{:%A, %b %e}", 87 | "interval": 60 88 | }, 89 | 90 | "custom/notification": { 91 | "escape": true, 92 | "exec": "swaync-client -swb", 93 | "exec-if": "which swaync-client", 94 | "format": "{icon}", 95 | "format-icons": { 96 | "dnd-inhibited-none": "󰂚", 97 | "dnd-inhibited-notification": "󰂚", 98 | "dnd-none": "󰂛", 99 | "dnd-notification": "󰂛", 100 | "inhibited-none": "󰂚󰜺", 101 | "inhibited-notification": "󰵙", 102 | "none": "󰂚", 103 | "notification": "󰂚" 104 | }, 105 | "on-click": "sleep 0.1 && swaync-client -t -sw", 106 | "on-click-right": "sleep 0.1 && swaync-client -d -sw", 107 | "return-type": "json", 108 | "tooltip": false 109 | }, 110 | "group/brightness": { 111 | "drawer": { 112 | "children-class": "brightness", 113 | "transition-duration": 500, 114 | "transition-left-to-right": true 115 | }, 116 | "modules": [ 117 | "backlight", 118 | "backlight/slider" 119 | ], 120 | "orientation": "horizontal" 121 | }, 122 | 123 | "group/clock": { 124 | "modules": [ 125 | "clock#time" 126 | ], 127 | "orientation": "inherit" 128 | }, 129 | 130 | "group/sys-info": { 131 | "modules": [ 132 | "network", 133 | "bluetooth", 134 | "group/volume", 135 | "group/brightness" 136 | ], 137 | "orientation": "horizontal" 138 | }, 139 | 140 | "group/volume": { 141 | "drawer": { 142 | "children-class": "volume", 143 | "transition-duration": 500, 144 | "transition-left-to-right": true 145 | }, 146 | "modules": [ 147 | "pulseaudio", 148 | "pulseaudio/slider" 149 | ], 150 | "orientation": "horizontal" 151 | }, 152 | "custom/workspaces": { 153 | "exec": "~/.scripts/workspaces.sh \"$WAYBAR_OUTPUT_NAME\"", 154 | "signal": 8 155 | }, 156 | 157 | 158 | "network": { 159 | "format": "{icon}", 160 | "format-disconnected": "󰖪", 161 | "format-ethernet": "󰈀 /{ifname}", 162 | "format-icons": [ 163 | "󰤯", 164 | "󰤟", 165 | "󰤢", 166 | "󰤥", 167 | "󰤨" 168 | ], 169 | "format-linked": "󰖩", 170 | "format-wifi": "{icon}", 171 | "interval": 30, 172 | "on-click": "nm-connection-editor", 173 | "on-click-right": "rfkill toggle wifi", 174 | "tooltip": true, 175 | "tooltip-format": "interface:\t{ifname}\n\nconnected to {essid} at {signalStrength}% strength", 176 | "tooltip-format-disconnected": "interface: {ifname}\nconnected to {essid}\nat {signalStrength}% strength" 177 | }, 178 | 179 | "pulseaudio": { 180 | "format": "{icon}", 181 | "format-bluetooth": "{icon}", 182 | "format-icons": { 183 | "default": [ 184 | "󰕿", 185 | "", 186 | "󰕾" 187 | ] 188 | }, 189 | "format-muted": "󰖁", 190 | "on-click": "pavucontrol", 191 | "on-click-right": "pactl set-sink-mute 0 toggle", 192 | "scroll-step": 1, 193 | "tooltip-format": "{desc}\t{icon}{volume}%" 194 | }, 195 | 196 | "pulseaudio/slider": { 197 | "max": 100, 198 | "min": 0, 199 | "orientation": "horizontal" 200 | }, 201 | 202 | "tray": { 203 | "icon-size": 12 204 | }, 205 | 206 | "backlight": { 207 | "device": "intel_backlight", 208 | "format": "{icon}", 209 | "tooltip-format": "{icon}{percent}%", 210 | "format-icons": ["󰃞","󰃝","󰃟","󰃠"] 211 | }, 212 | 213 | "backlight/slider": { 214 | "max": 100, 215 | "min": 0, 216 | "orientation": "horizontal", 217 | "device": "intel_backlight" 218 | }, 219 | 220 | "custom/power-button": { 221 | "format": "", 222 | "on-click": "wlogout -b 5", 223 | "tooltip": false 224 | }, 225 | 226 | "custom/window": { 227 | "return-type": "json", 228 | "max-length": 20, 229 | "escape": true, 230 | "exec": "~/.scripts/window.nu", 231 | "format": "{}" 232 | }, 233 | 234 | "image": { 235 | "tooltip": false, 236 | "path": "/home/rei/.face.icon", 237 | "size": 47 238 | }, 239 | 240 | } 241 | ] 242 | -------------------------------------------------------------------------------- /.config/waybar/style.css: -------------------------------------------------------------------------------- 1 | /home/asuka/.config/waybar/themes/dark -------------------------------------------------------------------------------- /.config/waybar/themes/dark: -------------------------------------------------------------------------------- 1 | @import url("colors/catppuccin-mocha.css"); 2 | 3 | #waybar { 4 | background-color: @base; 5 | color: @text; 6 | font-family: "SpaceMonoNerdFont", "JetBrainsMono Nerd Font", monospace; 7 | font-size: 9px; 8 | } 9 | 10 | /* Space first and last modules evenly */ 11 | .modules-right:last-child { 12 | margin-right: 3px; /* Reduced from 5px */ 13 | } 14 | .modules-left:first-child { 15 | margin-left: 3px; /* Reduced from 5px */ 16 | } 17 | 18 | /* Make all the NF icons smaller */ 19 | #battery, 20 | #sys-info, 21 | #custom-notification, 22 | #pulseaudio, 23 | #backlight, 24 | #custom-power-button, 25 | #custom-keyboard, 26 | #custom-pomo-icon { 27 | font-size: 8px; /* Reduced from 9px */ 28 | } 29 | 30 | /* Active and inactive states */ 31 | #network.wifi { 32 | color: @text; 33 | } 34 | #network.disabled, 35 | #network.disconnected, 36 | #bluetooth.disabled, 37 | #bluetooth.off, 38 | #pulseaudio.muted, 39 | #pulseaudio.source-muted { 40 | color: alpha(@subtext0, 0.7); 41 | } 42 | 43 | /* Widget Groups Styling */ 44 | #custom-workspaces, 45 | #battery, 46 | box.modules-right > box.horizontal, 47 | #custom-notification, 48 | #sys-info, 49 | #custom-power-button { 50 | background-color: @mantle; 51 | border-radius: 3px; /* Reduced from 4px */ 52 | margin: 7px 3px; /* Reduced from 10px 5px */ 53 | padding: 3px 8px; /* Reduced from 5px 10px */ 54 | } 55 | 56 | /* Styling workspace */ 57 | #custom-workspaces, 58 | #custom-workspaces button, 59 | #pulseaudio-slider, 60 | #backlight-slider { 61 | all: unset; 62 | } 63 | #custom-workspaces { 64 | color: @red; 65 | background-color: @mantle; 66 | margin: 7px 3px; /* Reduced from 10px 5px */ 67 | padding: 0px 16px; /* Reduced from 0px 20px */ 68 | border-radius: 3px; /* Reduced from 4px */ 69 | } 70 | #custom-workspaces > button { 71 | padding: 0px 12px; /* Reduced from 0px 15px */ 72 | font-weight: 900; 73 | border-radius: 0px; 74 | } 75 | #custom-workspaces > button.empty { 76 | color: @red; 77 | } 78 | #custom-workspaces > button.visible { 79 | color: @overlay0; 80 | } 81 | #custom-workspaces > button.active { 82 | color: @red; 83 | background: alpha(@red, 0.1); 84 | } 85 | #custom-workspaces > button:hover { 86 | background: alpha(@red, 0.2); 87 | color: @text; 88 | } 89 | 90 | /* Styling tray */ 91 | #tray { 92 | background-color: transparent; 93 | padding: 0px; 94 | margin: 0px; 95 | } 96 | #tray .active image { 97 | margin: 0px; 98 | padding: 0px 4px; /* Reduced from 0px 5px */ 99 | } 100 | 101 | /* Wifi module spaced away from bluetooth */ 102 | #network, 103 | #bluetooth { 104 | margin-right: 12px; /* Reduced from 15px */ 105 | } 106 | #backlight { 107 | margin-right: 3px; /* Reduced from 5px */ 108 | margin-left: 5px; /* Reduced from 7px */ 109 | } 110 | #pulseaudio { 111 | margin-right: 7px; /* Reduced from 10px */ 112 | } 113 | #pulseaudio.bluetooth { 114 | color: @red; 115 | } 116 | 117 | /* Styling brightness and volume and slider */ 118 | #pulseaudio-slider, 119 | #backlight-slider { 120 | border: none; 121 | } 122 | #pulseaudio-slider { 123 | margin-left: 3px; /* Reduced from 5px */ 124 | margin-right: 3px; /* Reduced from 5px */ 125 | } 126 | #backlight-slider { 127 | margin-left: 7px; /* Reduced from 10px */ 128 | } 129 | #pulseaudio-slider slider, 130 | #backlight-slider slider { 131 | margin-left: -8px; /* Adjusted from -10px */ 132 | min-width: 8px; /* Reduced from 10px */ 133 | min-height: 8px; /* Reduced from 10px */ 134 | background: transparent; 135 | box-shadow: none; 136 | padding: 0px; 137 | } 138 | #pulseaudio-slider trough, 139 | #backlight-slider trough { 140 | min-width: 70px; /* Reduced from 80px */ 141 | border-radius: 4px; /* Adjusted from 5px */ 142 | background-color: @surface0; 143 | } 144 | #pulseaudio-slider highlight, 145 | #backlight-slider highlight { 146 | border-radius: 4px; /* Adjusted from 5px */ 147 | min-height: 6px; /* Reduced from 8px */ 148 | } 149 | 150 | /* Styling the clock */ 151 | #clock.date { 152 | font-weight: normal; 153 | } 154 | #clock.time { 155 | padding: 0px; 156 | font-weight: 500; 157 | } 158 | 159 | #clock { 160 | margin: 0px 7px; 161 | } 162 | 163 | /* Styling tooltips */ 164 | tooltip { 165 | padding: 12px; /* Reduced from 15px */ 166 | background-color: @base; 167 | color: @overlay0; 168 | font-family: "Space Mono Nerd Font"; 169 | font-size: 10px; /* Reduced from 12px */ 170 | } 171 | 172 | tooltip label { 173 | padding: 8px; /* Reduced from 10px */ 174 | color: @foreground; 175 | } 176 | 177 | /* Custom Window Styling */ 178 | #custom-window { 179 | color: @red; 180 | padding: 0px 8px; /* Reduced from 0px 10px */ 181 | } 182 | -------------------------------------------------------------------------------- /.config/waybar/themes/light: -------------------------------------------------------------------------------- 1 | @import url("colors/catppuccin-latte.css"); 2 | 3 | #waybar { 4 | background-color: @base; 5 | color: @text; 6 | font-family: "SpaceMonoNerdFont", "JetBrainsMono Nerd Font", monospace; 7 | font-size: 9px; 8 | } 9 | 10 | /* Space first and last modules evenly */ 11 | .modules-right:last-child { 12 | margin-right: 3px; /* Reduced from 5px */ 13 | } 14 | .modules-left:first-child { 15 | margin-left: 3px; /* Reduced from 5px */ 16 | } 17 | 18 | /* Make all the NF icons smaller */ 19 | #battery, 20 | #sys-info, 21 | #custom-notification, 22 | #pulseaudio, 23 | #backlight, 24 | #custom-power-button, 25 | #custom-keyboard, 26 | #custom-pomo-icon { 27 | font-size: 8px; /* Reduced from 9px */ 28 | } 29 | 30 | /* Active and inactive states */ 31 | #network.wifi { 32 | color: @text; 33 | } 34 | #network.disabled, 35 | #network.disconnected, 36 | #bluetooth.disabled, 37 | #bluetooth.off, 38 | #pulseaudio.muted, 39 | #pulseaudio.source-muted { 40 | color: alpha(@subtext0, 0.7); 41 | } 42 | 43 | /* Widget Groups Styling */ 44 | #custom-workspaces, 45 | #battery, 46 | box.modules-right > box.horizontal, 47 | #custom-notification, 48 | #sys-info, 49 | #custom-power-button { 50 | background-color: @mantle; 51 | border-radius: 3px; /* Reduced from 4px */ 52 | margin: 7px 3px; /* Reduced from 10px 5px */ 53 | padding: 3px 8px; /* Reduced from 5px 10px */ 54 | } 55 | 56 | /* Styling workspace */ 57 | #custom-workspaces, 58 | #custom-workspaces button, 59 | #pulseaudio-slider, 60 | #backlight-slider { 61 | all: unset; 62 | } 63 | #custom-workspaces { 64 | color: @maroon; 65 | background-color: @mantle; 66 | margin: 7px 3px; /* Reduced from 10px 5px */ 67 | padding: 0px 16px; /* Reduced from 0px 20px */ 68 | border-radius: 3px; /* Reduced from 4px */ 69 | } 70 | #custom-workspaces > button { 71 | padding: 0px 12px; /* Reduced from 0px 15px */ 72 | font-weight: 900; 73 | border-radius: 0px; 74 | } 75 | #custom-workspaces > button.empty { 76 | color: @maroon; 77 | } 78 | #custom-workspaces > button.visible { 79 | color: @overlay0; 80 | } 81 | #custom-workspaces > button.active { 82 | color: @maroon; 83 | background: alpha(@maroon, 0.1); 84 | } 85 | #custom-workspaces > button:hover { 86 | background: alpha(@maroon, 0.2); 87 | color: @text; 88 | } 89 | 90 | /* Styling tray */ 91 | #tray { 92 | background-color: transparent; 93 | padding: 0px; 94 | margin: 0px; 95 | } 96 | #tray .active image { 97 | margin: 0px; 98 | padding: 0px 4px; /* Reduced from 0px 5px */ 99 | } 100 | 101 | /* Wifi module spaced away from bluetooth */ 102 | #network, 103 | #bluetooth { 104 | margin-right: 12px; /* Reduced from 15px */ 105 | } 106 | #backlight { 107 | margin-right: 3px; /* Reduced from 5px */ 108 | margin-left: 5px; /* Reduced from 7px */ 109 | } 110 | #pulseaudio { 111 | margin-right: 7px; /* Reduced from 10px */ 112 | } 113 | #pulseaudio.bluetooth { 114 | color: @maroon; 115 | } 116 | 117 | /* Styling brightness and volume and slider */ 118 | #pulseaudio-slider, 119 | #backlight-slider { 120 | border: none; 121 | } 122 | #pulseaudio-slider { 123 | margin-left: 3px; /* Reduced from 5px */ 124 | margin-right: 3px; /* Reduced from 5px */ 125 | } 126 | #backlight-slider { 127 | margin-left: 7px; /* Reduced from 10px */ 128 | } 129 | #pulseaudio-slider slider, 130 | #backlight-slider slider { 131 | margin-left: -8px; /* Adjusted from -10px */ 132 | min-width: 8px; /* Reduced from 10px */ 133 | min-height: 8px; /* Reduced from 10px */ 134 | background: transparent; 135 | box-shadow: none; 136 | padding: 0px; 137 | } 138 | #pulseaudio-slider trough, 139 | #backlight-slider trough { 140 | min-width: 70px; /* Reduced from 80px */ 141 | border-radius: 4px; /* Adjusted from 5px */ 142 | background-color: @surface0; 143 | } 144 | #pulseaudio-slider highlight, 145 | #backlight-slider highlight { 146 | border-radius: 4px; /* Adjusted from 5px */ 147 | min-height: 6px; /* Reduced from 8px */ 148 | } 149 | 150 | /* Styling the clock */ 151 | #clock.date { 152 | font-weight: normal; 153 | } 154 | #clock.time { 155 | padding: 0px; 156 | font-weight: 500; 157 | } 158 | 159 | #clock { 160 | margin: 0px 7px; 161 | } 162 | 163 | /* Styling tooltips */ 164 | tooltip { 165 | padding: 12px; /* Reduced from 15px */ 166 | background-color: @base; 167 | color: @overlay0; 168 | font-family: "Space Mono Nerd Font"; 169 | font-size: 10px; /* Reduced from 12px */ 170 | } 171 | 172 | tooltip label { 173 | padding: 8px; /* Reduced from 10px */ 174 | color: @foreground; 175 | } 176 | 177 | /* Custom Window Styling */ 178 | #custom-window { 179 | color: @maroon; 180 | padding: 0px 8px; /* Reduced from 0px 10px */ 181 | } 182 | -------------------------------------------------------------------------------- /.config/wlogout/layout: -------------------------------------------------------------------------------- 1 | { 2 | "label" : "lock", 3 | "action" : "~/.config/hypr/scripts/lock.sh", 4 | "text" : "Lock", 5 | "keybind" : "l" 6 | } 7 | { 8 | "label" : "reboot", 9 | "action" : "systemctl reboot", 10 | "text" : "Reboot", 11 | "keybind" : "r" 12 | } 13 | { 14 | "label" : "shutdown", 15 | "action" : "systemctl poweroff", 16 | "text" : "Shutdown", 17 | "keybind" : "s" 18 | } 19 | { 20 | "label" : "logout", 21 | "action" : "hyprctl dispatch exit 0", 22 | "text" : "Logout", 23 | "keybind" : "e" 24 | } 25 | { 26 | "label" : "suspend", 27 | "action" : "systemctl suspend", 28 | "text" : "Suspend", 29 | "keybind" : "u" 30 | } 31 | -------------------------------------------------------------------------------- /.config/wlogout/lock-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NotMugil/notan/af3326633c8186de329d428f8383da27a9695b19/.config/wlogout/lock-hover.png -------------------------------------------------------------------------------- /.config/wlogout/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NotMugil/notan/af3326633c8186de329d428f8383da27a9695b19/.config/wlogout/lock.png -------------------------------------------------------------------------------- /.config/wlogout/logout-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NotMugil/notan/af3326633c8186de329d428f8383da27a9695b19/.config/wlogout/logout-hover.png -------------------------------------------------------------------------------- /.config/wlogout/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NotMugil/notan/af3326633c8186de329d428f8383da27a9695b19/.config/wlogout/logout.png -------------------------------------------------------------------------------- /.config/wlogout/power-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NotMugil/notan/af3326633c8186de329d428f8383da27a9695b19/.config/wlogout/power-hover.png -------------------------------------------------------------------------------- /.config/wlogout/power.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NotMugil/notan/af3326633c8186de329d428f8383da27a9695b19/.config/wlogout/power.png -------------------------------------------------------------------------------- /.config/wlogout/restart-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NotMugil/notan/af3326633c8186de329d428f8383da27a9695b19/.config/wlogout/restart-hover.png -------------------------------------------------------------------------------- /.config/wlogout/restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NotMugil/notan/af3326633c8186de329d428f8383da27a9695b19/.config/wlogout/restart.png -------------------------------------------------------------------------------- /.config/wlogout/sleep-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NotMugil/notan/af3326633c8186de329d428f8383da27a9695b19/.config/wlogout/sleep-hover.png -------------------------------------------------------------------------------- /.config/wlogout/sleep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NotMugil/notan/af3326633c8186de329d428f8383da27a9695b19/.config/wlogout/sleep.png -------------------------------------------------------------------------------- /.config/wlogout/style.css: -------------------------------------------------------------------------------- 1 | window { 2 | font-family: SpaceMonoNerdFont; 3 | font-size: 14pt; 4 | color: #eff1f5; /* text */ 5 | background-color: rgba(140, 143, 161, 0.9); 6 | } 7 | 8 | button { 9 | background-repeat: no-repeat; 10 | background-position: center; 11 | background-size: 25%; 12 | border: none; 13 | box-shadow: none; 14 | color: #eff1f5; 15 | background-color: rgba(30, 30, 46, 0); 16 | transition: background-color 0.2s ease-in-out; 17 | } 18 | 19 | button:hover { 20 | background-color: rgba(49, 50, 68, 0.1); 21 | } 22 | 23 | button:focus { 24 | background-color: #dd7878; 25 | color: #eff1f5; 26 | } 27 | 28 | #lock { 29 | background-image: image(url("./lock.png")); 30 | padding: 35px; 31 | } 32 | #lock:focus { 33 | background-image: image(url("./lock-hover.png")); 34 | padding: 35px; 35 | } 36 | 37 | #logout { 38 | background-image: image(url("./logout.png")); 39 | padding: 30px; 40 | } 41 | #logout:focus { 42 | background-image: image(url("./logout-hover.png")); 43 | padding: 30px; 44 | } 45 | 46 | #suspend { 47 | background-image: image(url("./sleep.png")); 48 | padding: 30px; 49 | } 50 | #suspend:focus { 51 | background-image: image(url("./sleep-hover.png")); 52 | padding: 30px; 53 | } 54 | 55 | #shutdown { 56 | background-image: image(url("./power.png")); 57 | padding: 30px; 58 | } 59 | #shutdown:focus { 60 | background-image: image(url("./power-hover.png")); 61 | padding: 30px; 62 | } 63 | 64 | #reboot { 65 | background-image: image(url("./restart.png")); 66 | padding: 30px; 67 | } 68 | #reboot:focus { 69 | background-image: image(url("./restart-hover.png")); 70 | padding: 30px; 71 | } 72 | -------------------------------------------------------------------------------- /.config/wofi/config: -------------------------------------------------------------------------------- 1 | # Set the path to the custom style sheet 2 | style=$HOME/.config/wofi/style.css 3 | 4 | 5 | # Set the width and height of the wofi window 6 | width=500 7 | height=500 8 | 9 | # Set offset from left and top of the screen 10 | xoffset=433 # (screen_width - width) / 2 11 | yoffset=134 # (screen_height - height) / 2 12 | 13 | # Specify the mode to show (e.g., drun for application launcher) 14 | show=drun 15 | 16 | # Additional configuration options 17 | always_parse_args=true 18 | show_all=true 19 | print_command=true 20 | layer=overlay 21 | insensitive=true 22 | prompt= 23 | -------------------------------------------------------------------------------- /.config/wofi/style.css: -------------------------------------------------------------------------------- 1 | window { 2 | margin: 0px; 3 | border: 2px solid #414868; 4 | border-radius: 5px; 5 | background-color: #24283b; 6 | font-family: monospace; 7 | font-size: 12px; 8 | } 9 | 10 | #input { 11 | margin: 5px; 12 | border: 1px solid #24283b; 13 | color: #c0caf5; 14 | background-color: #24283b; 15 | } 16 | 17 | #input image { 18 | color: #c0caf5; 19 | } 20 | 21 | #inner-box { 22 | margin: 5px; 23 | border: none; 24 | background-color: #24283b; 25 | } 26 | 27 | #outer-box { 28 | margin: 5px; 29 | border: none; 30 | background-color: #24283b; 31 | } 32 | 33 | #scroll { 34 | margin: 0px; 35 | border: none; 36 | } 37 | 38 | #text { 39 | margin: 5px; 40 | border: none; 41 | color: #c0caf5; 42 | } 43 | 44 | #entry:selected { 45 | background-color: #414868; 46 | font-weight: normal; 47 | } 48 | 49 | #text:selected { 50 | background-color: #414868; 51 | font-weight: normal; 52 | } 53 | 2;9u 54 | -------------------------------------------------------------------------------- /.config/wofi/wallpaper.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --bg-col: #f5ede4; /* Light creamy beige background */ 3 | --bg-col-light: #f7f1eb; /* Lighter creamy beige */ 4 | --border-col: #eba0ac; /* Soft taupe for borders */ 5 | --selected-col: #eba0ac; /* Light peach for selected items */ 6 | --blue: #385e8a; /* Soft blue for accents */ 7 | --fg-col: #7d7365; /* Darker taupe for text */ 8 | --fg-col2: #a37751; /* Caramel brown for highlights */ 9 | --grey: #a1988c; /* Light taupe for subtle elements */ 10 | --text: #7d7365; /* Dark taupe for text */ 11 | } 12 | 13 | window { 14 | margin: 0px; 15 | border: 2px solid #eba0ac; /* Border color set to pink */ 16 | border-radius: 15px; 17 | background-color: var(--bg-col); 18 | font-family: monospace; 19 | font-size: 12px; 20 | } 21 | 22 | #window { 23 | border: 4px solid var(--pink); /* Border color set to pink */ 24 | } 25 | 26 | #input { 27 | margin: 15px; 28 | color: var(--text); 29 | background-color: var(--bg-col); 30 | } 31 | 32 | #input:focus { 33 | outline: var(--border-col); 34 | box-shadow: 0 0 0 2px var(--border-col); 35 | } 36 | 37 | #input image { 38 | color: var(--text); 39 | } 40 | 41 | #inner-box { 42 | border-radius: 15px; 43 | margin: 15px; 44 | background-color: var(--bg-col); 45 | } 46 | 47 | /* Style for outer box */ 48 | #outer-box { 49 | border: 4px solid var(--pink); 50 | border-radius: 15px; 51 | background-color: var(--bg-col); 52 | } 53 | 54 | /* Style for scroll area */ 55 | #scroll { 56 | margin: 0px; 57 | border: none; 58 | } 59 | 60 | /* Style for text elements */ 61 | #text { 62 | margin: 5px; 63 | border: none; 64 | color: var(--text); 65 | } 66 | 67 | /* Style for selected entry in the entry mode */ 68 | #entry:selected { 69 | background-color: var(--bg-col); 70 | font-weight: normal; 71 | } 72 | 73 | /* Style for selected text in the text mode */ 74 | #text:selected { 75 | background-color: var(--selected-col); 76 | font-weight: normal; 77 | } 78 | 79 | -------------------------------------------------------------------------------- /.config/zsh/.zsh/catppuccin_mocha-zsh-syntax-highlighting.zsh: -------------------------------------------------------------------------------- 1 | # Catppuccin Mocha Theme (for zsh-syntax-highlighting) 2 | # 3 | # Paste this files contents inside your ~/.zshrc before you activate zsh-syntax-highlighting 4 | ZSH_HIGHLIGHT_HIGHLIGHTERS=(main cursor) 5 | typeset -gA ZSH_HIGHLIGHT_STYLES 6 | 7 | # Main highlighter styling: https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters/main.md 8 | # 9 | ## General 10 | ### Diffs 11 | ### Markup 12 | ## Classes 13 | ## Comments 14 | ZSH_HIGHLIGHT_STYLES[comment]='fg=#585b70' 15 | ## Constants 16 | ## Entitites 17 | ## Functions/methods 18 | ZSH_HIGHLIGHT_STYLES[alias]='fg=#a6e3a1' 19 | ZSH_HIGHLIGHT_STYLES[suffix-alias]='fg=#a6e3a1' 20 | ZSH_HIGHLIGHT_STYLES[global-alias]='fg=#a6e3a1' 21 | ZSH_HIGHLIGHT_STYLES[function]='fg=#a6e3a1' 22 | ZSH_HIGHLIGHT_STYLES[command]='fg=#a6e3a1' 23 | ZSH_HIGHLIGHT_STYLES[precommand]='fg=#a6e3a1,italic' 24 | ZSH_HIGHLIGHT_STYLES[autodirectory]='fg=#fab387,italic' 25 | ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=#fab387' 26 | ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=#fab387' 27 | ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=#cba6f7' 28 | ## Keywords 29 | ## Built ins 30 | ZSH_HIGHLIGHT_STYLES[builtin]='fg=#a6e3a1' 31 | ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=#a6e3a1' 32 | ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=#a6e3a1' 33 | ## Punctuation 34 | ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=#f38ba8' 35 | ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter]='fg=#cdd6f4' 36 | ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter-unquoted]='fg=#cdd6f4' 37 | ZSH_HIGHLIGHT_STYLES[process-substitution-delimiter]='fg=#cdd6f4' 38 | ZSH_HIGHLIGHT_STYLES[back-quoted-argument-delimiter]='fg=#f38ba8' 39 | ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=#f38ba8' 40 | ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]='fg=#f38ba8' 41 | ## Serializable / Configuration Languages 42 | ## Storage 43 | ## Strings 44 | ZSH_HIGHLIGHT_STYLES[command-substitution-quoted]='fg=#f9e2af' 45 | ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter-quoted]='fg=#f9e2af' 46 | ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=#f9e2af' 47 | ZSH_HIGHLIGHT_STYLES[single-quoted-argument-unclosed]='fg=#e64553' 48 | ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=#f9e2af' 49 | ZSH_HIGHLIGHT_STYLES[double-quoted-argument-unclosed]='fg=#e64553' 50 | ZSH_HIGHLIGHT_STYLES[rc-quote]='fg=#f9e2af' 51 | ## Variables 52 | ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]='fg=#cdd6f4' 53 | ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument-unclosed]='fg=#e64553' 54 | ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=#cdd6f4' 55 | ZSH_HIGHLIGHT_STYLES[assign]='fg=#cdd6f4' 56 | ZSH_HIGHLIGHT_STYLES[named-fd]='fg=#cdd6f4' 57 | ZSH_HIGHLIGHT_STYLES[numeric-fd]='fg=#cdd6f4' 58 | ## No category relevant in spec 59 | ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=#e64553' 60 | ZSH_HIGHLIGHT_STYLES[path]='fg=#cdd6f4,underline' 61 | ZSH_HIGHLIGHT_STYLES[path_pathseparator]='fg=#f38ba8,underline' 62 | ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=#cdd6f4,underline' 63 | ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]='fg=#f38ba8,underline' 64 | ZSH_HIGHLIGHT_STYLES[globbing]='fg=#cdd6f4' 65 | ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=#cba6f7' 66 | #ZSH_HIGHLIGHT_STYLES[command-substitution]='fg=?' 67 | #ZSH_HIGHLIGHT_STYLES[command-substitution-unquoted]='fg=?' 68 | #ZSH_HIGHLIGHT_STYLES[process-substitution]='fg=?' 69 | #ZSH_HIGHLIGHT_STYLES[arithmetic-expansion]='fg=?' 70 | ZSH_HIGHLIGHT_STYLES[back-quoted-argument-unclosed]='fg=#e64553' 71 | ZSH_HIGHLIGHT_STYLES[redirection]='fg=#cdd6f4' 72 | ZSH_HIGHLIGHT_STYLES[arg0]='fg=#cdd6f4' 73 | ZSH_HIGHLIGHT_STYLES[default]='fg=#cdd6f4' 74 | ZSH_HIGHLIGHT_STYLES[cursor]='fg=#cdd6f4' 75 | -------------------------------------------------------------------------------- /.config/zsh/.zshrc: -------------------------------------------------------------------------------- 1 | 2 | export LS_COLORS="di=35:$LS_COLORS:fi=00:$LS_COLORS:ln=36:$LS_COLORS:pi=34:$LS_COLORS:so=32:$LS_COLORS:bd=34:$LS_COLORS:cd=30:$LS_COLORS:or=31:$LS_COLORS:mi=31:$LS_COLORS" 3 | 4 | source ${ZDOTDIR}/environment.zsh # Source envvars 5 | source ${ZDOTDIR}/profile.zsh # Source zprofile 6 | source ${ZDOTDIR}/options.zsh # Source zsh options 7 | source ${ZDOTDIR}/compinit.zsh # Source completion conf 8 | source ${ZDOTDIR}/aliases.zsh # Source zsh aliases 9 | source ${ZDOTDIR}/keybinds.zsh # Source zsh keybinds 10 | source ${ZDOTDIR}/functions.zsh # Source custom functions 11 | source ${ZDOTDIR}/keybinds-late.zsh # Source late load keybinds 12 | source ${ZDOTDIR}/ohmyzsh.zsh 13 | source ${ZDOTDIR}/aliases-late.zsh 14 | #source ${ZDOTDIR}/lscolors.zsh 15 | 16 | PROMPT='%F{yellow}%3~%f $ ' 17 | -------------------------------------------------------------------------------- /.config/zsh/aliases-late.zsh: -------------------------------------------------------------------------------- 1 | 2 | # `eza` aliases for more informative and colored output 3 | alias la='eza --icons -a --group-directories-first' # List all files and directories, including hidden ones 4 | alias ll='eza --icons -lah --group-directories-first' # List in long format with permissions and human-readable siz> 5 | alias ls='eza --icons --group-directories-first' # List files and directories 6 | 7 | # Git aliases 8 | alias g='git' 9 | alias ga='git add' 10 | alias gs='git status' 11 | alias gaa='git add --all' 12 | alias gb='git branch' 13 | alias gc='git commit --verbose' 14 | alias gcam='git commit --all --message' 15 | alias gd='git diff' 16 | alias gp='git push' 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /.config/zsh/aliases.zsh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env zsh 2 | 3 | # Basic aliases 4 | alias c='clear' # Clear terminal 5 | alias x='exit' # Close terminal or Exit 6 | alias e='$fileManager .' # Open current directory in thunar 7 | alias h='history -10' # Show last 10 history commands 8 | alias hc='history -c' # Clear history 9 | alias hg="history | grep " # +command 10 | alias cp='cp -rv' # Recursive and verbose `cp` 11 | alias rm='rm -rIv' # Recursive, interactive, and verbose `rm` 12 | alias mv='mv -v' # Verbose `mv` 13 | alias mkdir='mkdir -p' # recursive mkdir 14 | 15 | # alias grep='rg' # use ripgrep 16 | # alias cat='bat' 17 | 18 | # `eza` alias for displaying directory trees 19 | alias tree='eza --icons --tree' 20 | 21 | # Quality of life commands 22 | alias mkcd='function _mkcd() { mkdir -p "$1" && cd "$1"; }; _mkcd' 23 | 24 | # Misc aliases 25 | alias updates='yay -Qu' # Check system and AUR updates 26 | alias wget=wget --hsts-file="$XDG_DATA_HOME/wget-hsts" 27 | -------------------------------------------------------------------------------- /.config/zsh/compinit.zsh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env zsh 2 | 3 | autoload -Uz compinit 4 | compinit -d $XDG_STATE_HOME/zsh/zcompdump-$ZSH_VERSION 5 | -------------------------------------------------------------------------------- /.config/zsh/environment.zsh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env zsh 2 | 3 | # Set XDG Base Directory paths 4 | export XDG_CONFIG_HOME="${HOME}/.config" # User configuration files 5 | export XDG_CACHE_HOME="${HOME}/.cache" # User cache files 6 | export XDG_DATA_HOME="${HOME}/.local/share" # User data files 7 | export XDG_STATE_HOME="${HOME}/.local/state" # User state files 8 | 9 | # Set other tool and configuration paths to clean up ~ 10 | export CARGO_HOME="$XDG_DATA_HOME"/cargo # Cargo package manager 11 | export GNUPGHOME="$XDG_DATA_HOME"/gnupg # GNU Privacy Guard home 12 | export _JAVA_OPTIONS="-Djava.util.prefs.userRoot="${XDG_CONFIG_HOME}"/java \ 13 | -Dawt.useSystemAAFontSettings=gasp" # Java preferences 14 | export ANDROID_HOME="${XDG_DATA_HOME}/android" # Android SDK home 15 | 16 | # Set zsh shell history file path and set max history length 17 | export HISTFILE="${XDG_STATE_HOME}/zsh/history" 18 | export HISTSIZE=10000 19 | export SAVEHIST=10000 20 | 21 | export ZSH_FZF_HISTORY_SEARCH_DATES_IN_SEARCH=0 # Disable dates in zsh-fzf-history 22 | export ZSH_FZF_HISTORY_SEARCH_EVENT_NUMBERS=0 # Disable index in zsh-fzf-history 23 | export ZSH_FZF_HISTORY_SEARCH_REMOVE_DUPLICATES=1 # Hide duplicates in zsh-fzf-history 24 | 25 | # Add additional directories to PATH 26 | export PATH=${PATH}:~/.local/scripts:~/.local/bin:~/.local/share/cargo/bin 27 | export PATH=$PATH:/home/rei/.spicetify 28 | 29 | # Set sudo password prompt 30 | export SUDO_PROMPT='[] Enter Password: ' 31 | 32 | # Set default editor 33 | export EDITOR='nano' 34 | 35 | # Set language environment 36 | export LANG=en_US.UTF-8 37 | 38 | # Set default file manager 39 | export fileManager='thunar' 40 | -------------------------------------------------------------------------------- /.config/zsh/functions.zsh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env zsh 2 | 3 | conf() { 4 | case $1 in 5 | hypr) $EDITOR "$XDG_CONFIG_HOME/hypr/hyprland.conf" ;; 6 | esac 7 | } 8 | -------------------------------------------------------------------------------- /.config/zsh/keybinds-late.zsh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env zsh 2 | 3 | # Bind keys for history substring search 4 | 5 | # This is here instead of keybinds.zsh due to some ordering issues 6 | bindkey '^[[A' history-substring-search-up 7 | bindkey '^[OA' history-substring-search-up 8 | bindkey '^[[B' history-substring-search-down 9 | bindkey '^[OB' history-substring-search-down 10 | -------------------------------------------------------------------------------- /.config/zsh/keybinds.zsh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env zsh 2 | 3 | # Define key bindings 4 | # Use "bindkey -l" to list available key bindings 5 | # Use "bindkey -M viins" to list key bindings for insert mode 6 | # Use "bindkey -M vicmd" to list key bindings for command mode 7 | 8 | # Move cursor to beginning and end of line 9 | bindkey "\e[5~" beginning-of-line # Page Up 10 | bindkey "\e[6~" end-of-line # Page Down 11 | 12 | # Delete characters and words 13 | bindkey "^[[3~" delete-char # DEL 14 | bindkey '^H' backward-kill-word # Ctrl+Backspace (delete word backwards) 15 | bindkey '^[[3;5~' kill-word # Ctrl+Delete (delete word forwards) 16 | 17 | # Move cursor forward and backward one word at a time 18 | bindkey "^[[1;5C" forward-word # CTRL+ARROW_RIGHT 19 | bindkey "^[[1;5D" backward-word # CTRL+ARROW_LEFT 20 | 21 | # Undo and redo changes 22 | bindkey "^Z" undo # CTRL+Z 23 | bindkey "^Y" redo # CTRL+Y 24 | 25 | # Allow backspace to delete characters across multiple lines like in Vim 26 | bindkey -v '^?' backward-delete-char 27 | 28 | # Select the Bash word style so backward-kill-word goes to last / or . 29 | autoload -U select-word-style 30 | select-word-style bash 31 | -------------------------------------------------------------------------------- /.config/zsh/lscolors.zsh: -------------------------------------------------------------------------------- 1 | # Example LS_COLORS customization 2 | export LS_COLORS="di=35:$LS_COLORS:fi=30:$LS_COLORS:ln=36:$LS_COLORS:pi=34:$LS_COLORS:so=32:$LS_COLORS:bd=34:$LS_COLORS:cd=30:$LS_COLORS:or=31:$LS_COLORS:mi=31:$LS_COLORS" 3 | 4 | -------------------------------------------------------------------------------- /.config/zsh/ohmyzsh.zsh: -------------------------------------------------------------------------------- 1 | # If you come from bash you might have to change your $PATH. 2 | # export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH 3 | 4 | # Path to your Oh My Zsh installation. 5 | export ZSH="$HOME/.config/zsh/.oh-my-zsh" 6 | 7 | # Set name of the theme to load --- if set to "random", it will 8 | # load a random theme each time Oh My Zsh is loaded, in which case, 9 | # to know which specific one was loaded, run: echo $RANDOM_THEME 10 | # See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes 11 | ZSH_THEME="robbyrussell" 12 | 13 | # Set list of themes to pick from when loading at random 14 | # Setting this variable when ZSH_THEME=random will cause zsh to load 15 | # a theme from this variable instead of looking in $ZSH/themes/ 16 | # If set to an empty array, this variable will have no effect. 17 | # ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" ) 18 | 19 | # Uncomment the following line to use case-sensitive completion. 20 | # CASE_SENSITIVE="true" 21 | 22 | # Uncomment the following line to use hyphen-insensitive completion. 23 | # Case-sensitive completion must be off. _ and - will be interchangeable. 24 | # HYPHEN_INSENSITIVE="true" 25 | 26 | # Uncomment one of the following lines to change the auto-update behavior 27 | # zstyle ':omz:update' mode disabled # disable automatic updates 28 | # zstyle ':omz:update' mode auto # update automatically without asking 29 | # zstyle ':omz:update' mode reminder # just remind me to update when it's time 30 | 31 | # Uncomment the following line to change how often to auto-update (in days). 32 | # zstyle ':omz:update' frequency 13 33 | 34 | # Uncomment the following line if pasting URLs and other text is messed up. 35 | # DISABLE_MAGIC_FUNCTIONS="true" 36 | 37 | # Uncomment the following line to disable colors in ls. 38 | # DISABLE_LS_COLORS="true" 39 | 40 | # Uncomment the following line to disable auto-setting terminal title. 41 | # DISABLE_AUTO_TITLE="true" 42 | 43 | # Uncomment the following line to enable command auto-correction. 44 | # ENABLE_CORRECTION="true" 45 | 46 | # Uncomment the following line to display red dots whilst waiting for completion. 47 | # You can also set it to another string to have that shown instead of the default red dots. 48 | # e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f" 49 | # Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765) 50 | # COMPLETION_WAITING_DOTS="true" 51 | 52 | # Uncomment the following line if you want to disable marking untracked files 53 | # under VCS as dirty. This makes repository status check for large repositories 54 | # much, much faster. 55 | # DISABLE_UNTRACKED_FILES_DIRTY="true" 56 | 57 | # Uncomment the following line if you want to change the command execution time 58 | # stamp shown in the history command output. 59 | # You can set one of the optional three formats: 60 | # "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" 61 | # or set a custom format using the strftime function format specifications, 62 | # see 'man strftime' for details. 63 | # HIST_STAMPS="mm/dd/yyyy" 64 | 65 | # Would you like to use another custom folder than $ZSH/custom? 66 | # ZSH_CUSTOM=/path/to/new-custom-folder 67 | 68 | # Which plugins would you like to load? 69 | # Standard plugins can be found in $ZSH/plugins/ 70 | # Custom plugins may be added to $ZSH_CUSTOM/plugins/ 71 | # Example format: plugins=(rails git textmate ruby lighthouse) 72 | # Add wisely, as too many plugins slow down shell startup. 73 | plugins=(git) 74 | 75 | source $ZSH/oh-my-zsh.sh 76 | 77 | # User configuration 78 | 79 | # export MANPATH="/usr/local/man:$MANPATH" 80 | 81 | # You may need to manually set your language environment 82 | # export LANG=en_US.UTF-8 83 | 84 | # Preferred editor for local and remote sessions 85 | # if [[ -n $SSH_CONNECTION ]]; then 86 | # export EDITOR='vim' 87 | # else 88 | # export EDITOR='mvim' 89 | # fi 90 | 91 | # Compilation flags 92 | # export ARCHFLAGS="-arch x86_64" 93 | 94 | # Set personal aliases, overriding those provided by Oh My Zsh libs, 95 | # plugins, and themes. Aliases can be placed here, though Oh My Zsh 96 | # users are encouraged to define aliases within a top-level file in 97 | # the $ZSH_CUSTOM folder, with .zsh extension. Examples: 98 | # - $ZSH_CUSTOM/aliases.zsh 99 | # - $ZSH_CUSTOM/macos.zsh 100 | # For a full list of active aliases, run `alias`. 101 | # 102 | # Example aliases 103 | # alias zshconfig="mate ~/.zshrc" 104 | # alias ohmyzsh="mate ~/.oh-my-zsh" 105 | -------------------------------------------------------------------------------- /.config/zsh/options.zsh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env zsh 2 | 3 | # When trimming the internal history, discard duplicates before unique events 4 | setopt HIST_EXPIRE_DUPS_FIRST 5 | 6 | # Remove older command if a duplicate is added to the history list 7 | setopt HIST_IGNORE_ALL_DUPS 8 | 9 | # Do not add duplicates of previous command to the history list 10 | setopt HIST_IGNORE_DUPS 11 | 12 | # Do not save older duplicates of newer commands when writing the history file 13 | setopt HIST_SAVE_NO_DUPS 14 | 15 | # Append new history lines to the $HISTFILE as soon as they are entered 16 | setopt INC_APPEND_HISTORY 17 | 18 | # Match files beginning with . without explicitly specifying the dot 19 | setopt globdots 20 | 21 | # Enable using cd command without explicitly using cd in command 22 | setopt autocd 23 | 24 | # Disable all beeps in zsh 25 | unsetopt BEEP 26 | 27 | # tells zsh to ignore case when completing commands or filenames. 28 | zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' 29 | -------------------------------------------------------------------------------- /.config/zsh/profile.zsh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env zsh 2 | 3 | # execute Hyprland when in TTY1 only 4 | if [ -z "${WAYLAND_DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then 5 | exec Hyprland 6 | fi 7 | -------------------------------------------------------------------------------- /.scripts/combine_configs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Directory where the .kdl files are located 4 | HOME="/home/asuka" 5 | CONFIG_DIR="$HOME/.config/niri/configs" 6 | THEMES_DIR="$HOME/.config/niri/themes" 7 | OUTPUT_FILE="$HOME/.config/niri/config.kdl" 8 | 9 | # Check if a valid theme argument is provided 10 | if [ "$1" != "light" ] && [ "$1" != "dark" ]; then 11 | echo "Invalid theme specified. Use 'light' or 'dark'." 12 | exit 1 13 | fi 14 | 15 | # Concatenate all .kdl files into config.kdl 16 | cat "$CONFIG_DIR"/*.kdl "$THEMES_DIR/$1.kdl" > "$OUTPUT_FILE" 17 | 18 | echo "Configuration files combined into $OUTPUT_FILE" 19 | -------------------------------------------------------------------------------- /.scripts/exec_and_signal.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | niri msg action $1 4 | pkill -SIGRTMIN+8 waybar 5 | -------------------------------------------------------------------------------- /.scripts/record_obs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | export QT_QPA_PLATFORM=wayland 3 | obs 4 | -------------------------------------------------------------------------------- /.scripts/refresh_waybar.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Function to check if Waybar is running 4 | waybar_is_running() { 5 | pgrep -x waybar > /dev/null 6 | } 7 | 8 | # Check if Waybar is running 9 | if waybar_is_running; then 10 | # Waybar is running, so kill and restart it 11 | echo "Waybar is running. Restarting..." 12 | killall waybar 13 | waybar & 14 | else 15 | # Waybar is not running, start it 16 | echo "Waybar is not running. Starting..." 17 | waybar & 18 | fi 19 | -------------------------------------------------------------------------------- /.scripts/swayidle.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | swayidle -w timeout 300 'swaylock -f -i ~/.current_wallpaper' timeout 600 'niri msg action power-off-monitors' before-sleep 'swaylock -f -i ~/.current_wallpaper' 4 | 5 | -------------------------------------------------------------------------------- /.scripts/swayosd.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Define paths and commands 4 | osd="swayosd-client" 5 | 6 | # Main script logic based on passed arguments 7 | case $1 in 8 | raise) 9 | $osd --output-volume raise 10 | ;; 11 | lower) 12 | $osd --output-volume lower 13 | ;; 14 | mute) 15 | $osd --output-volume mute-toggle 16 | ;; 17 | micmute) 18 | $osd --input-volume mute-toggle 19 | ;; 20 | Caps_Lock) 21 | $osd --caps-lock 22 | ;; 23 | brightness_up) 24 | $osd --brightness raise 25 | ;; 26 | brightness_down) 27 | $osd --brightness lower 28 | ;; 29 | *) 30 | echo "Unknown keybind: $1" 31 | ;; 32 | esac 33 | 34 | exit 0 35 | -------------------------------------------------------------------------------- /.scripts/toggle.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Define constants 4 | WAYBAR_CONFIG_DIR="$HOME/.config/waybar" 5 | NIRI_DIR="$HOME/.config/niri" 6 | LIGHT_THEME="Orchis-Light-Compact" 7 | DARK_THEME="catppuccin-mocha-maroon-standard+default" 8 | LIGHT_COLOR_SCHEME="prefer-light" 9 | DARK_COLOR_SCHEME="prefer-dark" 10 | LIGHT_WALLPAPER="$HOME/.wallpapers/light/fullerene.jpg" 11 | DARK_WALLPAPER="$HOME/.wallpapers/dark/sevenEleven.jpg" 12 | LIGHT_KITTY_THEME="Catppuccin-Latte" 13 | DARK_KITTY_THEME="Catppuccin-Mocha" 14 | 15 | # Function to apply GTK theme and color scheme 16 | apply_gtk_theme() { 17 | local theme="$1" 18 | local color_scheme="$2" 19 | 20 | gsettings set org.gnome.desktop.interface gtk-theme "$theme" 21 | gsettings set org.gnome.desktop.interface color-scheme "$color_scheme" 22 | } 23 | 24 | # Function to switch Waybar theme 25 | switch_waybar_theme() { 26 | local theme="$1" 27 | 28 | ln -sf "$WAYBAR_CONFIG_DIR/themes/$theme" "$WAYBAR_CONFIG_DIR/style.css" 29 | ~/.scripts/refresh_waybar.sh 30 | } 31 | 32 | # Function to apply wallpaper 33 | apply_wallpaper() { 34 | local wallpaper="$1" 35 | 36 | swww img "$wallpaper" --transition-type any 37 | } 38 | 39 | # Function to switch theme 40 | switch_theme() { 41 | local gtk_theme="$1" 42 | local color_scheme="$2" 43 | local waybar_theme="$3" 44 | local wallpaper="$4" 45 | local kitty_theme="$5" 46 | 47 | apply_gtk_theme "$gtk_theme" "$color_scheme" 48 | switch_waybar_theme "$waybar_theme" 49 | switch_niri_theme "$niri_theme" 50 | apply_wallpaper "$wallpaper" 51 | kitten themes --reload-in=all "$kitty_theme" 52 | } 53 | 54 | # Main logic 55 | current_theme=$(gsettings get org.gnome.desktop.interface gtk-theme) 56 | 57 | if [ "$current_theme" == "'$DARK_THEME'" ]; then 58 | switch_theme "$LIGHT_THEME" "$LIGHT_COLOR_SCHEME" "light" "$LIGHT_WALLPAPER" "$LIGHT_KITTY_THEME" "light" 59 | ~/.scripts/combine_configs.sh light 60 | else 61 | switch_theme "$DARK_THEME" "$DARK_COLOR_SCHEME" "dark" "$DARK_WALLPAPER" "$DARK_KITTY_THEME" "dark" 62 | ~/.scripts/combine_configs.sh dark 63 | fi 64 | -------------------------------------------------------------------------------- /.scripts/wallpaper.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Function to determine system color scheme 4 | get_color_scheme() { 5 | # Example for GNOME (using gsettings) 6 | # Adjust this according to your desktop environment or window manager 7 | if gsettings get org.gnome.desktop.interface color-scheme | grep -q 'dark'; then 8 | echo "dark" 9 | else 10 | echo "light" 11 | fi 12 | } 13 | 14 | # Determine color scheme 15 | COLOR_SCHEME=$(get_color_scheme) 16 | 17 | # Set wallpapers directory based on color scheme 18 | if [ "$COLOR_SCHEME" = "dark" ]; then 19 | WALLPAPER_DIR="$HOME/.wallpapers/dark" 20 | else 21 | WALLPAPER_DIR="$HOME/.wallpapers/light" 22 | fi 23 | 24 | 25 | # List wallpapers in the directory and extract filenames 26 | wallpapers=() 27 | while IFS= read -r -d $'\0' file; do 28 | wallpapers+=("$(basename "$file")") 29 | done < <(find "$WALLPAPER_DIR" -type f -print0) 30 | 31 | # Function to display menu using wofi 32 | select_wallpaper() { 33 | selected=$(printf '%s\n' "${wallpapers[@]}" | wofi --dmenu --insensitive --prompt="Select wallpaper:" --style="$HOME/.config/wofi/wallpaper.css") 34 | 35 | # If user cancels, exit without changing wallpaper 36 | if [ -z "$selected" ]; then 37 | exit 0 38 | fi 39 | 40 | # Find full path of selected wallpaper 41 | selected_path=$(find "$WALLPAPER_DIR" -type f -name "$selected") 42 | 43 | # Change wallpaper using the selected file 44 | swww img "$selected_path" --transition-type any && notify-send "Wallpaper Changed" -i "$selected_path" --app-name=Wallpaper 45 | 46 | # Update the .current_wallpaper symbolic link 47 | ln -sf "$selected_path" "$HOME/.current_wallpaper" 48 | } 49 | 50 | # Main execution 51 | select_wallpaper 52 | -------------------------------------------------------------------------------- /.scripts/waybar.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | waybar_config="$HOME/.config/waybar/config.jsonc" 4 | waybar_style="$HOME/.config/waybar/style.css" 5 | 6 | # Check if the process is running 7 | if pgrep -x "waybar" > /dev/null 8 | then 9 | echo "Process is running, killing it..." 10 | pkill -f "waybar" 11 | echo "Process killed." 12 | else 13 | echo "Process is not running, starting it..." 14 | # Command to start your process 15 | waybar -c $waybar_config -s $waybar_style & 16 | echo "Process started." 17 | fi 18 | -------------------------------------------------------------------------------- /.scripts/window.nu: -------------------------------------------------------------------------------- 1 | #!/usr/bin/nu 2 | 3 | let out = { 4 | text: "", 5 | tooltip: "" 6 | } 7 | 8 | loop { 9 | sleep 1sec 10 | 11 | let fw = niri msg -j focused-window | from json 12 | 13 | print ( 14 | $out 15 | | try { update text $fw.title | update tooltip $"($fw.title) | ($fw.app_id)" } 16 | | to json -r 17 | ) 18 | } 19 | -------------------------------------------------------------------------------- /.scripts/wlogout.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | wlogout -b 5 4 | -------------------------------------------------------------------------------- /.scripts/workspaces.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | active="" 6 | inactive="" 7 | 8 | workspace_str="" 9 | 10 | monitor=$1 11 | 12 | reading_output=0 13 | while read -r line; do 14 | if [ $reading_output -eq 0 ] && [ "$(echo "$line" | cut -d ' ' -f 2)" = "\"$monitor\":" ]; then 15 | reading_output=1 16 | continue 17 | elif [ $reading_output -eq 1 ]; then 18 | if [ -z "$line" ]; then 19 | printf "%s" "$workspace_str" 20 | exit 21 | fi 22 | 23 | if [ "$(echo "$line" | head -c 1)" = '*' ]; then 24 | workspace_str="${workspace_str}${active} " 25 | else 26 | workspace_str="${workspace_str}${inactive} " 27 | fi 28 | fi 29 | done <<<"$(niri msg workspaces)" 30 | 31 | printf "%s" "$workspace_str" 32 | -------------------------------------------------------------------------------- /.zshenv: -------------------------------------------------------------------------------- 1 | export ZDOTDIR=~/.config/zsh 2 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | [mugilsubramani@gmail.com](mailto:mugilsubramani@gmail.com). 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available at 119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 120 | 121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 122 | enforcement ladder](https://github.com/mozilla/diversity). 123 | 124 | [homepage]: https://www.contributor-covenant.org 125 | 126 | For answers to common questions about this code of conduct, see the FAQ at 127 | https://www.contributor-covenant.org/faq. Translations are available at 128 | https://www.contributor-covenant.org/translations. 129 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Details 2 | 3 | ## Features 4 | 5 | ## Information 6 | - **Operating System** • [Arch Linux](https://archlinux.org) 7 | - **Desktop Environment** • [Niri](https://github.com/YaLTeR/niri) 8 | - **Terminal** • [kitty](https://github.com/kovidgoyal/kitty) 9 | - **Shell** • zsh 10 | - **Aur Helper** • [yay](https://github.com/Jguer/yay) 11 | - **Panel** • [waybar](https://github.com/Alexays/Waybar) 12 | - **Launcher** • [anyrun](https://github.com/anyrun-org/anyrun) 13 | - **File Manager** • [thunar](https://wiki.archlinux.org/title/thunar)/[yazi](https://github.com/sxyazi/yazi) 14 | - **Notification Daemon** • [swaync](https://github.com/ErikReider/SwayNotificationCenter) 15 | - **Wallpaper Daemon** • [swww](https://github.com/LGFae/swww) 16 | - **Colorscheme** • [Tokyo Night Theme](https://github.com/catppuccin/catppuccin) 17 | 18 | # Usage 19 | > [!NOTE] 20 | > Assuming that your AUR helper is [yay.](https://github.com/Jguer/yay) 21 | > To install yay on your arch based system, follow the instructions mentioned [here.](https://github.com/Jguer/yay?tab=readme-ov-file#installation) 22 | ## 📦 Required dependencies 23 | 24 | Install these dependencies manually (Arch) 25 | ```shell 26 | pacman -Sy niri wofi kitty wireplumber yazi zathura zathura-pdf-mupdf cava wl-clipboard \ 27 | waybar swayidle swaylock swaync qt5-wayland qt6-wayland playerctl mpv nm-connection-editor \ 28 | rofi-wayland grim slurp thunar pipewire pipewire-alsa pipewire-audio nushell \ 29 | pipewire-jack pipewire-pulse nwg-look noto-fonts-cjk noto-fonts-emoji \ 30 | noto-fonts networkmanager gtk-engine-murrine blueberry bluez bluez-utils 31 | ``` 32 | ```shell 33 | yay -S anyrun-git wlogout swaylock-effects swayosd-git swww amberol sway-audio-idle-inhibit-git catppuccin-gtk-theme-mocha orchis-theme 34 | ``` 35 | 36 | ## 🧙‍♂️ Setup Config 37 | > [!WARNING] 38 | > This method requires you to remove your previous configurations. Make sure to backup your previous configs if needed. 39 | ### Default Method 40 | 41 | Clone the repository and Copy all files from the repo to your config folder. 42 | ```bash 43 | git clone --depth=1 https://github.com/NotMugil/niri-dots.git 44 | cd niri-dots 45 | cp -r .config/* ~/.config/ 46 | mkdir -p ~/.scripts 47 | cp -r .scripts/* ~/.scripts/ 48 | 49 | # This step can be skipped if you are not using zsh shell 50 | cp -r .zshenv ~/ 51 | ``` 52 | 53 | All the commands listed in a single line to copy easily. 54 | ``` 55 | git clone --depth=1 https://github.com/NotMugil/niri-dots.git && cd niri-dots && cp -r .config/* ~/.config/ && mkdir -p ~/.scripts && cp -r .scripts/* ~/.scripts/ 56 | ``` 57 | 58 | ### Symlink Method 59 | ```bash 60 | cd ~ 61 | git clone --depth=1 https://github.com/NotMugil/niri-dots.git 62 | ``` 63 | ``` 64 | ln -sf ~/niri-dots/.config/anyrun/ ~/.config/ && ln -sf ~/niri-dots/.config/gtk-3.0/ ~/.config/ && ln -sf ~/niri-dots/.config/kitty/ ~/.config/ && ln -sf ~/niri-dots/.config/niri/ ~/.config/ && ln -sf ~/niri-dots/.config/rofi/ ~/.config/ && ln -sf ~/niri-dots/.config/swaylock/ ~/.config/ && ln -sf ~/niri-dots/.config/swaync/ ~/.config/ && ln -sf ~/niri-dots/.config/waybar/ ~/.config/ && ln -sf ~/niri-dots/.config/wofi/ ~/.config/ && ln -sf ~/niri-dots/.config/zsh/ ~/.config/ && ln -sf ~/niri-dots/.scripts/ ~/ && ln -sf ~/niri-dots/.zshenv ~/ 65 | ``` 66 | 67 | ## ✨ Theming Other Applications 68 | 69 |
70 | 71 | instructions 72 | 73 | 74 | ### Spotify (Spicetify) 75 | Install spicetify. (AUR: `spicetify-cli`) 76 | Copy `niri-dots/.themes/spicetify/text` to `~/.config/spicetify/Themes/` (or wherever your spicetify themes are stored) 77 | Then: 78 | ```bash 79 | spicetify config current_theme Dribbblish 80 | spicetify config color_scheme catppuccin-latte 81 | spicetify apply 82 | ``` 83 | 84 | ### Visual Studio Code 85 | Install [Tokyo Night](https://vscodethemes.com/e/enkia.tokyo-night/tokyo-night) theme from `enkia` 86 | 87 | ### Discord (Better Discord) 88 | install from AUR: `betterdiscordctl` 89 | 90 | Copy `niri-dots/.themes/tokyo-night.theme.css` to `~/snap/discord/145/.config/BetterDiscord/` 91 | 92 | ### GTK Theme 93 | > Install `nwg-look` to manage gtk-theme, font and icon themes. 94 | 95 | ```shell 96 | yay -S tokyonight-gtk-theme-git 97 | ``` 98 | 99 | Otherwise: 100 | Edit the following files: 101 | - `~/.config/gtk-3.0/settings.ini` 102 | - `~/.gtkrc-2.0` 103 | to: 104 | ```conf 105 | [Settings] 106 | gtk-application-prefer-dark-theme=1 107 | gtk-theme-name = Tokyonight-Dark 108 | ``` 109 | 110 | and you might have to run: 111 | ```bash 112 | gsettings set org.gnome.desktop.interface color-scheme prefer-dark 113 | ``` 114 | 115 |
116 | 117 | --- 118 | 119 | # Progress 120 | ## 💻 Development 121 | 122 | ### Known Issues 123 | - [ ] some issue #1 124 | - [ ] some issue #2 125 | 126 | ### Tasks 127 | - [ ] Prepare Pull_Request_Template.md 128 | - [ ] Prepare Contrubuting.md 129 | 130 | # ⌨️ Keybinds 131 | 132 | > [!NOTE] 133 | > All keybinds can be found in the `~/.config/niri/config.kdl` in binds. 134 | 135 | | Keybind | Functionality | 136 | |----------------------------------|---------------------------------------------------------------------------------| 137 | | Mod+RETURN | Spawns the terminal emulator `kitty`. | 138 | | Mod+D | Spawns an application launcher `anyrun`. | 139 | | Mod+E | Spawns the file manager `thunar`. | 140 | | Super+Alt+L | Spawns the screen locker `swaylock`. | 141 | | Mod+Q | Closes the focused window. | 142 | | Mod+Left | Focuses on the column to the left. | 143 | | Mod+Right | Focuses on the column to the right. | 144 | | Mod+Ctrl+Left | Moves the column to the left. | 145 | | Mod+Ctrl+Right | Moves the column to the right. | 146 | | Mod+Home | Focuses on the first column. | 147 | | Mod+End | Focuses on the last column. | 148 | | Mod+Shift+Left | Focuses on the monitor to the left. | 149 | | Mod+Shift+Right | Focuses on the monitor to the right. | 150 | | Mod+Page_Down | Focuses on the workspace below. | 151 | | Mod+Page_Up | Focuses on the workspace above. | 152 | | Mod+1 - Mod+9 | Focuses on specific workspace. | 153 | | Mod+Ctrl+1 - Mod+Ctrl+9 | Moves a column to specific workspace. | 154 | | Mod+Comma | Consumes a window into the column. | 155 | | Mod+Period | Expels a window from the column. | 156 | | Mod+R | Switches to the next column width preset. | 157 | | Mod+F | Maximizes the current column. | 158 | | Mod+C | Centers the current column. | 159 | | Mod+Minus | Decreases column width by 10%. | 160 | | Mod+Equal | Increases column width by 10%. | 161 | | Print | Takes a screenshot of the entire screen. | 162 | | Ctrl+Print | Takes a screenshot of the current screen. | 163 | | Alt+Print | Takes a screenshot of the current window. | 164 | | Mod+Shift+E | Quits the window manager with confirmation. | 165 | | Mod+Shift+P | Powers off the monitors. To turn them back on, any input is required. | 166 | | Mod+WheelScrollDown | Scrolls down through workspaces. | 167 | | Mod+WheelScrollUp | Scrolls up through workspaces. | 168 | | Mod+Ctrl+WheelScrollDown | Moves the column down through workspaces. | 169 | | Mod+Ctrl+WheelScrollUp | Moves the column up through workspaces. | 170 | | Mod+WheelScrollRight | Focuses on the column to the right. | 171 | | Mod+WheelScrollLeft | Focuses on the column to the left. | 172 | | Mod+Ctrl+WheelScrollRight | Moves the column to the right. | 173 | | Mod+Ctrl+WheelScrollLeft | Moves the column to the left. | 174 | | Mod+Shift+WheelScrollDown | Focuses on the column to the right. | 175 | | Mod+Shift+WheelScrollUp | Focuses on the column to the left. | 176 | | Mod+Ctrl+Shift+WheelScrollDown | Moves the column to the right. | 177 | | Mod+Ctrl+Shift+WheelScrollUp | Moves the column to the left. | 178 | | XF86AudioRaiseVolume | Increases audio volume. | 179 | | XF86AudioLowerVolume | Decreases audio volume. | 180 | | XF86AudioMute | Mutes/unmutes audio. | 181 | | XF86AudioMicMute | Mutes/unmutes microphone. | 182 | 183 | # Credits 184 | 185 | ## 186 | 187 | ## ⭐ Star History 188 | [![Star History Chart](https://api.star-history.com/svg?repos=NotMugil/niri-dots&type=Date)](https://star-history.com/#NotMugil/niri-dots&Date) 189 | 190 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Reporting a Vulnerability 4 | 5 | Use this section to tell people how to report a vulnerability. 6 | 7 | Tell them where to go, how often they can expect to get an update on a 8 | reported vulnerability, what to expect if the vulnerability is accepted or 9 | declined, etc. 10 | --------------------------------------------------------------------------------