updates
This commit is contained in:
parent
b1753d3de3
commit
7eb008af14
347 changed files with 49 additions and 20924 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
https://github.com/gaurav210233/simple-hyprland/
|
https://github.com/gaurav210233/simple-hyprland/
|
||||||
https://alexforsale.github.io/dotfiles-hyprland/
|
https://alexforsale.github.io/dotfiles-hyprland/
|
||||||
|
|
||||||
|
https://config.phundrak.com/hyprland.html#autolaunch-of-programs
|
||||||
|
|
|
||||||
|
|
@ -33,21 +33,27 @@ exec-once=swaync
|
||||||
exec-once=/usr/lib/polkit-kde-authentication-agent-1
|
exec-once=/usr/lib/polkit-kde-authentication-agent-1
|
||||||
#exec-once=/usr/lib/xfce-polkit/xfce-polkit
|
#exec-once=/usr/lib/xfce-polkit/xfce-polkit
|
||||||
#exec-once = systemctl --user start hyprpolkitagent
|
#exec-once = systemctl --user start hyprpolkitagent
|
||||||
exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
exec-once=systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
||||||
exec-once=hyprpaper
|
exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=Hyprland
|
||||||
exec-once=~/.local/bin/hyprpaperchanger
|
# exec-once=hyprpaper
|
||||||
|
# exec-once=~/.local/bin/hyprpaperchanger
|
||||||
|
exec-once=wpaperd
|
||||||
exec-once=hypridle
|
exec-once=hypridle
|
||||||
exec-once=waybar
|
exec-once=waybar
|
||||||
exec-once=./xdg-desktop-portal.sh
|
exec-once=./xdg-desktop-portal.sh
|
||||||
exec-once=kanshi
|
exec-once=kanshi
|
||||||
|
exec-once=wlsunset -l 45.424721 -L -75.695000
|
||||||
|
exec-once=/usr/lib/kdeconnectd
|
||||||
|
exec-once=kdeconnect-indicator
|
||||||
|
exec-once=blueman-applet
|
||||||
##exec-once=nwg-dock-hyprland -i 32 -w 5 -mb 10 -ml 10 -mr 10 -x -c "tofi-drun --drun-launch=true" -lp start -f -a start
|
##exec-once=nwg-dock-hyprland -i 32 -w 5 -mb 10 -ml 10 -mr 10 -x -c "tofi-drun --drun-launch=true" -lp start -f -a start
|
||||||
|
|
||||||
### ENVIRONMENT VARIABLES ###
|
### ENVIRONMENT VARIABLES ###
|
||||||
|
|
||||||
env = XCURSOR_SIZE,24
|
env = XCURSOR_SIZE,24
|
||||||
env = XCURSOR_THEME,Bibata-Modern-Classic
|
#env = XCURSOR_THEME,Bibata-Modern-Classic
|
||||||
env = HYPRCURSOR_SIZE,24
|
env = HYPRCURSOR_SIZE,24
|
||||||
env = HYPRCURSOR_THEME,Bibata-Modern-Classic
|
#env = HYPRCURSOR_THEME,Bibata-Modern-Classic
|
||||||
env = XDG_MENU_PREFIX,arch-
|
env = XDG_MENU_PREFIX,arch-
|
||||||
|
|
||||||
# Firefox
|
# Firefox
|
||||||
|
|
@ -66,15 +72,15 @@ env = QT_QPA_PLATFORM,wayland
|
||||||
env = QT_QPA_PLATFORMTHEME,qt6ct
|
env = QT_QPA_PLATFORMTHEME,qt6ct
|
||||||
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
|
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
|
||||||
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
|
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
|
||||||
#env = QT_STYLE_OVERRIDE,kvantum
|
env = QT_STYLE_OVERRIDE,kvantum
|
||||||
|
|
||||||
# Toolkit Backend Variables
|
# Toolkit Backend Variables
|
||||||
#env = GDK_BACKEND,wayland,x11,*
|
env = GDK_BACKEND,wayland,x11,*
|
||||||
env = SDL_VIDEODRIVER,wayland
|
env = SDL_VIDEODRIVER,wayland
|
||||||
env = CLUTTER_BACKEND,wayland
|
env = CLUTTER_BACKEND,wayland
|
||||||
|
|
||||||
env = GTK_THEME,Breeze-Dark
|
#env = GTK_THEME,Breeze-Dark
|
||||||
env = GTK2_RC_FILES,/usr/share/themes/Breeze-Dark/gtk-2.0
|
#env = GTK2_RC_FILES,/usr/share/themes/Breeze-Dark/gtk-2.0
|
||||||
|
|
||||||
# XDG Specifications
|
# XDG Specifications
|
||||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
env = XDG_CURRENT_DESKTOP,Hyprland
|
||||||
|
|
@ -103,10 +109,12 @@ decoration {
|
||||||
active_opacity = 1.0
|
active_opacity = 1.0
|
||||||
inactive_opacity = 0.9
|
inactive_opacity = 0.9
|
||||||
|
|
||||||
drop_shadow = true
|
shadow {
|
||||||
shadow_range = 4
|
enabled = true
|
||||||
shadow_render_power = 3
|
range = 4
|
||||||
col.shadow = rgba(1a1a1aee)
|
render_power = 3
|
||||||
|
color = rgba(1a1a1aee)
|
||||||
|
}
|
||||||
|
|
||||||
blur {
|
blur {
|
||||||
enabled = true
|
enabled = true
|
||||||
|
|
@ -121,14 +129,26 @@ decoration {
|
||||||
animations {
|
animations {
|
||||||
enabled = true
|
enabled = true
|
||||||
|
|
||||||
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
# bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||||
|
#
|
||||||
animation = windows, 1, 7, myBezier
|
# animation = windows, 1, 7, myBezier
|
||||||
animation = windowsOut, 1, 7, default, popin 80%
|
# animation = windowsOut, 1, 7, default, popin 80%
|
||||||
animation = border, 1, 10, default
|
# animation = border, 1, 10, default
|
||||||
animation = borderangle, 1, 8, default
|
# animation = borderangle, 1, 8, default
|
||||||
animation = fade, 1, 7, default
|
# animation = fade, 1, 7, default
|
||||||
animation = workspaces, 1, 6, default
|
# animation = workspaces, 1, 6, default
|
||||||
|
bezier = wind, 0.05, 0.9, 0.1, 1.05
|
||||||
|
bezier = winIn, 0.1, 1.1, 0.1, 1.1
|
||||||
|
bezier = winOut, 0.3, -0.3, 0, 1
|
||||||
|
bezier = liner, 1, 1, 1, 1
|
||||||
|
animation = windows, 1, 6, wind, slide
|
||||||
|
animation = windowsIn, 1, 6, winIn, slide
|
||||||
|
animation = windowsOut, 1, 5, winOut, slide
|
||||||
|
animation = windowsMove, 1, 5, wind, slide
|
||||||
|
animation = border, 1, 1, liner
|
||||||
|
animation = borderangle, 1, 30, liner, loop
|
||||||
|
animation = fade, 1, 10, default
|
||||||
|
animation = workspaces, 1, 5, wind
|
||||||
}
|
}
|
||||||
|
|
||||||
dwindle {
|
dwindle {
|
||||||
|
|
@ -143,8 +163,10 @@ master {
|
||||||
}
|
}
|
||||||
|
|
||||||
misc {
|
misc {
|
||||||
force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
|
force_default_wallpaper = 0
|
||||||
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
|
disable_hyprland_logo = true
|
||||||
|
disable_splash_rendering = true
|
||||||
|
vrr = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -188,7 +210,7 @@ bindd = $mainMod, C, Launch Visual Studio Code, exec, $editor
|
||||||
bindd = $mainMod, N, Launch Neovim, exec, $editor-alt
|
bindd = $mainMod, N, Launch Neovim, exec, $editor-alt
|
||||||
bindd = $mainMod, Q, Kill active window, killactive,
|
bindd = $mainMod, Q, Kill active window, killactive,
|
||||||
bindd = $mainMod, M, Exit Hyprland, exit,
|
bindd = $mainMod, M, Exit Hyprland, exit,
|
||||||
bindd = $mainMod, E, Launch the file manager, exec, $fileManager
|
bindd = $mainMod, E, Launch the file manager, exec, XDG_CURRENT_DESKTOP=kde $fileManager
|
||||||
bindd = $mainMod, W, Toggle floating, togglefloating,
|
bindd = $mainMod, W, Toggle floating, togglefloating,
|
||||||
bindd = $mainMod, space, Launch menu, exec, $menu
|
bindd = $mainMod, space, Launch menu, exec, $menu
|
||||||
bindd = $mainMod, F, Toggle fullscreen, fullscreen
|
bindd = $mainMod, F, Toggle fullscreen, fullscreen
|
||||||
|
|
@ -202,6 +224,7 @@ bindd = $mainMod, S, Launch menu to modify/create script, exec, autoscriptmenu
|
||||||
bindd = $mainMod, period, Launch the Emoji Picker, exec, jome -d | wl-copy #Emojipicker + clipboard copy
|
bindd = $mainMod, period, Launch the Emoji Picker, exec, jome -d | wl-copy #Emojipicker + clipboard copy
|
||||||
|
|
||||||
bindd = $mainMod, V, Clipboard History, exec, cliphist list | tofi -c ~/.config/tofi/configV | cliphist decode | wl-copy
|
bindd = $mainMod, V, Clipboard History, exec, cliphist list | tofi -c ~/.config/tofi/configV | cliphist decode | wl-copy
|
||||||
|
bindd = $mainMod, R, Launch Remmina, exec, [floating] remmina
|
||||||
|
|
||||||
# Move focus with mainMod + arrow keys
|
# Move focus with mainMod + arrow keys
|
||||||
bind = $mainMod, left, movefocus, l
|
bind = $mainMod, left, movefocus, l
|
||||||
|
|
|
||||||
|
|
@ -1,293 +0,0 @@
|
||||||
# __ __ __
|
|
||||||
# / / __ _____ ____/ /__ ____ ___/ /
|
|
||||||
# / _ \/ // / _ \/ __/ / _ `/ _ \/ _ /
|
|
||||||
# /_//_/\_, / .__/_/ /_/\_,_/_//_/\_,_/
|
|
||||||
# /___/_/
|
|
||||||
|
|
||||||
### MONITORS ###
|
|
||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Monitors/
|
|
||||||
monitor=,preferred,auto,1
|
|
||||||
|
|
||||||
|
|
||||||
### MY PROGRAMS ###
|
|
||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Keywords/
|
|
||||||
|
|
||||||
# Set programs that you use
|
|
||||||
$terminal = kitty
|
|
||||||
$fileManager = dolphin
|
|
||||||
#$menu = wofi --show drun
|
|
||||||
$menu = tofi-drun -c ~/.config/tofi/configA --drun-launch=true
|
|
||||||
$browser = librewolf
|
|
||||||
$editor = code
|
|
||||||
$editor-alt = nvim
|
|
||||||
$colorPicker = hyprpicker
|
|
||||||
|
|
||||||
|
|
||||||
### AUTOSTART ###
|
|
||||||
|
|
||||||
exec-once=wl-paste --type text --watch cliphist store # clipboard
|
|
||||||
exec-once=wl-paste --type image --watch cliphist store
|
|
||||||
exec-once=swaync
|
|
||||||
#exec-once=/usr/lib/polkit-kde-authentication-agent-1
|
|
||||||
#exec-once=/usr/lib/xfce-polkit/xfce-polkit
|
|
||||||
exec-once = systemctl --user start hyprpolkitagent
|
|
||||||
exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
|
||||||
exec-once=hypridle
|
|
||||||
exec-once=waybar
|
|
||||||
exec-once=./xdg-desktop-portal.sh
|
|
||||||
##exec-once=nwg-dock-hyprland -i 32 -w 5 -mb 10 -ml 10 -mr 10 -x -c "tofi-drun --drun-launch=true" -lp start -f -a start
|
|
||||||
|
|
||||||
### ENVIRONMENT VARIABLES ###
|
|
||||||
|
|
||||||
env = XCURSOR_SIZE,24
|
|
||||||
env = HYPRCURSOR_SIZE,24
|
|
||||||
env = XDG_MENU_PREFIX,arch-
|
|
||||||
|
|
||||||
# Firefox
|
|
||||||
env = MOZ_ENABLE_WAYLAND,1
|
|
||||||
|
|
||||||
# Nvidia
|
|
||||||
env = LIBVA_DRIVER_NAME,nvidia
|
|
||||||
env = XDG_SESSION_TYPE,wayland
|
|
||||||
env = GBM_BACKEND,nvidia-drm
|
|
||||||
env = __GLX_VENDOR_LIBRARY_NAME,nvidia # remove if firefox crashes
|
|
||||||
env = NVD_BACKEND,direct
|
|
||||||
env = ELECTRON_OZONE_PLATFORM_HINT,auto
|
|
||||||
|
|
||||||
# QT
|
|
||||||
env = QT_QPA_PLATFORM,wayland
|
|
||||||
env = QT_QPA_PLATFORMTHEME,qt5ct
|
|
||||||
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
|
|
||||||
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
|
|
||||||
#env = QT_STYLE_OVERRIDE,kvantum
|
|
||||||
|
|
||||||
# Toolkit Backend Variables
|
|
||||||
env = GDK_BACKEND,wayland,x11,*
|
|
||||||
env = SDL_VIDEODRIVER,wayland
|
|
||||||
env = CLUTTER_BACKEND,wayland
|
|
||||||
|
|
||||||
# XDG Specifications
|
|
||||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
|
||||||
env = XDG_SESSION_TYPE,wayland
|
|
||||||
env = XDG_SESSION_DESKTOP,Hyprland
|
|
||||||
|
|
||||||
### LOOK AND FEEL ###
|
|
||||||
|
|
||||||
general {
|
|
||||||
gaps_in = 5
|
|
||||||
gaps_out = 5
|
|
||||||
border_size = 2
|
|
||||||
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
|
|
||||||
col.inactive_border = rgba(595959aa)
|
|
||||||
allow_tearing = false
|
|
||||||
#layout = dwindle
|
|
||||||
layout = master
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#decoration
|
|
||||||
decoration {
|
|
||||||
rounding = 10
|
|
||||||
|
|
||||||
active_opacity = 1.0
|
|
||||||
inactive_opacity = 0.9
|
|
||||||
|
|
||||||
drop_shadow = true
|
|
||||||
shadow_range = 4
|
|
||||||
shadow_render_power = 3
|
|
||||||
col.shadow = rgba(1a1a1aee)
|
|
||||||
|
|
||||||
blur {
|
|
||||||
enabled = true
|
|
||||||
size = 3
|
|
||||||
passes = 3
|
|
||||||
new_optimizations = true
|
|
||||||
vibrancy = 0.1696
|
|
||||||
ignore_opacity = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
animations {
|
|
||||||
enabled = true
|
|
||||||
|
|
||||||
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 = borderangle, 1, 8, default
|
|
||||||
animation = fade, 1, 7, default
|
|
||||||
animation = workspaces, 1, 6, default
|
|
||||||
}
|
|
||||||
|
|
||||||
dwindle {
|
|
||||||
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
|
||||||
preserve_split = true # You probably want this
|
|
||||||
}
|
|
||||||
|
|
||||||
master {
|
|
||||||
new_status = master
|
|
||||||
}
|
|
||||||
|
|
||||||
misc {
|
|
||||||
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
|
||||||
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
### INPUT ###
|
|
||||||
|
|
||||||
input {
|
|
||||||
kb_layout = us
|
|
||||||
kb_variant =
|
|
||||||
kb_model =
|
|
||||||
kb_options =
|
|
||||||
kb_rules =
|
|
||||||
|
|
||||||
follow_mouse = 1
|
|
||||||
|
|
||||||
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
|
||||||
|
|
||||||
touchpad {
|
|
||||||
natural_scroll = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gestures {
|
|
||||||
workspace_swipe = false
|
|
||||||
}
|
|
||||||
|
|
||||||
device {
|
|
||||||
name = epic-mouse-v1
|
|
||||||
sensitivity = -0.5
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
### KEYBINDINGS ###
|
|
||||||
|
|
||||||
$mainMod = SUPER # Sets "Windows" key as main modifier
|
|
||||||
|
|
||||||
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
|
||||||
bindd = $mainMod, return, Launch a terminal, exec, $terminal bash --rcfile ~/.dotfiles/bash/.bashrc
|
|
||||||
bindd = $mainMod, B, Launch the default browser, exec, $browser
|
|
||||||
bindd = $mainMod, C, Launch Visual Studio Code, exec, $editor
|
|
||||||
bindd = $mainMod, N, Launch Neovim, exec, $editor-alt
|
|
||||||
bindd = $mainMod, Q, Kill active window, killactive,
|
|
||||||
bindd = $mainMod, M, Exit Hyprland, exit,
|
|
||||||
bindd = $mainMod, E, Launch the file manager, exec, $fileManager
|
|
||||||
bindd = $mainMod, W, Toggle floating, togglefloating,
|
|
||||||
bindd = $mainMod, space, Launch menu, exec, $menu
|
|
||||||
bind = $mainMod, P, pseudo, # dwindle
|
|
||||||
bind = $mainMod, J, togglesplit, # dwindle
|
|
||||||
|
|
||||||
bindd = $mainMod, S, Launch menu to modify/create script, exec, autoscriptmenu
|
|
||||||
|
|
||||||
bindd = $mainMod, period, Launch the Emoji Picker, exec, jome -d | wl-copy #Emojipicker + clipboard copy
|
|
||||||
|
|
||||||
bindd = $mainMod, V, Clipboard History, exec, cliphist list | tofi -c ~/.config/tofi/configV | cliphist decode | wl-copy
|
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|
||||||
# Switch workspaces with mainMod + [0-9]
|
|
||||||
bind = $mainMod, 1, workspace, 1
|
|
||||||
bind = $mainMod, 2, workspace, 2
|
|
||||||
bind = $mainMod, 3, workspace, 3
|
|
||||||
bind = $mainMod, 4, workspace, 4
|
|
||||||
bind = $mainMod, 5, workspace, 5
|
|
||||||
bind = $mainMod, 6, workspace, 6
|
|
||||||
bind = $mainMod, 7, workspace, 7
|
|
||||||
bind = $mainMod, 8, workspace, 8
|
|
||||||
bind = $mainMod, 9, workspace, 9
|
|
||||||
bind = $mainMod, 0, workspace, 10
|
|
||||||
|
|
||||||
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
|
||||||
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
|
||||||
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
|
||||||
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
|
||||||
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
|
||||||
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
|
||||||
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
|
||||||
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
|
||||||
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
|
||||||
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
|
||||||
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
|
||||||
|
|
||||||
# Example special workspace (scratchpad)
|
|
||||||
#bind = $mainMod, S, togglespecialworkspace, magic
|
|
||||||
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
|
|
||||||
|
|
||||||
# Scroll through existing workspaces with mainMod + scroll
|
|
||||||
bind = $mainMod, mouse_down, workspace, e+1
|
|
||||||
bind = $mainMod, mouse_up, workspace, e-1
|
|
||||||
|
|
||||||
# Move/resize windows with mainMod + LMB/RMB and dragging
|
|
||||||
bindm = $mainMod, mouse:272, movewindow
|
|
||||||
bindm = $mainMod, mouse:273, resizewindow
|
|
||||||
|
|
||||||
# Color picker
|
|
||||||
bindd = $mainMod, P, Color Picker, exec, $colorPicker | wl-copy
|
|
||||||
|
|
||||||
# Screen locking
|
|
||||||
bindd = $mainMod, L, Lock the screen, exec, hyprlock
|
|
||||||
|
|
||||||
# Logout
|
|
||||||
bindd = $mainMod, Escape, Session logout, exec, wlogout
|
|
||||||
|
|
||||||
# Waybar
|
|
||||||
bindd = CTRL, Escape, Toggle waybar, exec, killall waybar || waybar
|
|
||||||
|
|
||||||
# Screenshot
|
|
||||||
|
|
||||||
bindd = , Print, Screenshot entire screen, exec, grimblast --notify copysave screen
|
|
||||||
bindd = $mainMod, Print, Screenshot active window, exec, grimblast --notify copysave active
|
|
||||||
bindd = $mainMod Alt, Print, Screenshot selected area, exec, grimblast --notify copysave area
|
|
||||||
|
|
||||||
# Laptop multimedia keys for volume and LCD brightness
|
|
||||||
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
|
|
||||||
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
|
||||||
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
|
||||||
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
|
||||||
#bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
|
|
||||||
#bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
|
|
||||||
|
|
||||||
# Requires playerctl
|
|
||||||
bindl = , XF86AudioNext, exec, playerctl next
|
|
||||||
bindl = , XF86AudioPause, exec, playerctl play-pause
|
|
||||||
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
|
||||||
bindl = , XF86AudioPrev, exec, playerctl previous
|
|
||||||
|
|
||||||
##############################
|
|
||||||
### WINDOWS AND WORKSPACES ###
|
|
||||||
##############################
|
|
||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
|
||||||
|
|
||||||
# Example windowrule v1
|
|
||||||
# windowrule = float, ^(kitty)$
|
|
||||||
|
|
||||||
# Example windowrule v2
|
|
||||||
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
|
|
||||||
|
|
||||||
# Ignore maximize requests from apps. You'll probably like this.
|
|
||||||
windowrulev2 = suppressevent maximize, class:.*
|
|
||||||
|
|
||||||
# Fix some dragging issues with XWayland
|
|
||||||
windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
|
||||||
windowrulev2 = float, class:(LibreWolf), title:(Picture-in-Picture)
|
|
||||||
windowrulev2 = move 100%-w-20 50, title:(Picture-in-Picture)
|
|
||||||
windowrulev2 = size 320 180, title:(Picture-in-Picture)
|
|
||||||
windowrulev2 = pin, title:(Picture-in-Picture)
|
|
||||||
|
|
||||||
# windowrulev2 = opacity 0.80 0.80,class:^(kitty)$
|
|
||||||
|
|
||||||
windowrule = float,^(jome)$
|
|
||||||
|
|
||||||
layerrule = ignorezero,wofi
|
|
||||||
layerrule = ignorezero,swaync
|
|
||||||
layerrule = blur,swaync
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
Xcursor.theme: Bibata-Modern-Ice
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
"use strict";
|
|
||||||
import GLib from 'gi://GLib';
|
|
||||||
import App from 'resource:///com/github/Aylur/ags/app.js'
|
|
||||||
import userOptions from './modules/.configuration/user_options.js';
|
|
||||||
import Overview from './modules/overview/main.js';
|
|
||||||
|
|
||||||
const COMPILED_STYLE_DIR = `${GLib.get_user_config_dir()}/ags/user/`
|
|
||||||
|
|
||||||
async function applyStyle() {
|
|
||||||
|
|
||||||
App.resetCss();
|
|
||||||
App.applyCss(`${COMPILED_STYLE_DIR}/style.css`);
|
|
||||||
console.log('[LOG] Styles loaded')
|
|
||||||
}
|
|
||||||
applyStyle().catch(print);
|
|
||||||
|
|
||||||
const Windows = () => [
|
|
||||||
Overview()
|
|
||||||
];
|
|
||||||
const CLOSE_ANIM_TIME = 210;
|
|
||||||
App.config({
|
|
||||||
css: `${COMPILED_STYLE_DIR}/style.css`,
|
|
||||||
stackTraceOnError: true,
|
|
||||||
closeWindowDelay: {
|
|
||||||
'sideright': CLOSE_ANIM_TIME,
|
|
||||||
'sideleft': CLOSE_ANIM_TIME,
|
|
||||||
'osk': CLOSE_ANIM_TIME,
|
|
||||||
},
|
|
||||||
windows: Windows().flat(1),
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
@ -1,125 +0,0 @@
|
||||||
|
|
||||||
import userOverrides from '../../user_options.js';
|
|
||||||
|
|
||||||
// Defaults
|
|
||||||
let configOptions = {
|
|
||||||
// General stuff
|
|
||||||
'ai': {
|
|
||||||
'defaultGPTProvider': "openai",
|
|
||||||
'defaultTemperature': 0.9,
|
|
||||||
'enhancements': true,
|
|
||||||
'useHistory': true,
|
|
||||||
'writingCursor': " ...", // Warning: Using weird characters can mess up Markdown rendering
|
|
||||||
},
|
|
||||||
'animations': {
|
|
||||||
'choreographyDelay': 35,
|
|
||||||
'durationSmall': 110,
|
|
||||||
'durationLarge': 180,
|
|
||||||
},
|
|
||||||
'appearance': {
|
|
||||||
'keyboardUseFlag': false, // Use flag emoji instead of abbreviation letters
|
|
||||||
},
|
|
||||||
'apps': {
|
|
||||||
'imageViewer': "loupe",
|
|
||||||
'terminal': "foot", // This is only for shell actions
|
|
||||||
},
|
|
||||||
'battery': {
|
|
||||||
'low': 20,
|
|
||||||
'critical': 10,
|
|
||||||
},
|
|
||||||
'music': {
|
|
||||||
'preferredPlayer': "plasma-browser-integration",
|
|
||||||
},
|
|
||||||
'onScreenKeyboard': {
|
|
||||||
'layout': "qwerty_full", // See modules/onscreenkeyboard/onscreenkeyboard.js for available layouts
|
|
||||||
},
|
|
||||||
'overview': {
|
|
||||||
'scale': 0.18, // Relative to screen size
|
|
||||||
'numOfRows': 2,
|
|
||||||
'numOfCols': 5,
|
|
||||||
'wsNumScale': 0.09,
|
|
||||||
'wsNumMarginScale': 0.07,
|
|
||||||
},
|
|
||||||
'sidebar': {
|
|
||||||
'imageColumns': 2,
|
|
||||||
'imageBooruCount': 20,
|
|
||||||
'imageAllowNsfw': false,
|
|
||||||
},
|
|
||||||
'search': {
|
|
||||||
'engineBaseUrl': "https://www.google.com/search?q=",
|
|
||||||
'excludedSites': [], //add site to exclude from result. eg: "quora.com"
|
|
||||||
},
|
|
||||||
'time': {
|
|
||||||
// See https://docs.gtk.org/glib/method.DateTime.format.html
|
|
||||||
// Here's the 12h format: "%I:%M%P"
|
|
||||||
// For seconds, add "%S" and set interval to 1000
|
|
||||||
'format': "%H:%M",
|
|
||||||
'interval': 5000,
|
|
||||||
'dateFormatLong': "%A, %d/%m", // On bar
|
|
||||||
'dateInterval': 5000,
|
|
||||||
'dateFormat': "%d/%m", // On notif time
|
|
||||||
},
|
|
||||||
'weather': {
|
|
||||||
'city': "",
|
|
||||||
},
|
|
||||||
'workspaces': {
|
|
||||||
'shown': 10,
|
|
||||||
},
|
|
||||||
// Longer stuff
|
|
||||||
'icons': {
|
|
||||||
substitutions: {
|
|
||||||
'codium-url-handler': "vscodium",
|
|
||||||
'code-url-handler': "visual-studio-code",
|
|
||||||
'Code': "visual-studio-code",
|
|
||||||
'GitHub Desktop': "github-desktop",
|
|
||||||
'Minecraft* 1.20.1': "minecraft",
|
|
||||||
'gnome-tweaks': "org.gnome.tweaks",
|
|
||||||
'pavucontrol-qt': "pavucontrol",
|
|
||||||
'thunderbird-esr': "thunderbird",
|
|
||||||
'wps': "wps-office2019-kprometheus",
|
|
||||||
'wpsoffice': "wps-office2019-kprometheus",
|
|
||||||
'firefox-esr': "firefox",
|
|
||||||
'soffice' : "libreoffice",
|
|
||||||
'': "image-missing",
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'keybinds': {
|
|
||||||
// Format: Mod1+Mod2+key. CaSe SeNsItIvE!
|
|
||||||
// Modifiers: Shift Ctrl Alt Hyper Meta
|
|
||||||
// See https://docs.gtk.org/gdk3/index.html#constants for the other keys (they are listed as KEY_key)
|
|
||||||
'overview': {
|
|
||||||
'altMoveLeft': "Ctrl+b",
|
|
||||||
'altMoveRight': "Ctrl+f",
|
|
||||||
'deleteToEnd': "Ctrl+k",
|
|
||||||
},
|
|
||||||
'sidebar': {
|
|
||||||
'apis': {
|
|
||||||
'nextTab': "Page_Down",
|
|
||||||
'prevTab': "Page_Up",
|
|
||||||
},
|
|
||||||
'options': { // Right sidebar
|
|
||||||
'nextTab': "Page_Down",
|
|
||||||
'prevTab': "Page_Up",
|
|
||||||
},
|
|
||||||
'pin': "Ctrl+p",
|
|
||||||
'cycleTab': "Ctrl+Tab",
|
|
||||||
'nextTab': "Ctrl+Page_Down",
|
|
||||||
'prevTab': "Ctrl+Page_Up",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
// Override defaults with user's options
|
|
||||||
function overrideConfigRecursive(userOverrides, configOptions = {}) {
|
|
||||||
for (const [key, value] of Object.entries(userOverrides)) {
|
|
||||||
if (typeof value === 'object') {
|
|
||||||
overrideConfigRecursive(value, configOptions[key]);
|
|
||||||
} else {
|
|
||||||
configOptions[key] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
overrideConfigRecursive(userOverrides, configOptions);
|
|
||||||
|
|
||||||
globalThis['userOptions'] = configOptions;
|
|
||||||
export default configOptions;
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
const { Gtk } = imports.gi;
|
|
||||||
|
|
||||||
export function iconExists(iconName) {
|
|
||||||
let iconTheme = Gtk.IconTheme.get_default();
|
|
||||||
return iconTheme.has_icon(iconName);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function substitute(str) {
|
|
||||||
if(userOptions.icons.substitutions[str]) return userOptions.icons.substitutions[str];
|
|
||||||
|
|
||||||
if (!iconExists(str)) str = str.toLowerCase().replace(/\s+/g, '-'); // Turn into kebab-case
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
|
|
||||||
export function clamp(x, min, max) {
|
|
||||||
return Math.min(Math.max(x, min), max);
|
|
||||||
}
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
||||||
const { GLib } = imports.gi;
|
|
||||||
import Variable from 'resource:///com/github/Aylur/ags/variable.js';
|
|
||||||
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
|
|
||||||
const { execAsync, exec } = Utils;
|
|
||||||
|
|
||||||
export const distroID = exec(`bash -c 'cat /etc/os-release | grep "^ID=" | cut -d "=" -f 2 | sed "s/\\"//g"'`).trim();
|
|
||||||
export const isDebianDistro = (distroID == 'linuxmint' || distroID == 'ubuntu' || distroID == 'debian' || distroID == 'zorin' || distroID == 'popos' || distroID == 'raspbian' || distroID == 'kali');
|
|
||||||
export const isArchDistro = (distroID == 'arch' || distroID == 'endeavouros' || distroID == 'cachyos');
|
|
||||||
export const hasFlatpak = !!exec(`bash -c 'command -v flatpak'`);
|
|
||||||
|
|
||||||
const LIGHTDARK_FILE_LOCATION = `${GLib.get_user_cache_dir()}/ags/user/colormode.txt`;
|
|
||||||
const colorMode = Utils.exec('bash -c "sed -n \'1p\' $HOME/.cache/ags/user/colormode.txt"');
|
|
||||||
export let darkMode = Variable(!(Utils.readFile(LIGHTDARK_FILE_LOCATION).split('\n')[0].trim() == 'light'));
|
|
||||||
export const hasPlasmaIntegration = !!Utils.exec('bash -c "command -v plasma-browser-integration-host"');
|
|
||||||
|
|
||||||
export const getDistroIcon = () => {
|
|
||||||
// Arches
|
|
||||||
if(distroID == 'arch') return 'arch-symbolic';
|
|
||||||
if(distroID == 'endeavouros') return 'endeavouros-symbolic';
|
|
||||||
if(distroID == 'cachyos') return 'cachyos-symbolic';
|
|
||||||
// Funny flake
|
|
||||||
if(distroID == 'nixos') return 'nixos-symbolic';
|
|
||||||
// Cool thing
|
|
||||||
if(distroID == 'fedora') return 'fedora-symbolic';
|
|
||||||
// Debians
|
|
||||||
if(distroID == 'linuxmint') return 'ubuntu-symbolic';
|
|
||||||
if(distroID == 'ubuntu') return 'ubuntu-symbolic';
|
|
||||||
if(distroID == 'debian') return 'debian-symbolic';
|
|
||||||
if(distroID == 'zorin') return 'ubuntu-symbolic';
|
|
||||||
if(distroID == 'popos') return 'ubuntu-symbolic';
|
|
||||||
if(distroID == 'raspbian') return 'debian-symbolic';
|
|
||||||
if(distroID == 'kali') return 'debian-symbolic';
|
|
||||||
return 'linux-symbolic';
|
|
||||||
}
|
|
||||||
|
|
||||||
export const getDistroName = () => {
|
|
||||||
// Arches
|
|
||||||
if(distroID == 'arch') return 'Arch Linux';
|
|
||||||
if(distroID == 'endeavouros') return 'EndeavourOS';
|
|
||||||
if(distroID == 'cachyos') return 'CachyOS';
|
|
||||||
// Funny flake
|
|
||||||
if(distroID == 'nixos') return 'NixOS';
|
|
||||||
// Cool thing
|
|
||||||
if(distroID == 'fedora') return 'Fedora';
|
|
||||||
// Debians
|
|
||||||
if(distroID == 'linuxmint') return 'Linux Mint';
|
|
||||||
if(distroID == 'ubuntu') return 'Ubuntu';
|
|
||||||
if(distroID == 'debian') return 'Debian';
|
|
||||||
if(distroID == 'zorin') return 'Zorin';
|
|
||||||
if(distroID == 'popos') return 'Pop!_OS';
|
|
||||||
if(distroID == 'raspbian') return 'Raspbian';
|
|
||||||
if(distroID == 'kali') return 'Kali Linux';
|
|
||||||
return 'Linux';
|
|
||||||
}
|
|
||||||
|
|
@ -1,86 +0,0 @@
|
||||||
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
|
|
||||||
|
|
||||||
const { Revealer, Scrollable } = Widget;
|
|
||||||
|
|
||||||
export const MarginRevealer = ({
|
|
||||||
transition = 'slide_down',
|
|
||||||
child,
|
|
||||||
revealChild,
|
|
||||||
showClass = 'element-show', // These are for animation curve, they don't really hide
|
|
||||||
hideClass = 'element-hide', // Don't put margins in these classes!
|
|
||||||
extraSetup = () => { },
|
|
||||||
...rest
|
|
||||||
}) => {
|
|
||||||
const widget = Scrollable({
|
|
||||||
...rest,
|
|
||||||
attribute: {
|
|
||||||
'revealChild': true, // It'll be set to false after init if it's supposed to hide
|
|
||||||
'transition': transition,
|
|
||||||
'show': () => {
|
|
||||||
if (widget.attribute.revealChild) return;
|
|
||||||
widget.hscroll = 'never';
|
|
||||||
widget.vscroll = 'never';
|
|
||||||
child.toggleClassName(hideClass, false);
|
|
||||||
child.toggleClassName(showClass, true);
|
|
||||||
widget.attribute.revealChild = true;
|
|
||||||
child.css = 'margin: 0px;';
|
|
||||||
},
|
|
||||||
'hide': () => {
|
|
||||||
if (!widget.attribute.revealChild) return;
|
|
||||||
child.toggleClassName(hideClass, true);
|
|
||||||
child.toggleClassName(showClass, false);
|
|
||||||
widget.attribute.revealChild = false;
|
|
||||||
if (widget.attribute.transition == 'slide_left')
|
|
||||||
child.css = `margin-right: -${child.get_allocated_width()}px;`;
|
|
||||||
else if (widget.attribute.transition == 'slide_right')
|
|
||||||
child.css = `margin-left: -${child.get_allocated_width()}px;`;
|
|
||||||
else if (widget.attribute.transition == 'slide_up')
|
|
||||||
child.css = `margin-bottom: -${child.get_allocated_height()}px;`;
|
|
||||||
else if (widget.attribute.transition == 'slide_down')
|
|
||||||
child.css = `margin-top: -${child.get_allocated_height()}px;`;
|
|
||||||
},
|
|
||||||
'toggle': () => {
|
|
||||||
if (widget.attribute.revealChild) widget.attribute.hide();
|
|
||||||
else widget.attribute.show();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
child: child,
|
|
||||||
hscroll: `${revealChild ? 'never' : 'always'}`,
|
|
||||||
vscroll: `${revealChild ? 'never' : 'always'}`,
|
|
||||||
setup: (self) => {
|
|
||||||
extraSetup(self);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
child.toggleClassName(`${revealChild ? showClass : hideClass}`, true);
|
|
||||||
return widget;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Allow reveal update. Currently this just helps at declaration
|
|
||||||
export const DoubleRevealer = ({
|
|
||||||
transition1 = 'slide_right',
|
|
||||||
transition2 = 'slide_left',
|
|
||||||
duration1 = 150,
|
|
||||||
duration2 = 150,
|
|
||||||
child,
|
|
||||||
revealChild,
|
|
||||||
...rest
|
|
||||||
}) => {
|
|
||||||
const r2 = Revealer({
|
|
||||||
transition: transition2,
|
|
||||||
transitionDuration: duration2,
|
|
||||||
revealChild: revealChild,
|
|
||||||
child: child,
|
|
||||||
});
|
|
||||||
const r1 = Revealer({
|
|
||||||
transition: transition1,
|
|
||||||
transitionDuration: duration1,
|
|
||||||
revealChild: revealChild,
|
|
||||||
child: r2,
|
|
||||||
...rest,
|
|
||||||
})
|
|
||||||
r1.toggleRevealChild = (value) => {
|
|
||||||
r1.revealChild = value;
|
|
||||||
r2.revealChild = value;
|
|
||||||
}
|
|
||||||
return r1;
|
|
||||||
}
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
import App from 'resource:///com/github/Aylur/ags/app.js';
|
|
||||||
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
|
|
||||||
const { Box, Window } = Widget;
|
|
||||||
|
|
||||||
|
|
||||||
export default ({
|
|
||||||
name,
|
|
||||||
child,
|
|
||||||
showClassName = "",
|
|
||||||
hideClassName = "",
|
|
||||||
...props
|
|
||||||
}) => {
|
|
||||||
return Window({
|
|
||||||
name,
|
|
||||||
visible: false,
|
|
||||||
layer: 'overlay',
|
|
||||||
...props,
|
|
||||||
|
|
||||||
child: Box({
|
|
||||||
setup: (self) => {
|
|
||||||
self.hook(App, (self, currentName, visible) => {
|
|
||||||
if (currentName === name) {
|
|
||||||
self.toggleClassName(hideClassName, !visible);
|
|
||||||
}
|
|
||||||
}).keybind("Escape", () => App.closeWindow(name))
|
|
||||||
if (showClassName !== "" && hideClassName !== "")
|
|
||||||
self.className = `${showClassName} ${hideClassName}`;
|
|
||||||
},
|
|
||||||
child: child,
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
import Cairo from 'gi://cairo?version=1.0';
|
|
||||||
|
|
||||||
export const dummyRegion = new Cairo.Region();
|
|
||||||
export const enableClickthrough = (self) => self.input_shape_combine_region(dummyRegion);
|
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
const { Gdk } = imports.gi;
|
|
||||||
|
|
||||||
export function setupCursorHover(button) { // Hand pointing cursor on hover
|
|
||||||
const display = Gdk.Display.get_default();
|
|
||||||
button.connect('enter-notify-event', () => {
|
|
||||||
const cursor = Gdk.Cursor.new_from_name(display, 'pointer');
|
|
||||||
button.get_window().set_cursor(cursor);
|
|
||||||
});
|
|
||||||
|
|
||||||
button.connect('leave-notify-event', () => {
|
|
||||||
const cursor = Gdk.Cursor.new_from_name(display, 'default');
|
|
||||||
button.get_window().set_cursor(cursor);
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
export function setupCursorHoverAim(button) { // Crosshair cursor on hover
|
|
||||||
button.connect('enter-notify-event', () => {
|
|
||||||
const display = Gdk.Display.get_default();
|
|
||||||
const cursor = Gdk.Cursor.new_from_name(display, 'crosshair');
|
|
||||||
button.get_window().set_cursor(cursor);
|
|
||||||
});
|
|
||||||
|
|
||||||
button.connect('leave-notify-event', () => {
|
|
||||||
const display = Gdk.Display.get_default();
|
|
||||||
const cursor = Gdk.Cursor.new_from_name(display, 'default');
|
|
||||||
button.get_window().set_cursor(cursor);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function setupCursorHoverGrab(button) { // Hand ready to grab on hover
|
|
||||||
button.connect('enter-notify-event', () => {
|
|
||||||
const display = Gdk.Display.get_default();
|
|
||||||
const cursor = Gdk.Cursor.new_from_name(display, 'grab');
|
|
||||||
button.get_window().set_cursor(cursor);
|
|
||||||
});
|
|
||||||
|
|
||||||
button.connect('leave-notify-event', () => {
|
|
||||||
const display = Gdk.Display.get_default();
|
|
||||||
const cursor = Gdk.Cursor.new_from_name(display, 'default');
|
|
||||||
button.get_window().set_cursor(cursor);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function setupCursorHoverInfo(button) { // "?" mark cursor on hover
|
|
||||||
const display = Gdk.Display.get_default();
|
|
||||||
button.connect('enter-notify-event', () => {
|
|
||||||
const cursor = Gdk.Cursor.new_from_name(display, 'help');
|
|
||||||
button.get_window().set_cursor(cursor);
|
|
||||||
});
|
|
||||||
|
|
||||||
button.connect('leave-notify-event', () => {
|
|
||||||
const cursor = Gdk.Cursor.new_from_name(display, 'default');
|
|
||||||
button.get_window().set_cursor(cursor);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
const { Gdk } = imports.gi;
|
|
||||||
|
|
||||||
const MODS = {
|
|
||||||
'Shift': Gdk.ModifierType.SHIFT_MASK,
|
|
||||||
'Ctrl': Gdk.ModifierType.CONTROL_MASK,
|
|
||||||
'Alt': Gdk.ModifierType.ALT_MASK,
|
|
||||||
'Hyper': Gdk.ModifierType.HYPER_MASK,
|
|
||||||
'Meta': Gdk.ModifierType.META_MASK
|
|
||||||
}
|
|
||||||
|
|
||||||
export const checkKeybind = (event, keybind) => {
|
|
||||||
const pressedModMask = event.get_state()[1];
|
|
||||||
const pressedKey = event.get_keyval()[1];
|
|
||||||
const keys = keybind.split('+');
|
|
||||||
for (let i = 0; i < keys.length; i++) {
|
|
||||||
if (keys[i] in MODS) {
|
|
||||||
if (!(pressedModMask & MODS[keys[i]])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else if (pressedKey !== Gdk[`KEY_${keys[i]}`]) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
|
|
||||||
import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';
|
|
||||||
|
|
||||||
function moveClientToWorkspace(address, workspace) {
|
|
||||||
Utils.execAsync(['bash', '-c', `hyprctl dispatch movetoworkspacesilent ${workspace},address:${address} &`]);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function dumpToWorkspace(from, to) {
|
|
||||||
if (from == to) return;
|
|
||||||
Hyprland.clients.forEach(client => {
|
|
||||||
if (client.workspace.id == from) {
|
|
||||||
moveClientToWorkspace(client.address, to);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function swapWorkspace(workspaceA, workspaceB) {
|
|
||||||
if (workspaceA == workspaceB) return;
|
|
||||||
const clientsA = [];
|
|
||||||
const clientsB = [];
|
|
||||||
Hyprland.clients.forEach(client => {
|
|
||||||
if (client.workspace.id == workspaceA) clientsA.push(client.address);
|
|
||||||
if (client.workspace.id == workspaceB) clientsB.push(client.address);
|
|
||||||
});
|
|
||||||
|
|
||||||
clientsA.forEach((address) => moveClientToWorkspace(address, workspaceB));
|
|
||||||
clientsB.forEach((address) => moveClientToWorkspace(address, workspaceA));
|
|
||||||
}
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
|
|
||||||
import { SearchAndWindows } from "./windowcontent.js";
|
|
||||||
import PopupWindow from '../.widgethacks/popupwindow.js';
|
|
||||||
|
|
||||||
export default (id = '') => PopupWindow({
|
|
||||||
name: `overview${id}`,
|
|
||||||
exclusivity: 'ignore',
|
|
||||||
keymode: 'exclusive',
|
|
||||||
visible: false,
|
|
||||||
// anchor: ['middle'],
|
|
||||||
layer: 'overlay',
|
|
||||||
child: Widget.Box({
|
|
||||||
vertical: true,
|
|
||||||
children: [
|
|
||||||
SearchAndWindows(),
|
|
||||||
]
|
|
||||||
}),
|
|
||||||
})
|
|
||||||
|
|
@ -1,155 +0,0 @@
|
||||||
const { Gio, GLib } = imports.gi;
|
|
||||||
import App from 'resource:///com/github/Aylur/ags/app.js';
|
|
||||||
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
|
|
||||||
const { execAsync, exec } = Utils;
|
|
||||||
// import Todo from "../../services/todo.js";
|
|
||||||
import { darkMode } from '../.miscutils/system.js';
|
|
||||||
|
|
||||||
export function hasUnterminatedBackslash(inputString) {
|
|
||||||
// Use a regular expression to match a trailing odd number of backslashes
|
|
||||||
const regex = /\\+$/;
|
|
||||||
return regex.test(inputString);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function launchCustomCommand(command) {
|
|
||||||
const args = command.toLowerCase().split(' ');
|
|
||||||
if (args[0] == '>raw') { // Mouse raw input
|
|
||||||
Utils.execAsync('hyprctl -j getoption input:accel_profile')
|
|
||||||
.then((output) => {
|
|
||||||
const value = JSON.parse(output)["str"].trim();
|
|
||||||
if (value != "[[EMPTY]]" && value != "") {
|
|
||||||
execAsync(['bash', '-c', `hyprctl keyword input:accel_profile '[[EMPTY]]'`]).catch(print);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
execAsync(['bash', '-c', `hyprctl keyword input:accel_profile flat`]).catch(print);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
else if (args[0] == '>img') { // Change wallpaper
|
|
||||||
execAsync([`bash`, `-c`, `${App.configDir}/scripts/color_generation/switchwall.sh`, `&`]).catch(print);
|
|
||||||
}
|
|
||||||
else if (args[0] == '>color') { // Generate colorscheme from color picker
|
|
||||||
execAsync([`bash`, `-c`, `${App.configDir}/scripts/color_generation/switchcolor.sh --pick`, `&`]).catch(print);
|
|
||||||
}
|
|
||||||
else if (args[0] == '>light') { // Light mode
|
|
||||||
darkMode.value = false;
|
|
||||||
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && sed -i "1s/.*/light/" ${GLib.get_user_cache_dir()}/ags/user/colormode.txt`])
|
|
||||||
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchcolor.sh`]))
|
|
||||||
.catch(print);
|
|
||||||
}
|
|
||||||
else if (args[0] == '>dark') { // Dark mode
|
|
||||||
darkMode.value = true;
|
|
||||||
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && sed -i "1s/.*/dark/" ${GLib.get_user_cache_dir()}/ags/user/colormode.txt`])
|
|
||||||
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchcolor.sh`]))
|
|
||||||
.catch(print);
|
|
||||||
}
|
|
||||||
else if (args[0] == '>badapple') { // Black and white
|
|
||||||
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && sed -i "3s/.*/monochrome/" ${GLib.get_user_cache_dir()}/ags/user/colormode.txt`])
|
|
||||||
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchcolor.sh`]))
|
|
||||||
.catch(print);
|
|
||||||
}
|
|
||||||
else if (args[0] == '>material') { // Use material colors
|
|
||||||
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && echo "material" > ${GLib.get_user_cache_dir()}/ags/user/colorbackend.txt`]).catch(print)
|
|
||||||
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchwall.sh --noswitch`]).catch(print))
|
|
||||||
.catch(print);
|
|
||||||
}
|
|
||||||
else if (args[0] == '>pywal') { // Use Pywal (ik it looks shit but I'm not removing)
|
|
||||||
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && echo "pywal" > ${GLib.get_user_cache_dir()}/ags/user/colorbackend.txt`]).catch(print)
|
|
||||||
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchwall.sh --noswitch`]).catch(print))
|
|
||||||
.catch(print);
|
|
||||||
}
|
|
||||||
else if (args[0] == '>todo') { // Todo
|
|
||||||
Todo.add(args.slice(1).join(' '));
|
|
||||||
}
|
|
||||||
else if (args[0] == '>shutdown') { // Shut down
|
|
||||||
execAsync([`bash`, `-c`, `systemctl poweroff || loginctl poweroff`]).catch(print);
|
|
||||||
}
|
|
||||||
else if (args[0] == '>reboot') { // Reboot
|
|
||||||
execAsync([`bash`, `-c`, `systemctl reboot || loginctl reboot`]).catch(print);
|
|
||||||
}
|
|
||||||
else if (args[0] == '>sleep') { // Sleep
|
|
||||||
execAsync([`bash`, `-c`, `systemctl suspend || loginctl suspend`]).catch(print);
|
|
||||||
}
|
|
||||||
else if (args[0] == '>logout') { // Log out
|
|
||||||
execAsync([`bash`, `-c`, `pkill Hyprland || pkill sway`]).catch(print);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function execAndClose(command, terminal) {
|
|
||||||
App.closeWindow('overview');
|
|
||||||
if (terminal) {
|
|
||||||
execAsync([`bash`, `-c`, `${userOptions.apps.terminal} fish -C "${command}"`, `&`]).catch(print);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
execAsync(command).catch(print);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function couldBeMath(str) {
|
|
||||||
const regex = /^[0-9.+*/-]/;
|
|
||||||
return regex.test(str);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function expandTilde(path) {
|
|
||||||
if (path.startsWith('~')) {
|
|
||||||
return GLib.get_home_dir() + path.slice(1);
|
|
||||||
} else {
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getFileIcon(fileInfo) {
|
|
||||||
let icon = fileInfo.get_icon();
|
|
||||||
if (icon) {
|
|
||||||
// Get the icon's name
|
|
||||||
return icon.get_names()[0];
|
|
||||||
} else {
|
|
||||||
// Default icon for files
|
|
||||||
return 'text-x-generic';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function ls({ path = '~', silent = false }) {
|
|
||||||
let contents = [];
|
|
||||||
try {
|
|
||||||
let expandedPath = expandTilde(path);
|
|
||||||
if (expandedPath.endsWith('/'))
|
|
||||||
expandedPath = expandedPath.slice(0, -1);
|
|
||||||
let folder = Gio.File.new_for_path(expandedPath);
|
|
||||||
|
|
||||||
let enumerator = folder.enumerate_children('standard::*', Gio.FileQueryInfoFlags.NONE, null);
|
|
||||||
let fileInfo;
|
|
||||||
while ((fileInfo = enumerator.next_file(null)) !== null) {
|
|
||||||
let fileName = fileInfo.get_display_name();
|
|
||||||
let fileType = fileInfo.get_file_type();
|
|
||||||
|
|
||||||
let item = {
|
|
||||||
parentPath: expandedPath,
|
|
||||||
name: fileName,
|
|
||||||
type: fileType === Gio.FileType.DIRECTORY ? 'folder' : 'file',
|
|
||||||
icon: getFileIcon(fileInfo),
|
|
||||||
};
|
|
||||||
|
|
||||||
// Add file extension for files
|
|
||||||
if (fileType === Gio.FileType.REGULAR) {
|
|
||||||
let fileExtension = fileName.split('.').pop();
|
|
||||||
item.type = `${fileExtension}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
contents.push(item);
|
|
||||||
contents.sort((a, b) => {
|
|
||||||
const aIsFolder = a.type.startsWith('folder');
|
|
||||||
const bIsFolder = b.type.startsWith('folder');
|
|
||||||
if (aIsFolder && !bIsFolder) {
|
|
||||||
return -1;
|
|
||||||
} else if (!aIsFolder && bIsFolder) {
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
return a.name.localeCompare(b.name); // Sort alphabetically within folders and files
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
if (!silent) console.log(e);
|
|
||||||
}
|
|
||||||
return contents;
|
|
||||||
}
|
|
||||||
|
|
@ -1,423 +0,0 @@
|
||||||
// TODO
|
|
||||||
// - Make client destroy/create not destroy and recreate the whole thing
|
|
||||||
// - Active ws hook optimization: only update when moving to next group
|
|
||||||
//
|
|
||||||
const { Gdk, Gtk } = imports.gi;
|
|
||||||
const { Gravity } = imports.gi.Gdk;
|
|
||||||
import { SCREEN_HEIGHT, SCREEN_WIDTH } from '../../variables.js';
|
|
||||||
import App from 'resource:///com/github/Aylur/ags/app.js';
|
|
||||||
import Variable from 'resource:///com/github/Aylur/ags/variable.js';
|
|
||||||
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
|
|
||||||
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
|
|
||||||
|
|
||||||
import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';
|
|
||||||
const { execAsync, exec } = Utils;
|
|
||||||
import { setupCursorHoverGrab } from '../.widgetutils/cursorhover.js';
|
|
||||||
import { dumpToWorkspace, swapWorkspace } from "./actions.js";
|
|
||||||
import { substitute } from "../.miscutils/icons.js";
|
|
||||||
|
|
||||||
const NUM_OF_WORKSPACES_SHOWN = userOptions.overview.numOfCols * userOptions.overview.numOfRows;
|
|
||||||
const TARGET = [Gtk.TargetEntry.new('text/plain', Gtk.TargetFlags.SAME_APP, 0)];
|
|
||||||
const POPUP_CLOSE_TIME = 100; // ms
|
|
||||||
|
|
||||||
const overviewTick = Variable(false);
|
|
||||||
|
|
||||||
export default () => {
|
|
||||||
const clientMap = new Map();
|
|
||||||
let workspaceGroup = 0;
|
|
||||||
const ContextMenuWorkspaceArray = ({ label, actionFunc, thisWorkspace }) => Widget.MenuItem({
|
|
||||||
label: `${label}`,
|
|
||||||
setup: (menuItem) => {
|
|
||||||
let submenu = new Gtk.Menu();
|
|
||||||
submenu.className = 'menu';
|
|
||||||
|
|
||||||
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
|
|
||||||
const startWorkspace = offset + 1;
|
|
||||||
const endWorkspace = startWorkspace + NUM_OF_WORKSPACES_SHOWN - 1;
|
|
||||||
for (let i = startWorkspace; i <= endWorkspace; i++) {
|
|
||||||
let button = new Gtk.MenuItem({
|
|
||||||
label: `Workspace ${i}`
|
|
||||||
});
|
|
||||||
button.connect("activate", () => {
|
|
||||||
// execAsync([`${onClickBinary}`, `${thisWorkspace}`, `${i}`]).catch(print);
|
|
||||||
actionFunc(thisWorkspace, i);
|
|
||||||
overviewTick.setValue(!overviewTick.value);
|
|
||||||
});
|
|
||||||
submenu.append(button);
|
|
||||||
}
|
|
||||||
menuItem.set_reserve_indicator(true);
|
|
||||||
menuItem.set_submenu(submenu);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const Window = ({ address, at: [x, y], size: [w, h], workspace: { id, name }, class: c, title, xwayland }, screenCoords) => {
|
|
||||||
const revealInfoCondition = (Math.min(w, h) * userOptions.overview.scale > 70);
|
|
||||||
if (w <= 0 || h <= 0 || (c === '' && title === '') || c.endsWith('-dropterm')) return null;
|
|
||||||
// Non-primary monitors
|
|
||||||
if (screenCoords.x != 0) x -= screenCoords.x;
|
|
||||||
if (screenCoords.y != 0) y -= screenCoords.y;
|
|
||||||
// Other offscreen adjustments
|
|
||||||
if (x + w <= 0) x += (Math.floor(x / SCREEN_WIDTH) * SCREEN_WIDTH);
|
|
||||||
else if (x < 0) { w = x + w; x = 0; }
|
|
||||||
if (y + h <= 0) x += (Math.floor(y / SCREEN_HEIGHT) * SCREEN_HEIGHT);
|
|
||||||
else if (y < 0) { h = y + h; y = 0; }
|
|
||||||
// Truncate if offscreen
|
|
||||||
if (x + w > SCREEN_WIDTH) w = SCREEN_WIDTH - x;
|
|
||||||
if (y + h > SCREEN_HEIGHT) h = SCREEN_HEIGHT - y;
|
|
||||||
|
|
||||||
const appIcon = Widget.Icon({
|
|
||||||
icon: substitute(c),
|
|
||||||
size: Math.min(w, h) * userOptions.overview.scale / 2.5,
|
|
||||||
});
|
|
||||||
return Widget.Button({
|
|
||||||
attribute: {
|
|
||||||
address, x, y, w, h, ws: id,
|
|
||||||
updateIconSize: (self) => {
|
|
||||||
appIcon.size = Math.min(self.attribute.w, self.attribute.h) * userOptions.overview.scale / 2.5;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
className: 'overview-tasks-window',
|
|
||||||
hpack: 'start',
|
|
||||||
vpack: 'start',
|
|
||||||
css: `
|
|
||||||
margin-left: ${Math.round(x * userOptions.overview.scale)}px;
|
|
||||||
margin-top: ${Math.round(y * userOptions.overview.scale)}px;
|
|
||||||
margin-right: -${Math.round((x + w) * userOptions.overview.scale)}px;
|
|
||||||
margin-bottom: -${Math.round((y + h) * userOptions.overview.scale)}px;
|
|
||||||
`,
|
|
||||||
onClicked: (self) => {
|
|
||||||
App.closeWindow('overview');
|
|
||||||
Utils.timeout(POPUP_CLOSE_TIME, () => Hyprland.messageAsync(`dispatch focuswindow address:${address}`));
|
|
||||||
},
|
|
||||||
onMiddleClickRelease: () => Hyprland.messageAsync(`dispatch closewindow address:${address}`),
|
|
||||||
onSecondaryClick: (button) => {
|
|
||||||
button.toggleClassName('overview-tasks-window-selected', true);
|
|
||||||
const menu = Widget.Menu({
|
|
||||||
className: 'menu',
|
|
||||||
children: [
|
|
||||||
Widget.MenuItem({
|
|
||||||
child: Widget.Label({
|
|
||||||
xalign: 0,
|
|
||||||
label: "Close (Middle-click)",
|
|
||||||
}),
|
|
||||||
onActivate: () => Hyprland.messageAsync(`dispatch closewindow address:${address}`),
|
|
||||||
}),
|
|
||||||
ContextMenuWorkspaceArray({
|
|
||||||
label: "Dump windows to workspace",
|
|
||||||
actionFunc: dumpToWorkspace,
|
|
||||||
thisWorkspace: Number(id)
|
|
||||||
}),
|
|
||||||
ContextMenuWorkspaceArray({
|
|
||||||
label: "Swap windows with workspace",
|
|
||||||
actionFunc: swapWorkspace,
|
|
||||||
thisWorkspace: Number(id)
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
});
|
|
||||||
menu.connect("deactivate", () => {
|
|
||||||
button.toggleClassName('overview-tasks-window-selected', false);
|
|
||||||
})
|
|
||||||
menu.connect("selection-done", () => {
|
|
||||||
button.toggleClassName('overview-tasks-window-selected', false);
|
|
||||||
})
|
|
||||||
menu.popup_at_widget(button.get_parent(), Gravity.SOUTH, Gravity.NORTH, null); // Show menu below the button
|
|
||||||
button.connect("destroy", () => menu.destroy());
|
|
||||||
},
|
|
||||||
child: Widget.Box({
|
|
||||||
homogeneous: true,
|
|
||||||
child: Widget.Box({
|
|
||||||
vertical: true,
|
|
||||||
vpack: 'center',
|
|
||||||
className: 'spacing-v-5',
|
|
||||||
children: [
|
|
||||||
appIcon,
|
|
||||||
// TODO: Add xwayland tag instead of just having italics
|
|
||||||
Widget.Revealer({
|
|
||||||
transition: 'slide_down',
|
|
||||||
revealChild: revealInfoCondition,
|
|
||||||
child: Widget.Label({
|
|
||||||
maxWidthChars: 10, // Doesn't matter what number
|
|
||||||
truncate: 'end',
|
|
||||||
className: `${xwayland ? 'txt txt-italic' : 'txt'}`,
|
|
||||||
css: `
|
|
||||||
font-size: ${Math.min(SCREEN_WIDTH, SCREEN_HEIGHT) * userOptions.overview.scale / 14.6}px;
|
|
||||||
margin: 0px ${Math.min(SCREEN_WIDTH, SCREEN_HEIGHT) * userOptions.overview.scale / 10}px;
|
|
||||||
`,
|
|
||||||
// If the title is too short, include the class
|
|
||||||
label: (title.length <= 1 ? `${c}: ${title}` : title),
|
|
||||||
})
|
|
||||||
})
|
|
||||||
]
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
tooltipText: `${c}: ${title}`,
|
|
||||||
setup: (button) => {
|
|
||||||
setupCursorHoverGrab(button);
|
|
||||||
|
|
||||||
button.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, TARGET, Gdk.DragAction.MOVE);
|
|
||||||
button.drag_source_set_icon_name(substitute(c));
|
|
||||||
// button.drag_source_set_icon_gicon(icon);
|
|
||||||
|
|
||||||
button.connect('drag-begin', (button) => { // On drag start, add the dragging class
|
|
||||||
button.toggleClassName('overview-tasks-window-dragging', true);
|
|
||||||
});
|
|
||||||
button.connect('drag-data-get', (_w, _c, data) => { // On drag finish, give address
|
|
||||||
data.set_text(address, address.length);
|
|
||||||
button.toggleClassName('overview-tasks-window-dragging', false);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const Workspace = (index) => {
|
|
||||||
// const fixed = Widget.Fixed({
|
|
||||||
// attribute: {
|
|
||||||
// put: (widget, x, y) => {
|
|
||||||
// fixed.put(widget, x, y);
|
|
||||||
// },
|
|
||||||
// move: (widget, x, y) => {
|
|
||||||
// fixed.move(widget, x, y);
|
|
||||||
// },
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
const fixed = Widget.Box({
|
|
||||||
attribute: {
|
|
||||||
put: (widget, x, y) => {
|
|
||||||
if (!widget.attribute) return;
|
|
||||||
// Note: x and y are already multiplied by userOptions.overview.scale
|
|
||||||
const newCss = `
|
|
||||||
margin-left: ${Math.round(x)}px;
|
|
||||||
margin-top: ${Math.round(y)}px;
|
|
||||||
margin-right: -${Math.round(x + (widget.attribute.w * userOptions.overview.scale))}px;
|
|
||||||
margin-bottom: -${Math.round(y + (widget.attribute.h * userOptions.overview.scale))}px;
|
|
||||||
`;
|
|
||||||
widget.css = newCss;
|
|
||||||
fixed.pack_start(widget, false, false, 0);
|
|
||||||
},
|
|
||||||
move: (widget, x, y) => {
|
|
||||||
if (!widget) return;
|
|
||||||
if (!widget.attribute) return;
|
|
||||||
// Note: x and y are already multiplied by userOptions.overview.scale
|
|
||||||
const newCss = `
|
|
||||||
margin-left: ${Math.round(x)}px;
|
|
||||||
margin-top: ${Math.round(y)}px;
|
|
||||||
margin-right: -${Math.round(x + (widget.attribute.w * userOptions.overview.scale))}px;
|
|
||||||
margin-bottom: -${Math.round(y + (widget.attribute.h * userOptions.overview.scale))}px;
|
|
||||||
`;
|
|
||||||
widget.css = newCss;
|
|
||||||
},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const WorkspaceNumber = ({ index, ...rest }) => Widget.Label({
|
|
||||||
className: 'overview-tasks-workspace-number',
|
|
||||||
label: `${index}`,
|
|
||||||
css: `
|
|
||||||
margin: ${Math.min(SCREEN_WIDTH, SCREEN_HEIGHT) * userOptions.overview.scale * userOptions.overview.wsNumMarginScale}px;
|
|
||||||
font-size: ${SCREEN_HEIGHT * userOptions.overview.scale * userOptions.overview.wsNumScale}px;
|
|
||||||
`,
|
|
||||||
setup: (self) => self.hook(Hyprland.active.workspace, (self) => {
|
|
||||||
// Update when going to new ws group
|
|
||||||
const currentGroup = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN);
|
|
||||||
self.label = `${currentGroup * NUM_OF_WORKSPACES_SHOWN + index}`;
|
|
||||||
}),
|
|
||||||
...rest,
|
|
||||||
})
|
|
||||||
const widget = Widget.Box({
|
|
||||||
className: 'overview-tasks-workspace',
|
|
||||||
vpack: 'center',
|
|
||||||
css: `
|
|
||||||
min-width: ${SCREEN_WIDTH * userOptions.overview.scale}px;
|
|
||||||
min-height: ${SCREEN_HEIGHT * userOptions.overview.scale}px;
|
|
||||||
`,
|
|
||||||
children: [Widget.EventBox({
|
|
||||||
hexpand: true,
|
|
||||||
vexpand: true,
|
|
||||||
onPrimaryClick: () => {
|
|
||||||
App.closeWindow('overview');
|
|
||||||
Utils.timeout(POPUP_CLOSE_TIME, () => Hyprland.messageAsync(`dispatch workspace ${index}`));
|
|
||||||
},
|
|
||||||
setup: (eventbox) => {
|
|
||||||
eventbox.drag_dest_set(Gtk.DestDefaults.ALL, TARGET, Gdk.DragAction.COPY);
|
|
||||||
eventbox.connect('drag-data-received', (_w, _c, _x, _y, data) => {
|
|
||||||
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
|
|
||||||
Hyprland.messageAsync(`dispatch movetoworkspacesilent ${index + offset},address:${data.get_text()}`)
|
|
||||||
overviewTick.setValue(!overviewTick.value);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
child: Widget.Overlay({
|
|
||||||
child: Widget.Box({}),
|
|
||||||
overlays: [
|
|
||||||
WorkspaceNumber({ index: index, hpack: 'start', vpack: 'start' }),
|
|
||||||
fixed
|
|
||||||
]
|
|
||||||
}),
|
|
||||||
})],
|
|
||||||
});
|
|
||||||
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
|
|
||||||
fixed.attribute.put(WorkspaceNumber(offset + index), 0, 0);
|
|
||||||
widget.clear = () => {
|
|
||||||
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
|
|
||||||
clientMap.forEach((client, address) => {
|
|
||||||
if (!client) return;
|
|
||||||
if ((client.attribute.ws <= offset || client.attribute.ws > offset + NUM_OF_WORKSPACES_SHOWN) ||
|
|
||||||
(client.attribute.ws == offset + index)) {
|
|
||||||
client.destroy();
|
|
||||||
client = null;
|
|
||||||
clientMap.delete(address);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
widget.set = (clientJson, screenCoords) => {
|
|
||||||
let c = clientMap.get(clientJson.address);
|
|
||||||
if (c) {
|
|
||||||
if (c.attribute?.ws !== clientJson.workspace.id) {
|
|
||||||
c.destroy();
|
|
||||||
c = null;
|
|
||||||
clientMap.delete(clientJson.address);
|
|
||||||
}
|
|
||||||
else if (c) {
|
|
||||||
c.attribute.w = clientJson.size[0];
|
|
||||||
c.attribute.h = clientJson.size[1];
|
|
||||||
c.attribute.updateIconSize(c);
|
|
||||||
fixed.attribute.move(c,
|
|
||||||
Math.max(0, clientJson.at[0] * userOptions.overview.scale),
|
|
||||||
Math.max(0, clientJson.at[1] * userOptions.overview.scale)
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const newWindow = Window(clientJson, screenCoords);
|
|
||||||
if (newWindow === null) return;
|
|
||||||
// clientMap.set(clientJson.address, newWindow);
|
|
||||||
fixed.attribute.put(newWindow,
|
|
||||||
Math.max(0, newWindow.attribute.x * userOptions.overview.scale),
|
|
||||||
Math.max(0, newWindow.attribute.y * userOptions.overview.scale)
|
|
||||||
);
|
|
||||||
clientMap.set(clientJson.address, newWindow);
|
|
||||||
};
|
|
||||||
widget.unset = (clientAddress) => {
|
|
||||||
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
|
|
||||||
let c = clientMap.get(clientAddress);
|
|
||||||
if (!c) return;
|
|
||||||
c.destroy();
|
|
||||||
c = null;
|
|
||||||
clientMap.delete(clientAddress);
|
|
||||||
};
|
|
||||||
widget.show = () => {
|
|
||||||
fixed.show_all();
|
|
||||||
}
|
|
||||||
return widget;
|
|
||||||
};
|
|
||||||
|
|
||||||
const arr = (s, n) => {
|
|
||||||
const array = [];
|
|
||||||
for (let i = 0; i < n; i++)
|
|
||||||
array.push(s + i);
|
|
||||||
|
|
||||||
return array;
|
|
||||||
};
|
|
||||||
|
|
||||||
const OverviewRow = ({ startWorkspace, workspaces, windowName = 'overview' }) => Widget.Box({
|
|
||||||
children: arr(startWorkspace, workspaces).map(Workspace),
|
|
||||||
attribute: {
|
|
||||||
monitorMap: [],
|
|
||||||
getMonitorMap: (box) => {
|
|
||||||
execAsync('hyprctl -j monitors').then(monitors => {
|
|
||||||
box.attribute.monitorMap = JSON.parse(monitors).reduce((acc, item) => {
|
|
||||||
acc[item.id] = { x: item.x, y: item.y };
|
|
||||||
return acc;
|
|
||||||
}, {});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
update: (box) => {
|
|
||||||
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
|
|
||||||
if (!App.getWindow(windowName).visible) return;
|
|
||||||
Hyprland.messageAsync('j/clients').then(clients => {
|
|
||||||
const allClients = JSON.parse(clients);
|
|
||||||
const kids = box.get_children();
|
|
||||||
kids.forEach(kid => kid.clear());
|
|
||||||
for (let i = 0; i < allClients.length; i++) {
|
|
||||||
const client = allClients[i];
|
|
||||||
const childID = client.workspace.id - (offset + startWorkspace);
|
|
||||||
if (offset + startWorkspace <= client.workspace.id &&
|
|
||||||
client.workspace.id <= offset + startWorkspace + workspaces) {
|
|
||||||
const screenCoords = box.attribute.monitorMap[client.monitor];
|
|
||||||
if (kids[childID]) {
|
|
||||||
kids[childID].set(client, screenCoords);
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
kids.forEach(kid => kid.show());
|
|
||||||
}).catch(print);
|
|
||||||
},
|
|
||||||
updateWorkspace: (box, id) => {
|
|
||||||
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
|
|
||||||
if (!( // Not in range, ignore
|
|
||||||
offset + startWorkspace <= id &&
|
|
||||||
id <= offset + startWorkspace + workspaces
|
|
||||||
)) return;
|
|
||||||
// if (!App.getWindow(windowName).visible) return;
|
|
||||||
Hyprland.messageAsync('j/clients').then(clients => {
|
|
||||||
const allClients = JSON.parse(clients);
|
|
||||||
const kids = box.get_children();
|
|
||||||
for (let i = 0; i < allClients.length; i++) {
|
|
||||||
const client = allClients[i];
|
|
||||||
if (client.workspace.id != id) continue;
|
|
||||||
const screenCoords = box.attribute.monitorMap[client.monitor];
|
|
||||||
kids[id - (offset + startWorkspace)]?.set(client, screenCoords);
|
|
||||||
}
|
|
||||||
kids[id - (offset + startWorkspace)]?.show();
|
|
||||||
}).catch(print);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
setup: (box) => {
|
|
||||||
box.attribute.getMonitorMap(box);
|
|
||||||
box
|
|
||||||
.hook(overviewTick, (box) => box.attribute.update(box))
|
|
||||||
.hook(Hyprland, (box, clientAddress) => {
|
|
||||||
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
|
|
||||||
const kids = box.get_children();
|
|
||||||
const client = Hyprland.getClient(clientAddress);
|
|
||||||
if (!client) return;
|
|
||||||
const id = client.workspace.id;
|
|
||||||
|
|
||||||
box.attribute.updateWorkspace(box, id);
|
|
||||||
kids[id - (offset + startWorkspace)]?.unset(clientAddress);
|
|
||||||
}, 'client-removed')
|
|
||||||
.hook(Hyprland, (box, clientAddress) => {
|
|
||||||
const client = Hyprland.getClient(clientAddress);
|
|
||||||
if (!client) return;
|
|
||||||
box.attribute.updateWorkspace(box, client.workspace.id);
|
|
||||||
}, 'client-added')
|
|
||||||
.hook(Hyprland.active.workspace, (box) => {
|
|
||||||
// Full update when going to new ws group
|
|
||||||
const previousGroup = box.attribute.workspaceGroup;
|
|
||||||
const currentGroup = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN);
|
|
||||||
if (currentGroup !== previousGroup) {
|
|
||||||
box.attribute.update(box);
|
|
||||||
box.attribute.workspaceGroup = currentGroup;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.hook(App, (box, name, visible) => { // Update on open
|
|
||||||
if (name == 'overview' && visible) box.attribute.update(box);
|
|
||||||
})
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return Widget.Revealer({
|
|
||||||
revealChild: true,
|
|
||||||
transition: 'slide_down',
|
|
||||||
transitionDuration: userOptions.animations.durationLarge,
|
|
||||||
child: Widget.Box({
|
|
||||||
vertical: true,
|
|
||||||
className: 'overview-tasks',
|
|
||||||
children: Array.from({ length: userOptions.overview.numOfRows }, (_, index) =>
|
|
||||||
OverviewRow({
|
|
||||||
startWorkspace: 1 + index * userOptions.overview.numOfCols,
|
|
||||||
workspaces: userOptions.overview.numOfCols,
|
|
||||||
})
|
|
||||||
)
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
@ -1,163 +0,0 @@
|
||||||
const { Gtk } = imports.gi;
|
|
||||||
import App from 'resource:///com/github/Aylur/ags/app.js';
|
|
||||||
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
|
|
||||||
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
|
|
||||||
const { execAsync, exec } = Utils;
|
|
||||||
import { searchItem } from './searchitem.js';
|
|
||||||
import { execAndClose, couldBeMath, launchCustomCommand } from './miscfunctions.js';
|
|
||||||
|
|
||||||
export const DirectoryButton = ({ parentPath, name, type, icon }) => {
|
|
||||||
const actionText = Widget.Revealer({
|
|
||||||
revealChild: false,
|
|
||||||
transition: "crossfade",
|
|
||||||
transitionDuration: userOptions.animations.durationLarge,
|
|
||||||
child: Widget.Label({
|
|
||||||
className: 'overview-search-results-txt txt txt-small txt-action',
|
|
||||||
label: 'Open',
|
|
||||||
})
|
|
||||||
});
|
|
||||||
const actionTextRevealer = Widget.Revealer({
|
|
||||||
revealChild: false,
|
|
||||||
transition: "slide_left",
|
|
||||||
transitionDuration: userOptions.animations.durationSmall,
|
|
||||||
child: actionText,
|
|
||||||
});
|
|
||||||
return Widget.Button({
|
|
||||||
className: 'overview-search-result-btn',
|
|
||||||
onClicked: () => {
|
|
||||||
App.closeWindow('overview');
|
|
||||||
execAsync(['bash', '-c', `xdg-open '${parentPath}/${name}'`, `&`]).catch(print);
|
|
||||||
},
|
|
||||||
child: Widget.Box({
|
|
||||||
children: [
|
|
||||||
Widget.Box({
|
|
||||||
vertical: false,
|
|
||||||
children: [
|
|
||||||
Widget.Box({
|
|
||||||
className: 'overview-search-results-icon',
|
|
||||||
homogeneous: true,
|
|
||||||
child: Widget.Icon({
|
|
||||||
icon: icon,
|
|
||||||
}),
|
|
||||||
}),
|
|
||||||
Widget.Label({
|
|
||||||
className: 'overview-search-results-txt txt txt-norm',
|
|
||||||
label: name,
|
|
||||||
}),
|
|
||||||
Widget.Box({ hexpand: true }),
|
|
||||||
actionTextRevealer,
|
|
||||||
]
|
|
||||||
})
|
|
||||||
]
|
|
||||||
}),
|
|
||||||
setup: (self) => self
|
|
||||||
.on('focus-in-event', (button) => {
|
|
||||||
actionText.revealChild = true;
|
|
||||||
actionTextRevealer.revealChild = true;
|
|
||||||
})
|
|
||||||
.on('focus-out-event', (button) => {
|
|
||||||
actionText.revealChild = false;
|
|
||||||
actionTextRevealer.revealChild = false;
|
|
||||||
})
|
|
||||||
,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export const CalculationResultButton = ({ result, text }) => searchItem({
|
|
||||||
materialIconName: ' ',
|
|
||||||
name: `Math result`,
|
|
||||||
actionName: "Copy",
|
|
||||||
content: `${result}`,
|
|
||||||
onActivate: () => {
|
|
||||||
App.closeWindow('overview');
|
|
||||||
execAsync(['wl-copy', `${result}`]).catch(print);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
export const DesktopEntryButton = (app) => {
|
|
||||||
const actionText = Widget.Revealer({
|
|
||||||
revealChild: false,
|
|
||||||
transition: "crossfade",
|
|
||||||
transitionDuration: userOptions.animations.durationLarge,
|
|
||||||
child: Widget.Label({
|
|
||||||
className: 'overview-search-results-txt txt txt-small txt-action',
|
|
||||||
label: 'Launch',
|
|
||||||
})
|
|
||||||
});
|
|
||||||
const actionTextRevealer = Widget.Revealer({
|
|
||||||
revealChild: false,
|
|
||||||
transition: "slide_left",
|
|
||||||
transitionDuration: userOptions.animations.durationSmall,
|
|
||||||
child: actionText,
|
|
||||||
});
|
|
||||||
return Widget.Button({
|
|
||||||
className: 'overview-search-result-btn',
|
|
||||||
onClicked: () => {
|
|
||||||
App.closeWindow('overview');
|
|
||||||
app.launch();
|
|
||||||
},
|
|
||||||
child: Widget.Box({
|
|
||||||
children: [
|
|
||||||
Widget.Box({
|
|
||||||
vertical: false,
|
|
||||||
children: [
|
|
||||||
Widget.Box({
|
|
||||||
className: 'overview-search-results-icon',
|
|
||||||
homogeneous: true,
|
|
||||||
child: Widget.Icon({
|
|
||||||
icon: app.iconName,
|
|
||||||
}),
|
|
||||||
}),
|
|
||||||
Widget.Label({
|
|
||||||
className: 'overview-search-results-txt txt txt-norm',
|
|
||||||
label: app.name,
|
|
||||||
}),
|
|
||||||
Widget.Box({ hexpand: true }),
|
|
||||||
actionTextRevealer,
|
|
||||||
]
|
|
||||||
})
|
|
||||||
]
|
|
||||||
}),
|
|
||||||
setup: (self) => self
|
|
||||||
.on('focus-in-event', (button) => {
|
|
||||||
actionText.revealChild = true;
|
|
||||||
actionTextRevealer.revealChild = true;
|
|
||||||
})
|
|
||||||
.on('focus-out-event', (button) => {
|
|
||||||
actionText.revealChild = false;
|
|
||||||
actionTextRevealer.revealChild = false;
|
|
||||||
})
|
|
||||||
,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export const ExecuteCommandButton = ({ command, terminal = false }) => searchItem({
|
|
||||||
materialIconName: `${terminal ? 'terminal' : ' '}`,
|
|
||||||
name: `Run command`,
|
|
||||||
actionName: `Execute ${terminal ? 'in terminal' : ''}`,
|
|
||||||
content: `${command}`,
|
|
||||||
onActivate: () => execAndClose(command, terminal),
|
|
||||||
extraClassName: 'techfont',
|
|
||||||
})
|
|
||||||
|
|
||||||
export const CustomCommandButton = ({ text = '' }) => searchItem({
|
|
||||||
materialIconName: ' ',
|
|
||||||
name: 'Action',
|
|
||||||
actionName: 'Run',
|
|
||||||
content: `${text}`,
|
|
||||||
onActivate: () => {
|
|
||||||
App.closeWindow('overview');
|
|
||||||
launchCustomCommand(text);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
export const SearchButton = ({ text = '' }) => searchItem({
|
|
||||||
materialIconName: ' ',
|
|
||||||
name: 'Search the web',
|
|
||||||
actionName: 'Go',
|
|
||||||
content: `${text}`,
|
|
||||||
onActivate: () => {
|
|
||||||
App.closeWindow('overview');
|
|
||||||
execAsync(['bash', '-c', `xdg-open '${userOptions.search.engineBaseUrl}${text} ${['', ...userOptions.search.excludedSites].join(' -site:')}' &`]).catch(print);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
@ -1,65 +0,0 @@
|
||||||
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
|
|
||||||
|
|
||||||
export const searchItem = ({ materialIconName, name, actionName, content, onActivate, extraClassName = '', ...rest }) => {
|
|
||||||
const actionText = Widget.Revealer({
|
|
||||||
revealChild: false,
|
|
||||||
transition: "crossfade",
|
|
||||||
transitionDuration: userOptions.animations.durationLarge,
|
|
||||||
child: Widget.Label({
|
|
||||||
className: 'overview-search-results-txt txt txt-small txt-action',
|
|
||||||
label: `${actionName}`,
|
|
||||||
})
|
|
||||||
});
|
|
||||||
const actionTextRevealer = Widget.Revealer({
|
|
||||||
revealChild: false,
|
|
||||||
transition: "slide_left",
|
|
||||||
transitionDuration: userOptions.animations.durationSmall,
|
|
||||||
child: actionText,
|
|
||||||
})
|
|
||||||
return Widget.Button({
|
|
||||||
className: `overview-search-result-btn txt ${extraClassName}`,
|
|
||||||
onClicked: onActivate,
|
|
||||||
child: Widget.Box({
|
|
||||||
children: [
|
|
||||||
Widget.Box({
|
|
||||||
vertical: false,
|
|
||||||
children: [
|
|
||||||
Widget.Label({
|
|
||||||
className: `icon-material overview-search-results-icon`,
|
|
||||||
label: `${materialIconName}`,
|
|
||||||
}),
|
|
||||||
Widget.Box({
|
|
||||||
vertical: true,
|
|
||||||
children: [
|
|
||||||
Widget.Label({
|
|
||||||
hpack: 'start',
|
|
||||||
className: 'overview-search-results-txt txt-smallie txt-subtext',
|
|
||||||
label: `${name}`,
|
|
||||||
truncate: "end",
|
|
||||||
}),
|
|
||||||
Widget.Label({
|
|
||||||
hpack: 'start',
|
|
||||||
className: 'overview-search-results-txt txt-norm',
|
|
||||||
label: `${content}`,
|
|
||||||
truncate: "end",
|
|
||||||
}),
|
|
||||||
]
|
|
||||||
}),
|
|
||||||
Widget.Box({ hexpand: true }),
|
|
||||||
actionTextRevealer,
|
|
||||||
],
|
|
||||||
})
|
|
||||||
]
|
|
||||||
}),
|
|
||||||
setup: (self) => self
|
|
||||||
.on('focus-in-event', (button) => {
|
|
||||||
actionText.revealChild = true;
|
|
||||||
actionTextRevealer.revealChild = true;
|
|
||||||
})
|
|
||||||
.on('focus-out-event', (button) => {
|
|
||||||
actionText.revealChild = false;
|
|
||||||
actionTextRevealer.revealChild = false;
|
|
||||||
})
|
|
||||||
,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
@ -1,262 +0,0 @@
|
||||||
const { Gdk, Gtk } = imports.gi;
|
|
||||||
import App from 'resource:///com/github/Aylur/ags/app.js';
|
|
||||||
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
|
|
||||||
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
|
|
||||||
|
|
||||||
import Applications from 'resource:///com/github/Aylur/ags/service/applications.js';
|
|
||||||
const { execAsync, exec } = Utils;
|
|
||||||
import { execAndClose, expandTilde, hasUnterminatedBackslash, couldBeMath, launchCustomCommand, ls } from './miscfunctions.js';
|
|
||||||
import {
|
|
||||||
CalculationResultButton, CustomCommandButton, DirectoryButton,
|
|
||||||
DesktopEntryButton, ExecuteCommandButton, SearchButton
|
|
||||||
} from './searchbuttons.js';
|
|
||||||
import { checkKeybind } from '../.widgetutils/keybind.js';
|
|
||||||
|
|
||||||
// Add math funcs
|
|
||||||
const { abs, sin, cos, tan, cot, asin, acos, atan, acot } = Math;
|
|
||||||
const pi = Math.PI;
|
|
||||||
// trigonometric funcs for deg
|
|
||||||
const sind = x => sin(x * pi / 180);
|
|
||||||
const cosd = x => cos(x * pi / 180);
|
|
||||||
const tand = x => tan(x * pi / 180);
|
|
||||||
const cotd = x => cot(x * pi / 180);
|
|
||||||
const asind = x => asin(x) * 180 / pi;
|
|
||||||
const acosd = x => acos(x) * 180 / pi;
|
|
||||||
const atand = x => atan(x) * 180 / pi;
|
|
||||||
const acotd = x => acot(x) * 180 / pi;
|
|
||||||
|
|
||||||
const MAX_RESULTS = 10;
|
|
||||||
const OVERVIEW_SCALE = 0.18; // = overview workspace box / screen size
|
|
||||||
const OVERVIEW_WS_NUM_SCALE = 0.0;
|
|
||||||
const OVERVIEW_WS_NUM_MARGIN_SCALE = 0.07;
|
|
||||||
const TARGET = [Gtk.TargetEntry.new('text/plain', Gtk.TargetFlags.SAME_APP, 0)];
|
|
||||||
|
|
||||||
function iconExists(iconName) {
|
|
||||||
let iconTheme = Gtk.IconTheme.get_default();
|
|
||||||
return iconTheme.has_icon(iconName);
|
|
||||||
}
|
|
||||||
|
|
||||||
const OptionalOverview = async () => {
|
|
||||||
try {
|
|
||||||
return (await import('./overview_hyprland.js')).default();
|
|
||||||
} catch {
|
|
||||||
return Widget.Box({});
|
|
||||||
// return (await import('./overview_hyprland.js')).default();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const overviewContent = await OptionalOverview();
|
|
||||||
|
|
||||||
export const SearchAndWindows = () => {
|
|
||||||
var _appSearchResults = [];
|
|
||||||
|
|
||||||
const ClickToClose = ({ ...props }) => Widget.EventBox({
|
|
||||||
...props,
|
|
||||||
onPrimaryClick: () => App.closeWindow('overview'),
|
|
||||||
onSecondaryClick: () => App.closeWindow('overview'),
|
|
||||||
onMiddleClick: () => App.closeWindow('overview'),
|
|
||||||
});
|
|
||||||
const resultsBox = Widget.Box({
|
|
||||||
className: 'overview-search-results',
|
|
||||||
vertical: true,
|
|
||||||
vexpand: true,
|
|
||||||
});
|
|
||||||
const resultsRevealer = Widget.Revealer({
|
|
||||||
transitionDuration: userOptions.animations.durationLarge,
|
|
||||||
revealChild: false,
|
|
||||||
transition: 'slide_down',
|
|
||||||
// duration: 200,
|
|
||||||
hpack: 'center',
|
|
||||||
child: resultsBox,
|
|
||||||
});
|
|
||||||
const entryPromptRevealer = Widget.Revealer({
|
|
||||||
transition: 'crossfade',
|
|
||||||
transitionDuration: userOptions.animations.durationLarge,
|
|
||||||
revealChild: true,
|
|
||||||
hpack: 'center',
|
|
||||||
child: Widget.Label({
|
|
||||||
className: 'overview-search-prompt txt-small txt',
|
|
||||||
label: 'Type to search'
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|
||||||
const entryIconRevealer = Widget.Revealer({
|
|
||||||
transition: 'crossfade',
|
|
||||||
transitionDuration: userOptions.animations.durationLarge,
|
|
||||||
revealChild: false,
|
|
||||||
hpack: 'end',
|
|
||||||
child: Widget.Label({
|
|
||||||
className: 'txt txt-large icon-material overview-search-icon',
|
|
||||||
label: ' ',
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|
||||||
const entryIcon = Widget.Box({
|
|
||||||
className: 'overview-search-prompt-box',
|
|
||||||
setup: box => box.pack_start(entryIconRevealer, true, true, 0),
|
|
||||||
});
|
|
||||||
|
|
||||||
const entry = Widget.Entry({
|
|
||||||
className: 'overview-search-box txt-small txt',
|
|
||||||
hpack: 'center',
|
|
||||||
onAccept: (self) => { // This is when you hit Enter
|
|
||||||
const text = self.text;
|
|
||||||
if (text.length == 0) return;
|
|
||||||
const isAction = text.startsWith('>');
|
|
||||||
const isDir = (['/', '~'].includes(entry.text[0]));
|
|
||||||
|
|
||||||
if (couldBeMath(text)) { // Eval on typing is dangerous, this is a workaround
|
|
||||||
try {
|
|
||||||
const fullResult = eval(text.replace(/\^/g, "**"));
|
|
||||||
// copy
|
|
||||||
execAsync(['wl-copy', `${fullResult}`]).catch(print);
|
|
||||||
App.closeWindow('overview');
|
|
||||||
return;
|
|
||||||
} catch (e) {
|
|
||||||
// console.log(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isDir) {
|
|
||||||
App.closeWindow('overview');
|
|
||||||
execAsync(['bash', '-c', `xdg-open "${expandTilde(text)}"`, `&`]).catch(print);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (_appSearchResults.length > 0) {
|
|
||||||
App.closeWindow('overview');
|
|
||||||
_appSearchResults[0].launch();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (text[0] == '>') { // Custom commands
|
|
||||||
App.closeWindow('overview');
|
|
||||||
launchCustomCommand(text);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Fallback: Execute command
|
|
||||||
if (!isAction && exec(`bash -c "command -v ${text.split(' ')[0]}"`) != '') {
|
|
||||||
if (text.startsWith('sudo'))
|
|
||||||
execAndClose(text, true);
|
|
||||||
else
|
|
||||||
execAndClose(text, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
App.closeWindow('overview');
|
|
||||||
execAsync(['bash', '-c', `xdg-open '${userOptions.search.engineBaseUrl}${text} ${['', ...userOptions.search.excludedSites].join(' -site:')}' &`]).catch(print);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onChange: (entry) => { // this is when you type
|
|
||||||
const isAction = entry.text[0] == '>';
|
|
||||||
const isDir = (['/', '~'].includes(entry.text[0]));
|
|
||||||
resultsBox.get_children().forEach(ch => ch.destroy());
|
|
||||||
|
|
||||||
// check empty if so then dont do stuff
|
|
||||||
if (entry.text == '') {
|
|
||||||
resultsRevealer.revealChild = false;
|
|
||||||
overviewContent.revealChild = true;
|
|
||||||
entryPromptRevealer.revealChild = true;
|
|
||||||
entryIconRevealer.revealChild = false;
|
|
||||||
entry.toggleClassName('overview-search-box-extended', false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const text = entry.text;
|
|
||||||
resultsRevealer.revealChild = true;
|
|
||||||
overviewContent.revealChild = false;
|
|
||||||
entryPromptRevealer.revealChild = false;
|
|
||||||
entryIconRevealer.revealChild = true;
|
|
||||||
entry.toggleClassName('overview-search-box-extended', true);
|
|
||||||
_appSearchResults = Applications.query(text);
|
|
||||||
|
|
||||||
// Calculate
|
|
||||||
if (couldBeMath(text)) { // Eval on typing is dangerous; this is a small workaround.
|
|
||||||
try {
|
|
||||||
const fullResult = eval(text.replace(/\^/g, "**"));
|
|
||||||
resultsBox.add(CalculationResultButton({ result: fullResult, text: text }));
|
|
||||||
} catch (e) {
|
|
||||||
// console.log(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isDir) {
|
|
||||||
var contents = [];
|
|
||||||
contents = ls({ path: text, silent: true });
|
|
||||||
contents.forEach((item) => {
|
|
||||||
resultsBox.add(DirectoryButton(item));
|
|
||||||
})
|
|
||||||
}
|
|
||||||
if (isAction) { // Eval on typing is dangerous, this is a workaround.
|
|
||||||
resultsBox.add(CustomCommandButton({ text: entry.text }));
|
|
||||||
}
|
|
||||||
// Add application entries
|
|
||||||
let appsToAdd = MAX_RESULTS;
|
|
||||||
_appSearchResults.forEach(app => {
|
|
||||||
if (appsToAdd == 0) return;
|
|
||||||
resultsBox.add(DesktopEntryButton(app));
|
|
||||||
appsToAdd--;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Fallbacks
|
|
||||||
// if the first word is an actual command
|
|
||||||
if (!isAction && !hasUnterminatedBackslash(text) && exec(`bash -c "command -v ${text.split(' ')[0]}"`) != '') {
|
|
||||||
resultsBox.add(ExecuteCommandButton({ command: entry.text, terminal: entry.text.startsWith('sudo') }));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add fallback: search
|
|
||||||
resultsBox.add(SearchButton({ text: entry.text }));
|
|
||||||
resultsBox.show_all();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
return Widget.Box({
|
|
||||||
vertical: true,
|
|
||||||
children: [
|
|
||||||
ClickToClose({ // Top margin. Also works as a click-outside-to-close thing
|
|
||||||
child: Widget.Box({
|
|
||||||
className: 'bar-height',
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
Widget.Box({
|
|
||||||
hpack: 'center',
|
|
||||||
children: [
|
|
||||||
entry,
|
|
||||||
Widget.Box({
|
|
||||||
className: 'overview-search-icon-box',
|
|
||||||
setup: (box) => {
|
|
||||||
box.pack_start(entryPromptRevealer, true, true, 0)
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
entryIcon,
|
|
||||||
]
|
|
||||||
}),
|
|
||||||
overviewContent,
|
|
||||||
resultsRevealer,
|
|
||||||
],
|
|
||||||
setup: (self) => self
|
|
||||||
.hook(App, (_b, name, visible) => {
|
|
||||||
if (name == 'overview' && !visible) {
|
|
||||||
resultsBox.children = [];
|
|
||||||
entry.set_text('');
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.on('key-press-event', (widget, event) => { // Typing
|
|
||||||
const keyval = event.get_keyval()[1];
|
|
||||||
const modstate = event.get_state()[1];
|
|
||||||
if (checkKeybind(event, userOptions.keybinds.overview.altMoveLeft))
|
|
||||||
entry.set_position(Math.max(entry.get_position() - 1, 0));
|
|
||||||
else if (checkKeybind(event, userOptions.keybinds.overview.altMoveRight))
|
|
||||||
entry.set_position(Math.min(entry.get_position() + 1, entry.get_text().length));
|
|
||||||
else if (checkKeybind(event, userOptions.keybinds.overview.deleteToEnd)) {
|
|
||||||
const text = entry.get_text();
|
|
||||||
const pos = entry.get_position();
|
|
||||||
const newText = text.slice(0, pos);
|
|
||||||
entry.set_text(newText);
|
|
||||||
entry.set_position(newText.length);
|
|
||||||
}
|
|
||||||
else if (!(modstate & Gdk.ModifierType.CONTROL_MASK)) { // Ctrl not held
|
|
||||||
if (keyval >= 32 && keyval <= 126 && widget != entry) {
|
|
||||||
Utils.timeout(1, () => entry.grab_focus());
|
|
||||||
entry.set_text(entry.text + String.fromCharCode(keyval));
|
|
||||||
entry.set_position(-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
@ -1,197 +0,0 @@
|
||||||
*:not(popover) {
|
|
||||||
all: unset;
|
|
||||||
}
|
|
||||||
|
|
||||||
@import '../../../.config/waybar/wallust/colors-waybar.css';
|
|
||||||
|
|
||||||
/* define some colors */
|
|
||||||
@define-color border-color @color12;
|
|
||||||
@define-color border-color-alt @color1;
|
|
||||||
@define-color text-color rgba(255, 255, 255, 0.7);
|
|
||||||
@define-color noti-bg rgba(0, 0, 0, 0.4);
|
|
||||||
@define-color noti-bg-alt #111111;
|
|
||||||
|
|
||||||
widget {
|
|
||||||
border-radius: 0.818rem;
|
|
||||||
-gtk-outline-radius: 0.818rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-window {
|
|
||||||
margin-top: 2.727rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-search-box {
|
|
||||||
transition: 300ms cubic-bezier(0, 0.55, 0.45, 1);
|
|
||||||
border-radius: 1.705rem;
|
|
||||||
-gtk-outline-radius: 1.705rem;
|
|
||||||
border-top: 2px solid @border-color;
|
|
||||||
border-left: 1px solid @border-color-alt;
|
|
||||||
border-right: 1px solid @border-color-alt;
|
|
||||||
border-bottom: 2px solid @border-color;
|
|
||||||
/*box-shadow: 0px 2px 3px alpha(@color0, 0.45); */
|
|
||||||
margin: 0.476rem;
|
|
||||||
min-width: 13.636rem;
|
|
||||||
min-height: 3.409rem;
|
|
||||||
padding: 0rem 1.364rem;
|
|
||||||
padding-right: 2.864rem;
|
|
||||||
background-color: @noti-bg;
|
|
||||||
color: @text-color;
|
|
||||||
caret-color: inherit;
|
|
||||||
font-weight: bolder;
|
|
||||||
}
|
|
||||||
.overview-search-box selection {
|
|
||||||
background-color: @noti-bg;
|
|
||||||
color: @text-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-search-box-extended {
|
|
||||||
min-width: 25.909rem;
|
|
||||||
caret-color: #FDD9FD;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-search-prompt {
|
|
||||||
color: @text-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-search-icon {
|
|
||||||
margin: 0rem 1.023rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-search-prompt-box {
|
|
||||||
margin-left: -18.545rem;
|
|
||||||
margin-right: 0.544rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-search-icon-box {
|
|
||||||
margin-left: -18.545rem;
|
|
||||||
margin-right: 0.544rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-search-results {
|
|
||||||
border-radius: 1.705rem;
|
|
||||||
-gtk-outline-radius: 1.705rem;
|
|
||||||
border-top: 2px solid @border-color;
|
|
||||||
border-left: 1px solid @border-color-alt;
|
|
||||||
border-right: 1px solid @border-color-alt;
|
|
||||||
border-bottom: 2px solid @border-color;
|
|
||||||
box-shadow: 0px 2px 3px @color9;
|
|
||||||
margin: 0.476rem;
|
|
||||||
min-width: 28.773rem;
|
|
||||||
padding: 0.682rem;
|
|
||||||
background-color: @noti-bg;
|
|
||||||
color: @text-color;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-search-results-icon {
|
|
||||||
margin: 0rem 0.682rem;
|
|
||||||
font-size: 2.386rem;
|
|
||||||
min-width: 2.386rem;
|
|
||||||
min-height: 2.386rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-search-results-txt {
|
|
||||||
margin-right: 0.682rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-search-results-txt-cmd {
|
|
||||||
margin-right: 0.682rem;
|
|
||||||
font-family: "JetBrains Mono NF", "JetBrains Mono Nerd Font", "JetBrains Mono NL", "SpaceMono NF", "SpaceMono Nerd Font", monospace;
|
|
||||||
font-size: 1.227rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-search-result-btn {
|
|
||||||
border-radius: 1.159rem;
|
|
||||||
-gtk-outline-radius: 1.159rem;
|
|
||||||
padding: 0.341rem;
|
|
||||||
min-width: 2.386rem;
|
|
||||||
min-height: 2.386rem;
|
|
||||||
caret-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-search-result-btn:hover,
|
|
||||||
.overview-search-result-btn:focus {
|
|
||||||
background-color: alpha(@color7, 0.9);
|
|
||||||
color: alpha(@color0, 0.7);
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-search-result-btn:active {
|
|
||||||
background-color: alpha(@color7, 0.9);
|
|
||||||
color: @color4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-tasks {
|
|
||||||
border-radius: 1.705rem;
|
|
||||||
-gtk-outline-radius: 1.705rem;
|
|
||||||
border-top: 2px solid @border-color;
|
|
||||||
border-left: 1px solid @border-color-alt;
|
|
||||||
border-right: 1px solid @border-color-alt;
|
|
||||||
border-bottom: 2px solid @border-color;
|
|
||||||
box-shadow: 0px 2px 3px @color5;
|
|
||||||
margin: 0.476rem;
|
|
||||||
padding: 0.341rem;
|
|
||||||
/* background-color: rgba(49, 50, 68, 0.8); */
|
|
||||||
background-color: @noti-bg;
|
|
||||||
color: #EBDFED;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-tasks-workspace {
|
|
||||||
border-radius: 1.159rem;
|
|
||||||
-gtk-outline-radius: 1.159rem;
|
|
||||||
margin: 0.341rem;
|
|
||||||
/* background-color: #26233A; */
|
|
||||||
background-image: url('../../rofi/.current_wallpaper');
|
|
||||||
background-size: cover;
|
|
||||||
background-position: center;
|
|
||||||
border: 0.068rem solid alpha(@color4, 0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-tasks-workspace-number {
|
|
||||||
font-family: "Open Sans", "Noto Sans", sans-serif;
|
|
||||||
color: #CFC2D3;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-tasks-window {
|
|
||||||
border-radius: 1.159rem;
|
|
||||||
-gtk-outline-radius: 1.159rem;
|
|
||||||
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
|
|
||||||
background-color: alpha(@color3, .7);
|
|
||||||
/* background-color: @color_a3; */
|
|
||||||
/* background-color: rgba(46, 40, 50, 0.8); */
|
|
||||||
color: #EBDFED;
|
|
||||||
border: 0.068rem solid @color7;
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-tasks-window:hover,
|
|
||||||
.overview-tasks-window:focus {
|
|
||||||
background-color: alpha(@color9, 0.8);
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-tasks-window:active {
|
|
||||||
background-color: alpha(@color9, 0.8);
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-tasks-window-selected {
|
|
||||||
background-color: alpha(@color9, 0.8);
|
|
||||||
}
|
|
||||||
|
|
||||||
.overview-tasks-window-dragging {
|
|
||||||
opacity: 0.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.growingRadial {
|
|
||||||
transition: 300ms cubic-bezier(0.2, 0, 0, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.fadingRadial {
|
|
||||||
transition: 50ms cubic-bezier(0.2, 0, 0, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-pinned {
|
|
||||||
margin: 0rem;
|
|
||||||
border-radius: 0rem;
|
|
||||||
border-bottom-right-radius: 1.705rem;
|
|
||||||
border: 0rem solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*# sourceMappingURL=style.css.map */
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
|
|
||||||
const userConfigOptions = {
|
|
||||||
// For every option, see ~/.config/ags/modules/.configuration/user_options.js
|
|
||||||
// (vscode users ctrl+click this: file://./modules/.configuration/user_options.js)
|
|
||||||
// (vim users: `:vsp` to split window, move cursor to this path, press `gf`. `Ctrl-w` twice to switch between)
|
|
||||||
// options listed in this file will override the default ones in the above file
|
|
||||||
// Here's an example
|
|
||||||
'overview':{
|
|
||||||
'scale': 0.15,
|
|
||||||
'numOfRows': 2
|
|
||||||
},
|
|
||||||
'keybinds': {
|
|
||||||
'sidebar': {
|
|
||||||
'pin': "Ctrl+p",
|
|
||||||
'nextTab': "Ctrl+Page_Down",
|
|
||||||
'prevTab': "Ctrl+Page_Up",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
export default userConfigOptions;
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
const { Gtk } = imports.gi;
|
|
||||||
import Variable from 'resource:///com/github/Aylur/ags/variable.js';
|
|
||||||
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
|
|
||||||
const { exec, execAsync } = Utils;
|
|
||||||
|
|
||||||
Gtk.IconTheme.get_default().append_search_path(`${App.configDir}/assets/icons`);
|
|
||||||
|
|
||||||
// Screen size
|
|
||||||
export const SCREEN_WIDTH = Number(exec(`bash -c "hyprctl monitors -j | jq '.[0].width / .[0].scale'"`));
|
|
||||||
export const SCREEN_HEIGHT = Number(exec(`bash -c "hyprctl monitors -j | jq '.[0].height / .[0].scale'"`));
|
|
||||||
|
|
||||||
// Mode switching
|
|
||||||
export const currentShellMode = Variable('normal', {}) // normal, focus
|
|
||||||
globalThis['currentMode'] = currentShellMode;
|
|
||||||
globalThis['cycleMode'] = () => {
|
|
||||||
if (currentShellMode.value === 'normal') {
|
|
||||||
currentShellMode.value = 'focus';
|
|
||||||
} else {
|
|
||||||
currentShellMode.value = 'normal';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,292 +0,0 @@
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
|
|
||||||
# /* wallust template - colors-cava */
|
|
||||||
|
|
||||||
## Configuration file for CAVA.
|
|
||||||
# Remove the ; to change parameters.
|
|
||||||
|
|
||||||
[general]
|
|
||||||
|
|
||||||
# Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0
|
|
||||||
; mode = normal
|
|
||||||
|
|
||||||
# Accepts only non-negative values.
|
|
||||||
; framerate = 60
|
|
||||||
|
|
||||||
# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off
|
|
||||||
# new as of 0.6.0 autosens of low values (dynamic range)
|
|
||||||
# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0
|
|
||||||
; autosens = 1
|
|
||||||
; overshoot = 20
|
|
||||||
|
|
||||||
# Manual sensitivity in %. If autosens is enabled, this will only be the initial value.
|
|
||||||
# 200 means double height. Accepts only non-negative values.
|
|
||||||
; sensitivity = 100
|
|
||||||
|
|
||||||
# The number of bars (0-512). 0 sets it to auto (fill up console).
|
|
||||||
# Bars' width and space between bars in number of characters.
|
|
||||||
; bars = 0
|
|
||||||
; bar_width = 2
|
|
||||||
; bar_spacing = 1
|
|
||||||
# bar_height is only used for output in "noritake" format
|
|
||||||
; bar_height = 32
|
|
||||||
|
|
||||||
# For SDL width and space between bars is in pixels, defaults are:
|
|
||||||
; bar_width = 20
|
|
||||||
; bar_spacing = 5
|
|
||||||
|
|
||||||
# sdl_glsl have these default values, they are only used to calulate max number of bars.
|
|
||||||
; bar_width = 1
|
|
||||||
; bar_spacing = 0
|
|
||||||
|
|
||||||
|
|
||||||
# Lower and higher cutoff frequencies for lowest and highest bars
|
|
||||||
# the bandwidth of the visualizer.
|
|
||||||
# Note: there is a minimum total bandwidth of 43Mhz x number of bars.
|
|
||||||
# Cava will automatically increase the higher cutoff if a too low band is specified.
|
|
||||||
; lower_cutoff_freq = 50
|
|
||||||
; higher_cutoff_freq = 10000
|
|
||||||
|
|
||||||
|
|
||||||
# Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and
|
|
||||||
# only check for input once per second. Cava will wake up once input is detected. 0 = disable.
|
|
||||||
; sleep_timer = 0
|
|
||||||
|
|
||||||
|
|
||||||
[input]
|
|
||||||
|
|
||||||
# Audio capturing method. Possible methods are: 'fifo', 'portaudio', 'pipewire', 'alsa', 'pulse', 'sndio', 'oss', 'jack' or 'shmem'
|
|
||||||
# Defaults to 'oss', 'pipewire', 'sndio', 'jack', 'pulse', 'alsa', 'portaudio' or 'fifo', in that order, dependent on what support cava was built with.
|
|
||||||
# On Mac it defaults to 'portaudio' or 'fifo'
|
|
||||||
# On windows this is automatic and no input settings are needed.
|
|
||||||
#
|
|
||||||
# All input methods uses the same config variable 'source'
|
|
||||||
# to define where it should get the audio.
|
|
||||||
#
|
|
||||||
# For pulseaudio and pipewire 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink
|
|
||||||
# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them).
|
|
||||||
#
|
|
||||||
# For pipewire 'source' will be the object name or object.serial of the device to capture from.
|
|
||||||
# Both input and output devices are supported.
|
|
||||||
#
|
|
||||||
# For alsa 'source' will be the capture device.
|
|
||||||
# For fifo 'source' will be the path to fifo-file.
|
|
||||||
# For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address
|
|
||||||
#
|
|
||||||
# For sndio 'source' will be a raw recording audio descriptor or a monitoring sub-device, e.g. 'rsnd/2' or 'snd/1'. Default: 'default'.
|
|
||||||
# README.md contains further information on how to setup CAVA for sndio.
|
|
||||||
#
|
|
||||||
# For oss 'source' will be the path to a audio device, e.g. '/dev/dsp2'. Default: '/dev/dsp', i.e. the default audio device.
|
|
||||||
# README.md contains further information on how to setup CAVA for OSS on FreeBSD.
|
|
||||||
#
|
|
||||||
# For jack 'source' will be the name of the JACK server to connect to, e.g. 'foobar'. Default: 'default'.
|
|
||||||
# README.md contains further information on how to setup CAVA for JACK.
|
|
||||||
#
|
|
||||||
method = pulse
|
|
||||||
source = auto
|
|
||||||
|
|
||||||
method = pipewire
|
|
||||||
source = auto
|
|
||||||
|
|
||||||
; method = alsa
|
|
||||||
; source = hw:Loopback,1
|
|
||||||
|
|
||||||
; method = fifo
|
|
||||||
; source = /tmp/mpd.fifo
|
|
||||||
|
|
||||||
; method = shmem
|
|
||||||
; source = /squeezelite-AA:BB:CC:DD:EE:FF
|
|
||||||
|
|
||||||
; method = portaudio
|
|
||||||
; source = auto
|
|
||||||
|
|
||||||
; method = sndio
|
|
||||||
; source = default
|
|
||||||
|
|
||||||
; method = oss
|
|
||||||
; source = /dev/dsp
|
|
||||||
|
|
||||||
; method = jack
|
|
||||||
; source = default
|
|
||||||
|
|
||||||
# The options 'sample_rate', 'sample_bits', 'channels' and 'autoconnect' can be configured for some input methods:
|
|
||||||
# sample_rate: fifo, pipewire, sndio, oss
|
|
||||||
# sample_bits: fifo, pipewire, sndio, oss
|
|
||||||
# channels: sndio, oss, jack
|
|
||||||
# autoconnect: jack
|
|
||||||
# Other methods ignore these settings.
|
|
||||||
#
|
|
||||||
# For 'sndio' and 'oss' they are only preferred values, i.e. if the values are not supported
|
|
||||||
# by the chosen audio device, the device will use other supported values instead.
|
|
||||||
# Example: 48000, 32 and 2, but the device only supports 44100, 16 and 1, then it
|
|
||||||
# will use 44100, 16 and 1.
|
|
||||||
#
|
|
||||||
; sample_rate = 44100
|
|
||||||
; sample_bits = 16
|
|
||||||
; channels = 2
|
|
||||||
; autoconnect = 2
|
|
||||||
|
|
||||||
|
|
||||||
[output]
|
|
||||||
|
|
||||||
# Output method. Can be 'ncurses', 'noncurses', 'raw', 'noritake', 'sdl'
|
|
||||||
# or 'sdl_glsl'.
|
|
||||||
# 'noncurses' (default) uses a buffer and cursor movements to only print
|
|
||||||
# changes from frame to frame in the terminal. Uses less resources and is less
|
|
||||||
# prone to tearing (vsync issues) than 'ncurses'.
|
|
||||||
#
|
|
||||||
# 'raw' is an 8 or 16 bit (configurable via the 'bit_format' option) data
|
|
||||||
# stream of the bar heights that can be used to send to other applications.
|
|
||||||
# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above.
|
|
||||||
#
|
|
||||||
# 'noritake' outputs a bitmap in the format expected by a Noritake VFD display
|
|
||||||
# in graphic mode. It only support the 3000 series graphical VFDs for now.
|
|
||||||
#
|
|
||||||
# 'sdl' uses the Simple DirectMedia Layer to render in a graphical context.
|
|
||||||
# 'sdl_glsl' uses SDL to create an OpenGL context. Write your own shaders or
|
|
||||||
# use one of the predefined ones.
|
|
||||||
; method = noncurses
|
|
||||||
|
|
||||||
# Orientation of the visualization. Can be 'bottom', 'top', 'left' or 'right'.
|
|
||||||
# Default is 'bottom'. Other orientations are only supported on sdl and ncruses
|
|
||||||
# output. Note: many fonts have weird glyphs for 'top' and 'right' characters,
|
|
||||||
# which can make ncurses not look right.
|
|
||||||
; orientation = bottom
|
|
||||||
|
|
||||||
# Visual channels. Can be 'stereo' or 'mono'.
|
|
||||||
# 'stereo' mirrors both channels with low frequencies in center.
|
|
||||||
# 'mono' outputs left to right lowest to highest frequencies.
|
|
||||||
# 'mono_option' set mono to either take input from 'left', 'right' or 'average'.
|
|
||||||
# set 'reverse' to 1 to display frequencies the other way around.
|
|
||||||
; channels = stereo
|
|
||||||
; mono_option = average
|
|
||||||
; reverse = 0
|
|
||||||
|
|
||||||
# Raw output target. A fifo will be created if target does not exist.
|
|
||||||
; raw_target = /dev/stdout
|
|
||||||
|
|
||||||
# Raw data format. Can be 'binary' or 'ascii'.
|
|
||||||
; data_format = binary
|
|
||||||
|
|
||||||
# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530).
|
|
||||||
; bit_format = 16bit
|
|
||||||
|
|
||||||
# Ascii max value. In 'ascii' mode range will run from 0 to value specified here
|
|
||||||
; ascii_max_range = 1000
|
|
||||||
|
|
||||||
# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters.
|
|
||||||
# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)).
|
|
||||||
; bar_delimiter = 59
|
|
||||||
; frame_delimiter = 10
|
|
||||||
|
|
||||||
# sdl window size and position. -1,-1 is centered.
|
|
||||||
; sdl_width = 1000
|
|
||||||
; sdl_height = 500
|
|
||||||
; sdl_x = -1
|
|
||||||
; sdl_y= -1
|
|
||||||
; sdl_full_screen = 0
|
|
||||||
|
|
||||||
# set label on bars on the x-axis. Can be 'frequency' or 'none'. Default: 'none'
|
|
||||||
# 'frequency' displays the lower cut off frequency of the bar above.
|
|
||||||
# Only supported on ncurses and noncurses output.
|
|
||||||
; xaxis = none
|
|
||||||
|
|
||||||
# enable alacritty synchronized updates. 1 = on, 0 = off
|
|
||||||
# removes flickering in alacritty terminal emulator.
|
|
||||||
# defaults to off since the behaviour in other terminal emulators is unknown
|
|
||||||
; alacritty_sync = 0
|
|
||||||
|
|
||||||
# Shaders for sdl_glsl, located in $HOME/.config/cava/shaders
|
|
||||||
; vertex_shader = pass_through.vert
|
|
||||||
; fragment_shader = bar_spectrum.frag
|
|
||||||
|
|
||||||
; for glsl output mode, keep rendering even if no audio
|
|
||||||
; continuous_rendering = 0
|
|
||||||
|
|
||||||
# disable console blank (screen saver) in tty
|
|
||||||
# (Not supported on FreeBSD)
|
|
||||||
; disable_blanking = 0
|
|
||||||
|
|
||||||
# show a flat bar at the bottom of the screen when idle, 1 = on, 0 = off
|
|
||||||
; show_idle_bar_heads = 1
|
|
||||||
|
|
||||||
# show waveform instead of frequency spectrum, 1 = on, 0 = off
|
|
||||||
; waveform = 0
|
|
||||||
|
|
||||||
[color]
|
|
||||||
|
|
||||||
# Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow.
|
|
||||||
# Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires
|
|
||||||
# a terminal that can change color definitions such as Gnome-terminal or rxvt.
|
|
||||||
# default is to keep current terminal color
|
|
||||||
; background = default
|
|
||||||
; foreground = default
|
|
||||||
|
|
||||||
# SDL and sdl_glsl only support hex code colors, these are the default:
|
|
||||||
; background = '#111111'
|
|
||||||
; foreground = '#33ffff'
|
|
||||||
|
|
||||||
# these are default
|
|
||||||
# Gradient mode, only hex defined colors are supported,
|
|
||||||
# background must also be defined in hex or remain commented out. 1 = on, 0 = off.
|
|
||||||
# You can define as many as 8 different colors. They range from bottom to top of screen
|
|
||||||
; gradient = 0
|
|
||||||
; gradient_count = 8
|
|
||||||
; gradient_color_1 = '#59cc33'
|
|
||||||
; gradient_color_2 = '#80cc33'
|
|
||||||
; gradient_color_3 = '#a6cc33'
|
|
||||||
; gradient_color_4 = '#cccc33'
|
|
||||||
; gradient_color_5 = '#cca633'
|
|
||||||
; gradient_color_6 = '#cc8033'
|
|
||||||
; gradient_color_7 = '#cc5933'
|
|
||||||
; gradient_color_8 = '#cc3333'
|
|
||||||
|
|
||||||
# for wallust
|
|
||||||
gradient = 1
|
|
||||||
gradient_count = 8
|
|
||||||
gradient_color_1 = '#000004'
|
|
||||||
gradient_color_2 = '#523F41'
|
|
||||||
gradient_color_3 = '#49596E'
|
|
||||||
gradient_color_4 = '#905E56'
|
|
||||||
gradient_color_5 = '#DCD4CD'
|
|
||||||
gradient_color_6 = '#AE746D'
|
|
||||||
gradient_color_7 = '#C07D73'
|
|
||||||
gradient_color_8 = '#DCD4CD'
|
|
||||||
|
|
||||||
|
|
||||||
[smoothing]
|
|
||||||
|
|
||||||
# Percentage value for integral smoothing. Takes values from 0 - 100.
|
|
||||||
# Higher values means smoother, but less precise. 0 to disable.
|
|
||||||
# DEPRECATED as of 0.8.0, use noise_reduction instead
|
|
||||||
; integral = 77
|
|
||||||
|
|
||||||
# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable.
|
|
||||||
; monstercat = 0
|
|
||||||
; waves = 0
|
|
||||||
|
|
||||||
# Set gravity percentage for "drop off". Higher values means bars will drop faster.
|
|
||||||
# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off".
|
|
||||||
# DEPRECATED as of 0.8.0, use noise_reduction instead
|
|
||||||
; gravity = 100
|
|
||||||
|
|
||||||
|
|
||||||
# In bar height, bars that would have been lower that this will not be drawn.
|
|
||||||
# DEPRECATED as of 0.8.0
|
|
||||||
; ignore = 0
|
|
||||||
|
|
||||||
# Noise reduction, int 0 - 100. default 77
|
|
||||||
# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth
|
|
||||||
# 100 will be very slow and smooth, 0 will be fast but noisy.
|
|
||||||
; noise_reduction = 77
|
|
||||||
|
|
||||||
|
|
||||||
[eq]
|
|
||||||
|
|
||||||
# This one is tricky. You can have as much keys as you want.
|
|
||||||
# Remember to uncomment more than one key! More keys = more precision.
|
|
||||||
# Look at readme.md on github for further explanations and examples.
|
|
||||||
; 1 = 1 # bass
|
|
||||||
; 2 = 1
|
|
||||||
; 3 = 1 # midtone
|
|
||||||
; 4 = 1
|
|
||||||
; 5 = 1 # treble
|
|
||||||
|
|
@ -1,79 +0,0 @@
|
||||||
#version 330
|
|
||||||
|
|
||||||
in vec2 fragCoord;
|
|
||||||
out vec4 fragColor;
|
|
||||||
|
|
||||||
// bar values. defaults to left channels first (low to high), then right (high to low).
|
|
||||||
uniform float bars[512];
|
|
||||||
|
|
||||||
uniform int bars_count; // number of bars (left + right) (configurable)
|
|
||||||
uniform int bar_width; // bar width (configurable), not used here
|
|
||||||
uniform int bar_spacing; // space bewteen bars (configurable)
|
|
||||||
|
|
||||||
uniform vec3 u_resolution; // window resolution
|
|
||||||
|
|
||||||
//colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
|
|
||||||
uniform vec3 bg_color; // background color
|
|
||||||
uniform vec3 fg_color; // foreground color
|
|
||||||
|
|
||||||
uniform int gradient_count;
|
|
||||||
uniform vec3 gradient_colors[8]; // gradient colors
|
|
||||||
|
|
||||||
vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max)
|
|
||||||
{
|
|
||||||
//create color based on fraction of this color and next color
|
|
||||||
float yr = (y - y_min) / (y_max - y_min);
|
|
||||||
return col_1 * (1.0 - yr) + col_2 * yr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
// find which bar to use based on where we are on the x axis
|
|
||||||
float x = u_resolution.x * fragCoord.x;
|
|
||||||
int bar = int(bars_count * fragCoord.x);
|
|
||||||
|
|
||||||
//calculate a bar size
|
|
||||||
float bar_size = u_resolution.x / bars_count;
|
|
||||||
|
|
||||||
//the y coordinate and bar values are the same
|
|
||||||
float y = bars[bar];
|
|
||||||
|
|
||||||
// make sure there is a thin line at bottom
|
|
||||||
if (y * u_resolution.y < 1.0)
|
|
||||||
{
|
|
||||||
y = 1.0 / u_resolution.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
//draw the bar up to current height
|
|
||||||
if (y > fragCoord.y)
|
|
||||||
{
|
|
||||||
//make some space between bars basen on settings
|
|
||||||
if (x > (bar + 1) * (bar_size) - bar_spacing)
|
|
||||||
{
|
|
||||||
fragColor = vec4(bg_color,1.0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (gradient_count == 0)
|
|
||||||
{
|
|
||||||
fragColor = vec4(fg_color,1.0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//find which color in the configured gradient we are at
|
|
||||||
int color = int((gradient_count - 1) * fragCoord.y);
|
|
||||||
|
|
||||||
//find where on y this and next color is supposed to be
|
|
||||||
float y_min = color / (gradient_count - 1.0);
|
|
||||||
float y_max = (color + 1.0) / (gradient_count - 1.0);
|
|
||||||
|
|
||||||
//make color
|
|
||||||
fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fragColor = vec4(bg_color,1.0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
#version 330
|
|
||||||
|
|
||||||
in vec2 fragCoord;
|
|
||||||
out vec4 fragColor;
|
|
||||||
|
|
||||||
// bar values. defaults to left channels first (low to high), then right (high to low).
|
|
||||||
uniform float bars[512];
|
|
||||||
|
|
||||||
uniform int bars_count; // number of bars (left + right) (configurable)
|
|
||||||
|
|
||||||
uniform vec3 u_resolution; // window resolution, not used here
|
|
||||||
|
|
||||||
//colors, configurable in cava config file
|
|
||||||
uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
|
|
||||||
uniform vec3 fg_color; // foreground color, not used here
|
|
||||||
|
|
||||||
float normalize_C(float x, float x_min, float x_max, float r_min, float r_max )
|
|
||||||
{
|
|
||||||
float xr;
|
|
||||||
xr = (r_max-r_min) * (x - x_min) / (x_max - x_min) + r_min;
|
|
||||||
return xr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
// find which bar to use based on where we are on the x axis
|
|
||||||
int bar = int(bars_count * fragCoord.x);
|
|
||||||
|
|
||||||
// create a normal along the y axis based on the bar height
|
|
||||||
float x = normalize_C(fragCoord.y, 1.0, 0.0, 0.0, bars[bar]);
|
|
||||||
|
|
||||||
// set color
|
|
||||||
fragColor.r=fg_color.x*x;
|
|
||||||
fragColor.g=fg_color.y*x;
|
|
||||||
fragColor.b=fg_color.z*x;
|
|
||||||
fragColor.a=1.0;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
#version 330
|
|
||||||
|
|
||||||
in vec2 fragCoord;
|
|
||||||
out vec4 fragColor;
|
|
||||||
|
|
||||||
// bar values. defaults to left channels first (low to high), then right (high to low).
|
|
||||||
uniform float bars[512];
|
|
||||||
|
|
||||||
uniform int bars_count; // number of bars (left + right) (configurable)
|
|
||||||
|
|
||||||
uniform vec3 u_resolution; // window resolution, not used here
|
|
||||||
|
|
||||||
//colors, configurable in cava config file
|
|
||||||
uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
|
|
||||||
uniform vec3 fg_color; // foreground color, not used here
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
// find which bar to use based on where we are on the x axis
|
|
||||||
int bar = int(bars_count * fragCoord.x);
|
|
||||||
|
|
||||||
float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0;
|
|
||||||
float y = (bars[bar]) * bar_y;
|
|
||||||
|
|
||||||
float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count;
|
|
||||||
float bar_r = 1.0 - abs((bar_x - 0.5)) * 2;
|
|
||||||
|
|
||||||
bar_r = bar_r * bar_r * 2;
|
|
||||||
|
|
||||||
// set color
|
|
||||||
fragColor.r = fg_color.x * y * bar_r;
|
|
||||||
fragColor.g = fg_color.y * y * bar_r;
|
|
||||||
fragColor.b = fg_color.z * y * bar_r;
|
|
||||||
}
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
#version 330
|
|
||||||
|
|
||||||
|
|
||||||
// Input vertex data, different for all executions of this shader.
|
|
||||||
layout(location = 0) in vec3 vertexPosition_modelspace;
|
|
||||||
|
|
||||||
// Output data ; will be interpolated for each fragment.
|
|
||||||
out vec2 fragCoord;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
gl_Position = vec4(vertexPosition_modelspace,1);
|
|
||||||
fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0;
|
|
||||||
}
|
|
||||||
|
|
@ -1,437 +0,0 @@
|
||||||
# See dunst(5) for all configuration options
|
|
||||||
|
|
||||||
[global]
|
|
||||||
### Display ###
|
|
||||||
|
|
||||||
# Which monitor should the notifications be displayed on.
|
|
||||||
monitor = 0
|
|
||||||
|
|
||||||
# Display notification on focused monitor. Possible modes are:
|
|
||||||
# mouse: follow mouse pointer
|
|
||||||
# keyboard: follow window with keyboard focus
|
|
||||||
# none: don't follow anything
|
|
||||||
#
|
|
||||||
# "keyboard" needs a window manager that exports the
|
|
||||||
# _NET_ACTIVE_WINDOW property.
|
|
||||||
# This should be the case for almost all modern window managers.
|
|
||||||
#
|
|
||||||
# If this option is set to mouse or keyboard, the monitor option
|
|
||||||
# will be ignored.
|
|
||||||
follow = mouse
|
|
||||||
|
|
||||||
### Geometry ###
|
|
||||||
|
|
||||||
# dynamic width from 0 to 300
|
|
||||||
# width = (0, 300)
|
|
||||||
# constant width of 300
|
|
||||||
width = 400
|
|
||||||
|
|
||||||
# The maximum height of a single notification, excluding the frame.
|
|
||||||
height = 300
|
|
||||||
|
|
||||||
# Position the notification in the top right corner
|
|
||||||
origin = top-right
|
|
||||||
|
|
||||||
# Offset from the origin
|
|
||||||
offset = 6x5
|
|
||||||
|
|
||||||
# Scale factor. It is auto-detected if value is 0.
|
|
||||||
scale = 0
|
|
||||||
|
|
||||||
# Maximum number of notification (0 means no limit)
|
|
||||||
notification_limit = 0
|
|
||||||
|
|
||||||
### Progress bar ###
|
|
||||||
|
|
||||||
# Turn on the progess bar. It appears when a progress hint is passed with
|
|
||||||
# for example dunstify -h int:value:12
|
|
||||||
progress_bar = true
|
|
||||||
|
|
||||||
# Set the progress bar height. This includes the frame, so make sure
|
|
||||||
# it's at least twice as big as the frame width.
|
|
||||||
progress_bar_height = 10
|
|
||||||
|
|
||||||
# Set the frame width of the progress bar
|
|
||||||
progress_bar_frame_width = 1
|
|
||||||
|
|
||||||
# Set the minimum width for the progress bar
|
|
||||||
progress_bar_min_width = 150
|
|
||||||
|
|
||||||
# Set the maximum width for the progress bar
|
|
||||||
progress_bar_max_width = 300
|
|
||||||
|
|
||||||
|
|
||||||
# Show how many messages are currently hidden (because of
|
|
||||||
# notification_limit).
|
|
||||||
indicate_hidden = yes
|
|
||||||
|
|
||||||
# The transparency of the window. Range: [0; 100].
|
|
||||||
# This option will only work if a compositing window manager is
|
|
||||||
# present (e.g. xcompmgr, compiz, etc.). (X11 only)
|
|
||||||
transparency = 80
|
|
||||||
|
|
||||||
# Draw a line of "separator_height" pixel height between two
|
|
||||||
# notifications.
|
|
||||||
# Set to 0 to disable.
|
|
||||||
separator_height = 2
|
|
||||||
|
|
||||||
# Padding between text and separator.
|
|
||||||
padding = 8
|
|
||||||
|
|
||||||
# Horizontal padding.
|
|
||||||
horizontal_padding = 8
|
|
||||||
|
|
||||||
# Padding between text and icon.
|
|
||||||
text_icon_padding = 0
|
|
||||||
|
|
||||||
# Defines width in pixels of frame around the notification window.
|
|
||||||
# Set to 0 to disable.
|
|
||||||
frame_width = 0
|
|
||||||
|
|
||||||
# Defines color of the frame around the notification window.
|
|
||||||
frame_color = "#eceff4"
|
|
||||||
|
|
||||||
# Define a color for the separator.
|
|
||||||
# possible values are:
|
|
||||||
# * auto: dunst tries to find a color fitting to the background;
|
|
||||||
# * foreground: use the same color as the foreground;
|
|
||||||
# * frame: use the same color as the frame;
|
|
||||||
# * anything else will be interpreted as a X color.
|
|
||||||
separator_color = frame
|
|
||||||
|
|
||||||
# Sort messages by urgency.
|
|
||||||
sort = yes
|
|
||||||
|
|
||||||
# Don't remove messages, if the user is idle (no mouse or keyboard input)
|
|
||||||
# for longer than idle_threshold seconds.
|
|
||||||
# Set to 0 to disable.
|
|
||||||
# A client can set the 'transient' hint to bypass this. See the rules
|
|
||||||
# section for how to disable this if necessary
|
|
||||||
# idle_threshold = 120
|
|
||||||
|
|
||||||
### Text ###
|
|
||||||
|
|
||||||
# font = JetBrainsMono Nerd Font 10
|
|
||||||
font = Cantarell 12
|
|
||||||
|
|
||||||
# The spacing between lines. If the height is smaller than the
|
|
||||||
# font height, it will get raised to the font height.
|
|
||||||
line_height = 0
|
|
||||||
|
|
||||||
# Possible values are:
|
|
||||||
# full: Allow a small subset of html markup in notifications:
|
|
||||||
# <b>bold</b>
|
|
||||||
# <i>italic</i>
|
|
||||||
# <s>strikethrough</s>
|
|
||||||
# <u>underline</u>
|
|
||||||
#
|
|
||||||
# For a complete reference see
|
|
||||||
# <https://docs.gtk.org/Pango/pango_markup.html>.
|
|
||||||
#
|
|
||||||
# strip: This setting is provided for compatibility with some broken
|
|
||||||
# clients that send markup even though it's not enabled on the
|
|
||||||
# server. Dunst will try to strip the markup but the parsing is
|
|
||||||
# simplistic so using this option outside of matching rules for
|
|
||||||
# specific applications *IS GREATLY DISCOURAGED*.
|
|
||||||
#
|
|
||||||
# no: Disable markup parsing, incoming notifications will be treated as
|
|
||||||
# plain text. Dunst will not advertise that it has the body-markup
|
|
||||||
# capability if this is set as a global setting.
|
|
||||||
#
|
|
||||||
# It's important to note that markup inside the format option will be parsed
|
|
||||||
# regardless of what this is set to.
|
|
||||||
markup = full
|
|
||||||
|
|
||||||
# The format of the message. Possible variables are:
|
|
||||||
# %a appname
|
|
||||||
# %s summary
|
|
||||||
# %b body
|
|
||||||
# %i iconname (including its path)
|
|
||||||
# %I iconname (without its path)
|
|
||||||
# %p progress value if set ([ 0%] to [100%]) or nothing
|
|
||||||
# %n progress value if set without any extra characters
|
|
||||||
# %% Literal %
|
|
||||||
# Markup is allowed
|
|
||||||
format = "<b>%s</b>\n%b"
|
|
||||||
|
|
||||||
# Alignment of message text.
|
|
||||||
# Possible values are "left", "center" and "right".
|
|
||||||
alignment = left
|
|
||||||
|
|
||||||
# Vertical alignment of message text and icon.
|
|
||||||
# Possible values are "top", "center" and "bottom".
|
|
||||||
vertical_alignment = center
|
|
||||||
|
|
||||||
# Show age of message if message is older than show_age_threshold
|
|
||||||
# seconds.
|
|
||||||
# Set to -1 to disable.
|
|
||||||
show_age_threshold = 60
|
|
||||||
|
|
||||||
# Specify where to make an ellipsis in long lines.
|
|
||||||
# Possible values are "start", "middle" and "end".
|
|
||||||
ellipsize = middle
|
|
||||||
|
|
||||||
# Ignore newlines '\n' in notifications.
|
|
||||||
ignore_newline = no
|
|
||||||
|
|
||||||
# Stack together notifications with the same content
|
|
||||||
stack_duplicates = true
|
|
||||||
|
|
||||||
# Hide the count of stacked notifications with the same content
|
|
||||||
hide_duplicate_count = false
|
|
||||||
|
|
||||||
# Display indicators for URLs (U) and actions (A).
|
|
||||||
show_indicators = yes
|
|
||||||
|
|
||||||
### Icons ###
|
|
||||||
|
|
||||||
# Align icons left/right/off
|
|
||||||
icon_position = left
|
|
||||||
|
|
||||||
# Scale small icons up to this size, set to 0 to disable. Helpful
|
|
||||||
# for e.g. small files or high-dpi screens. In case of conflict,
|
|
||||||
# max_icon_size takes precedence over this.
|
|
||||||
min_icon_size = 40
|
|
||||||
|
|
||||||
# Scale larger icons down to this size, set to 0 to disable
|
|
||||||
max_icon_size = 70
|
|
||||||
|
|
||||||
# Paths to default icons.
|
|
||||||
icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
|
|
||||||
|
|
||||||
### History ###
|
|
||||||
|
|
||||||
# Should a notification popped up from history be sticky or timeout
|
|
||||||
# as if it would normally do.
|
|
||||||
sticky_history = yes
|
|
||||||
|
|
||||||
# Maximum amount of notifications kept in history
|
|
||||||
history_length = 20
|
|
||||||
|
|
||||||
### Misc/Advanced ###
|
|
||||||
|
|
||||||
# dmenu path.
|
|
||||||
dmenu = /usr/bin/dmenu -p dunst:
|
|
||||||
|
|
||||||
# Browser for opening urls in context menu.
|
|
||||||
browser = /usr/bin/xdg-open
|
|
||||||
|
|
||||||
# Always run rule-defined scripts, even if the notification is suppressed
|
|
||||||
always_run_script = true
|
|
||||||
|
|
||||||
# Define the title of the windows spawned by dunst
|
|
||||||
title = Dunst
|
|
||||||
|
|
||||||
# Define the class of the windows spawned by dunst
|
|
||||||
class = Dunst
|
|
||||||
|
|
||||||
# Define the corner radius of the notification window
|
|
||||||
# in pixel size. If the radius is 0, you have no rounded
|
|
||||||
# corners.
|
|
||||||
# The radius will be automatically lowered if it exceeds half of the
|
|
||||||
# notification height to avoid clipping text and/or icons.
|
|
||||||
corner_radius = 3
|
|
||||||
|
|
||||||
# Ignore the dbus closeNotification message.
|
|
||||||
# Useful to enforce the timeout set by dunst configuration. Without this
|
|
||||||
# parameter, an application may close the notification sent before the
|
|
||||||
# user defined timeout.
|
|
||||||
ignore_dbusclose = false
|
|
||||||
|
|
||||||
### Wayland ###
|
|
||||||
# These settings are Wayland-specific. They have no effect when using X11
|
|
||||||
|
|
||||||
# Uncomment this if you want to let notications appear under fullscreen
|
|
||||||
# applications (default: overlay)
|
|
||||||
# layer = top
|
|
||||||
|
|
||||||
# Set this to true to use X11 output on Wayland.
|
|
||||||
force_xwayland = false
|
|
||||||
|
|
||||||
### Legacy
|
|
||||||
|
|
||||||
# Use the Xinerama extension instead of RandR for multi-monitor support.
|
|
||||||
# This setting is provided for compatibility with older nVidia drivers that
|
|
||||||
# do not support RandR and using it on systems that support RandR is highly
|
|
||||||
# discouraged.
|
|
||||||
#
|
|
||||||
# By enabling this setting dunst will not be able to detect when a monitor
|
|
||||||
# is connected or disconnected which might break follow mode if the screen
|
|
||||||
# layout changes.
|
|
||||||
force_xinerama = false
|
|
||||||
|
|
||||||
### mouse
|
|
||||||
|
|
||||||
# Defines list of actions for each mouse event
|
|
||||||
# Possible values are:
|
|
||||||
# * none: Don't do anything.
|
|
||||||
# * do_action: Invoke the action determined by the action_name rule. If there is no
|
|
||||||
# such action, open the context menu.
|
|
||||||
# * open_url: If the notification has exactly one url, open it. If there are multiple
|
|
||||||
# ones, open the context menu.
|
|
||||||
# * close_current: Close current notification.
|
|
||||||
# * close_all: Close all notifications.
|
|
||||||
# * context: Open context menu for the notification.
|
|
||||||
# * context_all: Open context menu for all notifications.
|
|
||||||
# These values can be strung together for each mouse event, and
|
|
||||||
# will be executed in sequence.
|
|
||||||
mouse_left_click = close_current
|
|
||||||
mouse_middle_click = do_action, close_current
|
|
||||||
mouse_right_click = close_all
|
|
||||||
|
|
||||||
# Experimental features that may or may not work correctly. Do not expect them
|
|
||||||
# to have a consistent behaviour across releases.
|
|
||||||
[experimental]
|
|
||||||
# Calculate the dpi to use on a per-monitor basis.
|
|
||||||
# If this setting is enabled the Xft.dpi value will be ignored and instead
|
|
||||||
# dunst will attempt to calculate an appropriate dpi value for each monitor
|
|
||||||
# using the resolution and physical size. This might be useful in setups
|
|
||||||
# where there are multiple screens with very different dpi values.
|
|
||||||
per_monitor_dpi = false
|
|
||||||
|
|
||||||
|
|
||||||
[urgency_low]
|
|
||||||
# IMPORTANT: colors have to be defined in quotation marks.
|
|
||||||
# Otherwise the "#" and following would be interpreted as a comment.
|
|
||||||
background = "#2E3440"
|
|
||||||
foreground = "#CACFD2"
|
|
||||||
timeout = 10
|
|
||||||
# Icon for notifications with low urgency, uncomment to enable
|
|
||||||
#new_icon = /path/to/icon
|
|
||||||
|
|
||||||
[urgency_normal]
|
|
||||||
background = "#2E3440"
|
|
||||||
foreground = "#CACFD2"
|
|
||||||
timeout = 10
|
|
||||||
# Icon for notifications with normal urgency, uncomment to enable
|
|
||||||
#new_icon = /path/to/icon
|
|
||||||
|
|
||||||
[urgency_critical]
|
|
||||||
background = "#E67E80"
|
|
||||||
foreground = "#CACFD2"
|
|
||||||
frame_color = "#E67E80"
|
|
||||||
timeout = 0
|
|
||||||
# Icon for notifications with critical urgency, uncomment to enable
|
|
||||||
#new_icon = /path/to/icon
|
|
||||||
|
|
||||||
# Every section that isn't one of the above is interpreted as a rules to
|
|
||||||
# override settings for certain messages.
|
|
||||||
#
|
|
||||||
# Messages can be matched by
|
|
||||||
# appname (discouraged, see desktop_entry)
|
|
||||||
# body
|
|
||||||
# category
|
|
||||||
# desktop_entry
|
|
||||||
# icon
|
|
||||||
# match_transient
|
|
||||||
# msg_urgency
|
|
||||||
# stack_tag
|
|
||||||
# summary
|
|
||||||
#
|
|
||||||
# and you can override the
|
|
||||||
# background
|
|
||||||
# foreground
|
|
||||||
# format
|
|
||||||
# frame_color
|
|
||||||
# fullscreen
|
|
||||||
# new_icon
|
|
||||||
# set_stack_tag
|
|
||||||
# set_transient
|
|
||||||
# set_category
|
|
||||||
# timeout
|
|
||||||
# urgency
|
|
||||||
# skip_display
|
|
||||||
# history_ignore
|
|
||||||
# action_name
|
|
||||||
# word_wrap
|
|
||||||
# ellipsize
|
|
||||||
# alignment
|
|
||||||
#
|
|
||||||
# Shell-like globbing will get expanded.
|
|
||||||
#
|
|
||||||
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
|
|
||||||
# GLib based applications export their desktop-entry name. In comparison to the appname,
|
|
||||||
# the desktop-entry won't get localized.
|
|
||||||
#
|
|
||||||
# SCRIPTING
|
|
||||||
# You can specify a script that gets run when the rule matches by
|
|
||||||
# setting the "script" option.
|
|
||||||
# The script will be called as follows:
|
|
||||||
# script appname summary body icon urgency
|
|
||||||
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
|
|
||||||
#
|
|
||||||
# NOTE: It might be helpful to run dunst -print in a terminal in order
|
|
||||||
# to find fitting options for rules.
|
|
||||||
|
|
||||||
# Disable the transient hint so that idle_threshold cannot be bypassed from the
|
|
||||||
# client
|
|
||||||
#[transient_disable]
|
|
||||||
# match_transient = yes
|
|
||||||
# set_transient = no
|
|
||||||
#
|
|
||||||
# Make the handling of transient notifications more strict by making them not
|
|
||||||
# be placed in history.
|
|
||||||
#[transient_history_ignore]
|
|
||||||
# match_transient = yes
|
|
||||||
# history_ignore = yes
|
|
||||||
|
|
||||||
# fullscreen values
|
|
||||||
# show: show the notifications, regardless if there is a fullscreen window opened
|
|
||||||
# delay: displays the new notification, if there is no fullscreen window active
|
|
||||||
# If the notification is already drawn, it won't get undrawn.
|
|
||||||
# pushback: same as delay, but when switching into fullscreen, the notification will get
|
|
||||||
# withdrawn from screen again and will get delayed like a new notification
|
|
||||||
#[fullscreen_delay_everything]
|
|
||||||
# fullscreen = delay
|
|
||||||
#[fullscreen_show_critical]
|
|
||||||
# msg_urgency = critical
|
|
||||||
# fullscreen = show
|
|
||||||
|
|
||||||
#[espeak]
|
|
||||||
# summary = "*"
|
|
||||||
# script = dunst_espeak.sh
|
|
||||||
|
|
||||||
#[script-test]
|
|
||||||
# summary = "*script*"
|
|
||||||
# script = dunst_test.sh
|
|
||||||
|
|
||||||
#[ignore]
|
|
||||||
# # This notification will not be displayed
|
|
||||||
# summary = "foobar"
|
|
||||||
# skip_display = true
|
|
||||||
|
|
||||||
#[history-ignore]
|
|
||||||
# # This notification will not be saved in history
|
|
||||||
# summary = "foobar"
|
|
||||||
# history_ignore = yes
|
|
||||||
|
|
||||||
#[skip-display]
|
|
||||||
# # This notification will not be displayed, but will be included in the history
|
|
||||||
# summary = "foobar"
|
|
||||||
# skip_display = yes
|
|
||||||
|
|
||||||
#[signed_on]
|
|
||||||
# appname = Pidgin
|
|
||||||
# summary = "*signed on*"
|
|
||||||
# urgency = low
|
|
||||||
#
|
|
||||||
#[signed_off]
|
|
||||||
# appname = Pidgin
|
|
||||||
# summary = *signed off*
|
|
||||||
# urgency = low
|
|
||||||
#
|
|
||||||
#[says]
|
|
||||||
# appname = Pidgin
|
|
||||||
# summary = *says*
|
|
||||||
# urgency = critical
|
|
||||||
#
|
|
||||||
#[twitter]
|
|
||||||
# appname = Pidgin
|
|
||||||
# summary = *twitter.com*
|
|
||||||
# urgency = normal
|
|
||||||
#
|
|
||||||
#[stack-volumes]
|
|
||||||
# appname = "some_volume_notifiers"
|
|
||||||
# set_stack_tag = "volume"
|
|
||||||
#
|
|
||||||
# vim: ft=cfg
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
https://git.sr.ht/~robertgzr/dotfiles/tree/master/item/.config/waybar/config.jsonc
|
|
||||||
|
|
||||||
https://github.com/mylinuxforwork/dotfiles/blob/main/share/dotfiles/.config/hypr/hyprland.conf
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
|
|
||||||
# Environment variables. See https://wiki.hyprland.org/Configuring/Environment-variables/
|
|
||||||
|
|
||||||
# Set your defaults here
|
|
||||||
env = EDITOR,nvim #default editor
|
|
||||||
|
|
||||||
#environment-variables
|
|
||||||
env = CLUTTER_BACKEND,wayland
|
|
||||||
env = GDK_BACKEND,wayland,x11
|
|
||||||
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
|
|
||||||
env = QT_QPA_PLATFORM,wayland;xcb
|
|
||||||
env = QT_QPA_PLATFORMTHEME,qt5ct
|
|
||||||
env = QT_QPA_PLATFORMTHEME,qt6ct
|
|
||||||
env = QT_SCALE_FACTOR,1
|
|
||||||
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
|
|
||||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
|
||||||
env = XDG_SESSION_DESKTOP,Hyprland
|
|
||||||
env = XDG_SESSION_TYPE,wayland
|
|
||||||
|
|
||||||
# xwayland apps scale fix (useful if you are use monitor scaling)
|
|
||||||
# see https://wiki.hyprland.org/Configuring/XWayland/
|
|
||||||
# toolkit-specific scale
|
|
||||||
env = GDK_SCALE,1
|
|
||||||
|
|
||||||
# firefox
|
|
||||||
env = MOZ_ENABLE_WAYLAND,1
|
|
||||||
|
|
||||||
# electron >28 apps (may help)
|
|
||||||
env = ELECTRON_OZONE_PLATFORM_HINT,auto
|
|
||||||
|
|
||||||
# NVIDIA
|
|
||||||
# This is from Hyprland Wiki. Below will be activated nvidia gpu detected
|
|
||||||
# See hyprland wiki https://wiki.hyprland.org/Nvidia/#environment-variables
|
|
||||||
env = LIBVA_DRIVER_NAME,nvidia
|
|
||||||
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
|
|
||||||
env = NVD_BACKEND,direct
|
|
||||||
|
|
||||||
# additional ENV's for nvidia. Caution, activate with care
|
|
||||||
#env = GBM_BACKEND,nvidia-drm
|
|
||||||
|
|
||||||
#env = __NV_PRIME_RENDER_OFFLOAD,1
|
|
||||||
#env = __VK_LAYER_NV_optimus,NVIDIA_only
|
|
||||||
#env = WLR_DRM_NO_ATOMIC,1
|
|
||||||
|
|
||||||
# FOR VM and POSSIBLY NVIDIA
|
|
||||||
# LIBGL_ALWAYS_SOFTWARE software mesa rendering
|
|
||||||
#env = LIBGL_ALWAYS_SOFTWARE,1
|
|
||||||
#env = WLR_RENDERER_ALLOW_SOFTWARE,1
|
|
||||||
|
|
||||||
# nvidia firefox (for hardware acceleration on FF)?
|
|
||||||
# check this post https://github.com/elFarto/nvidia-vaapi-driver#configuration
|
|
||||||
env = MOZ_DISABLE_RDD_SANDBOX,1
|
|
||||||
env = EGL_PLATFORM,wayland
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# Rofi menu for Quick Edit/View of Settings (SUPER E)
|
|
||||||
|
|
||||||
# Define preferred text editor and terminal
|
|
||||||
edit=${EDITOR:-nvim}
|
|
||||||
tty=kitty
|
|
||||||
|
|
||||||
# Paths to configuration directories
|
|
||||||
configs="$HOME/.config/hypr/configs"
|
|
||||||
UserConfigs="$HOME/.config/hypr/UserConfigs"
|
|
||||||
|
|
||||||
# Function to display the menu options
|
|
||||||
menu() {
|
|
||||||
cat <<EOF
|
|
||||||
1. Edit Env-variables
|
|
||||||
2. Edit Window-Rules
|
|
||||||
3. Edit Startup_Apps
|
|
||||||
4. Edit User-Keybinds
|
|
||||||
5. Edit Monitors
|
|
||||||
6. Edit Laptop-Keybinds
|
|
||||||
7. Edit User-Settings
|
|
||||||
8. Edit Decorations & Animations
|
|
||||||
9. Edit Workspace-Rules
|
|
||||||
10. Edit Default-Settings
|
|
||||||
11. Edit Default-Keybinds
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# Main function to handle menu selection
|
|
||||||
main() {
|
|
||||||
choice=$(menu | rofi -i -dmenu -config ~/.config/rofi/config-compact.rasi | cut -d. -f1)
|
|
||||||
|
|
||||||
# Map choices to corresponding files
|
|
||||||
case $choice in
|
|
||||||
1) file="$UserConfigs/ENVariables.conf" ;;
|
|
||||||
2) file="$UserConfigs/WindowRules.conf" ;;
|
|
||||||
3) file="$UserConfigs/Startup_Apps.conf" ;;
|
|
||||||
4) file="$UserConfigs/UserKeybinds.conf" ;;
|
|
||||||
5) file="$UserConfigs/Monitors.conf" ;;
|
|
||||||
6) file="$UserConfigs/Laptops.conf" ;;
|
|
||||||
7) file="$UserConfigs/UserSettings.conf" ;;
|
|
||||||
8) file="$UserConfigs/UserDecorAnimations.conf" ;;
|
|
||||||
9) file="$UserConfigs/WorkspaceRules.conf" ;;
|
|
||||||
10) file="$configs/Settings.conf" ;;
|
|
||||||
11) file="$configs/Keybinds.conf" ;;
|
|
||||||
*) return ;; # Do nothing for invalid choices
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Open the selected file in the terminal with the text editor
|
|
||||||
$tty -e $edit "$file"
|
|
||||||
}
|
|
||||||
|
|
||||||
main
|
|
||||||
|
|
@ -1,113 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# For Rofi Beats to play online Music or Locally save media files
|
|
||||||
|
|
||||||
# Directory local music folder
|
|
||||||
mDIR="$HOME/Music/"
|
|
||||||
|
|
||||||
# Directory for icons
|
|
||||||
iDIR="$HOME/.config/swaync/icons"
|
|
||||||
|
|
||||||
# Online Stations. Edit as required
|
|
||||||
declare -A online_music=(
|
|
||||||
["Radio - Lofi Girl 🎧🎶"]="https://play.streamafrica.net/lofiradio"
|
|
||||||
["Radio - Chillhop 🎧🎶"]="http://stream.zeno.fm/fyn8eh3h5f8uv"
|
|
||||||
["FM - Easy Rock 96.3 📻🎶"]="https://radio-stations-philippines.com/easy-rock"
|
|
||||||
["FM - Love Radio 90.7 📻🎶"]="https://radio-stations-philippines.com/love"
|
|
||||||
["FM - WRock - CEBU 96.3 📻🎶"]="https://onlineradio.ph/126-96-3-wrock.html"
|
|
||||||
["FM - Fresh Philippines 📻🎶"]="https://onlineradio.ph/553-fresh-fm.html"
|
|
||||||
["YT - Wish 107.5 YT Pinoy HipHop 📻🎶"]="https://youtube.com/playlist?list=PLkrzfEDjeYJnmgMYwCKid4XIFqUKBVWEs&si=vahW_noh4UDJ5d37"
|
|
||||||
["YT - Top Youtube Music 2023 📹🎶"]="https://youtube.com/playlist?list=PLDIoUOhQQPlXr63I_vwF9GD8sAKh77dWU&si=y7qNeEVFNgA-XxKy"
|
|
||||||
["YT - Wish 107.5 YT Wishclusives 📹🎶"]="https://youtube.com/playlist?list=PLkrzfEDjeYJn5B22H9HOWP3Kxxs-DkPSM&si=d_Ld2OKhGvpH48WO"
|
|
||||||
["YT - Relaxing Music 📹🎶"]="https://youtube.com/playlist?list=PLMIbmfP_9vb8BCxRoraJpoo4q1yMFg4CE"
|
|
||||||
["YT - Youtube Remix 📹🎶"]="https://youtube.com/playlist?list=PLeqTkIUlrZXlSNn3tcXAa-zbo95j0iN-0"
|
|
||||||
["YT - Korean Drama OST 📹🎶"]="https://youtube.com/playlist?list=PLUge_o9AIFp4HuA-A3e3ZqENh63LuRRlQ"
|
|
||||||
["YT - AfroBeatz 2024 📹🎶"]="https://www.youtube.com/watch?v=7uB-Eh9XVZQ"
|
|
||||||
["YT - Relaxing Piano Jazz Music 🎹🎶"]="https://youtu.be/85UEqRat6E4?si=jXQL1Yp2VP_G6NSn"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Populate local_music array with files from music directory and subdirectories
|
|
||||||
populate_local_music() {
|
|
||||||
local_music=()
|
|
||||||
filenames=()
|
|
||||||
while IFS= read -r file; do
|
|
||||||
local_music+=("$file")
|
|
||||||
filenames+=("$(basename "$file")")
|
|
||||||
done < <(find "$mDIR" -type f \( -iname "*.mp3" -o -iname "*.flac" -o -iname "*.wav" -o -iname "*.ogg" -o -iname "*.mp4" \))
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function for displaying notifications
|
|
||||||
notification() {
|
|
||||||
notify-send -u normal -i "$iDIR/music.png" "Playing: $@"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Main function for playing local music
|
|
||||||
play_local_music() {
|
|
||||||
populate_local_music
|
|
||||||
|
|
||||||
# Prompt the user to select a song
|
|
||||||
choice=$(printf "%s\n" "${filenames[@]}" | rofi -i -dmenu -config ~/.config/rofi/config-rofi-Beats.rasi -p "Local Music")
|
|
||||||
|
|
||||||
if [ -z "$choice" ]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Find the corresponding file path based on user's choice and set that to play the song then continue on the list
|
|
||||||
for (( i=0; i<"${#filenames[@]}"; ++i )); do
|
|
||||||
if [ "${filenames[$i]}" = "$choice" ]; then
|
|
||||||
|
|
||||||
notification "$choice"
|
|
||||||
|
|
||||||
# Play the selected local music file using mpv
|
|
||||||
mpv --playlist-start="$i" --loop-playlist --vid=no "${local_music[@]}"
|
|
||||||
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# Main function for shuffling local music
|
|
||||||
shuffle_local_music() {
|
|
||||||
notification "Shuffle local music"
|
|
||||||
|
|
||||||
# Play music in $mDIR on shuffle
|
|
||||||
mpv --shuffle --loop-playlist --vid=no "$mDIR"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Main function for playing online music
|
|
||||||
play_online_music() {
|
|
||||||
choice=$(printf "%s\n" "${!online_music[@]}" | rofi -i -dmenu -config ~/.config/rofi/config-rofi-Beats.rasi -p "Online Music")
|
|
||||||
|
|
||||||
if [ -z "$choice" ]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
link="${online_music[$choice]}"
|
|
||||||
|
|
||||||
notification "$choice"
|
|
||||||
|
|
||||||
# Play the selected online music using mpv
|
|
||||||
mpv --shuffle --vid=no "$link"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check if an online music process is running and send a notification, otherwise run the main function
|
|
||||||
pkill mpv && notify-send -u low -i "$iDIR/music.png" "Music stopped" || {
|
|
||||||
|
|
||||||
# Prompt the user to choose between local and online music
|
|
||||||
user_choice=$(printf "Play from Online Stations\nPlay from Music Folder\nShuffle Play from Music Folder" | rofi -dmenu -config ~/.config/rofi/config-rofi-Beats-menu.rasi -p "Select music source")
|
|
||||||
|
|
||||||
case "$user_choice" in
|
|
||||||
"Play from Music Folder")
|
|
||||||
play_local_music
|
|
||||||
;;
|
|
||||||
"Play from Online Stations")
|
|
||||||
play_online_music
|
|
||||||
;;
|
|
||||||
"Shuffle Play from Music Folder")
|
|
||||||
shuffle_local_music
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Invalid choice"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */
|
|
||||||
# /* Calculator (using qalculate) and rofi */
|
|
||||||
# /* Submitted by: https://github.com/JosephArmas */
|
|
||||||
|
|
||||||
rofi_config="$HOME/.config/rofi/config-calc.rasi"
|
|
||||||
|
|
||||||
# Kill Rofi if already running before execution
|
|
||||||
if pgrep -x "rofi" >/dev/null; then
|
|
||||||
pkill rofi
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# main function
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
result=$(
|
|
||||||
rofi -i -dmenu \
|
|
||||||
-config "$rofi_config" \
|
|
||||||
-mesg "$result = $calc_result"
|
|
||||||
)
|
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$result" ]; then
|
|
||||||
calc_result=$(qalc -t "$result")
|
|
||||||
echo "$calc_result" | wl-copy
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# source https://wiki.archlinux.org/title/Hyprland#Using_a_script_to_change_wallpaper_every_X_minutes
|
|
||||||
|
|
||||||
# This script will randomly go through the files of a directory, setting it
|
|
||||||
# up as the wallpaper at regular intervals
|
|
||||||
#
|
|
||||||
# NOTE: this script uses bash (not POSIX shell) for the RANDOM variable
|
|
||||||
|
|
||||||
wallust_refresh=$HOME/.config/hypr/scripts/RefreshNoWaybar.sh
|
|
||||||
|
|
||||||
focused_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}')
|
|
||||||
|
|
||||||
if [[ $# -lt 1 ]] || [[ ! -d $1 ]]; then
|
|
||||||
echo "Usage:
|
|
||||||
$0 <dir containing images>"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Edit below to control the images transition
|
|
||||||
export SWWW_TRANSITION_FPS=60
|
|
||||||
export SWWW_TRANSITION_TYPE=simple
|
|
||||||
|
|
||||||
# This controls (in seconds) when to switch to the next image
|
|
||||||
INTERVAL=1800
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
find "$1" \
|
|
||||||
| while read -r img; do
|
|
||||||
echo "$((RANDOM % 1000)):$img"
|
|
||||||
done \
|
|
||||||
| sort -n | cut -d':' -f2- \
|
|
||||||
| while read -r img; do
|
|
||||||
swww img -o $focused_monitor "$img"
|
|
||||||
$wallust_refresh
|
|
||||||
sleep $INTERVAL
|
|
||||||
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
@ -1,101 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
|
|
||||||
# Wallpaper Effects using ImageMagick
|
|
||||||
# Inspiration from ML4W - Stephan Raabe https://gitlab.com/stephan-raabe/dotfiles
|
|
||||||
|
|
||||||
# Variables
|
|
||||||
current_wallpaper="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current"
|
|
||||||
wallpaper_output="$HOME/.config/hypr/wallpaper_effects/.wallpaper_modified"
|
|
||||||
SCRIPTSDIR="$HOME/.config/hypr/scripts"
|
|
||||||
focused_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}')
|
|
||||||
|
|
||||||
# Directory for swaync
|
|
||||||
iDIR="$HOME/.config/swaync/images"
|
|
||||||
|
|
||||||
# swww transition config
|
|
||||||
FPS=60
|
|
||||||
TYPE="wipe"
|
|
||||||
DURATION=2
|
|
||||||
BEZIER=".43,1.19,1,.4"
|
|
||||||
SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION"
|
|
||||||
|
|
||||||
# Define ImageMagick effects
|
|
||||||
declare -A effects=(
|
|
||||||
["No Effects"]="no-effects"
|
|
||||||
["Black & White"]="magick $current_wallpaper -colorspace gray -sigmoidal-contrast 10,40% $wallpaper_output"
|
|
||||||
["Blurred"]="magick $current_wallpaper -blur 0x10 $wallpaper_output"
|
|
||||||
["Charcoal"]="magick $current_wallpaper -charcoal 0x5 $wallpaper_output"
|
|
||||||
["Edge Detect"]="magick $current_wallpaper -edge 1 $wallpaper_output"
|
|
||||||
["Emboss"]="magick $current_wallpaper -emboss 0x5 $wallpaper_output"
|
|
||||||
["Negate"]="magick $current_wallpaper -negate $wallpaper_output"
|
|
||||||
["Oil Paint"]="magick $current_wallpaper -paint 4 $wallpaper_output"
|
|
||||||
["Posterize"]="magick $current_wallpaper -posterize 4 $wallpaper_output"
|
|
||||||
["Polaroid"]="magick $current_wallpaper -polaroid 0 $wallpaper_output"
|
|
||||||
["Sepia Tone"]="magick $current_wallpaper -sepia-tone 65% $wallpaper_output"
|
|
||||||
["Solarize"]="magick $current_wallpaper -solarize 80% $wallpaper_output"
|
|
||||||
["Sharpen"]="magick $current_wallpaper -sharpen 0x5 $wallpaper_output"
|
|
||||||
["Vignette"]="magick $current_wallpaper -vignette 0x5 $wallpaper_output"
|
|
||||||
["Zoomed"]="magick $current_wallpaper -gravity Center -extent 1:1 $wallpaper_output"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Function to apply no effects
|
|
||||||
no-effects() {
|
|
||||||
swww img -o "$focused_monitor" "$current_wallpaper" $SWWW_PARAMS &
|
|
||||||
# Wait for swww command to complete
|
|
||||||
wait $!
|
|
||||||
# Run other commands after swww
|
|
||||||
wallust run "$current_wallpaper" -s &
|
|
||||||
# Wait to complete
|
|
||||||
wait $!
|
|
||||||
# Refresh rofi, waybar, wallust palettes
|
|
||||||
"${SCRIPTSDIR}/Refresh.sh"
|
|
||||||
notify-send -u low -i "$iDIR/bell.png" "No wallpaper effects"
|
|
||||||
# copying wallpaper for rofi menu
|
|
||||||
cp "$current_wallpaper" "$wallpaper_output"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to run rofi menu
|
|
||||||
main() {
|
|
||||||
# Populate rofi menu options
|
|
||||||
options=("No Effects")
|
|
||||||
for effect in "${!effects[@]}"; do
|
|
||||||
[[ "$effect" != "No Effects" ]] && options+=("$effect")
|
|
||||||
done
|
|
||||||
|
|
||||||
# Show rofi menu and handle user choice
|
|
||||||
choice=$(printf "%s\n" "${options[@]}" | LC_COLLATE=C sort | rofi -dmenu -p "Choose effect" -i -config ~/.config/rofi/config-wallpaper-effect.rasi)
|
|
||||||
|
|
||||||
# Process user choice
|
|
||||||
if [[ -n "$choice" ]]; then
|
|
||||||
if [[ "$choice" == "No Effects" ]]; then
|
|
||||||
no-effects
|
|
||||||
elif [[ "${effects[$choice]+exists}" ]]; then
|
|
||||||
# Apply selected effect
|
|
||||||
notify-send -u normal -i "$iDIR/bell.png" "Applying $choice effects"
|
|
||||||
eval "${effects[$choice]}"
|
|
||||||
# Wait for effects to be applied
|
|
||||||
sleep 1
|
|
||||||
# Execute swww command after image conversion
|
|
||||||
swww img -o "$focused_monitor" "$wallpaper_output" $SWWW_PARAMS &
|
|
||||||
# Wait for swww command to complete
|
|
||||||
wait $!
|
|
||||||
# Wait for other commands to finish
|
|
||||||
wallust run "$wallpaper_output" -s &
|
|
||||||
# Wait for other commands to finish
|
|
||||||
wait $!
|
|
||||||
# Refresh rofi, waybar, wallust palettes
|
|
||||||
"${SCRIPTSDIR}/Refresh.sh"
|
|
||||||
notify-send -u low -i "$iDIR/bell.png" "$choice effects applied"
|
|
||||||
else
|
|
||||||
echo "Effect '$choice' not recognized."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check if rofi is already running and kill it
|
|
||||||
if pidof rofi > /dev/null; then
|
|
||||||
pkill rofi
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
main
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Script for Random Wallpaper ( CTRL ALT W)
|
|
||||||
|
|
||||||
wallDIR="$HOME/Pictures/wallpapers"
|
|
||||||
scriptsDir="$HOME/.config/hypr/scripts"
|
|
||||||
|
|
||||||
focused_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}')
|
|
||||||
|
|
||||||
PICS=($(find ${wallDIR} -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.gif" \)))
|
|
||||||
RANDOMPICS=${PICS[ $RANDOM % ${#PICS[@]} ]}
|
|
||||||
|
|
||||||
|
|
||||||
# Transition config
|
|
||||||
FPS=60
|
|
||||||
TYPE="random"
|
|
||||||
DURATION=1
|
|
||||||
BEZIER=".43,1.19,1,.4"
|
|
||||||
SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER"
|
|
||||||
|
|
||||||
|
|
||||||
swww query || swww-daemon --format xrgb && swww img -o $focused_monitor ${RANDOMPICS} $SWWW_PARAMS
|
|
||||||
|
|
||||||
|
|
||||||
${scriptsDir}/WallustSwww.sh
|
|
||||||
sleep 1
|
|
||||||
${scriptsDir}/Refresh.sh
|
|
||||||
|
|
||||||
|
|
@ -1,110 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */
|
|
||||||
# This script for selecting wallpapers (SUPER W)
|
|
||||||
|
|
||||||
# WALLPAPERS PATH
|
|
||||||
wallDIR="$HOME/Pictures/wallpapers"
|
|
||||||
SCRIPTSDIR="$HOME/.config/hypr/scripts"
|
|
||||||
|
|
||||||
# variables
|
|
||||||
focused_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}')
|
|
||||||
# swww transition config
|
|
||||||
FPS=60
|
|
||||||
TYPE="any"
|
|
||||||
DURATION=2
|
|
||||||
BEZIER=".43,1.19,1,.4"
|
|
||||||
SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION"
|
|
||||||
|
|
||||||
# Check if swaybg is running
|
|
||||||
if pidof swaybg > /dev/null; then
|
|
||||||
pkill swaybg
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Retrieve image files using null delimiter to handle spaces in filenames
|
|
||||||
mapfile -d '' PICS < <(find "${wallDIR}" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" \) -print0)
|
|
||||||
|
|
||||||
RANDOM_PIC="${PICS[$((RANDOM % ${#PICS[@]}))]}"
|
|
||||||
RANDOM_PIC_NAME=". random"
|
|
||||||
|
|
||||||
# Rofi command
|
|
||||||
rofi_command="rofi -i -show -dmenu -config ~/.config/rofi/config-wallpaper.rasi"
|
|
||||||
|
|
||||||
# Sorting Wallpapers
|
|
||||||
menu() {
|
|
||||||
# Sort the PICS array
|
|
||||||
IFS=$'\n' sorted_options=($(sort <<<"${PICS[*]}"))
|
|
||||||
|
|
||||||
# Place ". random" at the beginning with the random picture as an icon
|
|
||||||
printf "%s\x00icon\x1f%s\n" "$RANDOM_PIC_NAME" "$RANDOM_PIC"
|
|
||||||
|
|
||||||
for pic_path in "${sorted_options[@]}"; do
|
|
||||||
pic_name=$(basename "$pic_path")
|
|
||||||
|
|
||||||
# Displaying .gif to indicate animated images
|
|
||||||
if [[ ! "$pic_name" =~ \.gif$ ]]; then
|
|
||||||
printf "%s\x00icon\x1f%s\n" "$(echo "$pic_name" | cut -d. -f1)" "$pic_path"
|
|
||||||
else
|
|
||||||
printf "%s\n" "$pic_name"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# initiate swww if not running
|
|
||||||
swww query || swww-daemon --format xrgb
|
|
||||||
|
|
||||||
# Choice of wallpapers
|
|
||||||
main() {
|
|
||||||
choice=$(menu | $rofi_command)
|
|
||||||
|
|
||||||
# Trim any potential whitespace or hidden characters
|
|
||||||
choice=$(echo "$choice" | xargs)
|
|
||||||
RANDOM_PIC_NAME=$(echo "$RANDOM_PIC_NAME" | xargs)
|
|
||||||
|
|
||||||
# No choice case
|
|
||||||
if [[ -z "$choice" ]]; then
|
|
||||||
echo "No choice selected. Exiting."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Random choice case
|
|
||||||
if [[ "$choice" == "$RANDOM_PIC_NAME" ]]; then
|
|
||||||
swww img -o "$focused_monitor" "$RANDOM_PIC" $SWWW_PARAMS;
|
|
||||||
sleep 0.5
|
|
||||||
"$SCRIPTSDIR/WallustSwww.sh"
|
|
||||||
sleep 0.2
|
|
||||||
"$SCRIPTSDIR/Refresh.sh"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Find the index of the selected file
|
|
||||||
pic_index=-1
|
|
||||||
for i in "${!PICS[@]}"; do
|
|
||||||
filename=$(basename "${PICS[$i]}")
|
|
||||||
if [[ "$filename" == "$choice"* ]]; then
|
|
||||||
pic_index=$i
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ $pic_index -ne -1 ]]; then
|
|
||||||
swww img -o "$focused_monitor" "${PICS[$pic_index]}" $SWWW_PARAMS
|
|
||||||
else
|
|
||||||
echo "Image not found."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check if rofi is already running
|
|
||||||
if pidof rofi > /dev/null; then
|
|
||||||
pkill rofi
|
|
||||||
sleep 1 # Allow some time for rofi to close
|
|
||||||
fi
|
|
||||||
|
|
||||||
main
|
|
||||||
|
|
||||||
sleep 0.5
|
|
||||||
"$SCRIPTSDIR/WallustSwww.sh"
|
|
||||||
|
|
||||||
sleep 0.2
|
|
||||||
"$SCRIPTSDIR/Refresh.sh"
|
|
||||||
|
|
||||||
|
|
@ -1,136 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import subprocess
|
|
||||||
from pyquery import PyQuery # install using `pip install pyquery`
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
|
|
||||||
# original code https://gist.github.com/Surendrajat/ff3876fd2166dd86fb71180f4e9342d7
|
|
||||||
# weather icons
|
|
||||||
weather_icons = {
|
|
||||||
"sunnyDay": "",
|
|
||||||
"clearNight": "",
|
|
||||||
"cloudyFoggyDay": "",
|
|
||||||
"cloudyFoggyNight": "",
|
|
||||||
"rainyDay": "",
|
|
||||||
"rainyNight": "",
|
|
||||||
"snowyIcyDay": "",
|
|
||||||
"snowyIcyNight": "",
|
|
||||||
"severe": "",
|
|
||||||
"default": "",
|
|
||||||
}
|
|
||||||
|
|
||||||
# get location_id
|
|
||||||
# to get your own location_id, go to https://weather.com & search your location.
|
|
||||||
# once you choose your location, you can see the location_id in the URL(64 chars long hex string)
|
|
||||||
# like this: https://weather.com/en-PH/weather/today/l/bca47d1099e762a012b9a139c36f30a0b1e647f69c0c4ac28b537e7ae9c1c200
|
|
||||||
location_id = "356027e85e89a4694c0b4e01b6db1d8f3349b6882964fe3748ef4a0d8abbcf02" # TODO
|
|
||||||
|
|
||||||
# NOTE to change to deg F, change the URL to your preffered location after weather.com
|
|
||||||
# Default is English-Philippines with Busan, South Korea as location_id
|
|
||||||
# get html page
|
|
||||||
url = "https://weather.com/en-PH/weather/today/l/" + location_id
|
|
||||||
html_data = PyQuery(url=url)
|
|
||||||
|
|
||||||
# current temperature
|
|
||||||
temp = html_data("span[data-testid='TemperatureValue']").eq(0).text()
|
|
||||||
# print(temp)
|
|
||||||
|
|
||||||
# current status phrase
|
|
||||||
status = html_data("div[data-testid='wxPhrase']").text()
|
|
||||||
status = f"{status[:16]}.." if len(status) > 17 else status
|
|
||||||
# print(status)
|
|
||||||
|
|
||||||
# status code
|
|
||||||
status_code = html_data("#regionHeader").attr("class").split(" ")[2].split("-")[2]
|
|
||||||
# print(status_code)
|
|
||||||
|
|
||||||
# status icon
|
|
||||||
icon = (
|
|
||||||
weather_icons[status_code]
|
|
||||||
if status_code in weather_icons
|
|
||||||
else weather_icons["default"]
|
|
||||||
)
|
|
||||||
# print(icon)
|
|
||||||
|
|
||||||
# temperature feels like
|
|
||||||
temp_feel = html_data(
|
|
||||||
"div[data-testid='FeelsLikeSection'] > span > span[data-testid='TemperatureValue']"
|
|
||||||
).text()
|
|
||||||
temp_feel_text = f"Feels like {temp_feel}c"
|
|
||||||
# print(temp_feel_text)
|
|
||||||
|
|
||||||
# min-max temperature
|
|
||||||
temp_min = (
|
|
||||||
html_data("div[data-testid='wxData'] > span[data-testid='TemperatureValue']")
|
|
||||||
.eq(1)
|
|
||||||
.text()
|
|
||||||
)
|
|
||||||
temp_max = (
|
|
||||||
html_data("div[data-testid='wxData'] > span[data-testid='TemperatureValue']")
|
|
||||||
.eq(0)
|
|
||||||
.text()
|
|
||||||
)
|
|
||||||
temp_min_max = f" {temp_min}\t\t {temp_max}"
|
|
||||||
# print(temp_min_max)
|
|
||||||
|
|
||||||
# wind speed
|
|
||||||
wind_speed = html_data("span[data-testid='Wind']").text().split("\n")[1]
|
|
||||||
wind_text = f" {wind_speed}"
|
|
||||||
# print(wind_text)
|
|
||||||
|
|
||||||
# humidity
|
|
||||||
humidity = html_data("span[data-testid='PercentageValue']").text()
|
|
||||||
humidity_text = f" {humidity}"
|
|
||||||
# print(humidity_text)
|
|
||||||
|
|
||||||
# visibility
|
|
||||||
visbility = html_data("span[data-testid='VisibilityValue']").text()
|
|
||||||
visbility_text = f" {visbility}"
|
|
||||||
# print(visbility_text)
|
|
||||||
|
|
||||||
# air quality index
|
|
||||||
air_quality_index = html_data("text[data-testid='DonutChartValue']").text()
|
|
||||||
# print(air_quality_index)
|
|
||||||
|
|
||||||
# hourly rain prediction
|
|
||||||
prediction = html_data("section[aria-label='Hourly Forecast']")(
|
|
||||||
"div[data-testid='SegmentPrecipPercentage'] > span"
|
|
||||||
).text()
|
|
||||||
prediction = prediction.replace("Chance of Rain", "")
|
|
||||||
prediction = f"\n\n (hourly) {prediction}" if len(prediction) > 0 else prediction
|
|
||||||
# print(prediction)
|
|
||||||
|
|
||||||
# tooltip text
|
|
||||||
tooltip_text = str.format(
|
|
||||||
"\t\t{}\t\t\n{}\n{}\n{}\n\n{}\n{}\n{}{}",
|
|
||||||
f'<span size="xx-large">{temp}</span>',
|
|
||||||
f"<big> {icon}</big>",
|
|
||||||
f"<b>{status}</b>",
|
|
||||||
f"<small>{temp_feel_text}</small>",
|
|
||||||
f"<b>{temp_min_max}</b>",
|
|
||||||
f"{wind_text}\t{humidity_text}",
|
|
||||||
f"{visbility_text}\tAQI {air_quality_index}",
|
|
||||||
f"<i> {prediction}</i>",
|
|
||||||
)
|
|
||||||
|
|
||||||
# print waybar module data
|
|
||||||
out_data = {
|
|
||||||
"text": f"{icon} {temp}",
|
|
||||||
"alt": status,
|
|
||||||
"tooltip": tooltip_text,
|
|
||||||
"class": status_code,
|
|
||||||
}
|
|
||||||
print(json.dumps(out_data))
|
|
||||||
|
|
||||||
simple_weather =f"{icon} {status}\n" + \
|
|
||||||
f" {temp} ({temp_feel_text})\n" + \
|
|
||||||
f"{wind_text} \n" + \
|
|
||||||
f"{humidity_text} \n" + \
|
|
||||||
f"{visbility_text} AQI{air_quality_index}\n"
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(os.path.expanduser("~/.cache/.weather_cache"), "w") as file:
|
|
||||||
file.write(simple_weather)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
@ -1,84 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
city=Ottawa
|
|
||||||
cachedir=~/.cache/rbn
|
|
||||||
cachefile=${0##*/}-$1
|
|
||||||
|
|
||||||
if [ ! -d $cachedir ]; then
|
|
||||||
mkdir -p $cachedir
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f $cachedir/$cachefile ]; then
|
|
||||||
touch $cachedir/$cachefile
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Save current IFS
|
|
||||||
SAVEIFS=$IFS
|
|
||||||
# Change IFS to new line.
|
|
||||||
IFS=$'\n'
|
|
||||||
|
|
||||||
cacheage=$(($(date +%s) - $(stat -c '%Y' "$cachedir/$cachefile")))
|
|
||||||
if [ $cacheage -gt 1740 ] || [ ! -s $cachedir/$cachefile ]; then
|
|
||||||
data=($(curl -s https://en.wttr.in/"$city"$1\?0qnT 2>&1))
|
|
||||||
echo ${data[0]} | cut -f1 -d, > $cachedir/$cachefile
|
|
||||||
echo ${data[1]} | sed -E 's/^.{15}//' >> $cachedir/$cachefile
|
|
||||||
echo ${data[2]} | sed -E 's/^.{15}//' >> $cachedir/$cachefile
|
|
||||||
fi
|
|
||||||
|
|
||||||
weather=($(cat $cachedir/$cachefile))
|
|
||||||
|
|
||||||
# Restore IFSClear
|
|
||||||
IFS=$SAVEIFS
|
|
||||||
|
|
||||||
temperature=$(echo ${weather[2]} | sed -E 's/([[:digit:]]+)\.\./\1 to /g')
|
|
||||||
|
|
||||||
#echo ${weather[1]##*,}
|
|
||||||
|
|
||||||
# https://fontawesome.com/icons?s=solid&c=weather
|
|
||||||
case $(echo ${weather[1]##*,} | tr '[:upper:]' '[:lower:]') in
|
|
||||||
"clear" | "sunny")
|
|
||||||
condition=""
|
|
||||||
;;
|
|
||||||
"partly cloudy")
|
|
||||||
condition=""
|
|
||||||
;;
|
|
||||||
"cloudy")
|
|
||||||
condition=""
|
|
||||||
;;
|
|
||||||
"overcast")
|
|
||||||
condition=""
|
|
||||||
;;
|
|
||||||
"fog" | "freezing fog")
|
|
||||||
condition=""
|
|
||||||
;;
|
|
||||||
"patchy rain possible" | "patchy light drizzle" | "light drizzle" | "patchy light rain" | "light rain" | "light rain shower" | "mist" | "rain")
|
|
||||||
condition=""
|
|
||||||
;;
|
|
||||||
"moderate rain at times" | "moderate rain" | "heavy rain at times" | "heavy rain" | "moderate or heavy rain shower" | "torrential rain shower" | "rain shower")
|
|
||||||
condition=""
|
|
||||||
;;
|
|
||||||
"patchy snow possible" | "patchy sleet possible" | "patchy freezing drizzle possible" | "freezing drizzle" | "heavy freezing drizzle" | "light freezing rain" | "moderate or heavy freezing rain" | "light sleet" | "ice pellets" | "light sleet showers" | "moderate or heavy sleet showers")
|
|
||||||
condition=""
|
|
||||||
;;
|
|
||||||
"blowing snow" | "moderate or heavy sleet" | "patchy light snow" | "light snow" | "light snow showers")
|
|
||||||
condition=""
|
|
||||||
;;
|
|
||||||
"blizzard" | "patchy moderate snow" | "moderate snow" | "patchy heavy snow" | "heavy snow" | "moderate or heavy snow with thunder" | "moderate or heavy snow showers")
|
|
||||||
condition=""
|
|
||||||
;;
|
|
||||||
"thundery outbreaks possible" | "patchy light rain with thunder" | "moderate or heavy rain with thunder" | "patchy light snow with thunder")
|
|
||||||
condition=""
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
condition=""
|
|
||||||
echo -e "{\"text\":\""$condition"\", \"alt\":\""${weather[0]}"\", \"tooltip\":\""${weather[0]}: $temperature ${weather[1]}"\"}"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
#echo $temp $condition
|
|
||||||
|
|
||||||
echo -e "{\"text\":\""$temperature $condition"\", \"alt\":\""${weather[0]}"\", \"tooltip\":\""${weather[0]}: $temperature ${weather[1]}"\"}"
|
|
||||||
|
|
||||||
cached_weather=" $temperature \n$condition ${weather[1]}"
|
|
||||||
|
|
||||||
echo -e $cached_weather > ~/.cache/.weather_cache
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
themes_dir="$HOME/.oh-my-zsh/themes"
|
|
||||||
file_extension=".zsh-theme"
|
|
||||||
|
|
||||||
themes_array=($(find "$themes_dir" -type f -name "*$file_extension" -exec basename {} \; | sed -e "s/$file_extension//"))
|
|
||||||
|
|
||||||
rofi_command="rofi -i -dmenu -config ~/.config/rofi/config-zsh-theme.rasi"
|
|
||||||
|
|
||||||
menu() {
|
|
||||||
for theme in "${themes_array[@]}"; do
|
|
||||||
echo "$theme"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
main() {
|
|
||||||
choice=$(menu | ${rofi_command})
|
|
||||||
|
|
||||||
# if nothing selected, script wont change anything
|
|
||||||
if [ -z "$choice" ]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
zsh_path="$HOME/.zshrc"
|
|
||||||
var_name="ZSH_THEME"
|
|
||||||
for i in "${themes_array[@]}"; do
|
|
||||||
if [[ "$i" == "$choice"* ]]; then
|
|
||||||
if [ -f "$zsh_path" ]; then
|
|
||||||
sed -i "s/^$var_name=.*/$var_name=\"$i\"/" "$zsh_path"
|
|
||||||
else
|
|
||||||
echo "File not found"
|
|
||||||
fi
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
main
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
#
|
|
||||||
# _ _ _
|
|
||||||
# | |__ _ _ _ __ _ __| | __ _ _ __ __| |
|
|
||||||
# | '_ \| | | | '_ \| '__| |/ _` | '_ \ / _` |
|
|
||||||
# | | | | |_| | |_) | | | | (_| | | | | (_| |
|
|
||||||
# |_| |_|\__, | .__/|_| |_|\__,_|_| |_|\__,_|
|
|
||||||
# |___/|_|
|
|
||||||
#
|
|
||||||
|
|
||||||
# Monitor
|
|
||||||
source = ~/.config/hypr/conf/monitor.conf
|
|
||||||
|
|
||||||
# Cursor
|
|
||||||
source = ~/.config/hypr/conf/cursor.conf
|
|
||||||
|
|
||||||
# Environment
|
|
||||||
source = ~/.config/hypr/conf/environment.conf
|
|
||||||
|
|
||||||
# Keyboard
|
|
||||||
source = ~/.config/hypr/conf/keyboard.conf
|
|
||||||
|
|
||||||
# pywal color file
|
|
||||||
source = ~/.cache/wal/color-hyprland.conf
|
|
||||||
|
|
||||||
# Autostart
|
|
||||||
source = ~/.config/hypr/conf/autostart.conf
|
|
||||||
|
|
||||||
# Load config fifles
|
|
||||||
source = ~/.config/hypr/conf/window.conf
|
|
||||||
source = ~/.config/hypr/conf/decoration.conf
|
|
||||||
source = ~/.config/hypr/conf/layout.conf
|
|
||||||
source = ~/.config/hypr/conf/misc.conf
|
|
||||||
source = ~/.config/hypr/conf/keybinding.conf
|
|
||||||
source = ~/.config/hypr/conf/windowrule.conf
|
|
||||||
|
|
||||||
# Animation
|
|
||||||
source = ~/.config/hypr/conf/animation.conf
|
|
||||||
|
|
||||||
# Custom
|
|
||||||
source = ~/.config/hypr/conf/custom.conf
|
|
||||||
|
|
||||||
# Environment for xdg-desktop-portal-hyprland
|
|
||||||
exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
# -----------------------------------------------------
|
|
||||||
# Autostart
|
|
||||||
# -----------------------------------------------------
|
|
||||||
|
|
||||||
# Setup XDG for screen sharing
|
|
||||||
exec-once = ~/.config/hypr/scripts/xdg.sh
|
|
||||||
|
|
||||||
# Start Polkit
|
|
||||||
exec-once = systemctl --user start plasma-polkit-agent
|
|
||||||
|
|
||||||
exec-once = dunst
|
|
||||||
|
|
||||||
exec-once = hypridle
|
|
||||||
|
|
||||||
exec-once = wl-paste --watch cliphist store
|
|
||||||
|
|
||||||
# Initialize wallpaper
|
|
||||||
exec-once = hyprpaper
|
|
||||||
|
|
||||||
# Launch Waybar
|
|
||||||
exec-once = ~/.config/waybar/launch.sh
|
|
||||||
|
|
||||||
# Autostart cleanup
|
|
||||||
exec-once = ~/.config/hypr/scripts/cleanup.sh
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
exec-once = hyprctl setcursor Bibata-Modern-Ice 24
|
|
||||||
|
|
||||||
# No Hardware Cursor
|
|
||||||
cursor {
|
|
||||||
no_hardware_cursors = true
|
|
||||||
}
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
# -----------------------------------------------------
|
|
||||||
# General window decoration
|
|
||||||
# name: "Default"
|
|
||||||
# -----------------------------------------------------
|
|
||||||
|
|
||||||
decoration {
|
|
||||||
rounding = 10
|
|
||||||
blur {
|
|
||||||
enabled = true
|
|
||||||
size = 6
|
|
||||||
passes = 2
|
|
||||||
new_optimizations = on
|
|
||||||
ignore_opacity = true
|
|
||||||
xray = true
|
|
||||||
# blurls = waybar
|
|
||||||
}
|
|
||||||
active_opacity = 1.0
|
|
||||||
inactive_opacity = 0.8
|
|
||||||
fullscreen_opacity = 1.0
|
|
||||||
|
|
||||||
drop_shadow = true
|
|
||||||
shadow_range = 30
|
|
||||||
shadow_render_power = 3
|
|
||||||
col.shadow = 0x66000000
|
|
||||||
}
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
# -----------------------------------------------------
|
|
||||||
# Environment Variables
|
|
||||||
# name: "Nvidia"
|
|
||||||
# -----------------------------------------------------
|
|
||||||
|
|
||||||
# Default Settings in ml4w.conf
|
|
||||||
|
|
||||||
# NVIDIA https://wiki.hyprland.org/Nvidia/
|
|
||||||
env = LIBVA_DRIVER_NAME,nvidia
|
|
||||||
env = GBM_BACKEND,nvidia-drm
|
|
||||||
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
|
|
||||||
# env = __GL_VRR_ALLOWED,1
|
|
||||||
# env = WLR_DRM_NO_ATOMIC,1
|
|
||||||
|
|
||||||
cursor {
|
|
||||||
no_hardware_cursors = true
|
|
||||||
}
|
|
||||||
|
|
@ -1,121 +0,0 @@
|
||||||
# -----------------------------------------------------
|
|
||||||
# Key bindings
|
|
||||||
# name: "Default"
|
|
||||||
# -----------------------------------------------------
|
|
||||||
|
|
||||||
# SUPER KEY
|
|
||||||
$mainMod = SUPER
|
|
||||||
$HYPRSCRIPTS = ~/.config/hypr/scripts
|
|
||||||
$SCRIPTS = ~/.config/hypr/scripts
|
|
||||||
$terminal = kitty
|
|
||||||
|
|
||||||
# Applications
|
|
||||||
bind = $mainMod, RETURN, exec, $terminal # Open the terminal
|
|
||||||
bind = $mainMod, B, exec, librewolf # Open the browser
|
|
||||||
bind = $mainMod, E, exec, dolphin # Open the filemanager
|
|
||||||
bind = $mainMod CTRL, E, exec, smile # Open the emoji picker
|
|
||||||
bind = $mainMod CTRL, C, exec, kcal # Open the calculator
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
bind = $mainMod, Q, killactive # Kill active window
|
|
||||||
bind = $mainMod, F, fullscreen # Set active window to fullscreen
|
|
||||||
bind = $mainMod, T, togglefloating # Toggle active windows into floating mode
|
|
||||||
bind = $mainMod SHIFT, T, exec, $HYPRSCRIPTS/toggleallfloat.sh # Toggle all windows into floating mode
|
|
||||||
bind = $mainMod, J, togglesplit # Toggle split
|
|
||||||
bind = $mainMod, left, movefocus, l # Move focus left
|
|
||||||
bind = $mainMod, right, movefocus, r # Move focus right
|
|
||||||
bind = $mainMod, up, movefocus, u # Move focus up
|
|
||||||
bind = $mainMod, down, movefocus, d # Move focus down
|
|
||||||
bindm = $mainMod, mouse:272, movewindow # Move window with the mouse
|
|
||||||
bindm = $mainMod, mouse:273, resizewindow # Resize window with the mouse
|
|
||||||
bind = $mainMod SHIFT, right, resizeactive, 100 0 # Increase window width with keyboard
|
|
||||||
bind = $mainMod SHIFT, left, resizeactive, -100 0 # Reduce window width with keyboard
|
|
||||||
bind = $mainMod SHIFT, down, resizeactive, 0 100 # Increase window height with keyboard
|
|
||||||
bind = $mainMod SHIFT, up, resizeactive, 0 -100 # Reduce window height with keyboard
|
|
||||||
bind = $mainMod, G, togglegroup # Toggle window group
|
|
||||||
bind = $mainMod, K, swapsplit # Swapsplit
|
|
||||||
|
|
||||||
# Actions
|
|
||||||
bind = $mainMod SHIFT, A, exec, $HYPRSCRIPTS/toggle-animations.sh # Toggle animations
|
|
||||||
bind = $mainMod, PRINT, exec, $HYPRSCRIPTS/screenshot.sh # Take a screenshot
|
|
||||||
bind = $mainMod SHIFT, S, exec, $HYPRSCRIPTS/screenshot.sh # Take a screenshot
|
|
||||||
bind = $mainMod CTRL, Q, exec, wlogout # Start wlogout
|
|
||||||
bind = $mainMod SHIFT, W, exec, waypaper --random # Change the wallpaper
|
|
||||||
bind = $mainMod CTRL, W, exec, waypaper # Open wallpaper selector
|
|
||||||
bind = $mainMod ALT, W, exec, $HYPRSCRIPTS/wallpaper-automation.sh # Start random wallpaper script
|
|
||||||
bind = $mainMod CTRL, RETURN, exec, rofi -show drun -replace -i # Open application launcher
|
|
||||||
bind = $mainMod CTRL, K, exec, $HYPRSCRIPTS/keybindings.sh # Show keybindings
|
|
||||||
bind = $mainMod SHIFT, B, exec, ~/.config/waybar/launch.sh # Reload waybar
|
|
||||||
bind = $mainMod CTRL, B, exec, ~/.config/waybar/toggle.sh # Toggle waybar
|
|
||||||
bind = $mainMod SHIFT, R, exec, $HYPRSCRIPTS/loadconfig.sh # Reload hyprland config
|
|
||||||
bind = $mainMod, V, exec, $SCRIPTS/cliphist.sh # Open clipboard manager
|
|
||||||
bind = $mainMod CTRL, T, exec, ~/.config/waybar/themeswitcher.sh # Open waybar theme switcher
|
|
||||||
bind = $mainMod CTRL, S, exec, ~/.config/ml4w/apps/ML4W_Dotfiles_Settings-x86_64.AppImage # Open ML4W Dotfiles Settings app
|
|
||||||
bind = $mainMod SHIFT, H, exec, $HYPRSCRIPTS/hyprshade.sh # Toggle screenshader
|
|
||||||
bind = $mainMod ALT, G, exec, $HYPRSCRIPTS/gamemode.sh # Toggle game mode
|
|
||||||
bind = $mainMod, Z, exec, missioncenter # Open Mission Center
|
|
||||||
|
|
||||||
# Workspaces
|
|
||||||
bind = $mainMod, 1, workspace, 1 # Open workspace 1
|
|
||||||
bind = $mainMod, 2, workspace, 2 # Open workspace 2
|
|
||||||
bind = $mainMod, 3, workspace, 3 # Open workspace 3
|
|
||||||
bind = $mainMod, 4, workspace, 4 # Open workspace 4
|
|
||||||
bind = $mainMod, 5, workspace, 5 # Open workspace 5
|
|
||||||
bind = $mainMod, 6, workspace, 6 # Open workspace 6
|
|
||||||
bind = $mainMod, 7, workspace, 7 # Open workspace 7
|
|
||||||
bind = $mainMod, 8, workspace, 8 # Open workspace 8
|
|
||||||
bind = $mainMod, 9, workspace, 9 # Open workspace 9
|
|
||||||
bind = $mainMod, 0, workspace, 10 # Open workspace 10
|
|
||||||
|
|
||||||
bind = $mainMod SHIFT, 1, movetoworkspace, 1 # Move active window to workspace 1
|
|
||||||
bind = $mainMod SHIFT, 2, movetoworkspace, 2 # Move active window to workspace 2
|
|
||||||
bind = $mainMod SHIFT, 3, movetoworkspace, 3 # Move active window to workspace 3
|
|
||||||
bind = $mainMod SHIFT, 4, movetoworkspace, 4 # Move active window to workspace 4
|
|
||||||
bind = $mainMod SHIFT, 5, movetoworkspace, 5 # Move active window to workspace 5
|
|
||||||
bind = $mainMod SHIFT, 6, movetoworkspace, 6 # Move active window to workspace 6
|
|
||||||
bind = $mainMod SHIFT, 7, movetoworkspace, 7 # Move active window to workspace 7
|
|
||||||
bind = $mainMod SHIFT, 8, movetoworkspace, 8 # Move active window to workspace 8
|
|
||||||
bind = $mainMod SHIFT, 9, movetoworkspace, 9 # Move active window to workspace 9
|
|
||||||
bind = $mainMod SHIFT, 0, movetoworkspace, 10 # Move active window to workspace 10
|
|
||||||
|
|
||||||
bind = $mainMod, Tab, workspace, m+1 # Open next workspace
|
|
||||||
bind = $mainMod SHIFT, Tab, workspace, m-1 # Open previous workspace
|
|
||||||
|
|
||||||
bind = $mainMod CTRL, 1, exec, $HYPRSCRIPTS/moveTo.sh 1 # Move all windows to workspace 1
|
|
||||||
bind = $mainMod CTRL, 2, exec, $HYPRSCRIPTS/moveTo.sh 2 # Move all windows to workspace 2
|
|
||||||
bind = $mainMod CTRL, 3, exec, $HYPRSCRIPTS/moveTo.sh 3 # Move all windows to workspace 3
|
|
||||||
bind = $mainMod CTRL, 4, exec, $HYPRSCRIPTS/moveTo.sh 4 # Move all windows to workspace 4
|
|
||||||
bind = $mainMod CTRL, 5, exec, $HYPRSCRIPTS/moveTo.sh 5 # Move all windows to workspace 5
|
|
||||||
bind = $mainMod CTRL, 6, exec, $HYPRSCRIPTS/moveTo.sh 6 # Move all windows to workspace 6
|
|
||||||
bind = $mainMod CTRL, 7, exec, $HYPRSCRIPTS/moveTo.sh 7 # Move all windows to workspace 7
|
|
||||||
bind = $mainMod CTRL, 8, exec, $HYPRSCRIPTS/moveTo.sh 8 # Move all windows to workspace 8
|
|
||||||
bind = $mainMod CTRL, 9, exec, $HYPRSCRIPTS/moveTo.sh 9 # Move all windows to workspace 9
|
|
||||||
bind = $mainMod CTRL, 0, exec, $HYPRSCRIPTS/moveTo.sh 10 # Move all windows to workspace 10
|
|
||||||
|
|
||||||
bind = $mainMod, mouse_down, workspace, e+1 # Open next workspace
|
|
||||||
bind = $mainMod, mouse_up, workspace, e-1 # Open previous workspace
|
|
||||||
bind = $mainMod CTRL, down, workspace, empty # Open the next empty workspace
|
|
||||||
|
|
||||||
# Passthrough SUPER KEY to Virtual Machine
|
|
||||||
bind = $mainMod, P, submap, passthru # Passthrough SUPER key to virtual machine
|
|
||||||
submap = passthru
|
|
||||||
bind = SUPER, Escape, submap, reset # Get SUPER key back from virtual machine
|
|
||||||
submap = reset
|
|
||||||
|
|
||||||
# Fn keys
|
|
||||||
bind = , XF86MonBrightnessUp, exec, brightnessctl -q s +10% # Increase brightness by 10%
|
|
||||||
bind = , XF86MonBrightnessDown, exec, brightnessctl -q s 10%- # Reduce brightness by 10%
|
|
||||||
bind = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5% # Increase volume by 5%
|
|
||||||
bind = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5% # Reduce volume by 5%
|
|
||||||
bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle # Toggle mute
|
|
||||||
bind = , XF86AudioPlay, exec, playerctl play-pause # Audio play pause
|
|
||||||
bind = , XF86AudioPause, exec, playerctl pause # Audio pause
|
|
||||||
bind = , XF86AudioNext, exec, playerctl next # Audio next
|
|
||||||
bind = , XF86AudioPrev, exec, playerctl previous # Audio previous
|
|
||||||
bind = , XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle # Toggle microphone
|
|
||||||
bind = , XF86Calculator, exec, ~/.config/ml4w/settings/calculator.sh # Open calculator
|
|
||||||
bind = , XF86Lock, exec, hyprlock # Open screenlock
|
|
||||||
bind = , XF86Tools, exec, alacritty --class dotfiles-floating -e ~/.config/ml4w/apps/ML4W_Dotfiles_Settings-x86_64.AppImage # Open ML4W Dotfiles Settings app
|
|
||||||
|
|
||||||
bind = , code:238, exec, brightnessctl -d smc::kbd_backlight s +10
|
|
||||||
bind = , code:237, exec, brightnessctl -d smc::kbd_backlight s 10-
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
# -----------------------------------------------------
|
|
||||||
# Keyboard Layout
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#input
|
|
||||||
# -----------------------------------------------------
|
|
||||||
|
|
||||||
input {
|
|
||||||
kb_layout = us,ca
|
|
||||||
kb_variant =
|
|
||||||
kb_model =
|
|
||||||
kb_options = grp:win_space_toggle
|
|
||||||
kb_rules =
|
|
||||||
repeat_rate = 50 #
|
|
||||||
repeat_delay = 300 #
|
|
||||||
numlock_by_default = true
|
|
||||||
follow_mouse = true
|
|
||||||
mouse_refocus = false
|
|
||||||
touchpad {
|
|
||||||
natural_scroll = false
|
|
||||||
disable_while_typing = true
|
|
||||||
clickfinger_behavior = false
|
|
||||||
middle_button_emulation = true
|
|
||||||
tap-to-click = true
|
|
||||||
drag_lock = false
|
|
||||||
scroll_factor = 1.0 # Touchpad scroll factor
|
|
||||||
}
|
|
||||||
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
|
||||||
float_switch_override_focus = false
|
|
||||||
}
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
# -----------------------------------------------------
|
|
||||||
# Layouts
|
|
||||||
# -----------------------------------------------------
|
|
||||||
|
|
||||||
dwindle {
|
|
||||||
pseudotile = true
|
|
||||||
preserve_split = true
|
|
||||||
}
|
|
||||||
|
|
||||||
master {
|
|
||||||
# Commented out due to compatibility reasons
|
|
||||||
# new_status = master
|
|
||||||
}
|
|
||||||
|
|
||||||
gestures {
|
|
||||||
workspace_swipe = false
|
|
||||||
}
|
|
||||||
|
|
||||||
binds {
|
|
||||||
workspace_back_and_forth = true
|
|
||||||
allow_workspace_cycles = true
|
|
||||||
pass_mouse_when_bound = false
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
# -----------------------------------------------------
|
|
||||||
# Misc settings
|
|
||||||
# -----------------------------------------------------
|
|
||||||
|
|
||||||
misc {
|
|
||||||
disable_hyprland_logo = true
|
|
||||||
disable_splash_rendering = true
|
|
||||||
initial_workspace_tracking = 1
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
# -----------------------------------------------------
|
|
||||||
# Monitor Setup
|
|
||||||
# name: "3440x1440"
|
|
||||||
# -----------------------------------------------------
|
|
||||||
|
|
||||||
monitor=,3440x1440,auto,1
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
# -----------------------------------------------------
|
|
||||||
# General window layout and colors
|
|
||||||
# name: "Default"
|
|
||||||
# -----------------------------------------------------
|
|
||||||
|
|
||||||
general {
|
|
||||||
gaps_in = 10
|
|
||||||
gaps_out = 14
|
|
||||||
border_size = 3
|
|
||||||
col.active_border = $color11
|
|
||||||
col.inactive_border = rgba(ffffffff)
|
|
||||||
layout = dwindle
|
|
||||||
resize_on_border = true
|
|
||||||
}
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
# _ _ _ _
|
|
||||||
# | |__ _ _ _ __ _ __(_) __| | | ___
|
|
||||||
# | '_ \| | | | '_ \| '__| |/ _` | |/ _ \
|
|
||||||
# | | | | |_| | |_) | | | | (_| | | __/
|
|
||||||
# |_| |_|\__, | .__/|_| |_|\__,_|_|\___|
|
|
||||||
# |___/|_|
|
|
||||||
#
|
|
||||||
# Version 2.8.3
|
|
||||||
# DO NOT REMOVE THE REPLACEMENT COMMENTS
|
|
||||||
# REQUIRED BY THE ML4W SETTINGS APP
|
|
||||||
# https://wiki.hyprland.org/Hypr-Ecosystem/hypridle/
|
|
||||||
|
|
||||||
# general {
|
|
||||||
# ignore_dbus_inhibit = false
|
|
||||||
# }
|
|
||||||
|
|
||||||
general {
|
|
||||||
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
|
|
||||||
before_sleep_cmd = loginctl lock-session # lock before suspend.
|
|
||||||
after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
|
|
||||||
}
|
|
||||||
|
|
||||||
# Screenlock
|
|
||||||
listener {
|
|
||||||
# HYPRLOCK TIMEOUT
|
|
||||||
timeout = 600
|
|
||||||
# HYPRLOCK ONTIMEOUT
|
|
||||||
on-timeout = loginctl lock-session
|
|
||||||
}
|
|
||||||
|
|
||||||
# dpms
|
|
||||||
listener {
|
|
||||||
# DPMS TIMEOUT
|
|
||||||
timeout = 660
|
|
||||||
# DPMS ONTIMEOUT
|
|
||||||
on-timeout = hyprctl dispatch dpms off
|
|
||||||
# DPMS ONRESUME
|
|
||||||
on-resume = hyprctl dispatch dpms on
|
|
||||||
}
|
|
||||||
|
|
||||||
## Suspend
|
|
||||||
#listener {
|
|
||||||
# # SUSPEND TIMEOUT
|
|
||||||
# timeout = 1800
|
|
||||||
# #SUSPEND ONTIMEOUT
|
|
||||||
# on-timeout = systemctl suspend
|
|
||||||
#}
|
|
||||||
|
|
@ -1,346 +0,0 @@
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Configuring-Hyprland/
|
|
||||||
|
|
||||||
# THEME
|
|
||||||
#source = ~/.config/hypr/mocha.conf
|
|
||||||
source = $HOME/.config/hypr/wallust/wallust-hyprland.conf #
|
|
||||||
source = $HOME/.config/hypr/keybinds.conf
|
|
||||||
source = $HOME/.config/hypr/UserConfigs/ENVariables.conf
|
|
||||||
|
|
||||||
# MONITORS
|
|
||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Monitors/
|
|
||||||
monitor=,preferred,auto,auto
|
|
||||||
monitor=DP-3,preferred,auto,1.6
|
|
||||||
|
|
||||||
# MY PROGRAMS
|
|
||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Keywords/
|
|
||||||
|
|
||||||
# Set programs that you use
|
|
||||||
$scriptsDir = $HOME/.config/hypr/scripts
|
|
||||||
$UserScripts = $HOME/.config/hypr/UserScripts
|
|
||||||
$terminal = kitty
|
|
||||||
$fileManager = dolphin
|
|
||||||
$menu = wofi --show drun
|
|
||||||
$wallDIR = $HOME/Pictures/wallpapers
|
|
||||||
$lock = $scriptsDir/LockScreen.sh
|
|
||||||
$SwwwRandom = $UserScripts/WallpaperAutoChange.sh
|
|
||||||
|
|
||||||
# AUTOSTART
|
|
||||||
exec-once = swww-daemon --format xrgb
|
|
||||||
#exec-once = $SwwwRandom $wallDIR # random wallpaper switcher every 30 minutes #
|
|
||||||
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP #
|
|
||||||
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP #
|
|
||||||
##exec-once = hyprpaper
|
|
||||||
exec-once = hypridle
|
|
||||||
exec-once = ~/.config/hypr/scripts/waybar.sh
|
|
||||||
exec-once = nm-applet --indicator & #
|
|
||||||
exec-once = swaync & #
|
|
||||||
exec-once = blueman-applet & #
|
|
||||||
exec-once = pypr & #
|
|
||||||
|
|
||||||
##exec-once = systemctl --user start plasma-polkit-agent
|
|
||||||
exec-once = $scriptsDir/Polkit.sh
|
|
||||||
exec-once = wl-paste --type text --watch cliphist store
|
|
||||||
exec-once = wl-paste --type image --watch cliphist store
|
|
||||||
##exec-once = mako
|
|
||||||
# exec-once = dunst -conf ~/.config/dunst/dunstrc
|
|
||||||
|
|
||||||
# ENVIRONMENT VARIABLES
|
|
||||||
|
|
||||||
env = XDG_SESSION_TYPE,wayland
|
|
||||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
|
||||||
env = XDG_SESSION_DESKTOP,Hyprland
|
|
||||||
env = XCURSOR_SIZE,24
|
|
||||||
env = HYPRCURSOR_SIZE,24
|
|
||||||
|
|
||||||
|
|
||||||
# LOOK AND FEEL
|
|
||||||
|
|
||||||
# Refer to https://wiki.hyprland.org/Configuring/Variables/
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#general
|
|
||||||
general {
|
|
||||||
gaps_in = 5
|
|
||||||
gaps_out = 10
|
|
||||||
border_size = 2
|
|
||||||
col.active_border = 0xffcba6f7
|
|
||||||
col.inactive_border = 0xff313244
|
|
||||||
no_border_on_floating = true
|
|
||||||
resize_on_border = true
|
|
||||||
allow_tearing = false
|
|
||||||
layout = dwindle
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#decoration
|
|
||||||
decoration {
|
|
||||||
rounding = 10
|
|
||||||
|
|
||||||
active_opacity = 1.0
|
|
||||||
inactive_opacity = 0.9
|
|
||||||
fullscreen_opacity = 1.0
|
|
||||||
|
|
||||||
dim_inactive = true
|
|
||||||
dim_strength = 0.1
|
|
||||||
dim_special = 0.8
|
|
||||||
|
|
||||||
drop_shadow = true
|
|
||||||
shadow_range = 6
|
|
||||||
shadow_render_power = 1
|
|
||||||
|
|
||||||
# shadow_ignore_window = true
|
|
||||||
# shadow_range = 4
|
|
||||||
# shadow_offset = 2 2
|
|
||||||
# shadow_render_power = 2
|
|
||||||
col.shadow = 0x66000000
|
|
||||||
col.shadow_inactive = 0x50000000
|
|
||||||
|
|
||||||
blur {
|
|
||||||
enabled = true
|
|
||||||
size = 6
|
|
||||||
passes = 2
|
|
||||||
new_optimizations = true
|
|
||||||
ignore_opacity = true #
|
|
||||||
special = true #
|
|
||||||
#vibrancy = 0.1696
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
|
||||||
animations {
|
|
||||||
enabled = true
|
|
||||||
|
|
||||||
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
|
||||||
|
|
||||||
# bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
|
||||||
bezier = wind, 0.05, 0.9, 0.1, 1.05
|
|
||||||
bezier = winIn, 0.1, 1.1, 0.1, 1.1
|
|
||||||
bezier = winOut, 0.3, -0.3, 0, 1
|
|
||||||
bezier = liner, 1, 1, 1, 1
|
|
||||||
bezier = overshot, 0.05, 0.9, 0.1, 1.05
|
|
||||||
bezier = smoothOut, 0.5, 0, 0.99, 0.99
|
|
||||||
bezier = smoothIn, 0.5, -0.5, 0.68, 1.5
|
|
||||||
|
|
||||||
animation = windows, 1, 6, wind, slide
|
|
||||||
animation = windowsIn, 1, 5, winIn, slide
|
|
||||||
animation = windowsOut, 1, 3, smoothOut, slide
|
|
||||||
animation = windowsMove, 1, 5, wind, slide
|
|
||||||
animation = border, 1, 1, liner
|
|
||||||
animation = borderangle, 1, 180, liner, loop #used by rainbow borders and rotating colors
|
|
||||||
animation = fade, 1, 3, smoothOut
|
|
||||||
animation = workspaces, 1, 5, overshot
|
|
||||||
|
|
||||||
# animation = windows, 1, 7, myBezier
|
|
||||||
# animation = windowsOut, 1, 7, default, popin 80%
|
|
||||||
# animation = border, 1, 10, default
|
|
||||||
# animation = borderangle, 1, 8, default
|
|
||||||
# animation = fade, 1, 7, default
|
|
||||||
# animation = workspaces, 1, 6, default
|
|
||||||
}
|
|
||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
|
||||||
dwindle {
|
|
||||||
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
|
||||||
preserve_split = true # You probably want this
|
|
||||||
}
|
|
||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
|
||||||
master {
|
|
||||||
new_status = master
|
|
||||||
new_on_top = true
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#misc
|
|
||||||
misc {
|
|
||||||
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
|
||||||
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
|
|
||||||
disable_splash_rendering = true
|
|
||||||
vfr = true
|
|
||||||
#vrr = 0
|
|
||||||
mouse_move_enables_dpms = true
|
|
||||||
enable_swallow = true
|
|
||||||
swallow_regex = ^(kitty)$
|
|
||||||
focus_on_activate = false
|
|
||||||
#no_direct_scanout = true #for fullscreen games - deprecated
|
|
||||||
initial_workspace_tracking = 0
|
|
||||||
middle_click_paste = false
|
|
||||||
}
|
|
||||||
|
|
||||||
# INPUT
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#input
|
|
||||||
input {
|
|
||||||
kb_layout = us,ca
|
|
||||||
kb_variant =
|
|
||||||
kb_model =
|
|
||||||
kb_options = grp:win_space_toggle
|
|
||||||
kb_rules =
|
|
||||||
repeat_rate = 50 #
|
|
||||||
repeat_delay = 300 #
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
|
||||||
numlock_by_default = true
|
|
||||||
left_handed = false
|
|
||||||
follow_mouse = true
|
|
||||||
float_switch_override_focus = false
|
|
||||||
|
|
||||||
touchpad {
|
|
||||||
natural_scroll = false
|
|
||||||
disable_while_typing = true
|
|
||||||
clickfinger_behavior = false
|
|
||||||
middle_button_emulation = true
|
|
||||||
tap-to-click = true
|
|
||||||
drag_lock = false
|
|
||||||
}
|
|
||||||
|
|
||||||
# added
|
|
||||||
touchdevice {
|
|
||||||
enabled = true
|
|
||||||
}
|
|
||||||
|
|
||||||
tablet {
|
|
||||||
transform = 0
|
|
||||||
left_handed = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#gestures
|
|
||||||
gestures {
|
|
||||||
workspace_swipe = true
|
|
||||||
workspace_swipe_fingers = 3
|
|
||||||
workspace_swipe_distance = 500
|
|
||||||
workspace_swipe_invert = true
|
|
||||||
workspace_swipe_min_speed_to_force = 30
|
|
||||||
workspace_swipe_cancel_ratio = 0.5
|
|
||||||
workspace_swipe_create_new = true
|
|
||||||
workspace_swipe_forever = true
|
|
||||||
#workspace_swipe_use_r = true #uncomment if wanted a forever create a new workspace with swipe right
|
|
||||||
}
|
|
||||||
# added
|
|
||||||
group {
|
|
||||||
col.border_active = $color15
|
|
||||||
groupbar {
|
|
||||||
col.active = $color0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
binds {
|
|
||||||
workspace_back_and_forth = true
|
|
||||||
allow_workspace_cycles = true
|
|
||||||
pass_mouse_when_bound = false
|
|
||||||
}
|
|
||||||
|
|
||||||
#Could help when scaling and not pixelating
|
|
||||||
xwayland {
|
|
||||||
force_zero_scaling = true
|
|
||||||
}
|
|
||||||
|
|
||||||
# render section for Hyprland >= v0.42.0
|
|
||||||
render {
|
|
||||||
explicit_sync = 2
|
|
||||||
explicit_sync_kms = 2
|
|
||||||
direct_scanout = false
|
|
||||||
}
|
|
||||||
|
|
||||||
cursor {
|
|
||||||
no_hardware_cursors = false
|
|
||||||
enable_hyprcursor = true
|
|
||||||
warp_on_change_workspace = true
|
|
||||||
no_warps = true
|
|
||||||
}
|
|
||||||
|
|
||||||
# Example per-device config
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
|
|
||||||
#device {
|
|
||||||
# name = epic-mouse-v1
|
|
||||||
# sensitivity = -0.5
|
|
||||||
#}
|
|
||||||
|
|
||||||
|
|
||||||
# KEYBINDINGS
|
|
||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Keywords/
|
|
||||||
$mainMod = SUPER # Sets "Windows" key as main modifier
|
|
||||||
|
|
||||||
### # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
|
||||||
### bind = $mainMod, RETURN, exec, $terminal
|
|
||||||
### bind = $mainMod, C, killactive,
|
|
||||||
### bind = $mainMod, M, exit,
|
|
||||||
### bind = $mainMod, E, exec, $fileManager
|
|
||||||
### bind = $mainMod, V, togglefloating,
|
|
||||||
### bind = $mainMod, R, exec, $menu
|
|
||||||
### bind = $mainMod, P, pseudo, # dwindle
|
|
||||||
### bind = $mainMod, J, togglesplit, # dwindle
|
|
||||||
### bind = $mainMod, L, exec, hyprlock
|
|
||||||
###
|
|
||||||
### # 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
|
|
||||||
###
|
|
||||||
### # Switch workspaces with mainMod + [0-9]
|
|
||||||
### bind = $mainMod, 1, workspace, 1
|
|
||||||
### bind = $mainMod, 2, workspace, 2
|
|
||||||
### bind = $mainMod, 3, workspace, 3
|
|
||||||
### bind = $mainMod, 4, workspace, 4
|
|
||||||
### bind = $mainMod, 5, workspace, 5
|
|
||||||
### bind = $mainMod, 6, workspace, 6
|
|
||||||
### bind = $mainMod, 7, workspace, 7
|
|
||||||
### bind = $mainMod, 8, workspace, 8
|
|
||||||
### bind = $mainMod, 9, workspace, 9
|
|
||||||
### bind = $mainMod, 0, workspace, 10
|
|
||||||
###
|
|
||||||
### # Move active window to a workspace with mainMod + SHIFT + [0-9]
|
|
||||||
### bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
|
||||||
### bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
|
||||||
### bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
|
||||||
### bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
|
||||||
### bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
|
||||||
### bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
|
||||||
### bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
|
||||||
### bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
|
||||||
### bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
|
||||||
### bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
|
||||||
###
|
|
||||||
### # Example special workspace (scratchpad)
|
|
||||||
### bind = $mainMod, S, togglespecialworkspace, magic
|
|
||||||
### bind = $mainMod SHIFT, S, movetoworkspace, special:magic
|
|
||||||
###
|
|
||||||
### # Scroll through existing workspaces with mainMod + scroll
|
|
||||||
### bind = $mainMod, mouse_down, workspace, e+1
|
|
||||||
### bind = $mainMod, mouse_up, workspace, e-1
|
|
||||||
###
|
|
||||||
### # Move/resize windows with mainMod + LMB/RMB and dragging
|
|
||||||
### bindm = $mainMod, mouse:272, movewindow
|
|
||||||
### bindm = $mainMod, mouse:273, resizewindow
|
|
||||||
###
|
|
||||||
### # Laptop multimedia keys for volume and LCD brightness
|
|
||||||
### bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
|
|
||||||
### bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
|
||||||
### bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
|
||||||
### bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
|
||||||
### bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
|
|
||||||
### bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
|
|
||||||
|
|
||||||
##############################
|
|
||||||
### WINDOWS AND WORKSPACES ###
|
|
||||||
##############################
|
|
||||||
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
|
||||||
|
|
||||||
# Example windowrule v1
|
|
||||||
# windowrule = float, ^(kitty)$
|
|
||||||
|
|
||||||
# Example windowrule v2
|
|
||||||
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
|
|
||||||
|
|
||||||
# Firefox
|
|
||||||
windowrulev2 = float, class:(LibreWolf), title:(Picture-in-Picture)
|
|
||||||
windowrulev2 = size 320 180, move 0 0, title:(Picture-in-Picture)
|
|
||||||
|
|
||||||
windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.
|
|
||||||
|
|
@ -1,69 +0,0 @@
|
||||||
# BACKGROUND
|
|
||||||
background {
|
|
||||||
monitor =
|
|
||||||
path = ~/.config/hypr/walls/1.png
|
|
||||||
# blur_passes = 0
|
|
||||||
# contrast = 1
|
|
||||||
# brightness = 1
|
|
||||||
# vibrancy = 0.2
|
|
||||||
# vibrancy_darkness = 0.2
|
|
||||||
}
|
|
||||||
|
|
||||||
# GENERAL
|
|
||||||
general {
|
|
||||||
no_fade_in = false
|
|
||||||
no_fade_out = false
|
|
||||||
hide_cursor = true
|
|
||||||
grace = 0
|
|
||||||
disable_loading_bar = true
|
|
||||||
ignore_empty_input = true
|
|
||||||
}
|
|
||||||
|
|
||||||
# INPUT FIELD
|
|
||||||
input-field {
|
|
||||||
monitor =
|
|
||||||
size = 250, 60
|
|
||||||
outline_thickness = 2
|
|
||||||
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
|
|
||||||
dots_spacing = 0.35 # Scale of dots' absolute size, 0.0 - 1.0
|
|
||||||
dots_center = true
|
|
||||||
outer_color = rgba(0, 0, 0, 0)
|
|
||||||
inner_color = rgba(0, 0, 0, 0.2)
|
|
||||||
font_color = rgb(205, 214, 244)
|
|
||||||
fade_on_empty = false
|
|
||||||
rounding = -1
|
|
||||||
placeholder_text = <span foreground="##cdd6f4">Password</span>
|
|
||||||
hide_input = false
|
|
||||||
position = 0, -200
|
|
||||||
halign = center
|
|
||||||
valign = center
|
|
||||||
check_color = rgb(108, 112, 134)
|
|
||||||
fail_color = rgb(243, 139, 168) # if authentication failed, changes outer_color and fail message color
|
|
||||||
fail_text = <b>$ATTEMPTS</b> # can be set to empty
|
|
||||||
fail_timeout = 2000 # milliseconds before fail_text and fail_color disappears
|
|
||||||
fail_transition = 300 # transition time in ms between normal outer_color and fail_color
|
|
||||||
}
|
|
||||||
|
|
||||||
# DATE
|
|
||||||
label {
|
|
||||||
monitor =
|
|
||||||
text = cmd[update:1000] date +"%Y-%m-%d"
|
|
||||||
color = rgb(205, 214, 244)
|
|
||||||
font_size = 22
|
|
||||||
font_family = JetBrains Mono
|
|
||||||
position = 0, 300
|
|
||||||
halign = center
|
|
||||||
valign = center
|
|
||||||
}
|
|
||||||
|
|
||||||
# TIME
|
|
||||||
label {
|
|
||||||
monitor =
|
|
||||||
text = $TIME
|
|
||||||
color = rgb(205, 214, 244)
|
|
||||||
font_size = 95
|
|
||||||
font_family = JetBrains Mono Extrabold
|
|
||||||
position = 0, 200
|
|
||||||
halign = center
|
|
||||||
valign = center
|
|
||||||
}qqqq
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
preload = ~/.config/hypr/walls/2.png
|
|
||||||
wallpaper = eDP-1,~/.config/hypr/walls/2.png
|
|
||||||
splash = false
|
|
||||||
|
|
||||||
# https://github.com/zhichaoh/catppuccin-wallpapers
|
|
||||||
|
|
@ -1,122 +0,0 @@
|
||||||
# Keybinds
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
|
|
||||||
#
|
|
||||||
$mainMod = SUPER
|
|
||||||
$files = dolphin
|
|
||||||
$term = kitty
|
|
||||||
|
|
||||||
# Default
|
|
||||||
$scriptsDir = $HOME/.config/hypr/scripts
|
|
||||||
$UserScripts = $HOME/.config/hypr/UserScripts
|
|
||||||
|
|
||||||
# Rofi App Launcher
|
|
||||||
bind = $mainMod, D, exec, pkill rofi || rofi -show drun -modi drun,filebrowser,run,window
|
|
||||||
|
|
||||||
## ags overview
|
|
||||||
##bind = $mainMod, A, exec, pkill rofi || true && ags -t 'overview'
|
|
||||||
|
|
||||||
|
|
||||||
bind = $mainMod, Return, exec, $term # Launch terminal
|
|
||||||
bind = $mainMod, E, exec, $files # Launch file manager
|
|
||||||
|
|
||||||
# pyprland
|
|
||||||
bind = $mainMod SHIFT, Return, exec, pypr toggle term # Dropdown terminal
|
|
||||||
bind = $mainMod, Z, exec, pypr zoom # Toggle Zoom
|
|
||||||
|
|
||||||
bind = $mainMod, Q, killactive,
|
|
||||||
bind = $mainMod, F, fullscreen,
|
|
||||||
bind = $mainMod SHIFT, F, togglefloating,
|
|
||||||
bind = $mainMod ALT, F, exec, hyprctl dispatch workspace allfloat
|
|
||||||
|
|
||||||
# Features / Extras
|
|
||||||
bind = $mainMod, H, exec, $scriptsDir/KeyHints.sh #small help file
|
|
||||||
bind = $mainMod ALT, R, exec, $scriptsDir/Refresh.sh # Refresh waybar, swaync, rofi
|
|
||||||
bind = $mainMod ALT, E, exec, $scriptsDir/RofiEmoji.sh # emoji
|
|
||||||
bind = $mainMod SHIFT, B, exec, $scriptsDir/ChangeBlur.sh # Toggle blur settings
|
|
||||||
bind = $mainMod SHIFT, G, exec, $scriptsDir/GameMode.sh # animations ON/OFF
|
|
||||||
bind = $mainMod ALT, L, exec, $scriptsDir/ChangeLayout.sh # Toggle Master or Dwindle Layout
|
|
||||||
bind = $mainMod ALT, V, exec, $scriptsDir/ClipManager.sh # Clipboard Manager
|
|
||||||
bind = $mainMod SHIFT, N, exec, swaync-client -t -sw # swayNC panel
|
|
||||||
|
|
||||||
# Waybar / Bar related
|
|
||||||
bind = $mainMod, B, exec, pkill -SIGUSR1 waybar # Toggle hide/show waybar
|
|
||||||
bind = $mainMod CTRL, B, exec, $scriptsDir/WaybarStyles.sh # Waybar Styles Menu
|
|
||||||
bind = $mainMod ALT, B, exec, $scriptsDir/WaybarLayout.sh # Waybar Layout Menu
|
|
||||||
|
|
||||||
# Resize windows
|
|
||||||
binde = $mainMod SHIFT, left, resizeactive,-50 0
|
|
||||||
binde = $mainMod SHIFT, right, resizeactive,50 0
|
|
||||||
binde = $mainMod SHIFT, up, resizeactive,0 -50
|
|
||||||
binde = $mainMod SHIFT, down, resizeactive,0 50
|
|
||||||
|
|
||||||
# Move windows
|
|
||||||
bind = $mainMod CTRL, left, movewindow, l
|
|
||||||
bind = $mainMod CTRL, right, movewindow, r
|
|
||||||
bind = $mainMod CTRL, up, movewindow, u
|
|
||||||
bind = $mainMod CTRL, down, movewindow, d
|
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|
||||||
# Workspaces related
|
|
||||||
bind = $mainMod, tab, workspace, m+1
|
|
||||||
bind = $mainMod SHIFT, tab, workspace, m-1
|
|
||||||
|
|
||||||
# Special workspace
|
|
||||||
bind = $mainMod SHIFT, U, movetoworkspace, special
|
|
||||||
bind = $mainMod, U, togglespecialworkspace,
|
|
||||||
|
|
||||||
# The following mappings use the key codes to better support various keyboard layouts
|
|
||||||
# 1 is code:10, 2 is code 11, etc
|
|
||||||
# Switch workspaces with mainMod + [0-9]
|
|
||||||
bind = $mainMod, code:10, workspace, 1
|
|
||||||
bind = $mainMod, code:11, workspace, 2
|
|
||||||
bind = $mainMod, code:12, workspace, 3
|
|
||||||
bind = $mainMod, code:13, workspace, 4
|
|
||||||
bind = $mainMod, code:14, workspace, 5
|
|
||||||
bind = $mainMod, code:15, workspace, 6
|
|
||||||
bind = $mainMod, code:16, workspace, 7
|
|
||||||
bind = $mainMod, code:17, workspace, 8
|
|
||||||
bind = $mainMod, code:18, workspace, 9
|
|
||||||
bind = $mainMod, code:19, workspace, 10
|
|
||||||
|
|
||||||
# Move active window and follow to workspace mainMod + SHIFT [0-9]
|
|
||||||
bind = $mainMod SHIFT, code:10, movetoworkspace, 1
|
|
||||||
bind = $mainMod SHIFT, code:11, movetoworkspace, 2
|
|
||||||
bind = $mainMod SHIFT, code:12, movetoworkspace, 3
|
|
||||||
bind = $mainMod SHIFT, code:13, movetoworkspace, 4
|
|
||||||
bind = $mainMod SHIFT, code:14, movetoworkspace, 5
|
|
||||||
bind = $mainMod SHIFT, code:15, movetoworkspace, 6
|
|
||||||
bind = $mainMod SHIFT, code:16, movetoworkspace, 7
|
|
||||||
bind = $mainMod SHIFT, code:17, movetoworkspace, 8
|
|
||||||
bind = $mainMod SHIFT, code:18, movetoworkspace, 9
|
|
||||||
bind = $mainMod SHIFT, code:19, movetoworkspace, 10
|
|
||||||
bind = $mainMod SHIFT, bracketleft, movetoworkspace, -1 # brackets [ or ]
|
|
||||||
bind = $mainMod SHIFT, bracketright, movetoworkspace, +1
|
|
||||||
|
|
||||||
# Move active window to a workspace silently mainMod + CTRL [0-9]
|
|
||||||
bind = $mainMod CTRL, code:10, movetoworkspacesilent, 1
|
|
||||||
bind = $mainMod CTRL, code:11, movetoworkspacesilent, 2
|
|
||||||
bind = $mainMod CTRL, code:12, movetoworkspacesilent, 3
|
|
||||||
bind = $mainMod CTRL, code:13, movetoworkspacesilent, 4
|
|
||||||
bind = $mainMod CTRL, code:14, movetoworkspacesilent, 5
|
|
||||||
bind = $mainMod CTRL, code:15, movetoworkspacesilent, 6
|
|
||||||
bind = $mainMod CTRL, code:16, movetoworkspacesilent, 7
|
|
||||||
bind = $mainMod CTRL, code:17, movetoworkspacesilent, 8
|
|
||||||
bind = $mainMod CTRL, code:18, movetoworkspacesilent, 9
|
|
||||||
bind = $mainMod CTRL, code:19, movetoworkspacesilent, 10
|
|
||||||
bind = $mainMod CTRL, bracketleft, movetoworkspacesilent, -1 # brackets [ or ]
|
|
||||||
bind = $mainMod CTRL, bracketright, movetoworkspacesilent, +1
|
|
||||||
|
|
||||||
# Scroll through existing workspaces with mainMod + scroll
|
|
||||||
bind = $mainMod, mouse_down, workspace, e+1
|
|
||||||
bind = $mainMod, mouse_up, workspace, e-1
|
|
||||||
bind = $mainMod, period, workspace, e+1
|
|
||||||
bind = $mainMod, comma, workspace, e-1
|
|
||||||
|
|
||||||
# Move/resize windows with mainMod + LMB/RMB and dragging
|
|
||||||
bindm = $mainMod, mouse:272, movewindow
|
|
||||||
bindm = $mainMod, mouse:273, resizewindow
|
|
||||||
|
|
@ -1,78 +0,0 @@
|
||||||
|
|
||||||
$rosewater = rgb(f5e0dc)
|
|
||||||
$rosewaterAlpha = f5e0dc
|
|
||||||
|
|
||||||
$flamingo = rgb(f2cdcd)
|
|
||||||
$flamingoAlpha = f2cdcd
|
|
||||||
|
|
||||||
$pink = rgb(f5c2e7)
|
|
||||||
$pinkAlpha = f5c2e7
|
|
||||||
|
|
||||||
$mauve = rgb(cba6f7)
|
|
||||||
$mauveAlpha = cba6f7
|
|
||||||
|
|
||||||
$red = rgb(f38ba8)
|
|
||||||
$redAlpha = f38ba8
|
|
||||||
|
|
||||||
$maroon = rgb(eba0ac)
|
|
||||||
$maroonAlpha = eba0ac
|
|
||||||
|
|
||||||
$peach = rgb(fab387)
|
|
||||||
$peachAlpha = fab387
|
|
||||||
|
|
||||||
$yellow = rgb(f9e2af)
|
|
||||||
$yellowAlpha = f9e2af
|
|
||||||
|
|
||||||
$green = rgb(a6e3a1)
|
|
||||||
$greenAlpha = a6e3a1
|
|
||||||
|
|
||||||
$teal = rgb(94e2d5)
|
|
||||||
$tealAlpha = 94e2d5
|
|
||||||
|
|
||||||
$sky = rgb(89dceb)
|
|
||||||
$skyAlpha = 89dceb
|
|
||||||
|
|
||||||
$sapphire = rgb(74c7ec)
|
|
||||||
$sapphireAlpha = 74c7ec
|
|
||||||
|
|
||||||
$blue = rgb(89b4fa)
|
|
||||||
$blueAlpha = 89b4fa
|
|
||||||
|
|
||||||
$lavender = rgb(b4befe)
|
|
||||||
$lavenderAlpha = b4befe
|
|
||||||
|
|
||||||
$text = rgb(cdd6f4)
|
|
||||||
$textAlpha = cdd6f4
|
|
||||||
|
|
||||||
$subtext1 = rgb(bac2de)
|
|
||||||
$subtext1Alpha = bac2de
|
|
||||||
|
|
||||||
$subtext0 = rgb(a6adc8)
|
|
||||||
$subtext0Alpha = a6adc8
|
|
||||||
|
|
||||||
$overlay2 = rgb(9399b2)
|
|
||||||
$overlay2Alpha = 9399b2
|
|
||||||
|
|
||||||
$overlay1 = rgb(7f849c)
|
|
||||||
$overlay1Alpha = 7f849c
|
|
||||||
|
|
||||||
$overlay0 = rgb(6c7086)
|
|
||||||
$overlay0Alpha = 6c7086
|
|
||||||
|
|
||||||
$surface2 = rgb(585b70)
|
|
||||||
$surface2Alpha = 585b70
|
|
||||||
|
|
||||||
$surface1 = rgb(45475a)
|
|
||||||
$surface1Alpha = 45475a
|
|
||||||
|
|
||||||
$surface0 = rgb(313244)
|
|
||||||
$surface0Alpha = 313244
|
|
||||||
|
|
||||||
$base = rgb(1e1e2e)
|
|
||||||
$baseAlpha = 1e1e2e
|
|
||||||
|
|
||||||
$mantle = rgb(181825)
|
|
||||||
$mantleAlpha = 181825
|
|
||||||
|
|
||||||
$crust = rgb(11111b)
|
|
||||||
$crustAlpha = 11111b
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Airplane Mode. Turning on or off all wifi using rfkill.
|
|
||||||
|
|
||||||
notif="$HOME/.config/swaync/images/bell.png"
|
|
||||||
|
|
||||||
# Check if any wireless device is blocked
|
|
||||||
wifi_blocked=$(rfkill list wifi | grep -o "Soft blocked: yes")
|
|
||||||
|
|
||||||
if [ -n "$wifi_blocked" ]; then
|
|
||||||
rfkill unblock wifi
|
|
||||||
notify-send -u low -i "$notif" 'Airplane mode: OFF'
|
|
||||||
else
|
|
||||||
rfkill block wifi
|
|
||||||
notify-send -u low -i "$notif" 'Airplane mode: ON'
|
|
||||||
fi
|
|
||||||
|
|
@ -1,74 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Script for Monitor backlights (if supported) using brightnessctl
|
|
||||||
|
|
||||||
iDIR="$HOME/.config/swaync/icons"
|
|
||||||
notification_timeout=1000
|
|
||||||
step=10 # INCREASE/DECREASE BY THIS VALUE
|
|
||||||
|
|
||||||
# Get brightness
|
|
||||||
get_backlight() {
|
|
||||||
brightnessctl -m | cut -d, -f4 | sed 's/%//'
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get icons
|
|
||||||
get_icon() {
|
|
||||||
current=$(get_backlight)
|
|
||||||
if [ "$current" -le "20" ]; then
|
|
||||||
icon="$iDIR/brightness-20.png"
|
|
||||||
elif [ "$current" -le "40" ]; then
|
|
||||||
icon="$iDIR/brightness-40.png"
|
|
||||||
elif [ "$current" -le "60" ]; then
|
|
||||||
icon="$iDIR/brightness-60.png"
|
|
||||||
elif [ "$current" -le "80" ]; then
|
|
||||||
icon="$iDIR/brightness-80.png"
|
|
||||||
else
|
|
||||||
icon="$iDIR/brightness-100.png"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Notify
|
|
||||||
notify_user() {
|
|
||||||
notify-send -e -h string:x-canonical-private-synchronous:brightness_notif -h int:value:$current -u low -i "$icon" "Brightness : $current%"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Change brightness
|
|
||||||
change_backlight() {
|
|
||||||
local current_brightness
|
|
||||||
current_brightness=$(get_backlight)
|
|
||||||
|
|
||||||
# Calculate new brightness
|
|
||||||
if [[ "$1" == "+${step}%" ]]; then
|
|
||||||
new_brightness=$((current_brightness + step))
|
|
||||||
elif [[ "$1" == "${step}%-" ]]; then
|
|
||||||
new_brightness=$((current_brightness - step))
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Ensure new brightness is within valid range
|
|
||||||
if (( new_brightness < 5 )); then
|
|
||||||
new_brightness=5
|
|
||||||
elif (( new_brightness > 100 )); then
|
|
||||||
new_brightness=100
|
|
||||||
fi
|
|
||||||
|
|
||||||
brightnessctl set "${new_brightness}%"
|
|
||||||
get_icon
|
|
||||||
current=$new_brightness
|
|
||||||
notify_user
|
|
||||||
}
|
|
||||||
|
|
||||||
# Execute accordingly
|
|
||||||
case "$1" in
|
|
||||||
"--get")
|
|
||||||
get_backlight
|
|
||||||
;;
|
|
||||||
"--inc")
|
|
||||||
change_backlight "+${step}%"
|
|
||||||
;;
|
|
||||||
"--dec")
|
|
||||||
change_backlight "${step}%-"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
get_backlight
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
@ -1,51 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Script for keyboard backlights (if supported) using brightnessctl
|
|
||||||
|
|
||||||
iDIR="$HOME/.config/swaync/icons"
|
|
||||||
|
|
||||||
# Get keyboard brightness
|
|
||||||
get_kbd_backlight() {
|
|
||||||
echo $(brightnessctl -d '*::kbd_backlight' -m | cut -d, -f4)
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get icons
|
|
||||||
get_icon() {
|
|
||||||
current=$(get_kbd_backlight | sed 's/%//')
|
|
||||||
if [ "$current" -le "20" ]; then
|
|
||||||
icon="$iDIR/brightness-20.png"
|
|
||||||
elif [ "$current" -le "40" ]; then
|
|
||||||
icon="$iDIR/brightness-40.png"
|
|
||||||
elif [ "$current" -le "60" ]; then
|
|
||||||
icon="$iDIR/brightness-60.png"
|
|
||||||
elif [ "$current" -le "80" ]; then
|
|
||||||
icon="$iDIR/brightness-80.png"
|
|
||||||
else
|
|
||||||
icon="$iDIR/brightness-100.png"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
# Notify
|
|
||||||
notify_user() {
|
|
||||||
notify-send -e -h string:x-canonical-private-synchronous:brightness_notif -h int:value:$current -u low -i "$icon" "Keyboard Brightness : $current%"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Change brightness
|
|
||||||
change_kbd_backlight() {
|
|
||||||
brightnessctl -d *::kbd_backlight set "$1" && get_icon && notify_user
|
|
||||||
}
|
|
||||||
|
|
||||||
# Execute accordingly
|
|
||||||
case "$1" in
|
|
||||||
"--get")
|
|
||||||
get_kbd_backlight
|
|
||||||
;;
|
|
||||||
"--inc")
|
|
||||||
change_kbd_backlight "+30%"
|
|
||||||
;;
|
|
||||||
"--dec")
|
|
||||||
change_kbd_backlight "30%-"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
get_kbd_backlight
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Script for changing blurs on the fly
|
|
||||||
|
|
||||||
notif="$HOME/.config/swaync/images/bell.png"
|
|
||||||
|
|
||||||
STATE=$(hyprctl -j getoption decoration:blur:passes | jq ".int")
|
|
||||||
|
|
||||||
if [ "${STATE}" == "2" ]; then
|
|
||||||
hyprctl keyword decoration:blur:size 2
|
|
||||||
hyprctl keyword decoration:blur:passes 1
|
|
||||||
notify-send -e -u low -i "$notif" "Less blur"
|
|
||||||
else
|
|
||||||
hyprctl keyword decoration:blur:size 5
|
|
||||||
hyprctl keyword decoration:blur:passes 2
|
|
||||||
notify-send -e -u low -i "$notif" "Normal blur"
|
|
||||||
fi
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# for changing Hyprland Layouts (Master or Dwindle) on the fly
|
|
||||||
|
|
||||||
notif="$HOME/.config/swaync/images/bell.png"
|
|
||||||
|
|
||||||
LAYOUT=$(hyprctl -j getoption general:layout | jq '.str' | sed 's/"//g')
|
|
||||||
|
|
||||||
case $LAYOUT in
|
|
||||||
"master")
|
|
||||||
hyprctl keyword general:layout dwindle
|
|
||||||
hyprctl keyword unbind SUPER,J
|
|
||||||
hyprctl keyword unbind SUPER,K
|
|
||||||
hyprctl keyword bind SUPER,J,cyclenext
|
|
||||||
hyprctl keyword bind SUPER,K,cyclenext,prev
|
|
||||||
hyprctl keyword bind SUPER,O,togglesplit
|
|
||||||
notify-send -e -u low -i "$notif" "Dwindle Layout"
|
|
||||||
;;
|
|
||||||
"dwindle")
|
|
||||||
hyprctl keyword general:layout master
|
|
||||||
hyprctl keyword unbind SUPER,J
|
|
||||||
hyprctl keyword unbind SUPER,K
|
|
||||||
hyprctl keyword unbind SUPER,O
|
|
||||||
hyprctl keyword bind SUPER,J,layoutmsg,cyclenext
|
|
||||||
hyprctl keyword bind SUPER,K,layoutmsg,cycleprev
|
|
||||||
notify-send -e -u low -i "$notif" "Master Layout"
|
|
||||||
;;
|
|
||||||
*) ;;
|
|
||||||
|
|
||||||
esac
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Clipboard Manager. This script uses cliphist, rofi, and wl-copy.
|
|
||||||
|
|
||||||
# Actions:
|
|
||||||
# CTRL Del to delete an entry
|
|
||||||
# ALT Del to wipe clipboard contents
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
result=$(
|
|
||||||
rofi -i -dmenu \
|
|
||||||
-kb-custom-1 "Control-Delete" \
|
|
||||||
-kb-custom-2 "Alt-Delete" \
|
|
||||||
-config ~/.config/rofi/config-clipboard.rasi < <(cliphist list)
|
|
||||||
)
|
|
||||||
|
|
||||||
case "$?" in
|
|
||||||
1)
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
0)
|
|
||||||
case "$result" in
|
|
||||||
"")
|
|
||||||
continue
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
cliphist decode <<<"$result" | wl-copy
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
10)
|
|
||||||
cliphist delete <<<"$result"
|
|
||||||
;;
|
|
||||||
11)
|
|
||||||
cliphist wipe
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
@ -1,242 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
## /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# For Dark and Light switching
|
|
||||||
# Note: Scripts are looking for keywords Light or Dark except for wallpapers as the are in a separate folders
|
|
||||||
|
|
||||||
# Paths
|
|
||||||
wallpaper_base_path="$HOME/Pictures/wallpapers/Dynamic-Wallpapers"
|
|
||||||
dark_wallpapers="$wallpaper_base_path/Dark"
|
|
||||||
light_wallpapers="$wallpaper_base_path/Light"
|
|
||||||
hypr_config_path="$HOME/.config/hypr"
|
|
||||||
swaync_style="$HOME/.config/swaync/style.css"
|
|
||||||
ags_style="$HOME/.config/ags/user/style.css"
|
|
||||||
SCRIPTSDIR="$HOME/.config/hypr/scripts"
|
|
||||||
notif="$HOME/.config/swaync/images/bell.png"
|
|
||||||
wallust_rofi="$HOME/.config/wallust/templates/colors-rofi.rasi"
|
|
||||||
|
|
||||||
kitty_conf="$HOME/.config/kitty/kitty.conf"
|
|
||||||
|
|
||||||
wallust_config="$HOME/.config/wallust/wallust.toml"
|
|
||||||
pallete_dark="dark16"
|
|
||||||
pallete_light="light16"
|
|
||||||
|
|
||||||
# kill swaybg if running
|
|
||||||
pkill swaybg
|
|
||||||
|
|
||||||
# Initialize swww if needed
|
|
||||||
swww query || swww-daemon
|
|
||||||
|
|
||||||
# Set swww options
|
|
||||||
swww="swww img"
|
|
||||||
effect="--transition-bezier .43,1.19,1,.4 --transition-fps 60 --transition-type grow --transition-pos 0.925,0.977 --transition-duration 2"
|
|
||||||
|
|
||||||
# Determine current theme mode
|
|
||||||
if [ "$(cat $HOME/.cache/.theme_mode)" = "Light" ]; then
|
|
||||||
next_mode="Dark"
|
|
||||||
# Logic for Dark mode
|
|
||||||
wallpaper_path="$dark_wallpapers"
|
|
||||||
else
|
|
||||||
next_mode="Light"
|
|
||||||
# Logic for Light mode
|
|
||||||
wallpaper_path="$light_wallpapers"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Function to update theme mode for the next cycle
|
|
||||||
update_theme_mode() {
|
|
||||||
echo "$next_mode" > ~/.cache/.theme_mode
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to notify user
|
|
||||||
notify_user() {
|
|
||||||
notify-send -u low -i "$notif" "Switching to $1 mode"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Use sed to replace the palette setting in the wallust config file
|
|
||||||
if [ "$next_mode" = "Dark" ]; then
|
|
||||||
sed -i 's/^palette = .*/palette = "'"$pallete_dark"'"/' "$wallust_config"
|
|
||||||
else
|
|
||||||
sed -i 's/^palette = .*/palette = "'"$pallete_light"'"/' "$wallust_config"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Function to set Waybar style
|
|
||||||
set_waybar_style() {
|
|
||||||
theme="$1"
|
|
||||||
waybar_styles="$HOME/.config/waybar/style"
|
|
||||||
waybar_style_link="$HOME/.config/waybar/style.css"
|
|
||||||
style_prefix="\\[${theme}\\].*\\.css$"
|
|
||||||
|
|
||||||
style_file=$(find "$waybar_styles" -maxdepth 1 -type f -regex ".*$style_prefix" | shuf -n 1)
|
|
||||||
|
|
||||||
if [ -n "$style_file" ]; then
|
|
||||||
ln -sf "$style_file" "$waybar_style_link"
|
|
||||||
else
|
|
||||||
echo "Style file not found for $theme theme."
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Call the function after determining the mode
|
|
||||||
set_waybar_style "$next_mode"
|
|
||||||
notify_user "$next_mode"
|
|
||||||
|
|
||||||
|
|
||||||
# swaync color change
|
|
||||||
if [ "$next_mode" = "Dark" ]; then
|
|
||||||
sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(0, 0, 0, 0.8);/' "${swaync_style}"
|
|
||||||
sed -i '/@define-color noti-bg-alt/s/#.*;/#111111;/' "${swaync_style}"
|
|
||||||
else
|
|
||||||
sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(255, 255, 255, 0.9);/' "${swaync_style}"
|
|
||||||
sed -i '/@define-color noti-bg-alt/s/#.*;/#F0F0F0;/' "${swaync_style}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ags color change
|
|
||||||
if [ "$next_mode" = "Dark" ]; then
|
|
||||||
sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(0, 0, 0, 0.4);/' "${ags_style}"
|
|
||||||
sed -i '/@define-color text-color/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(255, 255, 255, 0.7);/' "${ags_style}"
|
|
||||||
sed -i '/@define-color noti-bg-alt/s/#.*;/#111111;/' "${ags_style}"
|
|
||||||
else
|
|
||||||
sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(255, 255, 255, 0.4);/' "${ags_style}"
|
|
||||||
sed -i '/@define-color text-color/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(0, 0, 0, 0.7);/' "${ags_style}"
|
|
||||||
sed -i '/@define-color noti-bg-alt/s/#.*;/#F0F0F0;/' "${ags_style}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# kitty background color change
|
|
||||||
if [ "$next_mode" = "Dark" ]; then
|
|
||||||
sed -i '/^foreground /s/^foreground .*/foreground #dddddd/' "${kitty_conf}"
|
|
||||||
sed -i '/^background /s/^background .*/background #000000/' "${kitty_conf}"
|
|
||||||
sed -i '/^cursor /s/^cursor .*/cursor #dddddd/' "${kitty_conf}"
|
|
||||||
else
|
|
||||||
sed -i '/^foreground /s/^foreground .*/foreground #000000/' "${kitty_conf}"
|
|
||||||
sed -i '/^background /s/^background .*/background #dddddd/' "${kitty_conf}"
|
|
||||||
sed -i '/^cursor /s/^cursor .*/cursor #000000/' "${kitty_conf}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Set Dynamic Wallpaper for Dark or Light Mode
|
|
||||||
if [ "$next_mode" = "Dark" ]; then
|
|
||||||
next_wallpaper="$(find "${dark_wallpapers}" -type f \( -iname "*.jpg" -o -iname "*.png" \) -print0 | shuf -n1 -z | xargs -0)"
|
|
||||||
else
|
|
||||||
next_wallpaper="$(find "${light_wallpapers}" -type f \( -iname "*.jpg" -o -iname "*.png" \) -print0 | shuf -n1 -z | xargs -0)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Update wallpaper using swww command
|
|
||||||
$swww "${next_wallpaper}" $effect
|
|
||||||
|
|
||||||
|
|
||||||
# Set Kvantum Manager theme & QT5/QT6 settings
|
|
||||||
if [ "$next_mode" = "Dark" ]; then
|
|
||||||
kvantum_theme="Catppuccin-Mocha"
|
|
||||||
qt5ct_color_scheme="$HOME/.config/qt5ct/colors/Catppuccin-Mocha.conf"
|
|
||||||
qt6ct_color_scheme="$HOME/.config/qt6ct/colors/Catppuccin-Mocha.conf"
|
|
||||||
else
|
|
||||||
kvantum_theme="Catppuccin-Latte"
|
|
||||||
qt5ct_color_scheme="$HOME/.config/qt5ct/colors/Catppuccin-Latte.conf"
|
|
||||||
qt6ct_color_scheme="$HOME/.config/qt6ct/colors/Catppuccin-Latte.conf"
|
|
||||||
fi
|
|
||||||
|
|
||||||
sed -i "s|^color_scheme_path=.*$|color_scheme_path=$qt5ct_color_scheme|" "$HOME/.config/qt5ct/qt5ct.conf"
|
|
||||||
sed -i "s|^color_scheme_path=.*$|color_scheme_path=$qt6ct_color_scheme|" "$HOME/.config/qt6ct/qt6ct.conf"
|
|
||||||
kvantummanager --set "$kvantum_theme"
|
|
||||||
|
|
||||||
|
|
||||||
# set the rofi color for background
|
|
||||||
if [ "$next_mode" = "Dark" ]; then
|
|
||||||
sed -i '24s/.*/background: rgba(0,0,0,0.7);/' $wallust_rofi
|
|
||||||
else
|
|
||||||
sed -i '24s/.*/background: rgba(255,255,255,0.9);/' $wallust_rofi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# GTK themes and icons switching
|
|
||||||
set_custom_gtk_theme() {
|
|
||||||
mode=$1
|
|
||||||
gtk_themes_directory="$HOME/.themes"
|
|
||||||
icon_directory="$HOME/.icons"
|
|
||||||
color_setting="org.gnome.desktop.interface color-scheme"
|
|
||||||
theme_setting="org.gnome.desktop.interface gtk-theme"
|
|
||||||
icon_setting="org.gnome.desktop.interface icon-theme"
|
|
||||||
|
|
||||||
if [ "$mode" == "Light" ]; then
|
|
||||||
search_keywords="*Light*"
|
|
||||||
gsettings set $color_setting 'prefer-light'
|
|
||||||
elif [ "$mode" == "Dark" ]; then
|
|
||||||
search_keywords="*Dark*"
|
|
||||||
gsettings set $color_setting 'prefer-dark'
|
|
||||||
else
|
|
||||||
echo "Invalid mode provided."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
themes=()
|
|
||||||
icons=()
|
|
||||||
|
|
||||||
while IFS= read -r -d '' theme_search; do
|
|
||||||
themes+=("$(basename "$theme_search")")
|
|
||||||
done < <(find "$gtk_themes_directory" -maxdepth 1 -type d -iname "$search_keywords" -print0)
|
|
||||||
|
|
||||||
while IFS= read -r -d '' icon_search; do
|
|
||||||
icons+=("$(basename "$icon_search")")
|
|
||||||
done < <(find "$icon_directory" -maxdepth 1 -type d -iname "$search_keywords" -print0)
|
|
||||||
|
|
||||||
if [ ${#themes[@]} -gt 0 ]; then
|
|
||||||
if [ "$mode" == "Dark" ]; then
|
|
||||||
selected_theme=${themes[RANDOM % ${#themes[@]}]}
|
|
||||||
else
|
|
||||||
selected_theme=${themes[$RANDOM % ${#themes[@]}]}
|
|
||||||
fi
|
|
||||||
echo "Selected GTK theme for $mode mode: $selected_theme"
|
|
||||||
gsettings set $theme_setting "$selected_theme"
|
|
||||||
|
|
||||||
# Flatpak GTK apps (themes)
|
|
||||||
if command -v flatpak &> /dev/null; then
|
|
||||||
flatpak --user override --filesystem=$HOME/.themes
|
|
||||||
sleep 0.5
|
|
||||||
flatpak --user override --env=GTK_THEME="$selected_theme"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "No $mode GTK theme found"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ${#icons[@]} -gt 0 ]; then
|
|
||||||
if [ "$mode" == "Dark" ]; then
|
|
||||||
selected_icon=${icons[RANDOM % ${#icons[@]}]}
|
|
||||||
else
|
|
||||||
selected_icon=${icons[$RANDOM % ${#icons[@]}]}
|
|
||||||
fi
|
|
||||||
echo "Selected icon theme for $mode mode: $selected_icon"
|
|
||||||
gsettings set $icon_setting "$selected_icon"
|
|
||||||
|
|
||||||
## QT5ct icon_theme
|
|
||||||
sed -i "s|^icon_theme=.*$|icon_theme=$selected_icon|" "$HOME/.config/qt5ct/qt5ct.conf"
|
|
||||||
sed -i "s|^icon_theme=.*$|icon_theme=$selected_icon|" "$HOME/.config/qt6ct/qt6ct.conf"
|
|
||||||
|
|
||||||
# Flatpak GTK apps (icons)
|
|
||||||
if command -v flatpak &> /dev/null; then
|
|
||||||
flatpak --user override --filesystem=$HOME/.icons
|
|
||||||
sleep 0.5
|
|
||||||
flatpak --user override --env=ICON_THEME="$selected_icon"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "No $mode icon theme found"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Call the function to set GTK theme and icon theme based on mode
|
|
||||||
set_custom_gtk_theme "$next_mode"
|
|
||||||
|
|
||||||
# Update theme mode for the next cycle
|
|
||||||
update_theme_mode
|
|
||||||
|
|
||||||
sleep 0.5
|
|
||||||
# Run remaining scripts
|
|
||||||
${SCRIPTSDIR}/WallustSwww.sh
|
|
||||||
sleep 1
|
|
||||||
${SCRIPTSDIR}/Refresh.sh
|
|
||||||
|
|
||||||
sleep 0.3
|
|
||||||
# Display notifications for theme and icon changes
|
|
||||||
notify-send -u normal -i "$notif" "Themes in $next_mode Mode"
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Game Mode. Turning off all animations
|
|
||||||
|
|
||||||
notif="$HOME/.config/swaync/images/bell.png"
|
|
||||||
SCRIPTSDIR="$HOME/.config/hypr/scripts"
|
|
||||||
|
|
||||||
|
|
||||||
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}')
|
|
||||||
if [ "$HYPRGAMEMODE" = 1 ] ; then
|
|
||||||
hyprctl --batch "\
|
|
||||||
keyword animations:enabled 0;\
|
|
||||||
keyword decoration:drop_shadow 0;\
|
|
||||||
keyword decoration:blur:passes 0;\
|
|
||||||
keyword general:gaps_in 0;\
|
|
||||||
keyword general:gaps_out 0;\
|
|
||||||
keyword general:border_size 1;\
|
|
||||||
keyword decoration:rounding 0"
|
|
||||||
|
|
||||||
hyprctl keyword "windowrule opacity 1 override 1 override 1 override, ^(.*)$"
|
|
||||||
swww kill
|
|
||||||
notify-send -e -u low -i "$notif" "gamemode enabled. All animations off"
|
|
||||||
exit
|
|
||||||
else
|
|
||||||
swww-daemon --format xrgb && swww img "$HOME/.config/rofi/.current_wallpaper" &
|
|
||||||
sleep 0.1
|
|
||||||
${SCRIPTSDIR}/WallustSwww.sh
|
|
||||||
sleep 0.5
|
|
||||||
${SCRIPTSDIR}/Refresh.sh
|
|
||||||
notify-send -e -u normal -i "$notif" "gamemode disabled. All animations normal"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
hyprctl reload
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# This is for custom version of waybar idle_inhibitor which activates / deactivates hypridle instead
|
|
||||||
|
|
||||||
PROCESS="hypridle"
|
|
||||||
|
|
||||||
if [[ "$1" == "status" ]]; then
|
|
||||||
sleep 1
|
|
||||||
if pgrep -x "$PROCESS" >/dev/null; then
|
|
||||||
echo '{"text": "RUNNING", "class": "active", "tooltip": "idle_inhibitor NOT ACTIVE\nLeft Click: Activate\nRight Click: Lock Screen"}'
|
|
||||||
else
|
|
||||||
echo '{"text": "NOT RUNNING", "class": "notactive", "tooltip": "idle_inhibitor is ACTIVE\nLeft Click: Deactivate\nRight Click: Lock Screen"}'
|
|
||||||
fi
|
|
||||||
elif [[ "$1" == "toggle" ]]; then
|
|
||||||
if pgrep -x "$PROCESS" >/dev/null; then
|
|
||||||
pkill "$PROCESS"
|
|
||||||
else
|
|
||||||
"$PROCESS"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "Usage: $0 {status|toggle}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
@ -1,82 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Keyhints. Idea got from Garuda Hyprland
|
|
||||||
|
|
||||||
# GDK BACKEND. Change to either wayland or x11 if having issues
|
|
||||||
BACKEND=wayland
|
|
||||||
|
|
||||||
# Detect monitor resolution and scale
|
|
||||||
x_mon=$(hyprctl -j monitors | jq '.[] | select(.focused==true) | .width')
|
|
||||||
y_mon=$(hyprctl -j monitors | jq '.[] | select(.focused==true) | .height')
|
|
||||||
hypr_scale=$(hyprctl -j monitors | jq '.[] | select (.focused == true) | .scale' | sed 's/\.//')
|
|
||||||
|
|
||||||
# Calculate width and height based on percentages and monitor resolution
|
|
||||||
width=$((x_mon * hypr_scale / 100))
|
|
||||||
height=$((y_mon * hypr_scale / 100))
|
|
||||||
|
|
||||||
# Set maximum width and height
|
|
||||||
max_width=1200
|
|
||||||
max_height=1000
|
|
||||||
|
|
||||||
# Set percentage of screen size for dynamic adjustment
|
|
||||||
percentage_width=70
|
|
||||||
percentage_height=70
|
|
||||||
|
|
||||||
# Calculate dynamic width and height
|
|
||||||
dynamic_width=$((width * percentage_width / 100))
|
|
||||||
dynamic_height=$((height * percentage_height / 100))
|
|
||||||
|
|
||||||
# Limit width and height to maximum values
|
|
||||||
dynamic_width=$(($dynamic_width > $max_width ? $max_width : $dynamic_width))
|
|
||||||
dynamic_height=$(($dynamic_height > $max_height ? $max_height : $dynamic_height))
|
|
||||||
|
|
||||||
# Launch yad with calculated width and height
|
|
||||||
GDK_BACKEND=$BACKEND yad --width=$dynamic_width --height=$dynamic_height \
|
|
||||||
--center \
|
|
||||||
--title="Keybindings" \
|
|
||||||
--no-buttons \
|
|
||||||
--list \
|
|
||||||
--column=Key: \
|
|
||||||
--column=Description: \
|
|
||||||
--column=Command: \
|
|
||||||
--timeout-indicator=bottom \
|
|
||||||
"ESC" "close this app" "" "=" "SUPER KEY (Windows Key)" "(SUPER KEY)" \
|
|
||||||
" enter" "Terminal" "(kitty)" \
|
|
||||||
" SHIFT enter" "DropDown Terminal" "(kitty-pyprland)" \
|
|
||||||
" A" "Desktop Overview" "(AGS Overview)" \
|
|
||||||
" D" "App Launcher" "(rofi-wayland)" \
|
|
||||||
" T" "Open File Manager" "(Thunar)" \
|
|
||||||
" S" "Google Search" "(rofi)" \
|
|
||||||
" Q" "close active window" "(not kill)" \
|
|
||||||
" Shift Q " "kills an active window" "(kill)" \
|
|
||||||
" Z" "Desktop Zoom" "(pyprland)" \
|
|
||||||
" Alt V" "Clipboard Manager" "(cliphist)" \
|
|
||||||
" W" "Choose wallpaper" "(Wallpaper Menu)" \
|
|
||||||
" Shift W" "Choose wallpaper effects" "(imagemagick + swww)" \
|
|
||||||
"CTRL ALT W" "Random wallpaper" "(via swww)" \
|
|
||||||
" B" "Hide/UnHide Waybar" "waybar" \
|
|
||||||
" CTRL B" "Choose waybar styles" "(waybar styles)" \
|
|
||||||
" ALT B" "Choose waybar layout" "(waybar layout)" \
|
|
||||||
" ALT R" "Reload Waybar swaync Rofi" "CHECK NOTIFICATION FIRST!!!" \
|
|
||||||
" SHIFT N" "Launch Notification Panel" "swaync Notification Center" \
|
|
||||||
" Print" "screenshot" "(grim)" \
|
|
||||||
" Shift Print" "screenshot region" "(grim + slurp)" \
|
|
||||||
" Shift S" "screenshot region" "(swappy)" \
|
|
||||||
" CTRL Print" "screenshot timer 5 secs " "(grim)" \
|
|
||||||
" CTRL SHIFT Print" "screenshot timer 10 secs " "(grim)" \
|
|
||||||
"ALT Print" "Screenshot active window" "active window only" \
|
|
||||||
"CTRL ALT P" "power-menu" "(wlogout)" \
|
|
||||||
"CTRL ALT L" "screen lock" "(hyprlock)" \
|
|
||||||
"CTRL ALT Del" "Hyprland Exit" "(SAVE YOUR WORK!!!)" \
|
|
||||||
" F" "Fullscreen" "Toggles to full screen" \
|
|
||||||
" ALT L" "Toggle Dwindle | Master Layout" "Hyprland Layout" \
|
|
||||||
" Shift F" "Toggle float" "single window" \
|
|
||||||
" ALT F" "Toggle all windows to float" "all windows" \
|
|
||||||
" Shift B" "Toggle Blur" "normal or less blur" \
|
|
||||||
" SHIFT G" "Gamemode! All animations OFF or ON" "toggle" \
|
|
||||||
" ALT E" "Rofi Emoticons" "Emoticon" \
|
|
||||||
" ALT V" "Clipboard Manager" "cliphist" \
|
|
||||||
" H" "Launch this app" "" \
|
|
||||||
" E" "View or EDIT Keybinds, Settings, Monitor" "" \
|
|
||||||
"" "" "" \
|
|
||||||
"More tips:" "https://github.com/JaKooLit/Hyprland-Dots/wiki" ""\
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
|
|
||||||
# Copied from Discord post. Thanks to @Zorg
|
|
||||||
|
|
||||||
|
|
||||||
# Get id of an active window
|
|
||||||
active_pid=$(hyprctl activewindow | grep -o 'pid: [0-9]*' | cut -d' ' -f2)
|
|
||||||
|
|
||||||
# Close active window
|
|
||||||
kill "$active_pid"
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# For Hyprlock
|
|
||||||
##pidof hyprlock || hyprlock -q
|
|
||||||
|
|
||||||
loginctl lock-session
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Playerctl
|
|
||||||
|
|
||||||
music_icon="$HOME/.config/swaync/icons/music.png"
|
|
||||||
|
|
||||||
# Play the next track
|
|
||||||
play_next() {
|
|
||||||
playerctl next
|
|
||||||
show_music_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
# Play the previous track
|
|
||||||
play_previous() {
|
|
||||||
playerctl previous
|
|
||||||
show_music_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
# Toggle play/pause
|
|
||||||
toggle_play_pause() {
|
|
||||||
playerctl play-pause
|
|
||||||
show_music_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
# Stop playback
|
|
||||||
stop_playback() {
|
|
||||||
playerctl stop
|
|
||||||
notify-send -e -u low -i "$music_icon" "Playback Stopped"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display notification with song information
|
|
||||||
show_music_notification() {
|
|
||||||
status=$(playerctl status)
|
|
||||||
if [[ "$status" == "Playing" ]]; then
|
|
||||||
song_title=$(playerctl metadata title)
|
|
||||||
song_artist=$(playerctl metadata artist)
|
|
||||||
notify-send -e -u low -i "$music_icon" "Now Playing:" "$song_title\nby $song_artist"
|
|
||||||
elif [[ "$status" == "Paused" ]]; then
|
|
||||||
notify-send -e -u low -i "$music_icon" "Playback Paused"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get media control action from command line argument
|
|
||||||
case "$1" in
|
|
||||||
"--nxt")
|
|
||||||
play_next
|
|
||||||
;;
|
|
||||||
"--prv")
|
|
||||||
play_previous
|
|
||||||
;;
|
|
||||||
"--pause")
|
|
||||||
toggle_play_pause
|
|
||||||
;;
|
|
||||||
"--stop")
|
|
||||||
stop_playback
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Usage: $0 [--nxt|--prv|--pause|--stop]"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# This is for polkits, it will start from top and will stop if the top is executed
|
|
||||||
|
|
||||||
# Polkit possible paths files to check
|
|
||||||
polkit=(
|
|
||||||
"/usr/lib/polkit-kde-authentication-agent-1"
|
|
||||||
"/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1"
|
|
||||||
"/usr/lib/polkit-gnome-authentication-agent-1"
|
|
||||||
"/usr/libexec/polkit-gnome-authentication-agent-1"
|
|
||||||
"/usr/libexec/polkit-mate-authentication-agent-1"
|
|
||||||
"/usr/lib/x86_64-linux-gnu/libexec/polkit-kde-authentication-agent-1"
|
|
||||||
"/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1"
|
|
||||||
)
|
|
||||||
|
|
||||||
executed=false # Flag to track if a file has been executed
|
|
||||||
|
|
||||||
# Loop through the list of files
|
|
||||||
for file in "${polkit[@]}"; do
|
|
||||||
if [ -e "$file" ]; then
|
|
||||||
echo "File $file found, executing command..."
|
|
||||||
exec "$file"
|
|
||||||
executed=true
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# If none of the files were found, you can add a fallback command here
|
|
||||||
if [ "$executed" == false ]; then
|
|
||||||
echo "None of the specified files were found. Install a Polkit"
|
|
||||||
fi
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# For manually starting xdg-desktop-portal
|
|
||||||
|
|
||||||
sleep 1
|
|
||||||
killall xdg-desktop-portal-hyprland
|
|
||||||
killall xdg-desktop-portal-wlr
|
|
||||||
killall xdg-desktop-portal-gnome
|
|
||||||
killall xdg-desktop-portal
|
|
||||||
sleep 1
|
|
||||||
/usr/lib/xdg-desktop-portal-hyprland &
|
|
||||||
/usr/libexec/xdg-desktop-portal-hyprland &
|
|
||||||
sleep 2
|
|
||||||
/usr/lib/xdg-desktop-portal &
|
|
||||||
/usr/libexec/xdg-desktop-portal &
|
|
||||||
|
|
||||||
|
|
@ -1,46 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Scripts for refreshing ags waybar, rofi, swaync, wallust
|
|
||||||
|
|
||||||
SCRIPTSDIR=$HOME/.config/hypr/scripts
|
|
||||||
UserScripts=$HOME/.config/hypr/UserScripts
|
|
||||||
|
|
||||||
# Define file_exists function
|
|
||||||
file_exists() {
|
|
||||||
if [ -e "$1" ]; then
|
|
||||||
return 0 # File exists
|
|
||||||
else
|
|
||||||
return 1 # File does not exist
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Kill already running processes
|
|
||||||
_ps=(waybar rofi swaync ags)
|
|
||||||
for _prs in "${_ps[@]}"; do
|
|
||||||
if pidof "${_prs}" >/dev/null; then
|
|
||||||
pkill "${_prs}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# quit ags
|
|
||||||
ags -q
|
|
||||||
|
|
||||||
sleep 0.3
|
|
||||||
#Restart waybar
|
|
||||||
waybar &
|
|
||||||
|
|
||||||
# relaunch swaync
|
|
||||||
sleep 0.5
|
|
||||||
swaync > /dev/null 2>&1 &
|
|
||||||
|
|
||||||
# relaunch ags
|
|
||||||
ags &
|
|
||||||
|
|
||||||
# Relaunching rainbow borders if the script exists
|
|
||||||
sleep 1
|
|
||||||
if file_exists "${UserScripts}/RainbowBorders.sh"; then
|
|
||||||
${UserScripts}/RainbowBorders.sh &
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,129 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Screenshots scripts
|
|
||||||
|
|
||||||
iDIR="$HOME/.config/swaync/icons"
|
|
||||||
sDIR="$HOME/.config/hypr/scripts"
|
|
||||||
notify_cmd_shot="notify-send -h string:x-canonical-private-synchronous:shot-notify -u low -i ${iDIR}/picture.png"
|
|
||||||
|
|
||||||
time=$(date "+%d-%b_%H-%M-%S")
|
|
||||||
dir="$(xdg-user-dir)/Pictures/Screenshots"
|
|
||||||
file="Screenshot_${time}_${RANDOM}.png"
|
|
||||||
|
|
||||||
active_window_class=$(hyprctl -j activewindow | jq -r '(.class)')
|
|
||||||
active_window_file="Screenshot_${time}_${active_window_class}.png"
|
|
||||||
active_window_path="${dir}/${active_window_file}"
|
|
||||||
|
|
||||||
# notify and view screenshot
|
|
||||||
notify_view() {
|
|
||||||
if [[ "$1" == "active" ]]; then
|
|
||||||
if [[ -e "${active_window_path}" ]]; then
|
|
||||||
${notify_cmd_shot} "Screenshot of '${active_window_class}' Saved."
|
|
||||||
"${sDIR}/Sounds.sh" --screenshot
|
|
||||||
else
|
|
||||||
${notify_cmd_shot} "Screenshot of '${active_window_class}' not Saved"
|
|
||||||
"${sDIR}/Sounds.sh" --error
|
|
||||||
fi
|
|
||||||
elif [[ "$1" == "swappy" ]]; then
|
|
||||||
${notify_cmd_shot} "Screenshot Captured."
|
|
||||||
else
|
|
||||||
local check_file="$dir/$file"
|
|
||||||
if [[ -e "$check_file" ]]; then
|
|
||||||
${notify_cmd_shot} "Screenshot Saved."
|
|
||||||
"${sDIR}/Sounds.sh" --screenshot
|
|
||||||
else
|
|
||||||
${notify_cmd_shot} "Screenshot NOT Saved."
|
|
||||||
"${sDIR}/Sounds.sh" --error
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# countdown
|
|
||||||
countdown() {
|
|
||||||
for sec in $(seq $1 -1 1); do
|
|
||||||
notify-send -h string:x-canonical-private-synchronous:shot-notify -t 1000 -i "$iDIR"/timer.png "Taking shot in : $sec"
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# take shots
|
|
||||||
shotnow() {
|
|
||||||
cd ${dir} && grim - | tee "$file" | wl-copy
|
|
||||||
sleep 2
|
|
||||||
notify_view
|
|
||||||
}
|
|
||||||
|
|
||||||
shot5() {
|
|
||||||
countdown '5'
|
|
||||||
sleep 1 && cd ${dir} && grim - | tee "$file" | wl-copy
|
|
||||||
sleep 1
|
|
||||||
notify_view
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
shot10() {
|
|
||||||
countdown '10'
|
|
||||||
sleep 1 && cd ${dir} && grim - | tee "$file" | wl-copy
|
|
||||||
notify_view
|
|
||||||
}
|
|
||||||
|
|
||||||
shotwin() {
|
|
||||||
w_pos=$(hyprctl activewindow | grep 'at:' | cut -d':' -f2 | tr -d ' ' | tail -n1)
|
|
||||||
w_size=$(hyprctl activewindow | grep 'size:' | cut -d':' -f2 | tr -d ' ' | tail -n1 | sed s/,/x/g)
|
|
||||||
cd ${dir} && grim -g "$w_pos $w_size" - | tee "$file" | wl-copy
|
|
||||||
notify_view
|
|
||||||
}
|
|
||||||
|
|
||||||
shotarea() {
|
|
||||||
tmpfile=$(mktemp)
|
|
||||||
grim -g "$(slurp)" - >"$tmpfile"
|
|
||||||
if [[ -s "$tmpfile" ]]; then
|
|
||||||
wl-copy <"$tmpfile"
|
|
||||||
mv "$tmpfile" "$dir/$file"
|
|
||||||
fi
|
|
||||||
notify_view
|
|
||||||
}
|
|
||||||
|
|
||||||
shotactive() {
|
|
||||||
active_window_class=$(hyprctl -j activewindow | jq -r '(.class)')
|
|
||||||
active_window_file="Screenshot_${time}_${active_window_class}.png"
|
|
||||||
active_window_path="${dir}/${active_window_file}"
|
|
||||||
|
|
||||||
hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - "${active_window_path}"
|
|
||||||
sleep 1
|
|
||||||
notify_view "active"
|
|
||||||
}
|
|
||||||
|
|
||||||
shotswappy() {
|
|
||||||
tmpfile=$(mktemp)
|
|
||||||
grim -g "$(slurp)" - >"$tmpfile" && "${sDIR}/Sounds.sh" --screenshot && notify_view "swappy"
|
|
||||||
swappy -f - <"$tmpfile"
|
|
||||||
rm "$tmpfile"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if [[ ! -d "$dir" ]]; then
|
|
||||||
mkdir -p "$dir"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$1" == "--now" ]]; then
|
|
||||||
shotnow
|
|
||||||
elif [[ "$1" == "--in5" ]]; then
|
|
||||||
shot5
|
|
||||||
elif [[ "$1" == "--in10" ]]; then
|
|
||||||
shot10
|
|
||||||
elif [[ "$1" == "--win" ]]; then
|
|
||||||
shotwin
|
|
||||||
elif [[ "$1" == "--area" ]]; then
|
|
||||||
shotarea
|
|
||||||
elif [[ "$1" == "--active" ]]; then
|
|
||||||
shotactive
|
|
||||||
elif [[ "$1" == "--swappy" ]]; then
|
|
||||||
shotswappy
|
|
||||||
else
|
|
||||||
echo -e "Available Options : --now --in5 --in10 --win --area --active --swappy"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
@ -1,77 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# This script is used to play system sounds.
|
|
||||||
# Script is used by Volume.Sh and ScreenShots.sh
|
|
||||||
|
|
||||||
theme="freedesktop" # Set the theme for the system sounds.
|
|
||||||
mute=false # Set to true to mute the system sounds.
|
|
||||||
|
|
||||||
# Mute individual sounds here.
|
|
||||||
muteScreenshots=false
|
|
||||||
muteVolume=false
|
|
||||||
|
|
||||||
# Exit if the system sounds are muted.
|
|
||||||
if [[ "$mute" = true ]]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Choose the sound to play.
|
|
||||||
if [[ "$1" == "--screenshot" ]]; then
|
|
||||||
if [[ "$muteScreenshots" = true ]]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
soundoption="screen-capture.*"
|
|
||||||
elif [[ "$1" == "--volume" ]]; then
|
|
||||||
if [[ "$muteVolume" = true ]]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
soundoption="audio-volume-change.*"
|
|
||||||
elif [[ "$1" == "--error" ]]; then
|
|
||||||
if [[ "$muteScreenshots" = true ]]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
soundoption="dialog-error.*"
|
|
||||||
else
|
|
||||||
echo -e "Available sounds: --screenshot, --volume, --error"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set the directory defaults for system sounds.
|
|
||||||
if [ -d "/run/current-system/sw/share/sounds" ]; then
|
|
||||||
systemDIR="/run/current-system/sw/share/sounds" # NixOS
|
|
||||||
else
|
|
||||||
systemDIR="/usr/share/sounds"
|
|
||||||
fi
|
|
||||||
userDIR="$HOME/.local/share/sounds"
|
|
||||||
defaultTheme="freedesktop"
|
|
||||||
|
|
||||||
# Prefer the user's theme, but use the system's if it doesn't exist.
|
|
||||||
sDIR="$systemDIR/$defaultTheme"
|
|
||||||
if [ -d "$userDIR/$theme" ]; then
|
|
||||||
sDIR="$userDIR/$theme"
|
|
||||||
elif [ -d "$systemDIR/$theme" ]; then
|
|
||||||
sDIR="$systemDIR/$theme"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Get the theme that it inherits.
|
|
||||||
iTheme=$(cat "$sDIR/index.theme" | grep -i "inherits" | cut -d "=" -f 2)
|
|
||||||
iDIR="$sDIR/../$iTheme"
|
|
||||||
|
|
||||||
# Find the sound file and play it.
|
|
||||||
sound_file=$(find $sDIR/stereo -name "$soundoption" -print -quit)
|
|
||||||
if ! test -f "$sound_file"; then
|
|
||||||
sound_file=$(find $iDIR/stereo -name "$soundoption" -print -quit)
|
|
||||||
if ! test -f "$sound_file"; then
|
|
||||||
sound_file=$(find $userDIR/$defaultTheme/stereo -name "$soundoption" -print -quit)
|
|
||||||
if ! test -f "$sound_file"; then
|
|
||||||
sound_file=$(find $systemDIR/$defaultTheme/stereo -name "$soundoption" -print -quit)
|
|
||||||
if ! test -f "$sound_file"; then
|
|
||||||
echo "Error: Sound file not found."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# pipewire priority, fallback pulseaudio
|
|
||||||
pw-play "$sound_file" || pa-play "$sound_file"
|
|
||||||
|
|
@ -1,104 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# This is for changing kb_layouts. Set kb_layouts in $settings_file
|
|
||||||
|
|
||||||
layout_file="$HOME/.cache/kb_layout"
|
|
||||||
settings_file="$HOME/.config/hypr/UserConfigs/UserSettings.conf"
|
|
||||||
notif_icon="$HOME/.config/swaync/images/bell.png"
|
|
||||||
|
|
||||||
# Refined ignore list with patterns or specific device names
|
|
||||||
ignore_patterns=(
|
|
||||||
"--(avrcp)"
|
|
||||||
"Bluetooth Speaker"
|
|
||||||
"Other Device
|
|
||||||
Name"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
# Create layout file with default layout if it does not exist
|
|
||||||
if [ ! -f "$layout_file" ]; then
|
|
||||||
echo "Creating layout file..."
|
|
||||||
default_layout=$(grep 'kb_layout = ' "$settings_file" | cut -d '=' -f 2 | tr -d '[:space:]' | cut -d ',' -f 1 2>/dev/null)
|
|
||||||
default_layout=${default_layout:-"us"} # Default to 'us' layout
|
|
||||||
echo "$default_layout" > "$layout_file"
|
|
||||||
echo "Default layout set to $default_layout"
|
|
||||||
fi
|
|
||||||
|
|
||||||
current_layout=$(cat "$layout_file")
|
|
||||||
echo "Current layout: $current_layout"
|
|
||||||
|
|
||||||
# Read available layouts from settings file
|
|
||||||
if [ -f "$settings_file" ]; then
|
|
||||||
kb_layout_line=$(grep 'kb_layout = ' "$settings_file" | cut -d '=' -f 2)
|
|
||||||
# Remove leading and trailing spaces around each layout
|
|
||||||
kb_layout_line=$(echo "$kb_layout_line" | tr -d '[:space:]')
|
|
||||||
IFS=',' read -r -a layout_mapping <<< "$kb_layout_line"
|
|
||||||
else
|
|
||||||
echo "Settings file not found!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
layout_count=${#layout_mapping[@]}
|
|
||||||
echo "Number of layouts: $layout_count"
|
|
||||||
|
|
||||||
# Find current layout index and calculate next layout
|
|
||||||
for ((i = 0; i < layout_count; i++)); do
|
|
||||||
if [ "$current_layout" == "${layout_mapping[i]}" ]; then
|
|
||||||
current_index=$i
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
next_index=$(( (current_index + 1) % layout_count ))
|
|
||||||
new_layout="${layout_mapping[next_index]}"
|
|
||||||
echo "Next layout: $new_layout"
|
|
||||||
|
|
||||||
# Function to get keyboard names
|
|
||||||
get_keyboard_names() {
|
|
||||||
hyprctl devices -j | jq -r '.keyboards[].name'
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to check if a device matches any ignore pattern
|
|
||||||
is_ignored() {
|
|
||||||
local device_name=$1
|
|
||||||
for pattern in "${ignore_patterns[@]}"; do
|
|
||||||
if [[ "$device_name" == *"$pattern"* ]]; then
|
|
||||||
return 0 # Device matches ignore pattern
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
return 1 # Device does not match any ignore pattern
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to change keyboard layout
|
|
||||||
change_layout() {
|
|
||||||
local error_found=false
|
|
||||||
|
|
||||||
while read -r name; do
|
|
||||||
if is_ignored "$name"; then
|
|
||||||
echo "Skipping ignored device: $name"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Switching layout for $name to $new_layout..."
|
|
||||||
hyprctl switchxkblayout "$name" next
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "Error while switching layout for $name." >&2
|
|
||||||
error_found=true
|
|
||||||
fi
|
|
||||||
done <<< "$(get_keyboard_names)"
|
|
||||||
|
|
||||||
$error_found && return 1
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# Execute layout change and notify
|
|
||||||
if ! change_layout; then
|
|
||||||
notify-send -u low -t 2000 'kb_layout' 'Error: Layout change failed'
|
|
||||||
echo "Layout change failed." >&2
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
notify-send -u low -i "$notif_icon" "New kb_layout: $new_layout"
|
|
||||||
echo "Layout change notification sent."
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$new_layout" > "$layout_file"
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# For disabling touchpad.
|
|
||||||
# Edit the Touchpad_Device on ~/.config/hypr/UserConfigs/Laptops.conf according to your system
|
|
||||||
# use hyprctl devices to get your system touchpad device name
|
|
||||||
# source https://github.com/hyprwm/Hyprland/discussions/4283?sort=new#discussioncomment-8648109
|
|
||||||
|
|
||||||
notif="$HOME/.config/swaync/images/bell.png"
|
|
||||||
|
|
||||||
export STATUS_FILE="$XDG_RUNTIME_DIR/touchpad.status"
|
|
||||||
|
|
||||||
enable_touchpad() {
|
|
||||||
printf "true" >"$STATUS_FILE"
|
|
||||||
notify-send -u low -i $notif "Enabling touchpad"
|
|
||||||
hyprctl keyword '$TOUCHPAD_ENABLED' "true" -r
|
|
||||||
}
|
|
||||||
|
|
||||||
disable_touchpad() {
|
|
||||||
printf "false" >"$STATUS_FILE"
|
|
||||||
notify-send -u low -i $notif "Disabling touchpad"
|
|
||||||
hyprctl keyword '$TOUCHPAD_ENABLED' "false" -r
|
|
||||||
}
|
|
||||||
|
|
||||||
if ! [ -f "$STATUS_FILE" ]; then
|
|
||||||
enable_touchpad
|
|
||||||
else
|
|
||||||
if [ $(cat "$STATUS_FILE") = "true" ]; then
|
|
||||||
disable_touchpad
|
|
||||||
elif [ $(cat "$STATUS_FILE") = "false" ]; then
|
|
||||||
enable_touchpad
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
@ -1,143 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Scripts for volume controls for audio and mic
|
|
||||||
|
|
||||||
iDIR="$HOME/.config/swaync/icons"
|
|
||||||
sDIR="$HOME/.config/hypr/scripts"
|
|
||||||
|
|
||||||
# Get Volume
|
|
||||||
get_volume() {
|
|
||||||
volume=$(pamixer --get-volume)
|
|
||||||
if [[ "$volume" -eq "0" ]]; then
|
|
||||||
echo "Muted"
|
|
||||||
else
|
|
||||||
echo "$volume%"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get icons
|
|
||||||
get_icon() {
|
|
||||||
current=$(get_volume)
|
|
||||||
if [[ "$current" == "Muted" ]]; then
|
|
||||||
echo "$iDIR/volume-mute.png"
|
|
||||||
elif [[ "${current%\%}" -le 30 ]]; then
|
|
||||||
echo "$iDIR/volume-low.png"
|
|
||||||
elif [[ "${current%\%}" -le 60 ]]; then
|
|
||||||
echo "$iDIR/volume-mid.png"
|
|
||||||
else
|
|
||||||
echo "$iDIR/volume-high.png"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Notify
|
|
||||||
notify_user() {
|
|
||||||
if [[ "$(get_volume)" == "Muted" ]]; then
|
|
||||||
notify-send -e -h string:x-canonical-private-synchronous:volume_notif -u low -i "$(get_icon)" "Volume: Muted"
|
|
||||||
else
|
|
||||||
notify-send -e -h int:value:"$(get_volume | sed 's/%//')" -h string:x-canonical-private-synchronous:volume_notif -u low -i "$(get_icon)" "Volume: $(get_volume)"
|
|
||||||
"$sDIR/Sounds.sh" --volume
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Increase Volume
|
|
||||||
inc_volume() {
|
|
||||||
if [ "$(pamixer --get-mute)" == "true" ]; then
|
|
||||||
toggle_mute
|
|
||||||
else
|
|
||||||
pamixer -i 5 --allow-boost --set-limit 150 && notify_user
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Decrease Volume
|
|
||||||
dec_volume() {
|
|
||||||
if [ "$(pamixer --get-mute)" == "true" ]; then
|
|
||||||
toggle_mute
|
|
||||||
else
|
|
||||||
pamixer -d 5 && notify_user
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Toggle Mute
|
|
||||||
toggle_mute() {
|
|
||||||
if [ "$(pamixer --get-mute)" == "false" ]; then
|
|
||||||
pamixer -m && notify-send -e -u low -i "$iDIR/volume-mute.png" "Volume Switched OFF"
|
|
||||||
elif [ "$(pamixer --get-mute)" == "true" ]; then
|
|
||||||
pamixer -u && notify-send -e -u low -i "$(get_icon)" "Volume Switched ON"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Toggle Mic
|
|
||||||
toggle_mic() {
|
|
||||||
if [ "$(pamixer --default-source --get-mute)" == "false" ]; then
|
|
||||||
pamixer --default-source -m && notify-send -e -u low -i "$iDIR/microphone-mute.png" "Microphone Switched OFF"
|
|
||||||
elif [ "$(pamixer --default-source --get-mute)" == "true" ]; then
|
|
||||||
pamixer -u --default-source u && notify-send -e -u low -i "$iDIR/microphone.png" "Microphone Switched ON"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
# Get Mic Icon
|
|
||||||
get_mic_icon() {
|
|
||||||
current=$(pamixer --default-source --get-volume)
|
|
||||||
if [[ "$current" -eq "0" ]]; then
|
|
||||||
echo "$iDIR/microphone-mute.png"
|
|
||||||
else
|
|
||||||
echo "$iDIR/microphone.png"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get Microphone Volume
|
|
||||||
get_mic_volume() {
|
|
||||||
volume=$(pamixer --default-source --get-volume)
|
|
||||||
if [[ "$volume" -eq "0" ]]; then
|
|
||||||
echo "Muted"
|
|
||||||
else
|
|
||||||
echo "$volume%"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Notify for Microphone
|
|
||||||
notify_mic_user() {
|
|
||||||
volume=$(get_mic_volume)
|
|
||||||
icon=$(get_mic_icon)
|
|
||||||
notify-send -e -h int:value:"$volume" -h "string:x-canonical-private-synchronous:volume_notif" -u low -i "$icon" "Mic-Level: $volume"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Increase MIC Volume
|
|
||||||
inc_mic_volume() {
|
|
||||||
if [ "$(pamixer --default-source --get-mute)" == "true" ]; then
|
|
||||||
toggle_mic
|
|
||||||
else
|
|
||||||
pamixer --default-source -i 5 && notify_mic_user
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Decrease MIC Volume
|
|
||||||
dec_mic_volume() {
|
|
||||||
if [ "$(pamixer --default-source --get-mute)" == "true" ]; then
|
|
||||||
toggle-mic
|
|
||||||
else
|
|
||||||
pamixer --default-source -d 5 && notify_mic_user
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Execute accordingly
|
|
||||||
if [[ "$1" == "--get" ]]; then
|
|
||||||
get_volume
|
|
||||||
elif [[ "$1" == "--inc" ]]; then
|
|
||||||
inc_volume
|
|
||||||
elif [[ "$1" == "--dec" ]]; then
|
|
||||||
dec_volume
|
|
||||||
elif [[ "$1" == "--toggle" ]]; then
|
|
||||||
toggle_mute
|
|
||||||
elif [[ "$1" == "--toggle-mic" ]]; then
|
|
||||||
toggle_mic
|
|
||||||
elif [[ "$1" == "--get-icon" ]]; then
|
|
||||||
get_icon
|
|
||||||
elif [[ "$1" == "--get-mic-icon" ]]; then
|
|
||||||
get_mic_icon
|
|
||||||
elif [[ "$1" == "--mic-inc" ]]; then
|
|
||||||
inc_mic_volume
|
|
||||||
elif [[ "$1" == "--mic-dec" ]]; then
|
|
||||||
dec_mic_volume
|
|
||||||
else
|
|
||||||
get_volume
|
|
||||||
fi
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Wallust Colors for current wallpaper
|
|
||||||
|
|
||||||
# Define the path to the swww cache directory
|
|
||||||
cache_dir="$HOME/.cache/swww/"
|
|
||||||
|
|
||||||
# Get a list of monitor outputs
|
|
||||||
monitor_outputs=($(ls "$cache_dir"))
|
|
||||||
|
|
||||||
# Initialize a flag to determine if the ln command was executed
|
|
||||||
ln_success=false
|
|
||||||
|
|
||||||
# Get current focused monitor
|
|
||||||
current_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}')
|
|
||||||
echo $current_monitor
|
|
||||||
# Construct the full path to the cache file
|
|
||||||
cache_file="$cache_dir$current_monitor"
|
|
||||||
echo $cache_file
|
|
||||||
# Check if the cache file exists for the current monitor output
|
|
||||||
if [ -f "$cache_file" ]; then
|
|
||||||
# Get the wallpaper path from the cache file
|
|
||||||
wallpaper_path=$(cat "$cache_file")
|
|
||||||
echo $wallpaper_path
|
|
||||||
# symlink the wallpaper to the location Rofi can access
|
|
||||||
if ln -sf "$wallpaper_path" "$HOME/.config/rofi/.current_wallpaper"; then
|
|
||||||
ln_success=true # Set the flag to true upon successful execution
|
|
||||||
fi
|
|
||||||
# copy the wallpaper for wallpaper effects
|
|
||||||
cp -r "$wallpaper_path" "$HOME/.config/hypr/wallpaper_effects/.wallpaper_current"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check the flag before executing further commands
|
|
||||||
if [ "$ln_success" = true ]; then
|
|
||||||
# execute wallust
|
|
||||||
echo 'about to execute wallust'
|
|
||||||
# execute wallust skipping tty and terminal changes
|
|
||||||
wallust run "$wallpaper_path" -s &
|
|
||||||
fi
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
|
|
||||||
# Not my own work. This was added through Github PR. Credit to original author
|
|
||||||
|
|
||||||
#----- Optimized bars animation without much CPU usage increase --------
|
|
||||||
bar="▁▂▃▄▅▆▇█"
|
|
||||||
dict="s/;//g"
|
|
||||||
|
|
||||||
# Calculate the length of the bar outside the loop
|
|
||||||
bar_length=${#bar}
|
|
||||||
|
|
||||||
# Create dictionary to replace char with bar
|
|
||||||
for ((i = 0; i < bar_length; i++)); do
|
|
||||||
dict+=";s/$i/${bar:$i:1}/g"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Create cava config
|
|
||||||
config_file="/tmp/bar_cava_config"
|
|
||||||
cat >"$config_file" <<EOF
|
|
||||||
[general]
|
|
||||||
bars = 10
|
|
||||||
|
|
||||||
[input]
|
|
||||||
method = pulse
|
|
||||||
source = auto
|
|
||||||
|
|
||||||
[output]
|
|
||||||
method = raw
|
|
||||||
raw_target = /dev/stdout
|
|
||||||
data_format = ascii
|
|
||||||
ascii_max_range = 7
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Kill cava if it's already running
|
|
||||||
pkill -f "cava -p $config_file"
|
|
||||||
|
|
||||||
# Read stdout from cava and perform substitution in a single sed command
|
|
||||||
cava -p "$config_file" | sed -u "$dict"
|
|
||||||
|
|
@ -1,56 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Script for waybar layout or configs
|
|
||||||
|
|
||||||
set -euo pipefail
|
|
||||||
IFS=$'\n\t'
|
|
||||||
|
|
||||||
# Define directories
|
|
||||||
waybar_layouts="$HOME/.config/waybar/configs"
|
|
||||||
waybar_config="$HOME/.config/waybar/config"
|
|
||||||
SCRIPTSDIR="$HOME/.config/hypr/scripts"
|
|
||||||
rofi_config="$HOME/.config/rofi/config-waybar-layout.rasi"
|
|
||||||
|
|
||||||
# Function to display menu options
|
|
||||||
menu() {
|
|
||||||
options=()
|
|
||||||
while IFS= read -r file; do
|
|
||||||
options+=("$(basename "$file")")
|
|
||||||
done < <(find "$waybar_layouts" -maxdepth 1 -type f -exec basename {} \; | sort)
|
|
||||||
|
|
||||||
printf '%s\n' "${options[@]}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Apply selected configuration
|
|
||||||
apply_config() {
|
|
||||||
ln -sf "$waybar_layouts/$1" "$waybar_config"
|
|
||||||
#restart_waybar_if_needed
|
|
||||||
"${SCRIPTSDIR}/Refresh.sh" &
|
|
||||||
}
|
|
||||||
|
|
||||||
# Main function
|
|
||||||
main() {
|
|
||||||
choice=$(menu | rofi -i -dmenu -config "$rofi_config")
|
|
||||||
|
|
||||||
if [[ -z "$choice" ]]; then
|
|
||||||
echo "No option selected. Exiting."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
case $choice in
|
|
||||||
"no panel")
|
|
||||||
pgrep -x "waybar" && pkill waybar || true
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
apply_config "$choice"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
# Kill Rofi if already running before execution
|
|
||||||
if pgrep -x "rofi" >/dev/null; then
|
|
||||||
pkill rofi
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
main
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
# Script for waybar styles
|
|
||||||
|
|
||||||
set -euo pipefail
|
|
||||||
IFS=$'\n\t'
|
|
||||||
|
|
||||||
# Define directories
|
|
||||||
waybar_styles="$HOME/.config/waybar/style"
|
|
||||||
waybar_style="$HOME/.config/waybar/style.css"
|
|
||||||
SCRIPTSDIR="$HOME/.config/hypr/scripts"
|
|
||||||
rofi_config="$HOME/.config/rofi/config-waybar-style.rasi"
|
|
||||||
|
|
||||||
# Function to display menu options
|
|
||||||
menu() {
|
|
||||||
options=()
|
|
||||||
while IFS= read -r file; do
|
|
||||||
if [ -f "$waybar_styles/$file" ]; then
|
|
||||||
options+=("$(basename "$file" .css)")
|
|
||||||
fi
|
|
||||||
done < <(find "$waybar_styles" -maxdepth 1 -type f -name '*.css' -exec basename {} \; | sort)
|
|
||||||
|
|
||||||
printf '%s\n' "${options[@]}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Apply selected style
|
|
||||||
apply_style() {
|
|
||||||
ln -sf "$waybar_styles/$1.css" "$waybar_style"
|
|
||||||
"${SCRIPTSDIR}/Refresh.sh" &
|
|
||||||
}
|
|
||||||
|
|
||||||
# Main function
|
|
||||||
main() {
|
|
||||||
choice=$(menu | rofi -i -dmenu -config "$rofi_config")
|
|
||||||
|
|
||||||
if [[ -z "$choice" ]]; then
|
|
||||||
echo "No option selected. Exiting."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
apply_style "$choice"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Kill Rofi if already running before execution
|
|
||||||
if pgrep -x "rofi" >/dev/null; then
|
|
||||||
pkill rofi
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
main
|
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
|
||||||
|
|
||||||
# wlogout (Power, Screen Lock, Suspend, etc)
|
|
||||||
|
|
||||||
# Set variables for parameters
|
|
||||||
A_2160=700
|
|
||||||
B_2160=700
|
|
||||||
A_1600=480
|
|
||||||
B_1600=480
|
|
||||||
A_1440=450
|
|
||||||
B_1440=450
|
|
||||||
A_1080=350
|
|
||||||
B_1080=350
|
|
||||||
A_720=50
|
|
||||||
B_720=50
|
|
||||||
|
|
||||||
# Check if wlogout is already running
|
|
||||||
if pgrep -x "wlogout" > /dev/null; then
|
|
||||||
pkill -x "wlogout"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Detect monitor resolution and scaling factor
|
|
||||||
resolution=$(hyprctl -j monitors | jq -r '.[] | select(.focused==true) | .height / .scale' | awk -F'.' '{print $1}')
|
|
||||||
hypr_scale=$(hyprctl -j monitors | jq -r '.[] | select(.focused==true) | .scale')
|
|
||||||
|
|
||||||
# Set parameters based on screen resolution and scaling factor
|
|
||||||
if ((resolution >= 2160)); then
|
|
||||||
T_val=$(awk "BEGIN {printf \"%.0f\", $A_2160 * 2160 * $hypr_scale / $resolution}")
|
|
||||||
B_val=$(awk "BEGIN {printf \"%.0f\", $B_2160 * 2160 * $hypr_scale / $resolution}")
|
|
||||||
echo "Setting parameters for resolution >= 4k"
|
|
||||||
wlogout --protocol layer-shell -b 6 -T $T_val -B $B_val &
|
|
||||||
elif ((resolution >= 1600 && resolution < 2160)); then
|
|
||||||
T_val=$(awk "BEGIN {printf \"%.0f\", $A_1600 * 1600 * $hypr_scale / $resolution}")
|
|
||||||
B_val=$(awk "BEGIN {printf \"%.0f\", $B_1600 * 1600 * $hypr_scale / $resolution}")
|
|
||||||
echo "Setting parameters for resolution >= 2.5k and < 4k"
|
|
||||||
wlogout --protocol layer-shell -b 6 -T $T_val -B $B_val &
|
|
||||||
elif ((resolution >= 1440 && resolution < 1600)); then
|
|
||||||
T_val=$(awk "BEGIN {printf \"%.0f\", $A_1440 * 1440 * $hypr_scale / $resolution}")
|
|
||||||
B_val=$(awk "BEGIN {printf \"%.0f\", $B_1440 * 1440 * $hypr_scale / $resolution}")
|
|
||||||
echo "Setting parameters for resolution >= 2k and < 2.5k"
|
|
||||||
wlogout --protocol layer-shell -b 6 -T $T_val -B $B_val &
|
|
||||||
elif ((resolution >= 1080 && resolution < 1440)); then
|
|
||||||
T_val=$(awk "BEGIN {printf \"%.0f\", $A_1080 * 1080 * $hypr_scale / $resolution}")
|
|
||||||
B_val=$(awk "BEGIN {printf \"%.0f\", $B_1080 * 1080 * $hypr_scale / $resolution}")
|
|
||||||
echo "Setting parameters for resolution >= 1080p and < 2k"
|
|
||||||
wlogout --protocol layer-shell -b 6 -T $T_val -B $B_val &
|
|
||||||
elif ((resolution >= 720 && resolution < 1080)); then
|
|
||||||
T_val=$(awk "BEGIN {printf \"%.0f\", $A_720 * 720 * $hypr_scale / $resolution}")
|
|
||||||
B_val=$(awk "BEGIN {printf \"%.0f\", $B_720 * 720 * $hypr_scale / $resolution}")
|
|
||||||
echo "Setting parameters for resolution >= 720p and < 1080p"
|
|
||||||
wlogout --protocol layer-shell -b 3 -T $T_val -B $B_val &
|
|
||||||
else
|
|
||||||
echo "Setting default parameters"
|
|
||||||
wlogout &
|
|
||||||
fi
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}')
|
|
||||||
if [ "$HYPRGAMEMODE" = 1 ] ; then
|
|
||||||
hyprctl --batch "\
|
|
||||||
keyword animations:enabled 0;\
|
|
||||||
keyword decoration:drop_shadow 0;\
|
|
||||||
keyword decoration:blur:passes 0;\
|
|
||||||
keyword general:gaps_in 0;\
|
|
||||||
keyword general:gaps_out 0;\
|
|
||||||
keyword general:border_size 1;\
|
|
||||||
keyword decoration:rounding 0"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
hyprctl reload
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# _ _ _ _ _
|
|
||||||
# | | _____ _ _| |__ (_)_ __ __| (_)_ __ __ _ ___
|
|
||||||
# | |/ / _ \ | | | '_ \| | '_ \ / _` | | '_ \ / _` / __|
|
|
||||||
# | < __/ |_| | |_) | | | | | (_| | | | | | (_| \__ \
|
|
||||||
# |_|\_\___|\__, |_.__/|_|_| |_|\__,_|_|_| |_|\__, |___/
|
|
||||||
# |___/ |___/
|
|
||||||
#
|
|
||||||
# -----------------------------------------------------
|
|
||||||
# Get keybindings location based on variation
|
|
||||||
# -----------------------------------------------------
|
|
||||||
config_file=$(cat ~/.config/hypr/conf/keybinding.conf)
|
|
||||||
config_file=${config_file/source = ~/}
|
|
||||||
config_file=${config_file/source=~/}
|
|
||||||
|
|
||||||
# -----------------------------------------------------
|
|
||||||
# Path to keybindings config file
|
|
||||||
# -----------------------------------------------------
|
|
||||||
config_file="/home/$USER$config_file"
|
|
||||||
echo "Reading from: $config_file"
|
|
||||||
|
|
||||||
keybinds=""
|
|
||||||
|
|
||||||
# Detect Start String
|
|
||||||
while read -r line
|
|
||||||
do
|
|
||||||
if [[ "$line" == "bind"* ]]; then
|
|
||||||
|
|
||||||
line="$(echo "$line" | sed 's/$mainMod/SUPER/g')"
|
|
||||||
line="$(echo "$line" | sed 's/bind = //g')"
|
|
||||||
line="$(echo "$line" | sed 's/bindm = //g')"
|
|
||||||
|
|
||||||
IFS='#'
|
|
||||||
read -a strarr <<<"$line"
|
|
||||||
kb_str=${strarr[0]}
|
|
||||||
cm_str=${strarr[1]}
|
|
||||||
|
|
||||||
IFS=','
|
|
||||||
read -a kbarr <<<"$kb_str"
|
|
||||||
|
|
||||||
item="${kbarr[0]} + ${kbarr[1]}"$'\r'"${cm_str:1}"
|
|
||||||
keybinds=$keybinds$item$'\n'
|
|
||||||
fi
|
|
||||||
done < "$config_file"
|
|
||||||
|
|
||||||
sleep 0.2
|
|
||||||
rofi -dmenu -i -markup -eh 2 -replace -p "Keybinds" -config ~/.config/rofi/config-compact.rasi <<< "$keybinds"
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
hyprctl dispatch workspaceopt allfloat
|
|
||||||
notify-send "Windows on this workspace toggled to floating/tiling"
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
sec=60
|
|
||||||
_setWallpaperRandomly() {
|
|
||||||
waypaper --random
|
|
||||||
echo ":: Next wallpaper in $sec seconds..."
|
|
||||||
sleep $sec
|
|
||||||
_setWallpaperRandomly
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ ! -f ~/.cache/hyprland/wallpaper-automation ] ;then
|
|
||||||
touch ~/.cache/hyprland/wallpaper-automation
|
|
||||||
echo ":: Start wallpaper automation script"
|
|
||||||
notify-send "Wallpaper automation process started" "Wallpaper will be changed every $sec seconds."
|
|
||||||
_setWallpaperRandomly
|
|
||||||
else
|
|
||||||
rm ~/.cache/hyprland/wallpaper-automation
|
|
||||||
notify-send "Wallpaper automation process stopped."
|
|
||||||
echo ":: Wallpaper automation script process $wp stopped"
|
|
||||||
wp=$(pgrep -f wallpaper-automation.sh)
|
|
||||||
kill -KILL $wp
|
|
||||||
fi
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
CONFIG_FILES="$HOME/.config/waybar/config.jsonc $HOME/.config/waybar/style.css"
|
|
||||||
|
|
||||||
trap "killall waybar" EXIT
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
waybar &
|
|
||||||
inotifywait -e create,modify $CONFIG_FILES
|
|
||||||
killall waybar
|
|
||||||
done
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 346 B |
Binary file not shown.
|
Before Width: | Height: | Size: 19 KiB |
|
|
@ -1,21 +0,0 @@
|
||||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */
|
|
||||||
# /* wallust template - colors-hyprland */
|
|
||||||
|
|
||||||
$background = rgb(000004)
|
|
||||||
$foreground = rgb(ECE7E2)
|
|
||||||
$color0 = rgb(000004)
|
|
||||||
$color1 = rgb(292B33)
|
|
||||||
$color2 = rgb(523F41)
|
|
||||||
$color3 = rgb(49596E)
|
|
||||||
$color4 = rgb(825752)
|
|
||||||
$color5 = rgb(905E56)
|
|
||||||
$color6 = rgb(978B80)
|
|
||||||
$color7 = rgb(DCD4CD)
|
|
||||||
$color8 = rgb(9A948F)
|
|
||||||
$color9 = rgb(373944)
|
|
||||||
$color10 = rgb(6E5457)
|
|
||||||
$color11 = rgb(627792)
|
|
||||||
$color12 = rgb(AE746D)
|
|
||||||
$color13 = rgb(C07D73)
|
|
||||||
$color14 = rgb(C9B9AB)
|
|
||||||
$color15 = rgb(DCD4CD)
|
|
||||||
|
|
@ -1,80 +0,0 @@
|
||||||
# vim:ft=kitty
|
|
||||||
|
|
||||||
## name: Catppuccin-Mocha
|
|
||||||
## author: Pocco81 (https://github.com/Pocco81)
|
|
||||||
## license: MIT
|
|
||||||
## upstream: https://github.com/catppuccin/kitty/blob/main/mocha.conf
|
|
||||||
## blurb: Soothing pastel theme for the high-spirited!
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# The basic colors
|
|
||||||
foreground #CDD6F4
|
|
||||||
background #1E1E2E
|
|
||||||
selection_foreground #1E1E2E
|
|
||||||
selection_background #F5E0DC
|
|
||||||
|
|
||||||
# Cursor colors
|
|
||||||
cursor #F5E0DC
|
|
||||||
cursor_text_color #1E1E2E
|
|
||||||
|
|
||||||
# URL underline color when hovering with mouse
|
|
||||||
url_color #F5E0DC
|
|
||||||
|
|
||||||
# Kitty window border colors
|
|
||||||
active_border_color #B4BEFE
|
|
||||||
inactive_border_color #6C7086
|
|
||||||
bell_border_color #F9E2AF
|
|
||||||
|
|
||||||
# OS Window titlebar colors
|
|
||||||
wayland_titlebar_color system
|
|
||||||
macos_titlebar_color system
|
|
||||||
|
|
||||||
# Tab bar colors
|
|
||||||
active_tab_foreground #11111B
|
|
||||||
active_tab_background #CBA6F7
|
|
||||||
inactive_tab_foreground #CDD6F4
|
|
||||||
inactive_tab_background #181825
|
|
||||||
tab_bar_background #11111B
|
|
||||||
|
|
||||||
# Colors for marks (marked text in the terminal)
|
|
||||||
mark1_foreground #1E1E2E
|
|
||||||
mark1_background #B4BEFE
|
|
||||||
mark2_foreground #1E1E2E
|
|
||||||
mark2_background #CBA6F7
|
|
||||||
mark3_foreground #1E1E2E
|
|
||||||
mark3_background #74C7EC
|
|
||||||
|
|
||||||
# The 16 terminal colors
|
|
||||||
|
|
||||||
# black
|
|
||||||
color0 #45475A
|
|
||||||
color8 #585B70
|
|
||||||
|
|
||||||
# red
|
|
||||||
color1 #F38BA8
|
|
||||||
color9 #F38BA8
|
|
||||||
|
|
||||||
# green
|
|
||||||
color2 #A6E3A1
|
|
||||||
color10 #A6E3A1
|
|
||||||
|
|
||||||
# yellow
|
|
||||||
color3 #F9E2AF
|
|
||||||
color11 #F9E2AF
|
|
||||||
|
|
||||||
# blue
|
|
||||||
color4 #89B4FA
|
|
||||||
color12 #89B4FA
|
|
||||||
|
|
||||||
# magenta
|
|
||||||
color5 #F5C2E7
|
|
||||||
color13 #F5C2E7
|
|
||||||
|
|
||||||
# cyan
|
|
||||||
color6 #94E2D5
|
|
||||||
color14 #94E2D5
|
|
||||||
|
|
||||||
# white
|
|
||||||
color7 #BAC2DE
|
|
||||||
color15 #A6ADC8
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 4 MiB |
|
|
@ -1,62 +0,0 @@
|
||||||
background #000000
|
|
||||||
foreground #F8F8F2
|
|
||||||
cursor #F8F8F2
|
|
||||||
|
|
||||||
# Black
|
|
||||||
color0 #3D4C5F
|
|
||||||
color8 #56687E
|
|
||||||
|
|
||||||
# Red
|
|
||||||
color1 #EE4F84
|
|
||||||
color9 #F48FB1
|
|
||||||
|
|
||||||
# Green
|
|
||||||
color2 #53E2AE
|
|
||||||
color10 #A1EFD3
|
|
||||||
|
|
||||||
# Yellow
|
|
||||||
color3 #F1FF52
|
|
||||||
color11 #F1FA8C
|
|
||||||
|
|
||||||
# Blue
|
|
||||||
color4 #6498EF
|
|
||||||
color12 #92B6F4
|
|
||||||
|
|
||||||
# Magenta
|
|
||||||
color5 #985EFF
|
|
||||||
color13 #BD99FF
|
|
||||||
|
|
||||||
# Cyan
|
|
||||||
color6 #24D1E7
|
|
||||||
color14 #87DFEB
|
|
||||||
|
|
||||||
# White
|
|
||||||
color7 #E5E5E5
|
|
||||||
color15 #F8F8F2
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# The foreground for selections
|
|
||||||
selection_foreground #F8F8F2
|
|
||||||
|
|
||||||
# The background for selections
|
|
||||||
selection_background #8ab4f2
|
|
||||||
|
|
||||||
# Emacs terminal background
|
|
||||||
color17 #323F4E
|
|
||||||
|
|
||||||
# Emacs terminal modeline
|
|
||||||
color23 #1a1a1a
|
|
||||||
|
|
||||||
# The color for the border of the active window
|
|
||||||
active_border_color #F1FA8C
|
|
||||||
|
|
||||||
# The color for the border of inactive windows
|
|
||||||
inactive_border_color #56687E
|
|
||||||
|
|
||||||
url_color #6498EF
|
|
||||||
|
|
||||||
active_tab_foreground #F8F8F2
|
|
||||||
active_tab_background #24D1E7
|
|
||||||
inactive_tab_foreground #F8F8F2
|
|
||||||
inactive_tab_background #1a1a1a
|
|
||||||
|
|
@ -1,111 +0,0 @@
|
||||||
{
|
|
||||||
"files": [
|
|
||||||
"README.md"
|
|
||||||
],
|
|
||||||
"badgeTemplate": "[](#contributors)",
|
|
||||||
"contributorTemplate": "<a href=\"<%= contributor.profile %>\"><b><%= contributor.name %></b></a><br /><%= contributions %>",
|
|
||||||
"imageSize": 100,
|
|
||||||
"commit": false,
|
|
||||||
"contributors": [
|
|
||||||
{
|
|
||||||
"login": "scopatz",
|
|
||||||
"name": "Anthony Scopatz",
|
|
||||||
"avatar_url": "https://avatars2.githubusercontent.com/u/320553?v=4",
|
|
||||||
"profile": "http://www.scopatz.com",
|
|
||||||
"contributions": [
|
|
||||||
"doc"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "orangecoloured",
|
|
||||||
"name": "RCKT",
|
|
||||||
"avatar_url": "https://avatars3.githubusercontent.com/u/3314891?v=4",
|
|
||||||
"profile": "https://rckt.cc",
|
|
||||||
"contributions": [
|
|
||||||
"theme"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "varmanishant",
|
|
||||||
"name": "varmanishant",
|
|
||||||
"avatar_url": "https://avatars1.githubusercontent.com/u/4084912?v=4",
|
|
||||||
"profile": "https://github.com/varmanishant",
|
|
||||||
"contributions": [
|
|
||||||
"theme"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "rlerdorf",
|
|
||||||
"name": "Rasmus Lerdorf",
|
|
||||||
"avatar_url": "https://avatars3.githubusercontent.com/u/54641?v=4",
|
|
||||||
"profile": "https://github.com/rlerdorf",
|
|
||||||
"contributions": [
|
|
||||||
"bug",
|
|
||||||
"ideas"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "Luflosi",
|
|
||||||
"name": "Luflosi",
|
|
||||||
"avatar_url": "https://avatars1.githubusercontent.com/u/15217907?v=4",
|
|
||||||
"profile": "https://github.com/Luflosi",
|
|
||||||
"contributions": [
|
|
||||||
"fix",
|
|
||||||
"question",
|
|
||||||
"doc"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "connorholyday",
|
|
||||||
"name": "Connor Holyday",
|
|
||||||
"avatar_url": "https://avatars1.githubusercontent.com/u/4559119?v=4",
|
|
||||||
"profile": "https://holyday.me",
|
|
||||||
"contributions": [
|
|
||||||
"fix"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "BlueDrink9",
|
|
||||||
"name": "BlueDrink9",
|
|
||||||
"avatar_url": "https://avatars3.githubusercontent.com/u/26474254?v=4",
|
|
||||||
"profile": "https://github.com/BlueDrink9",
|
|
||||||
"contributions": [
|
|
||||||
"bug"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "brujoand",
|
|
||||||
"name": "Anders Brujordet",
|
|
||||||
"avatar_url": "https://avatars1.githubusercontent.com/u/124421?v=4",
|
|
||||||
"profile": "https://github.com/brujoand",
|
|
||||||
"contributions": [
|
|
||||||
"theme"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "rjshrjndrn",
|
|
||||||
"name": "Rajesh Rajendran",
|
|
||||||
"avatar_url": "https://avatars3.githubusercontent.com/u/2563385?v=4",
|
|
||||||
"profile": "http://www.hackouts.com",
|
|
||||||
"contributions": [
|
|
||||||
"fix"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"types": {
|
|
||||||
"theme": {
|
|
||||||
"symbol": "😻",
|
|
||||||
"description": "New theme added to the collection"
|
|
||||||
},
|
|
||||||
"fix": {
|
|
||||||
"symbol": "🛠️",
|
|
||||||
"description": "Fixed a theme"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"contributorsPerLine": 7,
|
|
||||||
"projectName": "kitty-themes",
|
|
||||||
"projectOwner": "dexpota",
|
|
||||||
"repoType": "github",
|
|
||||||
"repoHost": "https://github.com",
|
|
||||||
"commitConvention": "none"
|
|
||||||
}
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
# Contributing to kitty-themes
|
|
||||||
|
|
||||||
We always welcome your pull request! To start contributing follow these simple
|
|
||||||
steps:
|
|
||||||
|
|
||||||
1. Fork the repo and create your branch from `master`;
|
|
||||||
2. Add your theme as config file under `themes` directory;
|
|
||||||
3. Issue the pull request through github;
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2019 Fabrizio Destro <fabrizio@destro.dev>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue