First commit
151
.config/hypr/hyprland.conf
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
# Jaaj Hyprland config
|
||||||
|
|
||||||
|
# Source colors variables
|
||||||
|
source = ~/.config/hypr/colors.conf
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Monitors config in separate file to allow multiple configs
|
||||||
|
source = ~/.config/hypr/monitors.conf
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Exec once
|
||||||
|
exec-once = artix-pipewire-launcher
|
||||||
|
exec-once = nm-applet
|
||||||
|
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||||
|
exec-once = $HOME/.scripts/swayidle.sh
|
||||||
|
exec-once = swayosd-server
|
||||||
|
|
||||||
|
# XWayland
|
||||||
|
exec-once = xprop -root -f _XWAYLAND_GLOBAL_OUTPUT_SCALE 32c -set _XWAYLAND_GLOBAL_OUTPUT_SCALE 2
|
||||||
|
|
||||||
|
# Clipboard
|
||||||
|
exec-once = wl-paste -w wl-copy -p
|
||||||
|
exec-once = cliphist wipe && wl-paste --watch cliphist store
|
||||||
|
|
||||||
|
# Discord
|
||||||
|
exec-once = discord --start-minimized
|
||||||
|
# exec-once = xwaylandvideobridge
|
||||||
|
|
||||||
|
# Nextcloud
|
||||||
|
exec-once = nextcloud --background
|
||||||
|
exec-once = gnome-keyring-daemon -s -f
|
||||||
|
|
||||||
|
# Theming
|
||||||
|
exec-once = echo 1 > "$HOME/.cache/weeb-mode"
|
||||||
|
exec-once = sw -r
|
||||||
|
|
||||||
|
# Prevent hidden Wine System Tray window from keeping workspace existing
|
||||||
|
exec-once = $HOME/.scripts/kill-wine-explorer.sh
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Environement variables
|
||||||
|
env = EDITOR,vim
|
||||||
|
env = XDG_CURRENT_DESKTOP,Hyprland
|
||||||
|
env = XDG_SESSION_TYPE,wayland
|
||||||
|
env = XDG_SESSION_DESKTOP,Hyprland
|
||||||
|
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
|
||||||
|
env = QT_QPA_PLATFORM,wayland;xcb
|
||||||
|
env = SDL_VIDEODRIVER,wayland
|
||||||
|
env = _JAVA_AWT_WM_NONEREPARENTING,1
|
||||||
|
env = CLUTTER_BACKEND,wayland
|
||||||
|
env = GRIM_DEFAULT_DIR,$HOME/Images/grim-screenshots
|
||||||
|
env = DXVK_LOG_LEVEL,none
|
||||||
|
env = MOZ_ENABLE_WAYLAND,1
|
||||||
|
env = GDK_BACKEND,wayland
|
||||||
|
env = GDK_SCALE,1
|
||||||
|
env = XCURSOR_SIZE,24
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
general {
|
||||||
|
border_size = $border_size
|
||||||
|
gaps_in = $gaps_in
|
||||||
|
gaps_out = $gaps_out
|
||||||
|
col.active_border = $accent1 $accent2 45deg
|
||||||
|
col.inactive_border = $background1 $background2 45deg
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
kb_layout = fr
|
||||||
|
kb_variant = latin9
|
||||||
|
numlock_by_default = true
|
||||||
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
|
follow_mouse = 2
|
||||||
|
float_switch_override_focus = 0
|
||||||
|
touchpad {
|
||||||
|
disable_while_typing = false
|
||||||
|
natural_scroll = yes
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
device:asus-rog-sica {
|
||||||
|
sensitivity = -0.55
|
||||||
|
}
|
||||||
|
|
||||||
|
device:logitech-g203-lightsync-gaming-mouse {
|
||||||
|
sensitivity = -0.55
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
decoration {
|
||||||
|
rounding = $border_radius
|
||||||
|
active_opacity = 0.85
|
||||||
|
inactive_opacity = 0.65
|
||||||
|
blur {
|
||||||
|
enabled = true
|
||||||
|
size = 2
|
||||||
|
passes = 1
|
||||||
|
ignore_opacity = true
|
||||||
|
new_optimizations = on
|
||||||
|
xray = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
animations {
|
||||||
|
enabled = yes
|
||||||
|
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||||
|
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||||
|
animation = windows, 1, 7, myBezier
|
||||||
|
animation = windowsOut, 1, 7, default, popin 80%
|
||||||
|
animation = border, 1, 10, default
|
||||||
|
animation = fade, 1, 7, default
|
||||||
|
animation = workspaces, 1, 6, default
|
||||||
|
}
|
||||||
|
|
||||||
|
gestures {
|
||||||
|
workspace_swipe = on
|
||||||
|
}
|
||||||
|
|
||||||
|
dwindle {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||||
|
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||||
|
preserve_split = yes # you probably want this
|
||||||
|
}
|
||||||
|
|
||||||
|
master {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||||
|
new_is_master = true
|
||||||
|
}
|
||||||
|
|
||||||
|
misc {
|
||||||
|
vfr = true
|
||||||
|
vrr = 2
|
||||||
|
disable_autoreload = true
|
||||||
|
mouse_move_enables_dpms = true
|
||||||
|
key_press_enables_dpms = true
|
||||||
|
disable_hyprland_logo = true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Keybindings
|
||||||
|
source = ~/.config/hypr/keybindings.conf
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Window rules
|
||||||
|
source = ~/.config/hypr/windowrules.conf
|
88
.config/hypr/keybindings.conf
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
$mainMod = SUPER
|
||||||
|
|
||||||
|
binde = $mainMod_SHIFT, Q, killactive,
|
||||||
|
bind = $mainMod_SHIFT, E, exec, wlogout -b 4 -T 400 -B 400 -p layer-shell
|
||||||
|
binde = $mainMod_SHIFT, Space, togglefloating,
|
||||||
|
binde = $mainMod, P, pseudo,
|
||||||
|
binde = $mainMod_SHIFT, V, togglesplit,
|
||||||
|
bind = $mainMod, L, exec, $HOME/.scripts/swaylock.sh
|
||||||
|
bind = $mainMod, F, fullscreen
|
||||||
|
|
||||||
|
bind = $mainMod_SHIFT, N, exec, swaync-client -t -sw
|
||||||
|
bind = $mainMod, R, exec, wofi --show run
|
||||||
|
bind = $mainMod, E, exec, thunar
|
||||||
|
binde = $mainMod_SHIFT, T, exec, kitty
|
||||||
|
bind = $mainMod_SHIFT, F, exec, firefox
|
||||||
|
bind = $mainMod_SHIFT, D, exec, discord
|
||||||
|
bind = , 107, exec, $HOME/.scripts/grim.sh screen
|
||||||
|
bind = ALT_L, 107, exec, $HOME/.scripts/grim.sh window
|
||||||
|
bind = CONTROL_L, 107, exec, $HOME/.scripts/grim.sh region
|
||||||
|
bind = $mainMod, V, exec, cliphist list | wofi --show dmenu | cliphist decode | wl-copy -n
|
||||||
|
|
||||||
|
# Move focus with mainMod + arrow keys
|
||||||
|
bind = $mainMod, left, movefocus, l
|
||||||
|
bind = $mainMod, right, movefocus, r
|
||||||
|
bind = $mainMod, up, movefocus, u
|
||||||
|
bind = $mainMod, down, movefocus, d
|
||||||
|
|
||||||
|
bind = $mainMod_SHIFT, left, movewindow, l
|
||||||
|
bind = $mainMod_SHIFT, right, movewindow, r
|
||||||
|
bind = $mainMod_SHIFT, up, movewindow, u
|
||||||
|
bind = $mainMod_SHIFT, down, movewindow, d
|
||||||
|
|
||||||
|
# Switch workspaces with mainMod + [0-9]
|
||||||
|
bind = $mainMod, ampersand, workspace, 1
|
||||||
|
bind = $mainMod, eacute, workspace, 2
|
||||||
|
bind = $mainMod, quotedbl, workspace, 3
|
||||||
|
bind = $mainMod, apostrophe, workspace, 4
|
||||||
|
bind = $mainMod, parenleft, workspace, 5
|
||||||
|
bind = $mainMod, minus, workspace, 6
|
||||||
|
bind = $mainMod, egrave, workspace, 7
|
||||||
|
bind = $mainMod, underscore, workspace, 8
|
||||||
|
bind = $mainMod, ccedilla, workspace, 9
|
||||||
|
bind = $mainMod, agrave, workspace, 10
|
||||||
|
|
||||||
|
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||||
|
bind = $mainMod SHIFT, ampersand, movetoworkspace, 1
|
||||||
|
bind = $mainMod SHIFT, eacute, movetoworkspace, 2
|
||||||
|
bind = $mainMod SHIFT, quotedbl, movetoworkspace, 3
|
||||||
|
bind = $mainMod SHIFT, apostrophe, movetoworkspace, 4
|
||||||
|
bind = $mainMod SHIFT, parenleft, movetoworkspace, 5
|
||||||
|
bind = $mainMod SHIFT, minus, movetoworkspace, 6
|
||||||
|
bind = $mainMod SHIFT, egrave, movetoworkspace, 7
|
||||||
|
bind = $mainMod SHIFT, underscore, movetoworkspace, 8
|
||||||
|
bind = $mainMod SHIFT, ccedilla, movetoworkspace, 9
|
||||||
|
bind = $mainMod SHIFT, agrave, movetoworkspace, 10
|
||||||
|
|
||||||
|
# Scroll through existing workspaces with mainMod + scroll
|
||||||
|
bind = $mainMod, mouse_down, workspace, e+1
|
||||||
|
bind = $mainMod, mouse_up, workspace, e-1
|
||||||
|
# Same with ALT + TAB
|
||||||
|
bind = ALT, TAB, workspace, e+1
|
||||||
|
bind = ALT_SHIFT, TAB, workspace, e-1
|
||||||
|
|
||||||
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
bindm = $mainMod, mouse:272, movewindow
|
||||||
|
bindm = $mainMod, mouse:273, resizewindow
|
||||||
|
|
||||||
|
# Swayosd Audio/Brightness/Caps Lock
|
||||||
|
bindl = , Caps_Lock, exec, swayosd-client --caps-lock
|
||||||
|
binde = , XF86AudioRaiseVolume, exec, swayosd-client --output-volume=raise
|
||||||
|
binde = , XF86AudioLowerVolume, exec, swayosd-client --output-volume=lower
|
||||||
|
binde = , XF86AudioMute, exec, swayosd-client --output-volume=mute-toggle
|
||||||
|
binde = , XF86AudioMicMute, exec, swayosd-client --input-volume=mute-toggle
|
||||||
|
bindel = , XF86MonBrightnessUp, exec, swayosd-client --brightness raise
|
||||||
|
bindel = , XF86MonBrightnessDown, exec, swayosd-client --brightness lower
|
||||||
|
|
||||||
|
# Media keys
|
||||||
|
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||||
|
bindl = , XF86AudioNext, exec, playerctl next
|
||||||
|
bindl = , XF86AudioPrev, exec, playerctl previous
|
||||||
|
|
||||||
|
# Foobar2000
|
||||||
|
bind = CTRL, P, exec, $HOME/.scripts/foobar2000.sh -pp
|
||||||
|
bind = CTRL, up, exec, $HOME/.scripts/foobar2000.sh -vu
|
||||||
|
bind = CTRL, down, exec, $HOME/.scripts/foobar2000.sh -vd
|
||||||
|
|
||||||
|
# Weeb mode
|
||||||
|
bind = $mainMod SHIFT, W, exec, $HOME/.scripts/toggle-weeb-mode.sh
|
18
.config/hypr/monitors.conf
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# Laptop config
|
||||||
|
monitor = eDP-1, 1920x1080@60, 0x0, 1
|
||||||
|
monitor = , preferred, auto, 1, mirror, eDP-1
|
||||||
|
|
||||||
|
workspace = 1, monitor:eDP-1, default:true
|
||||||
|
workspace = 2, monitor:eDP-1
|
||||||
|
workspace = 3, monitor:eDP-1
|
||||||
|
workspace = 4, monitor:eDP-1
|
||||||
|
|
||||||
|
# Desktop config
|
||||||
|
# monitor = DP-1, 1920x1080@165, 0x0, 1
|
||||||
|
# monitor = HDMI-A-1, preferred, 1920x0, 1
|
||||||
|
# monitor = , preferred, auto, 1
|
||||||
|
|
||||||
|
# workspace = 1, monitor:DP-1, default:true
|
||||||
|
# workspace = 2, monitor:DP-1
|
||||||
|
# workspace = 3, monitor:DP-1
|
||||||
|
# workspace = 4, monitor:DP-1
|
75
.config/hypr/windowrules.conf
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
# Opaque windows
|
||||||
|
windowrule = opaque,^(firefox|libreoffice-writer)$
|
||||||
|
|
||||||
|
# Idle Inhibit
|
||||||
|
windowrule = idleinhibit focus, class:^(vlc)$
|
||||||
|
windowrule = idleinhibit focus, class:^(zoom)$
|
||||||
|
|
||||||
|
# Foobar2000
|
||||||
|
windowrule = float,^(foobar2000.exe)$
|
||||||
|
windowrule = size 1024 576,^(foobar2000.exe)$
|
||||||
|
windowrulev2 = size 740 516,class:^(foobar2000.exe)$,title:^(Preferences:)
|
||||||
|
windowrulev2 = size 575,115,class:^(foobar2000.exe)$,title:^(Processing...)$
|
||||||
|
windowrulev2 = size 660 440,class:^(foobar2000.exe)$,title:^(Playlist Search)
|
||||||
|
windowrulev2 = center,class:^(foobar2000.exe)$,title:^(Playlist Search)
|
||||||
|
|
||||||
|
# Firefox/NetworkManager
|
||||||
|
windowrule = float,title:^(Firefox - Choose User Profile)$
|
||||||
|
windowrule = float,^(nm-connection-editor)$
|
||||||
|
|
||||||
|
# Winecfg
|
||||||
|
windowrule = float,^(winecfg.exe)$
|
||||||
|
windowrulev2 = size 410 462,class:^(winecfg.exe)$,xwayland:1
|
||||||
|
windowrulev2 = size 415 487,class:^(winecfg.exe)$,xwayland:0
|
||||||
|
# Hide Wine System Tray
|
||||||
|
#windowrule = workspace 1,title:^(Wine System Tray)$
|
||||||
|
windowrule = float,title:^(Wine System Tray)$
|
||||||
|
windowrule = move -5 -5,title:^(Wine System Tray)$
|
||||||
|
windowrule = size 0 0,title:^(Wine System Tray)$
|
||||||
|
windowrule = nofocus,title:^(Wine System Tray)$
|
||||||
|
windowrule = noinitialfocus,title:^(Wine System Tray)$
|
||||||
|
|
||||||
|
|
||||||
|
# Hide xwaylandvideobridge window
|
||||||
|
windowrulev2 = move -5 -5,class:^(xwaylandvideobridge)$
|
||||||
|
windowrulev2 = size 0 0,class:^(xwaylandvideobridge)$
|
||||||
|
windowrulev2 = nofocus,class:^(xwaylandvideobridge)$
|
||||||
|
windowrulev2 = noinitialfocus,class:^(xwaylandvideobridge)$
|
||||||
|
|
||||||
|
|
||||||
|
# Gamescope
|
||||||
|
windowrule = nofullscreenrequest,title:^(gamescope)
|
||||||
|
windowrule = forceinput,^(gamescope)
|
||||||
|
|
||||||
|
|
||||||
|
# Riot Client
|
||||||
|
windowrule = size 1536 864,title:^(Riot Client Main)$
|
||||||
|
windowrule = move 192 108,title:^(Riot Client Main)$
|
||||||
|
windowrule = float,title:^(Riot Client Main)
|
||||||
|
windowrule = forceinput,title:^(Riot Client Main)
|
||||||
|
|
||||||
|
# LoL Client
|
||||||
|
windowrule = size 1280 720,title:^(League of Legends)
|
||||||
|
windowrule = float,title:^(League of Legends)
|
||||||
|
windowrule = center,title:^(League of Legends)
|
||||||
|
windowrule = forceinput,title:^(League of Legends)
|
||||||
|
|
||||||
|
# LoL
|
||||||
|
windowrule = float,title:^(League of Legends (TM) Client)
|
||||||
|
windowrule = size 1920 1080,^(League of Legends (TM) Client)
|
||||||
|
windowrule = fullscreen,^(League of Legends (TM) Client)
|
||||||
|
windowrule = forceinput,^(League of Legends (TM) Client)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Ubisoft Connect
|
||||||
|
windowrule = float,^(upc.exe)$
|
||||||
|
|
||||||
|
|
||||||
|
# Genshin Impact
|
||||||
|
windowrule = float,title:^(Genshin Impact)$
|
||||||
|
|
||||||
|
|
||||||
|
# Warframe
|
||||||
|
windowrulev2 = float,class:^(launcher.exe)$,title:^(Warframe)$
|
||||||
|
windowrule = fullscreen,^(warframe.x64.exe)$
|
99
.config/kitty/kitty.conf
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
# https://sw.kovidgoyal.net/kitty/conf/
|
||||||
|
|
||||||
|
# Fonts
|
||||||
|
font_family 'JetBrainsMono Nerd Font'
|
||||||
|
bold_font auto
|
||||||
|
italic_font auto
|
||||||
|
bold_italic_font auto
|
||||||
|
|
||||||
|
font_size 11
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Cursor
|
||||||
|
cursor_shape beam
|
||||||
|
cursor_beam_thickness 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Mouse
|
||||||
|
mouse_hide_wait 0
|
||||||
|
|
||||||
|
url_color #eca37a
|
||||||
|
url_style single
|
||||||
|
|
||||||
|
show_hyperlink_target yes
|
||||||
|
|
||||||
|
strip_trailing_spaces always
|
||||||
|
|
||||||
|
# select_by_word_characters @-./_~?&=%+#
|
||||||
|
|
||||||
|
focus_follows_mouse no
|
||||||
|
|
||||||
|
pointer_shape_when_grabbed hand
|
||||||
|
|
||||||
|
default_pointer_shape arrow
|
||||||
|
|
||||||
|
pointer_shape_when_dragging beam
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Performance tuning
|
||||||
|
repaint_delay 10
|
||||||
|
input_delay 3
|
||||||
|
sync_to_monitor no
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Terminal bell
|
||||||
|
enable_audio_bell no
|
||||||
|
visual_bell_duration 0.0
|
||||||
|
window_alert_on_bell no
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Window layout
|
||||||
|
remember_window_size no
|
||||||
|
initial_window_width 960
|
||||||
|
initial_window_height 540
|
||||||
|
|
||||||
|
window_border_width 0
|
||||||
|
|
||||||
|
window_padding_width 0 6
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Tab bar
|
||||||
|
tab_bar_edge top
|
||||||
|
|
||||||
|
tab_bar_style powerline
|
||||||
|
|
||||||
|
tab_bar_align left
|
||||||
|
|
||||||
|
tab_bar_min_tabs 2
|
||||||
|
|
||||||
|
tab_switch_strategy previous
|
||||||
|
|
||||||
|
tab_powerline_style angled
|
||||||
|
|
||||||
|
tab_activity_symbol (!)
|
||||||
|
tab_title_template "{index}{activity_symbol}: {title.replace('proxzima@proxzima:', '')}"
|
||||||
|
|
||||||
|
tab_bar_background #59290d
|
||||||
|
|
||||||
|
active_tab_foreground #f0e6de
|
||||||
|
active_tab_background #9c4716
|
||||||
|
active_tab_font_style bold-italic
|
||||||
|
|
||||||
|
inactive_tab_foreground #f0e6de
|
||||||
|
inactive_tab_background #703310
|
||||||
|
inactive_tab_font_style normal
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Keyboard shortcuts
|
||||||
|
# Don't intercept the following key strokes to make zsh-shift-select work.
|
||||||
|
map ctrl+shift+left no_op
|
||||||
|
map ctrl+shift+right no_op
|
||||||
|
map ctrl+shift+home no_op
|
||||||
|
map ctrl+shift+end no_op
|
1
.config/pulse/default.pa
Normal file
|
@ -0,0 +1 @@
|
||||||
|
load-module module-switch-on-connect
|
60
.config/swaync/config.json
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
{
|
||||||
|
"$schema": "/etc/xdg/swaync/configSchema.json",
|
||||||
|
"positionX": "right",
|
||||||
|
"positionY": "top",
|
||||||
|
"layer": "top",
|
||||||
|
"cssPriority": "application",
|
||||||
|
"control-center-margin-top": 0,
|
||||||
|
"control-center-margin-bottom": 0,
|
||||||
|
"control-center-margin-right": 0,
|
||||||
|
"control-center-margin-left": 0,
|
||||||
|
"notification-icon-size": 64,
|
||||||
|
"notification-body-image-height": 100,
|
||||||
|
"notification-body-image-width": 200,
|
||||||
|
"timeout": 10,
|
||||||
|
"timeout-low": 5,
|
||||||
|
"timeout-critical": 0,
|
||||||
|
"fit-to-screen": true,
|
||||||
|
"control-center-width": 500,
|
||||||
|
"control-center-height": 600,
|
||||||
|
"notification-window-width": 500,
|
||||||
|
"keyboard-shortcuts": true,
|
||||||
|
"image-visibility": "when-available",
|
||||||
|
"transition-time": 200,
|
||||||
|
"hide-on-clear": false,
|
||||||
|
"hide-on-action": true,
|
||||||
|
"script-fail-notify": true,
|
||||||
|
"scripts": {
|
||||||
|
"example-script": {
|
||||||
|
"exec": "echo 'Do something...'",
|
||||||
|
"urgency": "Normal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-visibility": {
|
||||||
|
"example-name": {
|
||||||
|
"state": "muted",
|
||||||
|
"urgency": "Low",
|
||||||
|
"app-name": "Spotify"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"widgets": [
|
||||||
|
"title",
|
||||||
|
"dnd",
|
||||||
|
"notifications",
|
||||||
|
"mpris"
|
||||||
|
],
|
||||||
|
"widget-config": {
|
||||||
|
"title": {
|
||||||
|
"text": "Notifications",
|
||||||
|
"clear-all-button": true,
|
||||||
|
"button-text": "Clear All"
|
||||||
|
},
|
||||||
|
"dnd": {
|
||||||
|
"text": "Do Not Disturb"
|
||||||
|
},
|
||||||
|
"mpris": {
|
||||||
|
"image-size": 96,
|
||||||
|
"image-radius": 12
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
215
.config/swaync/style.css
Normal file
|
@ -0,0 +1,215 @@
|
||||||
|
@import url('file:///home/viyurz/.config/gtk-3.0/colors-gtk.css');
|
||||||
|
|
||||||
|
* {
|
||||||
|
font-family: "Cantarell";
|
||||||
|
color: @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blank-window {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row:focus,
|
||||||
|
.notification-row:hover {
|
||||||
|
background: @hovered;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification, .control-center {
|
||||||
|
border: 2px solid transparent;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin: 30px;
|
||||||
|
background-image: linear-gradient(160deg, @background1, @background2), linear-gradient(160deg, @accent1, @accent2);
|
||||||
|
background-clip: padding-box, border-box;
|
||||||
|
background-origin: border-box;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-title,
|
||||||
|
.widget-dnd,
|
||||||
|
.control-center .notification {
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-default-action,
|
||||||
|
.notification-action {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-default-action:hover,
|
||||||
|
.notification-action:hover {
|
||||||
|
/*-gtk-icon-effect: none;*/
|
||||||
|
background-image: linear-gradient(160deg, @hovered, @hovered), linear-gradient(160deg, @accent1, @accent2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-content {
|
||||||
|
background: transparent;
|
||||||
|
padding: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Uncomment to enable specific urgency colors
|
||||||
|
.low {
|
||||||
|
background: yellow;
|
||||||
|
padding: 6px;
|
||||||
|
border-radius: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.normal {
|
||||||
|
background: green;
|
||||||
|
padding: 6px;
|
||||||
|
border-radius: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.critical {
|
||||||
|
background: red;
|
||||||
|
padding: 6px;
|
||||||
|
border-radius: 12px;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
.close-button {
|
||||||
|
background: transparent;
|
||||||
|
text-shadow: none;
|
||||||
|
padding: 0;
|
||||||
|
border-radius: 100%;
|
||||||
|
margin: 32px;
|
||||||
|
box-shadow: none;
|
||||||
|
border: none;
|
||||||
|
min-width: 24px;
|
||||||
|
min-height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close-button:hover {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: @bad;
|
||||||
|
transition: all 0.15s ease-in-out;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* When alternative actions are visible */
|
||||||
|
.notification-default-action:not(:only-child) {
|
||||||
|
border-bottom-left-radius: 0px;
|
||||||
|
border-bottom-right-radius: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add bottom border radius to eliminate clipping */
|
||||||
|
.notification-action:first-child {
|
||||||
|
border-bottom-left-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-action:last-child {
|
||||||
|
border-bottom-right-radius: 10px;
|
||||||
|
border-right: 1px solid @noti-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image {
|
||||||
|
}
|
||||||
|
|
||||||
|
.body-image {
|
||||||
|
margin-top: 6px;
|
||||||
|
background-color: white;
|
||||||
|
border-radius: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
background: transparent;
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.time {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
background: transparent;
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.body {
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: normal;
|
||||||
|
background: transparent;
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The "Notifications" and "Do Not Disturb" text widget */
|
||||||
|
.top-action-title {
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center-list {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Widgets ***/
|
||||||
|
|
||||||
|
/* Title widget */
|
||||||
|
.widget-title {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-title > button {
|
||||||
|
font-size: initial;
|
||||||
|
text-shadow: none;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-image: linear-gradient(160deg, @background1, @background2), linear-gradient(160deg, @accent1, @accent2);
|
||||||
|
background-clip: padding-box, border-box;
|
||||||
|
background-origin: border-box;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-title > button:hover {
|
||||||
|
background-image: linear-gradient(160deg, @selected, @selected), linear-gradient(160deg, @accent1, @accent2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DND widget */
|
||||||
|
.widget-dnd > switch {
|
||||||
|
border: 2px solid transparent;
|
||||||
|
border-radius: 16px;
|
||||||
|
background-image: linear-gradient(160deg, @background1, @background2), linear-gradient(160deg, @accent1, @accent2);
|
||||||
|
background-clip: padding-box, border-box;
|
||||||
|
background-origin: border-box;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-dnd > switch:checked {
|
||||||
|
background-image: linear-gradient(160deg, @selected, @selected), linear-gradient(160deg, @accent1, @accent2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-dnd > switch slider {
|
||||||
|
background-color: alpha(@disabled, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-dnd > switch:checked slider {
|
||||||
|
background-color: alpha(@accent1, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mpris widget */
|
||||||
|
.widget-mpris {
|
||||||
|
/* The parent to all players */
|
||||||
|
}
|
||||||
|
.widget-mpris-player {
|
||||||
|
padding: 8px;
|
||||||
|
margin: 8px;
|
||||||
|
}
|
||||||
|
.widget-mpris-title {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1.25rem;
|
||||||
|
}
|
||||||
|
.widget-mpris-subtitle {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
10
.config/waybar/bluetooth_toggle_power.sh
Executable file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [[ $(bluetoothctl show | grep Powered: | cut -f 2 -d ' ') == "no" ]]; then
|
||||||
|
if [[ ! $(bluetoothctl power on) ]]; then
|
||||||
|
rfkill block bluetooth
|
||||||
|
rfkill unblock bluetooth
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
bluetoothctl power off
|
||||||
|
fi
|
200
.config/waybar/config
Normal file
|
@ -0,0 +1,200 @@
|
||||||
|
{
|
||||||
|
"layer": "top", // Waybar at top layer
|
||||||
|
// "position": "top", // Waybar position (top|bottom|left|right)
|
||||||
|
// "height": 30, // Waybar height (to be removed for auto height)
|
||||||
|
"modules-left": [
|
||||||
|
"hyprland/workspaces",
|
||||||
|
"tray",
|
||||||
|
"network",
|
||||||
|
"bluetooth",
|
||||||
|
"pulseaudio#output",
|
||||||
|
"pulseaudio#input",
|
||||||
|
"mpris"
|
||||||
|
],
|
||||||
|
"modules-right": [
|
||||||
|
"hyprland/window",
|
||||||
|
"backlight",
|
||||||
|
"battery",
|
||||||
|
"custom/gpu-temp",
|
||||||
|
"custom/gpu-usage",
|
||||||
|
"memory",
|
||||||
|
"custom/cpu-temp",
|
||||||
|
"cpu",
|
||||||
|
"clock"
|
||||||
|
],
|
||||||
|
|
||||||
|
"hyprland/workspaces": {
|
||||||
|
"disable-scroll": true,
|
||||||
|
"all-outputs": false,
|
||||||
|
"on-click": "activate",
|
||||||
|
"format": "{name}"
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
// "icon-size": 21,
|
||||||
|
"spacing": 8
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
// "interface": "wlp2*", // (Optional) To force the use of this interface
|
||||||
|
"interval": 5,
|
||||||
|
"format-wifi": " {essid} ({frequency}GHz) {bandwidthDownBytes} {bandwidthUpBytes}",
|
||||||
|
"format-ethernet": " {bandwidthDownBytes} {bandwidthUpBytes}",
|
||||||
|
"tooltip-format-wifi": "{essid} ({signalStrength}%) - {frequency}GHz\n {bandwidthDownBytes} | {bandwidthUpBytes}",
|
||||||
|
"tooltip-format-ethernet": "{ipaddr}/{cidr}\n {bandwidthDownBytes} | {bandwidthUpBytes}",
|
||||||
|
"format-linked": " {ifname} (No IP)",
|
||||||
|
"format-disconnected": " Disconnected",
|
||||||
|
"on-click-right": "nm-connection-editor"
|
||||||
|
},
|
||||||
|
"bluetooth": {
|
||||||
|
"format": "",
|
||||||
|
"format-connected": " {device_alias}",
|
||||||
|
"format-connected-battery": " {device_alias} {device_battery_percentage}%",
|
||||||
|
// "format-device-preference": [ "device1", "device2" ], // preference list deciding the displayed device
|
||||||
|
"tooltip-format": "{controller_alias} ({controller_address})\n{num_connections} connected",
|
||||||
|
"tooltip-format-connected": "{controller_alias} ({controller_address})\n{num_connections} connected\n\n{device_enumerate}",
|
||||||
|
"tooltip-format-enumerate-connected": "{device_alias} {device_address}",
|
||||||
|
"tooltip-format-enumerate-connected-battery": "{device_alias} {device_address} {device_battery_percentage}%",
|
||||||
|
"on-click": "$HOME/.config/waybar/bluetooth_toggle_power.sh",
|
||||||
|
"on-click-right": "blueman-manager"
|
||||||
|
},
|
||||||
|
"pulseaudio#output": {
|
||||||
|
"on-click": "swayosd-client --output-volume=mute-toggle",
|
||||||
|
"on-click-right": "pavucontrol",
|
||||||
|
"on-scroll-up": "swayosd-client --output-volume=raise",
|
||||||
|
"on-scroll-down": "swayosd-client --output-volume=lower",
|
||||||
|
"scroll-step": 5,
|
||||||
|
"smooth-scrolling-threshold": 1,
|
||||||
|
"format": "{icon} {volume}%",
|
||||||
|
"format-muted": " {volume}%",
|
||||||
|
"format-bluetooth": "(){icon} {volume}%",
|
||||||
|
"format-bluetooth-muted": "() {volume}%",
|
||||||
|
"format-icons": {
|
||||||
|
"headphone": "",
|
||||||
|
"hands-free": "",
|
||||||
|
"headset": "",
|
||||||
|
"phone": "",
|
||||||
|
"portable": "",
|
||||||
|
"car": "",
|
||||||
|
"default": ["", "", ""]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pulseaudio#input": {
|
||||||
|
"on-click": "swayosd-client --input-volume=mute-toggle",
|
||||||
|
"on-click-right": "pavucontrol",
|
||||||
|
"on-scroll-up": "swayosd-client --input-volume=raise",
|
||||||
|
"on-scroll-down": "swayosd-client --input-volume=lower",
|
||||||
|
"scroll-step": 5,
|
||||||
|
"smooth-scrolling-threshold": 1,
|
||||||
|
"format": "{format_source}",
|
||||||
|
"format-muted": "{format_source}",
|
||||||
|
"format-bluetooth": "(){format_source}",
|
||||||
|
"format-bluetooth-muted": "(){format_source}",
|
||||||
|
"format-source": " {volume}%",
|
||||||
|
"format-source-muted": " {volume}%"
|
||||||
|
},
|
||||||
|
"mpris": {
|
||||||
|
"format": " {status_icon} {title}",
|
||||||
|
"player": "beefweb",
|
||||||
|
"ignored-players": ["firefox"],
|
||||||
|
"status-icons": {
|
||||||
|
"playing": "",
|
||||||
|
"paused": "",
|
||||||
|
"stopped": ""
|
||||||
|
},
|
||||||
|
"max-length": 35
|
||||||
|
},
|
||||||
|
"hyprland/window" : {
|
||||||
|
"format": "{}",
|
||||||
|
"separate-outputs": true,
|
||||||
|
"max-length": 35
|
||||||
|
},
|
||||||
|
"backlight": {
|
||||||
|
"on-scroll-up": "swayosd-client --brightness=raise",
|
||||||
|
"on-scroll-down": "swayosd-client --brightness=lower",
|
||||||
|
"format": "{icon} {percent}%",
|
||||||
|
"format-icons": ["", "", "", "", "", "", "", "", ""],
|
||||||
|
"scroll-step": 5,
|
||||||
|
"smooth-scrolling-threshold": 1
|
||||||
|
},
|
||||||
|
"battery": {
|
||||||
|
"interval": 15,
|
||||||
|
"states": {
|
||||||
|
"100": 100,
|
||||||
|
"90": 90,
|
||||||
|
"80": 80,
|
||||||
|
"70": 70,
|
||||||
|
"60": 60,
|
||||||
|
"50": 50,
|
||||||
|
"40": 40,
|
||||||
|
"30": 30,
|
||||||
|
"20": 20,
|
||||||
|
"10": 10
|
||||||
|
},
|
||||||
|
"format-time": "{H}:{m}",
|
||||||
|
"format": "{icon} {capacity}% ({time})",
|
||||||
|
"format-icons": ["", "", "", "", "", "", "", "", "", "", ""],
|
||||||
|
"format-plugged": " {capacity}%",
|
||||||
|
"format-charging-100": " {capacity}% ({time})",
|
||||||
|
"format-charging-90": " {capacity}% ({time})",
|
||||||
|
"format-charging-80": " {capacity}% ({time})",
|
||||||
|
"format-charging-70": " {capacity}% ({time})",
|
||||||
|
"format-charging-60": " {capacity}% ({time})",
|
||||||
|
"format-charging-50": " {capacity}% ({time})",
|
||||||
|
"format-charging-40": " {capacity}% ({time})",
|
||||||
|
"format-charging-30": " {capacity}% ({time})",
|
||||||
|
"format-charging-20": " {capacity}% ({time})",
|
||||||
|
"format-charging-10": " {capacity}% ({time})",
|
||||||
|
"tooltip-format": "{timeTo}\nPower draw: {power}W"
|
||||||
|
},
|
||||||
|
"custom/gpu-temp": {
|
||||||
|
"exec": "$HOME/.scripts/waybar-gpu-temp.sh",
|
||||||
|
"interval": 5,
|
||||||
|
"return-type": "json",
|
||||||
|
"format": "{icon} {}",
|
||||||
|
"format-icons": {
|
||||||
|
"low": "",
|
||||||
|
"normal": "",
|
||||||
|
"high": "",
|
||||||
|
"alert": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"custom/gpu-usage": {
|
||||||
|
"exec": "$HOME/.scripts/waybar-gpu-usage.sh",
|
||||||
|
"return-type": "json",
|
||||||
|
"format": " {}",
|
||||||
|
"interval" : 5
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"format": " {used}GiB",
|
||||||
|
"interval": 5
|
||||||
|
},
|
||||||
|
"custom/cpu-temp": {
|
||||||
|
"exec": "$HOME/.scripts/waybar-cpu-temp.sh",
|
||||||
|
"interval": 5,
|
||||||
|
"return-type": "json",
|
||||||
|
"format": "{icon} {}",
|
||||||
|
"format-icons": {
|
||||||
|
"low": "",
|
||||||
|
"normal": "",
|
||||||
|
"high": "",
|
||||||
|
"alert": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"format": " {usage}%",
|
||||||
|
"interval": 5
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"interval": 1,
|
||||||
|
"format": " {:%X}",
|
||||||
|
"tooltip-format": "<tt>{calendar}</tt>",
|
||||||
|
"calendar": {
|
||||||
|
"mode": "month",
|
||||||
|
"format": {
|
||||||
|
"months": "<span color='#ffead3'><b>{}</b></span>",
|
||||||
|
"days": "<span color='#ecc6d9'><b>{}</b></span>",
|
||||||
|
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
|
||||||
|
"today": "<span color='#ff6699'><b>{}</b></span>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
129
.config/waybar/style.css
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
@import url("file:///home/viyurz/.config/gtk-3.0/colors-gtk.css");
|
||||||
|
|
||||||
|
* {
|
||||||
|
font-family: 'JetBrainsMono Nerd Font';
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#waybar {
|
||||||
|
background-image: linear-gradient(160deg, @background1, @background2), linear-gradient(160deg, @accent1, @accent2);
|
||||||
|
background-clip: padding-box, border-box;
|
||||||
|
background-origin: border-box;
|
||||||
|
border-bottom: 2px solid transparent;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modules-left, .modules-center, .modules-right {
|
||||||
|
margin-bottom: 2px;
|
||||||
|
color: @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
box-shadow: none;
|
||||||
|
border: none;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button:hover {
|
||||||
|
background-color: @hovered;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.active {
|
||||||
|
background-color: @selected;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.urgent {
|
||||||
|
background-color: @urgent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray > .passive {
|
||||||
|
-gtk-icon-effect: dim;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray > .needs-attention {
|
||||||
|
-gtk-icon-effect: highlight;
|
||||||
|
background-color: @urgent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#button,
|
||||||
|
#tray,
|
||||||
|
#network,
|
||||||
|
#bluetooth,
|
||||||
|
#pulseaudio,
|
||||||
|
#custom-media,
|
||||||
|
#window,
|
||||||
|
#backlight,
|
||||||
|
#battery,
|
||||||
|
#custom-gpu-temp,
|
||||||
|
#custom-gpu-usage,
|
||||||
|
#memory,
|
||||||
|
#custom-cpu-temp,
|
||||||
|
#cpu,
|
||||||
|
#clock {
|
||||||
|
padding: 2px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
.modules-left {
|
||||||
|
color: @accent1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modules-right {
|
||||||
|
color: @accent2;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pulseaudio,
|
||||||
|
#backlight,
|
||||||
|
#custom-gpu-temp,
|
||||||
|
#custom-gpu-usage,
|
||||||
|
#custom-cpu-temp,
|
||||||
|
#cpu {
|
||||||
|
color: @accent1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#network,
|
||||||
|
#bluetooth,
|
||||||
|
#mpris,
|
||||||
|
#battery,
|
||||||
|
#memory,
|
||||||
|
#clock {
|
||||||
|
color: @accent2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio.output.muted,
|
||||||
|
#pulseaudio.input.source-muted {
|
||||||
|
color: @disabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
#network.disabled, #network.disconnected,
|
||||||
|
#bluetooth.disabled, #bluetooth.off {
|
||||||
|
color: @disabled2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.charging {
|
||||||
|
background-color: alpha(@good, 0.33);
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.30:not(.charging),
|
||||||
|
#custom-temp-gpu.high,
|
||||||
|
#custom-temp-cpu.high {
|
||||||
|
background-color: alpha(@bad, 0.33);
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.20:not(.charging),
|
||||||
|
#battery.10:not(.charging),
|
||||||
|
#custom-temp-gpu.alert,
|
||||||
|
#custom-temp-cpu.alert {
|
||||||
|
background-color: alpha(@bad, 0.5);
|
||||||
|
animation-name: blink;
|
||||||
|
animation-duration: 1.5s;
|
||||||
|
animation-timing-function: steps(2, start);
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink {
|
||||||
|
to {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
}
|
24
.config/wlogout/layout
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"label" : "lock",
|
||||||
|
"action" : "~/.config/hypr/swaylock",
|
||||||
|
"text" : "Lock",
|
||||||
|
"keybind" : "l"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"label" : "logout",
|
||||||
|
"action" : "hyprctl dispatch exit --",
|
||||||
|
"text" : "Logout",
|
||||||
|
"keybind" : "e"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"label" : "shutdown",
|
||||||
|
"action" : "sudo poweroff",
|
||||||
|
"text" : "Shutdown",
|
||||||
|
"keybind" : "s"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"label" : "reboot",
|
||||||
|
"action" : "sudo reboot",
|
||||||
|
"text" : "Reboot",
|
||||||
|
"keybind" : "r"
|
||||||
|
}
|
BIN
.config/wlogout/lock-focus.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
.config/wlogout/lock.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
.config/wlogout/logout-focus.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
.config/wlogout/logout.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
.config/wlogout/reboot-focus.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
.config/wlogout/reboot.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
.config/wlogout/shutdown-focus.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
.config/wlogout/shutdown.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
63
.config/wlogout/style.css
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
@import url("file:///home/viyurz/.config/gtk-3.0/colors-gtk.css");
|
||||||
|
|
||||||
|
* {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
window {
|
||||||
|
background-color: rgba(12, 12, 12, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
font-family: "Hack Nerd Font";
|
||||||
|
font-size: 13pt;
|
||||||
|
color: @foreground;
|
||||||
|
margin: 5px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
background-size: 25%;
|
||||||
|
background-color: transparent;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
border-radius: 16px;
|
||||||
|
box-shadow: none
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: alpha(@foreground, 0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:focus, button:active {
|
||||||
|
background-color: alpha(@foreground, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
#lock {
|
||||||
|
background-image: image(url("./lock.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#lock:focus, #lock:active {
|
||||||
|
background-image: image(url("./lock-focus.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#logout {
|
||||||
|
background-image: image(url("./logout.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#logout:focus, #logout:active {
|
||||||
|
background-image: image(url("./logout-focus.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#shutdown {
|
||||||
|
background-image: image(url("./shutdown.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#shutdown:focus, #shutdown:active {
|
||||||
|
background-image: image(url("./shutdown-focus.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#reboot {
|
||||||
|
background-image: image(url("./reboot.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#reboot:focus, #reboot:active {
|
||||||
|
background-image: image(url("./reboot-focus.png"));
|
||||||
|
}
|
32
.config/wofi/style.css
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
@import url('file:///home/viyurz/.config/gtk-3.0/colors-gtk.css');
|
||||||
|
|
||||||
|
window {
|
||||||
|
color: @foreground;
|
||||||
|
font-family: 'JetBrainsMono Nerd Font';
|
||||||
|
background-image: linear-gradient(160deg, @background1, @background2), linear-gradient(160deg, @accent1, @accent2);
|
||||||
|
background-clip: padding-box, border-box;
|
||||||
|
background-origin: border-box;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scroll {
|
||||||
|
margin: 5px 7px;
|
||||||
|
border: none;
|
||||||
|
outline: none;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#input {
|
||||||
|
margin: 2px;
|
||||||
|
box-shadow: none;
|
||||||
|
border-radius: 4px 4px 0 0;
|
||||||
|
background-color: @hovered;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry:selected {
|
||||||
|
outline: none;
|
||||||
|
padding-left: 8px;
|
||||||
|
border-radius: 2px;
|
||||||
|
background-color: @selected;
|
||||||
|
}
|
15
.gitconfig
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
[user]
|
||||||
|
name = Viyurz
|
||||||
|
username = Viyurz
|
||||||
|
email = 128215328+Viyurz@users.noreply.github.com
|
||||||
|
signingkey = /home/viyurz/.ssh/id_ed25519.pub
|
||||||
|
[init]
|
||||||
|
defaultBranch = main
|
||||||
|
[commit]
|
||||||
|
gpgsign = true
|
||||||
|
[gpg]
|
||||||
|
format = ssh
|
||||||
|
[pull]
|
||||||
|
rebase = true
|
||||||
|
[diff]
|
||||||
|
colorMoved = zebra
|
3
.local/bin/genshin-impact
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
lutris lutris:rungame/genshin-impact
|
9
.local/bin/lol
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Note: If running in wayland, switch to borderless windowed to prevent the game window from disappearing
|
||||||
|
|
||||||
|
hyprctl monitors | grep -qe 'HDMI-A-1' && "$HOME/.scripts/lol-watcher.sh" &
|
||||||
|
|
||||||
|
lutris lutris:rungame/league-of-legends
|
||||||
|
|
||||||
|
killall -9 lol-watcher.sh &> /dev/null
|
339
.local/bin/sw
Executable file
|
@ -0,0 +1,339 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
wp_base_dir="$HOME/Images/Wallpapers/Desktop"
|
||||||
|
declare -A wp_dirs=([SFW]="$wp_base_dir/SFW"
|
||||||
|
[NSFW]="$wp_base_dir/( ͡° ͜ʖ ͡°)"
|
||||||
|
[BONK]="$wp_base_dir/Bonk")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function pick_random_wallpaper {
|
||||||
|
if [[ ${#wp_opts[@]} -eq 0 ]]; then
|
||||||
|
target_wp_dirs=("${wp_dirs[SFW]}")
|
||||||
|
else
|
||||||
|
for opt in "${!wp_opts[@]}"; do
|
||||||
|
opt_value=${wp_opts[$opt]}
|
||||||
|
if [[ $opt_value -eq 1 ]]; then
|
||||||
|
target_wp_dirs+=("${wp_dirs[$opt]}")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Picking a random wallpaper from ${target_wp_dirs[@]}."
|
||||||
|
|
||||||
|
wallpaper="$(find "${target_wp_dirs[@]}" -type f | shuf -n 1)"
|
||||||
|
wallpaper="$wallpaper"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function help {
|
||||||
|
cat <<- EOF
|
||||||
|
Usage: $(basename "$0") [options...]
|
||||||
|
|
||||||
|
-h, --help Show this message and quit.
|
||||||
|
-r, --random Change the theme by picking a random wallpaper.
|
||||||
|
-w, --wallpaper <path> Change the theme using this wallpaper.
|
||||||
|
-s, --sfw Pick a wallpaper from SFW folder (default).
|
||||||
|
-n, --nsfw Pick a wallpaper from NSFW folder.
|
||||||
|
-b, --bonk U horny dog ¬‿¬.
|
||||||
|
|
||||||
|
Options -s and -n can be used together.
|
||||||
|
If no option is specified, reloads the current theme.
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
declare -A wp_opts
|
||||||
|
while getopts "hrw:snb" opt; do
|
||||||
|
case $opt in
|
||||||
|
h)
|
||||||
|
help
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
r)
|
||||||
|
opt_random=1
|
||||||
|
;;
|
||||||
|
w)
|
||||||
|
opt_wallpaper=1
|
||||||
|
opt_wallpaper_arg="$OPTARG"
|
||||||
|
;;
|
||||||
|
s)
|
||||||
|
wp_opts[SFW]=1
|
||||||
|
;;
|
||||||
|
n)
|
||||||
|
wp_opts[NSFW]=1
|
||||||
|
;;
|
||||||
|
b)
|
||||||
|
wp_opts[BONK]=1
|
||||||
|
;;
|
||||||
|
\?)
|
||||||
|
echo "Invalid option: $opt."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if [[ $opt_random -eq 1 && $opt_wallpaper -eq 1 ]]; then
|
||||||
|
echo "Option -r and -w can't be used together."
|
||||||
|
exit 1
|
||||||
|
elif [[ $opt_random -eq 1 ]]; then
|
||||||
|
pick_random_wallpaper
|
||||||
|
elif [[ $opt_wallpaper -eq 1 ]]; then
|
||||||
|
if [[ -f "$opt_wallpaper_arg" ]]; then
|
||||||
|
wallpaper="$opt_wallpaper_arg"
|
||||||
|
else
|
||||||
|
echo "Error: $opt_wallpaper_arg is not a valid path."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [[ $# -gt 0 ]]; then
|
||||||
|
echo "Warning: Neither -r or -w were specified, ignoring option(s): $*."
|
||||||
|
fi
|
||||||
|
# To get the current wallpaper
|
||||||
|
source "$HOME/.cache/wal/colors.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
echo "Selected wallpaper: $wallpaper"
|
||||||
|
#viu -h 15 "$wallpaper"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Create the colors scheme
|
||||||
|
echo "Generating color scheme using pywal."
|
||||||
|
wal -qni "$wallpaper" --saturate 0.75
|
||||||
|
|
||||||
|
# Pour si ya un apostrophe dans le nom du fichier
|
||||||
|
sed -iE "/^wallpaper=/,/#/ s/='/=\"/" /home/viyurz/.cache/wal/colors.sh
|
||||||
|
sed -iE "/^wallpaper=/,/#/ s/'$/\"/" /home/viyurz/.cache/wal/colors.sh
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Source colors scheme generated
|
||||||
|
source "$HOME/.cache/wal/colors.sh"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set additional colors
|
||||||
|
accent1_dark_hsl="$(pastel darken 1 "$color5" | pastel format hsl)"
|
||||||
|
accent2_dark_hsl="$(pastel darken 1 "$color6" | pastel format hsl)"
|
||||||
|
declare -A colors=(
|
||||||
|
[foreground]="$foreground"
|
||||||
|
[good]="#00BB66"
|
||||||
|
[bad]="#AA2222"
|
||||||
|
[urgent]="$color4"
|
||||||
|
[accent1]="$color5"
|
||||||
|
[accent2]="$color6"
|
||||||
|
[background1]="$(pastel lighten 0.2 "$accent1_dark_hsl" | pastel format hex)"
|
||||||
|
[background2]="$(pastel lighten 0.2 "$accent2_dark_hsl" | pastel format hex)"
|
||||||
|
[hovered]="$(pastel lighten 0.25 "$accent1_dark_hsl" | pastel format hex)"
|
||||||
|
[selected]="$(pastel lighten 0.35 "$accent1_dark_hsl" | pastel format hex)"
|
||||||
|
[disabled]="$(pastel lighten 0.35 "$accent1_dark_hsl" | pastel format hex)"
|
||||||
|
[disabled2]="$(pastel lighten 0.35 "$accent2_dark_hsl" | pastel format hex)"
|
||||||
|
)
|
||||||
|
|
||||||
|
declare -A params=(
|
||||||
|
[border_radius]=4
|
||||||
|
[border_size]=2
|
||||||
|
[gaps_out]=15
|
||||||
|
[gaps_in]=8
|
||||||
|
[font]="'JetBrainsMono Nerd Font'"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Display accent colors
|
||||||
|
pastel color "${colors[accent1]}"
|
||||||
|
pastel color "${colors[accent2]}"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set wallpaper using swaybg
|
||||||
|
if grep 0 "$HOME/.cache/weeb-mode"; then
|
||||||
|
wallpaper="/usr/share/hyprland/wall_2K.png"
|
||||||
|
fi
|
||||||
|
echo "Setting wallpaper using swaybg."
|
||||||
|
killall -9 swaybg &> /dev/null
|
||||||
|
hyprctl dispatch exec "swaybg -i \"$wallpaper\"" > /dev/null
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Clear colors/params files
|
||||||
|
echo -n '' > "$HOME/.config/gtk-3.0/colors-gtk.css"
|
||||||
|
echo -n '' > "$HOME/.config/hypr/colors.conf"
|
||||||
|
echo "wallpaper=\"$wallpaper\"" > "$HOME/.config/hypr/colors.sh"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set colors variables in files
|
||||||
|
echo "Writing colors to .conf/css/sh files."
|
||||||
|
for key in "${!colors[@]}"; do
|
||||||
|
value="${colors[$key]}"
|
||||||
|
# Hyprland
|
||||||
|
echo '$'"$key=rgb(${value:1})" >> "$HOME/.config/hypr/colors.conf"
|
||||||
|
# GTK
|
||||||
|
echo "@define-color $key $value;" >> "$HOME/.config/gtk-3.0/colors-gtk.css"
|
||||||
|
# Shell
|
||||||
|
echo "${key}=$value" >> "$HOME/.config/hypr/colors.sh"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Add Hyprland params
|
||||||
|
echo "Adding parameters to Hyprland .conf file."
|
||||||
|
for key in "${!params[@]}"; do
|
||||||
|
value="${params[$key]}"
|
||||||
|
echo '$'"$key=$value" >> "$HOME/.config/hypr/colors.conf"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Reload Hyprland
|
||||||
|
echo "Reloading Hyprland."
|
||||||
|
hyprctl reload &> /dev/null
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set Kitty params
|
||||||
|
echo "Setting Kitty parameters."
|
||||||
|
declare -A kitty_vars=(
|
||||||
|
[font_family]="${params[font]}"
|
||||||
|
[url_color]="${colors[accent1]}"
|
||||||
|
[tab_bar_background]="${colors[background1]}"
|
||||||
|
[active_tab_background]="${colors[selected]}"
|
||||||
|
[inactive_tab_background]="${colors[hovered]}"
|
||||||
|
[active_tab_foreground]="${colors[foreground]}"
|
||||||
|
[inactive_tab_foreground]="${colors[foreground]}"
|
||||||
|
)
|
||||||
|
for key in "${!kitty_vars[@]}"; do
|
||||||
|
value="${kitty_vars[$key]}"
|
||||||
|
sed -i "s/^$key.*/$key $value/" "$HOME/.config/kitty/kitty.conf"
|
||||||
|
done
|
||||||
|
echo "Reloading opened Kitties."
|
||||||
|
killall -SIGUSR1 kitty &> /dev/null
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Convert CSS to SCSS for eww
|
||||||
|
# echo "Converting CSS colors file to SCSS for eww."
|
||||||
|
# cp "$HOME/.config/gtk-3.0/colors-gtk.css" "$HOME/.config/eww/colors.scss"
|
||||||
|
# sed -i -E 's/^@define-color /$/; s/^\$\S*/&:/' "$HOME/.config/eww/colors.scss"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set Waybar params
|
||||||
|
echo "Setting Waybar parameters."
|
||||||
|
declare -A waybar_vars=(
|
||||||
|
[font-family]="${params[font]}"
|
||||||
|
[border-bottom]="${params[border_size]}px solid transparent"
|
||||||
|
[margin-bottom]="${params[border_size]}px"
|
||||||
|
)
|
||||||
|
for key in "${!waybar_vars[@]}"; do
|
||||||
|
value="${waybar_vars[$key]}"
|
||||||
|
sed -i "s~$key:[^;]*~$key: $value~" "$HOME/.config/waybar/style.css"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Reloading Waybar."
|
||||||
|
if pgrep -x -u "$USER" waybar > /dev/null; then
|
||||||
|
killall -SIGUSR2 waybar
|
||||||
|
else
|
||||||
|
hyprctl dispatch exec waybar > /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set Wofi params
|
||||||
|
echo "Setting Wofi parameters."
|
||||||
|
declare -A wofi_vars_window=(
|
||||||
|
[font-family]="${params[font]}"
|
||||||
|
[border]="${params[border_size]}px solid transparent"
|
||||||
|
[border-radius]="${params[border_radius]}px"
|
||||||
|
)
|
||||||
|
for key in "${!wofi_vars_window[@]}"; do
|
||||||
|
value="${wofi_vars_window[$key]}"
|
||||||
|
sed -i "/^window/,/$key:/ s~$key:[^;]*~$key: $value~" "$HOME/.config/wofi/style.css"
|
||||||
|
done
|
||||||
|
|
||||||
|
declare -A wofi_vars_input=(
|
||||||
|
[margin]="${params[border_size]}px"
|
||||||
|
[border-radius]="${params[border_radius]}px ${params[border_radius]}px 0 0"
|
||||||
|
)
|
||||||
|
for key in "${!wofi_vars_input[@]}"; do
|
||||||
|
value="${wofi_vars_input[$key]}"
|
||||||
|
sed -i "/^#input/,/$key:/ s~$key:[^;]*~$key: $value~" "$HOME/.config/wofi/style.css"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set entry:selected border-radius
|
||||||
|
sed -i "/^#entry:selected/,/border-radius:/ s/border-radius:[^;]*/border-radius: $(( params[border_radius]/2 ))px/" "$HOME/.config/wofi/style.css"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set swaync params
|
||||||
|
#echo "Setting swaync parameters."
|
||||||
|
#sed -zi "s/border-radius:[^;]*/border-radius: ${params[border_radius]}px/1" "$HOME/.config/swaync/style.css"
|
||||||
|
#sed -i "s/border: [0-9]+.*/border: ${params[border_size]}px solid transparent;/" "$HOME/.config/swaync/style.css"
|
||||||
|
#sed -zi "s/margin:[^;]*/margin: $((params[gaps_out]*2))px/1" "$HOME/.config/swaync/style.css"
|
||||||
|
#sed -zi "s/margin:[^;]*/margin: ${params[gaps_out]}px/3" "$HOME/.config/swaync/style.css"
|
||||||
|
#sed -zi "s/border-radius:[^;]*/border-radius: ${params[border_radius]}px/8" "$HOME/.config/swaync/style.css"
|
||||||
|
echo "Reloading swaync."
|
||||||
|
if pgrep -x -u "$USER" swaync > /dev/null; then
|
||||||
|
swaync-client -rs > /dev/null
|
||||||
|
else
|
||||||
|
hyprctl dispatch exec swaync > /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# BetterDiscord
|
||||||
|
if [[ -x /bin/betterdiscordctl ]]; then
|
||||||
|
if [[ ! -f "$HOME/.config/BetterDiscord/data/stable/custom.css" ]]; then
|
||||||
|
echo "Downloading ClearVision theme for BetterDiscord."
|
||||||
|
mkdir -p "$HOME/.config/BetterDiscord/data/stable"
|
||||||
|
wget -O "$HOME/.config/BetterDiscord/data/stable/custom.css" "https://betterdiscord.app/Download?id=23"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Setting BetterDiscord colors."
|
||||||
|
declare -A bd_vars=(
|
||||||
|
[main-color]="${colors[accent1]}"
|
||||||
|
[hover-color]="${colors[accent2]}"
|
||||||
|
[text-normal]="${colors[foreground]}"
|
||||||
|
[background-shading]='0%'
|
||||||
|
[background-overlay]='rgba(0, 0, 0, 0)'
|
||||||
|
[background-image]="linear-gradient(160deg, ${colors[background1]}, ${colors[background2]})"
|
||||||
|
)
|
||||||
|
for key in "${!bd_vars[@]}"; do
|
||||||
|
value="${bd_vars[$key]}"
|
||||||
|
sed -i "s~--$key:[^;]*~--$key: $value~" "$HOME/.config/BetterDiscord/data/stable/custom.css"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Change Wlogout icons color
|
||||||
|
echo "Changing wlogout icons colors."
|
||||||
|
wlogout_img=('lock' 'reboot' 'shutdown' 'logout')
|
||||||
|
for img in "${wlogout_img[@]}"; do
|
||||||
|
convert "$HOME/.config/wlogout/$img.png" -fill "${colors[accent1]}" -colorize 100 "$HOME/.config/wlogout/$img.png"
|
||||||
|
convert "$HOME/.config/wlogout/$img-focus.png" -fill "${colors[accent2]}" -colorize 100 "$HOME/.config/wlogout/$img-focus.png"
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Reload pywalfox
|
||||||
|
if pgrep firefox &> /dev/null; then
|
||||||
|
echo "Reloading pywalfox."
|
||||||
|
pywalfox update 2> /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# OpenRGB
|
||||||
|
if [[ -x /bin/openrgb ]]; then
|
||||||
|
echo "Setting keyboard colors."
|
||||||
|
openrgb --noautoconnect -c "${colors[accent1]:1}" > /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# To use with swaylock
|
||||||
|
convert "$wallpaper" -blur 0x5 "$HOME/.cache/wallpaper-blurred.jpg" &
|
42
.scripts/foobar2000.sh
Executable file
|
@ -0,0 +1,42 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Required: foo_runcmd
|
||||||
|
|
||||||
|
export WINEPREFIX="$HOME/.local/share/wineprefixes/foobar2000"
|
||||||
|
foobar2000_cmd="$HOME/.foobar2000/foobar2000.exe"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function start_foobar2000 {
|
||||||
|
[[ "$XDG_SESSION_TYPE" == 'wayland' ]] && opt="DISPLAY="
|
||||||
|
hyprctl dispatch exec "$opt beefweb_mpris" > /dev/null
|
||||||
|
while ! pgrep foobar2000.exe &> /dev/null; do
|
||||||
|
sleep 0.1
|
||||||
|
done
|
||||||
|
foo_runcmd '/runcmd=Playback/Volume/Set to -21 dB'
|
||||||
|
for ((i = 0 ; i < 10 ; i++)); do
|
||||||
|
foo_runcmd '/runcmd=Playback/Volume/Down'
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function foo_runcmd {
|
||||||
|
wine "$foobar2000_cmd" "${@}" &> /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
-vu|volume-up)
|
||||||
|
foo_runcmd '/runcmd=Playback/Volume/Up';;
|
||||||
|
-vd|volume-down)
|
||||||
|
foo_runcmd '/runcmd=Playback/Volume/Down';;
|
||||||
|
-pp|play-pause)
|
||||||
|
if ! pgrep foobar2000.exe &> /dev/null; then
|
||||||
|
start_foobar2000
|
||||||
|
fi
|
||||||
|
foo_runcmd '/playpause';;
|
||||||
|
*)
|
||||||
|
echo "Invalid option."
|
||||||
|
exit 1;;
|
||||||
|
esac
|
34
.scripts/grim.sh
Executable file
|
@ -0,0 +1,34 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
usage="Usage: $(basename "$0") screen | window | region"
|
||||||
|
|
||||||
|
if [[ $# -ne 1 ]]; then
|
||||||
|
echo "$usage"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
screen)
|
||||||
|
grim - | wl-copy
|
||||||
|
;;
|
||||||
|
window)
|
||||||
|
grim -g "$(hyprctl activewindow -j | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"')" - | wl-copy
|
||||||
|
;;
|
||||||
|
region)
|
||||||
|
region="$(slurp)"
|
||||||
|
[[ $? -ne 0 ]] && exit 1
|
||||||
|
grim -g "$region" - | wl-copy
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "$usage"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
||||||
|
img_name="$(date +'%Y-%m-%d_%H-%M-%S'_grim.png)"
|
||||||
|
|
||||||
|
wl-paste -t image > "$GRIM_DEFAULT_DIR/$img_name"
|
||||||
|
|
||||||
|
notify-send "Grim" "Screenshot saved to $img_name"
|
6
.scripts/kill-wine-explorer.sh
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
killall -9 explorer.exe
|
||||||
|
sleep 5
|
||||||
|
done
|
13
.scripts/lol-watcher.sh
Executable file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# This script + pgrep command
|
||||||
|
[[ $(pgrep "lol-watcher.sh" | wc -l) -gt 2 ]] && exit 1
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
if hyprctl clients | grep -qe 'title: League of Legends (TM) Client'; then
|
||||||
|
hyprctl monitors | grep -qe 'HDMI-A-1' && hyprctl keyword monitor HDMI-A-1,disable
|
||||||
|
else
|
||||||
|
hyprctl monitors | grep -qe 'HDMI-A-1' || hyprctl keyword monitor HDMI-A-1,1920x1080@60,1920x0,1
|
||||||
|
fi
|
||||||
|
sleep 5
|
||||||
|
done
|
12
.scripts/swayidle.sh
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Edit /etc/elogind/logind.conf and change these lines:
|
||||||
|
# HandleLidSwitch=suspend -> HandleLidSwitch=lock
|
||||||
|
# HandleLidSwitchExternalPower=suspend -> HandleLidSwitchExternalPower=lock
|
||||||
|
|
||||||
|
swayidle -w \
|
||||||
|
timeout 300 "$HOME/.scripts/swaylock.sh" \
|
||||||
|
timeout 360 'hyprctl dispatch dpms off' \
|
||||||
|
resume 'hyprctl dispatch dpms on' \
|
||||||
|
before-sleep "$HOME/.scripts/swaylock.sh" \
|
||||||
|
lock "$HOME/.scripts/swaylock.sh"
|
66
.scripts/swaylock.sh
Executable file
|
@ -0,0 +1,66 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
source "$HOME/.config/hypr/colors.sh"
|
||||||
|
|
||||||
|
options=(
|
||||||
|
--daemonize
|
||||||
|
--font Hack
|
||||||
|
--indicator-caps-lock
|
||||||
|
--indicator-radius 100
|
||||||
|
--indicator-thickness 7
|
||||||
|
--text-color "$foreground"
|
||||||
|
--text-caps-lock-color "$foreground"
|
||||||
|
--text-ver-color "$foreground"
|
||||||
|
--text-wrong-color "$foreground"
|
||||||
|
--text-clear-color "$disabled"
|
||||||
|
--ring-color "$accent1"
|
||||||
|
--ring-caps-lock-color "$accent2"
|
||||||
|
--ring-ver-color "$good"
|
||||||
|
--ring-wrong-color "$bad"
|
||||||
|
--ring-clear-color "$disabled"
|
||||||
|
--key-hl-color "$foreground"
|
||||||
|
--bs-hl-color "$disabled"
|
||||||
|
--caps-lock-key-hl-color "$foreground"
|
||||||
|
--caps-lock-bs-hl-color "$disabled2"
|
||||||
|
--separator-color 00000000
|
||||||
|
--line-color 00000000
|
||||||
|
--line-caps-lock-color 00000000
|
||||||
|
--line-ver-color 00000000
|
||||||
|
--line-wrong-color 00000000
|
||||||
|
--line-clear-color 00000000
|
||||||
|
--inside-color 00000000
|
||||||
|
--inside-caps-lock-color 00000000
|
||||||
|
--inside-ver-color 00000000
|
||||||
|
--inside-wrong-color 00000000
|
||||||
|
--inside-clear-color 00000000
|
||||||
|
--separator-color 00000000
|
||||||
|
)
|
||||||
|
|
||||||
|
if swaylock --help 2>&1 | grep -qe '--screenshots'; then
|
||||||
|
options+=(
|
||||||
|
--disable-caps-lock-text
|
||||||
|
--indicator
|
||||||
|
--clock
|
||||||
|
--screenshots
|
||||||
|
--effect-blur 7x5
|
||||||
|
--effect-vignette 0.5:0.5
|
||||||
|
--grace 0
|
||||||
|
--fade-in 0.2
|
||||||
|
)
|
||||||
|
else
|
||||||
|
options+=(
|
||||||
|
--show-failed-attempts
|
||||||
|
--indicator-idle-visible
|
||||||
|
--image "$HOME/.cache/wallpaper-blurred.jpg"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if swaylock -v | grep -q fprintd; then
|
||||||
|
options+=(
|
||||||
|
--fingerprint
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
swaylock "${options[@]}"
|
||||||
|
|
||||||
|
sw -r
|
13
.scripts/toggle-weeb-mode.sh
Executable file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
source "$HOME/.cache/wal/colors.sh"
|
||||||
|
|
||||||
|
if grep -q 1 "$HOME/.cache/weeb-mode"; then
|
||||||
|
wallpaper='/usr/share/hyprland/wall_2K.png'
|
||||||
|
echo 0 > "$HOME/.cache/weeb-mode"
|
||||||
|
else
|
||||||
|
echo 1 > "$HOME/.cache/weeb-mode"
|
||||||
|
fi
|
||||||
|
|
||||||
|
killall -9 swaybg
|
||||||
|
hyprctl dispatch exec "swaybg -i \"$wallpaper\"" > /dev/null
|
19
.scripts/waybar-cpu-temp.sh
Executable file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
declare -i hwmon_nr=$(( $(cat -n /sys/class/hwmon/hwmon*/name | grep -oP '\d+\s+k10temp' | grep -oP '^\d+') - 1))
|
||||||
|
|
||||||
|
temp=$(cat /sys/class/hwmon/hwmon$hwmon_nr/temp1_input | cut -c -2)
|
||||||
|
|
||||||
|
if [[ $temp -lt 45 ]]; then
|
||||||
|
class=low
|
||||||
|
elif [[ $temp -lt 70 ]]; then
|
||||||
|
class=normal
|
||||||
|
elif [[ $temp -lt 80 ]]; then
|
||||||
|
class=high
|
||||||
|
else
|
||||||
|
class=alert
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
{"text": "$temp°C", "alt": "$class", "tooltip": "$temp°C", "class": "$class", "percentage": ""}
|
||||||
|
EOF
|
24
.scripts/waybar-gpu-temp.sh
Executable file
|
@ -0,0 +1,24 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
declare -i hwmon_nr_amd=$(( $(cat -n /sys/class/hwmon/hwmon*/name | grep 'amdgpu' | grep -oP '\d+') - 1))
|
||||||
|
|
||||||
|
if (( $hwmon_nr_amd >= 0 )); then
|
||||||
|
hwmon_path="/sys/class/hwmon/hwmon$hwmon_nr_amd"
|
||||||
|
temp=$(head -c -4 "$hwmon_path/temp1_input")
|
||||||
|
elif which nvidia-smi &> /dev/null; then
|
||||||
|
temp=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $temp -lt 45 ]]; then
|
||||||
|
class=low
|
||||||
|
elif [[ $temp -lt 70 ]]; then
|
||||||
|
class=normal
|
||||||
|
elif [[ $temp -lt 80 ]]; then
|
||||||
|
class=high
|
||||||
|
else
|
||||||
|
class=alert
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
{"text": "$temp°C", "alt": "$class", "tooltip": "$temp°C", "class": "$class", "percentage": ""}
|
||||||
|
EOF
|
25
.scripts/waybar-gpu-usage.sh
Executable file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
declare -i hwmon_nr_amd=$(( $(cat -n /sys/class/hwmon/hwmon*/name | grep 'amdgpu' | grep -oP '\d+') - 1))
|
||||||
|
|
||||||
|
if (( $hwmon_nr_amd >= 0 )); then
|
||||||
|
hwmon_path="/sys/class/hwmon/hwmon$hwmon_nr_amd"
|
||||||
|
usage=$(cat "$hwmon_path/device/gpu_busy_percent")
|
||||||
|
vram=$(awk '{ print int($1/1024/1024) }' "$hwmon_path/device/mem_info_vram_used")
|
||||||
|
power=$(head -c -7 "$hwmon_path/power1_average")
|
||||||
|
elif which nvidia-smi &> /dev/null; then
|
||||||
|
usage=$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits)
|
||||||
|
vram=$(nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits)
|
||||||
|
power=$(nvidia-smi --query-gpu=power.draw --format=csv,noheader,nounits | awk '{ print int($1) }')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $vram -ge 1024 ]]; then
|
||||||
|
vram=$vram/1024
|
||||||
|
vram_unit="GiB"
|
||||||
|
else
|
||||||
|
vram_unit="MiB"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
{"text": "$usage%", "alt": "", "tooltip": "GPU usage: $usage%\nVRAM usage: ${vram}$vram_unit\nPower draw: ${power}W", "class": "", "percentage": ""}
|
||||||
|
EOF
|
15
.vimrc
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
set term=kitty
|
||||||
|
|
||||||
|
set number
|
||||||
|
filetype indent on
|
||||||
|
set autoindent
|
||||||
|
|
||||||
|
set tabstop=4
|
||||||
|
set shiftwidth=4
|
||||||
|
|
||||||
|
filetype plugin on
|
||||||
|
syntax on
|
||||||
|
|
||||||
|
set mouse=a
|
||||||
|
|
||||||
|
set clipboard=unnamedplus
|
14
.zaliases
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
if grep -q '^NAME="Artix Linux"$' /etc/os-release; then
|
||||||
|
alias reboot="sudo reboot"
|
||||||
|
alias poweroff="sudo poweroff"
|
||||||
|
fi
|
||||||
|
|
||||||
|
alias ssh="TERM=xterm-256color ssh"
|
||||||
|
#alias ssh="TERM=xterm-256color kitty +kitten ssh"
|
||||||
|
alias ff="fastfetch"
|
||||||
|
alias sc="shellcheck -s bash"
|
||||||
|
alias ip="ip --color=auto"
|
||||||
|
|
||||||
|
# git init --bare $HOME/.dotfiles
|
||||||
|
# cfg config --local status.showUntrackedFiles no
|
||||||
|
alias cfg="/usr/bin/git --git-dir=$HOME/.dotfiles --work-tree=$HOME"
|
26
.zprofile
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
typeset -U path PATH
|
||||||
|
path=(~/.local/bin $path)
|
||||||
|
export PATH
|
||||||
|
|
||||||
|
# SSH Agent
|
||||||
|
if [[ ! -f "$XDG_RUNTIME_DIR/ssh-agent.env" ]]; then
|
||||||
|
pkill -u "$USER" -9 ssh-agent
|
||||||
|
ssh-agent > "$XDG_RUNTIME_DIR/ssh-agent.env"
|
||||||
|
fi
|
||||||
|
source "$XDG_RUNTIME_DIR/ssh-agent.env" > /dev/null
|
||||||
|
|
||||||
|
# If NVIDIA, set env vars
|
||||||
|
if ! printenv SSH_TTY &> /dev/null && lspci | grep -q 'VGA.*NVIDIA'; then
|
||||||
|
export GBM_BACKEND=nvidia-drm
|
||||||
|
export __GLX_VENDOR_LIBRARY_NAME=nvidia
|
||||||
|
export LIBVA_DRIVER_NAME=nvidia
|
||||||
|
export __GL_GSYNC_ALLOWED=1
|
||||||
|
export __GL_VRR_ALLOWED=0
|
||||||
|
export WLR_NO_HARDWARE_CURSORS=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Restore Wal colors if not SSH session
|
||||||
|
printenv SSH_TTY &> /dev/null || wal -R
|
||||||
|
|
||||||
|
# Autostart Hyprland on TTY1
|
||||||
|
[[ "$XDG_VTNR" -eq 1 ]] && exec dbus-run-session Hyprland
|
117
.zshrc
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
# Path to your oh-my-zsh installation.
|
||||||
|
ZSH=/usr/share/oh-my-zsh/
|
||||||
|
|
||||||
|
# Uncomment the following line to use case-sensitive completion.
|
||||||
|
# CASE_SENSITIVE="true"
|
||||||
|
|
||||||
|
# Uncomment the following line to use hyphen-insensitive completion.
|
||||||
|
# Case-sensitive completion must be off. _ and - will be interchangeable.
|
||||||
|
HYPHEN_INSENSITIVE="true"
|
||||||
|
|
||||||
|
# Uncomment the following line to enable command auto-correction.
|
||||||
|
ENABLE_CORRECTION="true"
|
||||||
|
|
||||||
|
plugins=(git-prompt sudo zsh-autosuggestions zsh-shift-select)
|
||||||
|
|
||||||
|
ZSH_CACHE_DIR=$HOME/.cache/oh-my-zsh
|
||||||
|
if [[ ! -d $ZSH_CACHE_DIR ]]; then
|
||||||
|
mkdir $ZSH_CACHE_DIR
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If not running interactively, don't do anything
|
||||||
|
[[ $- != *i* ]] && exit
|
||||||
|
|
||||||
|
source $HOME/.zaliases
|
||||||
|
|
||||||
|
# Disable bell
|
||||||
|
unsetopt autocd beep
|
||||||
|
|
||||||
|
# Enable case-insensitive auto completion
|
||||||
|
autoload -Uz compinit && compinit
|
||||||
|
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}'
|
||||||
|
|
||||||
|
# Set prompt
|
||||||
|
PROMPT="%B%F{198}%n%F{015}@%F{014}%m%F{015}:%F{198}%~%F{015}> %b%f"
|
||||||
|
#autoload -Uz promptinit && promptinit
|
||||||
|
|
||||||
|
# History settings
|
||||||
|
HISTFILE=~/.zhistory
|
||||||
|
HISTSIZE=10000
|
||||||
|
SAVEHIST=10000
|
||||||
|
setopt appendhistory
|
||||||
|
setopt extended_history
|
||||||
|
setopt share_history
|
||||||
|
setopt inc_append_history
|
||||||
|
setopt hist_find_no_dups
|
||||||
|
setopt hist_reduce_blanks
|
||||||
|
|
||||||
|
# Enable case-insensitive globbing
|
||||||
|
setopt no_case_glob
|
||||||
|
setopt glob_complete
|
||||||
|
|
||||||
|
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
|
||||||
|
zle -N up-line-or-beginning-search
|
||||||
|
zle -N down-line-or-beginning-search
|
||||||
|
|
||||||
|
# Import colorscheme from 'wal' asynchronously
|
||||||
|
# & # Run the process in the background.
|
||||||
|
# # ( ) # Hide shell job control messages.
|
||||||
|
# # Not supported in the "fish" shell.
|
||||||
|
(cat ~/.cache/wal/sequences &)
|
||||||
|
# # To add support for TTYs this line can be optionally added.
|
||||||
|
source ~/.cache/wal/colors-tty.sh
|
||||||
|
|
||||||
|
# create a zkbd compatible hash;
|
||||||
|
# to add other keys to this hash, see: man 5 terminfo
|
||||||
|
typeset -g -A key
|
||||||
|
|
||||||
|
key[Home]="${terminfo[khome]}"
|
||||||
|
key[End]="${terminfo[kend]}"
|
||||||
|
key[Insert]="${terminfo[kich1]}"
|
||||||
|
key[Backspace]="${terminfo[kbs]}"
|
||||||
|
key[Delete]="${terminfo[kdch1]}"
|
||||||
|
key[Up]="${terminfo[kcuu1]}"
|
||||||
|
key[Down]="${terminfo[kcud1]}"
|
||||||
|
key[Left]="${terminfo[kcub1]}"
|
||||||
|
key[Right]="${terminfo[kcuf1]}"
|
||||||
|
key[PageUp]="${terminfo[kpp]}"
|
||||||
|
key[PageDown]="${terminfo[knp]}"
|
||||||
|
key[Shift-Tab]="${terminfo[kcbt]}"
|
||||||
|
key[Control-Left]="${terminfo[kLFT5]}"
|
||||||
|
key[Control-Right]="${terminfo[kRIT5]}"
|
||||||
|
key[Control-Backspace]="^H"
|
||||||
|
key[Control-Delete]="^5"
|
||||||
|
|
||||||
|
# Setup key accordingly
|
||||||
|
bindkey -- "${key[Home]}" beginning-of-line
|
||||||
|
bindkey -- "${key[End]}" end-of-line
|
||||||
|
bindkey -- "${key[Insert]}" overwrite-mode
|
||||||
|
bindkey -- "${key[Backspace]}" backward-delete-char
|
||||||
|
bindkey -- "${key[Delete]}" delete-char
|
||||||
|
bindkey -- "${key[Up]}" up-line-or-history
|
||||||
|
bindkey -- "${key[Down]}" down-line-or-history
|
||||||
|
bindkey -- "${key[Left]}" backward-char
|
||||||
|
bindkey -- "${key[Right]}" forward-char
|
||||||
|
bindkey -- "${key[PageUp]}" beginning-of-buffer-or-history
|
||||||
|
bindkey -- "${key[PageDown]}" end-of-buffer-or-history
|
||||||
|
bindkey -- "${key[Shift-Tab]}" reverse-menu-complete
|
||||||
|
bindkey -- "${key[Up]}" up-line-or-beginning-search
|
||||||
|
bindkey -- "${key[Down]}" down-line-or-beginning-search
|
||||||
|
bindkey -- "${key[Control-Left]}" backward-word
|
||||||
|
bindkey -- "${key[Control-Right]}" forward-word
|
||||||
|
bindkey -- "${key[Control-Delete]}" kill-word
|
||||||
|
bindkey -M emacs "${key[Control-Backspace]}" backward-kill-word
|
||||||
|
bindkey -M viins "${key[Control-Backspace]}" backward-kill-word
|
||||||
|
bindkey -M vicmd "${key[Control-Backspace]}" backward-kill-word
|
||||||
|
|
||||||
|
# Finally, make sure the terminal is in application mode, when zle is
|
||||||
|
# active. Only then are the values from $terminfo valid.
|
||||||
|
if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then
|
||||||
|
autoload -Uz add-zle-hook-widget
|
||||||
|
function zle_application_mode_start { echoti smkx }
|
||||||
|
function zle_application_mode_stop { echoti rmkx }
|
||||||
|
add-zle-hook-widget -Uz zle-line-init zle_application_mode_start
|
||||||
|
add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop
|
||||||
|
fi
|
||||||
|
|
||||||
|
source $ZSH/oh-my-zsh.sh
|