@@ -67,24 +67,24 @@ beam-thickness=1.5
[colors]
alpha=1
-background=1d1b1f
-foreground=e6e1e5
-regular0=1d1b1f
+background=1b1b1f
+foreground=e4e1e6
+regular0=1b1b1f
regular1=ffb4a9
-regular2=6e45bf
-regular3=ebdcff
-regular4=ebdcff
-regular5=e9def8
-regular6=d3bbff
-regular7=cbc4cf
-bright0=1d1b1f
+regular2=4f52b8
+regular3=e0e0ff
+regular4=e0e0ff
+regular5=e2e0f9
+regular6=bfc2ff
+regular7=c7c5d0
+bright0=1b1b1f
bright1=ffb4a9
-bright2=6e45bf
-bright3=ebdcff
-bright4=ebdcff
-bright5=e9def8
-bright6=d3bbff
-bright7=cbc4cf
+bright2=4f52b8
+bright3=e0e0ff
+bright4=e0e0ff
+bright5=e2e0f9
+bright6=bfc2ff
+bright7=c7c5d0
[csd]
# preferred=server
diff --git a/.config/fuzzel/fuzzel.ini b/.config/fuzzel/fuzzel.ini
index bebeee4fe..8e9bcb093 100755
--- a/.config/fuzzel/fuzzel.ini
+++ b/.config/fuzzel/fuzzel.ini
@@ -1,16 +1,16 @@
-font=Gabarito
+font=Lexend
terminal=foot -e
prompt=">> "
layer=overlay
[colors]
-background=1d1b1fff
-text=e6e1e5ff
-selection=49454fff
-selection-text=cbc4cfff
-border=49454fff
-match=d3bbffff
-selection-match=d3bbffff
+background=191c1ecc
+text=e1e2e5ff
+selection=41484dff
+selection-text=c0c7cdff
+border=41484dff
+match=79d0ffff
+selection-match=79d0ffff
[border]
diff --git a/.config/hypr/colors.conf b/.config/hypr/colors.conf
index 81e89cfe7..3f24d1b0f 100755
--- a/.config/hypr/colors.conf
+++ b/.config/hypr/colors.conf
@@ -1,24 +1,24 @@
# Auto generated color theme for image at: [Local wallpaper]
general {
- col.active_border = rgba(5529a5FF)
- col.inactive_border = rgba(4b4358AA)
+ col.active_border = rgba(36399fFF)
+ col.inactive_border = rgba(454559AA)
}
plugin {
droidbars {
# example config
bar_height = 30
- background_color = rgba(1d1b1fFF)
- # background_color_active = rgba(49454fFF) # Not added yet
- text_color = rgba(e9def8FF)
+ background_color = rgba(1b1b1fFF)
+ # background_color_active = rgba(47464fFF) # Not added yet
+ text_color = rgba(e2e0f9FF)
font_family = Lexend
- button_font_fmily = JetBrainsMono Nerd Font
+ button_font_fmily = JetBrainsMono NF
# example buttons (R -> L)
# droidbars-button = [0]isLeft(0/1), [1]color, [2]color2, [3]width, [4]height, [5]icon, [6]buttonType, [7]on-click
- droidbars-button = 0, rgba(e9def8FF), rgba(d3bbffFF), 42, 16,โ ๓ฐญ, normal, hyprctl dispatch killactive
- droidbars-button = 0, rgba(e9def8FF), rgba(d3bbffFF), 42, 16,โ ๏, normal, hyprctl dispatch fullscreen 1
- droidbars-button = 1, rgba(e9def8FF), rgba(d3bbffFF), 16, 16,โ๓ฐ, pin, hyprctl dispatch pin
- droidbars-button = 1, rgba(e9def8FF), rgba(d3bbffFF), 16, 16,๓ฐ, float, hyprctl dispatch togglefloating
+ droidbars-button = 0, rgba(e2e0f9FF), rgba(bfc2ffFF), 42, 16,โ ๓ฐญ, normal, hyprctl dispatch killactive
+ droidbars-button = 0, rgba(e2e0f9FF), rgba(bfc2ffFF), 42, 16,โ ๏, normal, hyprctl dispatch fullscreen 1
+ droidbars-button = 1, rgba(e2e0f9FF), rgba(bfc2ffFF), 16, 16,โ๓ฐ, pin, hyprctl dispatch pin
+ droidbars-button = 1, rgba(e2e0f9FF), rgba(bfc2ffFF), 16, 16,๓ฐ, float, hyprctl dispatch togglefloating
}
}
diff --git a/.config/hypr/execs.conf b/.config/hypr/execs.conf
index 4b51c49cc..0b0b095dc 100755
--- a/.config/hypr/execs.conf
+++ b/.config/hypr/execs.conf
@@ -14,7 +14,7 @@ exec-once = fcitx5
exec-once = dbus-update-activation-environment --all &
exec-once = /usr/bin/gnome-keyring-daemon --start --components=secrets &
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &
-exec-once = swayidle -w timeout 300 'gtklock' before-sleep 'gtklock' &
+exec-once = swayidle -w timeout 300 'swaylock' before-sleep 'swaylock' &
exec-once = swayidle -w timeout 450 'pidof java || systemctl suspend' & # dont sleep if playing minecraft, else nvidia will fuck up
exec-once = sleep 1 && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # Some fix idk
@@ -26,3 +26,6 @@ exec-once = hyprctl setcursor Bibata-Modern-Classic 24
# Plugins
# are a good way to crash Hyprland
+# so nothing here
+
+
diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
index d65623542..f72133125 100755
--- a/.config/hypr/hyprland.conf
+++ b/.config/hypr/hyprland.conf
@@ -26,7 +26,10 @@ input {
#sensitivity = 0
# Keyboard
+ # Add a layout and comment kb_options for Win+Space switching shortcut
kb_layout = us
+ # kb_options = grp:win_space_toggle
+
follow_mouse = 1
numlock_by_default = true
repeat_delay = 250
@@ -66,7 +69,7 @@ general {
# Gaps and border
gaps_in = 4
gaps_out = 5
- gaps_workspace = 50
+ gaps_workspaces = 50
border_size = 1
# Fallback colors
@@ -98,7 +101,7 @@ decoration {
special = false
new_optimizations = on
- size = 10
+ size = 5
passes = 4
brightness = 1
noise = 0.01
@@ -111,10 +114,10 @@ decoration {
# Shadow
drop_shadow = true
shadow_ignore_window = true
- shadow_range = 15
+ shadow_range = 20
shadow_offset = 0 2
- shadow_render_power = 6
- col.shadow = rgba(00000044)
+ shadow_render_power = 2
+ col.shadow = rgba(0000001A)
# Shader
# screen_shader = ~/.config/hypr/shaders/nothing.frag
@@ -146,14 +149,14 @@ animations {
animation = border, 1, 10, default
animation = fade, 1, 2.5, md3_decel
# animation = workspaces, 1, 3.5, md3_decel, slide
- animation = workspaces, 1, 3.5, easeOutExpo, slide
+ animation = workspaces, 1, 7, fluent_decel, slide
# animation = workspaces, 1, 7, fluent_decel, slidefade 15%
# animation = specialWorkspace, 1, 3, md3_decel, slidefadevert 15%
animation = specialWorkspace, 1, 3, md3_decel, slidevert
}
misc {
- vfr = true
+ vfr = 1
vrr = 1
focus_on_activate = true
animate_manual_resizes = false
@@ -170,7 +173,7 @@ debug {
#overlay = true
#damage_tracking = 0
- #damage_blink = yes
+ #damage_blink = yes
}
#misc {
@@ -186,6 +189,8 @@ decoration {
}
######## Window rules ########
+windowrule = noblur,.*
+
#windowrule = opacity 0.94 override 0.94 override, .*
windowrule = float, ^(steam)$
windowrule = float, ^(guifetch)$ # FlafyDev/guifetch
@@ -206,6 +211,7 @@ layerrule = xray 1, .*
#layerrule = noanim, .*
layerrule = noanim, selection
layerrule = noanim, overview
+layerrule = blur, swaylock
layerrule = blur, eww
layerrule = ignorealpha 0.8, eww
@@ -219,14 +225,18 @@ layerrule = blur, notifications
layerrule = ignorealpha 0.69, notifications
# ags
+layerrule = blur, session
+layerrule = noanim, sideright
+layerrule = noanim, sideleft
+
#layerrule = blur, bar
#layerrule = ignorealpha 0.64, bar
#layerrule = blur, corner.*
#layerrule = ignorealpha 0.69, corner.*
#layerrule = blur, dock
#layerrule = ignorealpha 0.69, dock
-# layerrule = blur, indicator.*
-# layerrule = ignorealpha 0.69, indicator.*
+#layerrule = blur, indicator.*
+#layerrule = ignorealpha 0.69, indicator.*
#layerrule = blur, overview
#layerrule = ignorealpha 0.69, overview
#layerrule = blur, cheatsheet
@@ -235,17 +245,11 @@ layerrule = ignorealpha 0.69, notifications
#layerrule = ignorealpha 0.69, sideright
#layerrule = blur, sideleft
#layerrule = ignorealpha 0.69, sideleft
-#layerrule = blur, indicatorundefined
-#layerrule = ignorealpha 0.69, indicatorundefined
+#layerrule = blur, indicator*
+#layerrule = ignorealpha 0.69, indicator*
#layerrule = blur, osk
#layerrule = ignorealpha 0.69, osk
-layerrule = blur, session
-
# Dynamic colors
source=~/.config/hypr/colors.conf
-bind=,248,exec,notify-send deez nuts
-bindr=,248,exec,eww close bar
-
-
diff --git a/.config/hypr/keybinds.conf b/.config/hypr/keybinds.conf
index 3cb23db00..1c40b2d76 100755
--- a/.config/hypr/keybinds.conf
+++ b/.config/hypr/keybinds.conf
@@ -5,21 +5,15 @@ bindle=, XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bindle=, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
# Brightness
-# bindle=, XF86MonBrightnessUp, exec, light -A 5
-# bindle=, XF86MonBrightnessDown, exec, light -U 5
+# bindle=, XF86MonBrightnessUp, exec, brightnessctl set '12.75+'
+# bindle=, XF86MonBrightnessDown, exec, brightnessctl set '12.75-'
bindle=, XF86MonBrightnessUp, exec, ags run-js 'brightness.screen_value += 0.05;'
bindle=, XF86MonBrightnessDown, exec, ags run-js 'brightness.screen_value -= 0.05;'
-######################################## Applications ########################################
+#################################### Applications ###################################
# Apps: just normal apps
-# bind = Super, C, exec, code --password-store=gnome --enable-features=UseOzonePlatform --ozone-platform=wayland
-bind = Super, C, exec, code --enable-features=UseOzonePlatform --ozone-platform=wayland
-# bind = Super, C, exec, code --password-store=gnome
-bind = ControlShiftAlt, Y, exec, yuzu
+bind = Super, C, exec, code --password-store=gnome --enable-features=UseOzonePlatform --ozone-platform=wayland
bind = Super, T, exec, foot --override shell=fish
-bind = SuperShiftAlt, T, exec, foot sleep 0.01 && nmtui
-#bind = SuperAlt, T, exec, wezterm
-#bind = Super, Return, exec, wezterm
bind = Super, E, exec, nautilus --new-window
bind = SuperAlt, E, exec, thunar
bind = Super, W, exec, firefox
@@ -31,62 +25,60 @@ bind = SuperShift, W, exec, wps
bind = Super, I, exec, XDG_CURRENT_DESKTOP="gnome" gnome-control-center
bind = ControlSuper, V, exec, pavucontrol
bind = ControlShift, Escape, exec, gnome-system-monitor
-bind = ControlAltShift, Escape, exec, foot -T 'btop' btop
-bind = SuperShift, I, exec, ~/.local/bin/guifetch
-# Actions
-bind = SuperShift, Period, exec, pkill wofi || wofi-emoji
+# Actions
bind = Super, Period, exec, pkill fuzzel || ~/.local/bin/fuzzel-emoji
bind = Super, Q, killactive,
bind = SuperAlt, Space, togglefloating,
bind = ShiftSuperAlt, Q, exec, hyprctl kill
bind = ControlShiftAlt, Delete, exec, pkill wlogout || wlogout -p layer-shell
bind = ControlShiftAltSuper, Delete, exec, systemctl poweroff
-#bind = ShiftAlt,mouse_up, exec, wtype -M ctrl -k Prior
-#bind = ShiftAlt,mouse_down, exec, wtype -M ctrl -k Next
-# Screenshot, Record, OCR (Optical Character Recognition), Color picker, Clipboard history
-bind = SuperShift, D, exec,~/.local/bin/rubyshot | wl-copy
+# Screenshot, Record, OCR, Color picker, Clipboard history
bind = SuperShiftAlt, S, exec, grim -g "$(slurp -d -c D1E5F4BB -b 1B232866 -s 00000000)" - | swappy -f -
-bindl =,Print,exec,grim - | wl-copy
+bindl=,Print,exec,grim - | wl-copy
bind = SuperShift, S, exec, grim -g "$(slurp -d -c D1E5F4BB -b 1B232866 -s 00000000)" - | wl-copy
-bind = SuperAlt, R, exec, ~/.local/bin/record-script.sh
-bind = ControlAlt, R, exec, ~/.local/bin/record-script.sh --sound
-bind = SuperShiftAlt, R, exec, ~/.local/bin/record-script-fullscreen.sh
+bind = SuperAlt, R, exec, ~/.config/ags/scripts/record-script.sh
+bind = ControlAlt, R, exec, ~/.config/ags/scripts/record-script.sh --sound
+bind = SuperShiftAlt, R, exec, ~/.config/ags/scripts/record-script.sh --fullscreen-sound
bind = SuperShift, C, exec, hyprpicker -a
bind = Super, V, exec, pkill fuzzel || cliphist list | fuzzel --no-fuzzy --dmenu | cliphist decode | wl-copy
# Text-to-image
-# Normal
+# Normal
bind = ControlSuperShift,S,exec,grim -g "$(slurp -d -c D1E5F4BB -b 1B232866 -s 00000000)" "tmp.png" && tesseract "tmp.png" - | wl-copy && rm "tmp.png"
-# English
+# English
bind = SuperShift,T,exec,grim -g "$(slurp -d -c D1E5F4BB -b 1B232866 -s 00000000)" "tmp.png" && tesseract -l eng "tmp.png" - | wl-copy && rm "tmp.png"
-# Japanese
+# Japanese
bind = SuperShift,J,exec,grim -g "$(slurp -d -c D1E5F4BB -b 1B232866 -s 00000000)" "tmp.png" && tesseract -l jpn "tmp.png" - | wl-copy && rm "tmp.png"
# Media
bind = SuperShift, N, exec, playerctl next || playerctl position `bc <<< "100 * $(playerctl metadata mpris:length) / 1000000 / 100"`
-bindl = , XF86AudioNext, exec, ags run-js "Mpris.getPlayer()?.next()"
+bindl= ,XF86AudioNext, exec, playerctl next || playerctl position `bc <<< "100 * $(playerctl metadata mpris:length) / 1000000 / 100"`
bind = SuperShift, B, exec, playerctl previous
bind = SuperShift, P, exec, playerctl play-pause
+bind = ,XF86AudioPlay, exec, playerctl play-pause
#Lock screen | blur: --effect-blur=20x202
-bind = Super, L, exec, gtklock
-bind = SuperShift, L, exec, gtklock
+bind = Super, L, exec, swaylock
+bind = SuperShift, L, exec, swaylock
bindl = SuperShift, L, exec, sleep 0.1 && systemctl suspend
# App launcher
bind = ControlSuper, Slash, exec, pkill anyrun || anyrun
###################################### AGS keybinds #####################################
-bindr = ControlSuper, R, exec, hyprctl reload; killall ags activewin.sh activews.sh gohypr bash ydotool; ags &
+bindr = ControlSuper, R, exec, killall ags activewin.sh activews.sh gohypr bash ydotool; ags &
+bindr = ControlSuperAlt, R, exec, hyprctl reload; killall ags activewin.sh activews.sh gohypr bash ydotool; ags &
bind = ControlSuper, T, exec, ~/.config/ags/scripts/color_generation/switchwall.sh
bindir = Super, Super_L, exec, ags -t 'overview'
bind = Super, Tab, exec, ags -t 'overview'
bind = Super, Slash, exec, ags -t 'cheatsheet'
-# bind = Super, O, exec, ags -t 'sideleft'
+bind = Super, B, exec, ags -t 'sideleft'
+bind = Super, O, exec, ags -t 'sideleft' # blame osu for this keybinding
bind = Super, N, exec, ags -t 'sideright'
bind = Super, M, exec, ags run-js 'openMusicControls.value = (!Mpris.getPlayer() ? false : !openMusicControls.value);'
+bind = Super, Comma, exec, ags run-js 'openColorScheme.value = true; Utils.timeout(2000, () => openColorScheme.value = false);'
bind = Super, K, exec, ags -t 'osk'
bind = ControlAlt, Delete, exec, ags -t 'session'
bindr = Control, Control_R, exec, ags run-js 'indicator.popup(-1);'
@@ -100,10 +92,11 @@ bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("cheatsheet");'
bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("osk");'
bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("session");'
bindr = Control, Control_R, exec, ags run-js 'openMusicControls.value = false'
+bindr = Control, Control_R, exec, ags run-js 'openColorScheme.value = false'
###################################### Plugins #########################################
-bind = ControlSuper, P, exec, hyprctl plugin load '/home/end/.config/hypr/plugins/droidbars.so'
-bind = ControlSuper, O, exec, hyprctl plugin unload '/home/end/.config/hypr/plugins/droidbars.so'
+bind = ControlSuper, P, exec, hyprctl plugin load "~/.config/hypr/plugins/droidbars.so"
+bind = ControlSuper, O, exec, hyprctl plugin unload "~/.config/hypr/plugins/droidbars.so"
## Testing
# bind = SuperAlt, f12, exec, notify-send "Hyprland version: $(hyprctl version | head -2 | tail -1 | cut -f2 -d ' ')" "owo" -a 'Hyprland keybind'
@@ -200,3 +193,5 @@ bindm = Super, mouse:273, resizewindow
bindm = Super, Z, movewindow
bind = ControlSuper, Backslash, resizeactive, exact 640 480
+bind = SuperAlt, J, exec, ydotool key 105:1 105:0
+
diff --git a/.config/hypr/shaders/invert.frag b/.config/hypr/shaders/invert.frag
new file mode 100755
index 000000000..864f7188c
--- /dev/null
+++ b/.config/hypr/shaders/invert.frag
@@ -0,0 +1,13 @@
+// vim: set ft=glsl:
+// blue light filter shader
+// values from https://reshade.me/forum/shader-discussion/3673-blue-light-filter-similar-to-f-lux
+
+precision mediump float;
+varying vec2 v_texcoord;
+uniform sampler2D tex;
+
+void main() {
+ vec4 pixColor = texture2D(tex, v_texcoord);
+ pixColor.rgb = 1.0 - pixColor.rgb;
+ gl_FragColor = pixColor;
+}
\ No newline at end of file
diff --git a/.config/starship.toml b/.config/starship.toml
index efb6047db..387cfdd4f 100755
--- a/.config/starship.toml
+++ b/.config/starship.toml
@@ -10,27 +10,29 @@ $cmd_duration
"""
format = """
-$username$hostname$directory
+$username$hostname $directory $git_branch
$character
"""
# Replace the "โฏ" symbol in the prompt with "โ"
[character] # The name of the module we are configuring is "character"
-success_symbol = "[๐ญง๐ญ](bold fg:blue)[ โ ](bold bg:blue fg:black)[๎ฐ](bold fg:blue)"
+success_symbol = "[โข๏ ๏ฉ](bold fg:blue)"
-error_symbol = "[๐ญง๐ญ](bold fg:red)[ โ ](bold bg:red fg:black)[๎ฐ](bold fg:red)"
+error_symbol = "[โข๏ ๓ฐ
](bold fg:red)"
# Disable the package module, hiding it from the prompt completely
[package]
disabled = true
[git_branch]
-symbol = "๐ฑ "
+style = "bg: green"
+symbol = "๓ฐฌ"
truncation_length = 4
truncation_symbol = ""
+format = "โข [๎ถ](bold fg:green)[$symbol $branch(:$remote_branch)](fg:black bg:green)[๎ด](bold fg:green)"
[git_commit]
commit_hash_length = 4
-tag_symbol = "๐ "
+tag_symbol = "๏ถ "
[git_state]
format = '[\($state( $progress_current of $progress_total)\)]($style) '
@@ -50,7 +52,7 @@ deleted = " ๐ "
[hostname]
ssh_only = false
-format = "[๎ผ ](bold bg:cyan fg:blue)[$hostname ](bg:cyan bold fg:black)[๎ผ ](bold fg:cyan bg:blue)"
+format = "[โข$hostname](bg:cyan bold fg:black)[๎ด](bold fg:cyan )"
trim_at = ".companyname.com"
disabled = false
@@ -69,9 +71,9 @@ format = '๐[\[ $time \]]($style) '
time_format = "%T"
[username]
-style_user = "bold bg:blue fg:black"
+style_user = "bold bg:cyan fg:black"
style_root = "red bold"
-format = "[๐ญ](bold fg:blue)[$user ]($style)"
+format = "[๎ถ](bold fg:cyan)[$user]($style)"
disabled = false
show_always = true
@@ -81,16 +83,16 @@ read_only = " ๏ฃ "
style = "bg:blue fg:black"
truncation_length = 2
truncation_symbol = "./"
-format = '[$path]($style)[๐ญ](fg:blue)'
+format = '[๎ถ](bold fg:blue)[$path]($style)[๎ด](bold fg:blue)'
[directory.substitutions]
"Documents" = "๏ "
-"/" = " ๎ฑ "
+"/" = "|"
"Downloads" = "๏ "
"Music" = "๏ "
"Pictures" = "๏พ "
[cmd_duration]
min_time = 0
-format = '[๐ฌ๐ฌ๐ฌฅ๐ฌ
](bold bg:yellow fg:black)[time:$duration](bold bg:yellow fg:black)[ ๐ฌ๐ฌฅ๐ฌ๐ฌ](bold bg:yellow fg:black)'
+format = '[๎ถ](bold fg:yellow)[$duration](bold bg:yellow fg:black)[๎ด](bold fg:yellow)'
diff --git a/.github/ISSUE_TEMPLATE/issue.md b/.github/ISSUE_TEMPLATE/issue.md
deleted file mode 100644
index 7bde6bc80..000000000
--- a/.github/ISSUE_TEMPLATE/issue.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-name: Issue
-about: for reporting any issue
-title: ''
-labels: ''
-assignees: ''
-
----
-
-- **I have read the instructions** and I have a problem with branch:
----
-## The issue
-- (describe your problem here)
-- (if it throws errors, **PLEASE**, attach logs and describe in detail if possible)
diff --git a/.gitignore b/.gitignore
index 8b1378917..154577456 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,7 @@
-
+.config/ags/style.css
+.config/hypr/colors.conf
+.config/ags/scripts/templates/gradience/preset.json
+.config/ags/scss/_musicmaterial.scss
+.config/ags/style.css
+.config/hypr/colors.conf
+.config/ags/scss/_material.scss
diff --git a/.local/bin/Hyprland-wrapped b/.local/bin/Hyprland-wrapped
deleted file mode 100755
index 56238b120..000000000
--- a/.local/bin/Hyprland-wrapped
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-
-cd ~
-
-#export XDG_CURRENT_DESKTOP=GNOME
-#export XDG_SESSION_TYPE=wayland
-#export XDG_SESSION_DESKTOP=GNOME
-#export EDITOR = /usr/bin/gnome-text-editor
-
-export XMODIFIERS=@im=ibus
-export GTK_IM_MODULE=ibus
-export QT_IM_MODULE=ibus
-
-#export QT_QPA_PLATFORMTHEME=qt5ct #QT Theme (for KDE apps)
-export QT_QPA_PLATFORMTHEME=qt5ct
-
-exec Hyprland
-
diff --git a/.local/bin/fuzzel-emoji b/.local/bin/fuzzel-emoji
new file mode 100755
index 000000000..fd8ec95b4
--- /dev/null
+++ b/.local/bin/fuzzel-emoji
@@ -0,0 +1,1869 @@
+#!/bin/bash
+if [ $? -eq 0 ]
+then
+ sed '1,/^### DATA ###$/d' $0 | fuzzel --no-fuzzy --dmenu | cut -d ' ' -f 1 | tr -d '\n' | wl-copy
+else
+ sed '1,/^### DATA ###$/d' $0 | fuzzel --no-fuzzy --dmenu | cut -d ' ' -f 1 | tr -d '\n' | wl-copy
+fi
+exit
+### DATA ###
+ยฟ? question upside down reversed spanish
+โ left arrow
+โ up arrow
+โ right arrow
+โ down arrow
+โโโโ all directions up down left right arrows
+AHโ๏ธHAโ๏ธHAโ๏ธHAโ๏ธHAโ๏ธHAโ๏ธHAโ๏ธHAโ๏ธ pekora arrows hahaha rabbit
+โข dot circle separator
+ใใ japanese quote square bracket
+ยฏ\_(ใ)_/ยฏ shrug idk i dont know
+โต enter key return
+๐ grinning face face smile happy joy :D grin
+๐ grinning face with big eyes face happy joy haha :D :) smile funny
+๐ grinning face with smiling eyes face happy joy funny haha laugh like :D :) smile
+๐ beaming face with smiling eyes face happy smile joy kawaii
+๐ grinning squinting face happy joy lol satisfied haha face glad XD laugh
+๐
grinning face with sweat face hot happy laugh sweat smile relief
+๐คฃ rolling on the floor laughing face rolling floor laughing lol haha rofl
+๐ face with tears of joy face cry tears weep happy happytears haha
+๐ slightly smiling face face smile
+๐ upside down face face flipped silly smile
+๐ winking face face happy mischievous secret ;) smile eye
+๐ smiling face with smiling eyes face smile happy flushed crush embarrassed shy joy
+๐ smiling face with halo face angel heaven halo
+๐ฅฐ smiling face with hearts face love like affection valentines infatuation crush hearts adore
+๐ smiling face with heart eyes face love like affection valentines infatuation crush heart
+๐คฉ star struck face smile starry eyes grinning
+๐ face blowing a kiss face love like affection valentines infatuation kiss
+๐ kissing face love like face 3 valentines infatuation kiss
+โบ๏ธ smiling face face blush massage happiness
+๐ kissing face with closed eyes face love like affection valentines infatuation kiss
+๐ kissing face with smiling eyes face affection valentines infatuation kiss
+๐ face savoring food happy joy tongue smile face silly yummy nom delicious savouring
+๐ face with tongue face prank childish playful mischievous smile tongue
+๐ winking face with tongue face prank childish playful mischievous smile wink tongue
+๐คช zany face face goofy crazy
+๐ squinting face with tongue face prank playful mischievous smile tongue
+๐ค money mouth face face rich dollar money
+๐ค hugging face face smile hug
+๐คญ face with hand over mouth face whoops shock surprise
+๐คซ shushing face face quiet shhh
+๐ค thinking face face hmmm think consider
+๐ค zipper mouth face face sealed zipper secret
+๐คจ face with raised eyebrow face distrust scepticism disapproval disbelief surprise
+๐ neutral face indifference meh :| neutral
+๐ expressionless face face indifferent - - meh deadpan
+๐ถ face without mouth face hellokitty
+๐ smirking face face smile mean prank smug sarcasm
+๐ unamused face indifference bored straight face serious sarcasm unimpressed skeptical dubious side eye
+๐ face with rolling eyes face eyeroll frustrated
+๐ฌ grimacing face face grimace teeth
+๐คฅ lying face face lie pinocchio
+๐ relieved face face relaxed phew massage happiness
+๐ pensive face face sad depressed upset
+๐ช sleepy face face tired rest nap
+๐คค drooling face face
+๐ด sleeping face face tired sleepy night zzz
+๐ท face with medical mask face sick ill disease
+๐ค face with thermometer sick temperature thermometer cold fever
+๐ค face with head bandage injured clumsy bandage hurt
+๐คข nauseated face face vomit gross green sick throw up ill
+๐คฎ face vomiting face sick
+๐คง sneezing face face gesundheit sneeze sick allergy
+๐ฅต hot face face feverish heat red sweating
+๐ฅถ cold face face blue freezing frozen frostbite icicles
+๐ฅด woozy face face dizzy intoxicated tipsy wavy
+๐ต dizzy face spent unconscious xox dizzy
+๐คฏ exploding head face shocked mind blown
+๐ค cowboy hat face face cowgirl hat
+๐ฅณ partying face face celebration woohoo
+๐ smiling face with sunglasses face cool smile summer beach sunglass
+๐ค nerd face face nerdy geek dork
+๐ง face with monocle face stuffy wealthy
+๐ confused face face indifference huh weird hmmm :/
+๐ worried face face concern nervous :(
+๐ slightly frowning face face frowning disappointed sad upset
+โน๏ธ frowning face face sad upset frown
+๐ฎ face with open mouth face surprise impressed wow whoa :O
+๐ฏ hushed face face woo shh
+๐ฒ astonished face face xox surprised poisoned
+๐ณ flushed face face blush shy flattered sex
+๐ฅบ pleading face face begging mercy
+๐ฆ frowning face with open mouth face aw what
+๐ง anguished face face stunned nervous
+๐จ fearful face face scared terrified nervous oops huh
+๐ฐ anxious face with sweat face nervous sweat
+๐ฅ sad but relieved face face phew sweat nervous
+๐ข crying face face tears sad depressed upset :'(
+๐ญ loudly crying face face cry tears sad upset depressed sob
+๐ฑ face screaming in fear face munch scared omg
+๐ confounded face face confused sick unwell oops :S
+๐ฃ persevering face face sick no upset oops
+๐ disappointed face face sad upset depressed :(
+๐ downcast face with sweat face hot sad tired exercise
+๐ฉ weary face face tired sleepy sad frustrated upset
+๐ซ tired face sick whine upset frustrated
+๐ฅฑ yawning face tired sleepy
+๐ค face with steam from nose face gas phew proud pride
+๐ก pouting face angry mad hate despise
+๐ angry face mad face annoyed frustrated
+๐คฌ face with symbols on mouth face swearing cursing cussing profanity expletive
+๐ smiling face with horns devil horns
+๐ฟ angry face with horns devil angry horns
+๐ skull dead skeleton creepy death
+โ ๏ธ skull and crossbones poison danger deadly scary death pirate evil
+๐ฉ pile of poo hankey shitface fail turd shit
+๐คก clown face face
+๐น ogre monster red mask halloween scary creepy devil demon japanese ogre
+๐บ goblin red evil mask monster scary creepy japanese goblin
+๐ป ghost halloween spooky scary
+๐ฝ alien UFO paul weird outer space
+๐พ alien monster game arcade play
+๐ค robot computer machine bot
+๐บ grinning cat animal cats happy smile
+๐ธ grinning cat with smiling eyes animal cats smile
+๐น cat with tears of joy animal cats haha happy tears
+๐ป smiling cat with heart eyes animal love like affection cats valentines heart
+๐ผ cat with wry smile animal cats smirk
+๐ฝ kissing cat animal cats kiss
+๐ weary cat animal cats munch scared scream
+๐ฟ crying cat animal tears weep sad cats upset cry
+๐พ pouting cat animal cats
+๐ see no evil monkey monkey animal nature haha
+๐ hear no evil monkey animal monkey nature
+๐ speak no evil monkey monkey animal nature omg
+๐ kiss mark face lips love like affection valentines
+๐ love letter email like affection envelope valentines
+๐ heart with arrow love like heart affection valentines
+๐ heart with ribbon love valentines
+๐ sparkling heart love like affection valentines
+๐ growing heart like love affection valentines pink
+๐ beating heart love like affection valentines pink heart
+๐ revolving hearts love like affection valentines
+๐ two hearts love like affection valentines heart
+๐ heart decoration purple-square love like
+โฃ๏ธ heart exclamation decoration love
+๐ broken heart sad sorry break heart heartbreak
+โค๏ธ red heart love like valentines
+๐งก orange heart love like affection valentines
+๐ yellow heart love like affection valentines
+๐ green heart love like affection valentines
+๐ blue heart love like affection valentines
+๐ purple heart love like affection valentines
+๐ค brown heart coffee
+๐ค black heart evil
+๐ค white heart pure
+๐ฏ hundred points score perfect numbers century exam quiz test pass hundred
+๐ข anger symbol angry mad
+๐ฅ collision bomb explode explosion collision blown
+๐ซ dizzy star sparkle shoot magic
+๐ฆ sweat droplets water drip oops
+๐จ dashing away wind air fast shoo fart smoke puff
+๐ณ๏ธ hole embarrassing
+๐ฃ bomb boom explode explosion terrorism
+๐ฌ speech balloon bubble words message talk chatting
+๐๏ธโ๐จ๏ธ eye in speech bubble info
+๐จ๏ธ left speech bubble words message talk chatting
+๐ฏ๏ธ right anger bubble caption speech thinking mad
+๐ญ thought balloon bubble cloud speech thinking dream
+๐ค zzz sleepy tired dream
+๐ waving hand hands gesture goodbye solong farewell hello hi palm
+๐ค raised back of hand fingers raised backhand
+๐๏ธ hand with fingers splayed hand fingers palm
+โ raised hand fingers stop highfive palm ban
+๐ vulcan salute hand fingers spock star trek
+๐ ok hand fingers limbs perfect ok okay
+๐ค pinching hand tiny small size
+โ๏ธ victory hand fingers ohyeah hand peace victory two
+๐ค crossed fingers good lucky
+๐ค love you gesture hand fingers gesture
+๐ค sign of the horns hand fingers evil eye sign of horns rock on
+๐ค call me hand hands gesture shaka
+๐ backhand index pointing left direction fingers hand left
+๐ backhand index pointing right fingers hand direction right
+๐ backhand index pointing up fingers hand direction up
+๐ middle finger hand fingers rude middle flipping
+๐ backhand index pointing down fingers hand direction down
+โ๏ธ index pointing up hand fingers direction up
+๐ thumbs up thumbsup yes awesome good agree accept cool hand like +1
+๐ thumbs down thumbsdown no dislike hand -1
+โ raised fist fingers hand grasp
+๐ oncoming fist angry violence fist hit attack hand
+๐ค left facing fist hand fistbump
+๐ค right facing fist hand fistbump
+๐ clapping hands hands praise applause congrats yay
+๐ raising hands gesture hooray yea celebration hands
+๐ open hands fingers butterfly hands open
+๐คฒ palms up together hands gesture cupped prayer
+๐ค handshake agreement shake
+๐ folded hands please hope wish namaste highfive pray
+โ๏ธ writing hand lower left ballpoint pen stationery write compose
+๐
nail polish beauty manicure finger fashion nail
+๐คณ selfie camera phone
+๐ช flexed biceps arm flex hand summer strong biceps
+๐ฆพ mechanical arm accessibility
+๐ฆฟ mechanical leg accessibility
+๐ฆต leg kick limb
+๐ฆถ foot kick stomp
+๐ ear face hear sound listen
+๐ฆป ear with hearing aid accessibility
+๐ nose smell sniff
+๐ง brain smart intelligent
+๐ฆท tooth teeth dentist
+๐ฆด bone skeleton
+๐ eyes look watch stalk peek see
+๐๏ธ eye face look see watch stare
+๐
tongue mouth playful
+๐ mouth mouth kiss
+๐ถ baby child boy girl toddler
+๐ง child gender-neutral young
+๐ฆ boy man male guy teenager
+๐ง girl female woman teenager
+๐ง person gender-neutral person
+๐ฑ person blond hair hairstyle
+๐จ man mustache father dad guy classy sir moustache
+๐ง man beard person bewhiskered
+๐จโ๐ฆฐ man red hair hairstyle
+๐จโ๐ฆฑ man curly hair hairstyle
+๐จโ๐ฆณ man white hair old elder
+๐จโ๐ฆฒ man bald hairless
+๐ฉ woman female girls lady
+๐ฉโ๐ฆฐ woman red hair hairstyle
+๐งโ๐ฆฐ person red hair hairstyle
+๐ฉโ๐ฆฑ woman curly hair hairstyle
+๐งโ๐ฆฑ person curly hair hairstyle
+๐ฉโ๐ฆณ woman white hair old elder
+๐งโ๐ฆณ person white hair elder old
+๐ฉโ๐ฆฒ woman bald hairless
+๐งโ๐ฆฒ person bald hairless
+๐ฑโโ๏ธ woman blond hair woman female girl blonde person
+๐ฑโโ๏ธ man blond hair man male boy blonde guy person
+๐ง older person human elder senior gender-neutral
+๐ด old man human male men old elder senior
+๐ต old woman human female women lady old elder senior
+๐ person frowning worried
+๐โโ๏ธ man frowning male boy man sad depressed discouraged unhappy
+๐โโ๏ธ woman frowning female girl woman sad depressed discouraged unhappy
+๐ person pouting upset
+๐โโ๏ธ man pouting male boy man
+๐โโ๏ธ woman pouting female girl woman
+๐
person gesturing no decline
+๐
โโ๏ธ man gesturing no male boy man nope
+๐
โโ๏ธ woman gesturing no female girl woman nope
+๐ person gesturing ok agree
+๐โโ๏ธ man gesturing ok men boy male blue human man
+๐โโ๏ธ woman gesturing ok women girl female pink human woman
+๐ person tipping hand information
+๐โโ๏ธ man tipping hand male boy man human information
+๐โโ๏ธ woman tipping hand female girl woman human information
+๐ person raising hand question
+๐โโ๏ธ man raising hand male boy man
+๐โโ๏ธ woman raising hand female girl woman
+๐ง deaf person accessibility
+๐งโโ๏ธ deaf man accessibility
+๐งโโ๏ธ deaf woman accessibility
+๐ person bowing respectiful
+๐โโ๏ธ man bowing man male boy
+๐โโ๏ธ woman bowing woman female girl
+๐คฆ person facepalming disappointed
+๐คฆโโ๏ธ man facepalming man male boy disbelief
+๐คฆโโ๏ธ woman facepalming woman female girl disbelief
+๐คท person shrugging regardless
+๐คทโโ๏ธ man shrugging man male boy confused indifferent doubt
+๐คทโโ๏ธ woman shrugging woman female girl confused indifferent doubt
+๐งโโ๏ธ health worker hospital
+๐จโโ๏ธ man health worker doctor nurse therapist healthcare man human
+๐ฉโโ๏ธ woman health worker doctor nurse therapist healthcare woman human
+๐งโ๐ student learn
+๐จโ๐ man student graduate man human
+๐ฉโ๐ woman student graduate woman human
+๐งโ๐ซ teacher professor
+๐จโ๐ซ man teacher instructor professor man human
+๐ฉโ๐ซ woman teacher instructor professor woman human
+๐งโโ๏ธ judge law
+๐จโโ๏ธ man judge justice court man human
+๐ฉโโ๏ธ woman judge justice court woman human
+๐งโ๐พ farmer crops
+๐จโ๐พ man farmer rancher gardener man human
+๐ฉโ๐พ woman farmer rancher gardener woman human
+๐งโ๐ณ cook food kitchen culinary
+๐จโ๐ณ man cook chef man human
+๐ฉโ๐ณ woman cook chef woman human
+๐งโ๐ง mechanic worker technician
+๐จโ๐ง man mechanic plumber man human wrench
+๐ฉโ๐ง woman mechanic plumber woman human wrench
+๐งโ๐ญ factory worker labor
+๐จโ๐ญ man factory worker assembly industrial man human
+๐ฉโ๐ญ woman factory worker assembly industrial woman human
+๐งโ๐ผ office worker business
+๐จโ๐ผ man office worker business manager man human
+๐ฉโ๐ผ woman office worker business manager woman human
+๐งโ๐ฌ scientist chemistry
+๐จโ๐ฌ man scientist biologist chemist engineer physicist man human
+๐ฉโ๐ฌ woman scientist biologist chemist engineer physicist woman human
+๐งโ๐ป technologist computer
+๐จโ๐ป man technologist coder developer engineer programmer software man human laptop computer
+๐ฉโ๐ป woman technologist coder developer engineer programmer software woman human laptop computer
+๐งโ๐ค singer song artist performer
+๐จโ๐ค man singer rockstar entertainer man human
+๐ฉโ๐ค woman singer rockstar entertainer woman human
+๐งโ๐จ artist painting draw creativity
+๐จโ๐จ man artist painter man human
+๐ฉโ๐จ woman artist painter woman human
+๐งโโ๏ธ pilot fly plane airplane
+๐จโโ๏ธ man pilot aviator plane man human
+๐ฉโโ๏ธ woman pilot aviator plane woman human
+๐งโ๐ astronaut outerspace
+๐จโ๐ man astronaut space rocket man human
+๐ฉโ๐ woman astronaut space rocket woman human
+๐งโ๐ firefighter fire
+๐จโ๐ man firefighter fireman man human
+๐ฉโ๐ woman firefighter fireman woman human
+๐ฎ police officer cop
+๐ฎโโ๏ธ man police officer man police law legal enforcement arrest 911
+๐ฎโโ๏ธ woman police officer woman police law legal enforcement arrest 911 female
+๐ต๏ธ detective human spy detective
+๐ต๏ธโโ๏ธ man detective crime
+๐ต๏ธโโ๏ธ woman detective human spy detective female woman
+๐ guard protect
+๐โโ๏ธ man guard uk gb british male guy royal
+๐โโ๏ธ woman guard uk gb british female royal woman
+๐ท construction worker labor build
+๐ทโโ๏ธ man construction worker male human wip guy build construction worker labor
+๐ทโโ๏ธ woman construction worker female human wip build construction worker labor woman
+๐คด prince boy man male crown royal king
+๐ธ princess girl woman female blond crown royal queen
+๐ณ person wearing turban headdress
+๐ณโโ๏ธ man wearing turban male indian hinduism arabs
+๐ณโโ๏ธ woman wearing turban female indian hinduism arabs woman
+๐ฒ man with skullcap male boy chinese
+๐ง woman with headscarf female hijab mantilla tichel
+๐คต man in tuxedo couple marriage wedding groom
+๐ฐ bride with veil couple marriage wedding woman bride
+๐คฐ pregnant woman baby
+๐คฑ breast feeding nursing baby
+๐ผ baby angel heaven wings halo
+๐
santa claus festival man male xmas father christmas
+๐คถ mrs claus woman female xmas mother christmas
+๐ฆธ superhero marvel
+๐ฆธโโ๏ธ man superhero man male good hero superpowers
+๐ฆธโโ๏ธ woman superhero woman female good heroine superpowers
+๐ฆน supervillain marvel
+๐ฆนโโ๏ธ man supervillain man male evil bad criminal hero superpowers
+๐ฆนโโ๏ธ woman supervillain woman female evil bad criminal heroine superpowers
+๐ง mage magic
+๐งโโ๏ธ man mage man male mage sorcerer
+๐งโโ๏ธ woman mage woman female mage witch
+๐ง fairy wings magical
+๐งโโ๏ธ man fairy man male
+๐งโโ๏ธ woman fairy woman female
+๐ง vampire blood twilight
+๐งโโ๏ธ man vampire man male dracula
+๐งโโ๏ธ woman vampire woman female
+๐ง merperson sea
+๐งโโ๏ธ merman man male triton
+๐งโโ๏ธ mermaid woman female merwoman ariel
+๐ง elf magical
+๐งโโ๏ธ man elf man male
+๐งโโ๏ธ woman elf woman female
+๐ง genie magical wishes
+๐งโโ๏ธ man genie man male
+๐งโโ๏ธ woman genie woman female
+๐ง zombie dead
+๐งโโ๏ธ man zombie man male dracula undead walking dead
+๐งโโ๏ธ woman zombie woman female undead walking dead
+๐ person getting massage relax
+๐โโ๏ธ man getting massage male boy man head
+๐โโ๏ธ woman getting massage female girl woman head
+๐ person getting haircut hairstyle
+๐โโ๏ธ man getting haircut male boy man
+๐โโ๏ธ woman getting haircut female girl woman
+๐ถ person walking move
+๐ถโโ๏ธ man walking human feet steps
+๐ถโโ๏ธ woman walking human feet steps woman female
+๐ง person standing still
+๐งโโ๏ธ man standing still
+๐งโโ๏ธ woman standing still
+๐ง person kneeling pray respectful
+๐งโโ๏ธ man kneeling pray respectful
+๐งโโ๏ธ woman kneeling respectful pray
+๐งโ๐ฆฏ person with probing cane blind
+๐จโ๐ฆฏ man with probing cane blind
+๐ฉโ๐ฆฏ woman with probing cane blind
+๐งโ๐ฆผ person in motorized wheelchair disability accessibility
+๐จโ๐ฆผ man in motorized wheelchair disability accessibility
+๐ฉโ๐ฆผ woman in motorized wheelchair disability accessibility
+๐งโ๐ฆฝ person in manual wheelchair disability accessibility
+๐จโ๐ฆฝ man in manual wheelchair disability accessibility
+๐ฉโ๐ฆฝ woman in manual wheelchair disability accessibility
+๐ person running move
+๐โโ๏ธ man running man walking exercise race running
+๐โโ๏ธ woman running woman walking exercise race running female
+๐ woman dancing female girl woman fun
+๐บ man dancing male boy fun dancer
+๐ด๏ธ man in suit levitating suit business levitate hover jump
+๐ฏ people with bunny ears perform costume
+๐ฏโโ๏ธ men with bunny ears male bunny men boys
+๐ฏโโ๏ธ women with bunny ears female bunny women girls
+๐ง person in steamy room relax spa
+๐งโโ๏ธ man in steamy room male man spa steamroom sauna
+๐งโโ๏ธ woman in steamy room female woman spa steamroom sauna
+๐ง person climbing sport
+๐งโโ๏ธ man climbing sports hobby man male rock
+๐งโโ๏ธ woman climbing sports hobby woman female rock
+๐คบ person fencing sports fencing sword
+๐ horse racing animal betting competition gambling luck
+โท๏ธ skier sports winter snow
+๐ snowboarder sports winter
+๐๏ธ person golfing sports business
+๐๏ธโโ๏ธ man golfing sport
+๐๏ธโโ๏ธ woman golfing sports business woman female
+๐ person surfing sport sea
+๐โโ๏ธ man surfing sports ocean sea summer beach
+๐โโ๏ธ woman surfing sports ocean sea summer beach woman female
+๐ฃ person rowing boat sport move
+๐ฃโโ๏ธ man rowing boat sports hobby water ship
+๐ฃโโ๏ธ woman rowing boat sports hobby water ship woman female
+๐ person swimming sport pool
+๐โโ๏ธ man swimming sports exercise human athlete water summer
+๐โโ๏ธ woman swimming sports exercise human athlete water summer woman female
+โน๏ธ person bouncing ball sports human
+โน๏ธโโ๏ธ man bouncing ball sport
+โน๏ธโโ๏ธ woman bouncing ball sports human woman female
+๐๏ธ person lifting weights sports training exercise
+๐๏ธโโ๏ธ man lifting weights sport
+๐๏ธโโ๏ธ woman lifting weights sports training exercise woman female
+๐ด person biking sport move
+๐ดโโ๏ธ man biking sports bike exercise hipster
+๐ดโโ๏ธ woman biking sports bike exercise hipster woman female
+๐ต person mountain biking sport move
+๐ตโโ๏ธ man mountain biking transportation sports human race bike
+๐ตโโ๏ธ woman mountain biking transportation sports human race bike woman female
+๐คธ person cartwheeling sport gymnastic
+๐คธโโ๏ธ man cartwheeling gymnastics
+๐คธโโ๏ธ woman cartwheeling gymnastics
+๐คผ people wrestling sport
+๐คผโโ๏ธ men wrestling sports wrestlers
+๐คผโโ๏ธ women wrestling sports wrestlers
+๐คฝ person playing water polo sport
+๐คฝโโ๏ธ man playing water polo sports pool
+๐คฝโโ๏ธ woman playing water polo sports pool
+๐คพ person playing handball sport
+๐คพโโ๏ธ man playing handball sports
+๐คพโโ๏ธ woman playing handball sports
+๐คน person juggling performance balance
+๐คนโโ๏ธ man juggling juggle balance skill multitask
+๐คนโโ๏ธ woman juggling juggle balance skill multitask
+๐ง person in lotus position meditate
+๐งโโ๏ธ man in lotus position man male meditation yoga serenity zen mindfulness
+๐งโโ๏ธ woman in lotus position woman female meditation yoga serenity zen mindfulness
+๐ person taking bath clean shower bathroom
+๐ person in bed bed rest
+๐งโ๐คโ๐ง people holding hands friendship
+๐ญ women holding hands pair friendship couple love like female people human
+๐ซ woman and man holding hands pair people human love date dating like affection valentines marriage
+๐ฌ men holding hands pair couple love like bromance friendship people human
+๐ kiss pair valentines love like dating marriage
+๐ฉโโค๏ธโ๐โ๐จ kiss woman man love
+๐จโโค๏ธโ๐โ๐จ kiss man man pair valentines love like dating marriage
+๐ฉโโค๏ธโ๐โ๐ฉ kiss woman woman pair valentines love like dating marriage
+๐ couple with heart pair love like affection human dating valentines marriage
+๐ฉโโค๏ธโ๐จ couple with heart woman man love
+๐จโโค๏ธโ๐จ couple with heart man man pair love like affection human dating valentines marriage
+๐ฉโโค๏ธโ๐ฉ couple with heart woman woman pair love like affection human dating valentines marriage
+๐ช family home parents child mom dad father mother people human
+๐จโ๐ฉโ๐ฆ family man woman boy love
+๐จโ๐ฉโ๐ง family man woman girl home parents people human child
+๐จโ๐ฉโ๐งโ๐ฆ family man woman girl boy home parents people human children
+๐จโ๐ฉโ๐ฆโ๐ฆ family man woman boy boy home parents people human children
+๐จโ๐ฉโ๐งโ๐ง family man woman girl girl home parents people human children
+๐จโ๐จโ๐ฆ family man man boy home parents people human children
+๐จโ๐จโ๐ง family man man girl home parents people human children
+๐จโ๐จโ๐งโ๐ฆ family man man girl boy home parents people human children
+๐จโ๐จโ๐ฆโ๐ฆ family man man boy boy home parents people human children
+๐จโ๐จโ๐งโ๐ง family man man girl girl home parents people human children
+๐ฉโ๐ฉโ๐ฆ family woman woman boy home parents people human children
+๐ฉโ๐ฉโ๐ง family woman woman girl home parents people human children
+๐ฉโ๐ฉโ๐งโ๐ฆ family woman woman girl boy home parents people human children
+๐ฉโ๐ฉโ๐ฆโ๐ฆ family woman woman boy boy home parents people human children
+๐ฉโ๐ฉโ๐งโ๐ง family woman woman girl girl home parents people human children
+๐จโ๐ฆ family man boy home parent people human child
+๐จโ๐ฆโ๐ฆ family man boy boy home parent people human children
+๐จโ๐ง family man girl home parent people human child
+๐จโ๐งโ๐ฆ family man girl boy home parent people human children
+๐จโ๐งโ๐ง family man girl girl home parent people human children
+๐ฉโ๐ฆ family woman boy home parent people human child
+๐ฉโ๐ฆโ๐ฆ family woman boy boy home parent people human children
+๐ฉโ๐ง family woman girl home parent people human child
+๐ฉโ๐งโ๐ฆ family woman girl boy home parent people human children
+๐ฉโ๐งโ๐ง family woman girl girl home parent people human children
+๐ฃ๏ธ speaking head user person human sing say talk
+๐ค bust in silhouette user person human
+๐ฅ busts in silhouette user person human group team
+๐ฃ footprints feet tracking walking beach
+๐ต monkey face animal nature circus
+๐ monkey animal nature banana circus
+๐ฆ gorilla animal nature circus
+๐ฆง orangutan animal
+๐ถ dog face animal friend nature woof puppy pet faithful
+๐ dog animal nature friend doge pet faithful
+๐ฆฎ guide dog animal blind
+๐โ๐ฆบ service dog blind animal
+๐ฉ poodle dog animal 101 nature pet
+๐บ wolf animal nature wild
+๐ฆ fox animal nature face
+๐ฆ raccoon animal nature
+๐ฑ cat face animal meow nature pet kitten
+๐ cat animal meow pet cats
+๐ฆ lion animal nature
+๐ฏ tiger face animal cat danger wild nature roar
+๐
tiger animal nature roar
+๐ leopard animal nature
+๐ด horse face animal brown nature
+๐ horse animal gamble luck
+๐ฆ unicorn animal nature mystical
+๐ฆ zebra animal nature stripes safari
+๐ฆ deer animal nature horns venison
+๐ฎ cow face beef ox animal nature moo milk
+๐ ox animal cow beef
+๐ water buffalo animal nature ox cow
+๐ cow beef ox animal nature moo milk
+๐ท pig face animal oink nature
+๐ pig animal nature
+๐ boar animal nature
+๐ฝ pig nose animal oink
+๐ ram animal sheep nature
+๐ ewe animal nature wool shipit
+๐ goat animal nature
+๐ช camel animal hot desert hump
+๐ซ two hump camel animal nature hot desert hump
+๐ฆ llama animal nature alpaca
+๐ฆ giraffe animal nature spots safari
+๐ elephant animal nature nose th circus
+๐ฆ rhinoceros animal nature horn
+๐ฆ hippopotamus animal nature
+๐ญ mouse face animal nature cheese wedge rodent
+๐ mouse animal nature rodent
+๐ rat animal mouse rodent
+๐น hamster animal nature
+๐ฐ rabbit face animal nature pet spring magic bunny
+๐ rabbit animal nature pet magic spring
+๐ฟ๏ธ chipmunk animal nature rodent squirrel
+๐ฆ hedgehog animal nature spiny
+๐ฆ bat animal nature blind vampire
+๐ป bear animal nature wild
+๐จ koala animal nature
+๐ผ panda animal nature panda
+๐ฆฅ sloth animal
+๐ฆฆ otter animal
+๐ฆจ skunk animal
+๐ฆ kangaroo animal nature australia joey hop marsupial
+๐ฆก badger animal nature honey
+๐พ paw prints animal tracking footprints dog cat pet feet
+๐ฆ turkey animal bird
+๐ chicken animal cluck nature bird
+๐ rooster animal nature chicken
+๐ฃ hatching chick animal chicken egg born baby bird
+๐ค baby chick animal chicken bird
+๐ฅ front facing baby chick animal chicken baby bird
+๐ฆ bird animal nature fly tweet spring
+๐ง penguin animal nature
+๐๏ธ dove animal bird
+๐ฆ
eagle animal nature bird
+๐ฆ duck animal nature bird mallard
+๐ฆข swan animal nature bird
+๐ฆ owl animal nature bird hoot
+๐ฆฉ flamingo animal
+๐ฆ peacock animal nature peahen bird
+๐ฆ parrot animal nature bird pirate talk
+๐ธ frog animal nature croak toad
+๐ crocodile animal nature reptile lizard alligator
+๐ข turtle animal slow nature tortoise
+๐ฆ lizard animal nature reptile
+๐ snake animal evil nature hiss python
+๐ฒ dragon face animal myth nature chinese green
+๐ dragon animal myth nature chinese green
+๐ฆ sauropod animal nature dinosaur brachiosaurus brontosaurus diplodocus extinct
+๐ฆ t rex animal nature dinosaur tyrannosaurus extinct
+๐ณ spouting whale animal nature sea ocean
+๐ whale animal nature sea ocean
+๐ฌ dolphin animal nature fish sea ocean flipper fins beach
+๐ fish animal food nature
+๐ tropical fish animal swim ocean beach nemo
+๐ก blowfish animal nature food sea ocean
+๐ฆ shark animal nature fish sea ocean jaws fins beach
+๐ octopus animal creature ocean sea nature beach
+๐ spiral shell nature sea beach
+๐ snail slow animal shell
+๐ฆ butterfly animal insect nature caterpillar
+๐ bug animal insect nature worm
+๐ ant animal insect nature bug
+๐ honeybee animal insect nature bug spring honey
+๐ lady beetle animal insect nature ladybug
+๐ฆ cricket animal cricket chirp
+๐ท๏ธ spider animal arachnid
+๐ธ๏ธ spider web animal insect arachnid silk
+๐ฆ scorpion animal arachnid
+๐ฆ mosquito animal nature insect malaria
+๐ฆ microbe amoeba bacteria germs virus
+๐ bouquet flowers nature spring
+๐ธ cherry blossom nature plant spring flower
+๐ฎ white flower japanese spring
+๐ต๏ธ rosette flower decoration military
+๐น rose flowers valentines love spring
+๐ฅ wilted flower plant nature flower
+๐บ hibiscus plant vegetable flowers beach
+๐ป sunflower nature plant fall
+๐ผ blossom nature flowers yellow
+๐ท tulip flowers plant nature summer spring
+๐ฑ seedling plant nature grass lawn spring
+๐ฒ evergreen tree plant nature
+๐ณ deciduous tree plant nature
+๐ด palm tree plant vegetable nature summer beach mojito tropical
+๐ต cactus vegetable plant nature
+๐พ sheaf of rice nature plant
+๐ฟ herb vegetable plant medicine weed grass lawn
+โ๏ธ shamrock vegetable plant nature irish clover
+๐ four leaf clover vegetable plant nature lucky irish
+๐ maple leaf nature plant vegetable ca fall
+๐ fallen leaf nature plant vegetable leaves
+๐ leaf fluttering in wind nature plant tree vegetable grass lawn spring
+๐ grapes fruit food wine
+๐ melon fruit nature food
+๐ watermelon fruit food picnic summer
+๐ tangerine food fruit nature orange
+๐ lemon fruit nature
+๐ banana fruit food monkey
+๐ pineapple fruit nature food
+๐ฅญ mango fruit food tropical
+๐ red apple fruit mac school
+๐ green apple fruit nature
+๐ pear fruit nature food
+๐ peach fruit nature food
+๐ cherries food fruit
+๐ strawberry fruit food nature
+๐ฅ kiwi fruit fruit food
+๐
tomato fruit vegetable nature food
+๐ฅฅ coconut fruit nature food palm
+๐ฅ avocado fruit food
+๐ eggplant vegetable nature food aubergine
+๐ฅ potato food tuber vegatable starch
+๐ฅ carrot vegetable food orange
+๐ฝ ear of corn food vegetable plant
+๐ถ๏ธ hot pepper food spicy chilli chili
+๐ฅ cucumber fruit food pickle
+๐ฅฌ leafy green food vegetable plant bok choy cabbage kale lettuce
+๐ฅฆ broccoli fruit food vegetable
+๐ง garlic food spice cook
+๐ง
onion cook food spice
+๐ mushroom plant vegetable
+๐ฅ peanuts food nut
+๐ฐ chestnut food squirrel
+๐ bread food wheat breakfast toast
+๐ฅ croissant food bread french
+๐ฅ baguette bread food bread french
+๐ฅจ pretzel food bread twisted
+๐ฅฏ bagel food bread bakery schmear
+๐ฅ pancakes food breakfast flapjacks hotcakes
+๐ง waffle food breakfast
+๐ง cheese wedge food chadder
+๐ meat on bone good food drumstick
+๐ poultry leg food meat drumstick bird chicken turkey
+๐ฅฉ cut of meat food cow meat cut chop lambchop porkchop
+๐ฅ bacon food breakfast pork pig meat
+๐ hamburger meat fast food beef cheeseburger mcdonalds burger king
+๐ french fries chips snack fast food
+๐ pizza food party
+๐ญ hot dog food frankfurter
+๐ฅช sandwich food lunch bread
+๐ฎ taco food mexican
+๐ฏ burrito food mexican
+๐ฅ stuffed flatbread food flatbread stuffed gyro
+๐ง falafel food
+๐ฅ egg food chicken breakfast
+๐ณ cooking food breakfast kitchen egg
+๐ฅ shallow pan of food food cooking casserole paella
+๐ฒ pot of food food meat soup
+๐ฅฃ bowl with spoon food breakfast cereal oatmeal porridge
+๐ฅ green salad food healthy lettuce
+๐ฟ popcorn food movie theater films snack
+๐ง butter food cook
+๐ง salt condiment shaker
+๐ฅซ canned food food soup
+๐ฑ bento box food japanese box
+๐ rice cracker food japanese
+๐ rice ball food japanese
+๐ cooked rice food china asian
+๐ curry rice food spicy hot indian
+๐ steaming bowl food japanese noodle chopsticks
+๐ spaghetti food italian noodle
+๐ roasted sweet potato food nature
+๐ข oden food japanese
+๐ฃ sushi food fish japanese rice
+๐ค fried shrimp food animal appetizer summer
+๐ฅ fish cake with swirl food japan sea beach narutomaki pink swirl kamaboko surimi ramen
+๐ฅฎ moon cake food autumn
+๐ก dango food dessert sweet japanese barbecue meat
+๐ฅ dumpling food empanada pierogi potsticker
+๐ฅ fortune cookie food prophecy
+๐ฅก takeout box food leftovers
+๐ฆ crab animal crustacean
+๐ฆ lobster animal nature bisque claws seafood
+๐ฆ shrimp animal ocean nature seafood
+๐ฆ squid animal nature ocean sea
+๐ฆช oyster food
+๐ฆ soft ice cream food hot dessert summer
+๐ง shaved ice hot dessert summer
+๐จ ice cream food hot dessert
+๐ฉ doughnut food dessert snack sweet donut
+๐ช cookie food snack oreo chocolate sweet dessert
+๐ birthday cake food dessert cake
+๐ฐ shortcake food dessert
+๐ง cupcake food dessert bakery sweet
+๐ฅง pie food dessert pastry
+๐ซ chocolate bar food snack dessert sweet
+๐ฌ candy snack dessert sweet lolly
+๐ญ lollipop food snack candy sweet
+๐ฎ custard dessert food
+๐ฏ honey pot bees sweet kitchen
+๐ผ baby bottle food container milk
+๐ฅ glass of milk beverage drink cow
+โ hot beverage beverage caffeine latte espresso coffee
+๐ต teacup without handle drink bowl breakfast green british
+๐ถ sake wine drink drunk beverage japanese alcohol booze
+๐พ bottle with popping cork drink wine bottle celebration
+๐ท wine glass drink beverage drunk alcohol booze
+๐ธ cocktail glass drink drunk alcohol beverage booze mojito
+๐น tropical drink beverage cocktail summer beach alcohol booze mojito
+๐บ beer mug relax beverage drink drunk party pub summer alcohol booze
+๐ป clinking beer mugs relax beverage drink drunk party pub summer alcohol booze
+๐ฅ clinking glasses beverage drink party alcohol celebrate cheers wine champagne toast
+๐ฅ tumbler glass drink beverage drunk alcohol liquor booze bourbon scotch whisky glass shot
+๐ฅค cup with straw drink soda
+๐ง beverage box drink
+๐ง mate drink tea beverage
+๐ง ice water cold
+๐ฅข chopsticks food
+๐ฝ๏ธ fork and knife with plate food eat meal lunch dinner restaurant
+๐ด fork and knife cutlery kitchen
+๐ฅ spoon cutlery kitchen tableware
+๐ช kitchen knife knife blade cutlery kitchen weapon
+๐บ amphora vase jar
+๐ globe showing europe africa globe world international
+๐ globe showing americas globe world USA international
+๐ globe showing asia australia globe world east international
+๐ globe with meridians earth international world internet interweb i18n
+๐บ๏ธ world map location direction
+๐พ map of japan nation country japanese asia
+๐งญ compass magnetic navigation orienteering
+๐๏ธ snow capped mountain photo nature environment winter cold
+โฐ๏ธ mountain photo nature environment
+๐ volcano photo nature disaster
+๐ป mount fuji photo mountain nature japanese
+๐๏ธ camping photo outdoors tent
+๐๏ธ beach with umbrella weather summer sunny sand mojito
+๐๏ธ desert photo warm saharah
+๐๏ธ desert island photo tropical mojito
+๐๏ธ national park photo environment nature
+๐๏ธ stadium photo place sports concert venue
+๐๏ธ classical building art culture history
+๐๏ธ building construction wip working progress
+๐งฑ brick bricks
+๐๏ธ houses buildings photo
+๐๏ธ derelict house abandon evict broken building
+๐ house building home
+๐ก house with garden home plant nature
+๐ข office building building bureau work
+๐ฃ japanese post office building envelope communication
+๐ค post office building email
+๐ฅ hospital building health surgery doctor
+๐ฆ bank building money sales cash business enterprise
+๐จ hotel building accomodation checkin
+๐ฉ love hotel like affection dating
+๐ช convenience store building shopping groceries
+๐ซ school building student education learn teach
+๐ฌ department store building shopping mall
+๐ญ factory building industry pollution smoke
+๐ฏ japanese castle photo building
+๐ฐ castle building royalty history
+๐ wedding love like affection couple marriage bride groom
+๐ผ tokyo tower photo japanese
+๐ฝ statue of liberty american newyork
+โช church building religion christ
+๐ mosque islam worship minaret
+๐ hindu temple religion
+๐ synagogue judaism worship temple jewish
+โฉ๏ธ shinto shrine temple japan kyoto
+๐ kaaba mecca mosque islam
+โฒ fountain photo summer water fresh
+โบ tent photo camping outdoors
+๐ foggy photo mountain
+๐ night with stars evening city downtown
+๐๏ธ cityscape photo night life urban
+๐ sunrise over mountains view vacation photo
+๐
sunrise morning view vacation photo
+๐ cityscape at dusk photo evening sky buildings
+๐ sunset photo good morning dawn
+๐ bridge at night photo sanfrancisco
+โจ๏ธ hot springs bath warm relax
+๐ carousel horse photo carnival
+๐ก ferris wheel photo carnival londoneye
+๐ข roller coaster carnival playground photo fun
+๐ barber pole hair salon style
+๐ช circus tent festival carnival party
+๐ locomotive transportation vehicle train
+๐ railway car transportation vehicle
+๐ high speed train transportation vehicle
+๐
bullet train transportation vehicle speed fast public travel
+๐ train transportation vehicle
+๐ metro transportation blue-square mrt underground tube
+๐ light rail transportation vehicle
+๐ station transportation vehicle public
+๐ tram transportation vehicle
+๐ monorail transportation vehicle
+๐ mountain railway transportation vehicle
+๐ tram car transportation vehicle carriage public travel
+๐ bus car vehicle transportation
+๐ oncoming bus vehicle transportation
+๐ trolleybus bart transportation vehicle
+๐ minibus vehicle car transportation
+๐ ambulance health 911 hospital
+๐ fire engine transportation cars vehicle
+๐ police car vehicle cars transportation law legal enforcement
+๐ oncoming police car vehicle law legal enforcement 911
+๐ taxi uber vehicle cars transportation
+๐ oncoming taxi vehicle cars uber
+๐ automobile red transportation vehicle
+๐ oncoming automobile car vehicle transportation
+๐ sport utility vehicle transportation vehicle
+๐ delivery truck cars transportation
+๐ articulated lorry vehicle cars transportation express
+๐ tractor vehicle car farming agriculture
+๐๏ธ racing car sports race fast formula f1
+๐๏ธ motorcycle race sports fast
+๐ต motor scooter vehicle vespa sasha
+๐ฆฝ manual wheelchair accessibility
+๐ฆผ motorized wheelchair accessibility
+๐บ auto rickshaw move transportation
+๐ฒ bicycle sports bicycle exercise hipster
+๐ด kick scooter vehicle kick razor
+๐น skateboard board
+๐ bus stop transportation wait
+๐ฃ๏ธ motorway road cupertino interstate highway
+๐ค๏ธ railway track train transportation
+๐ข๏ธ oil drum barrell
+โฝ fuel pump gas station petroleum
+๐จ police car light police ambulance 911 emergency alert error pinged law legal
+๐ฅ horizontal traffic light transportation signal
+๐ฆ vertical traffic light transportation driving
+๐ stop sign stop
+๐ง construction wip progress caution warning
+โ anchor ship ferry sea boat
+โต sailboat ship summer transportation water sailing
+๐ถ canoe boat paddle water ship
+๐ค speedboat ship transportation vehicle summer
+๐ณ๏ธ passenger ship yacht cruise ferry
+โด๏ธ ferry boat ship yacht
+๐ฅ๏ธ motor boat ship
+๐ข ship transportation titanic deploy
+โ๏ธ airplane vehicle transportation flight fly
+๐ฉ๏ธ small airplane flight transportation fly vehicle
+๐ซ airplane departure airport flight landing
+๐ฌ airplane arrival airport flight boarding
+๐ช parachute fly glide
+๐บ seat sit airplane transport bus flight fly
+๐ helicopter transportation vehicle fly
+๐ suspension railway vehicle transportation
+๐ mountain cableway transportation vehicle ski
+๐ก aerial tramway transportation vehicle ski
+๐ฐ๏ธ satellite communication gps orbit spaceflight NASA ISS
+๐ rocket launch ship staffmode NASA outer space outer space fly
+๐ธ flying saucer transportation vehicle ufo
+๐๏ธ bellhop bell service
+๐งณ luggage packing travel
+โ hourglass done time clock oldschool limit exam quiz test
+โณ hourglass not done oldschool time countdown
+โ watch time accessories
+โฐ alarm clock time wake
+โฑ๏ธ stopwatch time deadline
+โฒ๏ธ timer clock alarm
+๐ฐ๏ธ mantelpiece clock time
+๐ twelve o clock time noon midnight midday late early schedule
+๐ง twelve thirty time late early schedule
+๐ one o clock time late early schedule
+๐ one thirty time late early schedule
+๐ two o clock time late early schedule
+๐ two thirty time late early schedule
+๐ three o clock time late early schedule
+๐ three thirty time late early schedule
+๐ four o clock time late early schedule
+๐ four thirty time late early schedule
+๐ five o clock time late early schedule
+๐ five thirty time late early schedule
+๐ six o clock time late early schedule dawn dusk
+๐ก six thirty time late early schedule
+๐ seven o clock time late early schedule
+๐ข seven thirty time late early schedule
+๐ eight o clock time late early schedule
+๐ฃ eight thirty time late early schedule
+๐ nine o clock time late early schedule
+๐ค nine thirty time late early schedule
+๐ ten o clock time late early schedule
+๐ฅ ten thirty time late early schedule
+๐ eleven o clock time late early schedule
+๐ฆ eleven thirty time late early schedule
+๐ new moon nature twilight planet space night evening sleep
+๐ waxing crescent moon nature twilight planet space night evening sleep
+๐ first quarter moon nature twilight planet space night evening sleep
+๐ waxing gibbous moon nature night sky gray twilight planet space evening sleep
+๐ full moon nature yellow twilight planet space night evening sleep
+๐ waning gibbous moon nature twilight planet space night evening sleep waxing gibbous moon
+๐ last quarter moon nature twilight planet space night evening sleep
+๐ waning crescent moon nature twilight planet space night evening sleep
+๐ crescent moon night sleep sky evening magic
+๐ new moon face nature twilight planet space night evening sleep
+๐ first quarter moon face nature twilight planet space night evening sleep
+๐ last quarter moon face nature twilight planet space night evening sleep
+๐ก๏ธ thermometer weather temperature hot cold
+โ๏ธ sun weather nature brightness summer beach spring
+๐ full moon face nature twilight planet space night evening sleep
+๐ sun with face nature morning sky
+๐ช ringed planet outerspace
+โญ star night yellow
+๐ glowing star night sparkle awesome good magic
+๐ shooting star night photo
+๐ milky way photo space stars
+โ๏ธ cloud weather sky
+โ
sun behind cloud weather nature cloudy morning fall spring
+โ๏ธ cloud with lightning and rain weather lightning
+๐ค๏ธ sun behind small cloud weather
+๐ฅ๏ธ sun behind large cloud weather
+๐ฆ๏ธ sun behind rain cloud weather
+๐ง๏ธ cloud with rain weather
+๐จ๏ธ cloud with snow weather
+๐ฉ๏ธ cloud with lightning weather thunder
+๐ช๏ธ tornado weather cyclone twister
+๐ซ๏ธ fog weather
+๐ฌ๏ธ wind face gust air
+๐ cyclone weather swirl blue cloud vortex spiral whirlpool spin tornado hurricane typhoon
+๐ rainbow nature happy unicorn face photo sky spring
+๐ closed umbrella weather rain drizzle
+โ๏ธ umbrella weather spring
+โ umbrella with rain drops rainy weather spring
+โฑ๏ธ umbrella on ground weather summer
+โก high voltage thunder weather lightning bolt fast
+โ๏ธ snowflake winter season cold weather christmas xmas
+โ๏ธ snowman winter season cold weather christmas xmas frozen
+โ snowman without snow winter season cold weather christmas xmas frozen without snow
+โ๏ธ comet space
+๐ฅ fire hot cook flame
+๐ง droplet water drip faucet spring
+๐ water wave sea water wave nature tsunami disaster
+๐ jack o lantern halloween light pumpkin creepy fall
+๐ christmas tree festival vacation december xmas celebration
+๐ fireworks photo festival carnival congratulations
+๐ sparkler stars night shine
+๐งจ firecracker dynamite boom explode explosion explosive
+โจ sparkles stars shine shiny cool awesome good magic
+๐ balloon party celebration birthday circus
+๐ party popper party congratulations birthday magic circus celebration tada
+๐ confetti ball festival party birthday circus
+๐ tanabata tree plant nature branch summer
+๐ pine decoration plant nature vegetable panda pine decoration
+๐ japanese dolls japanese toy kimono
+๐ carp streamer fish japanese koinobori carp banner
+๐ wind chime nature ding spring bell
+๐ moon viewing ceremony photo japan asia tsukimi
+๐งง red envelope gift
+๐ ribbon decoration pink girl bowtie
+๐ wrapped gift present birthday christmas xmas
+๐๏ธ reminder ribbon sports cause support awareness
+๐๏ธ admission tickets sports concert entrance
+๐ซ ticket event concert pass
+๐๏ธ military medal award winning army
+๐ trophy win award contest place ftw ceremony
+๐
sports medal award winning
+๐ฅ 1st place medal award winning first
+๐ฅ 2nd place medal award second
+๐ฅ 3rd place medal award third
+โฝ soccer ball sports football
+โพ baseball sports balls
+๐ฅ softball sports balls
+๐ basketball sports balls NBA
+๐ volleyball sports balls
+๐ american football sports balls NFL
+๐ rugby football sports team
+๐พ tennis sports balls green
+๐ฅ flying disc sports frisbee ultimate
+๐ณ bowling sports fun play
+๐ cricket game sports
+๐ field hockey sports
+๐ ice hockey sports
+๐ฅ lacrosse sports ball stick
+๐ ping pong sports pingpong
+๐ธ badminton sports
+๐ฅ boxing glove sports fighting
+๐ฅ martial arts uniform judo karate taekwondo
+๐ฅ
goal net sports
+โณ flag in hole sports business flag hole summer
+โธ๏ธ ice skate sports
+๐ฃ fishing pole food hobby summer
+๐คฟ diving mask sport ocean
+๐ฝ running shirt play pageant
+๐ฟ skis sports winter cold snow
+๐ท sled sleigh luge toboggan
+๐ฅ curling stone sports
+๐ฏ direct hit game play bar target bullseye
+๐ช yo yo toy
+๐ช kite wind fly
+๐ฑ pool 8 ball pool hobby game luck magic
+๐ฎ crystal ball disco party magic circus fortune teller
+๐งฟ nazar amulet bead charm
+๐ฎ video game play console PS4 Wii GameCube controller
+๐น๏ธ joystick game play
+๐ฐ slot machine bet gamble vegas fruit machine luck casino
+๐ฒ game die dice random tabletop play luck
+๐งฉ puzzle piece interlocking puzzle piece
+๐งธ teddy bear plush stuffed
+โ ๏ธ spade suit poker cards suits magic
+โฅ๏ธ heart suit poker cards magic suits
+โฆ๏ธ diamond suit poker cards magic suits
+โฃ๏ธ club suit poker cards magic suits
+โ๏ธ chess pawn expendable
+๐ joker poker cards game play magic
+๐ mahjong red dragon game play chinese kanji
+๐ด flower playing cards game sunset red
+๐ญ performing arts acting theater drama
+๐ผ๏ธ framed picture photography
+๐จ artist palette design paint draw colors
+๐งต thread needle sewing spool string
+๐งถ yarn ball crochet knit
+๐ glasses fashion accessories eyesight nerdy dork geek
+๐ถ๏ธ sunglasses face cool accessories
+๐ฅฝ goggles eyes protection safety
+๐ฅผ lab coat doctor experiment scientist chemist
+๐ฆบ safety vest protection
+๐ necktie shirt suitup formal fashion cloth business
+๐ t shirt fashion cloth casual shirt tee
+๐ jeans fashion shopping
+๐งฃ scarf neck winter clothes
+๐งค gloves hands winter clothes
+๐งฅ coat jacket
+๐งฆ socks stockings clothes
+๐ dress clothes fashion shopping
+๐ kimono dress fashion women female japanese
+๐ฅป sari dress
+๐ฉฑ one piece swimsuit fashion
+๐ฉฒ briefs clothing
+๐ฉณ shorts clothing
+๐ bikini swimming female woman girl fashion beach summer
+๐ woman s clothes fashion shopping bags female
+๐ purse fashion accessories money sales shopping
+๐ handbag fashion accessory accessories shopping
+๐ clutch bag bag accessories shopping
+๐๏ธ shopping bags mall buy purchase
+๐ backpack student education bag backpack
+๐ man s shoe fashion male
+๐ running shoe shoes sports sneakers
+๐ฅพ hiking boot backpacking camping hiking
+๐ฅฟ flat shoe ballet slip-on slipper
+๐ high heeled shoe fashion shoes female pumps stiletto
+๐ก woman s sandal shoes fashion flip flops
+๐ฉฐ ballet shoes dance
+๐ข woman s boot shoes fashion
+๐ crown king kod leader royalty lord
+๐ woman s hat fashion accessories female lady spring
+๐ฉ top hat magic gentleman classy circus
+๐ graduation cap school college degree university graduation cap hat legal learn education
+๐งข billed cap cap baseball
+โ๏ธ rescue worker s helmet construction build
+๐ฟ prayer beads dhikr religious
+๐ lipstick female girl fashion woman
+๐ ring wedding propose marriage valentines diamond fashion jewelry gem engagement
+๐ gem stone blue ruby diamond jewelry
+๐ muted speaker sound volume silence quiet
+๐ speaker low volume sound volume silence broadcast
+๐ speaker medium volume volume speaker broadcast
+๐ speaker high volume volume noise noisy speaker broadcast
+๐ข loudspeaker volume sound
+๐ฃ megaphone sound speaker volume
+๐ฏ postal horn instrument music
+๐ bell sound notification christmas xmas chime
+๐ bell with slash sound volume mute quiet silent
+๐ผ musical score treble clef compose
+๐ต musical note score tone sound
+๐ถ musical notes music score
+๐๏ธ studio microphone sing recording artist talkshow
+๐๏ธ level slider scale
+๐๏ธ control knobs dial
+๐ค microphone sound music PA sing talkshow
+๐ง headphone music score gadgets
+๐ป radio communication music podcast program
+๐ท saxophone music instrument jazz blues
+๐ธ guitar music instrument
+๐น musical keyboard piano instrument compose
+๐บ trumpet music brass
+๐ป violin music instrument orchestra symphony
+๐ช banjo music instructment
+๐ฅ drum music instrument drumsticks snare
+๐ฑ mobile phone technology apple gadgets dial
+๐ฒ mobile phone with arrow iphone incoming
+โ๏ธ telephone technology communication dial telephone
+๐ telephone receiver technology communication dial
+๐ pager bbcall oldschool 90s
+๐ fax machine communication technology
+๐ battery power energy sustain
+๐ electric plug charger power
+๐ป laptop technology laptop screen display monitor
+๐ฅ๏ธ desktop computer technology computing screen
+๐จ๏ธ printer paper ink
+โจ๏ธ keyboard technology computer type input text
+๐ฑ๏ธ computer mouse click
+๐ฒ๏ธ trackball technology trackpad
+๐ฝ computer disk technology record data disk 90s
+๐พ floppy disk oldschool technology save 90s 80s
+๐ฟ optical disk technology dvd disk disc 90s
+๐ dvd cd disk disc
+๐งฎ abacus calculation
+๐ฅ movie camera film record
+๐๏ธ film frames movie
+๐ฝ๏ธ film projector video tape record movie
+๐ฌ clapper board movie film record
+๐บ television technology program oldschool show television
+๐ท camera gadgets photography
+๐ธ camera with flash photography gadgets
+๐น video camera film record
+๐ผ videocassette record video oldschool 90s 80s
+๐ magnifying glass tilted left search zoom find detective
+๐ magnifying glass tilted right search zoom find detective
+๐ฏ๏ธ candle fire wax
+๐ก light bulb light electricity idea
+๐ฆ flashlight dark camping sight night
+๐ฎ red paper lantern light paper halloween spooky
+๐ช diya lamp lighting
+๐ notebook with decorative cover classroom notes record paper study
+๐ closed book read library knowledge textbook learn
+๐ open book book read library knowledge literature learn study
+๐ green book read library knowledge study
+๐ blue book read library knowledge learn study
+๐ orange book read library knowledge textbook study
+๐ books literature library study
+๐ notebook stationery record notes paper study
+๐ ledger notes paper
+๐ page with curl documents office paper
+๐ scroll documents ancient history paper
+๐ page facing up documents office paper information
+๐ฐ newspaper press headline
+๐๏ธ rolled up newspaper press headline
+๐ bookmark tabs favorite save order tidy
+๐ bookmark favorite label save
+๐ท๏ธ label sale tag
+๐ฐ money bag dollar payment coins sale
+๐ด yen banknote money sales japanese dollar currency
+๐ต dollar banknote money sales bill currency
+๐ถ euro banknote money sales dollar currency
+๐ท pound banknote british sterling money sales bills uk england currency
+๐ธ money with wings dollar bills payment sale
+๐ณ credit card money sales dollar bill payment shopping
+๐งพ receipt accounting expenses
+๐น chart increasing with yen green-square graph presentation stats
+๐ฑ currency exchange money sales dollar travel
+๐ฒ heavy dollar sign money sales payment currency buck
+โ๏ธ envelope letter postal inbox communication
+๐ง e mail communication inbox
+๐จ incoming envelope email inbox
+๐ฉ envelope with arrow email communication
+๐ค outbox tray inbox email
+๐ฅ inbox tray email documents
+๐ฆ package mail gift cardboard box moving
+๐ซ closed mailbox with raised flag email inbox communication
+๐ช closed mailbox with lowered flag email communication inbox
+๐ฌ open mailbox with raised flag email inbox communication
+๐ญ open mailbox with lowered flag email inbox
+๐ฎ postbox email letter envelope
+๐ณ๏ธ ballot box with ballot election vote
+โ๏ธ pencil stationery write paper writing school study
+โ๏ธ black nib pen stationery writing write
+๐๏ธ fountain pen stationery writing write
+๐๏ธ pen stationery writing write
+๐๏ธ paintbrush drawing creativity art
+๐๏ธ crayon drawing creativity
+๐ memo write documents stationery pencil paper writing legal exam quiz test study compose
+๐ผ briefcase business documents work law legal job career
+๐ file folder documents business office
+๐ open file folder documents load
+๐๏ธ card index dividers organizing business stationery
+๐
calendar calendar schedule
+๐ tear off calendar schedule date planning
+๐๏ธ spiral notepad memo stationery
+๐๏ธ spiral calendar date schedule planning
+๐ card index business stationery
+๐ chart increasing graph presentation stats recovery business economics money sales good success
+๐ chart decreasing graph presentation stats recession business economics money sales bad failure
+๐ bar chart graph presentation stats
+๐ clipboard stationery documents
+๐ pushpin stationery mark here
+๐ round pushpin stationery location map here
+๐ paperclip documents stationery
+๐๏ธ linked paperclips documents stationery
+๐ straight ruler stationery calculate length math school drawing architect sketch
+๐ triangular ruler stationery math architect sketch
+โ๏ธ scissors stationery cut
+๐๏ธ card file box business stationery
+๐๏ธ file cabinet filing organizing
+๐๏ธ wastebasket bin trash rubbish garbage toss
+๐ locked security password padlock
+๐ unlocked privacy security
+๐ locked with pen security secret
+๐ locked with key security privacy
+๐ key lock door password
+๐๏ธ old key lock door password
+๐จ hammer tools build create
+๐ช axe tool chop cut
+โ๏ธ pick tools dig
+โ๏ธ hammer and pick tools build create
+๐ ๏ธ hammer and wrench tools build create
+๐ก๏ธ dagger weapon
+โ๏ธ crossed swords weapon
+๐ซ pistol violence weapon pistol revolver
+๐น bow and arrow sports
+๐ก๏ธ shield protection security
+๐ง wrench tools diy ikea fix maintainer
+๐ฉ nut and bolt handy tools fix
+โ๏ธ gear cog
+๐๏ธ clamp tool
+โ๏ธ balance scale law fairness weight
+๐ฆฏ probing cane accessibility
+๐ link rings url
+โ๏ธ chains lock arrest
+๐งฐ toolbox tools diy fix maintainer mechanic
+๐งฒ magnet attraction magnetic
+โ๏ธ alembic distilling science experiment chemistry
+๐งช test tube chemistry experiment lab science
+๐งซ petri dish bacteria biology culture lab
+๐งฌ dna biologist genetics life
+๐ฌ microscope laboratory experiment zoomin science study
+๐ญ telescope stars space zoom science astronomy
+๐ก satellite antenna communication future radio space
+๐ syringe health hospital drugs blood medicine needle doctor nurse
+๐ฉธ drop of blood period hurt harm wound
+๐ pill health medicine doctor pharmacy drug
+๐ฉน adhesive bandage heal
+๐ฉบ stethoscope health
+๐ช door house entry exit
+๐๏ธ bed sleep rest
+๐๏ธ couch and lamp read chill
+๐ช chair sit furniture
+๐ฝ toilet restroom wc washroom bathroom potty
+๐ฟ shower clean water bathroom
+๐ bathtub clean shower bathroom
+๐ช razor cut
+๐งด lotion bottle moisturizer sunscreen
+๐งท safety pin diaper
+๐งน broom cleaning sweeping witch
+๐งบ basket laundry
+๐งป roll of paper roll
+๐งผ soap bar bathing cleaning lather
+๐งฝ sponge absorbing cleaning porous
+๐งฏ fire extinguisher quench
+๐ shopping cart trolley
+๐ฌ cigarette kills tobacco cigarette joint smoke
+โฐ๏ธ coffin vampire dead die death rip graveyard cemetery casket funeral box
+โฑ๏ธ funeral urn dead die death rip ashes
+๐ฟ moai rock easter island moai
+๐ง atm sign money sales cash blue-square payment bank
+๐ฎ litter in bin sign blue-square sign human info
+๐ฐ potable water blue-square liquid restroom cleaning faucet
+โฟ wheelchair symbol blue-square disabled accessibility
+๐น men s room toilet restroom wc blue-square gender male
+๐บ women s room purple-square woman female toilet loo restroom gender
+๐ป restroom blue-square toilet refresh wc gender
+๐ผ baby symbol orange-square child
+๐พ water closet toilet restroom blue-square
+๐ passport control custom blue-square
+๐ customs passport border blue-square
+๐ baggage claim blue-square airport transport
+๐
left luggage blue-square travel
+โ ๏ธ warning exclamation wip alert error problem issue
+๐ธ children crossing school warning danger sign driving yellow-diamond
+โ no entry limit security privacy bad denied stop circle
+๐ซ prohibited forbid stop limit denied disallow circle
+๐ณ no bicycles cyclist prohibited circle
+๐ญ no smoking cigarette blue-square smell smoke
+๐ฏ no littering trash bin garbage circle
+๐ฑ non potable water drink faucet tap circle
+๐ท no pedestrians rules crossing walking circle
+๐ต no mobile phones iphone mute circle
+๐ no one under eighteen 18 drink pub night minor circle
+โข๏ธ radioactive nuclear danger
+โฃ๏ธ biohazard danger
+โฌ๏ธ up arrow blue-square continue top direction
+โ๏ธ up right arrow blue-square point direction diagonal northeast
+โก๏ธ right arrow blue-square next
+โ๏ธ down right arrow blue-square direction diagonal southeast
+โฌ๏ธ down arrow blue-square direction bottom
+โ๏ธ down left arrow blue-square direction diagonal southwest
+โฌ
๏ธ left arrow blue-square previous back
+โ๏ธ up left arrow blue-square point direction diagonal northwest
+โ๏ธ up down arrow blue-square direction way vertical
+โ๏ธ left right arrow shape direction horizontal sideways
+โฉ๏ธ right arrow curving left back return blue-square undo enter
+โช๏ธ left arrow curving right blue-square return rotate direction
+โคด๏ธ right arrow curving up blue-square direction top
+โคต๏ธ right arrow curving down blue-square direction bottom
+๐ clockwise vertical arrows sync cycle round repeat
+๐ counterclockwise arrows button blue-square sync cycle
+๐ back arrow arrow words return
+๐ end arrow words arrow
+๐ on arrow arrow words
+๐ soon arrow arrow words
+๐ top arrow words blue-square
+๐ place of worship religion church temple prayer
+โ๏ธ atom symbol science physics chemistry
+๐๏ธ om hinduism buddhism sikhism jainism
+โก๏ธ star of david judaism
+โธ๏ธ wheel of dharma hinduism buddhism sikhism jainism
+โฏ๏ธ yin yang balance
+โ๏ธ latin cross christianity
+โฆ๏ธ orthodox cross suppedaneum religion
+โช๏ธ star and crescent islam
+โฎ๏ธ peace symbol hippie
+๐ menorah hanukkah candles jewish
+๐ฏ dotted six pointed star purple-square religion jewish hexagram
+โ aries sign purple-square zodiac astrology
+โ taurus purple-square sign zodiac astrology
+โ gemini sign zodiac purple-square astrology
+โ cancer sign zodiac purple-square astrology
+โ leo sign purple-square zodiac astrology
+โ virgo sign zodiac purple-square astrology
+โ libra sign purple-square zodiac astrology
+โ scorpio sign zodiac purple-square astrology scorpio
+โ sagittarius sign zodiac purple-square astrology
+โ capricorn sign zodiac purple-square astrology
+โ aquarius sign purple-square zodiac astrology
+โ pisces purple-square sign zodiac astrology
+โ ophiuchus sign purple-square constellation astrology
+๐ shuffle tracks button blue-square shuffle music random
+๐ repeat button loop record
+๐ repeat single button blue-square loop
+โถ๏ธ play button blue-square right direction play
+โฉ fast forward button blue-square play speed continue
+โญ๏ธ next track button forward next blue-square
+โฏ๏ธ play or pause button blue-square play pause
+โ๏ธ reverse button blue-square left direction
+โช fast reverse button play blue-square
+โฎ๏ธ last track button backward
+๐ผ upwards button blue-square triangle direction point forward top
+โซ fast up button blue-square direction top
+๐ฝ downwards button blue-square direction bottom
+โฌ fast down button blue-square direction bottom
+โธ๏ธ pause button pause blue-square
+โน๏ธ stop button blue-square
+โบ๏ธ record button blue-square
+โ๏ธ eject button blue-square
+๐ฆ cinema blue-square record film movie curtain stage theater
+๐
dim button sun afternoon warm summer
+๐ bright button sun light
+๐ถ antenna bars blue-square reception phone internet connection wifi bluetooth bars
+๐ณ vibration mode orange-square phone
+๐ด mobile phone off mute orange-square silence quiet
+โ๏ธ female sign woman women lady girl
+โ๏ธ male sign man boy men
+โ๏ธ medical symbol health hospital
+โพ๏ธ infinity forever
+โป๏ธ recycling symbol arrow environment garbage trash
+โ๏ธ fleur de lis decorative scout
+๐ฑ trident emblem weapon spear
+๐ name badge fire forbid
+๐ฐ japanese symbol for beginner badge shield
+โญ hollow red circle circle round
+โ
check mark button green-square ok agree vote election answer tick
+โ๏ธ check box with check ok agree confirm black-square vote election yes tick
+โ๏ธ check mark ok nike answer yes tick
+โ๏ธ multiplication sign math calculation
+โ cross mark no delete remove cancel red
+โ cross mark button x green-square no deny
+โ plus sign math calculation addition more increase
+โ minus sign math calculation subtract less
+โ division sign divide math calculation
+โฐ curly loop scribble draw shape squiggle
+โฟ double curly loop tape cassette
+ใฝ๏ธ part alternation mark graph presentation stats business economics bad
+โณ๏ธ eight spoked asterisk star sparkle green-square
+โด๏ธ eight pointed star orange-square shape polygon
+โ๏ธ sparkle stars green-square awesome good fireworks
+โผ๏ธ double exclamation mark exclamation surprise
+โ๏ธ exclamation question mark wat punctuation surprise
+โ question mark doubt confused
+โ white question mark doubts gray huh confused
+โ white exclamation mark surprise punctuation gray wow warning
+โ exclamation mark heavy exclamation mark danger surprise punctuation wow warning
+ใฐ๏ธ wavy dash draw line moustache mustache squiggle scribble
+ยฉ๏ธ copyright ip license circle law legal
+ยฎ๏ธ registered alphabet circle
+โข๏ธ trade mark trademark brand law legal
+#๏ธโฃ keycap symbol blue-square twitter
+*๏ธโฃ keycap star keycap
+0๏ธโฃ keycap 0 0 numbers blue-square null
+1๏ธโฃ keycap 1 blue-square numbers 1
+2๏ธโฃ keycap 2 numbers 2 prime blue-square
+3๏ธโฃ keycap 3 3 numbers prime blue-square
+4๏ธโฃ keycap 4 4 numbers blue-square
+5๏ธโฃ keycap 5 5 numbers blue-square prime
+6๏ธโฃ keycap 6 6 numbers blue-square
+7๏ธโฃ keycap 7 7 numbers blue-square prime
+8๏ธโฃ keycap 8 8 blue-square numbers
+9๏ธโฃ keycap 9 blue-square numbers 9
+๐ keycap 10 numbers 10 blue-square
+๐ input latin uppercase alphabet words blue-square
+๐ก input latin lowercase blue-square alphabet
+๐ข input numbers numbers blue-square
+๐ฃ input symbols blue-square music note ampersand percent glyphs characters
+๐ค input latin letters blue-square alphabet
+๐
ฐ๏ธ a button red-square alphabet letter
+๐ ab button red-square alphabet
+๐
ฑ๏ธ b button red-square alphabet letter
+๐ cl button alphabet words red-square
+๐ cool button words blue-square
+๐ free button blue-square words
+โน๏ธ information blue-square alphabet letter
+๐ id button purple-square words
+โ๏ธ circled m alphabet blue-circle letter
+๐ new button blue-square words start
+๐ ng button blue-square words shape icon
+๐
พ๏ธ o button alphabet red-square letter
+๐ ok button good agree yes blue-square
+๐
ฟ๏ธ p button cars blue-square alphabet letter
+๐ sos button help red-square words emergency 911
+๐ up button blue-square above high
+๐ vs button words orange-square
+๐ japanese here button blue-square here katakana japanese destination
+๐๏ธ japanese service charge button japanese blue-square katakana
+๐ท๏ธ japanese monthly amount button chinese month moon japanese orange-square kanji
+๐ถ japanese not free of charge button orange-square chinese have kanji
+๐ฏ japanese reserved button chinese point green-square kanji
+๐ japanese bargain button chinese kanji obtain get circle
+๐น japanese discount button cut divide chinese kanji pink-square
+๐ japanese free of charge button nothing chinese kanji japanese orange-square
+๐ฒ japanese prohibited button kanji japanese chinese forbidden limit restricted red-square
+๐ japanese acceptable button ok good chinese kanji agree yes orange-circle
+๐ธ japanese application button chinese japanese kanji orange-square
+๐ด japanese passing grade button japanese chinese join kanji red-square
+๐ณ japanese vacancy button kanji japanese chinese empty sky blue-square
+ใ๏ธ japanese congratulations button chinese kanji japanese red-circle
+ใ๏ธ japanese secret button privacy chinese sshh kanji red-circle
+๐บ japanese open for business button japanese opening hours orange-square
+๐ต japanese no vacancy button full chinese japanese red-square kanji
+๐ด red circle shape error danger
+๐ orange circle round
+๐ก yellow circle round
+๐ข green circle round
+๐ต blue circle shape icon button
+๐ฃ purple circle round
+๐ค brown circle round
+โซ black circle shape button round
+โช white circle shape round
+๐ฅ red square
+๐ง orange square
+๐จ yellow square
+๐ฉ green square
+๐ฆ blue square
+๐ช purple square
+๐ซ brown square
+โฌ black large square shape icon button
+โฌ white large square shape icon stone button
+โผ๏ธ black medium square shape button icon
+โป๏ธ white medium square shape stone icon
+โพ black medium small square icon shape button
+โฝ white medium small square shape stone icon button
+โช๏ธ black small square shape icon
+โซ๏ธ white small square shape icon
+๐ถ large orange diamond shape jewel gem
+๐ท large blue diamond shape jewel gem
+๐ธ small orange diamond shape jewel gem
+๐น small blue diamond shape jewel gem
+๐บ red triangle pointed up shape direction up top
+๐ป red triangle pointed down shape direction bottom
+๐ diamond with a dot jewel blue gem crystal fancy
+๐ radio button input old music circle
+๐ณ white square button shape input
+๐ฒ black square button shape input frame
+๐ chequered flag contest finishline race gokart
+๐ฉ triangular flag mark milestone place
+๐ crossed flags japanese nation country border
+๐ด black flag pirate
+๐ณ๏ธ white flag losing loser lost surrender give up fail
+๐ณ๏ธโ๐ rainbow flag flag rainbow pride gay lgbt glbt queer homosexual lesbian bisexual transgender
+๐ดโโ ๏ธ pirate flag skull crossbones flag banner
+๐ฆ๐จ flag ascension island
+๐ฆ๐ฉ flag andorra ad flag nation country banner andorra
+๐ฆ๐ช flag united arab emirates united arab emirates flag nation country banner united arab emirates
+๐ฆ๐ซ flag afghanistan af flag nation country banner afghanistan
+๐ฆ๐ฌ flag antigua barbuda antigua barbuda flag nation country banner antigua barbuda
+๐ฆ๐ฎ flag anguilla ai flag nation country banner anguilla
+๐ฆ๐ฑ flag albania al flag nation country banner albania
+๐ฆ๐ฒ flag armenia am flag nation country banner armenia
+๐ฆ๐ด flag angola ao flag nation country banner angola
+๐ฆ๐ถ flag antarctica aq flag nation country banner antarctica
+๐ฆ๐ท flag argentina ar flag nation country banner argentina
+๐ฆ๐ธ flag american samoa american ws flag nation country banner american samoa
+๐ฆ๐น flag austria at flag nation country banner austria
+๐ฆ๐บ flag australia au flag nation country banner australia
+๐ฆ๐ผ flag aruba aw flag nation country banner aruba
+๐ฆ๐ฝ flag aland islands ร
land islands flag nation country banner aland islands
+๐ฆ๐ฟ flag azerbaijan az flag nation country banner azerbaijan
+๐ง๐ฆ flag bosnia herzegovina bosnia herzegovina flag nation country banner bosnia herzegovina
+๐ง๐ง flag barbados bb flag nation country banner barbados
+๐ง๐ฉ flag bangladesh bd flag nation country banner bangladesh
+๐ง๐ช flag belgium be flag nation country banner belgium
+๐ง๐ซ flag burkina faso burkina faso flag nation country banner burkina faso
+๐ง๐ฌ flag bulgaria bg flag nation country banner bulgaria
+๐ง๐ญ flag bahrain bh flag nation country banner bahrain
+๐ง๐ฎ flag burundi bi flag nation country banner burundi
+๐ง๐ฏ flag benin bj flag nation country banner benin
+๐ง๐ฑ flag st barthelemy saint barthรฉlemy flag nation country banner st barthelemy
+๐ง๐ฒ flag bermuda bm flag nation country banner bermuda
+๐ง๐ณ flag brunei bn darussalam flag nation country banner brunei
+๐ง๐ด flag bolivia bo flag nation country banner bolivia
+๐ง๐ถ flag caribbean netherlands bonaire flag nation country banner caribbean netherlands
+๐ง๐ท flag brazil br flag nation country banner brazil
+๐ง๐ธ flag bahamas bs flag nation country banner bahamas
+๐ง๐น flag bhutan bt flag nation country banner bhutan
+๐ง๐ป flag bouvet island norway
+๐ง๐ผ flag botswana bw flag nation country banner botswana
+๐ง๐พ flag belarus by flag nation country banner belarus
+๐ง๐ฟ flag belize bz flag nation country banner belize
+๐จ๐ฆ flag canada ca flag nation country banner canada
+๐จ๐จ flag cocos islands cocos keeling islands flag nation country banner cocos islands
+๐จ๐ฉ flag congo kinshasa congo democratic republic flag nation country banner congo kinshasa
+๐จ๐ซ flag central african republic central african republic flag nation country banner central african republic
+๐จ๐ฌ flag congo brazzaville congo flag nation country banner congo brazzaville
+๐จ๐ญ flag switzerland ch flag nation country banner switzerland
+๐จ๐ฎ flag cote d ivoire ivory coast flag nation country banner cote d ivoire
+๐จ๐ฐ flag cook islands cook islands flag nation country banner cook islands
+๐จ๐ฑ flag chile flag nation country banner chile
+๐จ๐ฒ flag cameroon cm flag nation country banner cameroon
+๐จ๐ณ flag china china chinese prc flag country nation banner china
+๐จ๐ด flag colombia co flag nation country banner colombia
+๐จ๐ต flag clipperton island
+๐จ๐ท flag costa rica costa rica flag nation country banner costa rica
+๐จ๐บ flag cuba cu flag nation country banner cuba
+๐จ๐ป flag cape verde cabo verde flag nation country banner cape verde
+๐จ๐ผ flag curacao curaรงao flag nation country banner curacao
+๐จ๐ฝ flag christmas island christmas island flag nation country banner christmas island
+๐จ๐พ flag cyprus cy flag nation country banner cyprus
+๐จ๐ฟ flag czechia cz flag nation country banner czechia
+๐ฉ๐ช flag germany german nation flag country banner germany
+๐ฉ๐ฌ flag diego garcia
+๐ฉ๐ฏ flag djibouti dj flag nation country banner djibouti
+๐ฉ๐ฐ flag denmark dk flag nation country banner denmark
+๐ฉ๐ฒ flag dominica dm flag nation country banner dominica
+๐ฉ๐ด flag dominican republic dominican republic flag nation country banner dominican republic
+๐ฉ๐ฟ flag algeria dz flag nation country banner algeria
+๐ช๐ฆ flag ceuta melilla
+๐ช๐จ flag ecuador ec flag nation country banner ecuador
+๐ช๐ช flag estonia ee flag nation country banner estonia
+๐ช๐ฌ flag egypt eg flag nation country banner egypt
+๐ช๐ญ flag western sahara western sahara flag nation country banner western sahara
+๐ช๐ท flag eritrea er flag nation country banner eritrea
+๐ช๐ธ flag spain spain flag nation country banner spain
+๐ช๐น flag ethiopia et flag nation country banner ethiopia
+๐ช๐บ flag european union european union flag banner
+๐ซ๐ฎ flag finland fi flag nation country banner finland
+๐ซ๐ฏ flag fiji fj flag nation country banner fiji
+๐ซ๐ฐ flag falkland islands falkland islands malvinas flag nation country banner falkland islands
+๐ซ๐ฒ flag micronesia micronesia federated states flag nation country banner micronesia
+๐ซ๐ด flag faroe islands faroe islands flag nation country banner faroe islands
+๐ซ๐ท flag france banner flag nation france french country france
+๐ฌ๐ฆ flag gabon ga flag nation country banner gabon
+๐ฌ๐ง flag united kingdom united kingdom great britain northern ireland flag nation country banner british UK english england union jack united kingdom
+๐ฌ๐ฉ flag grenada gd flag nation country banner grenada
+๐ฌ๐ช flag georgia ge flag nation country banner georgia
+๐ฌ๐ซ flag french guiana french guiana flag nation country banner french guiana
+๐ฌ๐ฌ flag guernsey gg flag nation country banner guernsey
+๐ฌ๐ญ flag ghana gh flag nation country banner ghana
+๐ฌ๐ฎ flag gibraltar gi flag nation country banner gibraltar
+๐ฌ๐ฑ flag greenland gl flag nation country banner greenland
+๐ฌ๐ฒ flag gambia gm flag nation country banner gambia
+๐ฌ๐ณ flag guinea gn flag nation country banner guinea
+๐ฌ๐ต flag guadeloupe gp flag nation country banner guadeloupe
+๐ฌ๐ถ flag equatorial guinea equatorial gn flag nation country banner equatorial guinea
+๐ฌ๐ท flag greece gr flag nation country banner greece
+๐ฌ๐ธ flag south georgia south sandwich islands south georgia sandwich islands flag nation country banner south georgia south sandwich islands
+๐ฌ๐น flag guatemala gt flag nation country banner guatemala
+๐ฌ๐บ flag guam gu flag nation country banner guam
+๐ฌ๐ผ flag guinea bissau gw bissau flag nation country banner guinea bissau
+๐ฌ๐พ flag guyana gy flag nation country banner guyana
+๐ญ๐ฐ flag hong kong sar china hong kong flag nation country banner hong kong sar china
+๐ญ๐ฒ flag heard mcdonald islands
+๐ญ๐ณ flag honduras hn flag nation country banner honduras
+๐ญ๐ท flag croatia hr flag nation country banner croatia
+๐ญ๐น flag haiti ht flag nation country banner haiti
+๐ญ๐บ flag hungary hu flag nation country banner hungary
+๐ฎ๐จ flag canary islands canary islands flag nation country banner canary islands
+๐ฎ๐ฉ flag indonesia flag nation country banner indonesia
+๐ฎ๐ช flag ireland ie flag nation country banner ireland
+๐ฎ๐ฑ flag israel il flag nation country banner israel
+๐ฎ๐ฒ flag isle of man isle man flag nation country banner isle of man
+๐ฎ๐ณ flag india in flag nation country banner india
+๐ฎ๐ด flag british indian ocean territory british indian ocean territory flag nation country banner british indian ocean territory
+๐ฎ๐ถ flag iraq iq flag nation country banner iraq
+๐ฎ๐ท flag iran iran islamic republic flag nation country banner iran
+๐ฎ๐ธ flag iceland is flag nation country banner iceland
+๐ฎ๐น flag italy italy flag nation country banner italy
+๐ฏ๐ช flag jersey je flag nation country banner jersey
+๐ฏ๐ฒ flag jamaica jm flag nation country banner jamaica
+๐ฏ๐ด flag jordan jo flag nation country banner jordan
+๐ฏ๐ต flag japan japanese nation flag country banner japan
+๐ฐ๐ช flag kenya ke flag nation country banner kenya
+๐ฐ๐ฌ flag kyrgyzstan kg flag nation country banner kyrgyzstan
+๐ฐ๐ญ flag cambodia kh flag nation country banner cambodia
+๐ฐ๐ฎ flag kiribati ki flag nation country banner kiribati
+๐ฐ๐ฒ flag comoros km flag nation country banner comoros
+๐ฐ๐ณ flag st kitts nevis saint kitts nevis flag nation country banner st kitts nevis
+๐ฐ๐ต flag north korea north korea nation flag country banner north korea
+๐ฐ๐ท flag south korea south korea nation flag country banner south korea
+๐ฐ๐ผ flag kuwait kw flag nation country banner kuwait
+๐ฐ๐พ flag cayman islands cayman islands flag nation country banner cayman islands
+๐ฐ๐ฟ flag kazakhstan kz flag nation country banner kazakhstan
+๐ฑ๐ฆ flag laos lao democratic republic flag nation country banner laos
+๐ฑ๐ง flag lebanon lb flag nation country banner lebanon
+๐ฑ๐จ flag st lucia saint lucia flag nation country banner st lucia
+๐ฑ๐ฎ flag liechtenstein li flag nation country banner liechtenstein
+๐ฑ๐ฐ flag sri lanka sri lanka flag nation country banner sri lanka
+๐ฑ๐ท flag liberia lr flag nation country banner liberia
+๐ฑ๐ธ flag lesotho ls flag nation country banner lesotho
+๐ฑ๐น flag lithuania lt flag nation country banner lithuania
+๐ฑ๐บ flag luxembourg lu flag nation country banner luxembourg
+๐ฑ๐ป flag latvia lv flag nation country banner latvia
+๐ฑ๐พ flag libya ly flag nation country banner libya
+๐ฒ๐ฆ flag morocco ma flag nation country banner morocco
+๐ฒ๐จ flag monaco mc flag nation country banner monaco
+๐ฒ๐ฉ flag moldova moldova republic flag nation country banner moldova
+๐ฒ๐ช flag montenegro me flag nation country banner montenegro
+๐ฒ๐ซ flag st martin
+๐ฒ๐ฌ flag madagascar mg flag nation country banner madagascar
+๐ฒ๐ญ flag marshall islands marshall islands flag nation country banner marshall islands
+๐ฒ๐ฐ flag north macedonia macedonia flag nation country banner north macedonia
+๐ฒ๐ฑ flag mali ml flag nation country banner mali
+๐ฒ๐ฒ flag myanmar mm flag nation country banner myanmar
+๐ฒ๐ณ flag mongolia mn flag nation country banner mongolia
+๐ฒ๐ด flag macao sar china macao flag nation country banner macao sar china
+๐ฒ๐ต flag northern mariana islands northern mariana islands flag nation country banner northern mariana islands
+๐ฒ๐ถ flag martinique mq flag nation country banner martinique
+๐ฒ๐ท flag mauritania mr flag nation country banner mauritania
+๐ฒ๐ธ flag montserrat ms flag nation country banner montserrat
+๐ฒ๐น flag malta mt flag nation country banner malta
+๐ฒ๐บ flag mauritius mu flag nation country banner mauritius
+๐ฒ๐ป flag maldives mv flag nation country banner maldives
+๐ฒ๐ผ flag malawi mw flag nation country banner malawi
+๐ฒ๐ฝ flag mexico mx flag nation country banner mexico
+๐ฒ๐พ flag malaysia my flag nation country banner malaysia
+๐ฒ๐ฟ flag mozambique mz flag nation country banner mozambique
+๐ณ๐ฆ flag namibia na flag nation country banner namibia
+๐ณ๐จ flag new caledonia new caledonia flag nation country banner new caledonia
+๐ณ๐ช flag niger ne flag nation country banner niger
+๐ณ๐ซ flag norfolk island norfolk island flag nation country banner norfolk island
+๐ณ๐ฌ flag nigeria flag nation country banner nigeria
+๐ณ๐ฎ flag nicaragua ni flag nation country banner nicaragua
+๐ณ๐ฑ flag netherlands nl flag nation country banner netherlands
+๐ณ๐ด flag norway no flag nation country banner norway
+๐ณ๐ต flag nepal np flag nation country banner nepal
+๐ณ๐ท flag nauru nr flag nation country banner nauru
+๐ณ๐บ flag niue nu flag nation country banner niue
+๐ณ๐ฟ flag new zealand new zealand flag nation country banner new zealand
+๐ด๐ฒ flag oman om symbol flag nation country banner oman
+๐ต๐ฆ flag panama pa flag nation country banner panama
+๐ต๐ช flag peru pe flag nation country banner peru
+๐ต๐ซ flag french polynesia french polynesia flag nation country banner french polynesia
+๐ต๐ฌ flag papua new guinea papua new guinea flag nation country banner papua new guinea
+๐ต๐ญ flag philippines ph flag nation country banner philippines
+๐ต๐ฐ flag pakistan pk flag nation country banner pakistan
+๐ต๐ฑ flag poland pl flag nation country banner poland
+๐ต๐ฒ flag st pierre miquelon saint pierre miquelon flag nation country banner st pierre miquelon
+๐ต๐ณ flag pitcairn islands pitcairn flag nation country banner pitcairn islands
+๐ต๐ท flag puerto rico puerto rico flag nation country banner puerto rico
+๐ต๐ธ flag palestinian territories palestine palestinian territories flag nation country banner palestinian territories
+๐ต๐น flag portugal pt flag nation country banner portugal
+๐ต๐ผ flag palau pw flag nation country banner palau
+๐ต๐พ flag paraguay py flag nation country banner paraguay
+๐ถ๐ฆ flag qatar qa flag nation country banner qatar
+๐ท๐ช flag reunion rรฉunion flag nation country banner reunion
+๐ท๐ด flag romania ro flag nation country banner romania
+๐ท๐ธ flag serbia rs flag nation country banner serbia
+๐ท๐บ flag russia russian federation flag nation country banner russia
+๐ท๐ผ flag rwanda rw flag nation country banner rwanda
+๐ธ๐ฆ flag saudi arabia flag nation country banner saudi arabia
+๐ธ๐ง flag solomon islands solomon islands flag nation country banner solomon islands
+๐ธ๐จ flag seychelles sc flag nation country banner seychelles
+๐ธ๐ฉ flag sudan sd flag nation country banner sudan
+๐ธ๐ช flag sweden se flag nation country banner sweden
+๐ธ๐ฌ flag singapore sg flag nation country banner singapore
+๐ธ๐ญ flag st helena saint helena ascension tristan cunha flag nation country banner st helena
+๐ธ๐ฎ flag slovenia si flag nation country banner slovenia
+๐ธ๐ฏ flag svalbard jan mayen
+๐ธ๐ฐ flag slovakia sk flag nation country banner slovakia
+๐ธ๐ฑ flag sierra leone sierra leone flag nation country banner sierra leone
+๐ธ๐ฒ flag san marino san marino flag nation country banner san marino
+๐ธ๐ณ flag senegal sn flag nation country banner senegal
+๐ธ๐ด flag somalia so flag nation country banner somalia
+๐ธ๐ท flag suriname sr flag nation country banner suriname
+๐ธ๐ธ flag south sudan south sd flag nation country banner south sudan
+๐ธ๐น flag sao tome principe sao tome principe flag nation country banner sao tome principe
+๐ธ๐ป flag el salvador el salvador flag nation country banner el salvador
+๐ธ๐ฝ flag sint maarten sint maarten dutch flag nation country banner sint maarten
+๐ธ๐พ flag syria syrian arab republic flag nation country banner syria
+๐ธ๐ฟ flag eswatini sz flag nation country banner eswatini
+๐น๐ฆ flag tristan da cunha
+๐น๐จ flag turks caicos islands turks caicos islands flag nation country banner turks caicos islands
+๐น๐ฉ flag chad td flag nation country banner chad
+๐น๐ซ flag french southern territories french southern territories flag nation country banner french southern territories
+๐น๐ฌ flag togo tg flag nation country banner togo
+๐น๐ญ flag thailand th flag nation country banner thailand
+๐น๐ฏ flag tajikistan tj flag nation country banner tajikistan
+๐น๐ฐ flag tokelau tk flag nation country banner tokelau
+๐น๐ฑ flag timor leste timor leste flag nation country banner timor leste
+๐น๐ฒ flag turkmenistan flag nation country banner turkmenistan
+๐น๐ณ flag tunisia tn flag nation country banner tunisia
+๐น๐ด flag tonga to flag nation country banner tonga
+๐น๐ท flag turkey turkey flag nation country banner turkey
+๐น๐น flag trinidad tobago trinidad tobago flag nation country banner trinidad tobago
+๐น๐ป flag tuvalu flag nation country banner tuvalu
+๐น๐ผ flag taiwan tw flag nation country banner taiwan
+๐น๐ฟ flag tanzania tanzania united republic flag nation country banner tanzania
+๐บ๐ฆ flag ukraine ua flag nation country banner ukraine
+๐บ๐ฌ flag uganda ug flag nation country banner uganda
+๐บ๐ฒ flag u s outlying islands
+๐บ๐ณ flag united nations un flag banner
+๐บ๐ธ flag united states united states america flag nation country banner united states
+๐บ๐พ flag uruguay uy flag nation country banner uruguay
+๐บ๐ฟ flag uzbekistan uz flag nation country banner uzbekistan
+๐ป๐ฆ flag vatican city vatican city flag nation country banner vatican city
+๐ป๐จ flag st vincent grenadines saint vincent grenadines flag nation country banner st vincent grenadines
+๐ป๐ช flag venezuela ve bolivarian republic flag nation country banner venezuela
+๐ป๐ฌ flag british virgin islands british virgin islands bvi flag nation country banner british virgin islands
+๐ป๐ฎ flag u s virgin islands virgin islands us flag nation country banner u s virgin islands
+๐ป๐ณ flag vietnam viet nam flag nation country banner vietnam
+๐ป๐บ flag vanuatu vu flag nation country banner vanuatu
+๐ผ๐ซ flag wallis futuna wallis futuna flag nation country banner wallis futuna
+๐ผ๐ธ flag samoa ws flag nation country banner samoa
+๐ฝ๐ฐ flag kosovo xk flag nation country banner kosovo
+๐พ๐ช flag yemen ye flag nation country banner yemen
+๐พ๐น flag mayotte yt flag nation country banner mayotte
+๐ฟ๐ฆ flag south africa south africa flag nation country banner south africa
+๐ฟ๐ฒ flag zambia zm flag nation country banner zambia
+๐ฟ๐ผ flag zimbabwe zw flag nation country banner zimbabwe
+๐ด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ flag england flag english
+๐ด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ flag scotland flag scottish
+๐ด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ flag wales flag welsh
+๐ฅฒ smiling face with tear sad cry pretend
+๐ฅธ disguised face pretent brows glasses moustache
+๐ค pinched fingers size tiny small
+๐ซ anatomical heart health heartbeat
+๐ซ lungs breathe
+๐ฅท ninja ninjutsu skills japanese
+๐คตโโ๏ธ man in tuxedo formal fashion
+๐คตโโ๏ธ woman in tuxedo formal fashion
+๐ฐโโ๏ธ man with veil wedding marriage
+๐ฐโโ๏ธ woman with veil wedding marriage
+๐ฉโ๐ผ woman feeding baby birth food
+๐จโ๐ผ man feeding baby birth food
+๐งโ๐ผ person feeding baby birth food
+๐งโ๐ mx claus christmas
+๐ซ people hugging care
+๐โโฌ black cat superstition luck
+๐ฆฌ bison ox
+๐ฆฃ mammoth elephant tusks
+๐ฆซ beaver animal rodent
+๐ปโโ๏ธ polar bear animal arctic
+๐ฆค dodo animal bird
+๐ชถ feather bird fly
+๐ฆญ seal animal creature sea
+๐ชฒ beetle insect
+๐ชณ cockroach insect pests
+๐ชฐ fly insect
+๐ชฑ worm animal
+๐ชด potted plant greenery house
+๐ซ blueberries fruit
+๐ซ olive fruit
+๐ซ bell pepper fruit plant
+๐ซ flatbread flour food
+๐ซ tamale food masa
+๐ซ fondue cheese pot food
+๐ซ teapot drink hot
+๐ง bubble tea taiwan boba milk tea straw
+๐ชจ rock stone
+๐ชต wood nature timber trunk
+๐ hut house structure
+๐ป pickup truck car transportation
+๐ผ roller skate footwear sports
+๐ช magic wand supernature power
+๐ช
pinata mexico candy celebration
+๐ช nesting dolls matryoshka toy
+๐ชก sewing needle stitches
+๐ชข knot rope scout
+๐ฉด thong sandal footwear summer
+๐ช military helmet army protection
+๐ช accordion music
+๐ช long drum music
+๐ช coin money currency
+๐ช boomerang weapon
+๐ช carpentry saw cut chop
+๐ช screwdriver tools
+๐ช hook tools
+๐ช ladder tools
+๐ elevator lift
+๐ช mirror reflection
+๐ช window scenery
+๐ช plunger toilet
+๐ชค mouse trap cheese
+๐ชฃ bucket water container
+๐ชฅ toothbrush hygiene dental
+๐ชฆ headstone death rip grave
+๐ชง placard announcement
+โง๏ธ transgender symbol lgbtq
+๐ณ๏ธโโง๏ธ transgender flag lgbtq
+๐ถโ๐ซ๏ธ face in clouds shower steam dream
+๐ฎโ๐จ face exhaling relieve relief tired sigh
+๐ตโ๐ซ face with spiral eyes sick ill confused nauseous nausea
+โค๏ธโ๐ฅ heart on fire passionate enthusiastic
+โค๏ธโ๐ฉน mending heart broken heart bandage wounded
+๐งโโ๏ธ man beard facial hair
+๐งโโ๏ธ woman beard facial hair
+๐ซ melting face hot heat
+๐ซข face with open eyes and hand over mouth silence secret shock surprise
+๐ซฃ face with peeking eye scared frightening embarrassing
+๐ซก saluting face respect salute
+๐ซฅ dotted line face invisible lonely isolation depression
+๐ซค face with diagonal mouth skeptic confuse frustrated indifferent
+๐ฅน face holding back tears touched gratitude
+๐ซฑ rightwards hand palm offer
+๐ซฒ leftwards hand palm offer
+๐ซณ palm down hand palm drop
+๐ซด palm up hand lift offer demand
+๐ซฐ hand with index finger and thumb crossed heart love money expensive
+๐ซต index pointing at the viewer you recruit
+๐ซถ heart hands love appreciation support
+๐ซฆ biting lip flirt sexy pain worry
+๐ซ
person with crown royalty power
+๐ซ pregnant man baby belly
+๐ซ pregnant person baby belly
+๐ง troll mystical monster
+๐ชธ coral ocean sea reef
+๐ชท lotus flower calm meditation
+๐ชน empty nest bird
+๐ชบ nest with eggs bird
+๐ซ beans food
+๐ซ pouring liquid cup water
+๐ซ jar container sauce
+๐ playground slide fun park
+๐ wheel car transport
+๐ ring buoy life saver life preserver
+๐ชฌ hamsa religion protection
+๐ชฉ mirror ball disco dance party
+๐ชซ low battery drained dead
+๐ฉผ crutch accessibility assist
+๐ฉป x-ray skeleton medicine
+๐ซง bubbles soap fun carbonation sparkling
+๐ชช identification card document
+๐ฐ heavy equals sign math
diff --git a/.local/bin/record-script-fullscreen.sh b/.local/bin/record-script-fullscreen.sh
deleted file mode 100755
index 51f723a0f..000000000
--- a/.local/bin/record-script-fullscreen.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#/usr/bin/bash
-
-cd /home/end/Videos
-if ["$(pidof wf-recorder)" -ne ""]; then
- notify-send "wf-recorder" "Starting recording" -a 'wf-recorder'
- wf-recorder -t -f './recording_'"$(date '+%Y_%m_%_d..%H.%M')"'.mp4' --audio=alsa_output.pci-0000_08_00.6.analog-stereo.monitor
-else
- /usr/bin/kill --signal SIGINT wf-recorder
- notify-send "wf-recorder" "Recording Stopped" -a 'wf-recorder'
-fi
diff --git a/.local/bin/record-script.sh b/.local/bin/record-script.sh
deleted file mode 100755
index 1e38b9ddf..000000000
--- a/.local/bin/record-script.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#/usr/bin/bash
-
-cd /home/end/Videos
-if [[ "$(pidof wf-recorder)" == "" ]]; then
- notify-send "wf-recorder" "Starting recording" -a 'wf-recorder'
- wf-recorder -f './recording_'"$(date '+%Y_%m_%_d..%H.%M')"'.mp4' -t --geometry "$(slurp)"
-else
- /usr/bin/kill --signal SIGINT wf-recorder
- notify-send "wf-recorder" "Recording Stopped" -a 'wf-recorder'
-fi
\ No newline at end of file
diff --git a/.local/bin/switchrice.sh b/.local/bin/switchrice.sh
deleted file mode 100755
index 5a5581632..000000000
--- a/.local/bin/switchrice.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/bash
-
-if [[ "$2" == "" ]]; then # basic rice switching
- notify-send 'Usage: >swr [save name] [load name]'
- exit
-fi
-mkdir -p ~/.config/__enderice/
-mv ~/.config/eww ~/.config/__enderice/eww_"$1"
-mv ~/.config/hypr ~/.config/__enderice/hypr_"$1"
-
-mv ~/.config/__enderice/eww_"$2" ~/.config/eww
-mv ~/.config/__enderice/hypr_"$2" ~/.config/hypr
-
-pkill eww && eww open bar && eww open bgdecor
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f6010d4c4..0ed6506f7 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,4 +1,4 @@
# Contributing
-- Please understand that dotfiles are personal
-- Fixes are fine
-- If you make new stuff, I'll probably nitpick as I want quality
+- Maintain the code format and folder structure and I'll be happy
+- If you decide to write new scripts, I can only review C++, bash and Python codes (and not rust)
+- I guess that's it for now.
diff --git a/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-frappe.xml b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-frappe.xml
new file mode 100755
index 000000000..76b043e82
--- /dev/null
+++ b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-frappe.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+ sacerdos
+ <_description>Soothing pastel theme for Gedit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-latte.xml b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-latte.xml
new file mode 100755
index 000000000..1d6e3b5fc
--- /dev/null
+++ b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-latte.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+ sacerdos
+ <_description>Soothing pastel theme for Gedit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-macchiato.xml b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-macchiato.xml
new file mode 100755
index 000000000..5e3bffe69
--- /dev/null
+++ b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-macchiato.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+ sacerdos
+ <_description>Soothing pastel theme for Gedit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-mocha.xml b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-mocha.xml
new file mode 100755
index 000000000..0fb5a5b60
--- /dev/null
+++ b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-mocha.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+ sacerdos
+ <_description>Soothing pastel theme for Gedit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/everforest-b.xml b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/everforest-b.xml
new file mode 100755
index 000000000..f5c22b570
--- /dev/null
+++ b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/everforest-b.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+ sacerdos
+ <_description>Everforest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/tokyo_night_dark.xml b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/tokyo_night_dark.xml
new file mode 100644
index 000000000..3e345f89c
--- /dev/null
+++ b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/tokyo_night_dark.xml
@@ -0,0 +1,95 @@
+
+
+
+ fkorpsvart
+ <_description>Tokyo Night Dark theme for Gedit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/tokyo_night_storm.xml b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/tokyo_night_storm.xml
new file mode 100644
index 000000000..eba507872
--- /dev/null
+++ b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/tokyo_night_storm.xml
@@ -0,0 +1,95 @@
+
+
+
+ fkorpsvart
+ <_description>Tokyo Night Storm theme for Gedit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/README.md b/Projects/README.md
new file mode 100644
index 000000000..84ab37383
--- /dev/null
+++ b/Projects/README.md
@@ -0,0 +1,2 @@
+- This folder is for programs that have a proper folder structure that should be compiled then copied to .config/eww/scripts, if you wish.
+- If you don't mind using prebuilt binaries, you can ignore this folder
diff --git a/README.md b/README.md
index 94b4c9408..27704af6b 100755
--- a/README.md
+++ b/README.md
@@ -1,89 +1,16 @@
-
ใ end_4's Hyprland dotfiles ใ
-
+ ใ illogical_impulse ใ
+ Next-level hype with AGS
-
+## Description
+- [AGS](https://github.com/Aylur/ags/)-powered.
+- Scalable. Light/Dark mode support. Material colors that adapt to your wallpaper
-
-
-[](https://github.com/end-4/hyprland)
-
-
+## Preview
+
+
-
-
-# โจ Cool stuff
-
- Notable features
-
- - **Overview widget** that shows open apps. Conveniently packed with app search/calculator/command runner
- - **ChatGPT widget** (illogical-impulse branch)
- - **Autogenerated colors** based on your wallpaper using [Material colors](https://m3.material.io/styles/color/the-color-system/key-colors-tones)
- - **Animations**, a lot
-
-
- Bragging
-
- - summer-themed `hybrid` branch (note: now actually in `archive` branch): winner of Hyprland ricing competition Summer 2023, now shown in the [Hyprland repo](https://github.com/hyprwm/hyprland#gallery) and [Hyprland Wiki](https://wiki.hyprland.org/Configuring/Example-configurations/)
- - `windoes` branch (note: also in `archive` branch now): is a "Tasty rice" [on r/unixporn](https://www.reddit.com/r/unixporn/comments/13zdhqd/hyprland_windows_rice_with_too_much_eww_with_blur/)
-
-
-# ๐ Styles & installation
-
-- For **installation instructions**, check the branch readme and the [wiki](https://github.com/end-4/dots-hyprland/wiki).
-
-### [illogical_impulse](https://github.com/end-4/dots-hyprland/tree/illogical-impulse)
-
-
-
-
-
-
-> [!WARNING]
-> - Only the above is maintained
-> - Stuff below:
-> - Currently, they do NOT work (see [#99](https://github.com/end-4/dots-hyprland/issues/99))
-> - The pics are here mainly for your viewing pleasure
-> - The files are still available, feel free to grab them from [`archive`](https://github.com/end-4/dots-hyprland/tree/archive) branch if you're willing to see some spaghetti and troubleshoot
-
-- stuff below have showcase videos. click image to view.
-
-### [m3ww](https://github.com/end-4/dots-hyprland/tree/archive)
-
-
-
-
-### [NovelKnock](https://github.com/end-4/dots-hyprland/tree/archive)
-
-
-
-
-### [Hybrid](https://github.com/end-4/dots-hyprland/tree/archive)
-
-
-
-
-### [Windoes](https://github.com/end-4/dots-hyprland/tree/archive)
-
-
-
-
-- For even older stuff I never wanna touch again, check the releases
-
----
-
-# ๐ Attribution
- - AGS: [Aylur's config](https://github.com/Aylur/dotfiles)
- - EWW: [fufexan's config](https://github.com/fufexan/dotfiles) (he thanks more people there btw)
- - AI bots for providing useful examples
- - Open source contributors for their software and ricers for their insipration (would be a too long list to put here!)
-
-# ๐ stonks
-- _thank you_
-
-[](https://starchart.cc/end-4/dots-hyprland)
-
-# ๐ก Some inspirations
- - osu!lazer, Windows 11, Material Design 3, AvdanOS (concept)
+## Instructions
+- See the wiki for instructions > [illogical_impulse](https://github.com/end-4/dots-hyprland/wiki/illogical_impulse)
diff --git a/YOU_SHOULD_NOT_USE_THIS_BRANCH.sh b/YOU_SHOULD_NOT_USE_THIS_BRANCH.sh
deleted file mode 100755
index c7863b527..000000000
--- a/YOU_SHOULD_NOT_USE_THIS_BRANCH.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/env bash
-echo 'Use another branch, as said in the readme'
diff --git a/install.sh b/install.sh
new file mode 100755
index 000000000..ada9702f4
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env bash
+
+echo 'Hi there!'
+echo 'This script 1. only works for ArchLinux and Arch-based distros.'
+echo ' 2. has not been tested, use at your own risk.'
+echo ' 3. will show all commands that it runs.'
+echo ' 4. should be run from its folder.'
+echo '== BACKUP YOUR CONFIG FOLDER IF NEEDED! =='
+echo 'Ctrl+C to exit. Enter to continue.'
+read
+#####################################################################################
+echo '1. Get packages and add user to video/input groups'
+
+echo 'yay -S brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout'
+yay -S brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout
+
+user=$(whoami)
+echo "sudo usermod -aG video $user"
+sudo usermod -aG video "$user" || echo "failed to add user to video group"
+echo "sudo usermod -aG input $user"
+sudo usermod -aG input "$user" || echo "failed to add user to input group"
+echo "Step 1 Complete."
+#####################################################################################
+echo '2. Installing AGS manually'
+sleep 1
+echo 'git clone --recursive https://github.com/Aylur/ags.git && cd ags'
+git clone --recursive https://github.com/Aylur/ags.git && cd ags || echo "failed to clone into ags. Aborting..." && exit
+echo "Done Cloning! Setting up npm and meson..."
+sleep 1
+echo 'npm install && meson setup build'
+npm install && meson setup build
+echo 'meson install -C build'
+echo '(Make sure you say yes when asked to use sudo here)'
+meson install -C build
+#####################################################################################
+echo '3. Copying'
+
+echo 'cp -r "./.config" "$HOME"'
+cp -r "./.config" "$HOME" || echo "cp threw error. You could cp this yourself."
+echo 'cp -r "./.local" "$HOME"'
+cp -r "./.local" "$HOME" || echo "cp threw error. You could cp this yourself."
+#####################################################################################
+echo 'Finished. See the "Import manually" folder and grab anything you need.'
+
+
+
diff --git a/uninstall.sh b/uninstall.sh
new file mode 100755
index 000000000..4f2c0466b
--- /dev/null
+++ b/uninstall.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env bash
+
+echo 'Hi there!'
+echo 'This script 1. will uninstall [end-4/dots-hyprland > illogical-impulse] dotfiles'
+echo ' 2. will try to revert *mostly everything* installed using install.sh, so it'\''s pretty destructive'
+echo ' 3. has not beed tested, use at your own risk.'
+echo ' 4. will show all commands that it runs.'
+echo ' 5. should be run from its folder.'
+echo 'Ctrl+C to exit. Enter to continue.'
+read
+
+##############################################################################################################################
+
+# Undo Step 3: Removing copied config and local folders
+echo 'Removing copied config and local folders...'
+echo 'rm -rf "$HOME/.config/ags" "$HOME/.config/fish" "$HOME/.config/frontconfig" "$HOME/.config/foot" "$HOME/.config/fuzzel" "$HOME/.config/gtklock" "$HOME/.config/hypr" "$HOME/.config/mpv" "$HOME/.config/swaylock" "$HOME/.config/wlogout" "$HOME/.config/starship.toml" '
+rm -rf "$HOME/.config/ags" "$HOME/.config/fish" "$HOME/.config/frontconfig" "$HOME/.config/foot" "$HOME/.config/fuzzel" "$HOME/.config/gtklock" "$HOME/.config/hypr" "$HOME/.config/mpv" "$HOME/.config/swaylock" "$HOME/.config/wlogout" "$HOME/.config/starship.toml"
+echo 'rm -rf "$HOME/.local/bin/fuzzel-emoji" "$HOME/.config/rubyshot"'
+rm -rf "$HOME/.local/bin/fuzzel-emoji" "$HOME/.config/rubyshot"
+
+##############################################################################################################################
+
+# Undo Step 2: Uninstall AGS - Disabled for now, check issues
+# echo 'Uninstalling AGS...'
+# sudo meson uninstall -C ~/ags/build
+# rm -rf ~/ags
+
+##############################################################################################################################
+
+# Undo Step 1: Remove added user from video and input groups and remove yay packages
+echo 'Removing user from video and input groups and removing packages...'
+user=$(whoami)
+echo 'sudo deluser "$user" video'
+sudo deluser "$user" video
+echo 'sudo deluser "$user" input'
+sudo deluser "$user" input
+echo 'User removed from video and input groups.'
+
+##############################################################################################################################
+
+# Removing installed yay packages and dependencies
+echo 'yay -Rns adw-gtk3-git brightnessctl cava foot fuzzel gjs gojq gradience-git grim gtk-layer-shell gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git libdbusmenu-gtk3 plasma-browser-integration playerctl python-build python-material-color-utilities python-poetry python-pywal ripgrep sassc slurp starship swayidle swaylock swww tesseract ttf-jetbrains-mono-nerd ttf-material-symbols-variable-git ttf-space-mono-nerd typescript webp-pixbuf-loader wl-clipboard wlogout yad ydotool'
+yay -Rns adw-gtk3-git brightnessctl cava foot fuzzel gjs gojq gradience-git grim gtk-layer-shell gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git libdbusmenu-gtk3 plasma-browser-integration playerctl python-build python-material-color-utilities python-poetry python-pywal ripgrep sassc slurp starship swayidle swaylock swww tesseract ttf-jetbrains-mono-nerd ttf-material-symbols-variable-git ttf-space-mono-nerd typescript webp-pixbuf-loader wl-clipboard wlogout yad ydotool
+
+
+echo 'Uninstall Complete.'
From 0903780a6b7f8e00fcd6fe4ec38ec57064bf0b0c Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Mon, 25 Dec 2023 19:43:54 +0700
Subject: [PATCH 002/265] Update README.md
---
README.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 27704af6b..cfe467e46 100755
--- a/README.md
+++ b/README.md
@@ -5,11 +5,11 @@
## Description
- [AGS](https://github.com/Aylur/ags/)-powered.
-- Scalable. Light/Dark mode support. Material colors that adapt to your wallpaper
+- Scalable. Light/Dark mode support. Material colors adapt to your wallpaper
## Preview
-
-
+
+
## Instructions
- See the wiki for instructions > [illogical_impulse](https://github.com/end-4/dots-hyprland/wiki/illogical_impulse)
From bd8332b5bd6b4f0c5db220faefc45cfb3d0f27b8 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Tue, 26 Dec 2023 10:10:41 +0700
Subject: [PATCH 003/265] use blueberry
---
.config/ags/widgets/sideright/quicktoggles.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.config/ags/widgets/sideright/quicktoggles.js b/.config/ags/widgets/sideright/quicktoggles.js
index b0d786857..33478c25e 100644
--- a/.config/ags/widgets/sideright/quicktoggles.js
+++ b/.config/ags/widgets/sideright/quicktoggles.js
@@ -39,7 +39,7 @@ export const ToggleIconBluetooth = (props = {}) => Widget.Button({
}
},
onSecondaryClickRelease: () => {
- execAsync(['bash', '-c', 'XDG_CURRENT_DESKTOP="gnome" gnome-control-center bluetooth', '&']);
+ execAsync(['bash', '-c', 'blueberry &']);
},
child: BluetoothIndicator(),
connections: [
From c11f0e6a2bfae396945705c77434bc0c46b4ff02 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Tue, 26 Dec 2023 10:12:24 +0700
Subject: [PATCH 004/265] add blueberry to install script
---
install.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/install.sh b/install.sh
index ada9702f4..a71f9b964 100755
--- a/install.sh
+++ b/install.sh
@@ -11,8 +11,8 @@ read
#####################################################################################
echo '1. Get packages and add user to video/input groups'
-echo 'yay -S brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout'
-yay -S brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout
+echo 'yay -S blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout'
+yay -S blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout
user=$(whoami)
echo "sudo usermod -aG video $user"
From 81bf723d12544a201b308f39128ef6aaed633c58 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Wed, 27 Dec 2023 00:26:48 +0700
Subject: [PATCH 005/265] allow sidebar pinning
---
.config/ags/scss/_overview.scss | 4 +
.config/ags/scss/_sidebars.scss | 35 +-
.config/ags/scss/main.scss | 5 +
.config/ags/style.css | 757 +++++++++---------
.config/ags/widgets/dock/dock.js | 4 +-
.config/ags/widgets/overview/main.js | 2 +-
.config/ags/widgets/overview/overview.js | 1 +
.config/ags/widgets/sideleft/main.js | 1 +
.config/ags/widgets/sideleft/sideleft.js | 44 +-
.config/ags/widgets/sideright/calendar.js | 5 +-
.config/ags/widgets/sideright/quicktoggles.js | 8 +-
.config/ags/widgets/sideright/sideright.js | 1 +
12 files changed, 491 insertions(+), 376 deletions(-)
diff --git a/.config/ags/scss/_overview.scss b/.config/ags/scss/_overview.scss
index 5f3f98e75..8cea4d76f 100644
--- a/.config/ags/scss/_overview.scss
+++ b/.config/ags/scss/_overview.scss
@@ -1,3 +1,7 @@
+.overview-window {
+ margin-top: 2.727rem;
+}
+
.overview-search-box {
@include menu_decel;
@include large-rounding;
diff --git a/.config/ags/scss/_sidebars.scss b/.config/ags/scss/_sidebars.scss
index c2719789b..61618d2f8 100644
--- a/.config/ags/scss/_sidebars.scss
+++ b/.config/ags/scss/_sidebars.scss
@@ -332,7 +332,7 @@ $onChatgpt: $onPrimary;
.sidebar-selector-tab {
@include small-rounding;
- transition: 0ms;
+ @include menu_decel;
min-height: 2.5rem;
color: $onSurface;
}
@@ -687,4 +687,37 @@ $onChatgpt: $onPrimary;
.sidebar-chat-chip-action-active {
color: $sidebar_chat_textboxareaColor;
border: 0.068rem solid $sidebar_chat_textboxareaColor;
+}
+
+.sidebar-pin {
+ @include small-rounding;
+ @include menu_decel;
+ min-height: 2.386rem;
+ min-width: 2.386rem;
+ color: $onSurface;
+}
+
+.sidebar-pin:hover,
+.sidebar-pin:focus {
+ background-color: mix($t_surfaceVariant, $onSurfaceVariant, 90%);
+}
+
+.sidebar-pin:active {
+ background-color: mix($surfaceVariant, $onSurfaceVariant, 75%);
+}
+
+.sidebar-pin-enabled {
+ background-color: $primary;
+ label {
+ color: $onPrimary;
+ }
+}
+
+.sidebar-pin-enabled:hover,
+.sidebar-pin-enabled:focus {
+ background-color: mix($primary, $onPrimary, 90%);
+}
+
+.sidebar-pin-enabled:active {
+ background-color: mix($primary, $onPrimary, 80%);
}
\ No newline at end of file
diff --git a/.config/ags/scss/main.scss b/.config/ags/scss/main.scss
index e6228c0bf..45b200385 100644
--- a/.config/ags/scss/main.scss
+++ b/.config/ags/scss/main.scss
@@ -32,3 +32,8 @@
.fadingRadial {
transition: 50ms cubic-bezier(0.2, 0.0, 0, 1.0);
}
+.sidebar-pinned {
+ margin: 0rem;
+ border-radius: 0rem;
+ border: 0rem solid transparent;
+}
\ No newline at end of file
diff --git a/.config/ags/style.css b/.config/ags/style.css
index 688db91c3..cbded551c 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -41,13 +41,13 @@
transition: 0ms; }
.txt {
- color: #e2e2e2; }
+ color: #e7e1e6; }
.txt-primary {
- color: #e2e2e2; }
+ color: #d6baff; }
.txt-onSecondaryContainer {
- color: #e2e2e2; }
+ color: #eadef7; }
.txt-shadow {
text-shadow: 1px 2px 8px rgba(0, 0, 0, 0.69);
@@ -101,10 +101,10 @@
font-size: 0px; }
.txt-subtext {
- color: #a0a0a0; }
+ color: #a6a1a6; }
.txt-action {
- color: #c1c1c1; }
+ color: #c7c1c6; }
.txt-semibold {
font-weight: 500; }
@@ -130,7 +130,7 @@
.separator-circle {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #e2e2e2;
+ background-color: #e7e1e6;
margin: 0rem 0.682rem;
min-width: 0.545rem;
min-height: 0.545rem; }
@@ -331,10 +331,10 @@
transition: 300ms cubic-bezier(0.1, 1, 0, 1); }
* {
- caret-color: #e2e2e2; }
+ caret-color: #d6baff; }
* selection {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #cec2db;
+ color: #342d40; }
@keyframes appear {
from {
@@ -349,13 +349,13 @@ tooltip {
animation-iteration-count: 1; }
menu {
- border-top: 1px solid rgba(35, 35, 35, 0.121);
- border-left: 1px solid rgba(35, 35, 35, 0.121);
- border-right: 1px solid rgba(19, 19, 19, 0.1105);
- border-bottom: 1px solid rgba(19, 19, 19, 0.1105);
+ border-top: 1px solid rgba(59, 57, 61, 0.121);
+ border-left: 1px solid rgba(59, 57, 61, 0.121);
+ border-right: 1px solid rgba(45, 43, 47, 0.1105);
+ border-bottom: 1px solid rgba(45, 43, 47, 0.1105);
padding: 0.681rem;
- background: #121212;
- color: #e2e2e2;
+ background: #28262b;
+ color: #cbc4cf;
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
animation-name: appear;
@@ -378,53 +378,53 @@ menu > menuitem {
menu > menuitem:hover,
menu > menuitem:focus {
- background-color: #272727; }
+ background-color: #38363b; }
.separator-line {
- background-color: #121212;
+ background-color: #28262b;
min-width: 0.068rem;
min-height: 0.068rem; }
tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: #121212;
- color: #e2e2e2;
- border: 1px solid #e2e2e2; }
+ background-color: #28262b;
+ color: #cbc4cf;
+ border: 1px solid #cbc4cf; }
.configtoggle-box {
padding: 0.205rem 0.341rem;
border: 0.136rem solid transparent; }
.configtoggle-box:focus {
- border: 0.136rem solid #5c5c5c; }
+ border: 0.136rem solid #6e6b6f; }
.switch-bg {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #050505;
- border: 0.136rem solid #e2e2e2;
+ background-color: #171518;
+ border: 0.136rem solid #e7e1e6;
min-width: 2.864rem;
min-height: 1.637rem; }
.switch-bg-true {
- background-color: #e2e2e2;
- border: 0.136rem solid #e2e2e2; }
+ background-color: #d6baff;
+ border: 0.136rem solid #d6baff; }
.switch-fg {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- background-color: #e2e2e2;
- color: #020202;
+ background-color: #e7e1e6;
+ color: #1e1c20;
min-width: 0.819rem;
min-height: 0.819rem;
margin-left: 0.477rem; }
.switch-fg-true {
- background-color: #000000;
- color: #e2e2e2;
+ background-color: #3d1c70;
+ color: #d6baff;
min-width: 1.431rem;
min-height: 1.431rem;
margin-left: 1.431rem; }
@@ -437,14 +437,14 @@ tooltip {
.segment-container {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- border: 0.068rem solid #a1a1a1; }
+ border: 0.068rem solid #958f99; }
.segment-container > *:first-child {
border-top-left-radius: 9999px;
border-bottom-left-radius: 9999px; }
.segment-container > * {
- border-right: 0.068rem solid #a1a1a1;
+ border-right: 0.068rem solid #958f99;
padding: 0.341rem 0.682rem; }
.segment-container > *:last-child {
@@ -453,21 +453,21 @@ tooltip {
border-bottom-right-radius: 9999px; }
.segment-btn {
- color: #e2e2e2; }
+ color: #e7e1e6; }
.segment-btn:focus,
.segment-btn:hover {
- background-color: #121212;
- color: #e2e2e2; }
+ background-color: #28262b;
+ color: #cbc4cf; }
.segment-btn-enabled {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.segment-btn-enabled:hover,
.segment-btn-enabled:focus {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.gap-v-5 {
min-height: 0.341rem; }
@@ -488,7 +488,7 @@ tooltip {
min-width: 1.023rem; }
.bar-bg {
- background-color: #070707;
+ background-color: #0f0d10;
min-height: 2.727rem; }
.bar-sidespace {
@@ -498,7 +498,7 @@ tooltip {
padding: 0.2rem; }
.bar-group {
- background-color: rgba(2, 2, 2, 0.31); }
+ background-color: rgba(30, 28, 32, 0.31); }
.bar-group-center {
border-bottom-left-radius: 1.364rem;
@@ -570,18 +570,18 @@ tooltip {
-gtk-outline-radius: 9999px;
min-width: 0.341rem;
min-height: 0.341rem;
- background-color: rgba(24, 24, 24, 0.31);
+ background-color: rgba(50, 48, 52, 0.31);
margin: 0rem 0.341rem; }
.bar-clock {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1.2727rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.bar-date {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.bar-ws {
min-height: 1.636rem;
@@ -601,8 +601,8 @@ tooltip {
min-width: 1.5rem;
font-size: 1.091rem;
font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
- background-color: #e2e2e2;
- color: #000000;
+ background-color: #d6baff;
+ color: #3d1c70;
border-radius: 999px;
margin: 0.068rem; }
@@ -614,67 +614,67 @@ tooltip {
margin: 0rem 0.409rem; }
.bar-ws-occupied {
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4358;
+ color: #eadef7;
min-width: 1.772rem;
- border-top: 0.068rem solid #e2e2e2;
- border-bottom: 0.068rem solid #e2e2e2; }
+ border-top: 0.068rem solid #eadef7;
+ border-bottom: 0.068rem solid #eadef7; }
.bar-ws-occupied-left {
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4358;
+ color: #eadef7;
min-width: 1.704rem;
border-top-left-radius: 999px;
border-bottom-left-radius: 999px;
- border-left: 0.068rem solid #e2e2e2;
- border-top: 0.068rem solid #e2e2e2;
- border-bottom: 0.068rem solid #e2e2e2;
+ border-left: 0.068rem solid #eadef7;
+ border-top: 0.068rem solid #eadef7;
+ border-bottom: 0.068rem solid #eadef7;
border-right: 0px solid transparent; }
.bar-ws-occupied-right {
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4358;
+ color: #eadef7;
min-width: 1.704rem;
border-top-right-radius: 999px;
border-bottom-right-radius: 999px;
- border-right: 0.068rem solid #e2e2e2;
- border-top: 0.068rem solid #e2e2e2;
- border-bottom: 0.068rem solid #e2e2e2;
+ border-right: 0.068rem solid #eadef7;
+ border-top: 0.068rem solid #eadef7;
+ border-bottom: 0.068rem solid #eadef7;
border-left: 0px solid transparent; }
.bar-ws-occupied-left-right {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4358;
+ color: #eadef7;
min-width: 1.636rem;
- border: 0.068rem solid #e2e2e2; }
+ border: 0.068rem solid #eadef7; }
.bar-ws-empty {
- color: #e2e2e2;
+ color: #e7e1e6;
border-color: transparent; }
.bar-batt {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0rem 0.341rem;
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.bar-sidemodule {
min-width: 26rem; }
.bar-batt-low {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #ffb4a9;
+ color: #930006; }
.bar-batt-full {
background-color: #374b3e;
color: #d1e9d6; }
.bar-batt-prog-low {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #ffb4a9;
+ color: #930006; }
.bar-batt-prog-full {
background-color: #374b3e;
@@ -684,23 +684,23 @@ tooltip {
min-height: 1.770rem;
min-width: 1.770rem;
border-radius: 10rem;
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.bar-music-circprog {
transition: 1000ms cubic-bezier(0.1, 1, 0, 1);
min-width: 0.068rem;
min-height: 1.770rem;
padding: 0rem;
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.bar-music-playstate-playing {
min-height: 1.770rem;
min-width: 1.770rem;
border-radius: 10rem;
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.bar-music-playstate-txt {
transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
@@ -768,10 +768,10 @@ tooltip {
min-width: 0.680rem;
margin: 0rem 0.137rem;
border-radius: 10rem;
- background-color: #e2e2e2; }
+ background-color: #eadef7; }
.bar-prog-batt-low progress {
- background-color: #000000; }
+ background-color: #930006; }
.bar-prog-batt-full progress {
background-color: #d1e9d6; }
@@ -784,18 +784,18 @@ tooltip {
border-radius: 10rem;
min-width: 0.681rem;
min-height: 0.681rem;
- background-color: #e2e2e2;
- color: #313131; }
+ background-color: #eadef7;
+ color: #4b4358; }
.bar-batt-chargestate-charging-smaller {
border-radius: 10rem;
min-width: 0.409rem;
min-height: 0.409rem;
- background-color: #e2e2e2;
- color: #313131; }
+ background-color: #eadef7;
+ color: #4b4358; }
.bar-batt-chargestate-low {
- background-color: #000000; }
+ background-color: #930006; }
.bar-batt-chargestate-full {
background-color: #d1e9d6; }
@@ -806,7 +806,7 @@ tooltip {
font-weight: 500; }
.corner {
- background-color: #070707;
+ background-color: #0f0d10;
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem; }
@@ -818,7 +818,7 @@ tooltip {
.bar-topdesc {
margin-top: -0.136rem;
margin-bottom: -0.341rem;
- color: #a0a0a0; }
+ color: #a6a1a6; }
.bar-space-button {
padding: 0.341rem; }
@@ -860,22 +860,22 @@ tooltip {
padding: 0rem 0.614rem; }
.bar-statusicons-hover {
- background-color: #1d1d1d; }
+ background-color: #252225; }
.bar-statusicons-active {
- background-color: #333333; }
+ background-color: #3a373b; }
.cheatsheet-bg {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(154, 154, 154, 0.19);
- border-left: 1px solid rgba(154, 154, 154, 0.19);
- border-right: 1px solid rgba(114, 114, 114, 0.145);
- border-bottom: 1px solid rgba(114, 114, 114, 0.145);
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
margin-bottom: 0.682rem;
- background-color: #070707;
+ background-color: #0f0d10;
padding: 1.364rem; }
.cheatsheet-key {
@@ -886,16 +886,16 @@ tooltip {
padding: 0.136rem 0.205rem;
border-radius: 0.409rem;
-gtk-outline-radius: 0.409rem;
- color: #e2e2e2;
- border: 0.068rem solid #e2e2e2;
- box-shadow: 0rem 0.136rem 0rem #e2e2e2;
+ color: #d6baff;
+ border: 0.068rem solid #d6baff;
+ box-shadow: 0rem 0.136rem 0rem #d6baff;
font-weight: 500; }
.cheatsheet-key-notkey {
min-height: 1.364rem;
padding: 0.136rem 0.205rem;
margin: 0.17rem;
- color: #e2e2e2; }
+ color: #ecdcff; }
.cheatsheet-closebtn {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -906,10 +906,10 @@ tooltip {
.cheatsheet-closebtn:hover,
.cheatsheet-closebtn:focus {
- background-color: #121212; }
+ background-color: #28262b; }
.cheatsheet-closebtn:active {
- background-color: #505050; }
+ background-color: #59555c; }
.cheatsheet-category-title {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
@@ -924,12 +924,12 @@ tooltip {
.bg-time-clock {
font-family: 'Gabarito';
font-size: 5.795rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.bg-time-date {
font-family: 'Gabarito';
font-size: 2.591rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.bg-distro-box {
border-radius: 1.705rem;
@@ -940,12 +940,12 @@ tooltip {
.bg-distro-txt {
font-family: 'Gabarito';
font-size: 1.432rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.bg-distro-name {
font-family: 'Gabarito';
font-size: 1.432rem;
- color: #e2e2e2; }
+ color: #eadef7; }
.bg-graph {
color: rgba(255, 255, 255, 0.5);
@@ -954,25 +954,25 @@ tooltip {
.bg-quicklaunch-title {
font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
- color: #e2e2e2; }
+ color: #cbc4cf; }
.bg-quicklaunch-btn {
font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #121212;
- color: #e2e2e2;
- border: 0.068rem solid #a0a0a0;
+ background-color: #28262b;
+ color: #cbc4cf;
+ border: 0.068rem solid #a6a1a6;
min-width: 4.432rem;
min-height: 2.045rem;
padding: 0.273rem 0.682rem; }
.bg-quicklaunch-btn:hover,
.bg-quicklaunch-btn:focus {
- background-color: #1c1c1c; }
+ background-color: #302e33; }
.bg-quicklaunch-btn:active {
- background-color: #272727; }
+ background-color: #38363b; }
.bg-system-bg {
border-radius: 1.159rem;
@@ -984,14 +984,14 @@ tooltip {
min-height: 4.091rem;
font-size: 0px;
padding: 0rem;
- background-color: #121212; }
+ background-color: #28262b; }
.dock-bg {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
- background-color: #070707;
+ background-color: #0f0d10;
padding: 0.682rem; }
.dock-app-btn {
@@ -1001,10 +1001,10 @@ tooltip {
.dock-app-btn:hover,
.dock-app-btn:focus {
- background-color: rgba(13, 13, 13, 0.31); }
+ background-color: rgba(40, 38, 42, 0.31); }
.dock-app-btn:active {
- background-color: rgba(36, 36, 36, 0.31); }
+ background-color: rgba(60, 58, 62, 0.31); }
.dock-app-icon {
min-width: 3.409rem;
@@ -1012,14 +1012,14 @@ tooltip {
.dock-separator {
min-width: 0.068rem;
- background-color: #121212; }
+ background-color: #28262b; }
.osd-bg {
min-width: 8.864rem;
min-height: 3.409rem; }
.osd-value {
- background-color: #070707;
+ background-color: #0f0d10;
border-radius: 1.023rem;
padding: 0.625rem 1.023rem;
padding-top: 0.313rem;
@@ -1037,36 +1037,36 @@ tooltip {
min-height: 0.954rem;
min-width: 0.068rem;
border-radius: 10rem;
- background-color: #313131; }
+ background-color: #4b4358; }
.osd-progress progress {
transition: 200ms cubic-bezier(0.1, 1, 0, 1);
min-height: 0.680rem;
min-width: 0.680rem;
margin: 0rem 0.137rem;
border-radius: 10rem;
- background-color: #e2e2e2; }
+ background-color: #eadef7; }
.osd-icon {
- color: #e2e2e2; }
+ color: #ecdcff; }
.osd-label {
font-size: 1.023rem;
font-weight: 500;
- color: #e2e2e2;
+ color: #e7e1e6;
margin-top: 0.341rem; }
.osd-value-txt {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1.688rem;
font-weight: 500;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.osd-notifs {
padding-top: 0.313rem; }
.osd-colorscheme {
border-radius: 1.023rem;
- background-color: #070707;
+ background-color: #0f0d10;
padding: 1.023rem;
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem; }
@@ -1084,74 +1084,77 @@ tooltip {
margin: 0.409rem; }
.osd-color-primary {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #d6baff;
+ color: #3d1c70; }
.osd-color-primary box {
- background-color: #000000; }
+ background-color: #3d1c70; }
.osd-color-primaryContainer {
- background-color: #6b6b6b;
- color: #e2e2e2; }
+ background-color: #543588;
+ color: #ecdcff; }
.osd-color-primaryContainer box {
- background-color: #e2e2e2; }
+ background-color: #ecdcff; }
.osd-color-secondary {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #cec2db;
+ color: #342d40; }
.osd-color-secondary box {
- background-color: #000000; }
+ background-color: #342d40; }
.osd-color-secondaryContainer {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.osd-color-secondaryContainer box {
- background-color: #e2e2e2; }
+ background-color: #eadef7; }
.osd-color-surfaceVariant {
- background-color: #121212;
- color: #e2e2e2; }
+ background-color: #28262b;
+ color: #cbc4cf; }
.osd-color-surfaceVariant box {
- background-color: #e2e2e2; }
+ background-color: #cbc4cf; }
.osd-color-surface {
- background-color: #020202;
- color: #e2e2e2; }
+ background-color: #1e1c20;
+ color: #e7e1e6; }
.osd-color-surface box {
- background-color: #e2e2e2; }
+ background-color: #e7e1e6; }
.osd-color-background {
- background-color: #070707;
- color: #e2e2e2; }
+ background-color: #0f0d10;
+ color: #e7e1e6; }
.osd-color-background box {
- background-color: #e2e2e2; }
+ background-color: #e7e1e6; }
+
+.overview-window {
+ margin-top: 2.727rem; }
.overview-search-box {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(154, 154, 154, 0.19);
- border-left: 1px solid rgba(154, 154, 154, 0.19);
- border-right: 1px solid rgba(114, 114, 114, 0.145);
- border-bottom: 1px solid rgba(114, 114, 114, 0.145);
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
min-width: 13.636rem;
min-height: 3.409rem;
padding: 0rem 1.364rem;
padding-right: 2.864rem;
- background-color: #070707;
- color: #e2e2e2;
+ background-color: #0f0d10;
+ color: #e7e1e6;
caret-color: transparent; }
.overview-search-box selection {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #cec2db;
+ color: #342d40; }
.overview-search-box-extended {
min-width: 25.909rem;
- caret-color: #e2e2e2; }
+ caret-color: #eadef7; }
.overview-search-prompt {
- color: #a0a0a0; }
+ color: #a6a1a6; }
.overview-search-icon {
margin: 0rem 1.023rem; }
@@ -1167,16 +1170,16 @@ tooltip {
.overview-search-results {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(154, 154, 154, 0.19);
- border-left: 1px solid rgba(154, 154, 154, 0.19);
- border-right: 1px solid rgba(114, 114, 114, 0.145);
- border-bottom: 1px solid rgba(114, 114, 114, 0.145);
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
min-width: 28.773rem;
padding: 0.682rem;
- background-color: #070707;
- color: #e2e2e2; }
+ background-color: #0f0d10;
+ color: #e7e1e6; }
.overview-search-results-icon {
margin: 0rem 0.682rem;
@@ -1210,43 +1213,43 @@ tooltip {
.overview-tasks {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(154, 154, 154, 0.19);
- border-left: 1px solid rgba(154, 154, 154, 0.19);
- border-right: 1px solid rgba(114, 114, 114, 0.145);
- border-bottom: 1px solid rgba(114, 114, 114, 0.145);
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
padding: 0.341rem;
- background-color: #070707;
- color: #e2e2e2; }
+ background-color: #0f0d10;
+ color: #e7e1e6; }
.overview-tasks-workspace {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
margin: 0.341rem;
- background-color: rgba(25, 25, 25, 0.1147); }
+ background-color: rgba(51, 48, 52, 0.1147); }
.overview-tasks-workspace-number {
font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
- color: rgba(210, 210, 210, 0.31); }
+ color: rgba(217, 211, 216, 0.31); }
.overview-tasks-window {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- background-color: rgba(49, 49, 49, 0.5);
- color: #e2e2e2;
- border: 0.068rem solid rgba(226, 226, 226, 0.07); }
+ background-color: rgba(75, 67, 88, 0.5);
+ color: #eadef7;
+ border: 0.068rem solid rgba(234, 222, 247, 0.07); }
.overview-tasks-window:hover,
.overview-tasks-window:focus {
- background-color: rgba(73, 73, 73, 0.525); }
+ background-color: rgba(94, 83, 111, 0.525); }
.overview-tasks-window:active {
- background-color: rgba(93, 93, 93, 0.55); }
+ background-color: rgba(110, 97, 130, 0.55); }
.overview-tasks-window-selected {
- background-color: rgba(93, 93, 93, 0.55); }
+ background-color: rgba(110, 97, 130, 0.55); }
.overview-tasks-window-dragging {
opacity: 0.2; }
@@ -1254,13 +1257,13 @@ tooltip {
.osk-window {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(154, 154, 154, 0.19);
- border-left: 1px solid rgba(154, 154, 154, 0.19);
- border-right: 1px solid rgba(114, 114, 114, 0.145);
- border-bottom: 1px solid rgba(114, 114, 114, 0.145);
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
- background-color: #070707; }
+ background-color: #0f0d10; }
.osk-body {
padding: 1.023rem;
@@ -1277,7 +1280,7 @@ tooltip {
.osk-dragline {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #121212;
+ background-color: #28262b;
min-height: 0.273rem;
min-width: 10.227rem;
margin-top: 0.545rem;
@@ -1285,22 +1288,22 @@ tooltip {
.osk-key {
border-radius: 0.682rem;
- background-color: rgba(18, 18, 18, 0.31);
- color: #e2e2e2;
+ background-color: rgba(40, 38, 43, 0.31);
+ color: #cbc4cf;
padding: 0.188rem;
font-weight: 500;
font-size: 1.091rem; }
.osk-key:hover,
.osk-key:focus {
- background-color: rgba(39, 39, 39, 0.31); }
+ background-color: rgba(56, 54, 59, 0.31); }
.osk-key:active {
- background-color: rgba(80, 80, 80, 0.31);
+ background-color: rgba(89, 85, 92, 0.31);
font-size: 1.091rem; }
.osk-key-active {
- background-color: rgba(80, 80, 80, 0.31); }
+ background-color: rgba(89, 85, 92, 0.31); }
.osk-key-normal {
min-width: 2.5rem;
@@ -1328,31 +1331,31 @@ tooltip {
.osk-control-button {
border-radius: 0.682rem;
- background-color: rgba(18, 18, 18, 0.31);
- color: #e2e2e2;
+ background-color: rgba(40, 38, 43, 0.31);
+ color: #cbc4cf;
font-weight: 500;
font-size: 1.091rem;
padding: 0.682rem; }
.osk-control-button:hover,
.osk-control-button:focus {
- background-color: rgba(39, 39, 39, 0.31); }
+ background-color: rgba(56, 54, 59, 0.31); }
.osk-control-button:active {
- background-color: rgba(80, 80, 80, 0.31);
+ background-color: rgba(89, 85, 92, 0.31);
font-size: 1.091rem; }
.sidebar-right {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- border-top: 1px solid rgba(154, 154, 154, 0.19);
- border-left: 1px solid rgba(154, 154, 154, 0.19);
- border-right: 1px solid rgba(114, 114, 114, 0.145);
- border-bottom: 1px solid rgba(114, 114, 114, 0.145);
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
border-radius: 1.297rem;
min-width: 27.818rem;
- background-color: #070707;
+ background-color: #0f0d10;
padding: 1.023rem; }
.sideright-show {
@@ -1364,15 +1367,15 @@ tooltip {
.sidebar-left {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- border-top: 1px solid rgba(154, 154, 154, 0.19);
- border-left: 1px solid rgba(154, 154, 154, 0.19);
- border-right: 1px solid rgba(114, 114, 114, 0.145);
- border-bottom: 1px solid rgba(114, 114, 114, 0.145);
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
border-radius: 1.297rem;
min-width: 27.818rem;
- background-color: #070707;
+ background-color: #0f0d10;
padding: 1.023rem; }
.sideleft-show {
@@ -1386,12 +1389,12 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
padding: 0.341rem;
- background-color: rgba(2, 2, 2, 0.31); }
+ background-color: rgba(30, 28, 32, 0.31); }
.sidebar-group-nopad {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(2, 2, 2, 0.31); }
+ background-color: rgba(30, 28, 32, 0.31); }
.sidebar-group-invisible {
padding: 0.341rem; }
@@ -1403,47 +1406,47 @@ tooltip {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0.341rem;
- background-color: rgba(2, 2, 2, 0.31); }
+ background-color: rgba(30, 28, 32, 0.31); }
.sidebar-iconbutton {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- color: #e2e2e2;
+ color: #e7e1e6;
min-width: 2.727rem;
min-height: 2.727rem; }
.sidebar-iconbutton:hover,
.sidebar-iconbutton:focus {
- background-color: #545454; }
+ background-color: #6b6278; }
.sidebar-iconbutton:active {
- background-color: #787878; }
+ background-color: #8b8198; }
.sidebar-button {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
padding: 0rem 0.818rem;
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.sidebar-button-nopad {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.sidebar-button:hover,
.sidebar-button:focus {
- background-color: #545454; }
+ background-color: #6b6278; }
.sidebar-button:active {
- background-color: #787878; }
+ background-color: #8b8198; }
.sidebar-button-nopad:hover,
.sidebar-button-nopad:focus {
- background-color: #545454; }
+ background-color: #6b6278; }
.sidebar-button-nopad:active {
- background-color: #787878; }
+ background-color: #8b8198; }
.sidebar-button-left {
border-top-left-radius: 0.818rem;
@@ -1462,20 +1465,20 @@ tooltip {
-gtk-outline-radius: 0.818rem; }
.sidebar-button-active {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #d6baff;
+ color: #3d1c70; }
.sidebar-button-active:hover,
.sidebar-button-active:focus {
- background-color: rgba(224, 224, 224, 0.93); }
+ background-color: rgba(212, 185, 253, 0.93); }
.sidebar-button-active:active {
- background-color: rgba(219, 219, 219, 0.79); }
+ background-color: rgba(208, 182, 246, 0.79); }
.sidebar-buttons-separator {
min-width: 0.068rem;
min-height: 0.068rem;
- background-color: #e2e2e2; }
+ background-color: #cbc4cf; }
.sidebar-navrail {
padding: 0rem 1.159rem; }
@@ -1487,19 +1490,19 @@ tooltip {
.sidebar-navrail-btn:hover > box > label:first-child,
.sidebar-navrail-btn:focus > box > label:first-child {
- background-color: rgba(96, 96, 96, 0.379); }
+ background-color: rgba(101, 98, 105, 0.379); }
.sidebar-navrail-btn:active > box > label:first-child {
- background-color: #464646; }
+ background-color: #514e54; }
.sidebar-navrail-btn-active > box > label:first-child {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.sidebar-navrail-btn-active:hover > box > label:first-child,
.sidebar-navrail-btn-active:focus > box > label:first-child {
- background-color: rgba(51, 51, 51, 0.93);
- color: rgba(224, 224, 224, 0.93); }
+ background-color: rgba(76, 68, 89, 0.93);
+ color: rgba(232, 220, 245, 0.93); }
.sidebar-sysinfo-grouppad {
padding: 1.159rem; }
@@ -1509,8 +1512,8 @@ tooltip {
min-width: 0.818rem;
min-height: 4.091rem;
padding: 0.409rem;
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4358;
+ color: #eadef7;
font-size: 0px; }
.sidebar-memory-swap-circprog {
@@ -1519,16 +1522,16 @@ tooltip {
min-height: 2.255rem;
padding: 0.409rem;
margin: 0.918rem;
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4358;
+ color: #eadef7;
font-size: 0px; }
.sidebar-cpu-circprog {
min-width: 0.818rem;
min-height: 3.409rem;
padding: 0.409rem;
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4358;
+ color: #eadef7;
transition: 1000ms cubic-bezier(0.1, 1, 0, 1);
font-size: 0px; }
@@ -1543,14 +1546,14 @@ tooltip {
-gtk-outline-radius: 9999px;
min-width: 0.273rem;
min-height: 2.045rem;
- background-color: rgba(226, 226, 226, 0.31); }
+ background-color: rgba(203, 196, 207, 0.31); }
.sidebar-scrollbar slider:hover,
.sidebar-scrollbar slider:focus {
- background-color: rgba(226, 226, 226, 0.448); }
+ background-color: rgba(203, 196, 207, 0.448); }
.sidebar-scrollbar slider:active {
- background-color: #7a7a7a; }
+ background-color: #7a757d; }
.sidebar-calendar-btn {
border-radius: 9999px;
@@ -1558,7 +1561,7 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 2.523rem;
min-width: 2.523rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.sidebar-calendar-btn:hover,
.sidebar-calendar-btn:focus {
@@ -1572,18 +1575,18 @@ tooltip {
margin-right: -10.341rem; }
.sidebar-calendar-btn-today {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #d6baff;
+ color: #3d1c70; }
.sidebar-calendar-btn-today:hover,
.sidebar-calendar-btn-today:focus {
- background-color: rgba(224, 224, 224, 0.93); }
+ background-color: rgba(212, 185, 253, 0.93); }
.sidebar-calendar-btn-today:active {
- background-color: rgba(219, 219, 219, 0.79); }
+ background-color: rgba(208, 182, 246, 0.79); }
.sidebar-calendar-btn-othermonth {
- color: #727272; }
+ color: #837f83; }
.sidebar-calendar-header {
margin: 0.341rem; }
@@ -1592,50 +1595,50 @@ tooltip {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0rem 0.682rem;
- background-color: rgba(18, 18, 18, 0.31);
- color: #e2e2e2; }
+ background-color: rgba(40, 38, 43, 0.31);
+ color: #cbc4cf; }
.sidebar-calendar-monthyear-btn:hover,
.sidebar-calendar-monthyear-btn:focus {
- background-color: rgba(64, 64, 64, 0.3445);
- color: #d8d8d8; }
+ background-color: rgba(76, 73, 80, 0.3445);
+ color: #c3bcc7; }
.sidebar-calendar-monthyear-btn:active {
- background-color: #313131;
- color: #c3c3c3; }
+ background-color: #403e44;
+ color: #b3acb6; }
.sidebar-calendar-monthshift-btn {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
min-width: 2.045rem;
min-height: 2.045rem;
- background-color: rgba(18, 18, 18, 0.31);
- color: #e2e2e2; }
+ background-color: rgba(40, 38, 43, 0.31);
+ color: #cbc4cf; }
.sidebar-calendar-monthshift-btn:hover {
- background-color: rgba(64, 64, 64, 0.3445);
- color: #d8d8d8; }
+ background-color: rgba(76, 73, 80, 0.3445);
+ color: #c3bcc7; }
.sidebar-calendar-monthshift-btn:active {
- background-color: #313131;
- color: #c3c3c3; }
+ background-color: #403e44;
+ color: #b3acb6; }
.sidebar-selector-tab {
border-radius: 0.818rem;
-gtk-outline-radius: 0.818rem;
- transition: 0ms;
+ transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 2.5rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.sidebar-selector-tab:hover,
.sidebar-selector-tab:focus {
- background-color: rgba(96, 96, 96, 0.379); }
+ background-color: rgba(101, 98, 105, 0.379); }
.sidebar-selector-tab:active {
- background-color: #464646; }
+ background-color: #514e54; }
.sidebar-selector-tab-active > box > label {
- color: #e2e2e2; }
+ color: #d6baff; }
.sidebar-selector-highlight-offset {
margin-top: -0.205rem;
@@ -1643,14 +1646,14 @@ tooltip {
.sidebar-selector-highlight {
transition: 180ms ease-in-out;
- color: #e2e2e2;
+ color: #d6baff;
min-height: 0.205rem; }
.sidebar-todo-item {
padding-right: 0.545rem; }
.sidebar-todo-item-even {
- background-color: rgba(18, 18, 18, 0.1); }
+ background-color: rgba(40, 38, 43, 0.1); }
.sidebar-todo-item-action {
border-radius: 9999px;
@@ -1659,49 +1662,49 @@ tooltip {
.sidebar-todo-item-action:hover,
.sidebar-todo-item-action:focus {
- background-color: rgba(47, 47, 47, 0.31); }
+ background-color: rgba(70, 67, 72, 0.31); }
.sidebar-todo-item-action:active {
- background-color: rgba(80, 80, 80, 0.31); }
+ background-color: rgba(100, 97, 101, 0.31); }
.sidebar-todo-crosser {
transition: margin 200ms cubic-bezier(0.1, 1, 0, 1), background-color 0ms;
min-width: 0rem; }
.sidebar-todo-crosser-crossed {
- background-color: #e2e2e2; }
+ background-color: #e7e1e6; }
.sidebar-todo-crosser-removed {
- background-color: #e2e2e2; }
+ background-color: #ffb4a9; }
.sidebar-clipboard-item {
border-radius: 0.818rem;
min-height: 2.045rem;
padding: 0.341rem;
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.sidebar-clipboard-item:hover,
.sidebar-clipboard-item:focus {
- background-color: #434343; }
+ background-color: #5b5368; }
.sidebar-clipboard-item:active {
- background-color: #545454; }
+ background-color: #6b6278; }
.sidebar-todo-new {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- color: #e2e2e2;
+ color: #eadef7;
margin: 0.341rem;
padding: 0.205rem 0.545rem;
- border: 0.068rem solid #e2e2e2; }
+ border: 0.068rem solid #e7e1e6; }
.sidebar-todo-new:hover,
.sidebar-todo-new:focus {
- background-color: #363636; }
+ background-color: #50485d; }
.sidebar-todo-new:active {
- background-color: #545454; }
+ background-color: #6b6278; }
.sidebar-todo-add {
border-radius: 9999px;
@@ -1709,15 +1712,15 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-width: 1.705rem;
min-height: 1.705rem;
- color: #e2e2e2;
- border: 0.068rem solid #e2e2e2; }
+ color: #eadef7;
+ border: 0.068rem solid #e7e1e6; }
.sidebar-todo-add:hover,
.sidebar-todo-add:focus {
- background-color: #363636; }
+ background-color: #50485d; }
.sidebar-todo-add:active {
- background-color: #545454; }
+ background-color: #6b6278; }
.sidebar-todo-add-available {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -1725,44 +1728,44 @@ tooltip {
-gtk-outline-radius: 9999px;
min-width: 1.705rem;
min-height: 1.705rem;
- background-color: #e2e2e2;
- color: #000000;
- border: 0.068rem solid #e2e2e2; }
+ background-color: #d6baff;
+ color: #3d1c70;
+ border: 0.068rem solid #d6baff; }
.sidebar-todo-add-available:hover,
.sidebar-todo-add-available:focus {
- background-color: #dbdbdb; }
+ background-color: #d1b5fb; }
.sidebar-todo-add-available:active {
- background-color: #b5b5b5; }
+ background-color: #b79ae2; }
.sidebar-todo-entry {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 0.818rem;
-gtk-outline-radius: 0.818rem;
- background-color: #121212;
- color: #e2e2e2;
- caret-color: #e2e2e2;
+ background-color: #28262b;
+ color: #cbc4cf;
+ caret-color: #cbc4cf;
margin: 0rem 0.341rem;
min-height: 1.773rem;
min-width: 0rem;
padding: 0.205rem 0.682rem;
- border: 0.068rem solid #7a7a7a; }
+ border: 0.068rem solid #7a757d; }
.sidebar-todo-entry:focus {
- border: 0.068rem solid #cdcdcd; }
+ border: 0.068rem solid #bbb4bf; }
.sidebar-module {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
padding: 0.341rem;
- background-color: rgba(2, 2, 2, 0.31); }
+ background-color: rgba(30, 28, 32, 0.31); }
.sidebar-module-btn-arrow {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
font-family: 'Material Symbols Rounded', 'Material Symbols Outlined', 'Material Symbols Sharp';
- background-color: rgba(18, 18, 18, 0.31);
+ background-color: rgba(40, 38, 43, 0.31);
min-width: 1.705rem;
min-height: 1.705rem; }
@@ -1774,12 +1777,12 @@ tooltip {
.sidebar-chat-textarea {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- border: 0.068rem solid #656565;
+ border: 0.068rem solid #69656d;
padding: 0.682rem; }
.sidebar-chat-entry {
- color: #e2e2e2;
- caret-color: #e2e2e2;
+ color: #cbc4cf;
+ caret-color: #cbc4cf;
min-height: 1.773rem;
min-width: 0rem; }
@@ -1788,25 +1791,25 @@ tooltip {
min-width: 1.705rem;
min-height: 1.705rem;
border-radius: 0.478rem;
- background-color: #656565; }
+ background-color: #69656d; }
.sidebar-chat-send:hover,
.sidebar-chat-send:focus {
- background-color: dimgray; }
+ background-color: #6d6971; }
.sidebar-chat-send:active {
- background-color: #7e7e7e; }
+ background-color: #837d89; }
.sidebar-chat-send-available {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #d6baff;
+ color: #3d1c70; }
.sidebar-chat-send-available:hover,
.sidebar-chat-send-available:focus {
- background-color: #dbdbdb; }
+ background-color: #d1b5fb; }
.sidebar-chat-send-available:active {
- background-color: #b5b5b5; }
+ background-color: #b79ae2; }
.sidebar-chat-message {
margin: 0.682rem; }
@@ -1817,13 +1820,13 @@ tooltip {
min-width: 0.136rem; }
.sidebar-chat-indicator-user {
- background-color: #e2e2e2; }
+ background-color: #e7e1e6; }
.sidebar-chat-indicator-bot {
- background-color: #e2e2e2; }
+ background-color: #d6baff; }
.sidebar-chat-indicator-System {
- background-color: #e2e2e2; }
+ background-color: #cec2db; }
.sidebar-chat-name {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
@@ -1843,19 +1846,19 @@ tooltip {
.sidebar-chat-codeblock {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(60, 60, 60, 0.31);
- color: #e2e2e2;
+ background-color: rgba(73, 70, 76, 0.31);
+ color: #cbc4cf;
margin: 0rem 0.682rem;
- border: 0.068rem solid rgba(226, 226, 226, 0.07); }
+ border: 0.068rem solid rgba(234, 222, 247, 0.07); }
.sidebar-chat-codeblock-topbar {
font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
margin: 0.273rem;
margin-bottom: 0rem;
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4358;
+ color: #eadef7;
border-radius: 0.886rem;
- border: 0.068rem solid #434343;
+ border: 0.068rem solid #5b5368;
border-top-left-radius: 0.886rem;
border-top-right-radius: 0.886rem;
padding: 0.341rem 0.477rem; }
@@ -1872,10 +1875,10 @@ tooltip {
.sidebar-chat-codeblock-topbar-btn:hover,
.sidebar-chat-codeblock-topbar-btn:focus {
- background-color: #545454; }
+ background-color: #6b6278; }
.sidebar-chat-codeblock-topbar-btn:active {
- background-color: #787878; }
+ background-color: #8b8198; }
.sidebar-chat-codeblock-code {
font-family: 'JetBrains Mono NF', 'JetBrains Mono Nerd Font', 'JetBrains Mono NL', 'SpaceMono NF', 'SpaceMono Nerd Font', monospace;
@@ -1883,7 +1886,7 @@ tooltip {
.sidebar-chat-divider {
min-height: 1px;
- background-color: #656565;
+ background-color: #69656d;
margin: 0rem 0.545rem; }
.sidebar-chat-welcome-txt {
@@ -1914,40 +1917,67 @@ tooltip {
padding: 0.341rem 0.477rem; }
.sidebar-chat-chip-action {
- border: 0.068rem solid #656565; }
+ border: 0.068rem solid #69656d; }
.sidebar-chat-chip-action:hover,
.sidebar-chat-chip-action:focus {
- background-color: #656565; }
+ background-color: #69656d; }
.sidebar-chat-chip-action:active {
- background-color: #8b8b8b;
- color: #4c4c4c; }
+ background-color: #86828a;
+ color: #565259; }
.sidebar-chat-chip-action-active {
- color: #656565;
- border: 0.068rem solid #656565; }
+ color: #69656d;
+ border: 0.068rem solid #69656d; }
+
+.sidebar-pin {
+ border-radius: 0.818rem;
+ -gtk-outline-radius: 0.818rem;
+ transition: 300ms cubic-bezier(0.1, 1, 0, 1);
+ min-height: 2.386rem;
+ min-width: 2.386rem;
+ color: #e7e1e6; }
+
+.sidebar-pin:hover,
+.sidebar-pin:focus {
+ background-color: rgba(101, 98, 105, 0.379); }
+
+.sidebar-pin:active {
+ background-color: #514e54; }
+
+.sidebar-pin-enabled {
+ background-color: #d6baff; }
+ .sidebar-pin-enabled label {
+ color: #3d1c70; }
+
+.sidebar-pin-enabled:hover,
+.sidebar-pin-enabled:focus {
+ background-color: #c7aaf1; }
+
+.sidebar-pin-enabled:active {
+ background-color: #b79ae2; }
.session-bg {
margin-top: -2.727rem;
- background-color: rgba(7, 7, 7, 0.64); }
+ background-color: rgba(15, 13, 16, 0.64); }
.session-button {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
min-width: 8.182rem;
min-height: 8.182rem;
- background-color: #121212;
- color: #e2e2e2;
+ background-color: #28262b;
+ color: #cbc4cf;
font-size: 3rem; }
.session-button-focused {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.session-button-desc {
- background-color: #0a0a0a;
- color: #e2e2e2;
+ background-color: #232126;
+ color: #d9d3db;
border-bottom-left-radius: 1.705rem;
border-bottom-right-radius: 1.705rem;
padding: 0.205rem 0.341rem;
@@ -1958,31 +1988,31 @@ tooltip {
-gtk-outline-radius: 1.705rem;
min-width: 8.182rem;
min-height: 5.455rem;
- background-color: #121212;
- color: #e2e2e2;
+ background-color: #28262b;
+ color: #cbc4cf;
font-size: 3rem; }
.notif-low {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(18, 18, 18, 0.45);
- color: #e2e2e2;
+ background-color: rgba(40, 38, 43, 0.45);
+ color: #cbc4cf;
padding: 0.818rem;
padding-right: 1.363rem; }
.notif-normal {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(18, 18, 18, 0.45);
- color: #e2e2e2;
+ background-color: rgba(40, 38, 43, 0.45);
+ color: #cbc4cf;
padding: 0.818rem;
padding-right: 1.363rem; }
.notif-critical {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4358;
+ color: #eadef7;
padding: 0.818rem;
padding-right: 1.363rem; }
@@ -1990,8 +2020,8 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 30.682rem;
- background-color: #070707;
- color: #e2e2e2;
+ background-color: #0f0d10;
+ color: #cbc4cf;
padding: 0.818rem;
padding-right: 1.363rem; }
@@ -1999,8 +2029,8 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 30.682rem;
- background-color: #070707;
- color: #e2e2e2;
+ background-color: #0f0d10;
+ color: #cbc4cf;
padding: 0.818rem;
padding-right: 1.363rem; }
@@ -2008,19 +2038,19 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 30.682rem;
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4358;
+ color: #eadef7;
padding: 0.818rem;
padding-right: 1.363rem; }
.notif-body-low {
- color: #9d9d9d; }
+ color: #959099; }
.notif-body-normal {
- color: #9d9d9d; }
+ color: #959099; }
.notif-body-critical {
- color: #a8a8a8; }
+ color: #b6abc3; }
.notif-icon {
border-radius: 9999px;
@@ -2029,20 +2059,20 @@ tooltip {
min-height: 3.409rem; }
.notif-icon-material {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.notif-icon-material-low {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.notif-icon-material-normal {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4358;
+ color: #eadef7; }
.notif-icon-material-critical {
- background-color: #e2e2e2;
- color: #313131; }
+ background-color: #eadef7;
+ color: #4b4358; }
.notif-close-btn {
border-radius: 1.159rem;
@@ -2071,7 +2101,7 @@ tooltip {
.osd-notif {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(7, 7, 7, 0.46);
+ background-color: rgba(15, 13, 16, 0.46);
min-width: 30.682rem; }
.notif-circprog-low {
@@ -2079,21 +2109,21 @@ tooltip {
min-width: 0.136rem;
min-height: 1.770rem;
padding: 0rem;
- color: #e2e2e2; }
+ color: #eadef7; }
.notif-circprog-normal {
transition: 0ms linear;
min-width: 0.136rem;
min-height: 1.770rem;
padding: 0rem;
- color: #e2e2e2; }
+ color: #eadef7; }
.notif-circprog-critical {
transition: 0ms linear;
min-width: 0.136rem;
min-height: 1.770rem;
padding: 0rem;
- color: #e2e2e2; }
+ color: #eadef7; }
.osd-music {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2103,9 +2133,9 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 29.659rem;
- background-color: #070707;
+ background-color: #0f0d10;
padding: 0rem 1.023rem;
- background: linear-gradient(127deg, rgba(15, 15, 15, 0.7), rgba(15, 15, 15, 0.55) 70.71%), linear-gradient(217deg, rgba(32, 32, 32, 0.7), rgba(32, 32, 32, 0.55) 70.71%), radial-gradient(circle at 0% 100%, #313131 13%, rgba(0, 0, 0, 0) 100%), linear-gradient(336deg, rgba(49, 49, 49, 0.7), rgba(49, 49, 49, 0.55) 70.71%), linear-gradient(#070707, #070707); }
+ background: linear-gradient(127deg, rgba(32, 30, 35, 0.7), rgba(32, 30, 35, 0.55) 70.71%), linear-gradient(217deg, rgba(73, 69, 78, 0.7), rgba(73, 69, 78, 0.55) 70.71%), radial-gradient(circle at 0% 100%, #4b4358 13%, rgba(0, 0, 0, 0) 100%), linear-gradient(336deg, rgba(75, 67, 88, 0.7), rgba(75, 67, 88, 0.55) 70.71%), linear-gradient(#0f0d10, #0f0d10); }
.osd-music-cover-fallback {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2113,8 +2143,8 @@ tooltip {
-gtk-outline-radius: 0.818rem;
min-width: 7.5rem;
min-height: 7.5rem;
- background-color: rgba(2, 2, 2, 0.31);
- color: #cfcfcf; }
+ background-color: rgba(30, 28, 32, 0.31);
+ color: #d7d1d7; }
.osd-music-cover {
border-radius: 0.818rem;
@@ -2140,13 +2170,13 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1.364rem;
- color: #cfcfcf; }
+ color: #d7d1d7; }
.osd-music-artists {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 0.955rem;
- color: rgba(193, 193, 193, 0.9); }
+ color: rgba(202, 196, 203, 0.9); }
.osd-music-pill {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2155,8 +2185,8 @@ tooltip {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
min-width: 1.833rem;
padding: 0.273rem 0.682rem;
- background-color: rgba(26, 26, 26, 0.5);
- color: #cfcfcf; }
+ background-color: rgba(50, 46, 55, 0.5);
+ color: #d7d1d7; }
.osd-music-controls {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2165,8 +2195,8 @@ tooltip {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
min-width: 1.833rem;
padding: 0.205rem;
- background-color: rgba(26, 26, 26, 0.5);
- color: #cfcfcf; }
+ background-color: rgba(50, 46, 55, 0.5);
+ color: #d7d1d7; }
.osd-music-controlbtn {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2177,10 +2207,10 @@ tooltip {
.osd-music-controlbtn:hover,
.osd-music-controlbtn:focus {
- background-color: rgba(71, 71, 71, 0.55); }
+ background-color: rgba(91, 87, 95, 0.55); }
.osd-music-controlbtn:active {
- background-color: rgba(89, 89, 89, 0.575); }
+ background-color: rgba(107, 102, 110, 0.575); }
.osd-music-controlbtn-txt {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2194,15 +2224,15 @@ tooltip {
min-width: 0.409rem;
min-height: 3.068rem;
padding: 0.273rem;
- color: #cfcfcf; }
+ color: #d7d1d7; }
.osd-music-playstate {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 3.068rem;
min-width: 3.068rem;
border-radius: 10rem;
- background-color: rgba(26, 26, 26, 0.5);
- color: #cfcfcf; }
+ background-color: rgba(50, 46, 55, 0.5);
+ color: #d7d1d7; }
.osd-music-playstate-btn > label {
transition: 50ms cubic-bezier(0.05, 0.7, 0.1, 1);
@@ -2215,3 +2245,8 @@ tooltip {
.fadingRadial {
transition: 50ms cubic-bezier(0.2, 0, 0, 1); }
+
+.sidebar-pinned {
+ margin: 0rem;
+ border-radius: 0rem;
+ border: 0rem solid transparent; }
diff --git a/.config/ags/widgets/dock/dock.js b/.config/ags/widgets/dock/dock.js
index ac9ccef1c..f675bd246 100644
--- a/.config/ags/widgets/dock/dock.js
+++ b/.config/ags/widgets/dock/dock.js
@@ -106,7 +106,7 @@ const Taskbar = () => Widget.Box({
box.children = Array.from(box._map.values());
}],
['add', (box, address) => {
- if (!address) { // Since the first active emit is undefined
+ if (!address) { // First active emit is undefined
box._update(box);
return;
}
@@ -174,7 +174,7 @@ const PinnedApps = () => Widget.Box({
const running = Hyprland.clients
.find(client => client.class.toLowerCase().includes(term)) || false;
- button.toggleClassName('nonrunning', !running);
+ button.toggleClassName('notrunning', !running);
button.toggleClassName('focused', Hyprland.active.client.address == running.address);
button.set_tooltip_text(running ? running.title : app.name);
}, 'notify::clients']],
diff --git a/.config/ags/widgets/overview/main.js b/.config/ags/widgets/overview/main.js
index 36e44719a..9dde483a5 100644
--- a/.config/ags/widgets/overview/main.js
+++ b/.config/ags/widgets/overview/main.js
@@ -3,7 +3,7 @@ import { SearchAndWindows } from "./overview.js";
export default () => Widget.Window({
name: 'overview',
- exclusivity: 'normal',
+ exclusivity: 'ignore',
focusable: true,
popup: true,
visible: false,
diff --git a/.config/ags/widgets/overview/overview.js b/.config/ags/widgets/overview/overview.js
index 1310bc21c..5a62f2f94 100644
--- a/.config/ags/widgets/overview/overview.js
+++ b/.config/ags/widgets/overview/overview.js
@@ -506,6 +506,7 @@ export const SearchAndWindows = () => {
return Widget.Box({
vertical: true,
+ className: 'overview-window',
children: [
clickOutsideToClose,
Widget.Box({
diff --git a/.config/ags/widgets/sideleft/main.js b/.config/ags/widgets/sideleft/main.js
index b3889727e..1e78578ad 100644
--- a/.config/ags/widgets/sideleft/main.js
+++ b/.config/ags/widgets/sideleft/main.js
@@ -5,6 +5,7 @@ export default () => PopupWindow({
focusable: true,
anchor: ['left', 'top', 'bottom'],
name: 'sideleft',
+ // exclusivity: 'exclusive',
showClassName: 'sideleft-show',
hideClassName: 'sideleft-hide',
child: SidebarLeft(),
diff --git a/.config/ags/widgets/sideleft/sideleft.js b/.config/ags/widgets/sideleft/sideleft.js
index 184e7d129..4c9a18ac4 100644
--- a/.config/ags/widgets/sideleft/sideleft.js
+++ b/.config/ags/widgets/sideleft/sideleft.js
@@ -62,6 +62,7 @@ const navIndicator = NavigationIndicator(2, false, { // The line thing
const navBar = Box({
vertical: true,
+ hexpand: true,
children: [
Box({
homogeneous: true,
@@ -74,10 +75,38 @@ const navBar = Box({
]
})
+const pinButton = Button({
+ properties: [
+ ['enabled', false],
+ ],
+ vpack: 'start',
+ className: 'sidebar-pin',
+ child: MaterialIcon('push_pin', 'larger'),
+ tooltipText: 'Pin sidebar',
+ onClicked: (self) => {
+ self._enabled = !self._enabled;
+ self.toggleClassName('sidebar-pin-enabled', self._enabled);
+
+ const sideleftWindow = App.getWindow('sideleft');
+ const sideleftContent = sideleftWindow.get_children()[0].get_children()[0].get_children()[1];
+ // console.log(sideleftWindow.exclusivity);
+ sideleftWindow.exclusivity = (self._enabled ? 'exclusive' : 'normal');
+ sideleftWindow.layer = (self._enabled ? 'bottom' : 'top');
+ sideleftContent.toggleClassName('sidebar-pinned', self._enabled);
+ },
+ // QoL: Focus Pin button on open. Hit keybind -> space/enter = toggle pin state
+ connections: [[App, (self, currentName, visible) => {
+ if (currentName === 'sideleft' && visible) {
+ self.grab_focus();
+ }
+ }]]
+})
+
export default () => Box({
// vertical: true,
vexpand: true,
hexpand: true,
+ css: 'min-width: 2px;',
children: [
EventBox({
onPrimaryClick: () => App.closeWindow('sideleft'),
@@ -89,9 +118,20 @@ export default () => Box({
vexpand: true,
className: 'sidebar-left',
children: [
- navBar,
+ Box({
+ className: 'spacing-h-10',
+ children: [
+ navBar,
+ pinButton,
+ ]
+ }),
contentStack,
- ]
+ ],
+ connections: [[App, (self, currentName, visible) => {
+ if (currentName === 'sideleft') {
+ self.toggleClassName('sidebar-pinned', pinButton._enabled && visible);
+ }
+ }]]
}),
],
connections: [
diff --git a/.config/ags/widgets/sideright/calendar.js b/.config/ags/widgets/sideright/calendar.js
index 3aa5e78cc..391d0599f 100644
--- a/.config/ags/widgets/sideright/calendar.js
+++ b/.config/ags/widgets/sideright/calendar.js
@@ -71,11 +71,8 @@ const CalendarWidget = () => {
child.destroy();
}
box.children = calendarJson.map((row, i) => Widget.Box({
- // homogeneous: true,
className: 'spacing-h-5',
- children: row.map((day, i) =>
- CalendarDay(day.day, day.today)
- )
+ children: row.map((day, i) => CalendarDay(day.day, day.today)),
}))
}
function shiftCalendarXMonths(x) {
diff --git a/.config/ags/widgets/sideright/quicktoggles.js b/.config/ags/widgets/sideright/quicktoggles.js
index 33478c25e..7fb60ffe0 100644
--- a/.config/ags/widgets/sideright/quicktoggles.js
+++ b/.config/ags/widgets/sideright/quicktoggles.js
@@ -29,14 +29,12 @@ export const ToggleIconWifi = (props = {}) => Widget.Button({
export const ToggleIconBluetooth = (props = {}) => Widget.Button({
className: 'txt-small sidebar-iconbutton',
tooltipText: 'Bluetooth | Right-click to configure',
- onClicked: () => { // Provided service doesn't work hmmm
+ onClicked: () => {
const status = Bluetooth?.enabled;
- if (status) {
+ if (status)
exec('rfkill block bluetooth');
- }
- else {
+ else
exec('rfkill unblock bluetooth');
- }
},
onSecondaryClickRelease: () => {
execAsync(['bash', '-c', 'blueberry &']);
diff --git a/.config/ags/widgets/sideright/sideright.js b/.config/ags/widgets/sideright/sideright.js
index 15457766f..3c14cd51b 100644
--- a/.config/ags/widgets/sideright/sideright.js
+++ b/.config/ags/widgets/sideright/sideright.js
@@ -81,6 +81,7 @@ const togglesBox = Widget.Box({
export default () => Box({
vexpand: true,
hexpand: true,
+ css: 'min-width: 2px;',
children: [
EventBox({
onPrimaryClick: () => App.closeWindow('sideright'),
From 21c4c937e41db2b7b4b40c504239b062ddefe84b Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Wed, 27 Dec 2023 00:29:05 +0700
Subject: [PATCH 006/265] make cheatsheet ignore pinned sidebar
---
.config/ags/widgets/cheatsheet/main.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.config/ags/widgets/cheatsheet/main.js b/.config/ags/widgets/cheatsheet/main.js
index a6c25b8ec..21887de7d 100644
--- a/.config/ags/widgets/cheatsheet/main.js
+++ b/.config/ags/widgets/cheatsheet/main.js
@@ -69,7 +69,7 @@ const clickOutsideToClose = Widget.EventBox({
export default () => Widget.Window({
name: 'cheatsheet',
- exclusivity: 'normal',
+ exclusivity: 'ignore',
focusable: true,
popup: true,
visible: false,
From 3ce88a4baf62d0819b4fb9993fb00fbf18aebe86 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Wed, 27 Dec 2023 11:34:48 +0700
Subject: [PATCH 007/265] omg i found a new cool font (rubik)
---
.config/ags/scss/_lib_mixins.scss | 1 +
1 file changed, 1 insertion(+)
diff --git a/.config/ags/scss/_lib_mixins.scss b/.config/ags/scss/_lib_mixins.scss
index 67406eb65..3beb1718e 100644
--- a/.config/ags/scss/_lib_mixins.scss
+++ b/.config/ags/scss/_lib_mixins.scss
@@ -40,6 +40,7 @@ $rounding_large: 1.705rem;
@mixin mainfont {
// Other clean sans-serif
font-family:
+ 'Rubik',
'Geist',
'AR One Sans',
'Reddit Sans',
From 717506b1f85f09f3b6b1cfdd51010c5153a7f960 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Wed, 27 Dec 2023 17:42:48 +0700
Subject: [PATCH 008/265] Update install.sh
---
install.sh | 2 ++
1 file changed, 2 insertions(+)
diff --git a/install.sh b/install.sh
index a71f9b964..39294f2a7 100755
--- a/install.sh
+++ b/install.sh
@@ -41,6 +41,8 @@ echo 'cp -r "./.local" "$HOME"'
cp -r "./.local" "$HOME" || echo "cp threw error. You could cp this yourself."
#####################################################################################
echo 'Finished. See the "Import manually" folder and grab anything you need.'
+echo 'Press Ctrl+Super+T to select a wallpaper'
+echo 'Press Super+/ for a list of keybinds'
From 5454b3cad3aa1044bac83001f4d4302002290fe6 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Wed, 27 Dec 2023 19:37:23 +0700
Subject: [PATCH 009/265] sidebar pin fixes
---
.config/ags/config.js | 9 +----
.config/ags/data/keyboardlayouts.js | 2 +-
.config/ags/scss/main.scss | 3 +-
.config/ags/style.css | 41 ++++++++++++-----------
.config/ags/widgets/screencorners/main.js | 4 +--
.config/ags/widgets/sideleft/sideleft.js | 18 ++++++++--
6 files changed, 42 insertions(+), 35 deletions(-)
diff --git a/.config/ags/config.js b/.config/ags/config.js
index c738a39f9..3c6f9c185 100644
--- a/.config/ags/config.js
+++ b/.config/ags/config.js
@@ -52,13 +52,6 @@ export default {
SideRight(),
Osk(), // On-screen keyboard
Session(), // Power menu, if that's what you like to call it
+ Bar()
],
};
-
-// We don't want context menus of the bar's tray go under the rounded corner below,
-// so bar is returned after default export, making it get spawned after the corner
-// (having an Utils.timeout in that window array just gives an error)
-// Not having it in default export is fine since we don't need to toggle it
-Bar();
-
-// uwu
\ No newline at end of file
diff --git a/.config/ags/data/keyboardlayouts.js b/.config/ags/data/keyboardlayouts.js
index f58e378a4..26cb23d63 100644
--- a/.config/ags/data/keyboardlayouts.js
+++ b/.config/ags/data/keyboardlayouts.js
@@ -111,4 +111,4 @@ export const oskLayouts = {
]
]
}
-}
\ No newline at end of file
+}
diff --git a/.config/ags/scss/main.scss b/.config/ags/scss/main.scss
index 45b200385..034f91bff 100644
--- a/.config/ags/scss/main.scss
+++ b/.config/ags/scss/main.scss
@@ -35,5 +35,6 @@
.sidebar-pinned {
margin: 0rem;
border-radius: 0rem;
- border: 0rem solid transparent;
+ border-bottom-right-radius: $rounding_large;
+ border: 0rem solid;
}
\ No newline at end of file
diff --git a/.config/ags/style.css b/.config/ags/style.css
index cbded551c..3e3588415 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -54,47 +54,47 @@
margin: 10px; }
.txt-badonkers {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 3rem; }
.txt-tiddies {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 2.7273rem; }
.txt-hugerass {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 2.045rem; }
.txt-hugeass {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 1.8182rem; }
.txt-larger {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 1.6363rem; }
.txt-large {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 1.4545rem; }
.txt-norm {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 1.2727rem; }
.txt-small {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 1.0909rem; }
.txt-smallie {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 1rem; }
.txt-smaller {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 0.9091rem; }
.txt-tiny {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 0.7273rem; }
.txt-poof {
@@ -119,7 +119,7 @@
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif; }
.mainfont {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif; }
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif; }
.icon-material {
font-family: 'Material Symbols Rounded', 'Material Symbols Outlined', 'Material Symbols Sharp'; }
@@ -587,7 +587,7 @@ tooltip {
min-height: 1.636rem;
min-width: 1.772rem;
font-size: 1.091rem;
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
border-top: 0.068rem solid;
border-bottom: 0.068rem solid;
border-color: transparent;
@@ -600,7 +600,7 @@ tooltip {
min-height: 1.5rem;
min-width: 1.5rem;
font-size: 1.091rem;
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
background-color: #d6baff;
color: #3d1c70;
border-radius: 999px;
@@ -953,11 +953,11 @@ tooltip {
border: 0.682rem solid; }
.bg-quicklaunch-title {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
color: #cbc4cf; }
.bg-quicklaunch-btn {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
border-radius: 9999px;
-gtk-outline-radius: 9999px;
background-color: #28262b;
@@ -1230,7 +1230,7 @@ tooltip {
background-color: rgba(51, 48, 52, 0.1147); }
.overview-tasks-workspace-number {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
color: rgba(217, 211, 216, 0.31); }
.overview-tasks-window {
@@ -1852,7 +1852,7 @@ tooltip {
border: 0.068rem solid rgba(234, 222, 247, 0.07); }
.sidebar-chat-codeblock-topbar {
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
margin: 0.273rem;
margin-bottom: 0rem;
background-color: #4b4358;
@@ -2174,7 +2174,7 @@ tooltip {
.osd-music-artists {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- font-family: 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 0.955rem;
color: rgba(202, 196, 203, 0.9); }
@@ -2249,4 +2249,5 @@ tooltip {
.sidebar-pinned {
margin: 0rem;
border-radius: 0rem;
- border: 0rem solid transparent; }
+ border-bottom-right-radius: 1.705rem;
+ border: 0rem solid; }
diff --git a/.config/ags/widgets/screencorners/main.js b/.config/ags/widgets/screencorners/main.js
index f2f412d6f..1c6c61b38 100644
--- a/.config/ags/widgets/screencorners/main.js
+++ b/.config/ags/widgets/screencorners/main.js
@@ -21,7 +21,7 @@ export const CornerBottomleft = () => Widget.Window({
name: 'cornerbl',
layer: 'top',
anchor: ['bottom', 'left'],
- exclusivity: 'normal',
+ exclusivity: 'ignore',
visible: true,
child: RoundedCorner('bottomleft', { className: 'corner-black', }),
});
@@ -29,7 +29,7 @@ export const CornerBottomright = () => Widget.Window({
name: 'cornerbr',
layer: 'top',
anchor: ['bottom', 'right'],
- exclusivity: 'normal',
+ exclusivity: 'ignore',
visible: true,
child: RoundedCorner('bottomright', { className: 'corner-black', }),
});
diff --git a/.config/ags/widgets/sideleft/sideleft.js b/.config/ags/widgets/sideleft/sideleft.js
index 4c9a18ac4..9d9954511 100644
--- a/.config/ags/widgets/sideleft/sideleft.js
+++ b/.config/ags/widgets/sideleft/sideleft.js
@@ -57,7 +57,7 @@ const contentStack = Stack({
const navIndicator = NavigationIndicator(2, false, { // The line thing
className: 'sidebar-selector-highlight',
- css: 'font-size: 0px; padding: 0rem 4.773rem;', // Shushhhh
+ css: 'font-size: 0px; padding: 0rem 4.160rem;', // Shushhhh
})
const navBar = Box({
@@ -88,11 +88,23 @@ const pinButton = Button({
self.toggleClassName('sidebar-pin-enabled', self._enabled);
const sideleftWindow = App.getWindow('sideleft');
+ const barWindow = App.getWindow('bar');
+ const cornerTopLeftWindow = App.getWindow('cornertl');
const sideleftContent = sideleftWindow.get_children()[0].get_children()[0].get_children()[1];
- // console.log(sideleftWindow.exclusivity);
+
sideleftWindow.exclusivity = (self._enabled ? 'exclusive' : 'normal');
- sideleftWindow.layer = (self._enabled ? 'bottom' : 'top');
sideleftContent.toggleClassName('sidebar-pinned', self._enabled);
+
+ if(self._enabled) {
+ sideleftWindow.layer = 'bottom';
+ barWindow.layer = 'bottom';
+ cornerTopLeftWindow.layer = 'bottom';
+ }
+ else {
+ sideleftWindow.layer = 'top';
+ barWindow.layer = 'top';
+ cornerTopLeftWindow.layer = 'top';
+ }
},
// QoL: Focus Pin button on open. Hit keybind -> space/enter = toggle pin state
connections: [[App, (self, currentName, visible) => {
From b0eb943ebc86349970229fc9c5c96cb0f9caec3a Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Thu, 28 Dec 2023 01:31:09 +0700
Subject: [PATCH 010/265] getting ready for more apis...
---
.config/ags/config.js | 15 +-
.config/ags/lib/md2pango.js | 2 +-
.config/ags/scss/_sidebars.scss | 22 ++-
.config/ags/style.css | 17 +-
.config/ags/widgets/sideleft/apis/chatgpt.js | 22 ++-
.config/ags/widgets/sideleft/apis/waifu.js | 55 ++++++
.config/ags/widgets/sideleft/apiwidgets.js | 57 ++++--
.config/ags/widgets/sideleft/sideleft.js | 172 ++++++++++++-------
8 files changed, 260 insertions(+), 102 deletions(-)
create mode 100644 .config/ags/widgets/sideleft/apis/waifu.js
diff --git a/.config/ags/config.js b/.config/ags/config.js
index 3c6f9c185..4e09423df 100644
--- a/.config/ags/config.js
+++ b/.config/ags/config.js
@@ -1,7 +1,6 @@
"strict mode";
// Import
import { App, Utils } from './imports.js';
-import { firstRunWelcome } from './services/messages.js';
// Widgets
import Bar from './widgets/bar/main.js';
import Cheatsheet from './widgets/cheatsheet/main.js';
@@ -15,18 +14,20 @@ import Session from './widgets/session/main.js';
import SideLeft from './widgets/sideleft/main.js';
import SideRight from './widgets/sideright/main.js';
-// Longer than actual anim time (see styles) to make sure widgets animate fully
-const CLOSE_ANIM_TIME = 210;
+const CLOSE_ANIM_TIME = 210; // Longer than actual anim time (see styles) to make sure widgets animate fully
// Init cache and check first run
Utils.exec(`bash -c 'mkdir -p ~/.cache/ags/user/colorschemes'`);
-
// SCSS compilation
Utils.exec(`bash -c 'echo "" > ${App.configDir}/scss/_musicwal.scss'`); // reset music styles
Utils.exec(`bash -c 'echo "" > ${App.configDir}/scss/_musicmaterial.scss'`); // reset music styles
-Utils.exec(`sassc ${App.configDir}/scss/main.scss ${App.configDir}/style.css`);
-App.resetCss();
-App.applyCss(`${App.configDir}/style.css`);
+function applyStyle() {
+ Utils.exec(`sassc ${App.configDir}/scss/main.scss ${App.configDir}/style.css`);
+ App.resetCss();
+ App.applyCss(`${App.configDir}/style.css`);
+ console.log('[LOG] Styles loaded')
+}
+applyStyle();
// Config object
export default {
diff --git a/.config/ags/lib/md2pango.js b/.config/ags/lib/md2pango.js
index b59cd566a..e14a5cb60 100644
--- a/.config/ags/lib/md2pango.js
+++ b/.config/ags/lib/md2pango.js
@@ -28,7 +28,7 @@ const m2p_styles = [
{ name: EMPH, re: /\*(\S.*?\S)\*/g, sub: "$1" },
// { name: EMPH, re: /_(\S.*?\S)_/g, sub: "$1" },
{ name: HEXCOLOR, re: /#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/g, sub: ` #$1 ` },
- { name: INLCODE, re: /(`)([^`]*)(`)/g, sub: ` $2 ` },
+ { name: INLCODE, re: /(`)([^`]*)(`)/g, sub: ` $2 ` },
// { name: UND, re: /(__|\*\*)(\S[\s\S]*?\S)(__|\*\*)/g, sub: "$2" },
]
diff --git a/.config/ags/scss/_sidebars.scss b/.config/ags/scss/_sidebars.scss
index 61618d2f8..f2341a8ae 100644
--- a/.config/ags/scss/_sidebars.scss
+++ b/.config/ags/scss/_sidebars.scss
@@ -500,9 +500,26 @@ $onChatgpt: $onPrimary;
min-height: 1.705rem;
}
+.sidebar-chat-apiswitcher {
+ @include full-rounding;
+ @include group-padding;
+ background-color: $surface;
+}
+
+.sidebar-chat-apiswitcher-icon {
+ @include full-rounding;
+ min-width: 2.182rem;
+ min-height: 2.182rem;
+ color: $onSurface;
+}
+
+.sidebar-chat-apiswitcher-icon-enabled {
+ color: $primary;
+}
+
.sidebar-chat-viewport {
@include menu_decel;
- margin: 0.682rem 0rem;
+ // margin: 0.682rem 0rem;
padding: 0.682rem 0rem;
}
@@ -720,4 +737,5 @@ $onChatgpt: $onPrimary;
.sidebar-pin-enabled:active {
background-color: mix($primary, $onPrimary, 80%);
-}
\ No newline at end of file
+}
+
diff --git a/.config/ags/style.css b/.config/ags/style.css
index 3e3588415..53f3aec50 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -1769,9 +1769,24 @@ tooltip {
min-width: 1.705rem;
min-height: 1.705rem; }
+.sidebar-chat-apiswitcher {
+ border-radius: 9999px;
+ -gtk-outline-radius: 9999px;
+ padding: 0.341rem;
+ background-color: #1e1c20; }
+
+.sidebar-chat-apiswitcher-icon {
+ border-radius: 9999px;
+ -gtk-outline-radius: 9999px;
+ min-width: 2.182rem;
+ min-height: 2.182rem;
+ color: #e7e1e6; }
+
+.sidebar-chat-apiswitcher-icon-enabled {
+ color: #d6baff; }
+
.sidebar-chat-viewport {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- margin: 0.682rem 0rem;
padding: 0.682rem 0rem; }
.sidebar-chat-textarea {
diff --git a/.config/ags/widgets/sideleft/apis/chatgpt.js b/.config/ags/widgets/sideleft/apis/chatgpt.js
index 268322c99..314877326 100644
--- a/.config/ags/widgets/sideleft/apis/chatgpt.js
+++ b/.config/ags/widgets/sideleft/apis/chatgpt.js
@@ -9,19 +9,16 @@ import { SystemMessage, ChatMessage } from "./chatgpt_chatmessage.js";
import { ConfigToggle, ConfigSegmentedSelection, ConfigGap } from '../../../lib/configwidgets.js';
import { markdownTest } from '../../../lib/md2pango.js';
-const chatGPTTabIcon = Icon({
+export const chatGPTTabIcon = Box({
hpack: 'center',
- className: 'sidebar-chat-welcome-logo',
- icon: `${App.configDir}/assets/openai-logomark.svg`,
- setup: (self) => Utils.timeout(1, () => {
- const styleContext = self.get_style_context();
- const width = styleContext.get_property('min-width', Gtk.StateFlags.NORMAL);
- const height = styleContext.get_property('min-height', Gtk.StateFlags.NORMAL);
- self.size = Math.max(width, height, 1) * 116 / 180; // Why such a specific proportion? See https://openai.com/brand#logos
- })
+ className: 'sidebar-chat-apiswitcher-icon',
+ homogeneous: true,
+ children: [
+ MaterialIcon('forum', 'norm'),
+ ],
});
-export const chatGPTInfo = Box({
+const chatGPTInfo = Box({
vertical: true,
className: 'spacing-v-15',
children: [
@@ -195,11 +192,12 @@ export const chatGPTView = Scrollable({
]
}),
setup: (scrolledWindow) => {
+ // Show scrollbar
scrolledWindow.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
const vScrollbar = scrolledWindow.get_vscrollbar();
vScrollbar.get_style_context().add_class('sidebar-scrollbar');
-
- Utils.timeout(1, () => { // Fix click-to-scroll-widget-to-view behavior
+ // Avoid click-to-scroll-widget-to-view behavior
+ Utils.timeout(1, () => {
const viewport = scrolledWindow.child;
viewport.set_focus_vadjustment(new Gtk.Adjustment(undefined));
})
diff --git a/.config/ags/widgets/sideleft/apis/waifu.js b/.config/ags/widgets/sideleft/apis/waifu.js
new file mode 100644
index 000000000..34cfb0214
--- /dev/null
+++ b/.config/ags/widgets/sideleft/apis/waifu.js
@@ -0,0 +1,55 @@
+const { Gdk, GLib, Gtk, Pango } = imports.gi;
+import { App, Utils, Widget } from '../../../imports.js';
+const { Box, Button, Entry, EventBox, Icon, Label, Revealer, Scrollable, Stack } = Widget;
+const { execAsync, exec } = Utils;
+import { MaterialIcon } from "../../../lib/materialicon.js";
+import { setupCursorHover, setupCursorHoverInfo } from "../../../lib/cursorhover.js";
+
+export const waifuTabIcon = Box({
+ hpack: 'center',
+ className: 'sidebar-chat-apiswitcher-icon',
+ homogeneous: true,
+ children: [
+ MaterialIcon('photo_library', 'norm'),
+ ]
+});
+
+export const waifuView = Scrollable({
+ className: 'sidebar-chat-viewport',
+ vexpand: true,
+ child: Box({
+ vertical: true,
+ children: [
+ ]
+ }),
+ setup: (scrolledWindow) => {
+ // Show scrollbar
+ scrolledWindow.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
+ const vScrollbar = scrolledWindow.get_vscrollbar();
+ vScrollbar.get_style_context().add_class('sidebar-scrollbar');
+ // Avoid click-to-scroll-widget-to-view behavior
+ Utils.timeout(1, () => {
+ const viewport = scrolledWindow.child;
+ viewport.set_focus_vadjustment(new Gtk.Adjustment(undefined));
+ })
+ }
+});
+
+export const waifuCommands = Box({
+ className: 'spacing-h-5',
+ children: [
+ Box({ hexpand: true }),
+ Button({
+ className: 'sidebar-chat-chip sidebar-chat-chip-action txt txt-small',
+ onClicked: () => {
+ // command do something
+ },
+ setup: setupCursorHover,
+ label: '/A command button',
+ }),
+ ]
+});
+
+export const waifuCallAPI = (text) => {
+ // Do something on send
+}
\ No newline at end of file
diff --git a/.config/ags/widgets/sideleft/apiwidgets.js b/.config/ags/widgets/sideleft/apiwidgets.js
index c44ef2b39..88d1539d5 100644
--- a/.config/ags/widgets/sideleft/apiwidgets.js
+++ b/.config/ags/widgets/sideleft/apiwidgets.js
@@ -1,10 +1,12 @@
+const { Gtk, Gdk } = imports.gi;
import { App, Utils, Widget } from '../../imports.js';
const { Box, Button, Entry, EventBox, Icon, Label, Revealer, Scrollable, Stack } = Widget;
const { execAsync, exec } = Utils;
import { setupCursorHover, setupCursorHoverInfo } from "../../lib/cursorhover.js";
// APIs
import ChatGPT from '../../services/chatgpt.js';
-import { chatGPTView, chatGPTCommands, chatGPTSendMessage } from './apis/chatgpt.js';
+import { chatGPTView, chatGPTCommands, chatGPTSendMessage, chatGPTTabIcon } from './apis/chatgpt.js';
+import { waifuView, waifuCommands, waifuCallAPI, waifuTabIcon } from './apis/waifu.js';
const APIS = [
{
@@ -12,20 +14,18 @@ const APIS = [
sendCommand: chatGPTSendMessage,
contentWidget: chatGPTView,
commandBar: chatGPTCommands,
- tabIcon: Box({}),
- }
+ tabIcon: chatGPTTabIcon,
+ },
+ {
+ name: 'Waifus',
+ sendCommand: waifuCallAPI,
+ contentWidget: waifuView,
+ commandBar: waifuCommands,
+ tabIcon: waifuTabIcon,
+ },
];
let currentApiId = 0;
-
-const apiSwitcher = Box({
- vertical: true,
- children: [
- Box({
- homogeneous: true,
- children: APIS.map(api => api.tabIcon),
- }),
- ]
-})
+APIS[currentApiId].tabIcon.toggleClassName('sidebar-chat-apiswitcher-icon-enabled', true);
export const chatEntry = Entry({
className: 'sidebar-chat-entry',
@@ -75,7 +75,36 @@ const apiCommandStack = Stack({
items: APIS.map(api => [api.name, api.commandBar]),
})
+function switchToTab(id) {
+ APIS[currentApiId].tabIcon.toggleClassName('sidebar-chat-apiswitcher-icon-enabled', false);
+ APIS[id].tabIcon.toggleClassName('sidebar-chat-apiswitcher-icon-enabled', true);
+ apiContentStack.shown = APIS[id].name;
+ apiCommandStack.shown = APIS[id].name;
+ currentApiId = id;
+}
+const apiSwitcher = Box({
+ homogeneous: true,
+ children: [
+ Box({
+ className: 'sidebar-chat-apiswitcher spacing-h-5',
+ hpack: 'center',
+ children: APIS.map((api, id) => Button({
+ child: api.tabIcon,
+ tooltipText: api.name,
+ setup: setupCursorHover,
+ onClicked: () => {
+ switchToTab(id);
+ }
+ })),
+ }),
+ ]
+})
+
export default Widget.Box({
+ properties: [
+ ['nextTab', () => switchToTab(Math.min(currentApiId + 1, APIS.length - 1))],
+ ['prevTab', () => switchToTab(Math.max(0, currentApiId-1))],
+ ],
vertical: true,
className: 'spacing-v-10',
homogeneous: false,
@@ -84,5 +113,5 @@ export default Widget.Box({
apiContentStack,
apiCommandStack,
textboxArea,
- ]
+ ],
});
diff --git a/.config/ags/widgets/sideleft/sideleft.js b/.config/ags/widgets/sideleft/sideleft.js
index 9d9954511..32150a8e3 100644
--- a/.config/ags/widgets/sideleft/sideleft.js
+++ b/.config/ags/widgets/sideleft/sideleft.js
@@ -7,105 +7,124 @@ import { setupCursorHover } from "../../lib/cursorhover.js";
import { NavigationIndicator } from "../../lib/navigationindicator.js";
import toolBox from './toolbox.js';
import apiWidgets from './apiwidgets.js';
-import { chatEntry } from './apiwidgets.js';
+import apiwidgets, { chatEntry } from './apiwidgets.js';
-const SidebarTabButton = (stack, stackItem, navIndicator, navIndex, icon, label) => Widget.Button({
+const contents = [
+ {
+ name: 'apis',
+ content: apiWidgets,
+ materialIcon: 'api',
+ friendlyName: 'APIs',
+ },
+ {
+ name: 'tools',
+ content: toolBox,
+ materialIcon: 'home_repair_service',
+ friendlyName: 'Tools',
+ },
+]
+let currentTabId = 0;
+
+const contentStack = Stack({
+ vexpand: true,
+ transition: 'slide_left_right',
+ items: contents.map(item => [item.name, item.content]),
+})
+
+function switchToTab(id) {
+ const allTabs = navTabs.get_children();
+ const tabButton = allTabs[id];
+ allTabs[currentTabId].toggleClassName('sidebar-selector-tab-active', false);
+ allTabs[id].toggleClassName('sidebar-selector-tab-active', true);
+ contentStack.shown = contents[id].name;
+ if (tabButton) {
+ // Fancy highlighter line width
+ const buttonWidth = tabButton.get_allocated_width();
+ const highlightWidth = tabButton.get_children()[0].get_allocated_width();
+ navIndicator.css = `
+ font-size: ${id}px;
+ padding: 0px ${(buttonWidth - highlightWidth) / 2}px;
+ `;
+ }
+ currentTabId = id;
+}
+const SidebarTabButton = (navIndex) => Widget.Button({
// hexpand: true,
className: 'sidebar-selector-tab',
onClicked: (self) => {
- stack.shown = stackItem;
- // Add active class to self and remove for others
- const allTabs = self.get_parent().get_children();
- for (let i = 0; i < allTabs.length; i++) {
- if (allTabs[i] != self) allTabs[i].toggleClassName('sidebar-selector-tab-active', false);
- else self.toggleClassName('sidebar-selector-tab-active', true);
- }
- // Fancy highlighter line width
- const buttonWidth = self.get_allocated_width();
- const highlightWidth = self.get_children()[0].get_allocated_width();
- navIndicator.css = `
- font-size: ${navIndex}px;
- padding: 0px ${(buttonWidth - highlightWidth) / 2}px;
- `;
+ switchToTab(navIndex);
},
child: Box({
hpack: 'center',
className: 'spacing-h-5',
children: [
- MaterialIcon(icon, 'larger'),
+ MaterialIcon(contents[navIndex].materialIcon, 'larger'),
Label({
className: 'txt txt-smallie',
- label: label,
+ label: `${contents[navIndex].friendlyName}`,
})
]
}),
setup: (button) => Utils.timeout(1, () => {
setupCursorHover(button);
- button.toggleClassName('sidebar-selector-tab-active', defaultTab === stackItem);
+ button.toggleClassName('sidebar-selector-tab-active', currentTabId == navIndex);
}),
});
-const defaultTab = 'apis';
-const contentStack = Stack({
- vexpand: true,
- transition: 'slide_left_right',
- items: [
- ['apis', apiWidgets],
- ['tools', toolBox],
- ],
-})
+const navTabs = Box({
+ homogeneous: true,
+ children: contents.map((item, id) =>
+ SidebarTabButton(id, item.materialIcon, item.friendlyName)
+ ),
+});
const navIndicator = NavigationIndicator(2, false, { // The line thing
className: 'sidebar-selector-highlight',
css: 'font-size: 0px; padding: 0rem 4.160rem;', // Shushhhh
-})
+});
const navBar = Box({
vertical: true,
hexpand: true,
children: [
- Box({
- homogeneous: true,
- children: [
- SidebarTabButton(contentStack, 'apis', navIndicator, 0, 'api', 'APIs'),
- SidebarTabButton(contentStack, 'tools', navIndicator, 1, 'home_repair_service', 'Tools'),
- ]
- }),
+ navTabs,
navIndicator,
]
-})
+});
const pinButton = Button({
properties: [
['enabled', false],
+ ['toggle', (self) => {
+ self._enabled = !self._enabled;
+ self.toggleClassName('sidebar-pin-enabled', self._enabled);
+
+ const sideleftWindow = App.getWindow('sideleft');
+ const barWindow = App.getWindow('bar');
+ const cornerTopLeftWindow = App.getWindow('cornertl');
+ const sideleftContent = sideleftWindow.get_children()[0].get_children()[0].get_children()[1];
+
+ sideleftContent.toggleClassName('sidebar-pinned', self._enabled);
+
+ if (self._enabled) {
+ sideleftWindow.layer = 'bottom';
+ barWindow.layer = 'bottom';
+ cornerTopLeftWindow.layer = 'bottom';
+ sideleftWindow.exclusivity = 'exclusive';
+ }
+ else {
+ sideleftWindow.layer = 'top';
+ barWindow.layer = 'top';
+ cornerTopLeftWindow.layer = 'top';
+ sideleftWindow.exclusivity = 'normal';
+ }
+ }],
],
vpack: 'start',
className: 'sidebar-pin',
child: MaterialIcon('push_pin', 'larger'),
tooltipText: 'Pin sidebar',
- onClicked: (self) => {
- self._enabled = !self._enabled;
- self.toggleClassName('sidebar-pin-enabled', self._enabled);
-
- const sideleftWindow = App.getWindow('sideleft');
- const barWindow = App.getWindow('bar');
- const cornerTopLeftWindow = App.getWindow('cornertl');
- const sideleftContent = sideleftWindow.get_children()[0].get_children()[0].get_children()[1];
-
- sideleftWindow.exclusivity = (self._enabled ? 'exclusive' : 'normal');
- sideleftContent.toggleClassName('sidebar-pinned', self._enabled);
-
- if(self._enabled) {
- sideleftWindow.layer = 'bottom';
- barWindow.layer = 'bottom';
- cornerTopLeftWindow.layer = 'bottom';
- }
- else {
- sideleftWindow.layer = 'top';
- barWindow.layer = 'top';
- cornerTopLeftWindow.layer = 'top';
- }
- },
+ onClicked: (self) => self._toggle(self),
// QoL: Focus Pin button on open. Hit keybind -> space/enter = toggle pin state
connections: [[App, (self, currentName, visible) => {
if (currentName === 'sideleft' && visible) {
@@ -128,7 +147,7 @@ export default () => Box({
Box({
vertical: true,
vexpand: true,
- className: 'sidebar-left',
+ className: 'sidebar-left spacing-v-10',
children: [
Box({
className: 'spacing-h-10',
@@ -147,15 +166,38 @@ export default () => Box({
}),
],
connections: [
- ['key-press-event', (widget, event) => { // Typing
- if (event.get_keyval()[1] >= 32 && event.get_keyval()[1] <= 126 &&
- widget != chatEntry && event.get_keyval()[1] != Gdk.KEY_space) {
- if (contentStack.shown == 'apis') {
+ ['key-press-event', (widget, event) => { // Handle keybinds
+ if (event.get_state()[1] & Gdk.ModifierType.CONTROL_MASK) {
+ // Pin sidebar
+ if (event.get_keyval()[1] == Gdk.KEY_p)
+ pinButton._toggle(pinButton);
+ // Switch sidebar tab
+ else if (event.get_keyval()[1] === Gdk.KEY_Page_Up)
+ switchToTab(Math.max(currentTabId - 1), 0);
+ else if (event.get_keyval()[1] === Gdk.KEY_Page_Down)
+ switchToTab(Math.min(currentTabId + 1), contents.length);
+ }
+ if (contentStack.shown == 'apis') { // If api tab is focused
+ // Automatically focus entry when typing
+ if (event.get_keyval()[1] >= 32 && event.get_keyval()[1] <= 126 &&
+ widget != chatEntry && event.get_keyval()[1] != Gdk.KEY_space) {
chatEntry.grab_focus();
chatEntry.set_text(chatEntry.text + String.fromCharCode(event.get_keyval()[1]));
chatEntry.set_position(-1);
}
+ // Switch API type
+ else if (!(event.get_state()[1] & Gdk.ModifierType.CONTROL_MASK) &&
+ event.get_keyval()[1] === Gdk.KEY_Page_Down) {
+ const toSwitchTab = contentStack.get_visible_child();
+ toSwitchTab._nextTab();
+ }
+ else if (!(event.get_state()[1] & Gdk.ModifierType.CONTROL_MASK) &&
+ event.get_keyval()[1] === Gdk.KEY_Page_Up) {
+ const toSwitchTab = contentStack.get_visible_child();
+ toSwitchTab._prevTab();
+ }
}
+
}],
],
});
From 5efc09ed4a2604110990c27112d2d9be5ff989ef Mon Sep 17 00:00:00 2001
From: Navid
Date: Thu, 28 Dec 2023 11:32:29 +0330
Subject: [PATCH 011/265] Add config for swaylock
---
.config/swaylock/config | 56 ++++++++++++++++++++++++++++++++++++++++-
1 file changed, 55 insertions(+), 1 deletion(-)
diff --git a/.config/swaylock/config b/.config/swaylock/config
index 450e7f0b0..2177ebe37 100644
--- a/.config/swaylock/config
+++ b/.config/swaylock/config
@@ -1 +1,55 @@
-color=090B10AA
\ No newline at end of file
+ignore-empty-password
+font=monospace
+font-size=80
+
+clock
+timestr=%R
+#datestr=%a, %e of %B
+
+screenshots
+
+fade-in=0.1
+
+effect-blur=20x2
+# effect-greyscale
+effect-scale=0.3
+
+indicator
+indicator-radius=250
+indicator-thickness=20
+indicator-caps-lock
+
+key-hl-color=d4d4d4
+caps-lock-key-hl-color=d4d4d4
+
+separator-color=00000000
+
+inside-color=00000099
+inside-clear-color=00000099
+inside-caps-lock-color=00000099
+inside-ver-color=00000099
+inside-wrong-color=00000099
+
+ring-color=1c1c1c
+ring-clear-color=1c1c1c
+ring-caps-lock-color=1c1c1c
+ring-ver-color=1c1c1c
+ring-wrong-color=400000
+
+line-color=00000000
+line-clear-color=d4d4d4
+line-caps-lock-color=d4d4d4
+line-ver-color=d9d8d8FF
+line-wrong-color=ee2e24FF
+
+text-color=c9c9c9
+text-clear-color=c9c9c9
+text-ver-color=c9c9c9
+text-wrong-color=c9c9c9
+
+bs-hl-color=470400
+caps-lock-bs-hl-color=470400
+# caps-lock-key-hl-color=ffd204FF
+# caps-lock-bs-hl-color=ee2e24FF
+# disable-caps-lock-text
+text-caps-lock-color=d4d4d4
From 8ea306954a6d4e47676f2510904a413fb7bb01d3 Mon Sep 17 00:00:00 2001
From: Navid
Date: Thu, 28 Dec 2023 13:06:23 +0330
Subject: [PATCH 012/265] reactor: extract window and layer rules to seperate
file
---
.config/hypr/hyprland.conf | 72 ++++----------------------------------
.config/hypr/rules.conf | 63 +++++++++++++++++++++++++++++++++
2 files changed, 70 insertions(+), 65 deletions(-)
create mode 100644 .config/hypr/rules.conf
diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
index f72133125..067ac3aa7 100755
--- a/.config/hypr/hyprland.conf
+++ b/.config/hypr/hyprland.conf
@@ -5,6 +5,13 @@
source=~/.config/hypr/env.conf
+# Window and layer rules
+source=~/.config/hypr/rules.conf
+
+
+# Dynamic colors
+source=~/.config/hypr/colors.conf
+
$mainMod = SUPER
# MONITOR CONFIG
@@ -188,68 +195,3 @@ decoration {
#screen_shader = ~/.config/hypr/shaders/crt.frag
}
-######## Window rules ########
-windowrule = noblur,.*
-
-#windowrule = opacity 0.94 override 0.94 override, .*
-windowrule = float, ^(steam)$
-windowrule = float, ^(guifetch)$ # FlafyDev/guifetch
-windowrule = pin, ^(showmethekey-gtk)$
-windowrulev2 = tile,class:(wpsoffice)
-
-
-# Dialogs
-windowrule=float,title:^(Open File)(.*)$
-windowrule=float,title:^(Select a File)(.*)$
-windowrule=float,title:^(Choose wallpaper)(.*)$
-windowrule=float,title:^(Open Folder)(.*)$
-windowrule=float,title:^(Save As)(.*)$
-windowrule=float,title:^(Library)(.*)$
-
-######## Layer rules ########
-layerrule = xray 1, .*
-#layerrule = noanim, .*
-layerrule = noanim, selection
-layerrule = noanim, overview
-layerrule = blur, swaylock
-
-layerrule = blur, eww
-layerrule = ignorealpha 0.8, eww
-layerrule = noanim, noanim
-layerrule = blur, noanim
-layerrule = blur, gtk-layer-shell
-layerrule = ignorezero, gtk-layer-shell
-layerrule = blur, launcher
-layerrule = ignorealpha 0.5, launcher
-layerrule = blur, notifications
-layerrule = ignorealpha 0.69, notifications
-
-# ags
-layerrule = blur, session
-layerrule = noanim, sideright
-layerrule = noanim, sideleft
-
-#layerrule = blur, bar
-#layerrule = ignorealpha 0.64, bar
-#layerrule = blur, corner.*
-#layerrule = ignorealpha 0.69, corner.*
-#layerrule = blur, dock
-#layerrule = ignorealpha 0.69, dock
-#layerrule = blur, indicator.*
-#layerrule = ignorealpha 0.69, indicator.*
-#layerrule = blur, overview
-#layerrule = ignorealpha 0.69, overview
-#layerrule = blur, cheatsheet
-#layerrule = ignorealpha 0.69, cheatsheet
-#layerrule = blur, sideright
-#layerrule = ignorealpha 0.69, sideright
-#layerrule = blur, sideleft
-#layerrule = ignorealpha 0.69, sideleft
-#layerrule = blur, indicator*
-#layerrule = ignorealpha 0.69, indicator*
-#layerrule = blur, osk
-#layerrule = ignorealpha 0.69, osk
-
-# Dynamic colors
-source=~/.config/hypr/colors.conf
-
diff --git a/.config/hypr/rules.conf b/.config/hypr/rules.conf
new file mode 100644
index 000000000..fdb7b2007
--- /dev/null
+++ b/.config/hypr/rules.conf
@@ -0,0 +1,63 @@
+######## Window rules ########
+windowrule = noblur,.*
+
+#windowrule = opacity 0.94 override 0.94 override, .*
+windowrule = float, ^(steam)$
+windowrule = float, ^(guifetch)$ # FlafyDev/guifetch
+windowrule = pin, ^(showmethekey-gtk)$
+windowrulev2 = tile,class:(wpsoffice)
+
+
+# Dialogs
+windowrule=float,title:^(Open File)(.*)$
+windowrule=float,title:^(Select a File)(.*)$
+windowrule=float,title:^(Choose wallpaper)(.*)$
+windowrule=float,title:^(Open Folder)(.*)$
+windowrule=float,title:^(Save As)(.*)$
+windowrule=float,title:^(Library)(.*)$
+
+######## Layer rules ########
+layerrule = xray 1, .*
+#layerrule = noanim, .*
+layerrule = noanim, selection
+layerrule = noanim, overview
+layerrule = blur, swaylock
+
+layerrule = blur, eww
+layerrule = ignorealpha 0.8, eww
+layerrule = noanim, noanim
+layerrule = blur, noanim
+layerrule = blur, gtk-layer-shell
+layerrule = ignorezero, gtk-layer-shell
+layerrule = blur, launcher
+layerrule = ignorealpha 0.5, launcher
+layerrule = blur, notifications
+layerrule = ignorealpha 0.69, notifications
+
+# ags
+layerrule = blur, session
+layerrule = noanim, sideright
+layerrule = noanim, sideleft
+
+#layerrule = blur, bar
+#layerrule = ignorealpha 0.64, bar
+#layerrule = blur, corner.*
+#layerrule = ignorealpha 0.69, corner.*
+#layerrule = blur, dock
+#layerrule = ignorealpha 0.69, dock
+#layerrule = blur, indicator.*
+#layerrule = ignorealpha 0.69, indicator.*
+#layerrule = blur, overview
+#layerrule = ignorealpha 0.69, overview
+#layerrule = blur, cheatsheet
+#layerrule = ignorealpha 0.69, cheatsheet
+#layerrule = blur, sideright
+#layerrule = ignorealpha 0.69, sideright
+#layerrule = blur, sideleft
+#layerrule = ignorealpha 0.69, sideleft
+#layerrule = blur, indicator*
+#layerrule = ignorealpha 0.69, indicator*
+#layerrule = blur, osk
+#layerrule = ignorealpha 0.69, osk
+
+
From 5d3a92586081faf1a4949fd545dfabca89a286fb Mon Sep 17 00:00:00 2001
From: Navid
Date: Thu, 28 Dec 2023 14:04:58 +0330
Subject: [PATCH 013/265] improve sway config sizings and behaviour
---
.config/swaylock/config | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/.config/swaylock/config b/.config/swaylock/config
index 2177ebe37..5fd609efd 100644
--- a/.config/swaylock/config
+++ b/.config/swaylock/config
@@ -1,22 +1,22 @@
ignore-empty-password
-font=monospace
-font-size=80
+font=sans-serif
+font-size=50
clock
timestr=%R
#datestr=%a, %e of %B
-screenshots
+#screenshots
+color=00000099
-fade-in=0.1
-
-effect-blur=20x2
-# effect-greyscale
-effect-scale=0.3
+#fade-in=0.1
+#effect-blur=20x2
+#effect-greyscale
+#effect-scale=0.3
indicator
-indicator-radius=250
-indicator-thickness=20
+indicator-radius=150
+indicator-thickness=12
indicator-caps-lock
key-hl-color=d4d4d4
From c1a2aa806b18b3d3773440ef21eb306f92e34b9c Mon Sep 17 00:00:00 2001
From: Navid
Date: Thu, 28 Dec 2023 14:09:43 +0330
Subject: [PATCH 014/265] fix: source colors at the bottom of hyprland.conf
---
.config/hypr/hyprland.conf | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
index 067ac3aa7..fd0d748a0 100755
--- a/.config/hypr/hyprland.conf
+++ b/.config/hypr/hyprland.conf
@@ -9,9 +9,6 @@ source=~/.config/hypr/env.conf
source=~/.config/hypr/rules.conf
-# Dynamic colors
-source=~/.config/hypr/colors.conf
-
$mainMod = SUPER
# MONITOR CONFIG
@@ -195,3 +192,9 @@ decoration {
#screen_shader = ~/.config/hypr/shaders/crt.frag
}
+
+
+# Dynamic colors
+source=~/.config/hypr/colors.conf
+
+
From 46dfd0190dc1b3afa13f2571be2c890b944f3329 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Thu, 28 Dec 2023 18:05:34 +0700
Subject: [PATCH 015/265] Update install.sh
---
install.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/install.sh b/install.sh
index 39294f2a7..dc682def5 100755
--- a/install.sh
+++ b/install.sh
@@ -11,8 +11,8 @@ read
#####################################################################################
echo '1. Get packages and add user to video/input groups'
-echo 'yay -S blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout'
-yay -S blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout
+echo 'yay -S blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git'
+yay -S blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git
user=$(whoami)
echo "sudo usermod -aG video $user"
From 0832ba6b6127610b4e13d588a29afa56f87c9b10 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 29 Dec 2023 11:33:01 +0700
Subject: [PATCH 016/265] use wlsunset for night light
---
.config/ags/widgets/sideright/quicktoggles.js | 26 ++++++++++++-------
1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/.config/ags/widgets/sideright/quicktoggles.js b/.config/ags/widgets/sideright/quicktoggles.js
index 7fb60ffe0..249ee42aa 100644
--- a/.config/ags/widgets/sideright/quicktoggles.js
+++ b/.config/ags/widgets/sideright/quicktoggles.js
@@ -68,24 +68,32 @@ export const HyprToggleIcon = (icon, name, hyprlandConfigValue, props = {}) => W
...props,
})
-export const ModuleNightLight = (props = {}) => Widget.Button({
+export const ModuleNightLight = (props = {}) => Widget.Button({ // TODO: Make this work
+ properties: [
+ ['enabled', false],
+ ['yellowlight', undefined],
+ ],
className: 'txt-small sidebar-iconbutton',
tooltipText: 'Night Light',
- onClicked: (button) => {
- const shaderPath = JSON.parse(exec('hyprctl -j getoption decoration:screen_shader')).str;
- if (shaderPath != "[[EMPTY]]" && shaderPath != "") {
- execAsync(['bash', '-c', `hyprctl keyword decoration:screen_shader ''`]).catch(print);
- button.toggleClassName('sidebar-button-active', false);
+ onClicked: (self) => {
+ self._enabled = !self._enabled;
+ self.toggleClassName('sidebar-button-active', self._enabled);
+ if (self._enabled) {
+ self._inhibitor = Utils.subprocess(
+ ['wlsunset'],
+ (output) => print(output),
+ (err) => logError(err),
+ self,
+ );
}
else {
- execAsync(['bash', '-c', `hyprctl keyword decoration:screen_shader ~/.config/hypr/shaders/extradark.frag`]).catch(print);
- button.toggleClassName('sidebar-button-active', true);
+ self._inhibitor.force_exit();
}
},
child: MaterialIcon('nightlight', 'norm'),
setup: setupCursorHover,
...props,
-})
+});
export const ModuleInvertColors = (props = {}) => Widget.Button({
className: 'txt-small sidebar-iconbutton',
From 2d238efd1033f7692b8267230410184abdd655b9 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 29 Dec 2023 13:30:25 +0700
Subject: [PATCH 017/265] ags: sync
---
.config/ags/lib/advancedrevealers.js | 76 +++++++
.config/ags/lib/doublerevealer.js | 24 ---
.config/ags/lib/notification.js | 200 +++++++++++-------
.config/ags/lib/statusicons.js | 6 +-
.config/ags/scripts/record-script.sh | 8 +-
.../scripts/templates/gradience/preset.json | 40 ++--
.../ags/scripts/templates/hypr/colors.conf | 2 +-
.config/ags/scss/_bar.scss | 7 +-
.config/ags/scss/_colors.scss | 2 +-
.config/ags/scss/_lib_classes.scss | 40 ++++
.config/ags/scss/_lib_mixins.scss | 12 ++
.config/ags/scss/_notifications.scss | 26 ++-
.config/ags/scss/_osd.scss | 4 +
.config/ags/services/waifus.js | 170 +++++++++++++++
.config/ags/style.css | 56 +++--
.config/ags/widgets/bar/tray.js | 13 +-
.../ags/widgets/indicators/indicatorvalues.js | 18 +-
.config/ags/widgets/indicators/main.js | 3 +
.config/ags/widgets/overview/overview.js | 2 +-
.config/ags/widgets/sideleft/apis/chatgpt.js | 18 +-
.../sideleft/apis/chatgpt_chatmessage.js | 15 +-
.config/ags/widgets/sideleft/apis/waifu.js | 19 +-
.config/ags/widgets/sideleft/apiwidgets.js | 3 +
.config/ags/widgets/sideleft/sideleft.js | 2 +
24 files changed, 586 insertions(+), 180 deletions(-)
create mode 100644 .config/ags/lib/advancedrevealers.js
delete mode 100644 .config/ags/lib/doublerevealer.js
create mode 100644 .config/ags/services/waifus.js
diff --git a/.config/ags/lib/advancedrevealers.js b/.config/ags/lib/advancedrevealers.js
new file mode 100644
index 000000000..e90aa8297
--- /dev/null
+++ b/.config/ags/lib/advancedrevealers.js
@@ -0,0 +1,76 @@
+const { Gdk, Gtk } = imports.gi;
+import { App, Service, Utils, Variable, Widget } from '../imports.js';
+const { Box, Button, Entry, EventBox, Icon, Label, Revealer, Scrollable, Stack } = Widget;
+
+export const MarginRevealer = ({
+ transition = 'slide_down',
+ child,
+ revealChild,
+ showClass = 'element-show', // These are for animation curve
+ hideClass = 'element-hide', // Don't put margins in these classes!
+ extraProperties = [],
+ ...rest
+}) => {
+ child.toggleClassName(`${revealChild ? showClass : hideClass}`, true);
+ if(!revealChild) child.css = 'min-height: 2px;';
+ const widget = Scrollable({
+ properties: [
+ ['revealChild', true], // It'll be set to false after init if it's supposed to hide
+ ['transition', transition],
+ ['show', (self) => {
+ if (self._revealChild) return;
+ child.toggleClassName(hideClass, false);
+ child.toggleClassName(showClass, true);
+ self._revealChild = true;
+ child.css = 'margin: 0px;';
+ }],
+ ['hide', (self) => {
+ if (!self._revealChild) return;
+ child.toggleClassName(hideClass, true);
+ child.toggleClassName(showClass, false);
+ self._revealChild = false;
+ if (self._transition == 'slide_left')
+ child.css = `margin-right: -${child.get_allocated_width()}px;`;
+ else if (self._transition == 'slide_right')
+ child.css = `margin-left: -${child.get_allocated_width()}px;`;
+ else if (self._transition == 'slide_up')
+ child.css = `margin-bottom: -${child.get_allocated_height()}px;`;
+ else if (self._transition == 'slide_down')
+ child.css = `margin-top: -${child.get_allocated_height()}px;`;
+ }],
+ ['toggle', (self) => {
+ if (self._revealChild) self._hide(self);
+ else self._show(self);
+ }],
+ ...extraProperties,
+ ],
+ child: child,
+ setup: (self) => {
+ self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER);
+ },
+ ...rest,
+ });
+ 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,
+}) => {
+ return Revealer({
+ transition: transition1,
+ transitionDuration: duration1,
+ revealChild: revealChild,
+ child: Revealer({
+ transition: transition2,
+ transitionDuration: duration2,
+ revealChild: revealChild,
+ child: child,
+ })
+ })
+}
diff --git a/.config/ags/lib/doublerevealer.js b/.config/ags/lib/doublerevealer.js
deleted file mode 100644
index fe2855dc4..000000000
--- a/.config/ags/lib/doublerevealer.js
+++ /dev/null
@@ -1,24 +0,0 @@
-const { Gdk, Gtk } = imports.gi;
-import { App, Service, Utils, Variable, Widget } from '../imports.js';
-
-// 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,
-}) => {
- return Widget.Revealer({
- transition: transition1,
- transitionDuration: duration1,
- revealChild: revealChild,
- child: Widget.Revealer({
- transition: transition2,
- transitionDuration: duration2,
- revealChild: revealChild,
- child: child,
- })
- })
-}
\ No newline at end of file
diff --git a/.config/ags/lib/notification.js b/.config/ags/lib/notification.js
index a7decbcf2..93d6d70a0 100644
--- a/.config/ags/lib/notification.js
+++ b/.config/ags/lib/notification.js
@@ -7,6 +7,7 @@ const { Box, EventBox, Icon, Overlay, Label, Button, Revealer } = Widget;
import { MaterialIcon } from "./materialicon.js";
import { setupCursorHover } from "./cursorhover.js";
import { AnimatedCircProg } from "./animatedcircularprogress.js";
+import { MarginRevealer } from './advancedrevealers.js';
function guessMessageType(summary) {
if (summary.includes('recording')) return 'screen_record';
@@ -43,16 +44,15 @@ const NotificationIcon = (notifObject) => {
icon = notifObject.appEntry;
return Box({
- valign: Gtk.Align.CENTER,
+ vpack: 'center',
hexpand: false,
className: `notif-icon notif-icon-material-${notifObject.urgency}`,
homogeneous: true,
children: [
(icon != 'NO_ICON' ?
Icon({
+ vpack: 'center',
icon: icon,
- halign: Gtk.Align.CENTER, hexpand: true,
- valign: Gtk.Align.CENTER,
setup: (self) => Utils.timeout(1, () => {
const styleContext = self.get_parent().get_style_context();
const width = styleContext.get_property('min-width', Gtk.StateFlags.NORMAL);
@@ -81,7 +81,7 @@ export default ({
)
const destroyWithAnims = () => {
widget.sensitive = false;
- notificationBox.setCss(rightAnim1);
+ notificationBox.setCss(middleClickClose);
Utils.timeout(200, () => {
wholeThing.revealChild = false;
});
@@ -125,82 +125,124 @@ export default ({
});
const display = Gdk.Display.get_default();
+ const notifTextPreview = Revealer({
+ transition: 'slide_down',
+ transitionDuration: 300,
+ revealChild: true,
+ child: Label({
+ xalign: 0,
+ className: `txt-smallie notif-body-${notifObject.urgency}`,
+ useMarkup: true,
+ xalign: 0,
+ justify: Gtk.Justification.LEFT,
+ maxWidthChars: 24,
+ truncate: 'end',
+ label: notifObject.body.split("\n")[0],
+ }),
+ });
+ const notifTextExpanded = Revealer({
+ transition: 'slide_up',
+ transitionDuration: 300,
+ revealChild: false,
+ child: Label({
+ xalign: 0,
+ className: `txt-smallie notif-body-${notifObject.urgency}`,
+ useMarkup: true,
+ xalign: 0,
+ justify: Gtk.Justification.LEFT,
+ maxWidthChars: 24,
+ wrap: true,
+ label: notifObject.body,
+ }),
+ });
+ const notifIcon = Box({
+ vpack: 'start',
+ homogeneous: true,
+ children: [
+ Overlay({
+ child: NotificationIcon(notifObject),
+ overlays: [
+ AnimatedCircProg({
+ className: `notif-circprog-${notifObject.urgency}`,
+ valign: Gtk.Align.CENTER,
+ initFrom: (isPopup ? 100 : 0),
+ initTo: 0,
+ initAnimTime: popupTimeout,
+ })
+ ]
+ }),
+ ]
+ });
+ const notifText = Box({
+ valign: Gtk.Align.CENTER,
+ vertical: true,
+ hexpand: true,
+ children: [
+ Box({
+ children: [
+ Label({
+ xalign: 0,
+ className: 'txt-small txt-semibold titlefont',
+ justify: Gtk.Justification.LEFT,
+ hexpand: true,
+ maxWidthChars: 24,
+ truncate: 'end',
+ ellipsize: 3,
+ // wrap: true,
+ useMarkup: notifObject.summary.startsWith('<'),
+ label: notifObject.summary,
+ }),
+ Label({
+ valign: Gtk.Align.CENTER,
+ className: 'txt-smaller txt-semibold',
+ justify: Gtk.Justification.RIGHT,
+ setup: (label) => {
+ // Let's ignore how it won't work for Jan1 cuz I'm lazy
+ const messageTime = GLib.DateTime.new_from_unix_local(notifObject.time);
+ if (messageTime.get_day_of_year() == GLib.DateTime.new_now_local().get_day_of_year()) {
+ label.label = messageTime.format('%H:%M');
+ }
+ else if (messageTime.get_day_of_year() == GLib.DateTime.new_now_local().get_day_of_year() - 1) {
+ label.label = messageTime.format('Yesterday');
+ }
+ else {
+ label.label = messageTime.format('%d/%m');
+ }
+ }
+ }),
+ ]
+ }),
+ notifTextPreview,
+ notifTextExpanded,
+ ]
+ });
+ const notifExpandButton = Button({
+ vpack: 'start',
+ className: 'notif-expand-btn',
+ onClicked: (self) => {
+ if (notifTextPreview.revealChild) { // Expanding...
+ notifTextPreview.revealChild = false;
+ notifTextExpanded.revealChild = true;
+ self.child.label = 'expand_less';
+ }
+ else {
+ notifTextPreview.revealChild = true;
+ notifTextExpanded.revealChild = false;
+ self.child.label = 'expand_more';
+ }
+ },
+ child: MaterialIcon('expand_more', 'norm', {
+ vpack: 'center',
+ }),
+ setup: setupCursorHover,
+ });
const notificationContent = Box({
...props,
className: `${isPopup ? 'popup-' : ''}notif-${notifObject.urgency} spacing-h-10`,
children: [
- NotificationIcon(notifObject),
- Box({
- valign: Gtk.Align.CENTER,
- vertical: true,
- hexpand: true,
- children: [
- Box({
- children: [
- Label({
- xalign: 0,
- className: 'txt-small txt-semibold titlefont',
- justify: Gtk.Justification.LEFT,
- hexpand: true,
- maxWidthChars: 24,
- truncate: 'end',
- ellipsize: 3,
- wrap: true,
- useMarkup: notifObject.summary.startsWith('<'),
- label: notifObject.summary,
- }),
- Label({
- valign: Gtk.Align.CENTER,
- className: 'txt-smaller txt-semibold',
- justify: Gtk.Justification.RIGHT,
- setup: (label) => {
- // Let's ignore how it won't work for Jan1 cuz I'm lazy
- const messageTime = GLib.DateTime.new_from_unix_local(notifObject.time);
- if (messageTime.get_day_of_year() == GLib.DateTime.new_now_local().get_day_of_year()) {
- label.label = messageTime.format('%H:%M');
- }
- else if (messageTime.get_day_of_year() == GLib.DateTime.new_now_local().get_day_of_year() - 1) {
- label.label = messageTime.format('Yesterday');
- }
- else {
- label.label = messageTime.format('%d/%m');
- }
- }
- }),
- ]
- }),
- Label({
- xalign: 0,
- className: `txt-smallie notif-body-${notifObject.urgency}`,
- useMarkup: true,
- xalign: 0,
- justify: Gtk.Justification.LEFT,
- wrap: true,
- label: notifObject.body,
- }),
- ]
- }),
- Overlay({
- child: AnimatedCircProg({
- className: `notif-circprog-${notifObject.urgency}`,
- valign: Gtk.Align.CENTER,
- initFrom: (isPopup ? 100 : 0),
- initTo: 0,
- initAnimTime: popupTimeout,
- }),
- overlays: [
- Button({
- className: 'notif-close-btn',
- onClicked: () => {
- destroyWithAnims()
- },
- child: MaterialIcon('close', 'large', {
- valign: Gtk.Align.CENTER,
- }),
- setup: setupCursorHover,
- }),
- ]
- }),
+ notifIcon,
+ notifText,
+ notifExpandButton,
// what is this? i think it should be at the bottom not on the right
// Box({
@@ -236,10 +278,16 @@ export default ({
margin-right: -${Number(maxOffset + endMargin)}rem;
opacity: 0;`;
+ const middleClickClose = `transition: 200ms cubic-bezier(0.85, 0, 0.15, 1);
+ margin-left: ${Number(maxOffset + endMargin)}rem;
+ margin-right: -${Number(maxOffset + endMargin)}rem;
+ opacity: 0;`;
+
const notificationBox = Box({
properties: [
['leftAnim1', leftAnim1],
['rightAnim1', rightAnim1],
+ ['middleClickClose', middleClickClose],
['ready', false],
],
homogeneous: true,
diff --git a/.config/ags/lib/statusicons.js b/.config/ags/lib/statusicons.js
index 21eebe2db..d0db10ebd 100644
--- a/.config/ags/lib/statusicons.js
+++ b/.config/ags/lib/statusicons.js
@@ -145,7 +145,11 @@ export const NetworkIndicator = () => Widget.Stack({
['wired', NetworkWiredIndicator()],
],
connections: [[Network, stack => {
- let primary = Network.primary || 'fallback';
+ if(!Network.primary) {
+ stack.shown = 'wifi';
+ return;
+ }
+ const primary = Network.primary || 'fallback';
if (primary == 'wifi' || primary == 'wired')
stack.shown = primary;
else
diff --git a/.config/ags/scripts/record-script.sh b/.config/ags/scripts/record-script.sh
index ddcef8071..1881e0c2a 100755
--- a/.config/ags/scripts/record-script.sh
+++ b/.config/ags/scripts/record-script.sh
@@ -8,13 +8,13 @@ cd ~/Videos || exit
if [[ "$(pidof wf-recorder)" == "" ]]; then
notify-send "Starting recording" 'recording_'"$(getdate)"'.mp4' -a 'record-script.sh'
if [[ "$1" == "--sound" ]]; then
- wf-recorder -f './recording_'"$(getdate)"'.mp4' -t --geometry "$(slurp)" --audio=alsa_output.pci-0000_08_00.6.analog-stereo.monitor
+ wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t --geometry "$(slurp)" --audio=alsa_output.pci-0000_08_00.6.analog-stereo.monitor
elif [[ "$1" == "--fullscreen-sound" ]]; then
- wf-recorder -f './recording_'"$(getdate)"'.mp4' -t --audio=alsa_output.pci-0000_08_00.6.analog-stereo.monitor
+ wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t --audio=alsa_output.pci-0000_08_00.6.analog-stereo.monitor
elif [[ "$1" == "--fullscreen" ]]; then
- wf-recorder -f './recording_'"$(getdate)"'.mp4' -t
+ wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t
else
- wf-recorder -f './recording_'"$(getdate)"'.mp4' -t --geometry "$(slurp)"
+ wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t --geometry "$(slurp)"
fi
else
/usr/bin/kill --signal SIGINT wf-recorder
diff --git a/.config/ags/scripts/templates/gradience/preset.json b/.config/ags/scripts/templates/gradience/preset.json
index 5402658e6..d23d5efb5 100644
--- a/.config/ags/scripts/templates/gradience/preset.json
+++ b/.config/ags/scripts/templates/gradience/preset.json
@@ -87,34 +87,34 @@
"BLACK_500": "#393634",
"BLACK_700": "#33302F",
"BLACK_900": "#2B2928",
- "accent_bg_color": "#e2e2e2",
- "accent_fg_color": "#000000",
- "accent_color": "#e2e2e2",
- "destructive_bg_color": "#e2e2e2",
- "destructive_fg_color": "#000000",
- "destructive_color": "#e2e2e2",
+ "accent_bg_color": "#d6baff",
+ "accent_fg_color": "#3d1c70",
+ "accent_color": "#d6baff",
+ "destructive_bg_color": "#ffb4a9",
+ "destructive_fg_color": "#680003",
+ "destructive_color": "#ffb4a9",
"success_bg_color": "#81C995",
"success_fg_color": "rgba(0, 0, 0, 0.87)",
"warning_bg_color": "#FDD633",
"warning_fg_color": "rgba(0, 0, 0, 0.87)",
- "error_bg_color": "#e2e2e2",
- "error_fg_color": "#000000",
- "window_bg_color": "#000000",
- "window_fg_color": "#e2e2e2",
- "view_bg_color": "#000000",
- "view_fg_color": "#e2e2e2",
+ "error_bg_color": "#ffb4a9",
+ "error_fg_color": "#680003",
+ "window_bg_color": "#111012",
+ "window_fg_color": "#e7e1e6",
+ "view_bg_color": "#1d1b1e",
+ "view_fg_color": "#e7e1e6",
"headerbar_bg_color": "mix(@dialog_bg_color, @window_bg_color, 0.5)",
- "headerbar_fg_color": "#e2e2e2",
- "headerbar_border_color": "#313131",
+ "headerbar_fg_color": "#eadef7",
+ "headerbar_border_color": "#4b4358",
"headerbar_backdrop_color": "@headerbar_bg_color",
"headerbar_shade_color": "rgba(0, 0, 0, 0.09)",
- "card_bg_color": "#000000",
- "card_fg_color": "#e2e2e2",
+ "card_bg_color": "#111012",
+ "card_fg_color": "#eadef7",
"card_shade_color": "rgba(0, 0, 0, 0.09)",
- "dialog_bg_color": "#313131",
- "dialog_fg_color": "#e2e2e2",
- "popover_bg_color": "#313131",
- "popover_fg_color": "#e2e2e2",
+ "dialog_bg_color": "#4b4358",
+ "dialog_fg_color": "#eadef7",
+ "popover_bg_color": "#4b4358",
+ "popover_fg_color": "#eadef7",
"thumbnail_bg_color": "#1a1b26",
"thumbnail_fg_color": "#AEE5FA",
"shade_color": "rgba(0, 0, 0, 0.36)",
diff --git a/.config/ags/scripts/templates/hypr/colors.conf b/.config/ags/scripts/templates/hypr/colors.conf
index 232c664ee..6a9ec6051 100755
--- a/.config/ags/scripts/templates/hypr/colors.conf
+++ b/.config/ags/scripts/templates/hypr/colors.conf
@@ -1,6 +1,6 @@
# Auto generated color theme for image at: [Local wallpaper]
general {
- col.active_border = rgba({{ $primaryContainer }}FF)
+ col.active_border = rgba({{ $onPrimary }}FF)
col.inactive_border = rgba({{ $secondaryContainer }}CC)
}
diff --git a/.config/ags/scss/_bar.scss b/.config/ags/scss/_bar.scss
index 7ba2303b4..27229888f 100644
--- a/.config/ags/scss/_bar.scss
+++ b/.config/ags/scss/_bar.scss
@@ -464,13 +464,14 @@ $notchOnPrimary: $onPrimary;
.bar-systray {
@include full-rounding;
- min-height: 1.909rem;
- min-width: 1.909rem;
+ margin: 0.137rem 0rem;
+ padding: 0rem 0.682rem;
}
.bar-systray-item {
@include full-rounding;
- min-width: 1.909rem;
+ min-height: 1.032rem;
+ min-width: 1.032rem;
}
.bar-statusicons {
diff --git a/.config/ags/scss/_colors.scss b/.config/ags/scss/_colors.scss
index 4c1317cd6..5a510350d 100755
--- a/.config/ags/scss/_colors.scss
+++ b/.config/ags/scss/_colors.scss
@@ -125,4 +125,4 @@ $term3: $onPrimaryContainer;
$term4: $onPrimaryContainer;
$term5: $onSecondaryContainer;
$term6: $primary;
-$term7: $onSurfaceVariant;
\ No newline at end of file
+$term7: $onSurfaceVariant;
diff --git a/.config/ags/scss/_lib_classes.scss b/.config/ags/scss/_lib_classes.scss
index 4b7e0ca7c..791a7a1c7 100644
--- a/.config/ags/scss/_lib_classes.scss
+++ b/.config/ags/scss/_lib_classes.scss
@@ -214,6 +214,14 @@
margin-right: 0rem;
}
+.spacing-h-15>scrolledwindow>* {
+ margin-right: 1.023rem;
+}
+
+.spacing-h-15>scrolledwindow:last-child>* {
+ margin-right: 0rem;
+}
+
.spacing-v-5>box {
margin-bottom: 0.341rem;
}
@@ -238,6 +246,14 @@
margin-bottom: 0rem;
}
+.spacing-v-5-revealer>scrolledwindow>* {
+ margin-bottom: 0.341rem;
+}
+
+.spacing-v-5-revealer>scrolledwindow:last-child>* {
+ margin-bottom: 0rem;
+}
+
.spacing-h-5>* {
margin-right: 0.341rem;
}
@@ -262,6 +278,14 @@
margin-right: 0rem;
}
+.spacing-h-5>scrolledwindow>* {
+ margin-right: 0.341rem;
+}
+
+.spacing-h-5>scrolledwindow:last-child>* {
+ margin-right: 0rem;
+}
+
.spacing-v-minus5>* {
margin-bottom: -0.341rem;
}
@@ -286,6 +310,14 @@
margin-right: 0rem;
}
+.spacing-h-10>scrolledwindow>* {
+ margin-right: 0.682rem;
+}
+
+.spacing-h-10>scrolledwindow:last-child>* {
+ margin-right: 0rem;
+}
+
.spacing-h-10>flowboxchild>* {
margin-right: 0.682rem;
}
@@ -439,4 +471,12 @@
.menu-decel {
@include menu_decel;
+}
+
+.element-show {
+ @include element_easeInOut;
+}
+
+.element-hide {
+ @include element_easeInOut;
}
\ No newline at end of file
diff --git a/.config/ags/scss/_lib_mixins.scss b/.config/ags/scss/_lib_mixins.scss
index 3beb1718e..b43dc52e1 100644
--- a/.config/ags/scss/_lib_mixins.scss
+++ b/.config/ags/scss/_lib_mixins.scss
@@ -161,6 +161,18 @@ $elevation_margin: 0.476rem;
transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);
}
+@mixin element_decel {
+ transition: 300ms cubic-bezier(0, 0.55, 0.45, 1);
+}
+
+@mixin element_accel {
+ transition: 300ms cubic-bezier(0.55, 0, 1, 0.45);
+}
+
+@mixin element_easeInOut {
+ transition: 300ms cubic-bezier(0.85, 0, 0.15, 1);
+}
+
@function tint($color, $percentage) {
@return mix(rgb(245, 250, 255), $color, $percentage);
}
diff --git a/.config/ags/scss/_notifications.scss b/.config/ags/scss/_notifications.scss
index 38e6b397d..7ac21aee9 100644
--- a/.config/ags/scss/_notifications.scss
+++ b/.config/ags/scss/_notifications.scss
@@ -93,17 +93,18 @@ $notif_surface: $t_background;
color: $secondaryContainer;
}
-.notif-close-btn {
+.notif-expand-btn {
@include notif-rounding;
- padding: 0rem 0.136rem;
+ min-width: 1.841rem;
+ min-height: 1.841rem;
}
-.notif-close-btn:hover,
-.notif-close-btn:focus {
+.notif-expand-btn:hover,
+.notif-expand-btn:focus {
background: $hovercolor;
}
-.notif-close-btn:active {
+.notif-expand-btn:active {
background: $activecolor;
}
@@ -123,14 +124,17 @@ $notif_surface: $t_background;
.osd-notif {
@include notif-rounding;
- background-color: transparentize($background, $transparentize_surface_amount_subtract_surface);
+ background-color: transparentize(
+ $background,
+ $transparentize_surface_amount_subtract_surface
+ );
min-width: 30.682rem;
}
.notif-circprog-low {
transition: 0ms linear;
min-width: 0.136rem; // line width
- min-height: 1.770rem;
+ min-height: 3.409rem;
padding: 0rem;
color: $onSecondaryContainer;
}
@@ -138,7 +142,7 @@ $notif_surface: $t_background;
.notif-circprog-normal {
transition: 0ms linear;
min-width: 0.136rem; // line width
- min-height: 1.770rem;
+ min-height: 3.409rem;
padding: 0rem;
color: $onSecondaryContainer;
}
@@ -146,7 +150,7 @@ $notif_surface: $t_background;
.notif-circprog-critical {
transition: 0ms linear;
min-width: 0.136rem; // line width
- min-height: 1.770rem;
+ min-height: 3.409rem;
padding: 0rem;
- color: $onSecondaryContainer;
-}
\ No newline at end of file
+ color: $secondaryContainer;
+}
diff --git a/.config/ags/scss/_osd.scss b/.config/ags/scss/_osd.scss
index 6c6e2dde2..9d04f8d48 100644
--- a/.config/ags/scss/_osd.scss
+++ b/.config/ags/scss/_osd.scss
@@ -1,3 +1,7 @@
+// .osd-window {
+ // margin-top: 2.727rem;
+// }
+
.osd-bg {
min-width: 8.864rem;
min-height: 3.409rem;
diff --git a/.config/ags/services/waifus.js b/.config/ags/services/waifus.js
new file mode 100644
index 000000000..3674713e6
--- /dev/null
+++ b/.config/ags/services/waifus.js
@@ -0,0 +1,170 @@
+import { Utils, Widget } from '../imports.js';
+import Service from 'resource:///com/github/Aylur/ags/service.js';
+import Gio from 'gi://Gio';
+import GLib from 'gi://GLib';
+import Soup from 'gi://Soup?version=3.0';
+import { fileExists } from './messages.js';
+
+class WaifuResponse extends Service {
+ static {
+ Service.register(this,
+ {
+ 'delta': ['string'],
+ },
+ {
+ 'content': ['string'],
+ 'thinking': ['boolean'],
+ 'done': ['boolean'],
+ });
+ }
+
+ _role = '';
+ _content = '';
+ _thinking = false;
+ _done = false;
+
+ constructor(role, content, thinking = false, done = false) {
+ super();
+ this._role = role;
+ this._content = content;
+ this._thinking = thinking;
+ this._done = done;
+ }
+
+ get done() { return this._done }
+ set done(isDone) { this._done = isDone; this.notify('done') }
+
+ get role() { return this._role }
+ set role(role) { this._role = role; this.emit('changed') }
+
+ get content() { return this._content }
+ set content(content) {
+ this._content = content;
+ this.notify('content')
+ this.emit('changed')
+ }
+
+ get label() { return this._parserState.parsed + this._parserState.stack.join('') }
+
+ get thinking() { return this._thinking }
+ set thinking(thinking) {
+ this._thinking = thinking;
+ this.notify('thinking')
+ this.emit('changed')
+ }
+
+ addDelta(delta) {
+ if (this.thinking) {
+ this.thinking = false;
+ this.content = delta;
+ }
+ else {
+ this.content += delta;
+ }
+ this.emit('delta', delta);
+ }
+}
+
+class WaifuService extends Service {
+ _endpoints = {
+ 'im': 'https://api.waifu.im/search',
+ 'nekos': 'https://nekos.life/api/neko',
+ 'pics': 'https://api.waifu.pics/sfw/',
+ }
+ _headers = {
+ 'im': { 'Accept-Version': 'v5' },
+ 'nekos': {},
+ 'pics': {},
+ }
+ _url = 'https://api.waifu.im/search';
+ _mode = 'im'; // Allowed: im
+ _responses = [];
+ _nsfw = false;
+ _minHeight = 600;
+
+ static {
+ Service.register(this, {
+ 'initialized': [],
+ 'clear': [],
+ 'newResponse': ['string'],
+ });
+ }
+
+ constructor() {
+ super();
+ this.emit('initialized');
+ }
+
+ clear() {
+ this._responses = [];
+ this.emit('clear');
+ }
+
+ get mode() { return this._mode }
+ set mode(value) {
+ this._mode = value;
+ this._url = this._endpoints[this._mode];
+ }
+ get nsfw() { return this._nsfw }
+ set nsfw(value) { this._nsfw = value }
+ get responses() { return this._responses }
+
+ readResponseRecursive(stream, response) {
+ stream.read_line_async(
+ 0, null,
+ (stream, res) => {
+ if (!stream) return;
+ const [bytes] = stream.read_line_finish(res);
+ const line = this._decoder.decode(bytes);
+ if (line && line != '') {
+ let data = line.substr(6);
+ if (data == '[DONE]') return;
+ try {
+ const result = JSON.parse(data);
+ if (result.choices[0].finish_reason === 'stop') {
+ response.done = true;
+ return;
+ }
+ response.addDelta(result.choices[0].delta.content);
+ }
+ catch {
+ response.addDelta(line + '\n');
+ }
+ }
+ this.readResponseRecursive(stream, response);
+ });
+ }
+
+ fetch(msg) {
+ const taglist = msg.split(' ');
+ this.emit('newResponse', msg);
+ this._responses.push(msg);
+
+ const params = {
+ 'included_tags': taglist,
+ 'height': `>=${this._minHeight}`,
+ 'nsfw': this._nsfw,
+ };
+
+ const session = new Soup.Session();
+ const message = new Soup.Message({
+ method: 'GET',
+ uri: GLib.Uri.parse(this._url, GLib.UriFlags.NONE),
+ });
+ session.send_message(message, (session, message) => {
+ if (message.status_code === 200) {
+ const responseBody = message.response_body.data;
+ const data = JSON.parse(responseBody);
+ // Process the response data as needed
+ console.log(data);
+ log(data);
+ } else {
+ logError('Request failed with status code: ' + message.status_code);
+ }
+ });
+
+ }
+}
+
+export default new WaifuService();
+
diff --git a/.config/ags/style.css b/.config/ags/style.css
index 53f3aec50..8d7f9d373 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -159,6 +159,12 @@
.spacing-h-15 > revealer:last-child > * {
margin-right: 0rem; }
+.spacing-h-15 > scrolledwindow > * {
+ margin-right: 1.023rem; }
+
+.spacing-h-15 > scrolledwindow:last-child > * {
+ margin-right: 0rem; }
+
.spacing-v-5 > box {
margin-bottom: 0.341rem; }
@@ -177,6 +183,12 @@
.spacing-v-5-revealer > revealer:last-child > * {
margin-bottom: 0rem; }
+.spacing-v-5-revealer > scrolledwindow > * {
+ margin-bottom: 0.341rem; }
+
+.spacing-v-5-revealer > scrolledwindow:last-child > * {
+ margin-bottom: 0rem; }
+
.spacing-h-5 > * {
margin-right: 0.341rem; }
@@ -195,6 +207,12 @@
.spacing-h-5 > revealer:last-child > * {
margin-right: 0rem; }
+.spacing-h-5 > scrolledwindow > * {
+ margin-right: 0.341rem; }
+
+.spacing-h-5 > scrolledwindow:last-child > * {
+ margin-right: 0rem; }
+
.spacing-v-minus5 > * {
margin-bottom: -0.341rem; }
@@ -213,6 +231,12 @@
.spacing-h-10 > revealer:last-child > * {
margin-right: 0rem; }
+.spacing-h-10 > scrolledwindow > * {
+ margin-right: 0.682rem; }
+
+.spacing-h-10 > scrolledwindow:last-child > * {
+ margin-right: 0rem; }
+
.spacing-h-10 > flowboxchild > * {
margin-right: 0.682rem; }
@@ -330,6 +354,12 @@
.menu-decel {
transition: 300ms cubic-bezier(0.1, 1, 0, 1); }
+.element-show {
+ transition: 300ms cubic-bezier(0.85, 0, 0.15, 1); }
+
+.element-hide {
+ transition: 300ms cubic-bezier(0.85, 0, 0.15, 1); }
+
* {
caret-color: #d6baff; }
* selection {
@@ -844,13 +874,14 @@ tooltip {
.bar-systray {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- min-height: 1.909rem;
- min-width: 1.909rem; }
+ margin: 0.137rem 0rem;
+ padding: 0rem 0.682rem; }
.bar-systray-item {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- min-width: 1.909rem; }
+ min-height: 1.032rem;
+ min-width: 1.032rem; }
.bar-statusicons {
border-radius: 9999px;
@@ -2089,16 +2120,17 @@ tooltip {
background-color: #eadef7;
color: #4b4358; }
-.notif-close-btn {
+.notif-expand-btn {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- padding: 0rem 0.136rem; }
+ min-width: 1.841rem;
+ min-height: 1.841rem; }
-.notif-close-btn:hover,
-.notif-close-btn:focus {
+.notif-expand-btn:hover,
+.notif-expand-btn:focus {
background: rgba(128, 128, 128, 0.3); }
-.notif-close-btn:active {
+.notif-expand-btn:active {
background: rgba(128, 128, 128, 0.7); }
.notif-closeall-btn {
@@ -2122,23 +2154,23 @@ tooltip {
.notif-circprog-low {
transition: 0ms linear;
min-width: 0.136rem;
- min-height: 1.770rem;
+ min-height: 3.409rem;
padding: 0rem;
color: #eadef7; }
.notif-circprog-normal {
transition: 0ms linear;
min-width: 0.136rem;
- min-height: 1.770rem;
+ min-height: 3.409rem;
padding: 0rem;
color: #eadef7; }
.notif-circprog-critical {
transition: 0ms linear;
min-width: 0.136rem;
- min-height: 1.770rem;
+ min-height: 3.409rem;
padding: 0rem;
- color: #eadef7; }
+ color: #4b4358; }
.osd-music {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
diff --git a/.config/ags/widgets/bar/tray.js b/.config/ags/widgets/bar/tray.js
index 0d0ded80d..885bec07f 100644
--- a/.config/ags/widgets/bar/tray.js
+++ b/.config/ags/widgets/bar/tray.js
@@ -10,7 +10,13 @@ const SysTrayItem = item => Button({
className: 'bar-systray-item',
child: Icon({
hpack: 'center',
- binds: [['icon', item, 'icon']]
+ binds: [['icon', item, 'icon']],
+ setup: (self) => Utils.timeout(1, () => {
+ const styleContext = self.get_parent().get_style_context();
+ const width = styleContext.get_property('min-width', Gtk.StateFlags.NORMAL);
+ const height = styleContext.get_property('min-height', Gtk.StateFlags.NORMAL);
+ self.size = Math.max(width, height, 1); // im too lazy to add another box lol
+ }),
}),
binds: [['tooltipMarkup', item, 'tooltip-markup']],
onClicked: btn => item.menu.popup_at_widget(btn, Gravity.SOUTH, Gravity.NORTH, null),
@@ -19,8 +25,7 @@ const SysTrayItem = item => Button({
export const Tray = (props = {}) => {
const trayContent = Box({
- vpack: 'center',
- className: 'bar-systray bar-group',
+ className: 'bar-systray bar-group spacing-h-10',
properties: [
['items', new Map()],
['onAdded', (box, id) => {
@@ -31,7 +36,7 @@ export const Tray = (props = {}) => {
return;
const widget = SysTrayItem(item);
box._items.set(id, widget);
- box.pack_start(widget, false, false, 0);
+ box.add(widget);
box.show_all();
if (box._items.size === 1)
trayRevealer.revealChild = true;
diff --git a/.config/ags/widgets/indicators/indicatorvalues.js b/.config/ags/widgets/indicators/indicatorvalues.js
index e4d587809..74c4f641d 100644
--- a/.config/ags/widgets/indicators/indicatorvalues.js
+++ b/.config/ags/widgets/indicators/indicatorvalues.js
@@ -2,34 +2,32 @@
const { GLib, Gtk } = imports.gi;
import { App, Service, Utils, Widget } from '../../imports.js';
import Audio from 'resource:///com/github/Aylur/ags/service/audio.js';
-import Notifications from 'resource:///com/github/Aylur/ags/service/notifications.js';
-const { Box, EventBox, Icon, Scrollable, Label, Button, Revealer } = Widget;
+const { Box, Label, ProgressBar, Revealer } = Widget;
import Brightness from '../../services/brightness.js';
import Indicator from '../../services/indicator.js';
-import Notification from '../../lib/notification.js';
-const OsdValue = (name, labelConnections, progressConnections, props = {}) => Widget.Box({ // Volume
+const OsdValue = (name, labelConnections, progressConnections, props = {}) => Box({ // Volume
...props,
vertical: true,
className: 'osd-bg osd-value',
hexpand: true,
children: [
- Widget.Box({
+ Box({
vexpand: true,
children: [
- Widget.Label({
+ Label({
xalign: 0, yalign: 0, hexpand: true,
className: 'osd-label',
label: `${name}`,
}),
- Widget.Label({
+ Label({
hexpand: false, className: 'osd-value-txt',
label: '100',
connections: labelConnections,
}),
]
}),
- Widget.ProgressBar({
+ ProgressBar({
className: 'osd-progress',
hexpand: true,
vertical: false,
@@ -58,14 +56,14 @@ const volumeIndicator = OsdValue('Volume',
}]],
);
-export default () => Widget.Revealer({
+export default () => Revealer({
transition: 'slide_down',
connections: [
[Indicator, (revealer, value) => {
revealer.revealChild = (value > -1);
}, 'popup'],
],
- child: Widget.Box({
+ child: Box({
hpack: 'center',
vertical: false,
children: [
diff --git a/.config/ags/widgets/indicators/main.js b/.config/ags/widgets/indicators/main.js
index ee74f8a56..b2204a15b 100644
--- a/.config/ags/widgets/indicators/main.js
+++ b/.config/ags/widgets/indicators/main.js
@@ -10,6 +10,7 @@ export default (monitor) => Widget.Window({
monitor,
className: 'indicator',
layer: 'overlay',
+ // exclusivity: 'ignore',
visible: true,
anchor: ['top'],
child: Widget.EventBox({
@@ -18,6 +19,7 @@ export default (monitor) => Widget.Window({
},
child: Widget.Box({
vertical: true,
+ className: 'osd-window',
css: 'min-height: 2px;',
children: [
IndicatorValues(),
@@ -28,3 +30,4 @@ export default (monitor) => Widget.Window({
})
}),
});
+
diff --git a/.config/ags/widgets/overview/overview.js b/.config/ags/widgets/overview/overview.js
index 5a62f2f94..aca13a286 100644
--- a/.config/ags/widgets/overview/overview.js
+++ b/.config/ags/widgets/overview/overview.js
@@ -4,7 +4,7 @@ import Applications from 'resource:///com/github/Aylur/ags/service/applications.
import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';
const { execAsync, exec } = Utils;
import { setupCursorHover, setupCursorHoverGrab } from "../../lib/cursorhover.js";
-import { DoubleRevealer } from "../../lib/doublerevealer.js";
+import { DoubleRevealer } from "../../lib/advancedrevealers.js";
import { execAndClose, expandTilde, hasUnterminatedBackslash, startsWithNumber, launchCustomCommand, ls } from './miscfunctions.js';
import {
CalculationResultButton, CustomCommandButton, DirectoryButton,
diff --git a/.config/ags/widgets/sideleft/apis/chatgpt.js b/.config/ags/widgets/sideleft/apis/chatgpt.js
index 314877326..898a6a3fb 100644
--- a/.config/ags/widgets/sideleft/apis/chatgpt.js
+++ b/.config/ags/widgets/sideleft/apis/chatgpt.js
@@ -8,6 +8,7 @@ import { setupCursorHover, setupCursorHoverInfo } from "../../../lib/cursorhover
import { SystemMessage, ChatMessage } from "./chatgpt_chatmessage.js";
import { ConfigToggle, ConfigSegmentedSelection, ConfigGap } from '../../../lib/configwidgets.js';
import { markdownTest } from '../../../lib/md2pango.js';
+import { MarginRevealer } from '../../../lib/advancedrevealers.js';
export const chatGPTTabIcon = Box({
hpack: 'center',
@@ -60,16 +61,15 @@ const chatGPTInfo = Box({
]
})
-export const chatGPTSettings = Revealer({
+export const chatGPTSettings = MarginRevealer({
transition: 'slide_down',
- transitionDuration: 150,
revealChild: true,
connections: [
[ChatGPT, (self) => Utils.timeout(200, () => {
- self.revealChild = false;
+ self._hide(self);
}), 'newMsg'],
[ChatGPT, (self) => Utils.timeout(200, () => {
- self.revealChild = true;
+ self._show(self);
}), 'clear'],
],
child: Box({
@@ -249,6 +249,16 @@ export const chatGPTSendMessage = (text) => {
if (text.startsWith('/')) {
if (text.startsWith('/clear')) clearChat();
else if (text.startsWith('/model')) chatContent.add(SystemMessage(`Currently using \`${ChatGPT.modelName}\``, '/model', chatGPTView))
+ else if (text.startsWith('/prompt')) {
+ const firstSpaceIndex = text.indexOf(' ');
+ const prompt = text.slice(firstSpaceIndex + 1);
+ if (firstSpaceIndex == -1 || prompt.length < 1) {
+ chatContent.add(SystemMessage(`Usage: \`/prompt MESSAGE\``, '/prompt', chatGPTView))
+ }
+ else {
+ ChatGPT.addMessage('user', prompt)
+ }
+ }
else if (text.startsWith('/key')) {
const parts = text.split(' ');
if (parts.length == 1) chatContent.add(SystemMessage(
diff --git a/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js b/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js
index 8a5a25faa..99faf5368 100644
--- a/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js
+++ b/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js
@@ -9,7 +9,7 @@ import GtkSource from "gi://GtkSource?version=3.0";
const CUSTOM_SOURCEVIEW_SCHEME_PATH = `${App.configDir}/data/sourceviewtheme.xml`;
const CUSTOM_SCHEME_ID = 'custom';
const USERNAME = GLib.get_user_name();
-const CHATGPT_CURSOR = ' >> ';
+const CHATGPT_CURSOR = ' (o) ';
const MESSAGE_SCROLL_DELAY = 13; // In milliseconds, the time before an updated message scrolls to bottom
/////////////////////// Custom source view colorscheme /////////////////////////
@@ -92,10 +92,6 @@ const CodeBlock = (content = '', lang = 'txt') => {
}),
Button({
className: 'sidebar-chat-codeblock-topbar-btn',
- onClicked: (self) => {
- // execAsync(['bash', '-c', `wl-copy '${content}'`, `&`]).catch(print);
- execAsync([`wl-copy`, `${sourceView.label}`]).catch(print);
- },
child: Box({
className: 'spacing-h-5',
children: [
@@ -104,8 +100,13 @@ const CodeBlock = (content = '', lang = 'txt') => {
label: 'Copy',
})
]
- })
- })
+ }),
+ onClicked: (self) => {
+ const copyContent = sourceView.get_buffer().get_text(0, 0, 0); // TODO: fix this
+ console.log(copyContent);
+ execAsync([`wl-copy`, `${copyContent}`]).catch(print);
+ },
+ }),
]
})
// Source view
diff --git a/.config/ags/widgets/sideleft/apis/waifu.js b/.config/ags/widgets/sideleft/apis/waifu.js
index 34cfb0214..e4e7dd631 100644
--- a/.config/ags/widgets/sideleft/apis/waifu.js
+++ b/.config/ags/widgets/sideleft/apis/waifu.js
@@ -4,6 +4,7 @@ const { Box, Button, Entry, EventBox, Icon, Label, Revealer, Scrollable, Stack }
const { execAsync, exec } = Utils;
import { MaterialIcon } from "../../../lib/materialicon.js";
import { setupCursorHover, setupCursorHoverInfo } from "../../../lib/cursorhover.js";
+import WaifuService from '../../../services/waifus.js';
export const waifuTabIcon = Box({
hpack: 'center',
@@ -14,12 +15,27 @@ export const waifuTabIcon = Box({
]
});
+const waifuContent = Box({
+ className: 'spacing-v-15',
+ vertical: true,
+ connections: [
+ [WaifuService, (box, id) => {
+ const message = WaifuService.responses[id];
+ if (!message) return;
+ box.add(Label({
+ label: message,
+ }))
+ }, 'newResponse'],
+ ]
+});
+
export const waifuView = Scrollable({
className: 'sidebar-chat-viewport',
vexpand: true,
child: Box({
vertical: true,
children: [
+ waifuContent,
]
}),
setup: (scrolledWindow) => {
@@ -45,11 +61,12 @@ export const waifuCommands = Box({
// command do something
},
setup: setupCursorHover,
- label: '/A command button',
+ label: '/call',
}),
]
});
export const waifuCallAPI = (text) => {
// Do something on send
+ WaifuService.fetch(text);
}
\ No newline at end of file
diff --git a/.config/ags/widgets/sideleft/apiwidgets.js b/.config/ags/widgets/sideleft/apiwidgets.js
index 88d1539d5..573b65dab 100644
--- a/.config/ags/widgets/sideleft/apiwidgets.js
+++ b/.config/ags/widgets/sideleft/apiwidgets.js
@@ -15,6 +15,7 @@ const APIS = [
contentWidget: chatGPTView,
commandBar: chatGPTCommands,
tabIcon: chatGPTTabIcon,
+ placeholderText: 'Message ChatGPT',
},
{
name: 'Waifus',
@@ -22,6 +23,7 @@ const APIS = [
contentWidget: waifuView,
commandBar: waifuCommands,
tabIcon: waifuTabIcon,
+ placeholderText: 'Enter tags',
},
];
let currentApiId = 0;
@@ -80,6 +82,7 @@ function switchToTab(id) {
APIS[id].tabIcon.toggleClassName('sidebar-chat-apiswitcher-icon-enabled', true);
apiContentStack.shown = APIS[id].name;
apiCommandStack.shown = APIS[id].name;
+ chatEntry.placeholderText = APIS[id].placeholderText,
currentApiId = id;
}
const apiSwitcher = Box({
diff --git a/.config/ags/widgets/sideleft/sideleft.js b/.config/ags/widgets/sideleft/sideleft.js
index 32150a8e3..12ea47330 100644
--- a/.config/ags/widgets/sideleft/sideleft.js
+++ b/.config/ags/widgets/sideleft/sideleft.js
@@ -172,6 +172,8 @@ export default () => Box({
if (event.get_keyval()[1] == Gdk.KEY_p)
pinButton._toggle(pinButton);
// Switch sidebar tab
+ else if (event.get_keyval()[1] === Gdk.KEY_Tab)
+ switchToTab((currentTabId + 1) % contents.length);
else if (event.get_keyval()[1] === Gdk.KEY_Page_Up)
switchToTab(Math.max(currentTabId - 1), 0);
else if (event.get_keyval()[1] === Gdk.KEY_Page_Down)
From 0ba2c8fdd04d0886002baef0147feea430d08483 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 29 Dec 2023 13:31:03 +0700
Subject: [PATCH 018/265] oop
---
.config/ags/lib/advancedrevealers.js | 1 -
1 file changed, 1 deletion(-)
diff --git a/.config/ags/lib/advancedrevealers.js b/.config/ags/lib/advancedrevealers.js
index e90aa8297..f5f255605 100644
--- a/.config/ags/lib/advancedrevealers.js
+++ b/.config/ags/lib/advancedrevealers.js
@@ -12,7 +12,6 @@ export const MarginRevealer = ({
...rest
}) => {
child.toggleClassName(`${revealChild ? showClass : hideClass}`, true);
- if(!revealChild) child.css = 'min-height: 2px;';
const widget = Scrollable({
properties: [
['revealChild', true], // It'll be set to false after init if it's supposed to hide
From 0f91b010a66aa70b1b76f39ba34fa302e82588b5 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 29 Dec 2023 16:26:22 +0700
Subject: [PATCH 019/265] update hyprland stuff
---
.config/hypr/colors.conf | 37 +++++++++++++++++++++-------
.config/hypr/hyprland.conf | 8 +++---
.config/hypr/keybinds.conf | 19 +++++++-------
.config/hypr/shaders/bluefilter.frag | 20 ---------------
4 files changed, 41 insertions(+), 43 deletions(-)
delete mode 100755 .config/hypr/shaders/bluefilter.frag
diff --git a/.config/hypr/colors.conf b/.config/hypr/colors.conf
index 3f24d1b0f..4553b27b8 100755
--- a/.config/hypr/colors.conf
+++ b/.config/hypr/colors.conf
@@ -1,24 +1,43 @@
# Auto generated color theme for image at: [Local wallpaper]
general {
- col.active_border = rgba(36399fFF)
- col.inactive_border = rgba(454559AA)
+ col.active_border = rgba(3d1c70FF)
+ col.inactive_border = rgba(4b4358CC)
}
plugin {
droidbars {
# example config
bar_height = 30
- background_color = rgba(1b1b1fFF)
- # background_color_active = rgba(47464fFF) # Not added yet
- text_color = rgba(e2e0f9FF)
+ background_color = rgba(111012FF)
+ # background_color_active = rgba(49454eFF) # Not added yet
+ text_color = rgba(eadef7FF)
font_family = Lexend
button_font_fmily = JetBrainsMono NF
# example buttons (R -> L)
# droidbars-button = [0]isLeft(0/1), [1]color, [2]color2, [3]width, [4]height, [5]icon, [6]buttonType, [7]on-click
- droidbars-button = 0, rgba(e2e0f9FF), rgba(bfc2ffFF), 42, 16,โ ๓ฐญ, normal, hyprctl dispatch killactive
- droidbars-button = 0, rgba(e2e0f9FF), rgba(bfc2ffFF), 42, 16,โ ๏, normal, hyprctl dispatch fullscreen 1
- droidbars-button = 1, rgba(e2e0f9FF), rgba(bfc2ffFF), 16, 16,โ๓ฐ, pin, hyprctl dispatch pin
- droidbars-button = 1, rgba(e2e0f9FF), rgba(bfc2ffFF), 16, 16,๓ฐ, float, hyprctl dispatch togglefloating
+ droidbars-button = 0, rgba(eadef7FF), rgba(d6baffFF), 42, 16,โ ๓ฐญ, normal, hyprctl dispatch killactive
+ droidbars-button = 0, rgba(eadef7FF), rgba(d6baffFF), 42, 16,โ ๏, normal, hyprctl dispatch fullscreen 1
+ droidbars-button = 1, rgba(eadef7FF), rgba(d6baffFF), 16, 16,โ๓ฐ, pin, hyprctl dispatch pin
+ droidbars-button = 1, rgba(eadef7FF), rgba(d6baffFF), 16, 16,๓ฐ, float, hyprctl dispatch togglefloating
+ }
+ hyprbars {
+ # Honestly idk if it works like css, but well, why not
+ bar_text_font = Geist, AR One Sans, Reddit Sans, Inter, Roboto, Ubuntu, Noto Sans, sans-serif
+ bar_height = 30
+ bar_padding = 10
+ bar_button_padding = 5
+ bar_precedence_over_border = true
+ bar_part_of_window = true
+
+ bar_color = rgb(111012)
+ col.text = rgb(e7e1e6)
+
+
+ # example buttons (R -> L)
+ # hyprbars-button = color, size, on-click
+ hyprbars-button = rgb(e7e1e6), 13, ๓ฐญ, hyprctl dispatch killactive
+ hyprbars-button = rgb(e7e1e6), 13, ๓ฐฏ, hyprctl dispatch fullscreen 1
+ hyprbars-button = rgb(e7e1e6), 13, ๓ฐฐ, hyprctl dispatch movetoworkspacesilent special
}
}
diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
index fd0d748a0..c30041a80 100755
--- a/.config/hypr/hyprland.conf
+++ b/.config/hypr/hyprland.conf
@@ -5,10 +5,6 @@
source=~/.config/hypr/env.conf
-# Window and layer rules
-source=~/.config/hypr/rules.conf
-
-
$mainMod = SUPER
# MONITOR CONFIG
@@ -192,9 +188,11 @@ decoration {
#screen_shader = ~/.config/hypr/shaders/crt.frag
}
+# Window and layer rules
+layerrule = noanim, selection
+source=~/.config/hypr/rules.conf
# Dynamic colors
source=~/.config/hypr/colors.conf
-
diff --git a/.config/hypr/keybinds.conf b/.config/hypr/keybinds.conf
index 1c40b2d76..f814ddc4b 100755
--- a/.config/hypr/keybinds.conf
+++ b/.config/hypr/keybinds.conf
@@ -39,7 +39,7 @@ bind = SuperShiftAlt, S, exec, grim -g "$(slurp -d -c D1E5F4BB -b 1B232866 -s 00
bindl=,Print,exec,grim - | wl-copy
bind = SuperShift, S, exec, grim -g "$(slurp -d -c D1E5F4BB -b 1B232866 -s 00000000)" - | wl-copy
bind = SuperAlt, R, exec, ~/.config/ags/scripts/record-script.sh
-bind = ControlAlt, R, exec, ~/.config/ags/scripts/record-script.sh --sound
+bind = ControlAlt, R, exec, ~/.config/ags/scripts/record-script.sh --fullscreen
bind = SuperShiftAlt, R, exec, ~/.config/ags/scripts/record-script.sh --fullscreen-sound
bind = SuperShift, C, exec, hyprpicker -a
bind = Super, V, exec, pkill fuzzel || cliphist list | fuzzel --no-fuzzy --dmenu | cliphist decode | wl-copy
@@ -75,24 +75,25 @@ bindir = Super, Super_L, exec, ags -t 'overview'
bind = Super, Tab, exec, ags -t 'overview'
bind = Super, Slash, exec, ags -t 'cheatsheet'
bind = Super, B, exec, ags -t 'sideleft'
+bind = Super, A, exec, ags -t 'sideleft'
bind = Super, O, exec, ags -t 'sideleft' # blame osu for this keybinding
bind = Super, N, exec, ags -t 'sideright'
bind = Super, M, exec, ags run-js 'openMusicControls.value = (!Mpris.getPlayer() ? false : !openMusicControls.value);'
bind = Super, Comma, exec, ags run-js 'openColorScheme.value = true; Utils.timeout(2000, () => openColorScheme.value = false);'
bind = Super, K, exec, ags -t 'osk'
bind = ControlAlt, Delete, exec, ags -t 'session'
-bindr = Control, Control_R, exec, ags run-js 'indicator.popup(-1);'
-bindr = Control, Control_R, exec, ags run-js 'Notifications.notifications.forEach((notif) => notif.dismiss())'
bindle = , XF86AudioRaiseVolume, exec, ags run-js 'indicator.popup(1);'
bindle = , XF86AudioLowerVolume, exec, ags run-js 'indicator.popup(1);'
bindle = , XF86MonBrightnessUp, exec, ags run-js 'indicator.popup(1);'
bindle = , XF86MonBrightnessDown, exec, ags run-js 'indicator.popup(1);'
-bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("sideright");'
-bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("cheatsheet");'
-bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("osk");'
-bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("session");'
-bindr = Control, Control_R, exec, ags run-js 'openMusicControls.value = false'
-bindr = Control, Control_R, exec, ags run-js 'openColorScheme.value = false'
+#bindr = Control, Control_R, exec, ags run-js 'indicator.popup(-1);'
+#bindr = Control, Control_R, exec, ags run-js 'Notifications.notifications.forEach((notif) => notif.dismiss())'
+#bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("sideright");'
+#bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("cheatsheet");'
+#bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("osk");'
+#bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("session");'
+#bindr = Control, Control_R, exec, ags run-js 'openMusicControls.value = false'
+#bindr = Control, Control_R, exec, ags run-js 'openColorScheme.value = false'
###################################### Plugins #########################################
bind = ControlSuper, P, exec, hyprctl plugin load "~/.config/hypr/plugins/droidbars.so"
diff --git a/.config/hypr/shaders/bluefilter.frag b/.config/hypr/shaders/bluefilter.frag
deleted file mode 100755
index 5469af9c6..000000000
--- a/.config/hypr/shaders/bluefilter.frag
+++ /dev/null
@@ -1,20 +0,0 @@
-// vim: set ft=glsl:
-// blue light filter shader
-// values from https://reshade.me/forum/shader-discussion/3673-blue-light-filter-similar-to-f-lux
-
-precision mediump float;
-varying vec2 v_texcoord;
-uniform sampler2D tex;
-
-void main() {
-
- vec4 pixColor = texture2D(tex, v_texcoord);
-
- // green
- pixColor[1] *= 0.855;
-
- // blue
- pixColor[2] *= 0.725;
-
- gl_FragColor = pixColor;
-}
From 10bc1c4ef8dc559e0db605eb89116d8d062f238c Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 29 Dec 2023 18:17:08 +0700
Subject: [PATCH 020/265] ags: some migration
i cry
---
.config/ags/lib/notification.js | 80 +-
.config/ags/lib/popupwindow.js | 12 +-
.config/ags/lib/statusicons.js | 78 +-
.config/ags/scss/_bar.scss | 2 +-
.config/ags/style.css | 743 +++++++++---------
.config/ags/widgets/bar/leftspace.js | 12 +-
.config/ags/widgets/bar/rightspace.js | 4 +-
.config/ags/widgets/bar/system.js | 38 +-
.config/ags/widgets/bar/tray.js | 8 +-
.config/ags/widgets/bar/workspaces.js | 48 +-
.../desktopbackground/timeandlaunches.js | 12 +-
.config/ags/widgets/dock/dock.js | 41 +-
.config/ags/widgets/indicators/colorscheme.js | 8 +-
.../widgets/indicators/notificationpopups.js | 20 +-
.../onscreenkeyboard/onscreenkeyboard.js | 4 +-
.config/ags/widgets/sideleft/sideleft.js | 10 +-
16 files changed, 551 insertions(+), 569 deletions(-)
diff --git a/.config/ags/lib/notification.js b/.config/ags/lib/notification.js
index 93d6d70a0..1e647f1e2 100644
--- a/.config/ags/lib/notification.js
+++ b/.config/ags/lib/notification.js
@@ -161,18 +161,24 @@ export default ({
children: [
Overlay({
child: NotificationIcon(notifObject),
- overlays: [
- AnimatedCircProg({
- className: `notif-circprog-${notifObject.urgency}`,
- valign: Gtk.Align.CENTER,
- initFrom: (isPopup ? 100 : 0),
- initTo: 0,
- initAnimTime: popupTimeout,
- })
- ]
+ overlays: isPopup ? [AnimatedCircProg({
+ className: `notif-circprog-${notifObject.urgency}`,
+ valign: Gtk.Align.CENTER,
+ initFrom: (isPopup ? 100 : 0),
+ initTo: 0,
+ initAnimTime: popupTimeout,
+ })] : [],
}),
]
});
+ let notifTime = '';
+ const messageTime = GLib.DateTime.new_from_unix_local(notifObject.time);
+ if (messageTime.get_day_of_year() == GLib.DateTime.new_now_local().get_day_of_year())
+ notifTime = messageTime.format('%H:%M');
+ else if (messageTime.get_day_of_year() == GLib.DateTime.new_now_local().get_day_of_year() - 1)
+ notifTime = 'Yesterday';
+ else
+ notifTime = messageTime.format('%d/%m');
const notifText = Box({
valign: Gtk.Align.CENTER,
vertical: true,
@@ -188,27 +194,14 @@ export default ({
maxWidthChars: 24,
truncate: 'end',
ellipsize: 3,
- // wrap: true,
useMarkup: notifObject.summary.startsWith('<'),
label: notifObject.summary,
}),
Label({
- valign: Gtk.Align.CENTER,
+ vpack: 'center',
+ justification: 'right',
className: 'txt-smaller txt-semibold',
- justify: Gtk.Justification.RIGHT,
- setup: (label) => {
- // Let's ignore how it won't work for Jan1 cuz I'm lazy
- const messageTime = GLib.DateTime.new_from_unix_local(notifObject.time);
- if (messageTime.get_day_of_year() == GLib.DateTime.new_now_local().get_day_of_year()) {
- label.label = messageTime.format('%H:%M');
- }
- else if (messageTime.get_day_of_year() == GLib.DateTime.new_now_local().get_day_of_year() - 1) {
- label.label = messageTime.format('Yesterday');
- }
- else {
- label.label = messageTime.format('%d/%m');
- }
- }
+ label: notifTime,
}),
]
}),
@@ -243,17 +236,6 @@ export default ({
notifIcon,
notifText,
notifExpandButton,
-
- // what is this? i think it should be at the bottom not on the right
- // Box({
- // className: 'actions',
- // children: actions.map(action => Button({
- // className: 'action-button',
- // onClicked: () => Notifications.invoke(id, action.id),
- // hexpand: true,
- // child: Label(action.label),
- // })),
- // }),
]
})
@@ -284,16 +266,16 @@ export default ({
opacity: 0;`;
const notificationBox = Box({
- properties: [
- ['leftAnim1', leftAnim1],
- ['rightAnim1', rightAnim1],
- ['middleClickClose', middleClickClose],
- ['ready', false],
- ],
+ attribute: {
+ 'leftAnim1': leftAnim1,
+ 'rightAnim1': rightAnim1,
+ 'middleClickClose': middleClickClose,
+ 'ready': false,
+ },
homogeneous: true,
children: [notificationContent],
- connections: [
- [gesture, self => {
+ setup: (self) => self
+ .hook(gesture, self => {
var offset = gesture.get_offset()[1];
if (initialDir == 0 && offset != 0)
initialDir = (offset > 0 ? 1 : -1)
@@ -323,9 +305,8 @@ export default ({
if (widget.window)
widget.window.set_cursor(Gdk.Cursor.new_from_name(display, 'grabbing'));
- }, 'drag-update'],
-
- [gesture, self => {
+ }, 'drag-update')
+ .hook(gesture, self => {
if (!self._ready) {
wholeThing.revealChild = true;
self._ready = true;
@@ -362,9 +343,8 @@ export default ({
wholeThing._dragging = false;
}
initialDir = 0;
- }, 'drag-end'],
-
- ],
+ }, 'drag-end')
+ ,
})
widget.add(notificationBox);
wholeThing.child.children = [widget];
diff --git a/.config/ags/lib/popupwindow.js b/.config/ags/lib/popupwindow.js
index e4a29c16f..4f7e63d2e 100644
--- a/.config/ags/lib/popupwindow.js
+++ b/.config/ags/lib/popupwindow.js
@@ -17,11 +17,13 @@ export default ({
child: Box({
className: `${showClassName} ${hideClassName}`,
- connections: [[App, (self, currentName, visible) => {
- if (currentName === name) {
- self.toggleClassName(hideClassName, !visible);
- }
- }]],
+ setup: (self) => self
+ .hook(App, (self, currentName, visible) => {
+ if (currentName === name) {
+ self.toggleClassName(hideClassName, !visible);
+ }
+ })
+ ,
child: child,
}),
});
\ No newline at end of file
diff --git a/.config/ags/lib/statusicons.js b/.config/ags/lib/statusicons.js
index d0db10ebd..48c0bce47 100644
--- a/.config/ags/lib/statusicons.js
+++ b/.config/ags/lib/statusicons.js
@@ -27,18 +27,18 @@ export const NotificationIndicator = (notifCenterName = 'sideright') => {
transition: 150,
transition: 'slide_left',
revealChild: false,
- connections: [
- [Notifications, (self, id) => {
+ setup: (self) => self
+ .hook(Notifications, (self, id) => {
if (!id || Notifications.dnd) return;
if (!Notifications.getNotification(id)) return;
self.revealChild = true;
- }, 'notified'],
- [App, (self, currentName, visible) => {
+ }, 'notified')
+ .hook(App, (self, currentName, visible) => {
if (visible && currentName === notifCenterName) {
self.revealChild = false;
}
- }],
- ],
+ })
+ ,
child: Widget.Box({
children: [
MaterialIcon('notifications', 'norm'),
@@ -50,20 +50,20 @@ export const NotificationIndicator = (notifCenterName = 'sideright') => {
['update', (self) => self.label = `${self._unreadCount}`],
['unreadCount', 0],
],
- connections: [
- [Notifications, (self, id) => {
+ setup: (self) => self
+ .hook(Notifications, (self, id) => {
if (!id || Notifications.dnd) return;
if (!Notifications.getNotification(id)) return;
self._increment(self);
self._update(self);
- }, 'notified'],
- [App, (self, currentName, visible) => {
+ }, 'notified')
+ .hook(App, (self, currentName, visible) => {
if (visible && currentName === notifCenterName) {
self._markread(self);
self._update(self);
}
- }],
- ]
+ })
+ ,
})
]
})
@@ -77,7 +77,11 @@ export const BluetoothIndicator = () => Widget.Stack({
['true', Widget.Label({ className: 'txt-norm icon-material', label: 'bluetooth' })],
['false', Widget.Label({ className: 'txt-norm icon-material', label: 'bluetooth_disabled' })],
],
- connections: [[Bluetooth, stack => { stack.shown = String(Bluetooth.enabled); }]],
+ setup: (self) => self
+ .hook(Bluetooth, stack => {
+ stack.shown = String(Bluetooth.enabled);
+ })
+ ,
});
@@ -90,7 +94,7 @@ const NetworkWiredIndicator = () => Widget.Stack({
['connected', Widget.Label({ className: 'txt-norm icon-material', label: 'lan' })],
['connecting', Widget.Label({ className: 'txt-norm icon-material', label: 'settings_ethernet' })],
],
- connections: [[Network, stack => {
+ setup: (self) => self.hook(Network, stack => {
if (!Network.wired)
return;
@@ -101,15 +105,15 @@ const NetworkWiredIndicator = () => Widget.Stack({
stack.shown = 'disconnected';
else
stack.shown = 'fallback';
- }]],
+ }),
});
const SimpleNetworkIndicator = () => Widget.Icon({
- connections: [[Network, self => {
+ setup: (self) => self.hook(Network, self => {
const icon = Network[Network.primary || 'wifi']?.iconName;
self.icon = icon || '';
self.visible = icon;
- }]],
+ }),
});
const NetworkWifiIndicator = () => Widget.Stack({
@@ -124,7 +128,7 @@ const NetworkWifiIndicator = () => Widget.Stack({
['3', Widget.Label({ className: 'txt-norm icon-material', label: 'network_wifi_3_bar' })],
['4', Widget.Label({ className: 'txt-norm icon-material', label: 'signal_wifi_4_bar' })],
],
- connections: [[Network, (stack) => {
+ setup: (self) => self.hook(Network, (stack) => {
if (!Network.wifi) {
return;
}
@@ -134,7 +138,7 @@ const NetworkWifiIndicator = () => Widget.Stack({
else if (Network.wifi.internet == 'disconnected' || Network.wifi.internet == 'connecting') {
stack.shown = Network.wifi.internet;
}
- }]],
+ }),
});
export const NetworkIndicator = () => Widget.Stack({
@@ -144,8 +148,8 @@ export const NetworkIndicator = () => Widget.Stack({
['wifi', NetworkWifiIndicator()],
['wired', NetworkWiredIndicator()],
],
- connections: [[Network, stack => {
- if(!Network.primary) {
+ setup: (self) => self.hook(Network, stack => {
+ if (!Network.primary) {
stack.shown = 'wifi';
return;
}
@@ -154,7 +158,7 @@ export const NetworkIndicator = () => Widget.Stack({
stack.shown = primary;
else
stack.shown = 'fallback';
- }]],
+ }),
});
const KeyboardLayout = ({ useFlag } = {}) => {
@@ -192,22 +196,20 @@ const KeyboardLayout = ({ useFlag } = {}) => {
...languageStackArray,
['undef', Widget.Label({ label: '?' })]
],
- connections: [
- [Hyprland, (stack, kbName, layoutName) => {
- if (!kbName) {
- return;
- }
- var lang = languages.find(lang => layoutName.includes(lang.name));
- if (lang) {
- widgetContent.shown = lang.layout;
- }
- else { // Attempt to support langs not listed
- lang = languageStackArray.find(lang => isLanguageMatch(lang[0], layoutName));
- if (!lang) stack.shown = 'undef';
- else stack.shown = lang[0];
- }
- }, 'keyboard-layout']
- ],
+ setup: (self) => self.hook(Hyprland, (stack, kbName, layoutName) => {
+ if (!kbName) {
+ return;
+ }
+ var lang = languages.find(lang => layoutName.includes(lang.name));
+ if (lang) {
+ widgetContent.shown = lang.layout;
+ }
+ else { // Attempt to support langs not listed
+ lang = languageStackArray.find(lang => isLanguageMatch(lang[0], layoutName));
+ if (!lang) stack.shown = 'undef';
+ else stack.shown = lang[0];
+ }
+ }, 'keyboard-layout'),
});
widgetRevealer.child = widgetContent;
return widgetRevealer;
diff --git a/.config/ags/scss/_bar.scss b/.config/ags/scss/_bar.scss
index 27229888f..b1bbd4378 100644
--- a/.config/ags/scss/_bar.scss
+++ b/.config/ags/scss/_bar.scss
@@ -72,7 +72,7 @@ $notchOnPrimary: $onPrimary;
.bar-group-pad-music {
padding-right: 1.023rem;
- // padding-left: 0.273rem;
+ padding-left: 0.341rem;
}
.bar-group-pad-left {
diff --git a/.config/ags/style.css b/.config/ags/style.css
index 8d7f9d373..977572676 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -41,13 +41,13 @@
transition: 0ms; }
.txt {
- color: #e7e1e6; }
+ color: #e2e2e2; }
.txt-primary {
- color: #d6baff; }
+ color: #e2e2e2; }
.txt-onSecondaryContainer {
- color: #eadef7; }
+ color: #e2e2e2; }
.txt-shadow {
text-shadow: 1px 2px 8px rgba(0, 0, 0, 0.69);
@@ -101,10 +101,10 @@
font-size: 0px; }
.txt-subtext {
- color: #a6a1a6; }
+ color: #a0a0a0; }
.txt-action {
- color: #c7c1c6; }
+ color: #c1c1c1; }
.txt-semibold {
font-weight: 500; }
@@ -130,7 +130,7 @@
.separator-circle {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #e7e1e6;
+ background-color: #e2e2e2;
margin: 0rem 0.682rem;
min-width: 0.545rem;
min-height: 0.545rem; }
@@ -361,10 +361,10 @@
transition: 300ms cubic-bezier(0.85, 0, 0.15, 1); }
* {
- caret-color: #d6baff; }
+ caret-color: #e2e2e2; }
* selection {
- background-color: #cec2db;
- color: #342d40; }
+ background-color: #e2e2e2;
+ color: #000000; }
@keyframes appear {
from {
@@ -379,13 +379,13 @@ tooltip {
animation-iteration-count: 1; }
menu {
- border-top: 1px solid rgba(59, 57, 61, 0.121);
- border-left: 1px solid rgba(59, 57, 61, 0.121);
- border-right: 1px solid rgba(45, 43, 47, 0.1105);
- border-bottom: 1px solid rgba(45, 43, 47, 0.1105);
+ border-top: 1px solid rgba(35, 35, 35, 0.121);
+ border-left: 1px solid rgba(35, 35, 35, 0.121);
+ border-right: 1px solid rgba(19, 19, 19, 0.1105);
+ border-bottom: 1px solid rgba(19, 19, 19, 0.1105);
padding: 0.681rem;
- background: #28262b;
- color: #cbc4cf;
+ background: #121212;
+ color: #e2e2e2;
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
animation-name: appear;
@@ -408,53 +408,53 @@ menu > menuitem {
menu > menuitem:hover,
menu > menuitem:focus {
- background-color: #38363b; }
+ background-color: #272727; }
.separator-line {
- background-color: #28262b;
+ background-color: #121212;
min-width: 0.068rem;
min-height: 0.068rem; }
tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: #28262b;
- color: #cbc4cf;
- border: 1px solid #cbc4cf; }
+ background-color: #121212;
+ color: #e2e2e2;
+ border: 1px solid #e2e2e2; }
.configtoggle-box {
padding: 0.205rem 0.341rem;
border: 0.136rem solid transparent; }
.configtoggle-box:focus {
- border: 0.136rem solid #6e6b6f; }
+ border: 0.136rem solid #5c5c5c; }
.switch-bg {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #171518;
- border: 0.136rem solid #e7e1e6;
+ background-color: #050505;
+ border: 0.136rem solid #e2e2e2;
min-width: 2.864rem;
min-height: 1.637rem; }
.switch-bg-true {
- background-color: #d6baff;
- border: 0.136rem solid #d6baff; }
+ background-color: #e2e2e2;
+ border: 0.136rem solid #e2e2e2; }
.switch-fg {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- background-color: #e7e1e6;
- color: #1e1c20;
+ background-color: #e2e2e2;
+ color: #020202;
min-width: 0.819rem;
min-height: 0.819rem;
margin-left: 0.477rem; }
.switch-fg-true {
- background-color: #3d1c70;
- color: #d6baff;
+ background-color: #000000;
+ color: #e2e2e2;
min-width: 1.431rem;
min-height: 1.431rem;
margin-left: 1.431rem; }
@@ -467,14 +467,14 @@ tooltip {
.segment-container {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- border: 0.068rem solid #958f99; }
+ border: 0.068rem solid #a1a1a1; }
.segment-container > *:first-child {
border-top-left-radius: 9999px;
border-bottom-left-radius: 9999px; }
.segment-container > * {
- border-right: 0.068rem solid #958f99;
+ border-right: 0.068rem solid #a1a1a1;
padding: 0.341rem 0.682rem; }
.segment-container > *:last-child {
@@ -483,21 +483,21 @@ tooltip {
border-bottom-right-radius: 9999px; }
.segment-btn {
- color: #e7e1e6; }
+ color: #e2e2e2; }
.segment-btn:focus,
.segment-btn:hover {
- background-color: #28262b;
- color: #cbc4cf; }
+ background-color: #121212;
+ color: #e2e2e2; }
.segment-btn-enabled {
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.segment-btn-enabled:hover,
.segment-btn-enabled:focus {
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.gap-v-5 {
min-height: 0.341rem; }
@@ -518,7 +518,7 @@ tooltip {
min-width: 1.023rem; }
.bar-bg {
- background-color: #0f0d10;
+ background-color: #070707;
min-height: 2.727rem; }
.bar-sidespace {
@@ -528,7 +528,7 @@ tooltip {
padding: 0.2rem; }
.bar-group {
- background-color: rgba(30, 28, 32, 0.31); }
+ background-color: rgba(2, 2, 2, 0.31); }
.bar-group-center {
border-bottom-left-radius: 1.364rem;
@@ -552,7 +552,8 @@ tooltip {
padding-right: 0.547rem; }
.bar-group-pad-music {
- padding-right: 1.023rem; }
+ padding-right: 1.023rem;
+ padding-left: 0.341rem; }
.bar-group-pad-left {
padding-left: 1.364rem;
@@ -600,18 +601,18 @@ tooltip {
-gtk-outline-radius: 9999px;
min-width: 0.341rem;
min-height: 0.341rem;
- background-color: rgba(50, 48, 52, 0.31);
+ background-color: rgba(24, 24, 24, 0.31);
margin: 0rem 0.341rem; }
.bar-clock {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1.2727rem;
- color: #e7e1e6; }
+ color: #e2e2e2; }
.bar-date {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1rem;
- color: #e7e1e6; }
+ color: #e2e2e2; }
.bar-ws {
min-height: 1.636rem;
@@ -631,8 +632,8 @@ tooltip {
min-width: 1.5rem;
font-size: 1.091rem;
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
- background-color: #d6baff;
- color: #3d1c70;
+ background-color: #e2e2e2;
+ color: #000000;
border-radius: 999px;
margin: 0.068rem; }
@@ -644,67 +645,67 @@ tooltip {
margin: 0rem 0.409rem; }
.bar-ws-occupied {
- background-color: #4b4358;
- color: #eadef7;
+ background-color: #313131;
+ color: #e2e2e2;
min-width: 1.772rem;
- border-top: 0.068rem solid #eadef7;
- border-bottom: 0.068rem solid #eadef7; }
+ border-top: 0.068rem solid #e2e2e2;
+ border-bottom: 0.068rem solid #e2e2e2; }
.bar-ws-occupied-left {
- background-color: #4b4358;
- color: #eadef7;
+ background-color: #313131;
+ color: #e2e2e2;
min-width: 1.704rem;
border-top-left-radius: 999px;
border-bottom-left-radius: 999px;
- border-left: 0.068rem solid #eadef7;
- border-top: 0.068rem solid #eadef7;
- border-bottom: 0.068rem solid #eadef7;
+ border-left: 0.068rem solid #e2e2e2;
+ border-top: 0.068rem solid #e2e2e2;
+ border-bottom: 0.068rem solid #e2e2e2;
border-right: 0px solid transparent; }
.bar-ws-occupied-right {
- background-color: #4b4358;
- color: #eadef7;
+ background-color: #313131;
+ color: #e2e2e2;
min-width: 1.704rem;
border-top-right-radius: 999px;
border-bottom-right-radius: 999px;
- border-right: 0.068rem solid #eadef7;
- border-top: 0.068rem solid #eadef7;
- border-bottom: 0.068rem solid #eadef7;
+ border-right: 0.068rem solid #e2e2e2;
+ border-top: 0.068rem solid #e2e2e2;
+ border-bottom: 0.068rem solid #e2e2e2;
border-left: 0px solid transparent; }
.bar-ws-occupied-left-right {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #4b4358;
- color: #eadef7;
+ background-color: #313131;
+ color: #e2e2e2;
min-width: 1.636rem;
- border: 0.068rem solid #eadef7; }
+ border: 0.068rem solid #e2e2e2; }
.bar-ws-empty {
- color: #e7e1e6;
+ color: #e2e2e2;
border-color: transparent; }
.bar-batt {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0rem 0.341rem;
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.bar-sidemodule {
min-width: 26rem; }
.bar-batt-low {
- background-color: #ffb4a9;
- color: #930006; }
+ background-color: #e2e2e2;
+ color: #000000; }
.bar-batt-full {
background-color: #374b3e;
color: #d1e9d6; }
.bar-batt-prog-low {
- background-color: #ffb4a9;
- color: #930006; }
+ background-color: #e2e2e2;
+ color: #000000; }
.bar-batt-prog-full {
background-color: #374b3e;
@@ -714,23 +715,23 @@ tooltip {
min-height: 1.770rem;
min-width: 1.770rem;
border-radius: 10rem;
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.bar-music-circprog {
transition: 1000ms cubic-bezier(0.1, 1, 0, 1);
min-width: 0.068rem;
min-height: 1.770rem;
padding: 0rem;
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.bar-music-playstate-playing {
min-height: 1.770rem;
min-width: 1.770rem;
border-radius: 10rem;
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.bar-music-playstate-txt {
transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
@@ -798,10 +799,10 @@ tooltip {
min-width: 0.680rem;
margin: 0rem 0.137rem;
border-radius: 10rem;
- background-color: #eadef7; }
+ background-color: #e2e2e2; }
.bar-prog-batt-low progress {
- background-color: #930006; }
+ background-color: #000000; }
.bar-prog-batt-full progress {
background-color: #d1e9d6; }
@@ -814,18 +815,18 @@ tooltip {
border-radius: 10rem;
min-width: 0.681rem;
min-height: 0.681rem;
- background-color: #eadef7;
- color: #4b4358; }
+ background-color: #e2e2e2;
+ color: #313131; }
.bar-batt-chargestate-charging-smaller {
border-radius: 10rem;
min-width: 0.409rem;
min-height: 0.409rem;
- background-color: #eadef7;
- color: #4b4358; }
+ background-color: #e2e2e2;
+ color: #313131; }
.bar-batt-chargestate-low {
- background-color: #930006; }
+ background-color: #000000; }
.bar-batt-chargestate-full {
background-color: #d1e9d6; }
@@ -836,7 +837,7 @@ tooltip {
font-weight: 500; }
.corner {
- background-color: #0f0d10;
+ background-color: #070707;
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem; }
@@ -848,7 +849,7 @@ tooltip {
.bar-topdesc {
margin-top: -0.136rem;
margin-bottom: -0.341rem;
- color: #a6a1a6; }
+ color: #a0a0a0; }
.bar-space-button {
padding: 0.341rem; }
@@ -891,22 +892,22 @@ tooltip {
padding: 0rem 0.614rem; }
.bar-statusicons-hover {
- background-color: #252225; }
+ background-color: #1d1d1d; }
.bar-statusicons-active {
- background-color: #3a373b; }
+ background-color: #333333; }
.cheatsheet-bg {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(154, 154, 154, 0.19);
+ border-left: 1px solid rgba(154, 154, 154, 0.19);
+ border-right: 1px solid rgba(114, 114, 114, 0.145);
+ border-bottom: 1px solid rgba(114, 114, 114, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
margin-bottom: 0.682rem;
- background-color: #0f0d10;
+ background-color: #070707;
padding: 1.364rem; }
.cheatsheet-key {
@@ -917,16 +918,16 @@ tooltip {
padding: 0.136rem 0.205rem;
border-radius: 0.409rem;
-gtk-outline-radius: 0.409rem;
- color: #d6baff;
- border: 0.068rem solid #d6baff;
- box-shadow: 0rem 0.136rem 0rem #d6baff;
+ color: #e2e2e2;
+ border: 0.068rem solid #e2e2e2;
+ box-shadow: 0rem 0.136rem 0rem #e2e2e2;
font-weight: 500; }
.cheatsheet-key-notkey {
min-height: 1.364rem;
padding: 0.136rem 0.205rem;
margin: 0.17rem;
- color: #ecdcff; }
+ color: #e2e2e2; }
.cheatsheet-closebtn {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -937,10 +938,10 @@ tooltip {
.cheatsheet-closebtn:hover,
.cheatsheet-closebtn:focus {
- background-color: #28262b; }
+ background-color: #121212; }
.cheatsheet-closebtn:active {
- background-color: #59555c; }
+ background-color: #505050; }
.cheatsheet-category-title {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
@@ -955,12 +956,12 @@ tooltip {
.bg-time-clock {
font-family: 'Gabarito';
font-size: 5.795rem;
- color: #e7e1e6; }
+ color: #e2e2e2; }
.bg-time-date {
font-family: 'Gabarito';
font-size: 2.591rem;
- color: #e7e1e6; }
+ color: #e2e2e2; }
.bg-distro-box {
border-radius: 1.705rem;
@@ -971,12 +972,12 @@ tooltip {
.bg-distro-txt {
font-family: 'Gabarito';
font-size: 1.432rem;
- color: #e7e1e6; }
+ color: #e2e2e2; }
.bg-distro-name {
font-family: 'Gabarito';
font-size: 1.432rem;
- color: #eadef7; }
+ color: #e2e2e2; }
.bg-graph {
color: rgba(255, 255, 255, 0.5);
@@ -985,25 +986,25 @@ tooltip {
.bg-quicklaunch-title {
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
- color: #cbc4cf; }
+ color: #e2e2e2; }
.bg-quicklaunch-btn {
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #28262b;
- color: #cbc4cf;
- border: 0.068rem solid #a6a1a6;
+ background-color: #121212;
+ color: #e2e2e2;
+ border: 0.068rem solid #a0a0a0;
min-width: 4.432rem;
min-height: 2.045rem;
padding: 0.273rem 0.682rem; }
.bg-quicklaunch-btn:hover,
.bg-quicklaunch-btn:focus {
- background-color: #302e33; }
+ background-color: #1c1c1c; }
.bg-quicklaunch-btn:active {
- background-color: #38363b; }
+ background-color: #272727; }
.bg-system-bg {
border-radius: 1.159rem;
@@ -1015,14 +1016,14 @@ tooltip {
min-height: 4.091rem;
font-size: 0px;
padding: 0rem;
- background-color: #28262b; }
+ background-color: #121212; }
.dock-bg {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
- background-color: #0f0d10;
+ background-color: #070707;
padding: 0.682rem; }
.dock-app-btn {
@@ -1032,10 +1033,10 @@ tooltip {
.dock-app-btn:hover,
.dock-app-btn:focus {
- background-color: rgba(40, 38, 42, 0.31); }
+ background-color: rgba(13, 13, 13, 0.31); }
.dock-app-btn:active {
- background-color: rgba(60, 58, 62, 0.31); }
+ background-color: rgba(36, 36, 36, 0.31); }
.dock-app-icon {
min-width: 3.409rem;
@@ -1043,14 +1044,14 @@ tooltip {
.dock-separator {
min-width: 0.068rem;
- background-color: #28262b; }
+ background-color: #121212; }
.osd-bg {
min-width: 8.864rem;
min-height: 3.409rem; }
.osd-value {
- background-color: #0f0d10;
+ background-color: #070707;
border-radius: 1.023rem;
padding: 0.625rem 1.023rem;
padding-top: 0.313rem;
@@ -1068,36 +1069,36 @@ tooltip {
min-height: 0.954rem;
min-width: 0.068rem;
border-radius: 10rem;
- background-color: #4b4358; }
+ background-color: #313131; }
.osd-progress progress {
transition: 200ms cubic-bezier(0.1, 1, 0, 1);
min-height: 0.680rem;
min-width: 0.680rem;
margin: 0rem 0.137rem;
border-radius: 10rem;
- background-color: #eadef7; }
+ background-color: #e2e2e2; }
.osd-icon {
- color: #ecdcff; }
+ color: #e2e2e2; }
.osd-label {
font-size: 1.023rem;
font-weight: 500;
- color: #e7e1e6;
+ color: #e2e2e2;
margin-top: 0.341rem; }
.osd-value-txt {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1.688rem;
font-weight: 500;
- color: #e7e1e6; }
+ color: #e2e2e2; }
.osd-notifs {
padding-top: 0.313rem; }
.osd-colorscheme {
border-radius: 1.023rem;
- background-color: #0f0d10;
+ background-color: #070707;
padding: 1.023rem;
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem; }
@@ -1115,46 +1116,46 @@ tooltip {
margin: 0.409rem; }
.osd-color-primary {
- background-color: #d6baff;
- color: #3d1c70; }
+ background-color: #e2e2e2;
+ color: #000000; }
.osd-color-primary box {
- background-color: #3d1c70; }
+ background-color: #000000; }
.osd-color-primaryContainer {
- background-color: #543588;
- color: #ecdcff; }
+ background-color: #6b6b6b;
+ color: #e2e2e2; }
.osd-color-primaryContainer box {
- background-color: #ecdcff; }
+ background-color: #e2e2e2; }
.osd-color-secondary {
- background-color: #cec2db;
- color: #342d40; }
+ background-color: #e2e2e2;
+ color: #000000; }
.osd-color-secondary box {
- background-color: #342d40; }
+ background-color: #000000; }
.osd-color-secondaryContainer {
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.osd-color-secondaryContainer box {
- background-color: #eadef7; }
+ background-color: #e2e2e2; }
.osd-color-surfaceVariant {
- background-color: #28262b;
- color: #cbc4cf; }
+ background-color: #121212;
+ color: #e2e2e2; }
.osd-color-surfaceVariant box {
- background-color: #cbc4cf; }
+ background-color: #e2e2e2; }
.osd-color-surface {
- background-color: #1e1c20;
- color: #e7e1e6; }
+ background-color: #020202;
+ color: #e2e2e2; }
.osd-color-surface box {
- background-color: #e7e1e6; }
+ background-color: #e2e2e2; }
.osd-color-background {
- background-color: #0f0d10;
- color: #e7e1e6; }
+ background-color: #070707;
+ color: #e2e2e2; }
.osd-color-background box {
- background-color: #e7e1e6; }
+ background-color: #e2e2e2; }
.overview-window {
margin-top: 2.727rem; }
@@ -1163,29 +1164,29 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(154, 154, 154, 0.19);
+ border-left: 1px solid rgba(154, 154, 154, 0.19);
+ border-right: 1px solid rgba(114, 114, 114, 0.145);
+ border-bottom: 1px solid rgba(114, 114, 114, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
min-width: 13.636rem;
min-height: 3.409rem;
padding: 0rem 1.364rem;
padding-right: 2.864rem;
- background-color: #0f0d10;
- color: #e7e1e6;
+ background-color: #070707;
+ color: #e2e2e2;
caret-color: transparent; }
.overview-search-box selection {
- background-color: #cec2db;
- color: #342d40; }
+ background-color: #e2e2e2;
+ color: #000000; }
.overview-search-box-extended {
min-width: 25.909rem;
- caret-color: #eadef7; }
+ caret-color: #e2e2e2; }
.overview-search-prompt {
- color: #a6a1a6; }
+ color: #a0a0a0; }
.overview-search-icon {
margin: 0rem 1.023rem; }
@@ -1201,16 +1202,16 @@ tooltip {
.overview-search-results {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(154, 154, 154, 0.19);
+ border-left: 1px solid rgba(154, 154, 154, 0.19);
+ border-right: 1px solid rgba(114, 114, 114, 0.145);
+ border-bottom: 1px solid rgba(114, 114, 114, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
min-width: 28.773rem;
padding: 0.682rem;
- background-color: #0f0d10;
- color: #e7e1e6; }
+ background-color: #070707;
+ color: #e2e2e2; }
.overview-search-results-icon {
margin: 0rem 0.682rem;
@@ -1244,43 +1245,43 @@ tooltip {
.overview-tasks {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(154, 154, 154, 0.19);
+ border-left: 1px solid rgba(154, 154, 154, 0.19);
+ border-right: 1px solid rgba(114, 114, 114, 0.145);
+ border-bottom: 1px solid rgba(114, 114, 114, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
padding: 0.341rem;
- background-color: #0f0d10;
- color: #e7e1e6; }
+ background-color: #070707;
+ color: #e2e2e2; }
.overview-tasks-workspace {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
margin: 0.341rem;
- background-color: rgba(51, 48, 52, 0.1147); }
+ background-color: rgba(25, 25, 25, 0.1147); }
.overview-tasks-workspace-number {
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
- color: rgba(217, 211, 216, 0.31); }
+ color: rgba(210, 210, 210, 0.31); }
.overview-tasks-window {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- background-color: rgba(75, 67, 88, 0.5);
- color: #eadef7;
- border: 0.068rem solid rgba(234, 222, 247, 0.07); }
+ background-color: rgba(49, 49, 49, 0.5);
+ color: #e2e2e2;
+ border: 0.068rem solid rgba(226, 226, 226, 0.07); }
.overview-tasks-window:hover,
.overview-tasks-window:focus {
- background-color: rgba(94, 83, 111, 0.525); }
+ background-color: rgba(73, 73, 73, 0.525); }
.overview-tasks-window:active {
- background-color: rgba(110, 97, 130, 0.55); }
+ background-color: rgba(93, 93, 93, 0.55); }
.overview-tasks-window-selected {
- background-color: rgba(110, 97, 130, 0.55); }
+ background-color: rgba(93, 93, 93, 0.55); }
.overview-tasks-window-dragging {
opacity: 0.2; }
@@ -1288,13 +1289,13 @@ tooltip {
.osk-window {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(154, 154, 154, 0.19);
+ border-left: 1px solid rgba(154, 154, 154, 0.19);
+ border-right: 1px solid rgba(114, 114, 114, 0.145);
+ border-bottom: 1px solid rgba(114, 114, 114, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
- background-color: #0f0d10; }
+ background-color: #070707; }
.osk-body {
padding: 1.023rem;
@@ -1311,7 +1312,7 @@ tooltip {
.osk-dragline {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #28262b;
+ background-color: #121212;
min-height: 0.273rem;
min-width: 10.227rem;
margin-top: 0.545rem;
@@ -1319,22 +1320,22 @@ tooltip {
.osk-key {
border-radius: 0.682rem;
- background-color: rgba(40, 38, 43, 0.31);
- color: #cbc4cf;
+ background-color: rgba(18, 18, 18, 0.31);
+ color: #e2e2e2;
padding: 0.188rem;
font-weight: 500;
font-size: 1.091rem; }
.osk-key:hover,
.osk-key:focus {
- background-color: rgba(56, 54, 59, 0.31); }
+ background-color: rgba(39, 39, 39, 0.31); }
.osk-key:active {
- background-color: rgba(89, 85, 92, 0.31);
+ background-color: rgba(80, 80, 80, 0.31);
font-size: 1.091rem; }
.osk-key-active {
- background-color: rgba(89, 85, 92, 0.31); }
+ background-color: rgba(80, 80, 80, 0.31); }
.osk-key-normal {
min-width: 2.5rem;
@@ -1362,31 +1363,31 @@ tooltip {
.osk-control-button {
border-radius: 0.682rem;
- background-color: rgba(40, 38, 43, 0.31);
- color: #cbc4cf;
+ background-color: rgba(18, 18, 18, 0.31);
+ color: #e2e2e2;
font-weight: 500;
font-size: 1.091rem;
padding: 0.682rem; }
.osk-control-button:hover,
.osk-control-button:focus {
- background-color: rgba(56, 54, 59, 0.31); }
+ background-color: rgba(39, 39, 39, 0.31); }
.osk-control-button:active {
- background-color: rgba(89, 85, 92, 0.31);
+ background-color: rgba(80, 80, 80, 0.31);
font-size: 1.091rem; }
.sidebar-right {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(154, 154, 154, 0.19);
+ border-left: 1px solid rgba(154, 154, 154, 0.19);
+ border-right: 1px solid rgba(114, 114, 114, 0.145);
+ border-bottom: 1px solid rgba(114, 114, 114, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
border-radius: 1.297rem;
min-width: 27.818rem;
- background-color: #0f0d10;
+ background-color: #070707;
padding: 1.023rem; }
.sideright-show {
@@ -1398,15 +1399,15 @@ tooltip {
.sidebar-left {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(154, 154, 154, 0.19);
+ border-left: 1px solid rgba(154, 154, 154, 0.19);
+ border-right: 1px solid rgba(114, 114, 114, 0.145);
+ border-bottom: 1px solid rgba(114, 114, 114, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
border-radius: 1.297rem;
min-width: 27.818rem;
- background-color: #0f0d10;
+ background-color: #070707;
padding: 1.023rem; }
.sideleft-show {
@@ -1420,12 +1421,12 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
padding: 0.341rem;
- background-color: rgba(30, 28, 32, 0.31); }
+ background-color: rgba(2, 2, 2, 0.31); }
.sidebar-group-nopad {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(30, 28, 32, 0.31); }
+ background-color: rgba(2, 2, 2, 0.31); }
.sidebar-group-invisible {
padding: 0.341rem; }
@@ -1437,47 +1438,47 @@ tooltip {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0.341rem;
- background-color: rgba(30, 28, 32, 0.31); }
+ background-color: rgba(2, 2, 2, 0.31); }
.sidebar-iconbutton {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- color: #e7e1e6;
+ color: #e2e2e2;
min-width: 2.727rem;
min-height: 2.727rem; }
.sidebar-iconbutton:hover,
.sidebar-iconbutton:focus {
- background-color: #6b6278; }
+ background-color: #545454; }
.sidebar-iconbutton:active {
- background-color: #8b8198; }
+ background-color: #787878; }
.sidebar-button {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
padding: 0rem 0.818rem;
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.sidebar-button-nopad {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.sidebar-button:hover,
.sidebar-button:focus {
- background-color: #6b6278; }
+ background-color: #545454; }
.sidebar-button:active {
- background-color: #8b8198; }
+ background-color: #787878; }
.sidebar-button-nopad:hover,
.sidebar-button-nopad:focus {
- background-color: #6b6278; }
+ background-color: #545454; }
.sidebar-button-nopad:active {
- background-color: #8b8198; }
+ background-color: #787878; }
.sidebar-button-left {
border-top-left-radius: 0.818rem;
@@ -1496,20 +1497,20 @@ tooltip {
-gtk-outline-radius: 0.818rem; }
.sidebar-button-active {
- background-color: #d6baff;
- color: #3d1c70; }
+ background-color: #e2e2e2;
+ color: #000000; }
.sidebar-button-active:hover,
.sidebar-button-active:focus {
- background-color: rgba(212, 185, 253, 0.93); }
+ background-color: rgba(224, 224, 224, 0.93); }
.sidebar-button-active:active {
- background-color: rgba(208, 182, 246, 0.79); }
+ background-color: rgba(219, 219, 219, 0.79); }
.sidebar-buttons-separator {
min-width: 0.068rem;
min-height: 0.068rem;
- background-color: #cbc4cf; }
+ background-color: #e2e2e2; }
.sidebar-navrail {
padding: 0rem 1.159rem; }
@@ -1521,19 +1522,19 @@ tooltip {
.sidebar-navrail-btn:hover > box > label:first-child,
.sidebar-navrail-btn:focus > box > label:first-child {
- background-color: rgba(101, 98, 105, 0.379); }
+ background-color: rgba(96, 96, 96, 0.379); }
.sidebar-navrail-btn:active > box > label:first-child {
- background-color: #514e54; }
+ background-color: #464646; }
.sidebar-navrail-btn-active > box > label:first-child {
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.sidebar-navrail-btn-active:hover > box > label:first-child,
.sidebar-navrail-btn-active:focus > box > label:first-child {
- background-color: rgba(76, 68, 89, 0.93);
- color: rgba(232, 220, 245, 0.93); }
+ background-color: rgba(51, 51, 51, 0.93);
+ color: rgba(224, 224, 224, 0.93); }
.sidebar-sysinfo-grouppad {
padding: 1.159rem; }
@@ -1543,8 +1544,8 @@ tooltip {
min-width: 0.818rem;
min-height: 4.091rem;
padding: 0.409rem;
- background-color: #4b4358;
- color: #eadef7;
+ background-color: #313131;
+ color: #e2e2e2;
font-size: 0px; }
.sidebar-memory-swap-circprog {
@@ -1553,16 +1554,16 @@ tooltip {
min-height: 2.255rem;
padding: 0.409rem;
margin: 0.918rem;
- background-color: #4b4358;
- color: #eadef7;
+ background-color: #313131;
+ color: #e2e2e2;
font-size: 0px; }
.sidebar-cpu-circprog {
min-width: 0.818rem;
min-height: 3.409rem;
padding: 0.409rem;
- background-color: #4b4358;
- color: #eadef7;
+ background-color: #313131;
+ color: #e2e2e2;
transition: 1000ms cubic-bezier(0.1, 1, 0, 1);
font-size: 0px; }
@@ -1577,14 +1578,14 @@ tooltip {
-gtk-outline-radius: 9999px;
min-width: 0.273rem;
min-height: 2.045rem;
- background-color: rgba(203, 196, 207, 0.31); }
+ background-color: rgba(226, 226, 226, 0.31); }
.sidebar-scrollbar slider:hover,
.sidebar-scrollbar slider:focus {
- background-color: rgba(203, 196, 207, 0.448); }
+ background-color: rgba(226, 226, 226, 0.448); }
.sidebar-scrollbar slider:active {
- background-color: #7a757d; }
+ background-color: #7a7a7a; }
.sidebar-calendar-btn {
border-radius: 9999px;
@@ -1592,7 +1593,7 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 2.523rem;
min-width: 2.523rem;
- color: #e7e1e6; }
+ color: #e2e2e2; }
.sidebar-calendar-btn:hover,
.sidebar-calendar-btn:focus {
@@ -1606,18 +1607,18 @@ tooltip {
margin-right: -10.341rem; }
.sidebar-calendar-btn-today {
- background-color: #d6baff;
- color: #3d1c70; }
+ background-color: #e2e2e2;
+ color: #000000; }
.sidebar-calendar-btn-today:hover,
.sidebar-calendar-btn-today:focus {
- background-color: rgba(212, 185, 253, 0.93); }
+ background-color: rgba(224, 224, 224, 0.93); }
.sidebar-calendar-btn-today:active {
- background-color: rgba(208, 182, 246, 0.79); }
+ background-color: rgba(219, 219, 219, 0.79); }
.sidebar-calendar-btn-othermonth {
- color: #837f83; }
+ color: #727272; }
.sidebar-calendar-header {
margin: 0.341rem; }
@@ -1626,50 +1627,50 @@ tooltip {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0rem 0.682rem;
- background-color: rgba(40, 38, 43, 0.31);
- color: #cbc4cf; }
+ background-color: rgba(18, 18, 18, 0.31);
+ color: #e2e2e2; }
.sidebar-calendar-monthyear-btn:hover,
.sidebar-calendar-monthyear-btn:focus {
- background-color: rgba(76, 73, 80, 0.3445);
- color: #c3bcc7; }
+ background-color: rgba(64, 64, 64, 0.3445);
+ color: #d8d8d8; }
.sidebar-calendar-monthyear-btn:active {
- background-color: #403e44;
- color: #b3acb6; }
+ background-color: #313131;
+ color: #c3c3c3; }
.sidebar-calendar-monthshift-btn {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
min-width: 2.045rem;
min-height: 2.045rem;
- background-color: rgba(40, 38, 43, 0.31);
- color: #cbc4cf; }
+ background-color: rgba(18, 18, 18, 0.31);
+ color: #e2e2e2; }
.sidebar-calendar-monthshift-btn:hover {
- background-color: rgba(76, 73, 80, 0.3445);
- color: #c3bcc7; }
+ background-color: rgba(64, 64, 64, 0.3445);
+ color: #d8d8d8; }
.sidebar-calendar-monthshift-btn:active {
- background-color: #403e44;
- color: #b3acb6; }
+ background-color: #313131;
+ color: #c3c3c3; }
.sidebar-selector-tab {
border-radius: 0.818rem;
-gtk-outline-radius: 0.818rem;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 2.5rem;
- color: #e7e1e6; }
+ color: #e2e2e2; }
.sidebar-selector-tab:hover,
.sidebar-selector-tab:focus {
- background-color: rgba(101, 98, 105, 0.379); }
+ background-color: rgba(96, 96, 96, 0.379); }
.sidebar-selector-tab:active {
- background-color: #514e54; }
+ background-color: #464646; }
.sidebar-selector-tab-active > box > label {
- color: #d6baff; }
+ color: #e2e2e2; }
.sidebar-selector-highlight-offset {
margin-top: -0.205rem;
@@ -1677,14 +1678,14 @@ tooltip {
.sidebar-selector-highlight {
transition: 180ms ease-in-out;
- color: #d6baff;
+ color: #e2e2e2;
min-height: 0.205rem; }
.sidebar-todo-item {
padding-right: 0.545rem; }
.sidebar-todo-item-even {
- background-color: rgba(40, 38, 43, 0.1); }
+ background-color: rgba(18, 18, 18, 0.1); }
.sidebar-todo-item-action {
border-radius: 9999px;
@@ -1693,49 +1694,49 @@ tooltip {
.sidebar-todo-item-action:hover,
.sidebar-todo-item-action:focus {
- background-color: rgba(70, 67, 72, 0.31); }
+ background-color: rgba(47, 47, 47, 0.31); }
.sidebar-todo-item-action:active {
- background-color: rgba(100, 97, 101, 0.31); }
+ background-color: rgba(80, 80, 80, 0.31); }
.sidebar-todo-crosser {
transition: margin 200ms cubic-bezier(0.1, 1, 0, 1), background-color 0ms;
min-width: 0rem; }
.sidebar-todo-crosser-crossed {
- background-color: #e7e1e6; }
+ background-color: #e2e2e2; }
.sidebar-todo-crosser-removed {
- background-color: #ffb4a9; }
+ background-color: #e2e2e2; }
.sidebar-clipboard-item {
border-radius: 0.818rem;
min-height: 2.045rem;
padding: 0.341rem;
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.sidebar-clipboard-item:hover,
.sidebar-clipboard-item:focus {
- background-color: #5b5368; }
+ background-color: #434343; }
.sidebar-clipboard-item:active {
- background-color: #6b6278; }
+ background-color: #545454; }
.sidebar-todo-new {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- color: #eadef7;
+ color: #e2e2e2;
margin: 0.341rem;
padding: 0.205rem 0.545rem;
- border: 0.068rem solid #e7e1e6; }
+ border: 0.068rem solid #e2e2e2; }
.sidebar-todo-new:hover,
.sidebar-todo-new:focus {
- background-color: #50485d; }
+ background-color: #363636; }
.sidebar-todo-new:active {
- background-color: #6b6278; }
+ background-color: #545454; }
.sidebar-todo-add {
border-radius: 9999px;
@@ -1743,15 +1744,15 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-width: 1.705rem;
min-height: 1.705rem;
- color: #eadef7;
- border: 0.068rem solid #e7e1e6; }
+ color: #e2e2e2;
+ border: 0.068rem solid #e2e2e2; }
.sidebar-todo-add:hover,
.sidebar-todo-add:focus {
- background-color: #50485d; }
+ background-color: #363636; }
.sidebar-todo-add:active {
- background-color: #6b6278; }
+ background-color: #545454; }
.sidebar-todo-add-available {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -1759,44 +1760,44 @@ tooltip {
-gtk-outline-radius: 9999px;
min-width: 1.705rem;
min-height: 1.705rem;
- background-color: #d6baff;
- color: #3d1c70;
- border: 0.068rem solid #d6baff; }
+ background-color: #e2e2e2;
+ color: #000000;
+ border: 0.068rem solid #e2e2e2; }
.sidebar-todo-add-available:hover,
.sidebar-todo-add-available:focus {
- background-color: #d1b5fb; }
+ background-color: #dbdbdb; }
.sidebar-todo-add-available:active {
- background-color: #b79ae2; }
+ background-color: #b5b5b5; }
.sidebar-todo-entry {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 0.818rem;
-gtk-outline-radius: 0.818rem;
- background-color: #28262b;
- color: #cbc4cf;
- caret-color: #cbc4cf;
+ background-color: #121212;
+ color: #e2e2e2;
+ caret-color: #e2e2e2;
margin: 0rem 0.341rem;
min-height: 1.773rem;
min-width: 0rem;
padding: 0.205rem 0.682rem;
- border: 0.068rem solid #7a757d; }
+ border: 0.068rem solid #7a7a7a; }
.sidebar-todo-entry:focus {
- border: 0.068rem solid #bbb4bf; }
+ border: 0.068rem solid #cdcdcd; }
.sidebar-module {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
padding: 0.341rem;
- background-color: rgba(30, 28, 32, 0.31); }
+ background-color: rgba(2, 2, 2, 0.31); }
.sidebar-module-btn-arrow {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
font-family: 'Material Symbols Rounded', 'Material Symbols Outlined', 'Material Symbols Sharp';
- background-color: rgba(40, 38, 43, 0.31);
+ background-color: rgba(18, 18, 18, 0.31);
min-width: 1.705rem;
min-height: 1.705rem; }
@@ -1804,17 +1805,17 @@ tooltip {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0.341rem;
- background-color: #1e1c20; }
+ background-color: #020202; }
.sidebar-chat-apiswitcher-icon {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
min-width: 2.182rem;
min-height: 2.182rem;
- color: #e7e1e6; }
+ color: #e2e2e2; }
.sidebar-chat-apiswitcher-icon-enabled {
- color: #d6baff; }
+ color: #e2e2e2; }
.sidebar-chat-viewport {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -1823,12 +1824,12 @@ tooltip {
.sidebar-chat-textarea {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- border: 0.068rem solid #69656d;
+ border: 0.068rem solid #656565;
padding: 0.682rem; }
.sidebar-chat-entry {
- color: #cbc4cf;
- caret-color: #cbc4cf;
+ color: #e2e2e2;
+ caret-color: #e2e2e2;
min-height: 1.773rem;
min-width: 0rem; }
@@ -1837,25 +1838,25 @@ tooltip {
min-width: 1.705rem;
min-height: 1.705rem;
border-radius: 0.478rem;
- background-color: #69656d; }
+ background-color: #656565; }
.sidebar-chat-send:hover,
.sidebar-chat-send:focus {
- background-color: #6d6971; }
+ background-color: dimgray; }
.sidebar-chat-send:active {
- background-color: #837d89; }
+ background-color: #7e7e7e; }
.sidebar-chat-send-available {
- background-color: #d6baff;
- color: #3d1c70; }
+ background-color: #e2e2e2;
+ color: #000000; }
.sidebar-chat-send-available:hover,
.sidebar-chat-send-available:focus {
- background-color: #d1b5fb; }
+ background-color: #dbdbdb; }
.sidebar-chat-send-available:active {
- background-color: #b79ae2; }
+ background-color: #b5b5b5; }
.sidebar-chat-message {
margin: 0.682rem; }
@@ -1866,13 +1867,13 @@ tooltip {
min-width: 0.136rem; }
.sidebar-chat-indicator-user {
- background-color: #e7e1e6; }
+ background-color: #e2e2e2; }
.sidebar-chat-indicator-bot {
- background-color: #d6baff; }
+ background-color: #e2e2e2; }
.sidebar-chat-indicator-System {
- background-color: #cec2db; }
+ background-color: #e2e2e2; }
.sidebar-chat-name {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
@@ -1892,19 +1893,19 @@ tooltip {
.sidebar-chat-codeblock {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(73, 70, 76, 0.31);
- color: #cbc4cf;
+ background-color: rgba(60, 60, 60, 0.31);
+ color: #e2e2e2;
margin: 0rem 0.682rem;
- border: 0.068rem solid rgba(234, 222, 247, 0.07); }
+ border: 0.068rem solid rgba(226, 226, 226, 0.07); }
.sidebar-chat-codeblock-topbar {
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
margin: 0.273rem;
margin-bottom: 0rem;
- background-color: #4b4358;
- color: #eadef7;
+ background-color: #313131;
+ color: #e2e2e2;
border-radius: 0.886rem;
- border: 0.068rem solid #5b5368;
+ border: 0.068rem solid #434343;
border-top-left-radius: 0.886rem;
border-top-right-radius: 0.886rem;
padding: 0.341rem 0.477rem; }
@@ -1921,10 +1922,10 @@ tooltip {
.sidebar-chat-codeblock-topbar-btn:hover,
.sidebar-chat-codeblock-topbar-btn:focus {
- background-color: #6b6278; }
+ background-color: #545454; }
.sidebar-chat-codeblock-topbar-btn:active {
- background-color: #8b8198; }
+ background-color: #787878; }
.sidebar-chat-codeblock-code {
font-family: 'JetBrains Mono NF', 'JetBrains Mono Nerd Font', 'JetBrains Mono NL', 'SpaceMono NF', 'SpaceMono Nerd Font', monospace;
@@ -1932,7 +1933,7 @@ tooltip {
.sidebar-chat-divider {
min-height: 1px;
- background-color: #69656d;
+ background-color: #656565;
margin: 0rem 0.545rem; }
.sidebar-chat-welcome-txt {
@@ -1963,19 +1964,19 @@ tooltip {
padding: 0.341rem 0.477rem; }
.sidebar-chat-chip-action {
- border: 0.068rem solid #69656d; }
+ border: 0.068rem solid #656565; }
.sidebar-chat-chip-action:hover,
.sidebar-chat-chip-action:focus {
- background-color: #69656d; }
+ background-color: #656565; }
.sidebar-chat-chip-action:active {
- background-color: #86828a;
- color: #565259; }
+ background-color: #8b8b8b;
+ color: #4c4c4c; }
.sidebar-chat-chip-action-active {
- color: #69656d;
- border: 0.068rem solid #69656d; }
+ color: #656565;
+ border: 0.068rem solid #656565; }
.sidebar-pin {
border-radius: 0.818rem;
@@ -1983,47 +1984,47 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 2.386rem;
min-width: 2.386rem;
- color: #e7e1e6; }
+ color: #e2e2e2; }
.sidebar-pin:hover,
.sidebar-pin:focus {
- background-color: rgba(101, 98, 105, 0.379); }
+ background-color: rgba(96, 96, 96, 0.379); }
.sidebar-pin:active {
- background-color: #514e54; }
+ background-color: #464646; }
.sidebar-pin-enabled {
- background-color: #d6baff; }
+ background-color: #e2e2e2; }
.sidebar-pin-enabled label {
- color: #3d1c70; }
+ color: #000000; }
.sidebar-pin-enabled:hover,
.sidebar-pin-enabled:focus {
- background-color: #c7aaf1; }
+ background-color: #cbcbcb; }
.sidebar-pin-enabled:active {
- background-color: #b79ae2; }
+ background-color: #b5b5b5; }
.session-bg {
margin-top: -2.727rem;
- background-color: rgba(15, 13, 16, 0.64); }
+ background-color: rgba(7, 7, 7, 0.64); }
.session-button {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
min-width: 8.182rem;
min-height: 8.182rem;
- background-color: #28262b;
- color: #cbc4cf;
+ background-color: #121212;
+ color: #e2e2e2;
font-size: 3rem; }
.session-button-focused {
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.session-button-desc {
- background-color: #232126;
- color: #d9d3db;
+ background-color: #0a0a0a;
+ color: #e2e2e2;
border-bottom-left-radius: 1.705rem;
border-bottom-right-radius: 1.705rem;
padding: 0.205rem 0.341rem;
@@ -2034,31 +2035,31 @@ tooltip {
-gtk-outline-radius: 1.705rem;
min-width: 8.182rem;
min-height: 5.455rem;
- background-color: #28262b;
- color: #cbc4cf;
+ background-color: #121212;
+ color: #e2e2e2;
font-size: 3rem; }
.notif-low {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(40, 38, 43, 0.45);
- color: #cbc4cf;
+ background-color: rgba(18, 18, 18, 0.45);
+ color: #e2e2e2;
padding: 0.818rem;
padding-right: 1.363rem; }
.notif-normal {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(40, 38, 43, 0.45);
- color: #cbc4cf;
+ background-color: rgba(18, 18, 18, 0.45);
+ color: #e2e2e2;
padding: 0.818rem;
padding-right: 1.363rem; }
.notif-critical {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: #4b4358;
- color: #eadef7;
+ background-color: #313131;
+ color: #e2e2e2;
padding: 0.818rem;
padding-right: 1.363rem; }
@@ -2066,8 +2067,8 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 30.682rem;
- background-color: #0f0d10;
- color: #cbc4cf;
+ background-color: #070707;
+ color: #e2e2e2;
padding: 0.818rem;
padding-right: 1.363rem; }
@@ -2075,8 +2076,8 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 30.682rem;
- background-color: #0f0d10;
- color: #cbc4cf;
+ background-color: #070707;
+ color: #e2e2e2;
padding: 0.818rem;
padding-right: 1.363rem; }
@@ -2084,19 +2085,19 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 30.682rem;
- background-color: #4b4358;
- color: #eadef7;
+ background-color: #313131;
+ color: #e2e2e2;
padding: 0.818rem;
padding-right: 1.363rem; }
.notif-body-low {
- color: #959099; }
+ color: #9d9d9d; }
.notif-body-normal {
- color: #959099; }
+ color: #9d9d9d; }
.notif-body-critical {
- color: #b6abc3; }
+ color: #a8a8a8; }
.notif-icon {
border-radius: 9999px;
@@ -2105,20 +2106,20 @@ tooltip {
min-height: 3.409rem; }
.notif-icon-material {
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.notif-icon-material-low {
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.notif-icon-material-normal {
- background-color: #4b4358;
- color: #eadef7; }
+ background-color: #313131;
+ color: #e2e2e2; }
.notif-icon-material-critical {
- background-color: #eadef7;
- color: #4b4358; }
+ background-color: #e2e2e2;
+ color: #313131; }
.notif-expand-btn {
border-radius: 1.159rem;
@@ -2148,7 +2149,7 @@ tooltip {
.osd-notif {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(15, 13, 16, 0.46);
+ background-color: rgba(7, 7, 7, 0.46);
min-width: 30.682rem; }
.notif-circprog-low {
@@ -2156,21 +2157,21 @@ tooltip {
min-width: 0.136rem;
min-height: 3.409rem;
padding: 0rem;
- color: #eadef7; }
+ color: #e2e2e2; }
.notif-circprog-normal {
transition: 0ms linear;
min-width: 0.136rem;
min-height: 3.409rem;
padding: 0rem;
- color: #eadef7; }
+ color: #e2e2e2; }
.notif-circprog-critical {
transition: 0ms linear;
min-width: 0.136rem;
min-height: 3.409rem;
padding: 0rem;
- color: #4b4358; }
+ color: #313131; }
.osd-music {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2180,9 +2181,9 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 29.659rem;
- background-color: #0f0d10;
+ background-color: #070707;
padding: 0rem 1.023rem;
- background: linear-gradient(127deg, rgba(32, 30, 35, 0.7), rgba(32, 30, 35, 0.55) 70.71%), linear-gradient(217deg, rgba(73, 69, 78, 0.7), rgba(73, 69, 78, 0.55) 70.71%), radial-gradient(circle at 0% 100%, #4b4358 13%, rgba(0, 0, 0, 0) 100%), linear-gradient(336deg, rgba(75, 67, 88, 0.7), rgba(75, 67, 88, 0.55) 70.71%), linear-gradient(#0f0d10, #0f0d10); }
+ background: linear-gradient(127deg, rgba(15, 15, 15, 0.7), rgba(15, 15, 15, 0.55) 70.71%), linear-gradient(217deg, rgba(32, 32, 32, 0.7), rgba(32, 32, 32, 0.55) 70.71%), radial-gradient(circle at 0% 100%, #313131 13%, rgba(0, 0, 0, 0) 100%), linear-gradient(336deg, rgba(49, 49, 49, 0.7), rgba(49, 49, 49, 0.55) 70.71%), linear-gradient(#070707, #070707); }
.osd-music-cover-fallback {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2190,8 +2191,8 @@ tooltip {
-gtk-outline-radius: 0.818rem;
min-width: 7.5rem;
min-height: 7.5rem;
- background-color: rgba(30, 28, 32, 0.31);
- color: #d7d1d7; }
+ background-color: rgba(2, 2, 2, 0.31);
+ color: #cfcfcf; }
.osd-music-cover {
border-radius: 0.818rem;
@@ -2217,13 +2218,13 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1.364rem;
- color: #d7d1d7; }
+ color: #cfcfcf; }
.osd-music-artists {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 0.955rem;
- color: rgba(202, 196, 203, 0.9); }
+ color: rgba(193, 193, 193, 0.9); }
.osd-music-pill {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2232,8 +2233,8 @@ tooltip {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
min-width: 1.833rem;
padding: 0.273rem 0.682rem;
- background-color: rgba(50, 46, 55, 0.5);
- color: #d7d1d7; }
+ background-color: rgba(26, 26, 26, 0.5);
+ color: #cfcfcf; }
.osd-music-controls {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2242,8 +2243,8 @@ tooltip {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
min-width: 1.833rem;
padding: 0.205rem;
- background-color: rgba(50, 46, 55, 0.5);
- color: #d7d1d7; }
+ background-color: rgba(26, 26, 26, 0.5);
+ color: #cfcfcf; }
.osd-music-controlbtn {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2254,10 +2255,10 @@ tooltip {
.osd-music-controlbtn:hover,
.osd-music-controlbtn:focus {
- background-color: rgba(91, 87, 95, 0.55); }
+ background-color: rgba(71, 71, 71, 0.55); }
.osd-music-controlbtn:active {
- background-color: rgba(107, 102, 110, 0.575); }
+ background-color: rgba(89, 89, 89, 0.575); }
.osd-music-controlbtn-txt {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2271,15 +2272,15 @@ tooltip {
min-width: 0.409rem;
min-height: 3.068rem;
padding: 0.273rem;
- color: #d7d1d7; }
+ color: #cfcfcf; }
.osd-music-playstate {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 3.068rem;
min-width: 3.068rem;
border-radius: 10rem;
- background-color: rgba(50, 46, 55, 0.5);
- color: #d7d1d7; }
+ background-color: rgba(26, 26, 26, 0.5);
+ color: #cfcfcf; }
.osd-music-playstate-btn > label {
transition: 50ms cubic-bezier(0.05, 0.7, 0.1, 1);
diff --git a/.config/ags/widgets/bar/leftspace.js b/.config/ags/widgets/bar/leftspace.js
index 42002be4a..16df27325 100644
--- a/.config/ags/widgets/bar/leftspace.js
+++ b/.config/ags/widgets/bar/leftspace.js
@@ -74,18 +74,16 @@ export const ModuleLeftSpace = () => Widget.EventBox({
Widget.Label({
xalign: 0,
className: 'txt-smaller bar-topdesc txt',
- connections: [[Hyprland.active.client, label => { // Hyprland.active.client
+ setup: (self) => self.hook(Hyprland.active.client, label => { // Hyprland.active.client
label.label = Hyprland.active.client._class.length === 0 ? 'Desktop' : Hyprland.active.client._class;
- }]],
+ }),
}),
Widget.Label({
xalign: 0,
className: 'txt txt-smallie',
- connections: [
- [Hyprland.active.client, label => { // Hyprland.active.client
- label.label = Hyprland.active.client._title.length === 0 ? `Workspace ${Hyprland.active.workspace.id}` : truncateTitle(Hyprland.active.client._title);
- }]
- ],
+ setup: (self) => self.hook(Hyprland.active.client, label => { // Hyprland.active.client
+ label.label = Hyprland.active.client._title.length === 0 ? `Workspace ${Hyprland.active.workspace.id}` : truncateTitle(Hyprland.active.client._title);
+ }),
})
]
})
diff --git a/.config/ags/widgets/bar/rightspace.js b/.config/ags/widgets/bar/rightspace.js
index 713935880..9a7687ff4 100644
--- a/.config/ags/widgets/bar/rightspace.js
+++ b/.config/ags/widgets/bar/rightspace.js
@@ -11,11 +11,11 @@ export const ModuleRightSpace = () => {
const barTray = Tray();
const barStatusIcons = StatusIcons({
className: 'bar-statusicons',
- connections: [[App, (self, currentName, visible) => {
+ setup: (self) => self.hook(App, (self, currentName, visible) => {
if (currentName === 'sideright') {
self.toggleClassName('bar-statusicons-active', visible);
}
- }]],
+ }),
});
return Widget.EventBox({
diff --git a/.config/ags/widgets/bar/system.js b/.config/ags/widgets/bar/system.js
index 12e43b643..eae0a1851 100644
--- a/.config/ags/widgets/bar/system.js
+++ b/.config/ags/widgets/bar/system.js
@@ -14,9 +14,10 @@ const BarClock = () => Widget.Box({
children: [
Widget.Label({
className: 'bar-clock',
- connections: [[5000, label => {
+ label: GLib.DateTime.new_now_local().format("%H:%M"),
+ setup: (self) => self.poll(5000, label => {
label.label = GLib.DateTime.new_now_local().format("%H:%M");
- }]],
+ }),
}),
Widget.Label({
className: 'txt-norm txt',
@@ -24,9 +25,10 @@ const BarClock = () => Widget.Box({
}),
Widget.Label({
className: 'txt-smallie txt',
- connections: [[5000, label => {
+ label: GLib.DateTime.new_now_local().format("%A, %d/%m"),
+ setup: (self) => self.poll(5000, label => {
label.label = GLib.DateTime.new_now_local().format("%A, %d/%m");
- }]],
+ }),
}),
],
});
@@ -40,13 +42,13 @@ const BarBattery = () => {
Widget.ProgressBar({ // Progress
vpack: 'center', hexpand: true,
className: 'bar-prog-batt',
- connections: [[5000, (progress) => execAsync(['bash', '-c', command])
+ setup: (self) => self.poll(5000, (progress) => execAsync(['bash', '-c', command])
.then((output) => {
progress.value = Number(output) / 100;
progress.tooltipText = `${name}: ${Number(output)}%`
})
.catch(print)
- ]],
+ ),
}),
]
});
@@ -54,28 +56,28 @@ const BarBattery = () => {
vpack: 'center',
hexpand: true,
className: 'spacing-h-5 bar-batt',
- connections: [[Battery, box => {
+ setup: (self) => self.hook(Battery, box => {
box.toggleClassName('bar-batt-low', Battery.percent <= BATTERY_LOW);
box.toggleClassName('bar-batt-full', Battery.charged);
- }]],
+ }),
children: [
MaterialIcon('settings_heart', 'small'),
Widget.Label({ // Percentage
className: 'bar-batt-percentage',
- connections: [[Battery, label => {
+ setup: (self) => self.hook(Battery, label => {
label.label = `${Battery.percent}`;
- }]],
+ }),
}),
Widget.ProgressBar({ // Progress
vpack: 'center',
hexpand: true,
className: 'bar-prog-batt',
- connections: [[Battery, progress => {
+ setup: (self) => self.hook(Battery, progress => {
progress.value = Math.abs(Battery.percent / 100); // battery could be initially negative wtf
progress.toggleClassName('bar-prog-batt-low', Battery.percent <= BATTERY_LOW);
progress.toggleClassName('bar-prog-batt-full', Battery.charged);
batteryWidget.tooltipText = `Battery: ${Battery.percent}%`
- }]],
+ }),
}),
Widget.Revealer({ // A dot for charging state
transitionDuration: 150,
@@ -87,24 +89,24 @@ const BarBattery = () => {
Widget.Box({
vpack: 'center',
className: 'bar-batt-chargestate-charging-smaller',
- connections: [[Battery, box => {
+ setup: (self) => self.hook(Battery, box => {
box.toggleClassName('bar-batt-chargestate-low', Battery.percent <= BATTERY_LOW);
box.toggleClassName('bar-batt-chargestate-full', Battery.charged);
- }]],
+ }),
}),
Widget.Box({
vpack: 'center',
className: 'bar-batt-chargestate-charging',
- connections: [[Battery, box => {
+ setup: (self) => self.hook(Battery, box => {
box.toggleClassName('bar-batt-chargestate-low', Battery.percent <= BATTERY_LOW);
box.toggleClassName('bar-batt-chargestate-full', Battery.charged);
- }]],
+ }),
}),
]
}),
- connections: [[Battery, revealer => {
+ setup: (self) => self.hook(Battery, revealer => {
revealer.revealChild = Battery.charging;
- }]],
+ }),
}),
],
});
diff --git a/.config/ags/widgets/bar/tray.js b/.config/ags/widgets/bar/tray.js
index 885bec07f..98ca3681d 100644
--- a/.config/ags/widgets/bar/tray.js
+++ b/.config/ags/widgets/bar/tray.js
@@ -51,10 +51,10 @@ export const Tray = (props = {}) => {
trayRevealer.revealChild = false;
}],
],
- connections: [
- [SystemTray, (box, id) => box._onAdded(box, id), 'added'],
- [SystemTray, (box, id) => box._onRemoved(box, id), 'removed'],
- ],
+ setup: (self) => self
+ .hook(SystemTray, (box, id) => box._onAdded(box, id), 'added')
+ .hook(SystemTray, (box, id) => box._onRemoved(box, id), 'removed')
+ ,
});
const trayRevealer = Widget.Revealer({
revealChild: false,
diff --git a/.config/ags/widgets/bar/workspaces.js b/.config/ags/widgets/bar/workspaces.js
index d1355e461..6719f5fc6 100644
--- a/.config/ags/widgets/bar/workspaces.js
+++ b/.config/ags/widgets/bar/workspaces.js
@@ -15,15 +15,13 @@ const activeWorkspaceIndicator = Widget.Box({
vpack: 'center',
hpack: 'start',
className: 'bar-ws-active-box',
- connections: [
- [Hyprland.active.workspace, (box) => {
- const ws = Hyprland.active.workspace.id;
- box.setCss(`
+ setup: (self) => self.hook(Hyprland.active.workspace, (box) => {
+ const ws = Hyprland.active.workspace.id;
+ box.setCss(`
margin-left: ${1.774 * (ws - 1) + 0.068}rem;
`);
- lastWorkspace = ws;
- }],
- ],
+ lastWorkspace = ws;
+ }),
children: [
Widget.Label({
vpack: 'center',
@@ -70,26 +68,24 @@ export const ModuleWorkspaces = () => Widget.EventBox({
className: 'bar-ws txt',
}),
})),
- connections: [
- [Hyprland, (box) => {
- // console.log('update');
- const kids = box.children;
- for (let i = 0; i < kids.length; i++) {
- const child = kids[i];
- child.child.toggleClassName('bar-ws-occupied', false);
- child.child.toggleClassName('bar-ws-occupied-left', false);
- child.child.toggleClassName('bar-ws-occupied-right', false);
- child.child.toggleClassName('bar-ws-occupied-left-right', false);
- }
+ setup: (self) => self.hook(Hyprland, (box) => {
+ // console.log('update');
+ const kids = box.children;
+ for (let i = 0; i < kids.length; i++) {
+ const child = kids[i];
+ child.child.toggleClassName('bar-ws-occupied', false);
+ child.child.toggleClassName('bar-ws-occupied-left', false);
+ child.child.toggleClassName('bar-ws-occupied-right', false);
+ child.child.toggleClassName('bar-ws-occupied-left-right', false);
+ }
- const occupied = Array.from({ length: NUM_OF_WORKSPACES }, (_, i) => Hyprland.getWorkspace(i + 1)?.windows > 0);
- for (let i = 0; i < occupied.length; i++) {
- if (!occupied[i]) continue;
- const child = kids[i];
- child.child.toggleClassName(`bar-ws-occupied${!occupied[i - 1] ? '-left' : ''}${!occupied[i + 1] ? '-right' : ''}`, true);
- }
- }, 'notify::workspaces'],
- ],
+ const occupied = Array.from({ length: NUM_OF_WORKSPACES }, (_, i) => Hyprland.getWorkspace(i + 1)?.windows > 0);
+ for (let i = 0; i < occupied.length; i++) {
+ if (!occupied[i]) continue;
+ const child = kids[i];
+ child.child.toggleClassName(`bar-ws-occupied${!occupied[i - 1] ? '-left' : ''}${!occupied[i + 1] ? '-right' : ''}`, true);
+ }
+ }, 'notify::workspaces'),
}),
overlays: [
activeWorkspaceIndicator,
diff --git a/.config/ags/widgets/desktopbackground/timeandlaunches.js b/.config/ags/widgets/desktopbackground/timeandlaunches.js
index ec3fe0b0e..e25e14a58 100644
--- a/.config/ags/widgets/desktopbackground/timeandlaunches.js
+++ b/.config/ags/widgets/desktopbackground/timeandlaunches.js
@@ -14,16 +14,18 @@ const TimeAndDate = () => Box({
Label({
className: 'bg-time-clock',
xalign: 0,
- connections: [[5000, label => {
+ label: GLib.DateTime.new_now_local().format("%H:%M"),
+ setup: (self) => self.poll(5000, label => {
label.label = GLib.DateTime.new_now_local().format("%H:%M");
- }]],
+ }),
}),
Label({
className: 'bg-time-date',
xalign: 0,
- connections: [[5000, label => {
+ label: GLib.DateTime.new_now_local().format("%A, %d/%m/%Y"),
+ setup: (self) => self.poll(5000, label => {
label.label = GLib.DateTime.new_now_local().format("%A, %d/%m/%Y");
- }]],
+ }),
}),
]
})
@@ -46,7 +48,7 @@ const QuickLaunches = () => Box({
},
className: 'bg-quicklaunch-btn',
child: Label({
- label: `${ item["name"]}`,
+ label: `${item["name"]}`,
}),
setup: (self) => {
setupCursorHover(self);
diff --git a/.config/ags/widgets/dock/dock.js b/.config/ags/widgets/dock/dock.js
index f675bd246..4714d268b 100644
--- a/.config/ags/widgets/dock/dock.js
+++ b/.config/ags/widgets/dock/dock.js
@@ -138,14 +138,11 @@ const Taskbar = () => Widget.Box({
})
}],
],
- connections: [
- // [Hyprland, (box) => box._update(box)],
- [Hyprland, (box, address) => box._add(box, address), 'client-added'],
- [Hyprland, (box, address) => box._remove(box, address), 'client-removed'],
- ],
setup: (self) => {
+ self.hook(Hyprland, (box, address) => box._add(box, address), 'client-added')
+ .hook(Hyprland, (box, address) => box._remove(box, address), 'client-removed')
Utils.timeout(100, () => self._update(self));
- }
+ },
});
const PinnedApps = () => Widget.Box({
@@ -166,18 +163,18 @@ const PinnedApps = () => Widget.Box({
app.launch();
},
onMiddleClick: () => app.launch(),
+ tooltipText: app.name,
setup: (self) => {
self.revealChild = true;
- },
- tooltipText: app.name,
- connections: [[Hyprland, button => {
- const running = Hyprland.clients
- .find(client => client.class.toLowerCase().includes(term)) || false;
+ self.hook(Hyprland, button => {
+ const running = Hyprland.clients
+ .find(client => client.class.toLowerCase().includes(term)) || false;
- button.toggleClassName('notrunning', !running);
- button.toggleClassName('focused', Hyprland.active.client.address == running.address);
- button.set_tooltip_text(running ? running.title : app.name);
- }, 'notify::clients']],
+ button.toggleClassName('notrunning', !running);
+ button.toggleClassName('focused', Hyprland.active.client.address == running.address);
+ button.set_tooltip_text(running ? running.title : app.name);
+ }, 'notify::clients')
+ },
})
newButton.revealChild = true;
return newButton;
@@ -238,13 +235,13 @@ export default () => {
transition: 'slide_up',
transitionDuration: 200,
child: dockContent,
- connections: [
- // [Hyprland, (self) => self._updateShow(self)],
- // [Hyprland.active.workspace, (self) => self._updateShow(self)],
- // [Hyprland.active.client, (self) => self._updateShow(self)],
- // [Hyprland, (self) => self._updateShow(self), 'client-added'],
- // [Hyprland, (self) => self._updateShow(self), 'client-removed'],
- ],
+ // setup: (self) => self
+ // .hook(Hyprland, (self) => self._updateShow(self))
+ // .hook(Hyprland.active.workspace, (self) => self._updateShow(self))
+ // .hook(Hyprland.active.client, (self) => self._updateShow(self))
+ // .hook(Hyprland, (self) => self._updateShow(self), 'client-added')
+ // .hook(Hyprland, (self) => self._updateShow(self), 'client-removed')
+ // ,
})
return EventBox({
onHover: () => {
diff --git a/.config/ags/widgets/indicators/colorscheme.js b/.config/ags/widgets/indicators/colorscheme.js
index 18bd51f8c..02cde92a0 100644
--- a/.config/ags/widgets/indicators/colorscheme.js
+++ b/.config/ags/widgets/indicators/colorscheme.js
@@ -50,9 +50,7 @@ export default () => Widget.Revealer({
transition: 'slide_down',
transitionDuration: 200,
child: colorschemeContent,
- connections: [
- [showColorScheme, (revealer) => {
- revealer.revealChild = showColorScheme.value;
- }],
- ],
+ setup: (self) => self.hook(showColorScheme, (revealer) => {
+ revealer.revealChild = showColorScheme.value;
+ }),
})
diff --git a/.config/ags/widgets/indicators/notificationpopups.js b/.config/ags/widgets/indicators/notificationpopups.js
index fea31bafd..84ac48e97 100644
--- a/.config/ags/widgets/indicators/notificationpopups.js
+++ b/.config/ags/widgets/indicators/notificationpopups.js
@@ -30,12 +30,10 @@ const PopupNotification = (notifObject) => Widget.Box({
const naiveNotifPopupList = Widget.Box({
vertical: true,
className: 'spacing-v-5',
- connections: [
- [Notifications, (box) => {
- box.children = Notifications.popups.reverse()
- .map(notifItem => PopupNotification(notifItem));
- }],
- ],
+ setup: (self) => self.hook(Notifications, (box) => {
+ box.children = Notifications.popups.reverse()
+ .map(notifItem => PopupNotification(notifItem));
+ }),
})
const notifPopupList = Box({
@@ -72,11 +70,11 @@ const notifPopupList = Box({
// box.children = Array.from(box._map.values()).reverse();
}],
],
- connections: [
- [Notifications, (box, id) => box._notify(box, id), 'notified'],
- [Notifications, (box, id) => box._dismiss(box, id), 'dismissed'],
- [Notifications, (box, id) => box._dismiss(box, id, true), 'closed'],
- ],
+ setup: (self) => self
+ .hook(Notifications, (box, id) => box._notify(box, id), 'notified')
+ .hook(Notifications, (box, id) => box._dismiss(box, id), 'dismissed')
+ .hook(Notifications, (box, id) => box._dismiss(box, id, true), 'closed')
+ ,
});
export default () => notifPopupList;
\ No newline at end of file
diff --git a/.config/ags/widgets/onscreenkeyboard/onscreenkeyboard.js b/.config/ags/widgets/onscreenkeyboard/onscreenkeyboard.js
index db793eb10..a347408f9 100644
--- a/.config/ags/widgets/onscreenkeyboard/onscreenkeyboard.js
+++ b/.config/ags/widgets/onscreenkeyboard/onscreenkeyboard.js
@@ -133,11 +133,11 @@ const keyboardWindow = Box({
],
})
],
- connections: [[App, (box, name, visible) => { // Update on open
+ setup: (self) => self.hook(App, (box, name, visible) => { // Update on open
if (name == 'osk' && visible) {
keyboardWindow.setCss(`margin-bottom: -0px;`);
}
- }],],
+ }),
});
const gestureEvBox = EventBox({ child: keyboardWindow })
diff --git a/.config/ags/widgets/sideleft/sideleft.js b/.config/ags/widgets/sideleft/sideleft.js
index 12ea47330..a335eb276 100644
--- a/.config/ags/widgets/sideleft/sideleft.js
+++ b/.config/ags/widgets/sideleft/sideleft.js
@@ -181,8 +181,14 @@ export default () => Box({
}
if (contentStack.shown == 'apis') { // If api tab is focused
// Automatically focus entry when typing
- if (event.get_keyval()[1] >= 32 && event.get_keyval()[1] <= 126 &&
- widget != chatEntry && event.get_keyval()[1] != Gdk.KEY_space) {
+ if ((
+ !(event.get_state()[1] & Gdk.ModifierType.CONTROL_MASK) &&
+ event.get_keyval()[1] >= 32 && event.get_keyval()[1] <= 126 &&
+ widget != chatEntry && event.get_keyval()[1] != Gdk.KEY_space)
+ ||
+ ((event.get_state()[1] & Gdk.ModifierType.CONTROL_MASK) &&
+ event.get_keyval()[1] === Gdk.KEY_v)
+ ) {
chatEntry.grab_focus();
chatEntry.set_text(chatEntry.text + String.fromCharCode(event.get_keyval()[1]));
chatEntry.set_position(-1);
From eb3191d409a7941c6f6cf574366673f5a58426cb Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 29 Dec 2023 19:46:58 +0700
Subject: [PATCH 021/265] notifications: swipe down to expand
---
.config/ags/lib/notification.js | 65 ++++++++++++++++++++++-----------
1 file changed, 44 insertions(+), 21 deletions(-)
diff --git a/.config/ags/lib/notification.js b/.config/ags/lib/notification.js
index 1e647f1e2..9341fc2b4 100644
--- a/.config/ags/lib/notification.js
+++ b/.config/ags/lib/notification.js
@@ -127,7 +127,7 @@ export default ({
const display = Gdk.Display.get_default();
const notifTextPreview = Revealer({
transition: 'slide_down',
- transitionDuration: 300,
+ transitionDuration: 120,
revealChild: true,
child: Label({
xalign: 0,
@@ -142,7 +142,7 @@ export default ({
});
const notifTextExpanded = Revealer({
transition: 'slide_up',
- transitionDuration: 300,
+ transitionDuration: 120,
revealChild: false,
child: Label({
xalign: 0,
@@ -242,10 +242,13 @@ export default ({
// Gesture stuff
const gesture = Gtk.GestureDrag.new(widget);
- var initialDir = 0;
+ var initDirX = 0;
+ var initDirVertical = -1; // -1: unset, 0: horizontal, 1: vertical
+ var expanded = false;
// in px
const startMargin = 0;
- const dragThreshold = 100;
+ const MOVE_THRESHOLD = 10;
+ const DRAG_CONFIRM_THRESHOLD = 100;
// in rem
const maxOffset = 10.227;
const endMargin = 20.455;
@@ -276,35 +279,54 @@ export default ({
children: [notificationContent],
setup: (self) => self
.hook(gesture, self => {
- var offset = gesture.get_offset()[1];
- if (initialDir == 0 && offset != 0)
- initialDir = (offset > 0 ? 1 : -1)
+ var offset_x = gesture.get_offset()[1];
+ var offset_y = gesture.get_offset()[2];
+ if (initDirVertical == -1) {
+ if (Math.abs(offset_y) > MOVE_THRESHOLD)
+ initDirVertical = 1;
+ if (initDirX == 0 && Math.abs(offset_x) > MOVE_THRESHOLD) {
+ initDirVertical = 0;
+ initDirX = (offset_x > 0 ? 1 : -1);
+ }
+ }
- if (offset > 0) {
- if (initialDir < 0)
+ if (initDirVertical == 0 && offset_x > MOVE_THRESHOLD) {
+ if (initDirX < 0)
self.setCss(`margin-left: 0px; margin-right: 0px;`);
else
self.setCss(`
- margin-left: ${Number(offset + startMargin)}px;
- margin-right: -${Number(offset + startMargin)}px;
+ margin-left: ${Number(offset_x + startMargin - MOVE_THRESHOLD)}px;
+ margin-right: -${Number(offset_x + startMargin - MOVE_THRESHOLD)}px;
`);
}
- else if (offset < 0) {
- if (initialDir > 0)
+ else if (initDirVertical == 0 && offset_x < -MOVE_THRESHOLD) {
+ if (initDirX > 0)
self.setCss(`margin-left: 0px; margin-right: 0px;`);
else {
- offset = Math.abs(offset);
+ offset_x = Math.abs(offset_x);
self.setCss(`
- margin-right: ${Number(offset + startMargin)}px;
- margin-left: -${Number(offset + startMargin)}px;
+ margin-right: ${Number(offset_x + startMargin - MOVE_THRESHOLD)}px;
+ margin-left: -${Number(offset_x + startMargin - MOVE_THRESHOLD)}px;
`);
}
}
- wholeThing._dragging = Math.abs(offset) > 10;
+ wholeThing._dragging = Math.abs(offset_x) > 10;
if (widget.window)
widget.window.set_cursor(Gdk.Cursor.new_from_name(display, 'grabbing'));
+
+ if (initDirVertical == 1 && offset_y > MOVE_THRESHOLD && !expanded) {
+ notifTextPreview.revealChild = false;
+ notifTextExpanded.revealChild = true;
+ expanded = true;
+ }
+ else if (initDirVertical == 1 && offset_y < -MOVE_THRESHOLD && expanded) {
+ notifTextPreview.revealChild = true;
+ notifTextExpanded.revealChild = false;
+ expanded = false;
+ }
+
}, 'drag-update')
.hook(gesture, self => {
if (!self._ready) {
@@ -312,10 +334,10 @@ export default ({
self._ready = true;
return;
}
- const offset = gesture.get_offset()[1];
+ const offset_h = gesture.get_offset()[1];
- if (Math.abs(offset) > dragThreshold && offset * initialDir > 0) {
- if (offset > 0) {
+ if (Math.abs(offset_h) > DRAG_CONFIRM_THRESHOLD && offset_h * initDirX > 0) {
+ if (offset_h > 0) {
self.setCss(rightAnim1);
widget.sensitive = false;
}
@@ -342,7 +364,8 @@ export default ({
wholeThing._dragging = false;
}
- initialDir = 0;
+ initDirX = 0;
+ initDirVertical = -1;
}, 'drag-end')
,
})
From 97dd57c80caf622c300126d52007b0b2a0c470f1 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 29 Dec 2023 22:00:16 +0700
Subject: [PATCH 022/265] sync
---
.config/ags/lib/advancedrevealers.js | 18 +-
.config/ags/lib/notification.js | 45 +-
.config/ags/scripts/record-script.sh | 8 +-
.../scripts/templates/gradience/preset.json | 20 +-
.config/ags/scss/_material.scss | 55 +-
.config/ags/scss/_musicmaterial.scss | 30 +-
.config/ags/scss/_musicwal.scss | 25 +
.config/ags/scss/_notifications.scss | 50 ++
.config/ags/scss/_osd.scss | 11 +-
.config/ags/scss/_sidebars.scss | 6 +-
.config/ags/style.css | 798 ++++++++++--------
.../ags/widgets/indicators/indicatorvalues.js | 8 +-
.../ags/widgets/indicators/musiccontrols.js | 10 +-
13 files changed, 644 insertions(+), 440 deletions(-)
diff --git a/.config/ags/lib/advancedrevealers.js b/.config/ags/lib/advancedrevealers.js
index f5f255605..cab2d4ca6 100644
--- a/.config/ags/lib/advancedrevealers.js
+++ b/.config/ags/lib/advancedrevealers.js
@@ -1,23 +1,25 @@
const { Gdk, Gtk } = imports.gi;
-import { App, Service, Utils, Variable, Widget } from '../imports.js';
+import { App, SCREEN_WIDTH, SCREEN_HEIGHT, Service, Utils, Variable, Widget } from '../imports.js';
const { Box, Button, Entry, EventBox, Icon, Label, Revealer, Scrollable, Stack } = Widget;
export const MarginRevealer = ({
transition = 'slide_down',
child,
revealChild,
- showClass = 'element-show', // These are for animation curve
+ showClass = 'element-show', // These are for animation curve, they don't really hide
hideClass = 'element-hide', // Don't put margins in these classes!
extraProperties = [],
...rest
}) => {
- child.toggleClassName(`${revealChild ? showClass : hideClass}`, true);
const widget = Scrollable({
+ ...rest,
+ css: `min-height: 0px;`,
properties: [
['revealChild', true], // It'll be set to false after init if it's supposed to hide
['transition', transition],
['show', (self) => {
if (self._revealChild) return;
+ self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER);
child.toggleClassName(hideClass, false);
child.toggleClassName(showClass, true);
self._revealChild = true;
@@ -38,17 +40,21 @@ export const MarginRevealer = ({
child.css = `margin-top: -${child.get_allocated_height()}px;`;
}],
['toggle', (self) => {
+ console.log('toggle');
if (self._revealChild) self._hide(self);
else self._show(self);
}],
...extraProperties,
],
- child: child,
setup: (self) => {
- self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER);
+ if (!revealChild)
+ self.set_policy(Gtk.PolicyType.ALWAYS, Gtk.PolicyType.ALWAYS);
+ else
+ self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER);
+ self.child = child;
},
- ...rest,
});
+ child.toggleClassName(`${revealChild ? showClass : hideClass}`, true);
return widget;
}
diff --git a/.config/ags/lib/notification.js b/.config/ags/lib/notification.js
index 9341fc2b4..b79cb3be9 100644
--- a/.config/ags/lib/notification.js
+++ b/.config/ags/lib/notification.js
@@ -144,15 +144,37 @@ export default ({
transition: 'slide_up',
transitionDuration: 120,
revealChild: false,
- child: Label({
- xalign: 0,
- className: `txt-smallie notif-body-${notifObject.urgency}`,
- useMarkup: true,
- xalign: 0,
- justify: Gtk.Justification.LEFT,
- maxWidthChars: 24,
- wrap: true,
- label: notifObject.body,
+ child: Box({
+ vertical: true,
+ className: 'spacing-v-10',
+ children: [
+ Label({
+ xalign: 0,
+ className: `txt-smallie notif-body-${notifObject.urgency}`,
+ useMarkup: true,
+ xalign: 0,
+ justify: Gtk.Justification.LEFT,
+ maxWidthChars: 24,
+ wrap: true,
+ label: notifObject.body,
+ }),
+ Box({
+ homogeneous: true,
+ className: 'notif-actions',
+ children: [
+ Button({
+ className: `notif-action notif-action-${notifObject.urgency}`,
+ label: 'Close',
+ onClicked: () => destroyWithAnims(),
+ }),
+ ...notifObject.actions.map(action => Widget.Button({
+ className: `notif-action notif-action-${notifObject.urgency}`,
+ onClicked: () => notifObject.invoke(action.id),
+ label: action.label,
+ }))
+ ],
+ })
+ ]
}),
});
const notifIcon = Box({
@@ -217,11 +239,13 @@ export default ({
notifTextPreview.revealChild = false;
notifTextExpanded.revealChild = true;
self.child.label = 'expand_less';
+ expanded = true;
}
else {
notifTextPreview.revealChild = true;
notifTextExpanded.revealChild = false;
self.child.label = 'expand_more';
+ expanded = true;
}
},
child: MaterialIcon('expand_more', 'norm', {
@@ -240,7 +264,6 @@ export default ({
})
// Gesture stuff
-
const gesture = Gtk.GestureDrag.new(widget);
var initDirX = 0;
var initDirVertical = -1; // -1: unset, 0: horizontal, 1: vertical
@@ -320,11 +343,13 @@ export default ({
notifTextPreview.revealChild = false;
notifTextExpanded.revealChild = true;
expanded = true;
+ notifExpandButton.child.label = 'expand_less';
}
else if (initDirVertical == 1 && offset_y < -MOVE_THRESHOLD && expanded) {
notifTextPreview.revealChild = true;
notifTextExpanded.revealChild = false;
expanded = false;
+ notifExpandButton.child.label = 'expand_more';
}
}, 'drag-update')
diff --git a/.config/ags/scripts/record-script.sh b/.config/ags/scripts/record-script.sh
index 1881e0c2a..904b98f80 100755
--- a/.config/ags/scripts/record-script.sh
+++ b/.config/ags/scripts/record-script.sh
@@ -8,13 +8,13 @@ cd ~/Videos || exit
if [[ "$(pidof wf-recorder)" == "" ]]; then
notify-send "Starting recording" 'recording_'"$(getdate)"'.mp4' -a 'record-script.sh'
if [[ "$1" == "--sound" ]]; then
- wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t --geometry "$(slurp)" --audio=alsa_output.pci-0000_08_00.6.analog-stereo.monitor
+ wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t --geometry "$(slurp)" --audio=alsa_output.pci-0000_08_00.6.analog-stereo.monitor & disown
elif [[ "$1" == "--fullscreen-sound" ]]; then
- wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t --audio=alsa_output.pci-0000_08_00.6.analog-stereo.monitor
+ wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t --audio=alsa_output.pci-0000_08_00.6.analog-stereo.monitor & disown
elif [[ "$1" == "--fullscreen" ]]; then
- wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t
+ wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t & disown
else
- wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t --geometry "$(slurp)"
+ wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t --geometry "$(slurp)" & disown
fi
else
/usr/bin/kill --signal SIGINT wf-recorder
diff --git a/.config/ags/scripts/templates/gradience/preset.json b/.config/ags/scripts/templates/gradience/preset.json
index d23d5efb5..d3205c0c1 100644
--- a/.config/ags/scripts/templates/gradience/preset.json
+++ b/.config/ags/scripts/templates/gradience/preset.json
@@ -87,9 +87,9 @@
"BLACK_500": "#393634",
"BLACK_700": "#33302F",
"BLACK_900": "#2B2928",
- "accent_bg_color": "#d6baff",
- "accent_fg_color": "#3d1c70",
- "accent_color": "#d6baff",
+ "accent_bg_color": "#d8baff",
+ "accent_fg_color": "#3e1b6f",
+ "accent_color": "#d8baff",
"destructive_bg_color": "#ffb4a9",
"destructive_fg_color": "#680003",
"destructive_color": "#ffb4a9",
@@ -104,17 +104,17 @@
"view_bg_color": "#1d1b1e",
"view_fg_color": "#e7e1e6",
"headerbar_bg_color": "mix(@dialog_bg_color, @window_bg_color, 0.5)",
- "headerbar_fg_color": "#eadef7",
- "headerbar_border_color": "#4b4358",
+ "headerbar_fg_color": "#eaddf7",
+ "headerbar_border_color": "#4b4357",
"headerbar_backdrop_color": "@headerbar_bg_color",
"headerbar_shade_color": "rgba(0, 0, 0, 0.09)",
"card_bg_color": "#111012",
- "card_fg_color": "#eadef7",
+ "card_fg_color": "#eaddf7",
"card_shade_color": "rgba(0, 0, 0, 0.09)",
- "dialog_bg_color": "#4b4358",
- "dialog_fg_color": "#eadef7",
- "popover_bg_color": "#4b4358",
- "popover_fg_color": "#eadef7",
+ "dialog_bg_color": "#4b4357",
+ "dialog_fg_color": "#eaddf7",
+ "popover_bg_color": "#4b4357",
+ "popover_fg_color": "#eaddf7",
"thumbnail_bg_color": "#1a1b26",
"thumbnail_fg_color": "#AEE5FA",
"shade_color": "rgba(0, 0, 0, 0.36)",
diff --git a/.config/ags/scss/_material.scss b/.config/ags/scss/_material.scss
index 5f6dc5e69..e76adf207 100755
--- a/.config/ags/scss/_material.scss
+++ b/.config/ags/scss/_material.scss
@@ -1,30 +1,29 @@
$darkmode: true;
-$primary: #e2e2e2;
-$onPrimary: #000000;
-$primaryContainer: #6b6b6b;
-$onPrimaryContainer: #e2e2e2;
-$secondary: #e2e2e2;
-$onSecondary: #000000;
-$secondaryContainer: #313131;
-$onSecondaryContainer: #e2e2e2;
-$tertiary: #e2e2e2;
-$onTertiary: #000000;
-$tertiaryContainer: #000000;
-$onTertiaryContainer: #e2e2e2;
-$error: #e2e2e2;
-$onError: #000000;
-$errorContainer: #000000;
-$onErrorContainer: #e2e2e2;
-$colorbarbg: #000000;
-$background: #000000;
-$onBackground: #e2e2e2;
-$surface: #000000;
-$onSurface: #e2e2e2;
-$surfaceVariant: #202020;
-$onSurfaceVariant: #e2e2e2;
-$outline: #a1a1a1;
+$primary: #d8baff;
+$onPrimary: #3e1b6f;
+$primaryContainer: #563587;
+$onPrimaryContainer: #eedcff;
+$secondary: #cec2da;
+$onSecondary: #352d40;
+$secondaryContainer: #4b4357;
+$onSecondaryContainer: #eaddf7;
+$tertiary: #f1b7c2;
+$onTertiary: #4a252e;
+$tertiaryContainer: #643b44;
+$onTertiaryContainer: #ffd9e1;
+$error: #ffb4a9;
+$onError: #680003;
+$errorContainer: #930006;
+$onErrorContainer: #ffb4a9;
+$colorbarbg: #111012;
+$background: #111012;
+$onBackground: #e7e1e6;
+$surface: #1d1b1e;
+$onSurface: #e7e1e6;
+$surfaceVariant: #4a454e;
+$onSurfaceVariant: #cbc4ce;
+$outline: #958f99;
$shadow: #000000;
-$inverseSurface: #e2e2e2;
-$inverseOnSurface: #000000;
-$inversePrimary: #e2e2e2;
-
+$inverseSurface: #e7e1e6;
+$inverseOnSurface: #323033;
+$inversePrimary: #6e4da1;
diff --git a/.config/ags/scss/_musicmaterial.scss b/.config/ags/scss/_musicmaterial.scss
index 8b1378917..441be992d 100755
--- a/.config/ags/scss/_musicmaterial.scss
+++ b/.config/ags/scss/_musicmaterial.scss
@@ -1 +1,29 @@
-
+$darkmode: true;
+$primary: #c4c0ff;
+$onPrimary: #251a8c;
+$primaryContainer: #3c36a1;
+$onPrimaryContainer: #e3dfff;
+$secondary: #c7c4dd;
+$onSecondary: #2f2e42;
+$secondaryContainer: #464559;
+$onSecondaryContainer: #e3dff9;
+$tertiary: #eab9d1;
+$onTertiary: #472639;
+$tertiaryContainer: #603c50;
+$onTertiaryContainer: #ffd8eb;
+$error: #ffb4a9;
+$onError: #680003;
+$errorContainer: #930006;
+$onErrorContainer: #ffb4a9;
+$colorbarbg: #101012;
+$background: #101012;
+$onBackground: #e5e1e6;
+$surface: #1c1b1f;
+$onSurface: #e5e1e6;
+$surfaceVariant: #47464f;
+$onSurfaceVariant: #c8c5d0;
+$outline: #928f9a;
+$shadow: #000000;
+$inverseSurface: #e5e1e6;
+$inverseOnSurface: #313033;
+$inversePrimary: #5550bb;
diff --git a/.config/ags/scss/_musicwal.scss b/.config/ags/scss/_musicwal.scss
index 8b1378917..6656696fd 100644
--- a/.config/ags/scss/_musicwal.scss
+++ b/.config/ags/scss/_musicwal.scss
@@ -1 +1,26 @@
+// SCSS Variables
+// Generated by 'wal'
+$wallpaper: "/home/end/.cache/ags/media/375d6eb3358763763a73710dca3bbfad1a5434d8";
+// Special
+$background: #0a0919;
+$foreground: #bfacd9;
+$cursor: #bfacd9;
+
+// Colors
+$color0: #0a0919;
+$color1: #2E2693;
+$color2: #382FA6;
+$color3: #4C2F99;
+$color4: #4839B3;
+$color5: #5A49B4;
+$color6: #5C4CC7;
+$color7: #bfacd9;
+$color8: #857897;
+$color9: #2E2693;
+$color10: #382FA6;
+$color11: #4C2F99;
+$color12: #4839B3;
+$color13: #5A49B4;
+$color14: #5C4CC7;
+$color15: #bfacd9;
diff --git a/.config/ags/scss/_notifications.scss b/.config/ags/scss/_notifications.scss
index 7ac21aee9..84726aa85 100644
--- a/.config/ags/scss/_notifications.scss
+++ b/.config/ags/scss/_notifications.scss
@@ -154,3 +154,53 @@ $notif_surface: $t_background;
padding: 0rem;
color: $secondaryContainer;
}
+
+.notif-actions {
+ min-height: 2.045rem;
+}
+
+.notif-action {
+ @include small-rounding;
+}
+
+.notif-action-low {
+ background-color: $l_t_surfaceVariant;
+ color: $onSurfaceVariant;
+}
+
+.notif-action-low:focus,
+.notif-action-low:hover {
+ background-color: mix($t_onSurfaceVariant, $l_t_surfaceVariant, 10%);
+}
+
+.notif-action-low:active {
+ background-color: mix($t_onSurfaceVariant, $l_t_surfaceVariant, 15%);
+}
+
+.notif-action-normal {
+ background-color: $l_t_surfaceVariant;
+ color: $onSurfaceVariant;
+}
+
+.notif-action-normal:focus,
+.notif-action-normal:hover {
+ background-color: mix($t_onSurfaceVariant, $l_t_surfaceVariant, 10%);
+}
+
+.notif-action-normal:active {
+ background-color: mix($t_onSurfaceVariant, $l_t_surfaceVariant, 15%);
+}
+
+.notif-action-critical {
+ background-color: $t_onSurfaceVariant;
+ color: $onSurfaceVariant;
+}
+
+.notif-action-critical:focus,
+.notif-action-critical:hover {
+ background-color: mix($t_onSurfaceVariant, $l_t_surfaceVariant, 10%);
+}
+
+.notif-action-critical:active {
+ background-color: mix($t_onSurfaceVariant, $l_t_surfaceVariant, 15%);
+}
diff --git a/.config/ags/scss/_osd.scss b/.config/ags/scss/_osd.scss
index 9d04f8d48..c9e2c113f 100644
--- a/.config/ags/scss/_osd.scss
+++ b/.config/ags/scss/_osd.scss
@@ -8,12 +8,13 @@
}
.osd-value {
+ @include elevation-border;
+ @include elevation2;
background-color: $t_background;
border-radius: 1.023rem;
padding: 0.625rem 1.023rem;
padding-top: 0.313rem;
margin: 10px;
- @include elevation2;
}
.osd-progress {
@@ -117,4 +118,12 @@
background-color: $background;
color: $onBackground;
box { background-color: $onBackground; }
+}
+
+.osd-show {
+ transition: 200ms cubic-bezier(0.1, 1, 0, 1);
+}
+
+.osd-hide {
+ transition: 190ms cubic-bezier(0.85, 0, 0.15, 1);
}
\ No newline at end of file
diff --git a/.config/ags/scss/_sidebars.scss b/.config/ags/scss/_sidebars.scss
index f2341a8ae..6eb0abb24 100644
--- a/.config/ags/scss/_sidebars.scss
+++ b/.config/ags/scss/_sidebars.scss
@@ -503,10 +503,11 @@ $onChatgpt: $onPrimary;
.sidebar-chat-apiswitcher {
@include full-rounding;
@include group-padding;
- background-color: $surface;
+ background-color: $t_surface;
}
.sidebar-chat-apiswitcher-icon {
+ @include menu_decel;
@include full-rounding;
min-width: 2.182rem;
min-height: 2.182rem;
@@ -514,7 +515,8 @@ $onChatgpt: $onPrimary;
}
.sidebar-chat-apiswitcher-icon-enabled {
- color: $primary;
+ background-color: $secondaryContainer;
+ color: $onSecondaryContainer;
}
.sidebar-chat-viewport {
diff --git a/.config/ags/style.css b/.config/ags/style.css
index 977572676..b6ffc2c55 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -41,13 +41,13 @@
transition: 0ms; }
.txt {
- color: #e2e2e2; }
+ color: #e7e1e6; }
.txt-primary {
- color: #e2e2e2; }
+ color: #d8baff; }
.txt-onSecondaryContainer {
- color: #e2e2e2; }
+ color: #eaddf7; }
.txt-shadow {
text-shadow: 1px 2px 8px rgba(0, 0, 0, 0.69);
@@ -101,10 +101,10 @@
font-size: 0px; }
.txt-subtext {
- color: #a0a0a0; }
+ color: #a6a1a6; }
.txt-action {
- color: #c1c1c1; }
+ color: #c7c1c6; }
.txt-semibold {
font-weight: 500; }
@@ -130,7 +130,7 @@
.separator-circle {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #e2e2e2;
+ background-color: #e7e1e6;
margin: 0rem 0.682rem;
min-width: 0.545rem;
min-height: 0.545rem; }
@@ -361,10 +361,10 @@
transition: 300ms cubic-bezier(0.85, 0, 0.15, 1); }
* {
- caret-color: #e2e2e2; }
+ caret-color: #d8baff; }
* selection {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #cec2da;
+ color: #352d40; }
@keyframes appear {
from {
@@ -379,13 +379,13 @@ tooltip {
animation-iteration-count: 1; }
menu {
- border-top: 1px solid rgba(35, 35, 35, 0.121);
- border-left: 1px solid rgba(35, 35, 35, 0.121);
- border-right: 1px solid rgba(19, 19, 19, 0.1105);
- border-bottom: 1px solid rgba(19, 19, 19, 0.1105);
+ border-top: 1px solid rgba(59, 57, 61, 0.121);
+ border-left: 1px solid rgba(59, 57, 61, 0.121);
+ border-right: 1px solid rgba(45, 43, 47, 0.1105);
+ border-bottom: 1px solid rgba(45, 43, 47, 0.1105);
padding: 0.681rem;
- background: #121212;
- color: #e2e2e2;
+ background: #29262b;
+ color: #cbc4ce;
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
animation-name: appear;
@@ -408,53 +408,53 @@ menu > menuitem {
menu > menuitem:hover,
menu > menuitem:focus {
- background-color: #272727; }
+ background-color: #39363b; }
.separator-line {
- background-color: #121212;
+ background-color: #29262b;
min-width: 0.068rem;
min-height: 0.068rem; }
tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: #121212;
- color: #e2e2e2;
- border: 1px solid #e2e2e2; }
+ background-color: #29262b;
+ color: #cbc4ce;
+ border: 1px solid #cbc4ce; }
.configtoggle-box {
padding: 0.205rem 0.341rem;
border: 0.136rem solid transparent; }
.configtoggle-box:focus {
- border: 0.136rem solid #5c5c5c; }
+ border: 0.136rem solid #6e6b6f; }
.switch-bg {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #050505;
- border: 0.136rem solid #e2e2e2;
+ background-color: #171518;
+ border: 0.136rem solid #e7e1e6;
min-width: 2.864rem;
min-height: 1.637rem; }
.switch-bg-true {
- background-color: #e2e2e2;
- border: 0.136rem solid #e2e2e2; }
+ background-color: #d8baff;
+ border: 0.136rem solid #d8baff; }
.switch-fg {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- background-color: #e2e2e2;
- color: #020202;
+ background-color: #e7e1e6;
+ color: #1e1c20;
min-width: 0.819rem;
min-height: 0.819rem;
margin-left: 0.477rem; }
.switch-fg-true {
- background-color: #000000;
- color: #e2e2e2;
+ background-color: #3e1b6f;
+ color: #d8baff;
min-width: 1.431rem;
min-height: 1.431rem;
margin-left: 1.431rem; }
@@ -467,14 +467,14 @@ tooltip {
.segment-container {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- border: 0.068rem solid #a1a1a1; }
+ border: 0.068rem solid #958f99; }
.segment-container > *:first-child {
border-top-left-radius: 9999px;
border-bottom-left-radius: 9999px; }
.segment-container > * {
- border-right: 0.068rem solid #a1a1a1;
+ border-right: 0.068rem solid #958f99;
padding: 0.341rem 0.682rem; }
.segment-container > *:last-child {
@@ -483,21 +483,21 @@ tooltip {
border-bottom-right-radius: 9999px; }
.segment-btn {
- color: #e2e2e2; }
+ color: #e7e1e6; }
.segment-btn:focus,
.segment-btn:hover {
- background-color: #121212;
- color: #e2e2e2; }
+ background-color: #29262b;
+ color: #cbc4ce; }
.segment-btn-enabled {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.segment-btn-enabled:hover,
.segment-btn-enabled:focus {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.gap-v-5 {
min-height: 0.341rem; }
@@ -518,7 +518,7 @@ tooltip {
min-width: 1.023rem; }
.bar-bg {
- background-color: #070707;
+ background-color: #0f0d10;
min-height: 2.727rem; }
.bar-sidespace {
@@ -528,7 +528,7 @@ tooltip {
padding: 0.2rem; }
.bar-group {
- background-color: rgba(2, 2, 2, 0.31); }
+ background-color: rgba(30, 28, 32, 0.31); }
.bar-group-center {
border-bottom-left-radius: 1.364rem;
@@ -601,18 +601,18 @@ tooltip {
-gtk-outline-radius: 9999px;
min-width: 0.341rem;
min-height: 0.341rem;
- background-color: rgba(24, 24, 24, 0.31);
+ background-color: rgba(50, 48, 52, 0.31);
margin: 0rem 0.341rem; }
.bar-clock {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1.2727rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.bar-date {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.bar-ws {
min-height: 1.636rem;
@@ -632,8 +632,8 @@ tooltip {
min-width: 1.5rem;
font-size: 1.091rem;
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
- background-color: #e2e2e2;
- color: #000000;
+ background-color: #d8baff;
+ color: #3e1b6f;
border-radius: 999px;
margin: 0.068rem; }
@@ -645,67 +645,67 @@ tooltip {
margin: 0rem 0.409rem; }
.bar-ws-occupied {
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4357;
+ color: #eaddf7;
min-width: 1.772rem;
- border-top: 0.068rem solid #e2e2e2;
- border-bottom: 0.068rem solid #e2e2e2; }
+ border-top: 0.068rem solid #eaddf7;
+ border-bottom: 0.068rem solid #eaddf7; }
.bar-ws-occupied-left {
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4357;
+ color: #eaddf7;
min-width: 1.704rem;
border-top-left-radius: 999px;
border-bottom-left-radius: 999px;
- border-left: 0.068rem solid #e2e2e2;
- border-top: 0.068rem solid #e2e2e2;
- border-bottom: 0.068rem solid #e2e2e2;
+ border-left: 0.068rem solid #eaddf7;
+ border-top: 0.068rem solid #eaddf7;
+ border-bottom: 0.068rem solid #eaddf7;
border-right: 0px solid transparent; }
.bar-ws-occupied-right {
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4357;
+ color: #eaddf7;
min-width: 1.704rem;
border-top-right-radius: 999px;
border-bottom-right-radius: 999px;
- border-right: 0.068rem solid #e2e2e2;
- border-top: 0.068rem solid #e2e2e2;
- border-bottom: 0.068rem solid #e2e2e2;
+ border-right: 0.068rem solid #eaddf7;
+ border-top: 0.068rem solid #eaddf7;
+ border-bottom: 0.068rem solid #eaddf7;
border-left: 0px solid transparent; }
.bar-ws-occupied-left-right {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4357;
+ color: #eaddf7;
min-width: 1.636rem;
- border: 0.068rem solid #e2e2e2; }
+ border: 0.068rem solid #eaddf7; }
.bar-ws-empty {
- color: #e2e2e2;
+ color: #e7e1e6;
border-color: transparent; }
.bar-batt {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0rem 0.341rem;
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.bar-sidemodule {
min-width: 26rem; }
.bar-batt-low {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #ffb4a9;
+ color: #930006; }
.bar-batt-full {
background-color: #374b3e;
color: #d1e9d6; }
.bar-batt-prog-low {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #ffb4a9;
+ color: #930006; }
.bar-batt-prog-full {
background-color: #374b3e;
@@ -715,23 +715,23 @@ tooltip {
min-height: 1.770rem;
min-width: 1.770rem;
border-radius: 10rem;
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.bar-music-circprog {
transition: 1000ms cubic-bezier(0.1, 1, 0, 1);
min-width: 0.068rem;
min-height: 1.770rem;
padding: 0rem;
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.bar-music-playstate-playing {
min-height: 1.770rem;
min-width: 1.770rem;
border-radius: 10rem;
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.bar-music-playstate-txt {
transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
@@ -799,10 +799,10 @@ tooltip {
min-width: 0.680rem;
margin: 0rem 0.137rem;
border-radius: 10rem;
- background-color: #e2e2e2; }
+ background-color: #eaddf7; }
.bar-prog-batt-low progress {
- background-color: #000000; }
+ background-color: #930006; }
.bar-prog-batt-full progress {
background-color: #d1e9d6; }
@@ -815,18 +815,18 @@ tooltip {
border-radius: 10rem;
min-width: 0.681rem;
min-height: 0.681rem;
- background-color: #e2e2e2;
- color: #313131; }
+ background-color: #eaddf7;
+ color: #4b4357; }
.bar-batt-chargestate-charging-smaller {
border-radius: 10rem;
min-width: 0.409rem;
min-height: 0.409rem;
- background-color: #e2e2e2;
- color: #313131; }
+ background-color: #eaddf7;
+ color: #4b4357; }
.bar-batt-chargestate-low {
- background-color: #000000; }
+ background-color: #930006; }
.bar-batt-chargestate-full {
background-color: #d1e9d6; }
@@ -837,7 +837,7 @@ tooltip {
font-weight: 500; }
.corner {
- background-color: #070707;
+ background-color: #0f0d10;
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem; }
@@ -849,7 +849,7 @@ tooltip {
.bar-topdesc {
margin-top: -0.136rem;
margin-bottom: -0.341rem;
- color: #a0a0a0; }
+ color: #a6a1a6; }
.bar-space-button {
padding: 0.341rem; }
@@ -892,22 +892,22 @@ tooltip {
padding: 0rem 0.614rem; }
.bar-statusicons-hover {
- background-color: #1d1d1d; }
+ background-color: #252225; }
.bar-statusicons-active {
- background-color: #333333; }
+ background-color: #3a373b; }
.cheatsheet-bg {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(154, 154, 154, 0.19);
- border-left: 1px solid rgba(154, 154, 154, 0.19);
- border-right: 1px solid rgba(114, 114, 114, 0.145);
- border-bottom: 1px solid rgba(114, 114, 114, 0.145);
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
margin-bottom: 0.682rem;
- background-color: #070707;
+ background-color: #0f0d10;
padding: 1.364rem; }
.cheatsheet-key {
@@ -918,16 +918,16 @@ tooltip {
padding: 0.136rem 0.205rem;
border-radius: 0.409rem;
-gtk-outline-radius: 0.409rem;
- color: #e2e2e2;
- border: 0.068rem solid #e2e2e2;
- box-shadow: 0rem 0.136rem 0rem #e2e2e2;
+ color: #d8baff;
+ border: 0.068rem solid #d8baff;
+ box-shadow: 0rem 0.136rem 0rem #d8baff;
font-weight: 500; }
.cheatsheet-key-notkey {
min-height: 1.364rem;
padding: 0.136rem 0.205rem;
margin: 0.17rem;
- color: #e2e2e2; }
+ color: #eedcff; }
.cheatsheet-closebtn {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -938,10 +938,10 @@ tooltip {
.cheatsheet-closebtn:hover,
.cheatsheet-closebtn:focus {
- background-color: #121212; }
+ background-color: #29262b; }
.cheatsheet-closebtn:active {
- background-color: #505050; }
+ background-color: #5a555c; }
.cheatsheet-category-title {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
@@ -956,12 +956,12 @@ tooltip {
.bg-time-clock {
font-family: 'Gabarito';
font-size: 5.795rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.bg-time-date {
font-family: 'Gabarito';
font-size: 2.591rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.bg-distro-box {
border-radius: 1.705rem;
@@ -972,12 +972,12 @@ tooltip {
.bg-distro-txt {
font-family: 'Gabarito';
font-size: 1.432rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.bg-distro-name {
font-family: 'Gabarito';
font-size: 1.432rem;
- color: #e2e2e2; }
+ color: #eaddf7; }
.bg-graph {
color: rgba(255, 255, 255, 0.5);
@@ -986,25 +986,25 @@ tooltip {
.bg-quicklaunch-title {
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
- color: #e2e2e2; }
+ color: #cbc4ce; }
.bg-quicklaunch-btn {
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #121212;
- color: #e2e2e2;
- border: 0.068rem solid #a0a0a0;
+ background-color: #29262b;
+ color: #cbc4ce;
+ border: 0.068rem solid #a6a1a6;
min-width: 4.432rem;
min-height: 2.045rem;
padding: 0.273rem 0.682rem; }
.bg-quicklaunch-btn:hover,
.bg-quicklaunch-btn:focus {
- background-color: #1c1c1c; }
+ background-color: #312e33; }
.bg-quicklaunch-btn:active {
- background-color: #272727; }
+ background-color: #39363b; }
.bg-system-bg {
border-radius: 1.159rem;
@@ -1016,14 +1016,14 @@ tooltip {
min-height: 4.091rem;
font-size: 0px;
padding: 0rem;
- background-color: #121212; }
+ background-color: #29262b; }
.dock-bg {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
- background-color: #070707;
+ background-color: #0f0d10;
padding: 0.682rem; }
.dock-app-btn {
@@ -1033,10 +1033,10 @@ tooltip {
.dock-app-btn:hover,
.dock-app-btn:focus {
- background-color: rgba(13, 13, 13, 0.31); }
+ background-color: rgba(40, 38, 42, 0.31); }
.dock-app-btn:active {
- background-color: rgba(36, 36, 36, 0.31); }
+ background-color: rgba(60, 58, 62, 0.31); }
.dock-app-icon {
min-width: 3.409rem;
@@ -1044,20 +1044,24 @@ tooltip {
.dock-separator {
min-width: 0.068rem;
- background-color: #121212; }
+ background-color: #29262b; }
.osd-bg {
min-width: 8.864rem;
min-height: 3.409rem; }
.osd-value {
- background-color: #070707;
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
+ margin: 0.476rem;
+ background-color: #0f0d10;
border-radius: 1.023rem;
padding: 0.625rem 1.023rem;
padding-top: 0.313rem;
- margin: 10px;
- box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
- margin: 0.476rem; }
+ margin: 10px; }
.osd-progress {
min-height: 0.955rem;
@@ -1069,36 +1073,36 @@ tooltip {
min-height: 0.954rem;
min-width: 0.068rem;
border-radius: 10rem;
- background-color: #313131; }
+ background-color: #4b4357; }
.osd-progress progress {
transition: 200ms cubic-bezier(0.1, 1, 0, 1);
min-height: 0.680rem;
min-width: 0.680rem;
margin: 0rem 0.137rem;
border-radius: 10rem;
- background-color: #e2e2e2; }
+ background-color: #eaddf7; }
.osd-icon {
- color: #e2e2e2; }
+ color: #eedcff; }
.osd-label {
font-size: 1.023rem;
font-weight: 500;
- color: #e2e2e2;
+ color: #e7e1e6;
margin-top: 0.341rem; }
.osd-value-txt {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1.688rem;
font-weight: 500;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.osd-notifs {
padding-top: 0.313rem; }
.osd-colorscheme {
border-radius: 1.023rem;
- background-color: #070707;
+ background-color: #0f0d10;
padding: 1.023rem;
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem; }
@@ -1116,46 +1120,52 @@ tooltip {
margin: 0.409rem; }
.osd-color-primary {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #d8baff;
+ color: #3e1b6f; }
.osd-color-primary box {
- background-color: #000000; }
+ background-color: #3e1b6f; }
.osd-color-primaryContainer {
- background-color: #6b6b6b;
- color: #e2e2e2; }
+ background-color: #563587;
+ color: #eedcff; }
.osd-color-primaryContainer box {
- background-color: #e2e2e2; }
+ background-color: #eedcff; }
.osd-color-secondary {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #cec2da;
+ color: #352d40; }
.osd-color-secondary box {
- background-color: #000000; }
+ background-color: #352d40; }
.osd-color-secondaryContainer {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.osd-color-secondaryContainer box {
- background-color: #e2e2e2; }
+ background-color: #eaddf7; }
.osd-color-surfaceVariant {
- background-color: #121212;
- color: #e2e2e2; }
+ background-color: #29262b;
+ color: #cbc4ce; }
.osd-color-surfaceVariant box {
- background-color: #e2e2e2; }
+ background-color: #cbc4ce; }
.osd-color-surface {
- background-color: #020202;
- color: #e2e2e2; }
+ background-color: #1e1c20;
+ color: #e7e1e6; }
.osd-color-surface box {
- background-color: #e2e2e2; }
+ background-color: #e7e1e6; }
.osd-color-background {
- background-color: #070707;
- color: #e2e2e2; }
+ background-color: #0f0d10;
+ color: #e7e1e6; }
.osd-color-background box {
- background-color: #e2e2e2; }
+ background-color: #e7e1e6; }
+
+.osd-show {
+ transition: 200ms cubic-bezier(0.1, 1, 0, 1); }
+
+.osd-hide {
+ transition: 190ms cubic-bezier(0.85, 0, 0.15, 1); }
.overview-window {
margin-top: 2.727rem; }
@@ -1164,29 +1174,29 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(154, 154, 154, 0.19);
- border-left: 1px solid rgba(154, 154, 154, 0.19);
- border-right: 1px solid rgba(114, 114, 114, 0.145);
- border-bottom: 1px solid rgba(114, 114, 114, 0.145);
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
min-width: 13.636rem;
min-height: 3.409rem;
padding: 0rem 1.364rem;
padding-right: 2.864rem;
- background-color: #070707;
- color: #e2e2e2;
+ background-color: #0f0d10;
+ color: #e7e1e6;
caret-color: transparent; }
.overview-search-box selection {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #cec2da;
+ color: #352d40; }
.overview-search-box-extended {
min-width: 25.909rem;
- caret-color: #e2e2e2; }
+ caret-color: #eaddf7; }
.overview-search-prompt {
- color: #a0a0a0; }
+ color: #a6a1a6; }
.overview-search-icon {
margin: 0rem 1.023rem; }
@@ -1202,16 +1212,16 @@ tooltip {
.overview-search-results {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(154, 154, 154, 0.19);
- border-left: 1px solid rgba(154, 154, 154, 0.19);
- border-right: 1px solid rgba(114, 114, 114, 0.145);
- border-bottom: 1px solid rgba(114, 114, 114, 0.145);
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
min-width: 28.773rem;
padding: 0.682rem;
- background-color: #070707;
- color: #e2e2e2; }
+ background-color: #0f0d10;
+ color: #e7e1e6; }
.overview-search-results-icon {
margin: 0rem 0.682rem;
@@ -1245,43 +1255,43 @@ tooltip {
.overview-tasks {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(154, 154, 154, 0.19);
- border-left: 1px solid rgba(154, 154, 154, 0.19);
- border-right: 1px solid rgba(114, 114, 114, 0.145);
- border-bottom: 1px solid rgba(114, 114, 114, 0.145);
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
padding: 0.341rem;
- background-color: #070707;
- color: #e2e2e2; }
+ background-color: #0f0d10;
+ color: #e7e1e6; }
.overview-tasks-workspace {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
margin: 0.341rem;
- background-color: rgba(25, 25, 25, 0.1147); }
+ background-color: rgba(51, 48, 52, 0.1147); }
.overview-tasks-workspace-number {
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
- color: rgba(210, 210, 210, 0.31); }
+ color: rgba(217, 211, 216, 0.31); }
.overview-tasks-window {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- background-color: rgba(49, 49, 49, 0.5);
- color: #e2e2e2;
- border: 0.068rem solid rgba(226, 226, 226, 0.07); }
+ background-color: rgba(75, 67, 87, 0.5);
+ color: #eaddf7;
+ border: 0.068rem solid rgba(234, 221, 247, 0.07); }
.overview-tasks-window:hover,
.overview-tasks-window:focus {
- background-color: rgba(73, 73, 73, 0.525); }
+ background-color: rgba(94, 83, 110, 0.525); }
.overview-tasks-window:active {
- background-color: rgba(93, 93, 93, 0.55); }
+ background-color: rgba(110, 97, 129, 0.55); }
.overview-tasks-window-selected {
- background-color: rgba(93, 93, 93, 0.55); }
+ background-color: rgba(110, 97, 129, 0.55); }
.overview-tasks-window-dragging {
opacity: 0.2; }
@@ -1289,13 +1299,13 @@ tooltip {
.osk-window {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(154, 154, 154, 0.19);
- border-left: 1px solid rgba(154, 154, 154, 0.19);
- border-right: 1px solid rgba(114, 114, 114, 0.145);
- border-bottom: 1px solid rgba(114, 114, 114, 0.145);
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
- background-color: #070707; }
+ background-color: #0f0d10; }
.osk-body {
padding: 1.023rem;
@@ -1312,7 +1322,7 @@ tooltip {
.osk-dragline {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #121212;
+ background-color: #29262b;
min-height: 0.273rem;
min-width: 10.227rem;
margin-top: 0.545rem;
@@ -1320,22 +1330,22 @@ tooltip {
.osk-key {
border-radius: 0.682rem;
- background-color: rgba(18, 18, 18, 0.31);
- color: #e2e2e2;
+ background-color: rgba(41, 38, 43, 0.31);
+ color: #cbc4ce;
padding: 0.188rem;
font-weight: 500;
font-size: 1.091rem; }
.osk-key:hover,
.osk-key:focus {
- background-color: rgba(39, 39, 39, 0.31); }
+ background-color: rgba(57, 54, 59, 0.31); }
.osk-key:active {
- background-color: rgba(80, 80, 80, 0.31);
+ background-color: rgba(90, 85, 92, 0.31);
font-size: 1.091rem; }
.osk-key-active {
- background-color: rgba(80, 80, 80, 0.31); }
+ background-color: rgba(90, 85, 92, 0.31); }
.osk-key-normal {
min-width: 2.5rem;
@@ -1363,31 +1373,31 @@ tooltip {
.osk-control-button {
border-radius: 0.682rem;
- background-color: rgba(18, 18, 18, 0.31);
- color: #e2e2e2;
+ background-color: rgba(41, 38, 43, 0.31);
+ color: #cbc4ce;
font-weight: 500;
font-size: 1.091rem;
padding: 0.682rem; }
.osk-control-button:hover,
.osk-control-button:focus {
- background-color: rgba(39, 39, 39, 0.31); }
+ background-color: rgba(57, 54, 59, 0.31); }
.osk-control-button:active {
- background-color: rgba(80, 80, 80, 0.31);
+ background-color: rgba(90, 85, 92, 0.31);
font-size: 1.091rem; }
.sidebar-right {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- border-top: 1px solid rgba(154, 154, 154, 0.19);
- border-left: 1px solid rgba(154, 154, 154, 0.19);
- border-right: 1px solid rgba(114, 114, 114, 0.145);
- border-bottom: 1px solid rgba(114, 114, 114, 0.145);
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
border-radius: 1.297rem;
min-width: 27.818rem;
- background-color: #070707;
+ background-color: #0f0d10;
padding: 1.023rem; }
.sideright-show {
@@ -1399,15 +1409,15 @@ tooltip {
.sidebar-left {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- border-top: 1px solid rgba(154, 154, 154, 0.19);
- border-left: 1px solid rgba(154, 154, 154, 0.19);
- border-right: 1px solid rgba(114, 114, 114, 0.145);
- border-bottom: 1px solid rgba(114, 114, 114, 0.145);
+ border-top: 1px solid rgba(166, 162, 166, 0.19);
+ border-left: 1px solid rgba(166, 162, 166, 0.19);
+ border-right: 1px solid rgba(131, 127, 131, 0.145);
+ border-bottom: 1px solid rgba(131, 127, 131, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
border-radius: 1.297rem;
min-width: 27.818rem;
- background-color: #070707;
+ background-color: #0f0d10;
padding: 1.023rem; }
.sideleft-show {
@@ -1421,12 +1431,12 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
padding: 0.341rem;
- background-color: rgba(2, 2, 2, 0.31); }
+ background-color: rgba(30, 28, 32, 0.31); }
.sidebar-group-nopad {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(2, 2, 2, 0.31); }
+ background-color: rgba(30, 28, 32, 0.31); }
.sidebar-group-invisible {
padding: 0.341rem; }
@@ -1438,47 +1448,47 @@ tooltip {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0.341rem;
- background-color: rgba(2, 2, 2, 0.31); }
+ background-color: rgba(30, 28, 32, 0.31); }
.sidebar-iconbutton {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- color: #e2e2e2;
+ color: #e7e1e6;
min-width: 2.727rem;
min-height: 2.727rem; }
.sidebar-iconbutton:hover,
.sidebar-iconbutton:focus {
- background-color: #545454; }
+ background-color: #6b6277; }
.sidebar-iconbutton:active {
- background-color: #787878; }
+ background-color: #8b8197; }
.sidebar-button {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
padding: 0rem 0.818rem;
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.sidebar-button-nopad {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.sidebar-button:hover,
.sidebar-button:focus {
- background-color: #545454; }
+ background-color: #6b6277; }
.sidebar-button:active {
- background-color: #787878; }
+ background-color: #8b8197; }
.sidebar-button-nopad:hover,
.sidebar-button-nopad:focus {
- background-color: #545454; }
+ background-color: #6b6277; }
.sidebar-button-nopad:active {
- background-color: #787878; }
+ background-color: #8b8197; }
.sidebar-button-left {
border-top-left-radius: 0.818rem;
@@ -1497,20 +1507,20 @@ tooltip {
-gtk-outline-radius: 0.818rem; }
.sidebar-button-active {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #d8baff;
+ color: #3e1b6f; }
.sidebar-button-active:hover,
.sidebar-button-active:focus {
- background-color: rgba(224, 224, 224, 0.93); }
+ background-color: rgba(214, 185, 253, 0.93); }
.sidebar-button-active:active {
- background-color: rgba(219, 219, 219, 0.79); }
+ background-color: rgba(210, 182, 246, 0.79); }
.sidebar-buttons-separator {
min-width: 0.068rem;
min-height: 0.068rem;
- background-color: #e2e2e2; }
+ background-color: #cbc4ce; }
.sidebar-navrail {
padding: 0rem 1.159rem; }
@@ -1522,19 +1532,19 @@ tooltip {
.sidebar-navrail-btn:hover > box > label:first-child,
.sidebar-navrail-btn:focus > box > label:first-child {
- background-color: rgba(96, 96, 96, 0.379); }
+ background-color: rgba(102, 98, 104, 0.379); }
.sidebar-navrail-btn:active > box > label:first-child {
- background-color: #464646; }
+ background-color: #524e54; }
.sidebar-navrail-btn-active > box > label:first-child {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.sidebar-navrail-btn-active:hover > box > label:first-child,
.sidebar-navrail-btn-active:focus > box > label:first-child {
- background-color: rgba(51, 51, 51, 0.93);
- color: rgba(224, 224, 224, 0.93); }
+ background-color: rgba(76, 68, 88, 0.93);
+ color: rgba(232, 219, 245, 0.93); }
.sidebar-sysinfo-grouppad {
padding: 1.159rem; }
@@ -1544,8 +1554,8 @@ tooltip {
min-width: 0.818rem;
min-height: 4.091rem;
padding: 0.409rem;
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4357;
+ color: #eaddf7;
font-size: 0px; }
.sidebar-memory-swap-circprog {
@@ -1554,16 +1564,16 @@ tooltip {
min-height: 2.255rem;
padding: 0.409rem;
margin: 0.918rem;
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4357;
+ color: #eaddf7;
font-size: 0px; }
.sidebar-cpu-circprog {
min-width: 0.818rem;
min-height: 3.409rem;
padding: 0.409rem;
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4357;
+ color: #eaddf7;
transition: 1000ms cubic-bezier(0.1, 1, 0, 1);
font-size: 0px; }
@@ -1578,14 +1588,14 @@ tooltip {
-gtk-outline-radius: 9999px;
min-width: 0.273rem;
min-height: 2.045rem;
- background-color: rgba(226, 226, 226, 0.31); }
+ background-color: rgba(203, 196, 206, 0.31); }
.sidebar-scrollbar slider:hover,
.sidebar-scrollbar slider:focus {
- background-color: rgba(226, 226, 226, 0.448); }
+ background-color: rgba(203, 196, 206, 0.448); }
.sidebar-scrollbar slider:active {
- background-color: #7a7a7a; }
+ background-color: #7a757d; }
.sidebar-calendar-btn {
border-radius: 9999px;
@@ -1593,7 +1603,7 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 2.523rem;
min-width: 2.523rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.sidebar-calendar-btn:hover,
.sidebar-calendar-btn:focus {
@@ -1607,18 +1617,18 @@ tooltip {
margin-right: -10.341rem; }
.sidebar-calendar-btn-today {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #d8baff;
+ color: #3e1b6f; }
.sidebar-calendar-btn-today:hover,
.sidebar-calendar-btn-today:focus {
- background-color: rgba(224, 224, 224, 0.93); }
+ background-color: rgba(214, 185, 253, 0.93); }
.sidebar-calendar-btn-today:active {
- background-color: rgba(219, 219, 219, 0.79); }
+ background-color: rgba(210, 182, 246, 0.79); }
.sidebar-calendar-btn-othermonth {
- color: #727272; }
+ color: #837f83; }
.sidebar-calendar-header {
margin: 0.341rem; }
@@ -1627,50 +1637,50 @@ tooltip {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0rem 0.682rem;
- background-color: rgba(18, 18, 18, 0.31);
- color: #e2e2e2; }
+ background-color: rgba(41, 38, 43, 0.31);
+ color: #cbc4ce; }
.sidebar-calendar-monthyear-btn:hover,
.sidebar-calendar-monthyear-btn:focus {
- background-color: rgba(64, 64, 64, 0.3445);
- color: #d8d8d8; }
+ background-color: rgba(77, 73, 79, 0.3445);
+ color: #c3bcc6; }
.sidebar-calendar-monthyear-btn:active {
- background-color: #313131;
- color: #c3c3c3; }
+ background-color: #413e43;
+ color: #b3acb6; }
.sidebar-calendar-monthshift-btn {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
min-width: 2.045rem;
min-height: 2.045rem;
- background-color: rgba(18, 18, 18, 0.31);
- color: #e2e2e2; }
+ background-color: rgba(41, 38, 43, 0.31);
+ color: #cbc4ce; }
.sidebar-calendar-monthshift-btn:hover {
- background-color: rgba(64, 64, 64, 0.3445);
- color: #d8d8d8; }
+ background-color: rgba(77, 73, 79, 0.3445);
+ color: #c3bcc6; }
.sidebar-calendar-monthshift-btn:active {
- background-color: #313131;
- color: #c3c3c3; }
+ background-color: #413e43;
+ color: #b3acb6; }
.sidebar-selector-tab {
border-radius: 0.818rem;
-gtk-outline-radius: 0.818rem;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 2.5rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.sidebar-selector-tab:hover,
.sidebar-selector-tab:focus {
- background-color: rgba(96, 96, 96, 0.379); }
+ background-color: rgba(102, 98, 104, 0.379); }
.sidebar-selector-tab:active {
- background-color: #464646; }
+ background-color: #524e54; }
.sidebar-selector-tab-active > box > label {
- color: #e2e2e2; }
+ color: #d8baff; }
.sidebar-selector-highlight-offset {
margin-top: -0.205rem;
@@ -1678,14 +1688,14 @@ tooltip {
.sidebar-selector-highlight {
transition: 180ms ease-in-out;
- color: #e2e2e2;
+ color: #d8baff;
min-height: 0.205rem; }
.sidebar-todo-item {
padding-right: 0.545rem; }
.sidebar-todo-item-even {
- background-color: rgba(18, 18, 18, 0.1); }
+ background-color: rgba(41, 38, 43, 0.1); }
.sidebar-todo-item-action {
border-radius: 9999px;
@@ -1694,49 +1704,49 @@ tooltip {
.sidebar-todo-item-action:hover,
.sidebar-todo-item-action:focus {
- background-color: rgba(47, 47, 47, 0.31); }
+ background-color: rgba(70, 67, 72, 0.31); }
.sidebar-todo-item-action:active {
- background-color: rgba(80, 80, 80, 0.31); }
+ background-color: rgba(100, 97, 101, 0.31); }
.sidebar-todo-crosser {
transition: margin 200ms cubic-bezier(0.1, 1, 0, 1), background-color 0ms;
min-width: 0rem; }
.sidebar-todo-crosser-crossed {
- background-color: #e2e2e2; }
+ background-color: #e7e1e6; }
.sidebar-todo-crosser-removed {
- background-color: #e2e2e2; }
+ background-color: #ffb4a9; }
.sidebar-clipboard-item {
border-radius: 0.818rem;
min-height: 2.045rem;
padding: 0.341rem;
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.sidebar-clipboard-item:hover,
.sidebar-clipboard-item:focus {
- background-color: #434343; }
+ background-color: #5b5267; }
.sidebar-clipboard-item:active {
- background-color: #545454; }
+ background-color: #6b6277; }
.sidebar-todo-new {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- color: #e2e2e2;
+ color: #eaddf7;
margin: 0.341rem;
padding: 0.205rem 0.545rem;
- border: 0.068rem solid #e2e2e2; }
+ border: 0.068rem solid #e7e1e6; }
.sidebar-todo-new:hover,
.sidebar-todo-new:focus {
- background-color: #363636; }
+ background-color: #50485c; }
.sidebar-todo-new:active {
- background-color: #545454; }
+ background-color: #6b6277; }
.sidebar-todo-add {
border-radius: 9999px;
@@ -1744,15 +1754,15 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-width: 1.705rem;
min-height: 1.705rem;
- color: #e2e2e2;
- border: 0.068rem solid #e2e2e2; }
+ color: #eaddf7;
+ border: 0.068rem solid #e7e1e6; }
.sidebar-todo-add:hover,
.sidebar-todo-add:focus {
- background-color: #363636; }
+ background-color: #50485c; }
.sidebar-todo-add:active {
- background-color: #545454; }
+ background-color: #6b6277; }
.sidebar-todo-add-available {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -1760,44 +1770,44 @@ tooltip {
-gtk-outline-radius: 9999px;
min-width: 1.705rem;
min-height: 1.705rem;
- background-color: #e2e2e2;
- color: #000000;
- border: 0.068rem solid #e2e2e2; }
+ background-color: #d8baff;
+ color: #3e1b6f;
+ border: 0.068rem solid #d8baff; }
.sidebar-todo-add-available:hover,
.sidebar-todo-add-available:focus {
- background-color: #dbdbdb; }
+ background-color: #d3b5fb; }
.sidebar-todo-add-available:active {
- background-color: #b5b5b5; }
+ background-color: #b99ae2; }
.sidebar-todo-entry {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 0.818rem;
-gtk-outline-radius: 0.818rem;
- background-color: #121212;
- color: #e2e2e2;
- caret-color: #e2e2e2;
+ background-color: #29262b;
+ color: #cbc4ce;
+ caret-color: #cbc4ce;
margin: 0rem 0.341rem;
min-height: 1.773rem;
min-width: 0rem;
padding: 0.205rem 0.682rem;
- border: 0.068rem solid #7a7a7a; }
+ border: 0.068rem solid #7a757d; }
.sidebar-todo-entry:focus {
- border: 0.068rem solid #cdcdcd; }
+ border: 0.068rem solid #bbb4be; }
.sidebar-module {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
padding: 0.341rem;
- background-color: rgba(2, 2, 2, 0.31); }
+ background-color: rgba(30, 28, 32, 0.31); }
.sidebar-module-btn-arrow {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
font-family: 'Material Symbols Rounded', 'Material Symbols Outlined', 'Material Symbols Sharp';
- background-color: rgba(18, 18, 18, 0.31);
+ background-color: rgba(41, 38, 43, 0.31);
min-width: 1.705rem;
min-height: 1.705rem; }
@@ -1805,17 +1815,19 @@ tooltip {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0.341rem;
- background-color: #020202; }
+ background-color: rgba(30, 28, 32, 0.31); }
.sidebar-chat-apiswitcher-icon {
+ transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 9999px;
-gtk-outline-radius: 9999px;
min-width: 2.182rem;
min-height: 2.182rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.sidebar-chat-apiswitcher-icon-enabled {
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.sidebar-chat-viewport {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -1824,12 +1836,12 @@ tooltip {
.sidebar-chat-textarea {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- border: 0.068rem solid #656565;
+ border: 0.068rem solid #6a656c;
padding: 0.682rem; }
.sidebar-chat-entry {
- color: #e2e2e2;
- caret-color: #e2e2e2;
+ color: #cbc4ce;
+ caret-color: #cbc4ce;
min-height: 1.773rem;
min-width: 0rem; }
@@ -1838,25 +1850,25 @@ tooltip {
min-width: 1.705rem;
min-height: 1.705rem;
border-radius: 0.478rem;
- background-color: #656565; }
+ background-color: #6a656c; }
.sidebar-chat-send:hover,
.sidebar-chat-send:focus {
- background-color: dimgray; }
+ background-color: #6e6970; }
.sidebar-chat-send:active {
- background-color: #7e7e7e; }
+ background-color: #847d88; }
.sidebar-chat-send-available {
- background-color: #e2e2e2;
- color: #000000; }
+ background-color: #d8baff;
+ color: #3e1b6f; }
.sidebar-chat-send-available:hover,
.sidebar-chat-send-available:focus {
- background-color: #dbdbdb; }
+ background-color: #d3b5fb; }
.sidebar-chat-send-available:active {
- background-color: #b5b5b5; }
+ background-color: #b99ae2; }
.sidebar-chat-message {
margin: 0.682rem; }
@@ -1867,13 +1879,13 @@ tooltip {
min-width: 0.136rem; }
.sidebar-chat-indicator-user {
- background-color: #e2e2e2; }
+ background-color: #e7e1e6; }
.sidebar-chat-indicator-bot {
- background-color: #e2e2e2; }
+ background-color: #d8baff; }
.sidebar-chat-indicator-System {
- background-color: #e2e2e2; }
+ background-color: #cec2da; }
.sidebar-chat-name {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
@@ -1893,19 +1905,19 @@ tooltip {
.sidebar-chat-codeblock {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(60, 60, 60, 0.31);
- color: #e2e2e2;
+ background-color: rgba(73, 70, 76, 0.31);
+ color: #cbc4ce;
margin: 0rem 0.682rem;
- border: 0.068rem solid rgba(226, 226, 226, 0.07); }
+ border: 0.068rem solid rgba(234, 221, 247, 0.07); }
.sidebar-chat-codeblock-topbar {
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
margin: 0.273rem;
margin-bottom: 0rem;
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4357;
+ color: #eaddf7;
border-radius: 0.886rem;
- border: 0.068rem solid #434343;
+ border: 0.068rem solid #5b5267;
border-top-left-radius: 0.886rem;
border-top-right-radius: 0.886rem;
padding: 0.341rem 0.477rem; }
@@ -1922,10 +1934,10 @@ tooltip {
.sidebar-chat-codeblock-topbar-btn:hover,
.sidebar-chat-codeblock-topbar-btn:focus {
- background-color: #545454; }
+ background-color: #6b6277; }
.sidebar-chat-codeblock-topbar-btn:active {
- background-color: #787878; }
+ background-color: #8b8197; }
.sidebar-chat-codeblock-code {
font-family: 'JetBrains Mono NF', 'JetBrains Mono Nerd Font', 'JetBrains Mono NL', 'SpaceMono NF', 'SpaceMono Nerd Font', monospace;
@@ -1933,7 +1945,7 @@ tooltip {
.sidebar-chat-divider {
min-height: 1px;
- background-color: #656565;
+ background-color: #6a656c;
margin: 0rem 0.545rem; }
.sidebar-chat-welcome-txt {
@@ -1964,19 +1976,19 @@ tooltip {
padding: 0.341rem 0.477rem; }
.sidebar-chat-chip-action {
- border: 0.068rem solid #656565; }
+ border: 0.068rem solid #6a656c; }
.sidebar-chat-chip-action:hover,
.sidebar-chat-chip-action:focus {
- background-color: #656565; }
+ background-color: #6a656c; }
.sidebar-chat-chip-action:active {
- background-color: #8b8b8b;
- color: #4c4c4c; }
+ background-color: #878289;
+ color: #575259; }
.sidebar-chat-chip-action-active {
- color: #656565;
- border: 0.068rem solid #656565; }
+ color: #6a656c;
+ border: 0.068rem solid #6a656c; }
.sidebar-pin {
border-radius: 0.818rem;
@@ -1984,47 +1996,47 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 2.386rem;
min-width: 2.386rem;
- color: #e2e2e2; }
+ color: #e7e1e6; }
.sidebar-pin:hover,
.sidebar-pin:focus {
- background-color: rgba(96, 96, 96, 0.379); }
+ background-color: rgba(102, 98, 104, 0.379); }
.sidebar-pin:active {
- background-color: #464646; }
+ background-color: #524e54; }
.sidebar-pin-enabled {
- background-color: #e2e2e2; }
+ background-color: #d8baff; }
.sidebar-pin-enabled label {
- color: #000000; }
+ color: #3e1b6f; }
.sidebar-pin-enabled:hover,
.sidebar-pin-enabled:focus {
- background-color: #cbcbcb; }
+ background-color: #c9aaf1; }
.sidebar-pin-enabled:active {
- background-color: #b5b5b5; }
+ background-color: #b99ae2; }
.session-bg {
margin-top: -2.727rem;
- background-color: rgba(7, 7, 7, 0.64); }
+ background-color: rgba(15, 13, 16, 0.64); }
.session-button {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
min-width: 8.182rem;
min-height: 8.182rem;
- background-color: #121212;
- color: #e2e2e2;
+ background-color: #29262b;
+ color: #cbc4ce;
font-size: 3rem; }
.session-button-focused {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.session-button-desc {
- background-color: #0a0a0a;
- color: #e2e2e2;
+ background-color: #242126;
+ color: #d9d3da;
border-bottom-left-radius: 1.705rem;
border-bottom-right-radius: 1.705rem;
padding: 0.205rem 0.341rem;
@@ -2035,31 +2047,31 @@ tooltip {
-gtk-outline-radius: 1.705rem;
min-width: 8.182rem;
min-height: 5.455rem;
- background-color: #121212;
- color: #e2e2e2;
+ background-color: #29262b;
+ color: #cbc4ce;
font-size: 3rem; }
.notif-low {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(18, 18, 18, 0.45);
- color: #e2e2e2;
+ background-color: rgba(41, 38, 43, 0.45);
+ color: #cbc4ce;
padding: 0.818rem;
padding-right: 1.363rem; }
.notif-normal {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(18, 18, 18, 0.45);
- color: #e2e2e2;
+ background-color: rgba(41, 38, 43, 0.45);
+ color: #cbc4ce;
padding: 0.818rem;
padding-right: 1.363rem; }
.notif-critical {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4357;
+ color: #eaddf7;
padding: 0.818rem;
padding-right: 1.363rem; }
@@ -2067,8 +2079,8 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 30.682rem;
- background-color: #070707;
- color: #e2e2e2;
+ background-color: #0f0d10;
+ color: #cbc4ce;
padding: 0.818rem;
padding-right: 1.363rem; }
@@ -2076,8 +2088,8 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 30.682rem;
- background-color: #070707;
- color: #e2e2e2;
+ background-color: #0f0d10;
+ color: #cbc4ce;
padding: 0.818rem;
padding-right: 1.363rem; }
@@ -2085,19 +2097,19 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 30.682rem;
- background-color: #313131;
- color: #e2e2e2;
+ background-color: #4b4357;
+ color: #eaddf7;
padding: 0.818rem;
padding-right: 1.363rem; }
.notif-body-low {
- color: #9d9d9d; }
+ color: #969098; }
.notif-body-normal {
- color: #9d9d9d; }
+ color: #969098; }
.notif-body-critical {
- color: #a8a8a8; }
+ color: #b6aac2; }
.notif-icon {
border-radius: 9999px;
@@ -2106,20 +2118,20 @@ tooltip {
min-height: 3.409rem; }
.notif-icon-material {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.notif-icon-material-low {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.notif-icon-material-normal {
- background-color: #313131;
- color: #e2e2e2; }
+ background-color: #4b4357;
+ color: #eaddf7; }
.notif-icon-material-critical {
- background-color: #e2e2e2;
- color: #313131; }
+ background-color: #eaddf7;
+ color: #4b4357; }
.notif-expand-btn {
border-radius: 1.159rem;
@@ -2149,7 +2161,7 @@ tooltip {
.osd-notif {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(7, 7, 7, 0.46);
+ background-color: rgba(15, 13, 16, 0.46);
min-width: 30.682rem; }
.notif-circprog-low {
@@ -2157,21 +2169,61 @@ tooltip {
min-width: 0.136rem;
min-height: 3.409rem;
padding: 0rem;
- color: #e2e2e2; }
+ color: #eaddf7; }
.notif-circprog-normal {
transition: 0ms linear;
min-width: 0.136rem;
min-height: 3.409rem;
padding: 0rem;
- color: #e2e2e2; }
+ color: #eaddf7; }
.notif-circprog-critical {
transition: 0ms linear;
min-width: 0.136rem;
min-height: 3.409rem;
padding: 0rem;
- color: #313131; }
+ color: #4b4357; }
+
+.notif-actions {
+ min-height: 2.045rem; }
+
+.notif-action {
+ border-radius: 0.818rem;
+ -gtk-outline-radius: 0.818rem; }
+
+.notif-action-low {
+ background-color: rgba(41, 38, 43, 0.5);
+ color: #cbc4ce; }
+
+.notif-action-low:focus,
+.notif-action-low:hover {
+ background-color: rgba(52, 49, 54, 0.481); }
+
+.notif-action-low:active {
+ background-color: rgba(58, 55, 60, 0.4715); }
+
+.notif-action-normal {
+ background-color: rgba(41, 38, 43, 0.5);
+ color: #cbc4ce; }
+
+.notif-action-normal:focus,
+.notif-action-normal:hover {
+ background-color: rgba(52, 49, 54, 0.481); }
+
+.notif-action-normal:active {
+ background-color: rgba(58, 55, 60, 0.4715); }
+
+.notif-action-critical {
+ background-color: rgba(203, 196, 206, 0.31);
+ color: #cbc4ce; }
+
+.notif-action-critical:focus,
+.notif-action-critical:hover {
+ background-color: rgba(52, 49, 54, 0.481); }
+
+.notif-action-critical:active {
+ background-color: rgba(58, 55, 60, 0.4715); }
.osd-music {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2181,9 +2233,9 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 29.659rem;
- background-color: #070707;
+ background-color: #0f0d10;
padding: 0rem 1.023rem;
- background: linear-gradient(127deg, rgba(15, 15, 15, 0.7), rgba(15, 15, 15, 0.55) 70.71%), linear-gradient(217deg, rgba(32, 32, 32, 0.7), rgba(32, 32, 32, 0.55) 70.71%), radial-gradient(circle at 0% 100%, #313131 13%, rgba(0, 0, 0, 0) 100%), linear-gradient(336deg, rgba(49, 49, 49, 0.7), rgba(49, 49, 49, 0.55) 70.71%), linear-gradient(#070707, #070707); }
+ background: linear-gradient(127deg, rgba(33, 30, 35, 0.7), rgba(33, 30, 35, 0.55) 70.71%), linear-gradient(217deg, rgba(74, 69, 78, 0.7), rgba(74, 69, 78, 0.55) 70.71%), radial-gradient(circle at 0% 100%, #4b4357 13%, rgba(0, 0, 0, 0) 100%), linear-gradient(336deg, rgba(75, 67, 87, 0.7), rgba(75, 67, 87, 0.55) 70.71%), linear-gradient(#0f0d10, #0f0d10); }
.osd-music-cover-fallback {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2191,8 +2243,8 @@ tooltip {
-gtk-outline-radius: 0.818rem;
min-width: 7.5rem;
min-height: 7.5rem;
- background-color: rgba(2, 2, 2, 0.31);
- color: #cfcfcf; }
+ background-color: rgba(30, 28, 32, 0.31);
+ color: #d7d1d7; }
.osd-music-cover {
border-radius: 0.818rem;
@@ -2218,13 +2270,13 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1.364rem;
- color: #cfcfcf; }
+ color: #d7d1d7; }
.osd-music-artists {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 0.955rem;
- color: rgba(193, 193, 193, 0.9); }
+ color: rgba(202, 196, 203, 0.9); }
.osd-music-pill {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2233,8 +2285,8 @@ tooltip {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
min-width: 1.833rem;
padding: 0.273rem 0.682rem;
- background-color: rgba(26, 26, 26, 0.5);
- color: #cfcfcf; }
+ background-color: rgba(51, 46, 55, 0.5);
+ color: #d7d1d7; }
.osd-music-controls {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2243,8 +2295,8 @@ tooltip {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
min-width: 1.833rem;
padding: 0.205rem;
- background-color: rgba(26, 26, 26, 0.5);
- color: #cfcfcf; }
+ background-color: rgba(51, 46, 55, 0.5);
+ color: #d7d1d7; }
.osd-music-controlbtn {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2255,10 +2307,10 @@ tooltip {
.osd-music-controlbtn:hover,
.osd-music-controlbtn:focus {
- background-color: rgba(71, 71, 71, 0.55); }
+ background-color: rgba(92, 87, 95, 0.55); }
.osd-music-controlbtn:active {
- background-color: rgba(89, 89, 89, 0.575); }
+ background-color: rgba(108, 102, 110, 0.575); }
.osd-music-controlbtn-txt {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2272,15 +2324,15 @@ tooltip {
min-width: 0.409rem;
min-height: 3.068rem;
padding: 0.273rem;
- color: #cfcfcf; }
+ color: #d7d1d7; }
.osd-music-playstate {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 3.068rem;
min-width: 3.068rem;
border-radius: 10rem;
- background-color: rgba(26, 26, 26, 0.5);
- color: #cfcfcf; }
+ background-color: rgba(51, 46, 55, 0.5);
+ color: #d7d1d7; }
.osd-music-playstate-btn > label {
transition: 50ms cubic-bezier(0.05, 0.7, 0.1, 1);
diff --git a/.config/ags/widgets/indicators/indicatorvalues.js b/.config/ags/widgets/indicators/indicatorvalues.js
index 74c4f641d..6cf42a35e 100644
--- a/.config/ags/widgets/indicators/indicatorvalues.js
+++ b/.config/ags/widgets/indicators/indicatorvalues.js
@@ -3,6 +3,7 @@ const { GLib, Gtk } = imports.gi;
import { App, Service, Utils, Widget } from '../../imports.js';
import Audio from 'resource:///com/github/Aylur/ags/service/audio.js';
const { Box, Label, ProgressBar, Revealer } = Widget;
+import { MarginRevealer } from '../../lib/advancedrevealers.js';
import Brightness from '../../services/brightness.js';
import Indicator from '../../services/indicator.js';
@@ -56,11 +57,14 @@ const volumeIndicator = OsdValue('Volume',
}]],
);
-export default () => Revealer({
+export default () => MarginRevealer({
transition: 'slide_down',
+ showClass: 'osd-show',
+ hideClass: 'osd-hide',
connections: [
[Indicator, (revealer, value) => {
- revealer.revealChild = (value > -1);
+ if(value > -1) revealer._show(revealer);
+ else revealer._hide(revealer);
}, 'popup'],
],
child: Box({
diff --git a/.config/ags/widgets/indicators/musiccontrols.js b/.config/ags/widgets/indicators/musiccontrols.js
index d638a5f0f..7e59f5a50 100644
--- a/.config/ags/widgets/indicators/musiccontrols.js
+++ b/.config/ags/widgets/indicators/musiccontrols.js
@@ -4,6 +4,7 @@ const { exec, execAsync } = Utils;
import Mpris from 'resource:///com/github/Aylur/ags/service/mpris.js';
const { Box, EventBox, Icon, Scrollable, Label, Button, Revealer } = Widget;
+import { MarginRevealer } from '../../lib/advancedrevealers.js';
import { AnimatedCircProg } from "../../lib/animatedcircularprogress.js";
import { MaterialIcon } from '../../lib/materialicon.js';
import { showMusicControls } from '../../variables.js';
@@ -343,9 +344,11 @@ const MusicControlsWidget = (player) => Box({
]
})
-export default () => Widget.Revealer({
+export default () => MarginRevealer({
transition: 'slide_down',
- transitionDuration: 170,
+ revealChild: false,
+ showClass: 'osd-show',
+ hideClass: 'osd-hide',
child: Box({
connections: [[Mpris, box => {
let foundPlayer = false;
@@ -371,7 +374,8 @@ export default () => Widget.Revealer({
}),
connections: [
[showMusicControls, (revealer) => {
- revealer.revealChild = showMusicControls.value;
+ if(showMusicControls.value) revealer._show(revealer);
+ else revealer._hide(revealer);
}],
],
})
From 70f331c89da43d2884397f2da8a858ecd7e20951 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 29 Dec 2023 23:00:17 +0700
Subject: [PATCH 023/265] improve bash script (#156)
---
install.sh | 61 +++++++++++++++++++++++++++---------------------------
1 file changed, 30 insertions(+), 31 deletions(-)
diff --git a/install.sh b/install.sh
index dc682def5..1fb601959 100755
--- a/install.sh
+++ b/install.sh
@@ -1,48 +1,47 @@
#!/usr/bin/env bash
+set -e
+cd "$(dirname "$0")"
-echo 'Hi there!'
-echo 'This script 1. only works for ArchLinux and Arch-based distros.'
-echo ' 2. has not been tested, use at your own risk.'
-echo ' 3. will show all commands that it runs.'
-echo ' 4. should be run from its folder.'
-echo '== BACKUP YOUR CONFIG FOLDER IF NEEDED! =='
-echo 'Ctrl+C to exit. Enter to continue.'
-read
+printf 'Hi there!\n'
+printf 'This script 1. only works for ArchLinux and Arch-based distros.\n'
+printf ' 2. has not been tested, use at your own risk.\n'
+printf ' 3. will show all commands that it runs.\n'
+printf "\e[36m== BACKUP YOUR CONFIG FOLDER IF NEEDED! ==\n"
+printf 'Ctrl+C to exit. Enter to continue.\n'
+read -r
#####################################################################################
-echo '1. Get packages and add user to video/input groups'
+printf '\e[36m1. Get packages and add user to video/input groups\n\e[97m'
-echo 'yay -S blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git'
-yay -S blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git
+set -v
+yay -S --needed --noconfirm blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git
user=$(whoami)
-echo "sudo usermod -aG video $user"
-sudo usermod -aG video "$user" || echo "failed to add user to video group"
-echo "sudo usermod -aG input $user"
-sudo usermod -aG input "$user" || echo "failed to add user to input group"
-echo "Step 1 Complete."
+sudo usermod -aG video "$user"
+sudo usermod -aG input "$user"
+
#####################################################################################
-echo '2. Installing AGS manually'
+set +v
+printf '\e[36m2. Installing AGS manually\e[97m\n'
sleep 1
-echo 'git clone --recursive https://github.com/Aylur/ags.git && cd ags'
-git clone --recursive https://github.com/Aylur/ags.git && cd ags || echo "failed to clone into ags. Aborting..." && exit
-echo "Done Cloning! Setting up npm and meson..."
+set -v
+git clone --recursive https://github.com/Aylur/ags.git
+set +v
sleep 1
-echo 'npm install && meson setup build'
+set -v
npm install && meson setup build
-echo 'meson install -C build'
-echo '(Make sure you say yes when asked to use sudo here)'
meson install -C build
#####################################################################################
-echo '3. Copying'
+set +v
+printf '\e[36m3. Copying\e[97m\n'
-echo 'cp -r "./.config" "$HOME"'
-cp -r "./.config" "$HOME" || echo "cp threw error. You could cp this yourself."
-echo 'cp -r "./.local" "$HOME"'
-cp -r "./.local" "$HOME" || echo "cp threw error. You could cp this yourself."
+set -v
+cp -r "./.config" "$HOME"
+cp -r "./.local" "$HOME"
#####################################################################################
-echo 'Finished. See the "Import manually" folder and grab anything you need.'
-echo 'Press Ctrl+Super+T to select a wallpaper'
-echo 'Press Super+/ for a list of keybinds'
+set +v
+printf 'Finished. See the "Import manually" folder and grab anything you need.\e[97m\n'
+printf 'Press Ctrl+Super+T to select a wallpaper\e[97m\n'
+printf 'Press Super+/ for a list of keybinds\e[97m\n'
From 6d93336e68418d0eb27d07bc77cedca5779b4c67 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Sat, 30 Dec 2023 08:41:49 +0700
Subject: [PATCH 024/265] install.sh: add hyprpicker dep
---
install.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/install.sh b/install.sh
index 1fb601959..23a9df509 100755
--- a/install.sh
+++ b/install.sh
@@ -13,7 +13,7 @@ read -r
printf '\e[36m1. Get packages and add user to video/input groups\n\e[97m'
set -v
-yay -S --needed --noconfirm blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git
+yay -S --needed --noconfirm blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git hyprpicker-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git
user=$(whoami)
sudo usermod -aG video "$user"
From 6af63f02ac69d4faaa8ee2cbcc0a76eb825c0feb Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Sat, 30 Dec 2023 08:47:01 +0700
Subject: [PATCH 025/265] install.sh: remove swaylock dep (#158)
---
install.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/install.sh b/install.sh
index 23a9df509..bc5b6cc97 100755
--- a/install.sh
+++ b/install.sh
@@ -13,7 +13,7 @@ read -r
printf '\e[36m1. Get packages and add user to video/input groups\n\e[97m'
set -v
-yay -S --needed --noconfirm blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git hyprpicker-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git
+yay -S --needed --noconfirm blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git hyprpicker-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git
user=$(whoami)
sudo usermod -aG video "$user"
From 90577055924e289bfe7e5ba6dd1eb2daf846d853 Mon Sep 17 00:00:00 2001
From: clsty
Date: Sat, 30 Dec 2023 10:06:11 +0800
Subject: [PATCH 026/265] a heavy fix on bash scripts.
---
.gitignore | 1 +
install.sh | 112 +++++++++++++++++++++++++++++++++++++--------------
uninstall.sh | 49 +++++++++++-----------
3 files changed, 109 insertions(+), 53 deletions(-)
diff --git a/.gitignore b/.gitignore
index 154577456..b69e763b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
.config/ags/style.css
.config/hypr/colors.conf
.config/ags/scss/_material.scss
+/ags
diff --git a/install.sh b/install.sh
index 1fb601959..46f722da5 100755
--- a/install.sh
+++ b/install.sh
@@ -1,47 +1,99 @@
#!/usr/bin/env bash
-set -e
cd "$(dirname "$0")"
+function try { "$@" || sleep 0; }
+function v() {
+ echo -e "[$0]: \e[32mNow executing:\e[0m"
+ echo -e "\e[34m$@\e[0m"
+ execute=true
+ if $ask;then
+ while true;do
+ echo "Do you want to execute this command? "
+ echo " y = Yes"
+ echo " a = Abort this script"
+ echo " s = Skip this command; NOT recommended unless you really sure"
+ echo " yesforall = yes and don't ask again; NOT recommended unless you really sure"
+ read -p "Enter here [y/a/s/yesforall]:" p
+ case $p in
+ [yY]) echo -e "\e[32mOK, executing...\e[0m" ;break ;;
+ [aA]) echo -e "\e[32mAborting...\e[0m" ;exit ;break ;;
+ [sS]) echo -e "\e[32mAlright, skipping this one...\e[0m" ;export execute=false ;break ;;
+ "yesforall") echo -e "\e[32mAlright, won't ask again. Executing...\e[0m"; export ask=false ;break ;;
+ *) echo -e "\e[31mPlease enter one of [y/a/s/yesforall].\e[0m";;
+ esac
+ done
+ fi
+ if $execute;then
+ "$@"
+ fi
+}
+
+checkexist() {
+ if command -v $1 >/dev/null 2>&1; then
+ echo "Command $1 found."
+ else
+ echo "Error: Command $1 not found, aborting..."
+ exit 1
+ fi
+}
+
printf 'Hi there!\n'
printf 'This script 1. only works for ArchLinux and Arch-based distros.\n'
-printf ' 2. has not been tested, use at your own risk.\n'
-printf ' 3. will show all commands that it runs.\n'
-printf "\e[36m== BACKUP YOUR CONFIG FOLDER IF NEEDED! ==\n"
-printf 'Ctrl+C to exit. Enter to continue.\n'
-read -r
+printf ' 2. has not been fully tested, use at your own risk.\n'
+printf "\e[36m== PLEASE BACKUP \"$HOME/.config\" AND \"$HOME/.local\" BY YOURSELF IF NEEDED! ==\n\e[97m"
+printf '\n'
+printf 'Do you want to confirm everytime before a command executes?\n'
+printf ' y = Yes, ask me before executing each of them. (RECOMMENDED)\n'
+printf ' n = No, just execute them automatically.\n'
+printf ' E = Exit this script. (DEFAULT)\n'
+read -p "Enter y/n/E: " p
+case $p in
+ y)export ask=true;;
+ n)export ask=false; export c=" --noconfirm" ;;
+ *)exit;;
+esac
+set -e
#####################################################################################
printf '\e[36m1. Get packages and add user to video/input groups\n\e[97m'
-set -v
-yay -S --needed --noconfirm blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle swaylock typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git
+v yay -S --needed$c blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git
-user=$(whoami)
-sudo usermod -aG video "$user"
-sudo usermod -aG input "$user"
+v sudo usermod -aG video "$(whoami)"
+v sudo usermod -aG input "$(whoami)"
#####################################################################################
-set +v
-printf '\e[36m2. Installing AGS manually\e[97m\n'
+printf '\e[36m2. Installing AGS from git repo\e[97m\n'
sleep 1
-set -v
-git clone --recursive https://github.com/Aylur/ags.git
-set +v
+ v git clone --recursive https://github.com/Aylur/ags.git|| \
+ if [ -d ags ];then printf "\e[36mSeems \"./ags\" already exists.\e[97m\n";else exit 1;fi
sleep 1
-set -v
-npm install && meson setup build
-meson install -C build
+
+installags (){
+cd ags
+v npm install
+v meson setup build
+v meson install -C build
+}
+checkexist ags || installags
+
+cd "$(dirname "$0")"
#####################################################################################
-set +v
printf '\e[36m3. Copying\e[97m\n'
-set -v
-cp -r "./.config" "$HOME"
-cp -r "./.local" "$HOME"
+# In case ~/.local/bin does not exists
+v mkdir -p "$HOME/.local/bin"
+
+# --delete to make sure that
+# original dot files and new ones in the SAME DIRECTORY
+# (eg. in ~/.config/hypr) won't be mixed together
+
+for i in .config/* .local/*
+do
+ if [ -d "$i" ];then v rsync -av --delete "$i/" "$HOME/$i/"
+ elif [ -f "$i" ];then v rsync -av "$i" "$HOME/$i"
+ fi
+done
#####################################################################################
-set +v
-printf 'Finished. See the "Import manually" folder and grab anything you need.\e[97m\n'
-printf 'Press Ctrl+Super+T to select a wallpaper\e[97m\n'
-printf 'Press Super+/ for a list of keybinds\e[97m\n'
-
-
-
+printf '\e[36mFinished. See the "Import manually" folder and grab anything you need.\e[97m\n'
+printf '\e[36mPress Ctrl+Super+T to select a wallpaper\e[97m\n'
+printf '\e[36mPress Super+/ for a list of keybinds\e[97m\n'
diff --git a/uninstall.sh b/uninstall.sh
index 4f2c0466b..f12de478b 100755
--- a/uninstall.sh
+++ b/uninstall.sh
@@ -1,22 +1,30 @@
#!/usr/bin/env bash
+cd "$(dirname "$0")"
-echo 'Hi there!'
-echo 'This script 1. will uninstall [end-4/dots-hyprland > illogical-impulse] dotfiles'
-echo ' 2. will try to revert *mostly everything* installed using install.sh, so it'\''s pretty destructive'
-echo ' 3. has not beed tested, use at your own risk.'
-echo ' 4. will show all commands that it runs.'
-echo ' 5. should be run from its folder.'
-echo 'Ctrl+C to exit. Enter to continue.'
-read
+function v() {
+ echo -e "[$0]: \e[32mNow executing:\e[0m"
+ echo -e "\e[32m$@\e[0m"
+ "$@"
+}
+printf 'Hi there!\n'
+printf 'This script 1. will uninstall [end-4/dots-hyprland > illogical-impulse] dotfiles\n'
+printf ' 2. will try to revert *mostly everything* installed using install.sh, so it'\''s pretty destructive\n'
+printf ' 3. has not beed tested, use at your own risk.\n'
+printf ' 4. will show all commands that it runs.\n'
+printf 'Ctrl+C to exit. Enter to continue.\n'
+read -r
+set -e
##############################################################################################################################
# Undo Step 3: Removing copied config and local folders
-echo 'Removing copied config and local folders...'
-echo 'rm -rf "$HOME/.config/ags" "$HOME/.config/fish" "$HOME/.config/frontconfig" "$HOME/.config/foot" "$HOME/.config/fuzzel" "$HOME/.config/gtklock" "$HOME/.config/hypr" "$HOME/.config/mpv" "$HOME/.config/swaylock" "$HOME/.config/wlogout" "$HOME/.config/starship.toml" '
-rm -rf "$HOME/.config/ags" "$HOME/.config/fish" "$HOME/.config/frontconfig" "$HOME/.config/foot" "$HOME/.config/fuzzel" "$HOME/.config/gtklock" "$HOME/.config/hypr" "$HOME/.config/mpv" "$HOME/.config/swaylock" "$HOME/.config/wlogout" "$HOME/.config/starship.toml"
-echo 'rm -rf "$HOME/.local/bin/fuzzel-emoji" "$HOME/.config/rubyshot"'
-rm -rf "$HOME/.local/bin/fuzzel-emoji" "$HOME/.config/rubyshot"
+printf '\e[36mRemoving copied config and local folders...\n\e[97m'
+
+for i in ags fish fontconfig foot fuzzel gtklock hypr mpv swaylock wlogout "starship.toml" rubyshot
+ do v rm -rf "$HOME/.config/$i"
+done
+
+v rm -rf "$HOME/.local/bin/fuzzel-emoji"
##############################################################################################################################
@@ -28,19 +36,14 @@ rm -rf "$HOME/.local/bin/fuzzel-emoji" "$HOME/.config/rubyshot"
##############################################################################################################################
# Undo Step 1: Remove added user from video and input groups and remove yay packages
-echo 'Removing user from video and input groups and removing packages...'
+printf '\e[36mRemoving user from video and input groups and removing packages...\n\e[97m'
user=$(whoami)
-echo 'sudo deluser "$user" video'
-sudo deluser "$user" video
-echo 'sudo deluser "$user" input'
-sudo deluser "$user" input
-echo 'User removed from video and input groups.'
+v sudo deluser "$user" video
+v sudo deluser "$user" input
##############################################################################################################################
# Removing installed yay packages and dependencies
-echo 'yay -Rns adw-gtk3-git brightnessctl cava foot fuzzel gjs gojq gradience-git grim gtk-layer-shell gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git libdbusmenu-gtk3 plasma-browser-integration playerctl python-build python-material-color-utilities python-poetry python-pywal ripgrep sassc slurp starship swayidle swaylock swww tesseract ttf-jetbrains-mono-nerd ttf-material-symbols-variable-git ttf-space-mono-nerd typescript webp-pixbuf-loader wl-clipboard wlogout yad ydotool'
-yay -Rns adw-gtk3-git brightnessctl cava foot fuzzel gjs gojq gradience-git grim gtk-layer-shell gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git libdbusmenu-gtk3 plasma-browser-integration playerctl python-build python-material-color-utilities python-poetry python-pywal ripgrep sassc slurp starship swayidle swaylock swww tesseract ttf-jetbrains-mono-nerd ttf-material-symbols-variable-git ttf-space-mono-nerd typescript webp-pixbuf-loader wl-clipboard wlogout yad ydotool
+v yay -Rns adw-gtk3-git brightnessctl cava foot fuzzel gjs gojq gradience-git grim gtk-layer-shell gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git libdbusmenu-gtk3 plasma-browser-integration playerctl python-build python-material-color-utilities python-poetry python-pywal ripgrep sassc slurp starship swayidle swaylock swww tesseract ttf-jetbrains-mono-nerd ttf-material-symbols-variable-git ttf-space-mono-nerd typescript webp-pixbuf-loader wl-clipboard wlogout yad ydotool
-
-echo 'Uninstall Complete.'
+printf '\e[36mUninstall Complete.\n\e[97m'
From 7995a91d28912a90bf4a0c5a6b3745ddb624899c Mon Sep 17 00:00:00 2001
From: clsty
Date: Sat, 30 Dec 2023 10:12:01 +0800
Subject: [PATCH 027/265] Back to hyprland-git.
---
install.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/install.sh b/install.sh
index 46f722da5..691493693 100755
--- a/install.sh
+++ b/install.sh
@@ -56,7 +56,7 @@ set -e
#####################################################################################
printf '\e[36m1. Get packages and add user to video/input groups\n\e[97m'
-v yay -S --needed$c blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git
+v yay -S --needed$c blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git
v sudo usermod -aG video "$(whoami)"
v sudo usermod -aG input "$(whoami)"
From 27bc27bde643bb0fa1f63aba4dcf7f27b04cf655 Mon Sep 17 00:00:00 2001
From: "Celestial.y" <129247596+clsty@users.noreply.github.com>
Date: Sat, 30 Dec 2023 10:32:33 +0800
Subject: [PATCH 028/265] Add hyprpicker-git (#157)
according to https://github.com/end-4/dots-hyprland/issues/157
---
install.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/install.sh b/install.sh
index 691493693..1a0517e5a 100755
--- a/install.sh
+++ b/install.sh
@@ -56,7 +56,7 @@ set -e
#####################################################################################
printf '\e[36m1. Get packages and add user to video/input groups\n\e[97m'
-v yay -S --needed$c blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git
+v yay -S --needed$c blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git hyprpicker-git
v sudo usermod -aG video "$(whoami)"
v sudo usermod -aG input "$(whoami)"
From 023d19ca3f7f356e9bc929c2820712aa5bc76fb5 Mon Sep 17 00:00:00 2001
From: clsty
Date: Sat, 30 Dec 2023 11:10:34 +0800
Subject: [PATCH 029/265] Minor fix. Better colors.
---
install.sh | 51 +++++++++++++++++++++++++--------------------------
1 file changed, 25 insertions(+), 26 deletions(-)
diff --git a/install.sh b/install.sh
index 1a0517e5a..8a254545f 100755
--- a/install.sh
+++ b/install.sh
@@ -8,7 +8,7 @@ function v() {
execute=true
if $ask;then
while true;do
- echo "Do you want to execute this command? "
+ echo -e "\e[34mDo you want to execute this command? \e[0m"
echo " y = Yes"
echo " a = Abort this script"
echo " s = Skip this command; NOT recommended unless you really sure"
@@ -27,17 +27,8 @@ function v() {
"$@"
fi
}
-
-checkexist() {
- if command -v $1 >/dev/null 2>&1; then
- echo "Command $1 found."
- else
- echo "Error: Command $1 not found, aborting..."
- exit 1
- fi
-}
-
-printf 'Hi there!\n'
+#####################################################################################
+printf "[$0]: Hi there!\n"
printf 'This script 1. only works for ArchLinux and Arch-based distros.\n'
printf ' 2. has not been fully tested, use at your own risk.\n'
printf "\e[36m== PLEASE BACKUP \"$HOME/.config\" AND \"$HOME/.local\" BY YOURSELF IF NEEDED! ==\n\e[97m"
@@ -56,25 +47,27 @@ set -e
#####################################################################################
printf '\e[36m1. Get packages and add user to video/input groups\n\e[97m'
-v yay -S --needed$c blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git hyprpicker-git
+v yay -S --needed$c blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git hyprpicker-git rsync
v sudo usermod -aG video "$(whoami)"
v sudo usermod -aG input "$(whoami)"
#####################################################################################
printf '\e[36m2. Installing AGS from git repo\e[97m\n'
-sleep 1
- v git clone --recursive https://github.com/Aylur/ags.git|| \
- if [ -d ags ];then printf "\e[36mSeems \"./ags\" already exists.\e[97m\n";else exit 1;fi
sleep 1
installags (){
-cd ags
-v npm install
-v meson setup build
-v meson install -C build
+ v git clone --recursive https://github.com/Aylur/ags.git|| \
+ if [ -d ags ];then printf "\e[36mSeems \"./ags\" already exists.\e[97m\n";else exit 1;fi
+ cd ags
+ v npm install
+ v meson setup build
+ v meson install -C build
}
-checkexist ags || installags
+if command -v ags >/dev/null 2>&1
+ then echo "Command ags already exists."
+ else installags
+fi
cd "$(dirname "$0")"
#####################################################################################
@@ -83,17 +76,23 @@ printf '\e[36m3. Copying\e[97m\n'
# In case ~/.local/bin does not exists
v mkdir -p "$HOME/.local/bin"
-# --delete to make sure that
+# `--delete' for rsync to make sure that
# original dot files and new ones in the SAME DIRECTORY
# (eg. in ~/.config/hypr) won't be mixed together
-for i in .config/* .local/*
+for i in .config/*
do
+ echo "Found target: $i"
if [ -d "$i" ];then v rsync -av --delete "$i/" "$HOME/$i/"
elif [ -f "$i" ];then v rsync -av "$i" "$HOME/$i"
fi
done
+
+# .local/bin should be processed seperately to avoid `--delete' for rsync,
+# since the files here comes from different places, not only one program.
+v rsync -av ".local/bin/" "$HOME/.local/bin/"
+
#####################################################################################
-printf '\e[36mFinished. See the "Import manually" folder and grab anything you need.\e[97m\n'
-printf '\e[36mPress Ctrl+Super+T to select a wallpaper\e[97m\n'
-printf '\e[36mPress Super+/ for a list of keybinds\e[97m\n'
+printf "[$0]: \e[36mFinished. See the \"Import Manually\" folder and grab anything you need.\e[97m\n"
+printf "\e[36mPress \e[30m\e[46m Ctrl+Super+T \e[0m\e[36m to select a wallpaper\e[97m\n"
+printf "\e[36mPress \e[30m\e[46m Super+/ \e[0m\e[36m for a list of keybinds\e[97m\n"
From 2036fa3896ead6a2278c2be5b73ddf02170fbaed Mon Sep 17 00:00:00 2001
From: clsty
Date: Sat, 30 Dec 2023 11:16:25 +0800
Subject: [PATCH 030/265] color fix.
---
install.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/install.sh b/install.sh
index 8a254545f..78d910989 100755
--- a/install.sh
+++ b/install.sh
@@ -3,8 +3,8 @@ cd "$(dirname "$0")"
function try { "$@" || sleep 0; }
function v() {
- echo -e "[$0]: \e[32mNow executing:\e[0m"
- echo -e "\e[34m$@\e[0m"
+ echo -e "[$0]: \e[34mNow executing:\e[0m"
+ echo -e "\e[32m$@\e[0m"
execute=true
if $ask;then
while true;do
From 1c96a7a911d9ca988245da6f0ffeb08c1903a5f7 Mon Sep 17 00:00:00 2001
From: clsty
Date: Sat, 30 Dec 2023 11:18:12 +0800
Subject: [PATCH 031/265] color fix.
---
install.sh | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/install.sh b/install.sh
index 78d910989..a963afd18 100755
--- a/install.sh
+++ b/install.sh
@@ -15,10 +15,10 @@ function v() {
echo " yesforall = yes and don't ask again; NOT recommended unless you really sure"
read -p "Enter here [y/a/s/yesforall]:" p
case $p in
- [yY]) echo -e "\e[32mOK, executing...\e[0m" ;break ;;
- [aA]) echo -e "\e[32mAborting...\e[0m" ;exit ;break ;;
- [sS]) echo -e "\e[32mAlright, skipping this one...\e[0m" ;export execute=false ;break ;;
- "yesforall") echo -e "\e[32mAlright, won't ask again. Executing...\e[0m"; export ask=false ;break ;;
+ [yY]) echo -e "\e[34mOK, executing...\e[0m" ;break ;;
+ [aA]) echo -e "\e[34mAborting...\e[0m" ;exit ;break ;;
+ [sS]) echo -e "\e[34mAlright, skipping this one...\e[0m" ;export execute=false ;break ;;
+ "yesforall") echo -e "\e[34mAlright, won't ask again. Executing...\e[0m"; export ask=false ;break ;;
*) echo -e "\e[31mPlease enter one of [y/a/s/yesforall].\e[0m";;
esac
done
From c5f956e3276fa713e847dafceae8d73d595be142 Mon Sep 17 00:00:00 2001
From: clsty
Date: Sat, 30 Dec 2023 11:34:45 +0800
Subject: [PATCH 032/265] Final (I hope it is) fixes on installation script.
---
install.sh | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/install.sh b/install.sh
index a963afd18..e9ff41f65 100755
--- a/install.sh
+++ b/install.sh
@@ -1,5 +1,6 @@
#!/usr/bin/env bash
cd "$(dirname "$0")"
+export base="$(pwd)"
function try { "$@" || sleep 0; }
function v() {
@@ -58,18 +59,22 @@ sleep 1
installags (){
v git clone --recursive https://github.com/Aylur/ags.git|| \
- if [ -d ags ];then printf "\e[36mSeems \"./ags\" already exists.\e[97m\n";else exit 1;fi
- cd ags
+ if [ -d ags ];then
+ printf "\e[36mSeems \"./ags\" already exists.\e[97m\n"
+ cd ags
+ v git pull
+ else exit 1
+ fi
v npm install
v meson setup build
v meson install -C build
+ cd $base
}
if command -v ags >/dev/null 2>&1
- then echo "Command ags already exists."
+ then echo -e "\e[34mCommand \"ags\" already exists. Won't install ags.\e[0m"
else installags
fi
-cd "$(dirname "$0")"
#####################################################################################
printf '\e[36m3. Copying\e[97m\n'
From 7d4374d52b79d48846c16f4b477cbfbc6eb14b02 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Sat, 30 Dec 2023 21:17:14 +0700
Subject: [PATCH 033/265] ags: sync
- workspace indicator: no more goofy notch, now cairo-drawn to ensure accuracy and maintain animations
- made notification icons a bit smaller
---
.config/ags/config.js | 7 +-
.config/ags/lib/notification.js | 8 +-
.../scripts/templates/gradience/preset.json | 30 +-
.config/ags/scss/_bar.scss | 184 +---
.config/ags/scss/_colors.scss | 7 +-
.config/ags/scss/_lib_classes.scss | 8 +
.config/ags/scss/_material.scss | 46 +-
.config/ags/scss/_music.scss | 11 +-
.config/ags/scss/_musicmaterial.scss | 30 +-
.config/ags/scss/_musicwal.scss | 25 -
.config/ags/scss/_notifications.scss | 24 +-
.config/ags/style.css | 856 ++++++++----------
.config/ags/widgets/bar/main.js | 10 +-
.config/ags/widgets/bar/music.js | 2 +-
.config/ags/widgets/bar/tray.js | 2 +-
.config/ags/widgets/bar/workspaces.js | 243 +++--
.config/ags/widgets/overview/overview.js | 10 +-
17 files changed, 694 insertions(+), 809 deletions(-)
diff --git a/.config/ags/config.js b/.config/ags/config.js
index 4e09423df..74ebdae56 100644
--- a/.config/ags/config.js
+++ b/.config/ags/config.js
@@ -4,7 +4,7 @@ import { App, Utils } from './imports.js';
// Widgets
import Bar from './widgets/bar/main.js';
import Cheatsheet from './widgets/cheatsheet/main.js';
-import DesktopBackground from './widgets/desktopbackground/main.js';
+// import DesktopBackground from './widgets/desktopbackground/main.js';
import Dock from './widgets/dock/main.js';
import { CornerTopleft, CornerTopright, CornerBottomleft, CornerBottomright } from './widgets/screencorners/main.js';
import Indicator from './widgets/indicators/main.js';
@@ -39,12 +39,11 @@ export default {
'osk': CLOSE_ANIM_TIME,
},
windows: [
- // Bar() is below
CornerTopleft(),
CornerTopright(),
CornerBottomleft(),
CornerBottomright(),
- DesktopBackground(),
+ // DesktopBackground(),
Dock(), // Buggy
Overview(),
Indicator(),
@@ -53,6 +52,6 @@ export default {
SideRight(),
Osk(), // On-screen keyboard
Session(), // Power menu, if that's what you like to call it
- Bar()
+ Bar(),
],
};
diff --git a/.config/ags/lib/notification.js b/.config/ags/lib/notification.js
index b79cb3be9..e3adcc62c 100644
--- a/.config/ags/lib/notification.js
+++ b/.config/ags/lib/notification.js
@@ -57,7 +57,7 @@ const NotificationIcon = (notifObject) => {
const styleContext = self.get_parent().get_style_context();
const width = styleContext.get_property('min-width', Gtk.StateFlags.NORMAL);
const height = styleContext.get_property('min-height', Gtk.StateFlags.NORMAL);
- self.size = Math.max(width * 0.9, height * 0.9, 1); // im too lazy to add another box lol
+ self.size = Math.max(width * 0.7, height * 0.7, 1); // im too lazy to add another box lol
}),
})
:
@@ -185,7 +185,7 @@ export default ({
child: NotificationIcon(notifObject),
overlays: isPopup ? [AnimatedCircProg({
className: `notif-circprog-${notifObject.urgency}`,
- valign: Gtk.Align.CENTER,
+ vpack: 'center', hpack: 'center',
initFrom: (isPopup ? 100 : 0),
initTo: 0,
initAnimTime: popupTimeout,
@@ -245,7 +245,7 @@ export default ({
notifTextPreview.revealChild = true;
notifTextExpanded.revealChild = false;
self.child.label = 'expand_more';
- expanded = true;
+ expanded = false;
}
},
child: MaterialIcon('expand_more', 'norm', {
@@ -338,7 +338,7 @@ export default ({
if (widget.window)
widget.window.set_cursor(Gdk.Cursor.new_from_name(display, 'grabbing'));
-
+
if (initDirVertical == 1 && offset_y > MOVE_THRESHOLD && !expanded) {
notifTextPreview.revealChild = false;
notifTextExpanded.revealChild = true;
diff --git a/.config/ags/scripts/templates/gradience/preset.json b/.config/ags/scripts/templates/gradience/preset.json
index d3205c0c1..8591b87f8 100644
--- a/.config/ags/scripts/templates/gradience/preset.json
+++ b/.config/ags/scripts/templates/gradience/preset.json
@@ -87,9 +87,9 @@
"BLACK_500": "#393634",
"BLACK_700": "#33302F",
"BLACK_900": "#2B2928",
- "accent_bg_color": "#d8baff",
- "accent_fg_color": "#3e1b6f",
- "accent_color": "#d8baff",
+ "accent_bg_color": "#ffabf1",
+ "accent_fg_color": "#551251",
+ "accent_color": "#ffabf1",
"destructive_bg_color": "#ffb4a9",
"destructive_fg_color": "#680003",
"destructive_color": "#ffb4a9",
@@ -99,22 +99,22 @@
"warning_fg_color": "rgba(0, 0, 0, 0.87)",
"error_bg_color": "#ffb4a9",
"error_fg_color": "#680003",
- "window_bg_color": "#111012",
- "window_fg_color": "#e7e1e6",
- "view_bg_color": "#1d1b1e",
- "view_fg_color": "#e7e1e6",
+ "window_bg_color": "#120F11",
+ "window_fg_color": "#eae0e4",
+ "view_bg_color": "#1f1a1d",
+ "view_fg_color": "#eae0e4",
"headerbar_bg_color": "mix(@dialog_bg_color, @window_bg_color, 0.5)",
- "headerbar_fg_color": "#eaddf7",
- "headerbar_border_color": "#4b4357",
+ "headerbar_fg_color": "#f8daee",
+ "headerbar_border_color": "#554050",
"headerbar_backdrop_color": "@headerbar_bg_color",
"headerbar_shade_color": "rgba(0, 0, 0, 0.09)",
- "card_bg_color": "#111012",
- "card_fg_color": "#eaddf7",
+ "card_bg_color": "#120F11",
+ "card_fg_color": "#f8daee",
"card_shade_color": "rgba(0, 0, 0, 0.09)",
- "dialog_bg_color": "#4b4357",
- "dialog_fg_color": "#eaddf7",
- "popover_bg_color": "#4b4357",
- "popover_fg_color": "#eaddf7",
+ "dialog_bg_color": "#554050",
+ "dialog_fg_color": "#f8daee",
+ "popover_bg_color": "#554050",
+ "popover_fg_color": "#f8daee",
"thumbnail_bg_color": "#1a1b26",
"thumbnail_fg_color": "#AEE5FA",
"shade_color": "rgba(0, 0, 0, 0.36)",
diff --git a/.config/ags/scss/_bar.scss b/.config/ags/scss/_bar.scss
index b1bbd4378..d0e2a7892 100644
--- a/.config/ags/scss/_bar.scss
+++ b/.config/ags/scss/_bar.scss
@@ -1,27 +1,16 @@
// Made to be pixel-perfect with 11pt font size
// 1rem = 11pt = 14.6666666667px
-// Init
$black: black;
$white: white;
-$notchSecondaryContainer: $secondaryContainer;
-$notchOnSecondaryContainer: $onSecondaryContainer;
-$notchPrimary: $primary;
-$notchOnPrimary: $onPrimary;
+$bar_ws_width: 1.774rem;
-// Check dark mode. Set colors accordingly for the fake snotch that's always black
-@if $darkmode ==true {
- $notchSecondaryContainer: $secondaryContainer;
- $notchOnSecondaryContainer: $onSecondaryContainer;
- $notchPrimary: $primary;
- $notchOnPrimary: $onPrimary;
+@mixin bar-group-rounding {
+ @include small-rounding;
}
-@else {
- $notchSecondaryContainer: $onSecondaryContainer;
- $notchOnSecondaryContainer: $secondaryContainer;
- $notchPrimary: $primaryContainer;
- $notchOnPrimary: $onPrimaryContainer;
+.bar-height {
+ min-height: 2.727rem;
}
.bar-bg {
@@ -34,31 +23,16 @@ $notchOnPrimary: $onPrimary;
}
.bar-group-margin {
- padding: 0.2rem;
+ padding: 0.273rem 0rem;
}
.bar-group {
- // @include elevation-border;
- background-color: $t_surface;
-}
-
-.bar-group-center {
- border-bottom-left-radius: 1.364rem;
- border-bottom-right-radius: 1.364rem;
- padding: 0.2rem;
- // background-color: $t_surface;
- background-color: $black; // Hard code: fake notch
-}
-
-.corner-bar-group {
- border-radius: 1.364rem; // Half of bar height
- border-width: 0.068rem;
- // background-color: $t_surface;
- background-color: $black; // Hard code: fake notch
+ background-color: $l_l_t_surfaceVariant;
}
.bar-group-pad {
- padding: 0rem 1.023rem;
+ // padding: 0rem 1.023rem;
+ padding: 0.205rem;
}
.bar-group-pad-less {
@@ -94,7 +68,7 @@ $notchOnPrimary: $onPrimary;
}
.bar-group-standalone {
- border-radius: 1.364rem;
+ @include bar-group-rounding;
-gtk-outline-radius: 1.364rem;
}
@@ -123,7 +97,28 @@ $notchOnPrimary: $onPrimary;
}
.bar-ws-width {
- min-width: 18.614rem;
+ min-width: 18.341rem;
+}
+
+.bar-ws {
+ min-width: $bar_ws_width;
+ color: mix($onBackground, $background, 40%);
+ @if $darkmode ==true {
+ color: mix($onBackground, $background, 45%);
+ }
+}
+
+.bar-ws-active {
+ background-color: $secondaryContainer;
+ color: $onSecondaryContainer;
+}
+
+.bar-ws-occupied {
+ background-color: mix($surfaceVariant, $primary, 89%);
+ @if $darkmode ==true {
+ background-color: $surfaceVariant;
+ }
+ color: $onSurfaceVariant;
}
.bar-separator {
@@ -146,95 +141,12 @@ $notchOnPrimary: $onPrimary;
color: $onBackground;
}
-.bar-ws {
- min-height: 1.636rem;
- min-width: 1.772rem;
- font-size: 1.091rem;
- @include mainfont;
- border-top: 0.068rem solid;
- border-bottom: 0.068rem solid;
- border-color: transparent;
- color: $white;
-}
-
-.bar-ws-active-box {
- transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
-}
-
-.bar-ws-active {
- min-height: 1.5rem;
- min-width: 1.5rem;
- font-size: 1.091rem;
- @include mainfont;
-
- background-color: $notchPrimary;
- color: $notchOnPrimary;
- border-radius: 999px;
- margin: 0.068rem;
- // background-color: red;
-}
-
-.bar-ws-active-middledecor {
- min-width: 0.682rem;
- min-height: 0.682rem;
- border-radius: 9999px;
- background-color: $black;
- margin: 0rem 0.409rem;
-}
-
-.bar-ws-occupied {
- background-color: $notchSecondaryContainer;
- color: $notchOnSecondaryContainer;
- min-width: 1.772rem;
- border-top: 0.068rem solid $notchOnSecondaryContainer;
- border-bottom: 0.068rem solid $notchOnSecondaryContainer;
-}
-
-.bar-ws-occupied-left {
- background-color: $notchSecondaryContainer;
- color: $notchOnSecondaryContainer;
- min-width: 1.704rem;
- border-top-left-radius: 999px;
- border-bottom-left-radius: 999px;
-
- border-left: 0.068rem solid $notchOnSecondaryContainer;
- border-top: 0.068rem solid $notchOnSecondaryContainer;
- border-bottom: 0.068rem solid $notchOnSecondaryContainer;
- border-right: 0px solid transparent;
-}
-
-.bar-ws-occupied-right {
- background-color: $notchSecondaryContainer;
- color: $notchOnSecondaryContainer;
- min-width: 1.704rem;
- border-top-right-radius: 999px;
- border-bottom-right-radius: 999px;
-
- border-right: 0.068rem solid $notchOnSecondaryContainer;
- border-top: 0.068rem solid $notchOnSecondaryContainer;
- border-bottom: 0.068rem solid $notchOnSecondaryContainer;
- border-left: 0px solid transparent;
-}
-
-.bar-ws-occupied-left-right {
- @include full-rounding;
- background-color: $notchSecondaryContainer;
- color: $notchOnSecondaryContainer;
- min-width: 1.636rem;
- border: 0.068rem solid $notchOnSecondaryContainer;
-}
-
-.bar-ws-empty {
- color: $onBackground;
- border-color: transparent;
-}
-
.bar-batt {
@include full-rounding;
padding: 0rem 0.341rem;
background-color: $t_secondaryContainer;
color: $t_onSecondaryContainer;
- // border: 1px solid $onSecondaryContainer;
+ // border: 0.068rem solid $outline;
}
.bar-sidemodule {
@@ -262,8 +174,8 @@ $notchOnPrimary: $onPrimary;
}
.bar-music-playstate {
- min-height: 1.770rem;
- min-width: 1.770rem;
+ min-height: 1.77rem;
+ min-width: 1.77rem;
border-radius: 10rem;
background-color: $secondaryContainer;
color: $onSecondaryContainer;
@@ -272,15 +184,15 @@ $notchOnPrimary: $onPrimary;
.bar-music-circprog {
@include fluent_decel_long;
min-width: 0.068rem; // line width
- min-height: 1.770rem;
+ min-height: 1.636rem;
padding: 0rem;
background-color: $secondaryContainer;
color: $onSecondaryContainer;
}
.bar-music-playstate-playing {
- min-height: 1.770rem;
- min-width: 1.770rem;
+ min-height: 1.77rem;
+ min-width: 1.77rem;
border-radius: 10rem;
background-color: $secondaryContainer;
color: $onSecondaryContainer;
@@ -363,8 +275,8 @@ $notchOnPrimary: $onPrimary;
}
progress {
- min-height: 0.680rem;
- min-width: 0.680rem;
+ min-height: 0.68rem;
+ min-width: 0.68rem;
margin: 0rem 0.137rem;
border-radius: 10rem;
background-color: $t_onSecondaryContainer;
@@ -424,7 +336,7 @@ $notchOnPrimary: $onPrimary;
}
.corner-black {
- background-color: $black; // Hard code because fake screen corner
+ background-color: $black; // Hard code: fake screen corner
@include large-rounding;
}
@@ -438,17 +350,17 @@ $notchOnPrimary: $onPrimary;
padding: 0.341rem;
}
-.bar-space-button>box:first-child {
+.bar-space-button > box:first-child {
@include full-rounding;
padding: 0rem 0.682rem;
}
-.bar-space-button:hover>box:first-child,
-.bar-space-button:focus>box:first-child {
+.bar-space-button:hover > box:first-child,
+.bar-space-button:focus > box:first-child {
background-color: $hovercolor;
}
-.bar-space-button:active>box:first-child {
+.bar-space-button:active > box:first-child {
background-color: $activecolor;
}
@@ -458,7 +370,7 @@ $notchOnPrimary: $onPrimary;
}
}
-.bar-space-area-rightmost>box {
+.bar-space-area-rightmost > box {
padding-right: 2.386rem;
}
@@ -477,7 +389,7 @@ $notchOnPrimary: $onPrimary;
.bar-statusicons {
@include full-rounding;
@include menu_decel;
- margin: 0.2rem;
+ margin: 0.273rem;
padding: 0rem 0.614rem;
}
@@ -487,4 +399,4 @@ $notchOnPrimary: $onPrimary;
.bar-statusicons-active {
background-color: mix($t_background, $t_onBackground, 80%);
-}
\ No newline at end of file
+}
diff --git a/.config/ags/scss/_colors.scss b/.config/ags/scss/_colors.scss
index 5a510350d..ffe3c4ad9 100755
--- a/.config/ags/scss/_colors.scss
+++ b/.config/ags/scss/_colors.scss
@@ -5,15 +5,18 @@ $transparency_enabled: false;
@if $transparency_enabled ==false {
@if $darkmode ==true {
+ $primary: mix($primary, white, 70%);
+ $primaryContainer: mix($primaryContainer, white, 90%);
$background: mix(mix($background, $primary, 94%), #000000, 50%);
$surface: mix($surface, $primaryContainer, 98%);
- $surfaceVariant: mix($surfaceVariant, #000000, 55%);
+ $surfaceVariant: mix($surfaceVariant, #000000, 75%);
+ // $secondaryContainer: mix($secondaryContainer, $primaryContainer, 90%);
}
@if $darkmode ==false {
$background: mix($background, $primary, 87%);
$surface: mix($surface, $primary, 93%);
- $surfaceVariant: mix($surfaceVariant, #FFFFFF, 55%);
+ $surfaceVariant: mix($surfaceVariant, #FFFFFF, 25%);
}
}
diff --git a/.config/ags/scss/_lib_classes.scss b/.config/ags/scss/_lib_classes.scss
index 791a7a1c7..10b817da1 100644
--- a/.config/ags/scss/_lib_classes.scss
+++ b/.config/ags/scss/_lib_classes.scss
@@ -254,6 +254,14 @@
margin-bottom: 0rem;
}
+.spacing-h-4>* {
+ margin-right: 0.273rem;
+}
+
+.spacing-h-4>*:last-child {
+ margin-right: 0rem;
+}
+
.spacing-h-5>* {
margin-right: 0.341rem;
}
diff --git a/.config/ags/scss/_material.scss b/.config/ags/scss/_material.scss
index e76adf207..4b1ab4eee 100755
--- a/.config/ags/scss/_material.scss
+++ b/.config/ags/scss/_material.scss
@@ -1,29 +1,29 @@
$darkmode: true;
-$primary: #d8baff;
-$onPrimary: #3e1b6f;
-$primaryContainer: #563587;
-$onPrimaryContainer: #eedcff;
-$secondary: #cec2da;
-$onSecondary: #352d40;
-$secondaryContainer: #4b4357;
-$onSecondaryContainer: #eaddf7;
-$tertiary: #f1b7c2;
-$onTertiary: #4a252e;
-$tertiaryContainer: #643b44;
-$onTertiaryContainer: #ffd9e1;
+$primary: #ffabf1;
+$onPrimary: #551251;
+$primaryContainer: #702c69;
+$onPrimaryContainer: #ffd6f5;
+$secondary: #dbbed2;
+$onSecondary: #3d2b39;
+$secondaryContainer: #554050;
+$onSecondaryContainer: #f8daee;
+$tertiary: #f5b9a6;
+$onTertiary: #4c2619;
+$tertiaryContainer: #663c2e;
+$onTertiaryContainer: #ffdbcf;
$error: #ffb4a9;
$onError: #680003;
$errorContainer: #930006;
$onErrorContainer: #ffb4a9;
-$colorbarbg: #111012;
-$background: #111012;
-$onBackground: #e7e1e6;
-$surface: #1d1b1e;
-$onSurface: #e7e1e6;
-$surfaceVariant: #4a454e;
-$onSurfaceVariant: #cbc4ce;
-$outline: #958f99;
+$colorbarbg: #120F11;
+$background: #120F11;
+$onBackground: #eae0e4;
+$surface: #1f1a1d;
+$onSurface: #eae0e4;
+$surfaceVariant: #4e444b;
+$onSurfaceVariant: #d1c2cb;
+$outline: #9a8d95;
$shadow: #000000;
-$inverseSurface: #e7e1e6;
-$inverseOnSurface: #323033;
-$inversePrimary: #6e4da1;
+$inverseSurface: #eae0e4;
+$inverseOnSurface: #342f32;
+$inversePrimary: #8c4483;
diff --git a/.config/ags/scss/_music.scss b/.config/ags/scss/_music.scss
index 8f98091c2..d96441c99 100644
--- a/.config/ags/scss/_music.scss
+++ b/.config/ags/scss/_music.scss
@@ -4,11 +4,11 @@
@import './musicwal';
@import './colors';
@import './lib_mixins';
-$music_gradient1: mix($color1, $background, 30%);
+$music_gradient1: mix($color1, $background, 50%);
-@if $darkmode ==true {
- $music_gradient1: mix($color1, $background, 30%);
-}
+// @if $darkmode ==true {
+// $music_gradient1: mix($color1, $background, 30%);
+// }
$music_gradient2: $color3;
$music_gradient3: $color5;
@@ -17,6 +17,9 @@ $music_extra_transparentize: 0.15;
$secondaryContainer: transparentize(mix(mix($background, $color2, 50%), $color6, 80%), 0.5);
$onSecondaryContainer: mix($color7, $color2, 90%);
+@if $darkmode ==false {
+ $onSecondaryContainer: mix($onSecondaryContainer, black, 50%);
+}
.osd-music {
@include menu_decel;
diff --git a/.config/ags/scss/_musicmaterial.scss b/.config/ags/scss/_musicmaterial.scss
index 441be992d..8b1378917 100755
--- a/.config/ags/scss/_musicmaterial.scss
+++ b/.config/ags/scss/_musicmaterial.scss
@@ -1,29 +1 @@
-$darkmode: true;
-$primary: #c4c0ff;
-$onPrimary: #251a8c;
-$primaryContainer: #3c36a1;
-$onPrimaryContainer: #e3dfff;
-$secondary: #c7c4dd;
-$onSecondary: #2f2e42;
-$secondaryContainer: #464559;
-$onSecondaryContainer: #e3dff9;
-$tertiary: #eab9d1;
-$onTertiary: #472639;
-$tertiaryContainer: #603c50;
-$onTertiaryContainer: #ffd8eb;
-$error: #ffb4a9;
-$onError: #680003;
-$errorContainer: #930006;
-$onErrorContainer: #ffb4a9;
-$colorbarbg: #101012;
-$background: #101012;
-$onBackground: #e5e1e6;
-$surface: #1c1b1f;
-$onSurface: #e5e1e6;
-$surfaceVariant: #47464f;
-$onSurfaceVariant: #c8c5d0;
-$outline: #928f9a;
-$shadow: #000000;
-$inverseSurface: #e5e1e6;
-$inverseOnSurface: #313033;
-$inversePrimary: #5550bb;
+
diff --git a/.config/ags/scss/_musicwal.scss b/.config/ags/scss/_musicwal.scss
index 6656696fd..8b1378917 100644
--- a/.config/ags/scss/_musicwal.scss
+++ b/.config/ags/scss/_musicwal.scss
@@ -1,26 +1 @@
-// SCSS Variables
-// Generated by 'wal'
-$wallpaper: "/home/end/.cache/ags/media/375d6eb3358763763a73710dca3bbfad1a5434d8";
-// Special
-$background: #0a0919;
-$foreground: #bfacd9;
-$cursor: #bfacd9;
-
-// Colors
-$color0: #0a0919;
-$color1: #2E2693;
-$color2: #382FA6;
-$color3: #4C2F99;
-$color4: #4839B3;
-$color5: #5A49B4;
-$color6: #5C4CC7;
-$color7: #bfacd9;
-$color8: #857897;
-$color9: #2E2693;
-$color10: #382FA6;
-$color11: #4C2F99;
-$color12: #4839B3;
-$color13: #5A49B4;
-$color14: #5C4CC7;
-$color15: #bfacd9;
diff --git a/.config/ags/scss/_notifications.scss b/.config/ags/scss/_notifications.scss
index 84726aa85..40bb15fa6 100644
--- a/.config/ags/scss/_notifications.scss
+++ b/.config/ags/scss/_notifications.scss
@@ -134,7 +134,7 @@ $notif_surface: $t_background;
.notif-circprog-low {
transition: 0ms linear;
min-width: 0.136rem; // line width
- min-height: 3.409rem;
+ min-height: 3.136rem;
padding: 0rem;
color: $onSecondaryContainer;
}
@@ -142,7 +142,7 @@ $notif_surface: $t_background;
.notif-circprog-normal {
transition: 0ms linear;
min-width: 0.136rem; // line width
- min-height: 3.409rem;
+ min-height: 3.136rem;
padding: 0rem;
color: $onSecondaryContainer;
}
@@ -150,7 +150,7 @@ $notif_surface: $t_background;
.notif-circprog-critical {
transition: 0ms linear;
min-width: 0.136rem; // line width
- min-height: 3.409rem;
+ min-height: 3.136rem;
padding: 0rem;
color: $secondaryContainer;
}
@@ -164,43 +164,43 @@ $notif_surface: $t_background;
}
.notif-action-low {
- background-color: $l_t_surfaceVariant;
+ background-color: mix($t_onSurfaceVariant, $t_surface, 10%);
color: $onSurfaceVariant;
}
.notif-action-low:focus,
.notif-action-low:hover {
- background-color: mix($t_onSurfaceVariant, $l_t_surfaceVariant, 10%);
+ background-color: mix($t_onSurfaceVariant, $t_surface, 18%);
}
.notif-action-low:active {
- background-color: mix($t_onSurfaceVariant, $l_t_surfaceVariant, 15%);
+ background-color: mix($t_onSurfaceVariant, $t_surface, 23%);
}
.notif-action-normal {
- background-color: $l_t_surfaceVariant;
+ background-color: mix($t_onSurfaceVariant, $t_surface, 10%);
color: $onSurfaceVariant;
}
.notif-action-normal:focus,
.notif-action-normal:hover {
- background-color: mix($t_onSurfaceVariant, $l_t_surfaceVariant, 10%);
+ background-color: mix($t_onSurfaceVariant, $t_surface, 18%);
}
.notif-action-normal:active {
- background-color: mix($t_onSurfaceVariant, $l_t_surfaceVariant, 15%);
+ background-color: mix($t_onSurfaceVariant, $t_surface, 23%);
}
.notif-action-critical {
- background-color: $t_onSurfaceVariant;
+ background-color: mix($t_onSecondaryContainer, $t_secondaryContainer, 10%);
color: $onSurfaceVariant;
}
.notif-action-critical:focus,
.notif-action-critical:hover {
- background-color: mix($t_onSurfaceVariant, $l_t_surfaceVariant, 10%);
+ background-color: mix($t_onSecondaryContainer, $t_secondaryContainer, 18%);
}
.notif-action-critical:active {
- background-color: mix($t_onSurfaceVariant, $l_t_surfaceVariant, 15%);
+ background-color: mix($t_onSecondaryContainer, $t_secondaryContainer, 23%);
}
diff --git a/.config/ags/style.css b/.config/ags/style.css
index b6ffc2c55..b4240dc61 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -41,13 +41,13 @@
transition: 0ms; }
.txt {
- color: #e7e1e6; }
+ color: #eae0e4; }
.txt-primary {
- color: #d8baff; }
+ color: #ffc4f5; }
.txt-onSecondaryContainer {
- color: #eaddf7; }
+ color: #f8daee; }
.txt-shadow {
text-shadow: 1px 2px 8px rgba(0, 0, 0, 0.69);
@@ -101,10 +101,10 @@
font-size: 0px; }
.txt-subtext {
- color: #a6a1a6; }
+ color: #a9a1a4; }
.txt-action {
- color: #c7c1c6; }
+ color: #c9c0c4; }
.txt-semibold {
font-weight: 500; }
@@ -130,7 +130,7 @@
.separator-circle {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #e7e1e6;
+ background-color: #eae0e4;
margin: 0rem 0.682rem;
min-width: 0.545rem;
min-height: 0.545rem; }
@@ -189,6 +189,12 @@
.spacing-v-5-revealer > scrolledwindow:last-child > * {
margin-bottom: 0rem; }
+.spacing-h-4 > * {
+ margin-right: 0.273rem; }
+
+.spacing-h-4 > *:last-child {
+ margin-right: 0rem; }
+
.spacing-h-5 > * {
margin-right: 0.341rem; }
@@ -361,10 +367,10 @@
transition: 300ms cubic-bezier(0.85, 0, 0.15, 1); }
* {
- caret-color: #d8baff; }
+ caret-color: #ffc4f5; }
* selection {
- background-color: #cec2da;
- color: #352d40; }
+ background-color: #dbbed2;
+ color: #3d2b39; }
@keyframes appear {
from {
@@ -379,13 +385,13 @@ tooltip {
animation-iteration-count: 1; }
menu {
- border-top: 1px solid rgba(59, 57, 61, 0.121);
- border-left: 1px solid rgba(59, 57, 61, 0.121);
- border-right: 1px solid rgba(45, 43, 47, 0.1105);
- border-bottom: 1px solid rgba(45, 43, 47, 0.1105);
+ border-top: 1px solid rgba(62, 56, 60, 0.121);
+ border-left: 1px solid rgba(62, 56, 60, 0.121);
+ border-right: 1px solid rgba(48, 42, 46, 0.1105);
+ border-bottom: 1px solid rgba(48, 42, 46, 0.1105);
padding: 0.681rem;
- background: #29262b;
- color: #cbc4ce;
+ background: #3b3338;
+ color: #d1c2cb;
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
animation-name: appear;
@@ -408,53 +414,53 @@ menu > menuitem {
menu > menuitem:hover,
menu > menuitem:focus {
- background-color: #39363b; }
+ background-color: #4a4147; }
.separator-line {
- background-color: #29262b;
+ background-color: #3b3338;
min-width: 0.068rem;
min-height: 0.068rem; }
tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: #29262b;
- color: #cbc4ce;
- border: 1px solid #cbc4ce; }
+ background-color: #3b3338;
+ color: #d1c2cb;
+ border: 1px solid #d1c2cb; }
.configtoggle-box {
padding: 0.205rem 0.341rem;
border: 0.136rem solid transparent; }
.configtoggle-box:focus {
- border: 0.136rem solid #6e6b6f; }
+ border: 0.136rem solid #716a6e; }
.switch-bg {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #171518;
- border: 0.136rem solid #e7e1e6;
+ background-color: #191418;
+ border: 0.136rem solid #eae0e4;
min-width: 2.864rem;
min-height: 1.637rem; }
.switch-bg-true {
- background-color: #d8baff;
- border: 0.136rem solid #d8baff; }
+ background-color: #ffc4f5;
+ border: 0.136rem solid #ffc4f5; }
.switch-fg {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- background-color: #e7e1e6;
- color: #1e1c20;
+ background-color: #eae0e4;
+ color: #211b1f;
min-width: 0.819rem;
min-height: 0.819rem;
margin-left: 0.477rem; }
.switch-fg-true {
- background-color: #3e1b6f;
- color: #d8baff;
+ background-color: #551251;
+ color: #ffc4f5;
min-width: 1.431rem;
min-height: 1.431rem;
margin-left: 1.431rem; }
@@ -467,14 +473,14 @@ tooltip {
.segment-container {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- border: 0.068rem solid #958f99; }
+ border: 0.068rem solid #9a8d95; }
.segment-container > *:first-child {
border-top-left-radius: 9999px;
border-bottom-left-radius: 9999px; }
.segment-container > * {
- border-right: 0.068rem solid #958f99;
+ border-right: 0.068rem solid #9a8d95;
padding: 0.341rem 0.682rem; }
.segment-container > *:last-child {
@@ -483,21 +489,21 @@ tooltip {
border-bottom-right-radius: 9999px; }
.segment-btn {
- color: #e7e1e6; }
+ color: #eae0e4; }
.segment-btn:focus,
.segment-btn:hover {
- background-color: #29262b;
- color: #cbc4ce; }
+ background-color: #3b3338;
+ color: #d1c2cb; }
.segment-btn-enabled {
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.segment-btn-enabled:hover,
.segment-btn-enabled:focus {
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.gap-v-5 {
min-height: 0.341rem; }
@@ -517,32 +523,24 @@ tooltip {
.gap-h-15 {
min-width: 1.023rem; }
+.bar-height {
+ min-height: 2.727rem; }
+
.bar-bg {
- background-color: #0f0d10;
+ background-color: #100d10;
min-height: 2.727rem; }
.bar-sidespace {
min-width: 1.5rem; }
.bar-group-margin {
- padding: 0.2rem; }
+ padding: 0.273rem 0rem; }
.bar-group {
- background-color: rgba(30, 28, 32, 0.31); }
-
-.bar-group-center {
- border-bottom-left-radius: 1.364rem;
- border-bottom-right-radius: 1.364rem;
- padding: 0.2rem;
- background-color: black; }
-
-.corner-bar-group {
- border-radius: 1.364rem;
- border-width: 0.068rem;
- background-color: black; }
+ background-color: rgba(59, 51, 56, 0.45); }
.bar-group-pad {
- padding: 0rem 1.023rem; }
+ padding: 0.205rem; }
.bar-group-pad-less {
padding: 0rem 0.681rem; }
@@ -570,7 +568,8 @@ tooltip {
padding-right: 0.681rem; }
.bar-group-standalone {
- border-radius: 1.364rem;
+ border-radius: 0.818rem;
+ -gtk-outline-radius: 0.818rem;
-gtk-outline-radius: 1.364rem; }
.bar-group-round {
@@ -594,103 +593,46 @@ tooltip {
border-bottom-right-radius: 1.364rem; }
.bar-ws-width {
- min-width: 18.614rem; }
+ min-width: 18.341rem; }
+
+.bar-ws {
+ min-width: 1.774rem;
+ color: #676165;
+ color: #726c6f; }
+
+.bar-ws-active {
+ background-color: #554050;
+ color: #f8daee; }
+
+.bar-ws-occupied {
+ background-color: #51434d;
+ background-color: #3b3338;
+ color: #d1c2cb; }
.bar-separator {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
min-width: 0.341rem;
min-height: 0.341rem;
- background-color: rgba(50, 48, 52, 0.31);
+ background-color: rgba(53, 47, 51, 0.31);
margin: 0rem 0.341rem; }
.bar-clock {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1.2727rem;
- color: #e7e1e6; }
+ color: #eae0e4; }
.bar-date {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1rem;
- color: #e7e1e6; }
-
-.bar-ws {
- min-height: 1.636rem;
- min-width: 1.772rem;
- font-size: 1.091rem;
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
- border-top: 0.068rem solid;
- border-bottom: 0.068rem solid;
- border-color: transparent;
- color: white; }
-
-.bar-ws-active-box {
- transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1); }
-
-.bar-ws-active {
- min-height: 1.5rem;
- min-width: 1.5rem;
- font-size: 1.091rem;
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
- background-color: #d8baff;
- color: #3e1b6f;
- border-radius: 999px;
- margin: 0.068rem; }
-
-.bar-ws-active-middledecor {
- min-width: 0.682rem;
- min-height: 0.682rem;
- border-radius: 9999px;
- background-color: black;
- margin: 0rem 0.409rem; }
-
-.bar-ws-occupied {
- background-color: #4b4357;
- color: #eaddf7;
- min-width: 1.772rem;
- border-top: 0.068rem solid #eaddf7;
- border-bottom: 0.068rem solid #eaddf7; }
-
-.bar-ws-occupied-left {
- background-color: #4b4357;
- color: #eaddf7;
- min-width: 1.704rem;
- border-top-left-radius: 999px;
- border-bottom-left-radius: 999px;
- border-left: 0.068rem solid #eaddf7;
- border-top: 0.068rem solid #eaddf7;
- border-bottom: 0.068rem solid #eaddf7;
- border-right: 0px solid transparent; }
-
-.bar-ws-occupied-right {
- background-color: #4b4357;
- color: #eaddf7;
- min-width: 1.704rem;
- border-top-right-radius: 999px;
- border-bottom-right-radius: 999px;
- border-right: 0.068rem solid #eaddf7;
- border-top: 0.068rem solid #eaddf7;
- border-bottom: 0.068rem solid #eaddf7;
- border-left: 0px solid transparent; }
-
-.bar-ws-occupied-left-right {
- border-radius: 9999px;
- -gtk-outline-radius: 9999px;
- background-color: #4b4357;
- color: #eaddf7;
- min-width: 1.636rem;
- border: 0.068rem solid #eaddf7; }
-
-.bar-ws-empty {
- color: #e7e1e6;
- border-color: transparent; }
+ color: #eae0e4; }
.bar-batt {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0rem 0.341rem;
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.bar-sidemodule {
min-width: 26rem; }
@@ -712,26 +654,26 @@ tooltip {
color: #d1e9d6; }
.bar-music-playstate {
- min-height: 1.770rem;
- min-width: 1.770rem;
+ min-height: 1.77rem;
+ min-width: 1.77rem;
border-radius: 10rem;
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.bar-music-circprog {
transition: 1000ms cubic-bezier(0.1, 1, 0, 1);
min-width: 0.068rem;
- min-height: 1.770rem;
+ min-height: 1.636rem;
padding: 0rem;
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.bar-music-playstate-playing {
- min-height: 1.770rem;
- min-width: 1.770rem;
+ min-height: 1.77rem;
+ min-width: 1.77rem;
border-radius: 10rem;
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.bar-music-playstate-txt {
transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
@@ -795,11 +737,11 @@ tooltip {
min-width: 0.068rem;
border-radius: 10rem; }
.bar-prog-batt progress {
- min-height: 0.680rem;
- min-width: 0.680rem;
+ min-height: 0.68rem;
+ min-width: 0.68rem;
margin: 0rem 0.137rem;
border-radius: 10rem;
- background-color: #eaddf7; }
+ background-color: #f8daee; }
.bar-prog-batt-low progress {
background-color: #930006; }
@@ -815,15 +757,15 @@ tooltip {
border-radius: 10rem;
min-width: 0.681rem;
min-height: 0.681rem;
- background-color: #eaddf7;
- color: #4b4357; }
+ background-color: #f8daee;
+ color: #554050; }
.bar-batt-chargestate-charging-smaller {
border-radius: 10rem;
min-width: 0.409rem;
min-height: 0.409rem;
- background-color: #eaddf7;
- color: #4b4357; }
+ background-color: #f8daee;
+ color: #554050; }
.bar-batt-chargestate-low {
background-color: #930006; }
@@ -837,7 +779,7 @@ tooltip {
font-weight: 500; }
.corner {
- background-color: #0f0d10;
+ background-color: #100d10;
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem; }
@@ -849,7 +791,7 @@ tooltip {
.bar-topdesc {
margin-top: -0.136rem;
margin-bottom: -0.341rem;
- color: #a6a1a6; }
+ color: #a9a1a4; }
.bar-space-button {
padding: 0.341rem; }
@@ -888,26 +830,26 @@ tooltip {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- margin: 0.2rem;
+ margin: 0.273rem;
padding: 0rem 0.614rem; }
.bar-statusicons-hover {
- background-color: #252225; }
+ background-color: #262225; }
.bar-statusicons-active {
- background-color: #3a373b; }
+ background-color: #3c373a; }
.cheatsheet-bg {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(169, 161, 165, 0.19);
+ border-left: 1px solid rgba(169, 161, 165, 0.19);
+ border-right: 1px solid rgba(134, 126, 130, 0.145);
+ border-bottom: 1px solid rgba(134, 126, 130, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
margin-bottom: 0.682rem;
- background-color: #0f0d10;
+ background-color: #100d10;
padding: 1.364rem; }
.cheatsheet-key {
@@ -918,16 +860,16 @@ tooltip {
padding: 0.136rem 0.205rem;
border-radius: 0.409rem;
-gtk-outline-radius: 0.409rem;
- color: #d8baff;
- border: 0.068rem solid #d8baff;
- box-shadow: 0rem 0.136rem 0rem #d8baff;
+ color: #ffc4f5;
+ border: 0.068rem solid #ffc4f5;
+ box-shadow: 0rem 0.136rem 0rem #ffc4f5;
font-weight: 500; }
.cheatsheet-key-notkey {
min-height: 1.364rem;
padding: 0.136rem 0.205rem;
margin: 0.17rem;
- color: #eedcff; }
+ color: #ffd6f5; }
.cheatsheet-closebtn {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -938,10 +880,10 @@ tooltip {
.cheatsheet-closebtn:hover,
.cheatsheet-closebtn:focus {
- background-color: #29262b; }
+ background-color: #3b3338; }
.cheatsheet-closebtn:active {
- background-color: #5a555c; }
+ background-color: #685e64; }
.cheatsheet-category-title {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
@@ -956,12 +898,12 @@ tooltip {
.bg-time-clock {
font-family: 'Gabarito';
font-size: 5.795rem;
- color: #e7e1e6; }
+ color: #eae0e4; }
.bg-time-date {
font-family: 'Gabarito';
font-size: 2.591rem;
- color: #e7e1e6; }
+ color: #eae0e4; }
.bg-distro-box {
border-radius: 1.705rem;
@@ -972,12 +914,12 @@ tooltip {
.bg-distro-txt {
font-family: 'Gabarito';
font-size: 1.432rem;
- color: #e7e1e6; }
+ color: #eae0e4; }
.bg-distro-name {
font-family: 'Gabarito';
font-size: 1.432rem;
- color: #eaddf7; }
+ color: #f8daee; }
.bg-graph {
color: rgba(255, 255, 255, 0.5);
@@ -986,25 +928,25 @@ tooltip {
.bg-quicklaunch-title {
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
- color: #cbc4ce; }
+ color: #d1c2cb; }
.bg-quicklaunch-btn {
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #29262b;
- color: #cbc4ce;
- border: 0.068rem solid #a6a1a6;
+ background-color: #3b3338;
+ color: #d1c2cb;
+ border: 0.068rem solid #a9a1a4;
min-width: 4.432rem;
min-height: 2.045rem;
padding: 0.273rem 0.682rem; }
.bg-quicklaunch-btn:hover,
.bg-quicklaunch-btn:focus {
- background-color: #312e33; }
+ background-color: #433a3f; }
.bg-quicklaunch-btn:active {
- background-color: #39363b; }
+ background-color: #4a4147; }
.bg-system-bg {
border-radius: 1.159rem;
@@ -1016,14 +958,14 @@ tooltip {
min-height: 4.091rem;
font-size: 0px;
padding: 0rem;
- background-color: #29262b; }
+ background-color: #3b3338; }
.dock-bg {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
- background-color: #0f0d10;
+ background-color: #100d10;
padding: 0.682rem; }
.dock-app-btn {
@@ -1033,10 +975,10 @@ tooltip {
.dock-app-btn:hover,
.dock-app-btn:focus {
- background-color: rgba(40, 38, 42, 0.31); }
+ background-color: rgba(43, 37, 41, 0.31); }
.dock-app-btn:active {
- background-color: rgba(60, 58, 62, 0.31); }
+ background-color: rgba(63, 57, 61, 0.31); }
.dock-app-icon {
min-width: 3.409rem;
@@ -1044,20 +986,20 @@ tooltip {
.dock-separator {
min-width: 0.068rem;
- background-color: #29262b; }
+ background-color: #3b3338; }
.osd-bg {
min-width: 8.864rem;
min-height: 3.409rem; }
.osd-value {
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(169, 161, 165, 0.19);
+ border-left: 1px solid rgba(169, 161, 165, 0.19);
+ border-right: 1px solid rgba(134, 126, 130, 0.145);
+ border-bottom: 1px solid rgba(134, 126, 130, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
- background-color: #0f0d10;
+ background-color: #100d10;
border-radius: 1.023rem;
padding: 0.625rem 1.023rem;
padding-top: 0.313rem;
@@ -1073,36 +1015,36 @@ tooltip {
min-height: 0.954rem;
min-width: 0.068rem;
border-radius: 10rem;
- background-color: #4b4357; }
+ background-color: #554050; }
.osd-progress progress {
transition: 200ms cubic-bezier(0.1, 1, 0, 1);
min-height: 0.680rem;
min-width: 0.680rem;
margin: 0rem 0.137rem;
border-radius: 10rem;
- background-color: #eaddf7; }
+ background-color: #f8daee; }
.osd-icon {
- color: #eedcff; }
+ color: #ffd6f5; }
.osd-label {
font-size: 1.023rem;
font-weight: 500;
- color: #e7e1e6;
+ color: #eae0e4;
margin-top: 0.341rem; }
.osd-value-txt {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1.688rem;
font-weight: 500;
- color: #e7e1e6; }
+ color: #eae0e4; }
.osd-notifs {
padding-top: 0.313rem; }
.osd-colorscheme {
border-radius: 1.023rem;
- background-color: #0f0d10;
+ background-color: #100d10;
padding: 1.023rem;
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem; }
@@ -1120,46 +1062,46 @@ tooltip {
margin: 0.409rem; }
.osd-color-primary {
- background-color: #d8baff;
- color: #3e1b6f; }
+ background-color: #ffc4f5;
+ color: #551251; }
.osd-color-primary box {
- background-color: #3e1b6f; }
+ background-color: #551251; }
.osd-color-primaryContainer {
- background-color: #563587;
- color: #eedcff; }
+ background-color: #7e4178;
+ color: #ffd6f5; }
.osd-color-primaryContainer box {
- background-color: #eedcff; }
+ background-color: #ffd6f5; }
.osd-color-secondary {
- background-color: #cec2da;
- color: #352d40; }
+ background-color: #dbbed2;
+ color: #3d2b39; }
.osd-color-secondary box {
- background-color: #352d40; }
+ background-color: #3d2b39; }
.osd-color-secondaryContainer {
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.osd-color-secondaryContainer box {
- background-color: #eaddf7; }
+ background-color: #f8daee; }
.osd-color-surfaceVariant {
- background-color: #29262b;
- color: #cbc4ce; }
+ background-color: #3b3338;
+ color: #d1c2cb; }
.osd-color-surfaceVariant box {
- background-color: #cbc4ce; }
+ background-color: #d1c2cb; }
.osd-color-surface {
- background-color: #1e1c20;
- color: #e7e1e6; }
+ background-color: #211b1f;
+ color: #eae0e4; }
.osd-color-surface box {
- background-color: #e7e1e6; }
+ background-color: #eae0e4; }
.osd-color-background {
- background-color: #0f0d10;
- color: #e7e1e6; }
+ background-color: #100d10;
+ color: #eae0e4; }
.osd-color-background box {
- background-color: #e7e1e6; }
+ background-color: #eae0e4; }
.osd-show {
transition: 200ms cubic-bezier(0.1, 1, 0, 1); }
@@ -1174,29 +1116,29 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(169, 161, 165, 0.19);
+ border-left: 1px solid rgba(169, 161, 165, 0.19);
+ border-right: 1px solid rgba(134, 126, 130, 0.145);
+ border-bottom: 1px solid rgba(134, 126, 130, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
min-width: 13.636rem;
min-height: 3.409rem;
padding: 0rem 1.364rem;
padding-right: 2.864rem;
- background-color: #0f0d10;
- color: #e7e1e6;
+ background-color: #100d10;
+ color: #eae0e4;
caret-color: transparent; }
.overview-search-box selection {
- background-color: #cec2da;
- color: #352d40; }
+ background-color: #dbbed2;
+ color: #3d2b39; }
.overview-search-box-extended {
min-width: 25.909rem;
- caret-color: #eaddf7; }
+ caret-color: #f8daee; }
.overview-search-prompt {
- color: #a6a1a6; }
+ color: #a9a1a4; }
.overview-search-icon {
margin: 0rem 1.023rem; }
@@ -1212,16 +1154,16 @@ tooltip {
.overview-search-results {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(169, 161, 165, 0.19);
+ border-left: 1px solid rgba(169, 161, 165, 0.19);
+ border-right: 1px solid rgba(134, 126, 130, 0.145);
+ border-bottom: 1px solid rgba(134, 126, 130, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
min-width: 28.773rem;
padding: 0.682rem;
- background-color: #0f0d10;
- color: #e7e1e6; }
+ background-color: #100d10;
+ color: #eae0e4; }
.overview-search-results-icon {
margin: 0rem 0.682rem;
@@ -1255,43 +1197,43 @@ tooltip {
.overview-tasks {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(169, 161, 165, 0.19);
+ border-left: 1px solid rgba(169, 161, 165, 0.19);
+ border-right: 1px solid rgba(134, 126, 130, 0.145);
+ border-bottom: 1px solid rgba(134, 126, 130, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
padding: 0.341rem;
- background-color: #0f0d10;
- color: #e7e1e6; }
+ background-color: #100d10;
+ color: #eae0e4; }
.overview-tasks-workspace {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
margin: 0.341rem;
- background-color: rgba(51, 48, 52, 0.1147); }
+ background-color: rgba(54, 47, 51, 0.1147); }
.overview-tasks-workspace-number {
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
- color: rgba(217, 211, 216, 0.31); }
+ color: rgba(220, 210, 214, 0.31); }
.overview-tasks-window {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- background-color: rgba(75, 67, 87, 0.5);
- color: #eaddf7;
- border: 0.068rem solid rgba(234, 221, 247, 0.07); }
+ background-color: rgba(85, 64, 80, 0.5);
+ color: #f8daee;
+ border: 0.068rem solid rgba(248, 218, 238, 0.07); }
.overview-tasks-window:hover,
.overview-tasks-window:focus {
- background-color: rgba(94, 83, 110, 0.525); }
+ background-color: rgba(108, 82, 103, 0.525); }
.overview-tasks-window:active {
- background-color: rgba(110, 97, 129, 0.55); }
+ background-color: rgba(128, 97, 121, 0.55); }
.overview-tasks-window-selected {
- background-color: rgba(110, 97, 129, 0.55); }
+ background-color: rgba(128, 97, 121, 0.55); }
.overview-tasks-window-dragging {
opacity: 0.2; }
@@ -1299,13 +1241,13 @@ tooltip {
.osk-window {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(169, 161, 165, 0.19);
+ border-left: 1px solid rgba(169, 161, 165, 0.19);
+ border-right: 1px solid rgba(134, 126, 130, 0.145);
+ border-bottom: 1px solid rgba(134, 126, 130, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
- background-color: #0f0d10; }
+ background-color: #100d10; }
.osk-body {
padding: 1.023rem;
@@ -1322,7 +1264,7 @@ tooltip {
.osk-dragline {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #29262b;
+ background-color: #3b3338;
min-height: 0.273rem;
min-width: 10.227rem;
margin-top: 0.545rem;
@@ -1330,22 +1272,22 @@ tooltip {
.osk-key {
border-radius: 0.682rem;
- background-color: rgba(41, 38, 43, 0.31);
- color: #cbc4ce;
+ background-color: rgba(59, 51, 56, 0.31);
+ color: #d1c2cb;
padding: 0.188rem;
font-weight: 500;
font-size: 1.091rem; }
.osk-key:hover,
.osk-key:focus {
- background-color: rgba(57, 54, 59, 0.31); }
+ background-color: rgba(74, 65, 71, 0.31); }
.osk-key:active {
- background-color: rgba(90, 85, 92, 0.31);
+ background-color: rgba(104, 94, 100, 0.31);
font-size: 1.091rem; }
.osk-key-active {
- background-color: rgba(90, 85, 92, 0.31); }
+ background-color: rgba(104, 94, 100, 0.31); }
.osk-key-normal {
min-width: 2.5rem;
@@ -1373,31 +1315,31 @@ tooltip {
.osk-control-button {
border-radius: 0.682rem;
- background-color: rgba(41, 38, 43, 0.31);
- color: #cbc4ce;
+ background-color: rgba(59, 51, 56, 0.31);
+ color: #d1c2cb;
font-weight: 500;
font-size: 1.091rem;
padding: 0.682rem; }
.osk-control-button:hover,
.osk-control-button:focus {
- background-color: rgba(57, 54, 59, 0.31); }
+ background-color: rgba(74, 65, 71, 0.31); }
.osk-control-button:active {
- background-color: rgba(90, 85, 92, 0.31);
+ background-color: rgba(104, 94, 100, 0.31);
font-size: 1.091rem; }
.sidebar-right {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(169, 161, 165, 0.19);
+ border-left: 1px solid rgba(169, 161, 165, 0.19);
+ border-right: 1px solid rgba(134, 126, 130, 0.145);
+ border-bottom: 1px solid rgba(134, 126, 130, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
border-radius: 1.297rem;
min-width: 27.818rem;
- background-color: #0f0d10;
+ background-color: #100d10;
padding: 1.023rem; }
.sideright-show {
@@ -1409,15 +1351,15 @@ tooltip {
.sidebar-left {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- border-top: 1px solid rgba(166, 162, 166, 0.19);
- border-left: 1px solid rgba(166, 162, 166, 0.19);
- border-right: 1px solid rgba(131, 127, 131, 0.145);
- border-bottom: 1px solid rgba(131, 127, 131, 0.145);
+ border-top: 1px solid rgba(169, 161, 165, 0.19);
+ border-left: 1px solid rgba(169, 161, 165, 0.19);
+ border-right: 1px solid rgba(134, 126, 130, 0.145);
+ border-bottom: 1px solid rgba(134, 126, 130, 0.145);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45);
margin: 0.476rem;
border-radius: 1.297rem;
min-width: 27.818rem;
- background-color: #0f0d10;
+ background-color: #100d10;
padding: 1.023rem; }
.sideleft-show {
@@ -1431,12 +1373,12 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
padding: 0.341rem;
- background-color: rgba(30, 28, 32, 0.31); }
+ background-color: rgba(33, 27, 31, 0.31); }
.sidebar-group-nopad {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(30, 28, 32, 0.31); }
+ background-color: rgba(33, 27, 31, 0.31); }
.sidebar-group-invisible {
padding: 0.341rem; }
@@ -1448,47 +1390,47 @@ tooltip {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0.341rem;
- background-color: rgba(30, 28, 32, 0.31); }
+ background-color: rgba(33, 27, 31, 0.31); }
.sidebar-iconbutton {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- color: #e7e1e6;
+ color: #eae0e4;
min-width: 2.727rem;
min-height: 2.727rem; }
.sidebar-iconbutton:hover,
.sidebar-iconbutton:focus {
- background-color: #6b6277; }
+ background-color: #765f70; }
.sidebar-iconbutton:active {
- background-color: #8b8197; }
+ background-color: #967e8f; }
.sidebar-button {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
padding: 0rem 0.818rem;
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.sidebar-button-nopad {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.sidebar-button:hover,
.sidebar-button:focus {
- background-color: #6b6277; }
+ background-color: #765f70; }
.sidebar-button:active {
- background-color: #8b8197; }
+ background-color: #967e8f; }
.sidebar-button-nopad:hover,
.sidebar-button-nopad:focus {
- background-color: #6b6277; }
+ background-color: #765f70; }
.sidebar-button-nopad:active {
- background-color: #8b8197; }
+ background-color: #967e8f; }
.sidebar-button-left {
border-top-left-radius: 0.818rem;
@@ -1507,20 +1449,20 @@ tooltip {
-gtk-outline-radius: 0.818rem; }
.sidebar-button-active {
- background-color: #d8baff;
- color: #3e1b6f; }
+ background-color: #ffc4f5;
+ color: #551251; }
.sidebar-button-active:hover,
.sidebar-button-active:focus {
- background-color: rgba(214, 185, 253, 0.93); }
+ background-color: rgba(253, 195, 243, 0.93); }
.sidebar-button-active:active {
- background-color: rgba(210, 182, 246, 0.79); }
+ background-color: rgba(246, 191, 237, 0.79); }
.sidebar-buttons-separator {
min-width: 0.068rem;
min-height: 0.068rem;
- background-color: #cbc4ce; }
+ background-color: #d1c2cb; }
.sidebar-navrail {
padding: 0rem 1.159rem; }
@@ -1532,19 +1474,19 @@ tooltip {
.sidebar-navrail-btn:hover > box > label:first-child,
.sidebar-navrail-btn:focus > box > label:first-child {
- background-color: rgba(102, 98, 104, 0.379); }
+ background-color: rgba(116, 105, 111, 0.379); }
.sidebar-navrail-btn:active > box > label:first-child {
- background-color: #524e54; }
+ background-color: #61575d; }
.sidebar-navrail-btn-active > box > label:first-child {
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.sidebar-navrail-btn-active:hover > box > label:first-child,
.sidebar-navrail-btn-active:focus > box > label:first-child {
- background-color: rgba(76, 68, 88, 0.93);
- color: rgba(232, 219, 245, 0.93); }
+ background-color: rgba(86, 65, 81, 0.93);
+ color: rgba(246, 216, 236, 0.93); }
.sidebar-sysinfo-grouppad {
padding: 1.159rem; }
@@ -1554,8 +1496,8 @@ tooltip {
min-width: 0.818rem;
min-height: 4.091rem;
padding: 0.409rem;
- background-color: #4b4357;
- color: #eaddf7;
+ background-color: #554050;
+ color: #f8daee;
font-size: 0px; }
.sidebar-memory-swap-circprog {
@@ -1564,16 +1506,16 @@ tooltip {
min-height: 2.255rem;
padding: 0.409rem;
margin: 0.918rem;
- background-color: #4b4357;
- color: #eaddf7;
+ background-color: #554050;
+ color: #f8daee;
font-size: 0px; }
.sidebar-cpu-circprog {
min-width: 0.818rem;
min-height: 3.409rem;
padding: 0.409rem;
- background-color: #4b4357;
- color: #eaddf7;
+ background-color: #554050;
+ color: #f8daee;
transition: 1000ms cubic-bezier(0.1, 1, 0, 1);
font-size: 0px; }
@@ -1588,14 +1530,14 @@ tooltip {
-gtk-outline-radius: 9999px;
min-width: 0.273rem;
min-height: 2.045rem;
- background-color: rgba(203, 196, 206, 0.31); }
+ background-color: rgba(209, 194, 203, 0.31); }
.sidebar-scrollbar slider:hover,
.sidebar-scrollbar slider:focus {
- background-color: rgba(203, 196, 206, 0.448); }
+ background-color: rgba(209, 194, 203, 0.448); }
.sidebar-scrollbar slider:active {
- background-color: #7a757d; }
+ background-color: #867b82; }
.sidebar-calendar-btn {
border-radius: 9999px;
@@ -1603,7 +1545,7 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 2.523rem;
min-width: 2.523rem;
- color: #e7e1e6; }
+ color: #eae0e4; }
.sidebar-calendar-btn:hover,
.sidebar-calendar-btn:focus {
@@ -1617,18 +1559,18 @@ tooltip {
margin-right: -10.341rem; }
.sidebar-calendar-btn-today {
- background-color: #d8baff;
- color: #3e1b6f; }
+ background-color: #ffc4f5;
+ color: #551251; }
.sidebar-calendar-btn-today:hover,
.sidebar-calendar-btn-today:focus {
- background-color: rgba(214, 185, 253, 0.93); }
+ background-color: rgba(253, 195, 243, 0.93); }
.sidebar-calendar-btn-today:active {
- background-color: rgba(210, 182, 246, 0.79); }
+ background-color: rgba(246, 191, 237, 0.79); }
.sidebar-calendar-btn-othermonth {
- color: #837f83; }
+ color: #867e82; }
.sidebar-calendar-header {
margin: 0.341rem; }
@@ -1637,50 +1579,50 @@ tooltip {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0rem 0.682rem;
- background-color: rgba(41, 38, 43, 0.31);
- color: #cbc4ce; }
+ background-color: rgba(59, 51, 56, 0.31);
+ color: #d1c2cb; }
.sidebar-calendar-monthyear-btn:hover,
.sidebar-calendar-monthyear-btn:focus {
- background-color: rgba(77, 73, 79, 0.3445);
- color: #c3bcc6; }
+ background-color: rgba(92, 83, 89, 0.3445);
+ color: #cabbc4; }
.sidebar-calendar-monthyear-btn:active {
- background-color: #413e43;
- color: #b3acb6; }
+ background-color: #52484e;
+ color: #bbadb5; }
.sidebar-calendar-monthshift-btn {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
min-width: 2.045rem;
min-height: 2.045rem;
- background-color: rgba(41, 38, 43, 0.31);
- color: #cbc4ce; }
+ background-color: rgba(59, 51, 56, 0.31);
+ color: #d1c2cb; }
.sidebar-calendar-monthshift-btn:hover {
- background-color: rgba(77, 73, 79, 0.3445);
- color: #c3bcc6; }
+ background-color: rgba(92, 83, 89, 0.3445);
+ color: #cabbc4; }
.sidebar-calendar-monthshift-btn:active {
- background-color: #413e43;
- color: #b3acb6; }
+ background-color: #52484e;
+ color: #bbadb5; }
.sidebar-selector-tab {
border-radius: 0.818rem;
-gtk-outline-radius: 0.818rem;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 2.5rem;
- color: #e7e1e6; }
+ color: #eae0e4; }
.sidebar-selector-tab:hover,
.sidebar-selector-tab:focus {
- background-color: rgba(102, 98, 104, 0.379); }
+ background-color: rgba(116, 105, 111, 0.379); }
.sidebar-selector-tab:active {
- background-color: #524e54; }
+ background-color: #61575d; }
.sidebar-selector-tab-active > box > label {
- color: #d8baff; }
+ color: #ffc4f5; }
.sidebar-selector-highlight-offset {
margin-top: -0.205rem;
@@ -1688,14 +1630,14 @@ tooltip {
.sidebar-selector-highlight {
transition: 180ms ease-in-out;
- color: #d8baff;
+ color: #ffc4f5;
min-height: 0.205rem; }
.sidebar-todo-item {
padding-right: 0.545rem; }
.sidebar-todo-item-even {
- background-color: rgba(41, 38, 43, 0.1); }
+ background-color: rgba(59, 51, 56, 0.1); }
.sidebar-todo-item-action {
border-radius: 9999px;
@@ -1704,17 +1646,17 @@ tooltip {
.sidebar-todo-item-action:hover,
.sidebar-todo-item-action:focus {
- background-color: rgba(70, 67, 72, 0.31); }
+ background-color: rgba(73, 66, 70, 0.31); }
.sidebar-todo-item-action:active {
- background-color: rgba(100, 97, 101, 0.31); }
+ background-color: rgba(103, 96, 100, 0.31); }
.sidebar-todo-crosser {
transition: margin 200ms cubic-bezier(0.1, 1, 0, 1), background-color 0ms;
min-width: 0rem; }
.sidebar-todo-crosser-crossed {
- background-color: #e7e1e6; }
+ background-color: #eae0e4; }
.sidebar-todo-crosser-removed {
background-color: #ffb4a9; }
@@ -1723,30 +1665,30 @@ tooltip {
border-radius: 0.818rem;
min-height: 2.045rem;
padding: 0.341rem;
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.sidebar-clipboard-item:hover,
.sidebar-clipboard-item:focus {
- background-color: #5b5267; }
+ background-color: #654f60; }
.sidebar-clipboard-item:active {
- background-color: #6b6277; }
+ background-color: #765f70; }
.sidebar-todo-new {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- color: #eaddf7;
+ color: #f8daee;
margin: 0.341rem;
padding: 0.205rem 0.545rem;
- border: 0.068rem solid #e7e1e6; }
+ border: 0.068rem solid #eae0e4; }
.sidebar-todo-new:hover,
.sidebar-todo-new:focus {
- background-color: #50485c; }
+ background-color: #5a4555; }
.sidebar-todo-new:active {
- background-color: #6b6277; }
+ background-color: #765f70; }
.sidebar-todo-add {
border-radius: 9999px;
@@ -1754,15 +1696,15 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-width: 1.705rem;
min-height: 1.705rem;
- color: #eaddf7;
- border: 0.068rem solid #e7e1e6; }
+ color: #f8daee;
+ border: 0.068rem solid #eae0e4; }
.sidebar-todo-add:hover,
.sidebar-todo-add:focus {
- background-color: #50485c; }
+ background-color: #5a4555; }
.sidebar-todo-add:active {
- background-color: #6b6277; }
+ background-color: #765f70; }
.sidebar-todo-add-available {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -1770,44 +1712,44 @@ tooltip {
-gtk-outline-radius: 9999px;
min-width: 1.705rem;
min-height: 1.705rem;
- background-color: #d8baff;
- color: #3e1b6f;
- border: 0.068rem solid #d8baff; }
+ background-color: #ffc4f5;
+ color: #551251;
+ border: 0.068rem solid #ffc4f5; }
.sidebar-todo-add-available:hover,
.sidebar-todo-add-available:focus {
- background-color: #d3b5fb; }
+ background-color: #fabff0; }
.sidebar-todo-add-available:active {
- background-color: #b99ae2; }
+ background-color: #dda0d4; }
.sidebar-todo-entry {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 0.818rem;
-gtk-outline-radius: 0.818rem;
- background-color: #29262b;
- color: #cbc4ce;
- caret-color: #cbc4ce;
+ background-color: #3b3338;
+ color: #d1c2cb;
+ caret-color: #d1c2cb;
margin: 0rem 0.341rem;
min-height: 1.773rem;
min-width: 0rem;
padding: 0.205rem 0.682rem;
- border: 0.068rem solid #7a757d; }
+ border: 0.068rem solid #867b82; }
.sidebar-todo-entry:focus {
- border: 0.068rem solid #bbb4be; }
+ border: 0.068rem solid #c2b4bc; }
.sidebar-module {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
padding: 0.341rem;
- background-color: rgba(30, 28, 32, 0.31); }
+ background-color: rgba(33, 27, 31, 0.31); }
.sidebar-module-btn-arrow {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
font-family: 'Material Symbols Rounded', 'Material Symbols Outlined', 'Material Symbols Sharp';
- background-color: rgba(41, 38, 43, 0.31);
+ background-color: rgba(59, 51, 56, 0.31);
min-width: 1.705rem;
min-height: 1.705rem; }
@@ -1815,7 +1757,7 @@ tooltip {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
padding: 0.341rem;
- background-color: rgba(30, 28, 32, 0.31); }
+ background-color: rgba(33, 27, 31, 0.31); }
.sidebar-chat-apiswitcher-icon {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -1823,11 +1765,11 @@ tooltip {
-gtk-outline-radius: 9999px;
min-width: 2.182rem;
min-height: 2.182rem;
- color: #e7e1e6; }
+ color: #eae0e4; }
.sidebar-chat-apiswitcher-icon-enabled {
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.sidebar-chat-viewport {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -1836,12 +1778,12 @@ tooltip {
.sidebar-chat-textarea {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- border: 0.068rem solid #6a656c;
+ border: 0.068rem solid #776c73;
padding: 0.682rem; }
.sidebar-chat-entry {
- color: #cbc4ce;
- caret-color: #cbc4ce;
+ color: #d1c2cb;
+ caret-color: #d1c2cb;
min-height: 1.773rem;
min-width: 0rem; }
@@ -1850,25 +1792,25 @@ tooltip {
min-width: 1.705rem;
min-height: 1.705rem;
border-radius: 0.478rem;
- background-color: #6a656c; }
+ background-color: #776c73; }
.sidebar-chat-send:hover,
.sidebar-chat-send:focus {
- background-color: #6e6970; }
+ background-color: #7b6f77; }
.sidebar-chat-send:active {
- background-color: #847d88; }
+ background-color: #91828c; }
.sidebar-chat-send-available {
- background-color: #d8baff;
- color: #3e1b6f; }
+ background-color: #ffc4f5;
+ color: #551251; }
.sidebar-chat-send-available:hover,
.sidebar-chat-send-available:focus {
- background-color: #d3b5fb; }
+ background-color: #fabff0; }
.sidebar-chat-send-available:active {
- background-color: #b99ae2; }
+ background-color: #dda0d4; }
.sidebar-chat-message {
margin: 0.682rem; }
@@ -1879,13 +1821,13 @@ tooltip {
min-width: 0.136rem; }
.sidebar-chat-indicator-user {
- background-color: #e7e1e6; }
+ background-color: #eae0e4; }
.sidebar-chat-indicator-bot {
- background-color: #d8baff; }
+ background-color: #ffc4f5; }
.sidebar-chat-indicator-System {
- background-color: #cec2da; }
+ background-color: #dbbed2; }
.sidebar-chat-name {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
@@ -1905,19 +1847,19 @@ tooltip {
.sidebar-chat-codeblock {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(73, 70, 76, 0.31);
- color: #cbc4ce;
+ background-color: rgba(89, 80, 85, 0.31);
+ color: #d1c2cb;
margin: 0rem 0.682rem;
- border: 0.068rem solid rgba(234, 221, 247, 0.07); }
+ border: 0.068rem solid rgba(248, 218, 238, 0.07); }
.sidebar-chat-codeblock-topbar {
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
margin: 0.273rem;
margin-bottom: 0rem;
- background-color: #4b4357;
- color: #eaddf7;
+ background-color: #554050;
+ color: #f8daee;
border-radius: 0.886rem;
- border: 0.068rem solid #5b5267;
+ border: 0.068rem solid #654f60;
border-top-left-radius: 0.886rem;
border-top-right-radius: 0.886rem;
padding: 0.341rem 0.477rem; }
@@ -1934,10 +1876,10 @@ tooltip {
.sidebar-chat-codeblock-topbar-btn:hover,
.sidebar-chat-codeblock-topbar-btn:focus {
- background-color: #6b6277; }
+ background-color: #765f70; }
.sidebar-chat-codeblock-topbar-btn:active {
- background-color: #8b8197; }
+ background-color: #967e8f; }
.sidebar-chat-codeblock-code {
font-family: 'JetBrains Mono NF', 'JetBrains Mono Nerd Font', 'JetBrains Mono NL', 'SpaceMono NF', 'SpaceMono Nerd Font', monospace;
@@ -1945,7 +1887,7 @@ tooltip {
.sidebar-chat-divider {
min-height: 1px;
- background-color: #6a656c;
+ background-color: #776c73;
margin: 0rem 0.545rem; }
.sidebar-chat-welcome-txt {
@@ -1976,19 +1918,19 @@ tooltip {
padding: 0.341rem 0.477rem; }
.sidebar-chat-chip-action {
- border: 0.068rem solid #6a656c; }
+ border: 0.068rem solid #776c73; }
.sidebar-chat-chip-action:hover,
.sidebar-chat-chip-action:focus {
- background-color: #6a656c; }
+ background-color: #776c73; }
.sidebar-chat-chip-action:active {
- background-color: #878289;
- color: #575259; }
+ background-color: #92868d;
+ color: #655b61; }
.sidebar-chat-chip-action-active {
- color: #6a656c;
- border: 0.068rem solid #6a656c; }
+ color: #776c73;
+ border: 0.068rem solid #776c73; }
.sidebar-pin {
border-radius: 0.818rem;
@@ -1996,47 +1938,47 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 2.386rem;
min-width: 2.386rem;
- color: #e7e1e6; }
+ color: #eae0e4; }
.sidebar-pin:hover,
.sidebar-pin:focus {
- background-color: rgba(102, 98, 104, 0.379); }
+ background-color: rgba(116, 105, 111, 0.379); }
.sidebar-pin:active {
- background-color: #524e54; }
+ background-color: #61575d; }
.sidebar-pin-enabled {
- background-color: #d8baff; }
+ background-color: #ffc4f5; }
.sidebar-pin-enabled label {
- color: #3e1b6f; }
+ color: #551251; }
.sidebar-pin-enabled:hover,
.sidebar-pin-enabled:focus {
- background-color: #c9aaf1; }
+ background-color: #eeb2e5; }
.sidebar-pin-enabled:active {
- background-color: #b99ae2; }
+ background-color: #dda0d4; }
.session-bg {
margin-top: -2.727rem;
- background-color: rgba(15, 13, 16, 0.64); }
+ background-color: rgba(16, 13, 16, 0.64); }
.session-button {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
min-width: 8.182rem;
min-height: 8.182rem;
- background-color: #29262b;
- color: #cbc4ce;
+ background-color: #3b3338;
+ color: #d1c2cb;
font-size: 3rem; }
.session-button-focused {
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.session-button-desc {
- background-color: #242126;
- color: #d9d3da;
+ background-color: #2e272c;
+ color: #ded1d8;
border-bottom-left-radius: 1.705rem;
border-bottom-right-radius: 1.705rem;
padding: 0.205rem 0.341rem;
@@ -2047,31 +1989,31 @@ tooltip {
-gtk-outline-radius: 1.705rem;
min-width: 8.182rem;
min-height: 5.455rem;
- background-color: #29262b;
- color: #cbc4ce;
+ background-color: #3b3338;
+ color: #d1c2cb;
font-size: 3rem; }
.notif-low {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(41, 38, 43, 0.45);
- color: #cbc4ce;
+ background-color: rgba(59, 51, 56, 0.45);
+ color: #d1c2cb;
padding: 0.818rem;
padding-right: 1.363rem; }
.notif-normal {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(41, 38, 43, 0.45);
- color: #cbc4ce;
+ background-color: rgba(59, 51, 56, 0.45);
+ color: #d1c2cb;
padding: 0.818rem;
padding-right: 1.363rem; }
.notif-critical {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: #4b4357;
- color: #eaddf7;
+ background-color: #554050;
+ color: #f8daee;
padding: 0.818rem;
padding-right: 1.363rem; }
@@ -2079,8 +2021,8 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 30.682rem;
- background-color: #0f0d10;
- color: #cbc4ce;
+ background-color: #100d10;
+ color: #d1c2cb;
padding: 0.818rem;
padding-right: 1.363rem; }
@@ -2088,8 +2030,8 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 30.682rem;
- background-color: #0f0d10;
- color: #cbc4ce;
+ background-color: #100d10;
+ color: #d1c2cb;
padding: 0.818rem;
padding-right: 1.363rem; }
@@ -2097,19 +2039,19 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 30.682rem;
- background-color: #4b4357;
- color: #eaddf7;
+ background-color: #554050;
+ color: #f8daee;
padding: 0.818rem;
padding-right: 1.363rem; }
.notif-body-low {
- color: #969098; }
+ color: #a0939a; }
.notif-body-normal {
- color: #969098; }
+ color: #a0939a; }
.notif-body-critical {
- color: #b6aac2; }
+ color: #c2a7ba; }
.notif-icon {
border-radius: 9999px;
@@ -2118,20 +2060,20 @@ tooltip {
min-height: 3.409rem; }
.notif-icon-material {
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.notif-icon-material-low {
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.notif-icon-material-normal {
- background-color: #4b4357;
- color: #eaddf7; }
+ background-color: #554050;
+ color: #f8daee; }
.notif-icon-material-critical {
- background-color: #eaddf7;
- color: #4b4357; }
+ background-color: #f8daee;
+ color: #554050; }
.notif-expand-btn {
border-radius: 1.159rem;
@@ -2161,29 +2103,29 @@ tooltip {
.osd-notif {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- background-color: rgba(15, 13, 16, 0.46);
+ background-color: rgba(16, 13, 16, 0.46);
min-width: 30.682rem; }
.notif-circprog-low {
transition: 0ms linear;
min-width: 0.136rem;
- min-height: 3.409rem;
+ min-height: 3.136rem;
padding: 0rem;
- color: #eaddf7; }
+ color: #f8daee; }
.notif-circprog-normal {
transition: 0ms linear;
min-width: 0.136rem;
- min-height: 3.409rem;
+ min-height: 3.136rem;
padding: 0rem;
- color: #eaddf7; }
+ color: #f8daee; }
.notif-circprog-critical {
transition: 0ms linear;
min-width: 0.136rem;
- min-height: 3.409rem;
+ min-height: 3.136rem;
padding: 0rem;
- color: #4b4357; }
+ color: #554050; }
.notif-actions {
min-height: 2.045rem; }
@@ -2193,37 +2135,37 @@ tooltip {
-gtk-outline-radius: 0.818rem; }
.notif-action-low {
- background-color: rgba(41, 38, 43, 0.5);
- color: #cbc4ce; }
+ background-color: rgba(51, 44, 48, 0.31);
+ color: #d1c2cb; }
.notif-action-low:focus,
.notif-action-low:hover {
- background-color: rgba(52, 49, 54, 0.481); }
+ background-color: rgba(65, 57, 62, 0.31); }
.notif-action-low:active {
- background-color: rgba(58, 55, 60, 0.4715); }
+ background-color: rgba(73, 65, 71, 0.31); }
.notif-action-normal {
- background-color: rgba(41, 38, 43, 0.5);
- color: #cbc4ce; }
+ background-color: rgba(51, 44, 48, 0.31);
+ color: #d1c2cb; }
.notif-action-normal:focus,
.notif-action-normal:hover {
- background-color: rgba(52, 49, 54, 0.481); }
+ background-color: rgba(65, 57, 62, 0.31); }
.notif-action-normal:active {
- background-color: rgba(58, 55, 60, 0.4715); }
+ background-color: rgba(73, 65, 71, 0.31); }
.notif-action-critical {
- background-color: rgba(203, 196, 206, 0.31);
- color: #cbc4ce; }
+ background-color: #654f60;
+ color: #d1c2cb; }
.notif-action-critical:focus,
.notif-action-critical:hover {
- background-color: rgba(52, 49, 54, 0.481); }
+ background-color: #725c6c; }
.notif-action-critical:active {
- background-color: rgba(58, 55, 60, 0.4715); }
+ background-color: #7a6374; }
.osd-music {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2233,9 +2175,9 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 29.659rem;
- background-color: #0f0d10;
+ background-color: #100d10;
padding: 0rem 1.023rem;
- background: linear-gradient(127deg, rgba(33, 30, 35, 0.7), rgba(33, 30, 35, 0.55) 70.71%), linear-gradient(217deg, rgba(74, 69, 78, 0.7), rgba(74, 69, 78, 0.55) 70.71%), radial-gradient(circle at 0% 100%, #4b4357 13%, rgba(0, 0, 0, 0) 100%), linear-gradient(336deg, rgba(75, 67, 87, 0.7), rgba(75, 67, 87, 0.55) 70.71%), linear-gradient(#0f0d10, #0f0d10); }
+ background: linear-gradient(127deg, rgba(47, 41, 46, 0.7), rgba(47, 41, 46, 0.55) 70.71%), linear-gradient(217deg, rgba(78, 68, 75, 0.7), rgba(78, 68, 75, 0.55) 70.71%), radial-gradient(circle at 0% 100%, #554050 13%, rgba(0, 0, 0, 0) 100%), linear-gradient(336deg, rgba(85, 64, 80, 0.7), rgba(85, 64, 80, 0.55) 70.71%), linear-gradient(#100d10, #100d10); }
.osd-music-cover-fallback {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2243,8 +2185,8 @@ tooltip {
-gtk-outline-radius: 0.818rem;
min-width: 7.5rem;
min-height: 7.5rem;
- background-color: rgba(30, 28, 32, 0.31);
- color: #d7d1d7; }
+ background-color: rgba(33, 27, 31, 0.31);
+ color: #dad0d5; }
.osd-music-cover {
border-radius: 0.818rem;
@@ -2270,13 +2212,13 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1.364rem;
- color: #d7d1d7; }
+ color: #dad0d5; }
.osd-music-artists {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 0.955rem;
- color: rgba(202, 196, 203, 0.9); }
+ color: rgba(205, 196, 201, 0.9); }
.osd-music-pill {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2285,8 +2227,8 @@ tooltip {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
min-width: 1.833rem;
padding: 0.273rem 0.682rem;
- background-color: rgba(51, 46, 55, 0.5);
- color: #d7d1d7; }
+ background-color: rgba(55, 46, 53, 0.5);
+ color: #dad0d5; }
.osd-music-controls {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2295,8 +2237,8 @@ tooltip {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
min-width: 1.833rem;
padding: 0.205rem;
- background-color: rgba(51, 46, 55, 0.5);
- color: #d7d1d7; }
+ background-color: rgba(55, 46, 53, 0.5);
+ color: #dad0d5; }
.osd-music-controlbtn {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2307,10 +2249,10 @@ tooltip {
.osd-music-controlbtn:hover,
.osd-music-controlbtn:focus {
- background-color: rgba(92, 87, 95, 0.55); }
+ background-color: rgba(96, 87, 93, 0.55); }
.osd-music-controlbtn:active {
- background-color: rgba(108, 102, 110, 0.575); }
+ background-color: rgba(111, 102, 108, 0.575); }
.osd-music-controlbtn-txt {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2324,15 +2266,15 @@ tooltip {
min-width: 0.409rem;
min-height: 3.068rem;
padding: 0.273rem;
- color: #d7d1d7; }
+ color: #dad0d5; }
.osd-music-playstate {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 3.068rem;
min-width: 3.068rem;
border-radius: 10rem;
- background-color: rgba(51, 46, 55, 0.5);
- color: #d7d1d7; }
+ background-color: rgba(55, 46, 53, 0.5);
+ color: #dad0d5; }
.osd-music-playstate-btn > label {
transition: 50ms cubic-bezier(0.05, 0.7, 0.1, 1);
diff --git a/.config/ags/widgets/bar/main.js b/.config/ags/widgets/bar/main.js
index 25e5405d4..aefc3a173 100644
--- a/.config/ags/widgets/bar/main.js
+++ b/.config/ags/widgets/bar/main.js
@@ -6,19 +6,19 @@ import { ModuleLeftSpace } from "./leftspace.js";
import { ModuleMusic } from "./music.js";
import { ModuleRightSpace } from "./rightspace.js";
import { ModuleSystem } from "./system.js";
-import { ModuleWorkspaces } from "./workspaces.js";
+import ModuleWorkspaces from "./workspaces.js";
import { RoundedCorner } from "../../lib/roundedcorner.js";
const left = Widget.Box({
className: 'bar-sidemodule',
- children: [ModuleMusic()],
+ children: [
+ ModuleMusic()
+ ],
});
const center = Widget.Box({
children: [
- RoundedCorner('topright', { className: 'corner-bar-group' }),
ModuleWorkspaces(),
- RoundedCorner('topleft', { className: 'corner-bar-group' }),
],
});
@@ -36,7 +36,7 @@ export default () => Widget.Window({
className: 'bar-bg',
startWidget: ModuleLeftSpace(),
centerWidget: Widget.Box({
- className: 'spacing-h--20',
+ className: 'spacing-h-4',
children: [
left,
center,
diff --git a/.config/ags/widgets/bar/music.js b/.config/ags/widgets/bar/music.js
index 32b4a6888..3d2389c53 100644
--- a/.config/ags/widgets/bar/music.js
+++ b/.config/ags/widgets/bar/music.js
@@ -14,7 +14,7 @@ const TrackProgress = () => {
}
return AnimatedCircProg({
className: 'bar-music-circprog',
- vpack: 'center',
+ vpack: 'center', hpack: 'center',
connections: [ // Update on change/once every 3 seconds
[Mpris, _updateProgress],
[3000, _updateProgress]
diff --git a/.config/ags/widgets/bar/tray.js b/.config/ags/widgets/bar/tray.js
index 98ca3681d..34720765a 100644
--- a/.config/ags/widgets/bar/tray.js
+++ b/.config/ags/widgets/bar/tray.js
@@ -25,7 +25,7 @@ const SysTrayItem = item => Button({
export const Tray = (props = {}) => {
const trayContent = Box({
- className: 'bar-systray bar-group spacing-h-10',
+ className: 'bar-systray spacing-h-10',
properties: [
['items', new Map()],
['onAdded', (box, id) => {
diff --git a/.config/ags/widgets/bar/workspaces.js b/.config/ags/widgets/bar/workspaces.js
index 6719f5fc6..cd0573a8f 100644
--- a/.config/ags/widgets/bar/workspaces.js
+++ b/.config/ags/widgets/bar/workspaces.js
@@ -1,98 +1,165 @@
const { GLib, Gdk, Gtk } = imports.gi;
+const Lang = imports.lang;
+const Cairo = imports.cairo;
+const Pango = imports.gi.Pango;
+const PangoCairo = imports.gi.PangoCairo;
import { App, Service, Utils, Widget } from '../../imports.js';
+const { Box, DrawingArea, EventBox } = Widget;
import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';
-const WORKSPACE_SIDE_PAD = 0.546; // rem
const NUM_OF_WORKSPACES = 10;
-let lastWorkspace = 0;
+const dummyWs = Box({ className: 'bar-ws' }); // Not shown. Only for getting size props
+const dummyActiveWs = Box({ className: 'bar-ws bar-ws-active' }); // Not shown. Only for getting size props
+const dummyOccupiedWs = Box({ className: 'bar-ws bar-ws-occupied' }); // Not shown. Only for getting size props
-const activeWorkspaceIndicator = Widget.Box({
- css: `
- padding: 0rem ${WORKSPACE_SIDE_PAD}rem;
- `,
- children: [
- Widget.Box({
- vpack: 'center',
- hpack: 'start',
- className: 'bar-ws-active-box',
- setup: (self) => self.hook(Hyprland.active.workspace, (box) => {
- const ws = Hyprland.active.workspace.id;
- box.setCss(`
- margin-left: ${1.774 * (ws - 1) + 0.068}rem;
- `);
- lastWorkspace = ws;
- }),
- children: [
- Widget.Label({
- vpack: 'center',
- className: 'bar-ws-active',
- label: `โข`,
- })
- ]
- })
- ]
-});
+// Font size = workspace id
+const WorkspaceContents = (count = 10) => {
+ return DrawingArea({
+ properties: [
+ ['workspaceMask', 0],
+ ],
+ css: `transition: 500ms cubic-bezier(0.1, 1, 0, 1);`,
+ setup: (area) => area
+ .hook(Hyprland.active.workspace, (area) =>
+ area.setCss(`font-size: ${Hyprland.active.workspace.id}px;`)
+ )
+ .hook(Hyprland, (area) => {
+ const workspaces = Hyprland.workspaces;
+ let workspaceMask = 0;
+ for (let i = 0; i < workspaces.length; i++) {
+ const ws = workspaces[i];
+ if (ws.id < 0) continue; // Ignore scratchpads
+ if (ws.id > count) return; // Not rendered
+ if (workspaces[i].windows > 0) {
+ workspaceMask |= (1 << ws.id);
+ }
+ }
+ area._workspaceMask = workspaceMask;
+ }, 'notify::workspaces')
+ .on('draw', Lang.bind(area, (area, cr) => {
+ const allocation = area.get_allocation();
+ const { width, height } = allocation;
-export const ModuleWorkspaces = () => Widget.EventBox({
- onScrollUp: () => Utils.execAsync(['bash', '-c', 'hyprctl dispatch workspace -1 &']),
- onScrollDown: () => Utils.execAsync(['bash', '-c', 'hyprctl dispatch workspace +1 &']),
+ const workspaceStyleContext = dummyWs.get_style_context();
+ const workspaceDiameter = workspaceStyleContext.get_property('min-width', Gtk.StateFlags.NORMAL);
+ const workspaceRadius = workspaceDiameter / 2;
+ const workspaceFontSize = workspaceStyleContext.get_property('font-size', Gtk.StateFlags.NORMAL) / 4 * 3;
+ const workspaceFontFamily = workspaceStyleContext.get_property('font-family', Gtk.StateFlags.NORMAL);
+ const wsbg = workspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
+ const wsfg = workspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
+
+ const occupiedWorkspaceStyleContext = dummyOccupiedWs.get_style_context();
+ const occupiedbg = occupiedWorkspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
+ const occupiedfg = occupiedWorkspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
+
+ const activeWorkspaceStyleContext = dummyActiveWs.get_style_context();
+ const activebg = activeWorkspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
+ const activefg = activeWorkspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
+ area.set_size_request(workspaceDiameter * count, -1);
+ const widgetStyleContext = area.get_style_context();
+ const activeWs = widgetStyleContext.get_property('font-size', Gtk.StateFlags.NORMAL);
+
+ const activeWsCenterX = -(workspaceDiameter / 2) + (workspaceDiameter * activeWs);
+ const activeWsCenterY = height / 2;
+
+ // Font
+ const layout = PangoCairo.create_layout(cr);
+ const fontDesc = Pango.font_description_from_string(`${workspaceFontFamily[0]} ${workspaceFontSize}`);
+ layout.set_font_description(fontDesc);
+ // Get kinda min radius for number indicators
+ layout.set_text("0".repeat(count.toString().length), -1);
+ const [layoutWidth, layoutHeight] = layout.get_pixel_size();
+ const indicatorRadius = Math.max(layoutWidth, layoutHeight) / 2 * 1.2; // a bit smaller than sqrt(2)*radius
+ const indicatorGap = workspaceRadius - indicatorRadius;
+
+ // Draw workspace numbers
+ for (let i = 1; i <= count; i++) {
+ if (area._workspaceMask & (1 << i)) {
+ // Draw bg highlight
+ cr.setSourceRGBA(occupiedbg.red, occupiedbg.green, occupiedbg.blue, occupiedbg.alpha);
+ const wsCenterX = -(workspaceRadius) + (workspaceDiameter * i);
+ const wsCenterY = height / 2;
+ if (!(area._workspaceMask & (1 << (i - 1)))) { // Left
+ cr.arc(wsCenterX, wsCenterY, workspaceRadius, 0.5 * Math.PI, 1.5 * Math.PI);
+ cr.fill();
+ }
+ else {
+ cr.rectangle(wsCenterX - workspaceRadius , wsCenterY - workspaceRadius, workspaceRadius , workspaceRadius * 2)
+ cr.fill();
+ }
+ if (!(area._workspaceMask & (1 << (i + 1)))) { // Right
+ cr.arc(wsCenterX, wsCenterY, workspaceRadius, -0.5 * Math.PI, 0.5 * Math.PI);
+ cr.fill();
+ }
+ else {
+ cr.rectangle(wsCenterX, wsCenterY - workspaceRadius, workspaceRadius , workspaceRadius * 2)
+ cr.fill();
+ }
+
+ // Set color for text
+ cr.setSourceRGBA(occupiedfg.red, occupiedfg.green, occupiedfg.blue, occupiedfg.alpha);
+ }
+ else
+ cr.setSourceRGBA(wsfg.red, wsfg.green, wsfg.blue, wsfg.alpha);
+ layout.set_text(`${i}`, -1);
+ const [layoutWidth, layoutHeight] = layout.get_pixel_size();
+ const x = -workspaceRadius + (workspaceDiameter * i) - (layoutWidth / 2);
+ const y = (height - layoutHeight) / 2;
+ cr.moveTo(x, y);
+ // cr.showText(text);
+ PangoCairo.show_layout(cr, layout);
+ cr.stroke();
+ }
+
+ // Draw active ws
+ // base
+ cr.setSourceRGBA(activebg.red, activebg.green, activebg.blue, activebg.alpha);
+ cr.arc(activeWsCenterX, activeWsCenterY, indicatorRadius, 0, 2 * Math.PI);
+ cr.fill();
+ // inner decor
+ cr.setSourceRGBA(activefg.red, activefg.green, activefg.blue, activefg.alpha);
+ cr.arc(activeWsCenterX, activeWsCenterY, indicatorRadius * 0.19, 0, 2 * Math.PI);
+ cr.fill();
+ }))
+ ,
+ })
+}
+
+export default () => EventBox({
+ onScrollUp: () => Hyprland.sendMessage(`dispatch workspace -1`),
+ onScrollDown: () => Hyprland.sendMessage(`dispatch workspace +1`),
onMiddleClickRelease: () => App.toggleWindow('overview'),
onSecondaryClickRelease: () => App.toggleWindow('osk'),
- child: Widget.Box({
+ properties: [
+ ['clicked', false],
+ ],
+ child: Box({
homogeneous: true,
- className: 'bar-ws-width',
- children: [
- Widget.Overlay({
- passThrough: true,
- child: Widget.Box({
- homogeneous: true,
- className: 'bar-group-center',
- children: [Widget.Box({
- className: 'bar-group-standalone bar-group-pad',
- })]
- }),
- overlays: [
- Widget.Overlay({
- setup: (self) => self.set_overlay_pass_through(self.get_children()[1], true),
- child: Widget.Box({
- hpack: 'center',
- css: `
- padding: 0rem ${WORKSPACE_SIDE_PAD}rem;
- `,
- // homogeneous: true,
- children: Array.from({ length: NUM_OF_WORKSPACES }, (_, i) => i + 1).map(i => Widget.Button({
- onPrimaryClick: () => Utils.execAsync(['bash', '-c', `hyprctl dispatch workspace ${i} &`]).catch(print),
- child: Widget.Label({
- vpack: 'center',
- label: `${i}`,
- className: 'bar-ws txt',
- }),
- })),
- setup: (self) => self.hook(Hyprland, (box) => {
- // console.log('update');
- const kids = box.children;
- for (let i = 0; i < kids.length; i++) {
- const child = kids[i];
- child.child.toggleClassName('bar-ws-occupied', false);
- child.child.toggleClassName('bar-ws-occupied-left', false);
- child.child.toggleClassName('bar-ws-occupied-right', false);
- child.child.toggleClassName('bar-ws-occupied-left-right', false);
- }
-
- const occupied = Array.from({ length: NUM_OF_WORKSPACES }, (_, i) => Hyprland.getWorkspace(i + 1)?.windows > 0);
- for (let i = 0; i < occupied.length; i++) {
- if (!occupied[i]) continue;
- const child = kids[i];
- child.child.toggleClassName(`bar-ws-occupied${!occupied[i - 1] ? '-left' : ''}${!occupied[i + 1] ? '-right' : ''}`, true);
- }
- }, 'notify::workspaces'),
- }),
- overlays: [
- activeWorkspaceIndicator,
- ]
- })
- ],
- })
- ]
- })
-});
+ className: 'bar-group-margin',
+ children: [Box({
+ className: 'bar-group bar-group-standalone bar-group-pad',
+ css: 'min-width: 2px;',
+ children: [
+ WorkspaceContents(10),
+ ]
+ })]
+ }),
+ setup: (self) => {
+ self.add_events(Gdk.EventMask.POINTER_MOTION_MASK);
+ self.on('motion-notify-event', (self, event) => {
+ if (!self._clicked) return;
+ const [_, cursorX, cursorY] = event.get_coords();
+ const widgetWidth = self.get_allocation().width;
+ const wsId = Math.ceil(cursorX * NUM_OF_WORKSPACES / widgetWidth);
+ Hyprland.sendMessage(`dispatch workspace ${wsId}`)
+ })
+ self.on('button-press-event', (self, event) => {
+ self._clicked = true;
+ const [_, cursorX, cursorY] = event.get_coords();
+ const widgetWidth = self.get_allocation().width;
+ const wsId = Math.ceil(cursorX * NUM_OF_WORKSPACES / widgetWidth);
+ Hyprland.sendMessage(`dispatch workspace ${wsId}`);
+ })
+ self.on('button-release-event', (self) => self._clicked = false);
+ }
+})
diff --git a/.config/ags/widgets/overview/overview.js b/.config/ags/widgets/overview/overview.js
index aca13a286..f4deac393 100644
--- a/.config/ags/widgets/overview/overview.js
+++ b/.config/ags/widgets/overview/overview.js
@@ -330,7 +330,8 @@ const OverviewRow = ({ startWorkspace, workspaces, windowName = 'overview' }) =>
export const SearchAndWindows = () => {
var _appSearchResults = [];
- const clickOutsideToClose = Widget.EventBox({
+ const ClickToClose = ({ ...props }) => Widget.EventBox({
+ ...props,
onPrimaryClick: () => App.closeWindow('overview'),
onSecondaryClick: () => App.closeWindow('overview'),
onMiddleClick: () => App.closeWindow('overview'),
@@ -506,9 +507,12 @@ export const SearchAndWindows = () => {
return Widget.Box({
vertical: true,
- className: 'overview-window',
children: [
- clickOutsideToClose,
+ ClickToClose({ // Top margin. Also works as a click-outside-to-close thing
+ child: Widget.Box({
+ className: 'bar-height',
+ })
+ }),
Widget.Box({
hpack: 'center',
children: [
From 6a42af63ca4c2192d5f97cd1999b285dea9cde94 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Sun, 31 Dec 2023 01:01:05 +0700
Subject: [PATCH 034/265] bar: utils buttons, new battery indicator
---
.config/ags/config.js | 6 +-
.../ags/scripts/templates/hypr/colors.conf | 3 +-
.config/ags/scss/_bar.scss | 79 ++++---
.config/ags/scss/_colors.scss | 75 ++++--
.config/ags/scss/_lib_classes.scss | 60 ++---
.config/ags/scss/_musicmaterial.scss | 1 -
.config/ags/scss/_osd.scss | 1 -
.config/ags/style.css | 111 +++++----
.config/ags/widgets/bar/music.js | 4 +-
.config/ags/widgets/bar/system.js | 222 ++++++++++--------
.config/ags/widgets/bar/workspaces.js | 10 +-
.../desktopbackground/timeandlaunches.js | 2 +-
.../ags/widgets/indicators/indicatorvalues.js | 1 +
.config/ags/widgets/sideright/quicktoggles.js | 20 +-
14 files changed, 351 insertions(+), 244 deletions(-)
diff --git a/.config/ags/config.js b/.config/ags/config.js
index 74ebdae56..25df63fbc 100644
--- a/.config/ags/config.js
+++ b/.config/ags/config.js
@@ -5,7 +5,7 @@ import { App, Utils } from './imports.js';
import Bar from './widgets/bar/main.js';
import Cheatsheet from './widgets/cheatsheet/main.js';
// import DesktopBackground from './widgets/desktopbackground/main.js';
-import Dock from './widgets/dock/main.js';
+// import Dock from './widgets/dock/main.js';
import { CornerTopleft, CornerTopright, CornerBottomleft, CornerBottomright } from './widgets/screencorners/main.js';
import Indicator from './widgets/indicators/main.js';
import Osk from './widgets/onscreenkeyboard/main.js';
@@ -16,7 +16,7 @@ import SideRight from './widgets/sideright/main.js';
const CLOSE_ANIM_TIME = 210; // Longer than actual anim time (see styles) to make sure widgets animate fully
-// Init cache and check first run
+// Init cache
Utils.exec(`bash -c 'mkdir -p ~/.cache/ags/user/colorschemes'`);
// SCSS compilation
Utils.exec(`bash -c 'echo "" > ${App.configDir}/scss/_musicwal.scss'`); // reset music styles
@@ -44,7 +44,7 @@ export default {
CornerBottomleft(),
CornerBottomright(),
// DesktopBackground(),
- Dock(), // Buggy
+ // Dock(), // Buggy
Overview(),
Indicator(),
Cheatsheet(),
diff --git a/.config/ags/scripts/templates/hypr/colors.conf b/.config/ags/scripts/templates/hypr/colors.conf
index 6a9ec6051..f62ab7a71 100755
--- a/.config/ags/scripts/templates/hypr/colors.conf
+++ b/.config/ags/scripts/templates/hypr/colors.conf
@@ -1,4 +1,5 @@
-# Auto generated color theme for image at: [Local wallpaper]
+$SLURP_COMMAND="$(slurp -d -c {{ $onSecondaryContainer }}BB -b {{ $secondaryContainer }}22 -s 00000000)"
+
general {
col.active_border = rgba({{ $onPrimary }}FF)
col.inactive_border = rgba({{ $secondaryContainer }}CC)
diff --git a/.config/ags/scss/_bar.scss b/.config/ags/scss/_bar.scss
index d0e2a7892..dfde74374 100644
--- a/.config/ags/scss/_bar.scss
+++ b/.config/ags/scss/_bar.scss
@@ -4,6 +4,10 @@
$black: black;
$white: white;
$bar_ws_width: 1.774rem;
+$bar_subgroup_bg: mix($surfaceVariant, $primary, 89%);
+@if $darkmode ==true {
+ $bar_subgroup_bg: $surfaceVariant;
+}
@mixin bar-group-rounding {
@include small-rounding;
@@ -33,6 +37,7 @@ $bar_ws_width: 1.774rem;
.bar-group-pad {
// padding: 0rem 1.023rem;
padding: 0.205rem;
+ // padding-left: 0.341rem;
}
.bar-group-pad-less {
@@ -41,7 +46,7 @@ $bar_ws_width: 1.774rem;
.bar-group-pad-system {
padding-left: 1.023rem;
- padding-right: 0.547rem;
+ padding-right: 0.341rem;
}
.bar-group-pad-music {
@@ -114,10 +119,7 @@ $bar_ws_width: 1.774rem;
}
.bar-ws-occupied {
- background-color: mix($surfaceVariant, $primary, 89%);
- @if $darkmode ==true {
- background-color: $surfaceVariant;
- }
+ background-color: $bar_subgroup_bg;
color: $onSurfaceVariant;
}
@@ -132,7 +134,6 @@ $bar_ws_width: 1.774rem;
.bar-clock {
@include titlefont;
font-size: 1.2727rem;
- color: $onBackground;
}
.bar-date {
@@ -143,10 +144,11 @@ $bar_ws_width: 1.774rem;
.bar-batt {
@include full-rounding;
- padding: 0rem 0.341rem;
- background-color: $t_secondaryContainer;
- color: $t_onSecondaryContainer;
- // border: 0.068rem solid $outline;
+ min-height: 1.77rem;
+ min-width: 1.77rem;
+ border-radius: 10rem;
+ background-color: $secondaryContainer;
+ color: $onSecondaryContainer;
}
.bar-sidemodule {
@@ -163,12 +165,29 @@ $bar_ws_width: 1.774rem;
color: $onSuccessContainer;
}
-.bar-batt-prog-low {
+.bar-batt-circprog {
+ @include fluent_decel_long;
+ min-width: 0.068rem; // line width
+ min-height: 1.636rem;
+ padding: 0rem;
+ background-color: $secondaryContainer;
+ color: $onSecondaryContainer;
+}
+
+.bar-batt-circprog-low {
+ @include fluent_decel_long;
+ min-width: 0.068rem; // line width
+ min-height: 1.636rem;
+ padding: 0rem;
background-color: $error;
color: $errorContainer;
}
-.bar-batt-prog-full {
+.bar-batt-circprog-full {
+ @include fluent_decel_long;
+ min-width: 0.068rem; // line width
+ min-height: 1.636rem;
+ padding: 0rem;
background-color: $successContainer;
color: $onSuccessContainer;
}
@@ -304,30 +323,14 @@ $bar_ws_width: 1.774rem;
border-radius: 10rem;
min-width: 0.681rem;
min-height: 0.681rem;
- background-color: $t_onSecondaryContainer;
- color: $secondaryContainer;
+ background-color: $onSurfaceVariant;
}
.bar-batt-chargestate-charging-smaller {
border-radius: 10rem;
min-width: 0.409rem;
min-height: 0.409rem;
- background-color: $t_onSecondaryContainer;
- color: $secondaryContainer;
-}
-
-.bar-batt-chargestate-low {
- background-color: $errorContainer;
-}
-
-.bar-batt-chargestate-full {
- background-color: $onSuccessContainer;
-}
-
-.bar-batt-percentage {
- font-size: 1rem;
- margin-top: -0.068rem;
- font-weight: 500;
+ background-color: $onSurfaceVariant;
}
.corner {
@@ -400,3 +403,19 @@ $bar_ws_width: 1.774rem;
.bar-statusicons-active {
background-color: mix($t_background, $t_onBackground, 80%);
}
+
+.bar-util-btn {
+ @include full-rounding;
+ min-height: 1.77rem;
+ min-width: 1.77rem;
+ background-color: $bar_subgroup_bg;
+}
+
+.bar-util-btn:hover,
+.bar-util-btn:focus {
+ background-color: mix($bar_subgroup_bg, $onSurfaceVariant, 90%);
+}
+
+.bar-util-btn:active {
+ background-color: mix($bar_subgroup_bg, $onSurfaceVariant, 80%);
+}
\ No newline at end of file
diff --git a/.config/ags/scss/_colors.scss b/.config/ags/scss/_colors.scss
index ffe3c4ad9..6aa9424f3 100755
--- a/.config/ags/scss/_colors.scss
+++ b/.config/ags/scss/_colors.scss
@@ -16,7 +16,7 @@ $transparency_enabled: false;
@if $darkmode ==false {
$background: mix($background, $primary, 87%);
$surface: mix($surface, $primary, 93%);
- $surfaceVariant: mix($surfaceVariant, #FFFFFF, 25%);
+ $surfaceVariant: mix($surfaceVariant, #ffffff, 25%);
}
}
@@ -30,7 +30,7 @@ $transparency_enabled: false;
@if $darkmode ==false {
$background: mix($background, $primary, 94%);
$surface: mix($surface, $primary, 93%);
- $surfaceVariant: mix($surfaceVariant, #FFFFFF, 55%);
+ $surfaceVariant: mix($surfaceVariant, #ffffff, 55%);
}
}
@@ -40,7 +40,8 @@ $transparentize_surface_amount_less: 0.6;
$transparentize_surface_amount_less_less: 0.55;
$transparentize_surface_amount: 0.7;
$transparentize_surface_amount_more: 0.8;
-$transparentize_surface_amount_subtract_surface: $transparentize_surface_amount - $transparentize_amount;
+$transparentize_surface_amount_subtract_surface: $transparentize_surface_amount -
+ $transparentize_amount;
@if $darkmode ==true {
// Less transparency
@@ -49,7 +50,8 @@ $transparentize_surface_amount_subtract_surface: $transparentize_surface_amount
$transparentize_surface_amount_less_less: 0.55;
$transparentize_surface_amount: 0.69;
$transparentize_surface_amount_more: 0.9;
- $transparentize_surface_amount_subtract_surface: $transparentize_surface_amount - $transparentize_amount;
+ $transparentize_surface_amount_subtract_surface: $transparentize_surface_amount -
+ $transparentize_amount;
}
@if $transparency_enabled ==false {
@@ -74,33 +76,69 @@ $onSuccessContainer: #0c1f13;
$t_primary: transparentize($primary, $transparentize_amount);
$t_onPrimary: transparentize($onPrimary, $transparentize_amount);
$t_primaryContainer: transparentize($primaryContainer, $transparentize_amount);
-$t_onPrimaryContainer: transparentize($onPrimaryContainer, $transparentize_amount);
+$t_onPrimaryContainer: transparentize(
+ $onPrimaryContainer,
+ $transparentize_amount
+);
$t_secondary: transparentize($secondary, $transparentize_amount);
$t_onSecondary: transparentize($onSecondary, $transparentize_amount);
-$t_secondaryContainer: transparentize($secondaryContainer, $transparentize_amount);
-$l_t_secondaryContainer: transparentize($secondaryContainer, $transparentize_surface_amount_less);
-$t_onSecondaryContainer: transparentize($onSecondaryContainer, $transparentize_amount);
+$t_secondaryContainer: transparentize(
+ $secondaryContainer,
+ $transparentize_amount
+);
+$l_t_secondaryContainer: transparentize(
+ $secondaryContainer,
+ $transparentize_surface_amount_less
+);
+$t_onSecondaryContainer: transparentize(
+ $onSecondaryContainer,
+ $transparentize_amount
+);
$t_t_t_onSecondaryContainer: transparentize($onSecondaryContainer, 0.93);
$t_tertiary: transparentize($tertiary, $transparentize_amount);
$t_onTertiary: transparentize($onTertiary, $transparentize_amount);
-$t_tertiaryContainer: transparentize($tertiaryContainer, $transparentize_amount);
-$t_onTertiaryContainer: transparentize($onTertiaryContainer, $transparentize_amount);
+$t_tertiaryContainer: transparentize(
+ $tertiaryContainer,
+ $transparentize_amount
+);
+$t_onTertiaryContainer: transparentize(
+ $onTertiaryContainer,
+ $transparentize_amount
+);
$t_error: transparentize($error, $transparentize_amount);
$t_onError: transparentize($onError, $transparentize_amount);
$t_errorContainer: transparentize($errorContainer, $transparentize_amount);
$t_onErrorContainer: transparentize($onErrorContainer, $transparentize_amount);
$t_colorbarbg: transparentize($colorbarbg, $transparentize_amount);
$t_background: transparentize($background, $transparentize_amount);
-$t_t_background: transparentize($background, $transparentize_surface_amount_more);
+$t_t_background: transparentize(
+ $background,
+ $transparentize_surface_amount_more
+);
$t_onBackground: transparentize($onBackground, $transparentize_amount);
$t_surface: transparentize($surface, $transparentize_surface_amount);
$t_t_surface: transparentize($surface, $transparentize_surface_amount_more);
$t_onSurface: transparentize($onSurface, $transparentize_surface_amount);
-$t_surfaceVariant: transparentize($surfaceVariant, $transparentize_surface_amount);
-$t_onSurfaceVariant: transparentize($onSurfaceVariant, $transparentize_surface_amount);
-$t_t_surfaceVariant: transparentize($surfaceVariant, $transparentize_surface_amount_more);
-$l_t_surfaceVariant: transparentize($surfaceVariant, $transparentize_surface_amount_less);
-$l_l_t_surfaceVariant: transparentize($surfaceVariant, $transparentize_surface_amount_less_less);
+$t_surfaceVariant: transparentize(
+ $surfaceVariant,
+ $transparentize_surface_amount
+);
+$t_onSurfaceVariant: transparentize(
+ $onSurfaceVariant,
+ $transparentize_surface_amount
+);
+$t_t_surfaceVariant: transparentize(
+ $surfaceVariant,
+ $transparentize_surface_amount_more
+);
+$l_t_surfaceVariant: transparentize(
+ $surfaceVariant,
+ $transparentize_surface_amount_less
+);
+$l_l_t_surfaceVariant: transparentize(
+ $surfaceVariant,
+ $transparentize_surface_amount_less_less
+);
$t_outline: transparentize($outline, $transparentize_amount);
$t_shadow: transparentize($shadow, $transparentize_amount);
$t_inverseSurface: transparentize($inverseSurface, $transparentize_amount);
@@ -110,7 +148,10 @@ $t_inversePrimary: transparentize($inversePrimary, $transparentize_amount);
$t_success: transparentize($error, $transparentize_amount);
$t_onSuccess: transparentize($onError, $transparentize_amount);
$t_successContainer: transparentize($errorContainer, $transparentize_amount);
-$t_onSuccessContainer: transparentize($onErrorContainer, $transparentize_amount);
+$t_onSuccessContainer: transparentize(
+ $onErrorContainer,
+ $transparentize_amount
+);
// Others
$hovercolor: mix($t_surface, $t_onSurface, 50%);
diff --git a/.config/ags/scss/_lib_classes.scss b/.config/ags/scss/_lib_classes.scss
index 10b817da1..ad586d2aa 100644
--- a/.config/ags/scss/_lib_classes.scss
+++ b/.config/ags/scss/_lib_classes.scss
@@ -69,6 +69,10 @@
color: $onSecondaryContainer;
}
+.txt-onSurfaceVariant {
+ color: $onSurfaceVariant;
+}
+
.txt-shadow {
text-shadow: 1px 2px 8px rgba(0, 0, 0, 0.69);
margin: 10px;
@@ -433,43 +437,43 @@
margin-right: 0rem;
}
-.spacing-v--5>box {
+.spacing-v--5>* {
margin-bottom: -0.341rem;
}
-.spacing-v--5>box:last-child {
+.spacing-v--5>*:last-child {
margin-bottom: 0rem;
}
-.spacing-v--5>label {
- margin-bottom: -0.341rem;
-}
-
-.spacing-v--5>label:last-child {
- margin-bottom: 0rem;
-}
-
-.spacing-v--10>box {
- margin-bottom: -0.682rem;
-}
-
-.spacing-v--10>box:last-child {
- margin-bottom: 0rem;
-}
-
-.spacing-v--10>label {
- margin-bottom: -0.682rem;
-}
-
-.spacing-v--10>label:last-child {
- margin-bottom: 0rem;
-}
-
-.spacing-h--20>box {
+.spacing-h--10>* {
margin-left: -1.364rem;
}
-.spacing-h--20>box:first-child {
+.spacing-h--10>*:first-child {
+ margin-left: 0rem;
+}
+
+.spacing-v--10>* {
+ margin-bottom: -0.682rem;
+}
+
+.spacing-v--10>*:last-child {
+ margin-bottom: 0rem;
+}
+
+.spacing-v--10>* {
+ margin-bottom: -0.682rem;
+}
+
+.spacing-v--10>*:last-child {
+ margin-bottom: 0rem;
+}
+
+.spacing-h--20>* {
+ margin-left: -1.364rem;
+}
+
+.spacing-h--20>*:first-child {
margin-left: 0rem;
}
diff --git a/.config/ags/scss/_musicmaterial.scss b/.config/ags/scss/_musicmaterial.scss
index 8b1378917..e69de29bb 100755
--- a/.config/ags/scss/_musicmaterial.scss
+++ b/.config/ags/scss/_musicmaterial.scss
@@ -1 +0,0 @@
-
diff --git a/.config/ags/scss/_osd.scss b/.config/ags/scss/_osd.scss
index c9e2c113f..15119a785 100644
--- a/.config/ags/scss/_osd.scss
+++ b/.config/ags/scss/_osd.scss
@@ -14,7 +14,6 @@
border-radius: 1.023rem;
padding: 0.625rem 1.023rem;
padding-top: 0.313rem;
- margin: 10px;
}
.osd-progress {
diff --git a/.config/ags/style.css b/.config/ags/style.css
index b4240dc61..c50978b5c 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -49,6 +49,9 @@
.txt-onSecondaryContainer {
color: #f8daee; }
+.txt-onSurfaceVariant {
+ color: #d1c2cb; }
+
.txt-shadow {
text-shadow: 1px 2px 8px rgba(0, 0, 0, 0.69);
margin: 10px; }
@@ -324,34 +327,34 @@
.spacing-h--5 > box:last-child {
margin-right: 0rem; }
-.spacing-v--5 > box {
+.spacing-v--5 > * {
margin-bottom: -0.341rem; }
-.spacing-v--5 > box:last-child {
+.spacing-v--5 > *:last-child {
margin-bottom: 0rem; }
-.spacing-v--5 > label {
- margin-bottom: -0.341rem; }
-
-.spacing-v--5 > label:last-child {
- margin-bottom: 0rem; }
-
-.spacing-v--10 > box {
- margin-bottom: -0.682rem; }
-
-.spacing-v--10 > box:last-child {
- margin-bottom: 0rem; }
-
-.spacing-v--10 > label {
- margin-bottom: -0.682rem; }
-
-.spacing-v--10 > label:last-child {
- margin-bottom: 0rem; }
-
-.spacing-h--20 > box {
+.spacing-h--10 > * {
margin-left: -1.364rem; }
-.spacing-h--20 > box:first-child {
+.spacing-h--10 > *:first-child {
+ margin-left: 0rem; }
+
+.spacing-v--10 > * {
+ margin-bottom: -0.682rem; }
+
+.spacing-v--10 > *:last-child {
+ margin-bottom: 0rem; }
+
+.spacing-v--10 > * {
+ margin-bottom: -0.682rem; }
+
+.spacing-v--10 > *:last-child {
+ margin-bottom: 0rem; }
+
+.spacing-h--20 > * {
+ margin-left: -1.364rem; }
+
+.spacing-h--20 > *:first-child {
margin-left: 0rem; }
.instant {
@@ -547,7 +550,7 @@ tooltip {
.bar-group-pad-system {
padding-left: 1.023rem;
- padding-right: 0.547rem; }
+ padding-right: 0.341rem; }
.bar-group-pad-music {
padding-right: 1.023rem;
@@ -605,7 +608,6 @@ tooltip {
color: #f8daee; }
.bar-ws-occupied {
- background-color: #51434d;
background-color: #3b3338;
color: #d1c2cb; }
@@ -619,8 +621,7 @@ tooltip {
.bar-clock {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
- font-size: 1.2727rem;
- color: #eae0e4; }
+ font-size: 1.2727rem; }
.bar-date {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
@@ -630,7 +631,9 @@ tooltip {
.bar-batt {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- padding: 0rem 0.341rem;
+ min-height: 1.77rem;
+ min-width: 1.77rem;
+ border-radius: 10rem;
background-color: #554050;
color: #f8daee; }
@@ -645,11 +648,27 @@ tooltip {
background-color: #374b3e;
color: #d1e9d6; }
-.bar-batt-prog-low {
+.bar-batt-circprog {
+ transition: 1000ms cubic-bezier(0.1, 1, 0, 1);
+ min-width: 0.068rem;
+ min-height: 1.636rem;
+ padding: 0rem;
+ background-color: #554050;
+ color: #f8daee; }
+
+.bar-batt-circprog-low {
+ transition: 1000ms cubic-bezier(0.1, 1, 0, 1);
+ min-width: 0.068rem;
+ min-height: 1.636rem;
+ padding: 0rem;
background-color: #ffb4a9;
color: #930006; }
-.bar-batt-prog-full {
+.bar-batt-circprog-full {
+ transition: 1000ms cubic-bezier(0.1, 1, 0, 1);
+ min-width: 0.068rem;
+ min-height: 1.636rem;
+ padding: 0rem;
background-color: #374b3e;
color: #d1e9d6; }
@@ -757,26 +776,13 @@ tooltip {
border-radius: 10rem;
min-width: 0.681rem;
min-height: 0.681rem;
- background-color: #f8daee;
- color: #554050; }
+ background-color: #d1c2cb; }
.bar-batt-chargestate-charging-smaller {
border-radius: 10rem;
min-width: 0.409rem;
min-height: 0.409rem;
- background-color: #f8daee;
- color: #554050; }
-
-.bar-batt-chargestate-low {
- background-color: #930006; }
-
-.bar-batt-chargestate-full {
- background-color: #d1e9d6; }
-
-.bar-batt-percentage {
- font-size: 1rem;
- margin-top: -0.068rem;
- font-weight: 500; }
+ background-color: #d1c2cb; }
.corner {
background-color: #100d10;
@@ -839,6 +845,20 @@ tooltip {
.bar-statusicons-active {
background-color: #3c373a; }
+.bar-util-btn {
+ border-radius: 9999px;
+ -gtk-outline-radius: 9999px;
+ min-height: 1.77rem;
+ min-width: 1.77rem;
+ background-color: #3b3338; }
+
+.bar-util-btn:hover,
+.bar-util-btn:focus {
+ background-color: #4a4147; }
+
+.bar-util-btn:active {
+ background-color: #595055; }
+
.cheatsheet-bg {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
@@ -1002,8 +1022,7 @@ tooltip {
background-color: #100d10;
border-radius: 1.023rem;
padding: 0.625rem 1.023rem;
- padding-top: 0.313rem;
- margin: 10px; }
+ padding-top: 0.313rem; }
.osd-progress {
min-height: 0.955rem;
diff --git a/.config/ags/widgets/bar/music.js b/.config/ags/widgets/bar/music.js
index 3d2389c53..0c2c496a6 100644
--- a/.config/ags/widgets/bar/music.js
+++ b/.config/ags/widgets/bar/music.js
@@ -9,7 +9,7 @@ const TrackProgress = () => {
const _updateProgress = (circprog) => {
const mpris = Mpris.getPlayer('');
if (!mpris) return;
- // Set circular progress (font size cuz that's how this hacky circprog works)
+ // Set circular progress value
circprog.css = `font-size: ${Math.max(mpris.position / mpris.length * 100, 0)}px;`
}
return AnimatedCircProg({
@@ -65,7 +65,7 @@ export const ModuleMusic = () => Widget.EventBox({
Widget.Scrollable({
hexpand: true,
child: Widget.Label({
- className: 'txt txt-smallie',
+ className: 'txt-smallie txt-onSurfaceVariant',
connections: [[Mpris, label => {
const mpris = Mpris.getPlayer('');
if (mpris)
diff --git a/.config/ags/widgets/bar/system.js b/.config/ags/widgets/bar/system.js
index eae0a1851..c90ba4ba2 100644
--- a/.config/ags/widgets/bar/system.js
+++ b/.config/ags/widgets/bar/system.js
@@ -1,16 +1,34 @@
// This is for the right pill of the bar.
// For the cool memory indicator on the sidebar, see sysinfo.js
import { Service, Utils, Widget } from '../../imports.js';
+const { Box, Label, Button, Overlay, Revealer, Scrollable, Stack, EventBox } = Widget;
const { exec, execAsync } = Utils;
const { GLib } = imports.gi;
import Battery from 'resource:///com/github/Aylur/ags/service/battery.js';
import { MaterialIcon } from '../../lib/materialicon.js';
+import { AnimatedCircProg } from "../../lib/animatedcircularprogress.js";
const BATTERY_LOW = 20;
+const BatBatteryProgress = () => {
+ const _updateProgress = (circprog) => { // Set circular progress value
+ circprog.css = `font-size: ${Battery.percent}px;`
+
+ circprog.toggleClassName('bar-batt-circprog-low', Battery.percent <= BATTERY_LOW);
+ circprog.toggleClassName('bar-batt-circprog-full', Battery.charged);
+ }
+ return AnimatedCircProg({
+ className: 'bar-batt-circprog',
+ vpack: 'center', hpack: 'center',
+ connections: [
+ [Battery, _updateProgress],
+ ],
+ })
+}
+
const BarClock = () => Widget.Box({
vpack: 'center',
- className: 'spacing-h-5',
+ className: 'spacing-h-5 txt-onSurfaceVariant',
children: [
Widget.Label({
className: 'bar-clock',
@@ -20,11 +38,11 @@ const BarClock = () => Widget.Box({
}),
}),
Widget.Label({
- className: 'txt-norm txt',
+ className: 'txt-norm',
label: 'โข',
}),
Widget.Label({
- className: 'txt-smallie txt',
+ className: 'txt-smallie',
label: GLib.DateTime.new_now_local().format("%A, %d/%m"),
setup: (self) => self.poll(5000, label => {
label.label = GLib.DateTime.new_now_local().format("%A, %d/%m");
@@ -33,105 +51,110 @@ const BarClock = () => Widget.Box({
],
});
-const BarBattery = () => {
- const BarResourceValue = (name, icon, command) => Widget.Box({
- vpack: 'center',
- className: 'bar-batt spacing-h-5',
- children: [
- MaterialIcon(icon, 'small'),
- Widget.ProgressBar({ // Progress
- vpack: 'center', hexpand: true,
- className: 'bar-prog-batt',
- setup: (self) => self.poll(5000, (progress) => execAsync(['bash', '-c', command])
- .then((output) => {
- progress.value = Number(output) / 100;
- progress.tooltipText = `${name}: ${Number(output)}%`
- })
- .catch(print)
- ),
- }),
- ]
- });
- const batteryWidget = Widget.Box({
- vpack: 'center',
- hexpand: true,
- className: 'spacing-h-5 bar-batt',
- setup: (self) => self.hook(Battery, box => {
- box.toggleClassName('bar-batt-low', Battery.percent <= BATTERY_LOW);
- box.toggleClassName('bar-batt-full', Battery.charged);
- }),
- children: [
- MaterialIcon('settings_heart', 'small'),
- Widget.Label({ // Percentage
- className: 'bar-batt-percentage',
- setup: (self) => self.hook(Battery, label => {
- label.label = `${Battery.percent}`;
- }),
- }),
- Widget.ProgressBar({ // Progress
- vpack: 'center',
- hexpand: true,
- className: 'bar-prog-batt',
- setup: (self) => self.hook(Battery, progress => {
- progress.value = Math.abs(Battery.percent / 100); // battery could be initially negative wtf
- progress.toggleClassName('bar-prog-batt-low', Battery.percent <= BATTERY_LOW);
- progress.toggleClassName('bar-prog-batt-full', Battery.charged);
- batteryWidget.tooltipText = `Battery: ${Battery.percent}%`
- }),
- }),
- Widget.Revealer({ // A dot for charging state
- transitionDuration: 150,
- revealChild: false,
- transition: 'slide_left',
- child: Widget.Box({
- className: 'spacing-h-3',
- children: [
- Widget.Box({
- vpack: 'center',
- className: 'bar-batt-chargestate-charging-smaller',
- setup: (self) => self.hook(Battery, box => {
- box.toggleClassName('bar-batt-chargestate-low', Battery.percent <= BATTERY_LOW);
- box.toggleClassName('bar-batt-chargestate-full', Battery.charged);
- }),
- }),
- Widget.Box({
- vpack: 'center',
- className: 'bar-batt-chargestate-charging',
- setup: (self) => self.hook(Battery, box => {
- box.toggleClassName('bar-batt-chargestate-low', Battery.percent <= BATTERY_LOW);
- box.toggleClassName('bar-batt-chargestate-full', Battery.charged);
- }),
- }),
- ]
- }),
- setup: (self) => self.hook(Battery, revealer => {
- revealer.revealChild = Battery.charging;
- }),
- }),
- ],
- });
- const memUsage = Widget.Box({
+const UtilButton = ({ name, icon, onClicked }) => Button({
+ vpack: 'center',
+ tooltipText: name,
+ onClicked: onClicked,
+ className: 'bar-util-btn icon-material txt-norm',
+ label: `${icon}`,
+})
+
+const Utilities = () => Scrollable({
+ hexpand: true,
+ child: Box({
+ hpack: 'center',
className: 'spacing-h-5',
children: [
- BarResourceValue('RAM usage', 'memory', `free | awk '/^Mem/ {printf("%.2f\\n", ($3/$2) * 100)}'`),
- BarResourceValue('Swap usage', 'swap_horiz', `free | awk '/^Swap/ {printf("%.2f\\n", ($3/$2) * 100)}'`),
+ UtilButton({
+ name: 'Screen snip', icon: 'screenshot_region', onClicked: () => {
+ Utils.execAsync(['bash', '-c', `grim -g "$(slurp -d -c e2e2e2BB -b 31313122 -s 00000000)" - | wl-copy &`])
+ .catch(print)
+ }
+ }),
+ UtilButton({
+ name: 'Color picker', icon: 'colorize', onClicked: () => {
+ Utils.execAsync(['hyprpicker', '-a']).catch(print)
+ }
+ }),
+ UtilButton({
+ name: 'Toggle on-screen keyboard', icon: 'keyboard', onClicked: () => {
+ App.toggleWindow('osk');
+ }
+ }),
]
})
- const widgetStack = Widget.Stack({
- transition: 'slide_up_down',
- vpack: 'center',
- hexpand: true,
- items: [
- ['fallback', memUsage],
- ['battery', batteryWidget],
- ],
- setup: (stack) => Utils.timeout(1, () => { // On desktops systems with no battery, show memory usage instead
- if (Battery.available) stack.shown = 'battery';
- else stack.shown = 'fallback';
- })
- })
- return widgetStack;
-}
+})
+
+const BarBattery = () => Box({
+ className: 'spacing-h-4 txt-onSurfaceVariant',
+ children: [
+ // Revealer({ // A dot for charging state
+ // transitionDuration: 150,
+ // revealChild: false,
+ // transition: 'crossfade',
+ // child: Widget.Box({
+ // className: 'spacing-h-3',
+ // children: [
+ // Widget.Box({
+ // vpack: 'center',
+ // className: 'bar-batt-chargestate-charging-smaller',
+ // setup: (self) => self.hook(Battery, box => {
+ // box.toggleClassName('bar-batt-chargestate-low', Battery.percent <= BATTERY_LOW);
+ // box.toggleClassName('bar-batt-chargestate-full', Battery.charged);
+ // }),
+ // }),
+ // Widget.Box({
+ // vpack: 'center',
+ // className: 'bar-batt-chargestate-charging',
+ // setup: (self) => self.hook(Battery, box => {
+ // box.toggleClassName('bar-batt-chargestate-low', Battery.percent <= BATTERY_LOW);
+ // box.toggleClassName('bar-batt-chargestate-full', Battery.charged);
+ // }),
+ // }),
+ // ]
+ // }),
+ // setup: (self) => self.hook(Battery, revealer => {
+ // revealer.revealChild = Battery.charging;
+ // }),
+ // }),
+ Stack({
+ transition: 'slide_up_down',
+ items: [
+ ['discharging', Widget.Label({
+ className: 'txt-norm txt',
+ label: 'โข',
+ }),],
+ ['charging', MaterialIcon('bolt', 'norm')],
+ ],
+ setup: (self) => self.hook(Battery, revealer => {
+ self.shown = Battery.charging ? 'charging' : 'discharging';
+ }),
+ }),
+ Label({
+ className: 'txt-smallie txt-onSurfaceVariant',
+ setup: (self) => self.hook(Battery, label => {
+ label.label = `${Battery.percent}%`;
+ }),
+ }),
+ Overlay({
+ child: Widget.Box({
+ vpack: 'center',
+ className: 'bar-batt',
+ homogeneous: true,
+ children: [
+ MaterialIcon('settings_heart', 'small'),
+ ],
+ setup: (self) => self.hook(Battery, box => {
+ box.toggleClassName('bar-batt-low', Battery.percent <= BATTERY_LOW);
+ box.toggleClassName('bar-batt-full', Battery.charged);
+ }),
+ }),
+ overlays: [
+ BatBatteryProgress(),
+ ]
+ }),
+ ]
+});
export const ModuleSystem = () => Widget.EventBox({
onScrollUp: () => execAsync('hyprctl dispatch workspace -1'),
@@ -141,9 +164,10 @@ export const ModuleSystem = () => Widget.EventBox({
className: 'bar-group-margin bar-sides',
children: [
Widget.Box({
- className: 'bar-group bar-group-standalone bar-group-pad-system spacing-h-15',
+ className: 'bar-group bar-group-standalone bar-group-pad-system spacing-h-5',
children: [
BarClock(),
+ Utilities(),
BarBattery(),
],
}),
diff --git a/.config/ags/widgets/bar/workspaces.js b/.config/ags/widgets/bar/workspaces.js
index cd0573a8f..b3be638f8 100644
--- a/.config/ags/widgets/bar/workspaces.js
+++ b/.config/ags/widgets/bar/workspaces.js
@@ -66,6 +66,7 @@ const WorkspaceContents = (count = 10) => {
const layout = PangoCairo.create_layout(cr);
const fontDesc = Pango.font_description_from_string(`${workspaceFontFamily[0]} ${workspaceFontSize}`);
layout.set_font_description(fontDesc);
+ cr.setAntialias(Cairo.Antialias.BEST);
// Get kinda min radius for number indicators
layout.set_text("0".repeat(count.toString().length), -1);
const [layoutWidth, layoutHeight] = layout.get_pixel_size();
@@ -84,7 +85,7 @@ const WorkspaceContents = (count = 10) => {
cr.fill();
}
else {
- cr.rectangle(wsCenterX - workspaceRadius , wsCenterY - workspaceRadius, workspaceRadius , workspaceRadius * 2)
+ cr.rectangle(wsCenterX - workspaceRadius, wsCenterY - workspaceRadius, workspaceRadius, workspaceRadius * 2)
cr.fill();
}
if (!(area._workspaceMask & (1 << (i + 1)))) { // Right
@@ -92,7 +93,7 @@ const WorkspaceContents = (count = 10) => {
cr.fill();
}
else {
- cr.rectangle(wsCenterX, wsCenterY - workspaceRadius, workspaceRadius , workspaceRadius * 2)
+ cr.rectangle(wsCenterX, wsCenterY - workspaceRadius, workspaceRadius, workspaceRadius * 2)
cr.fill();
}
@@ -118,7 +119,7 @@ const WorkspaceContents = (count = 10) => {
cr.fill();
// inner decor
cr.setSourceRGBA(activefg.red, activefg.green, activefg.blue, activefg.alpha);
- cr.arc(activeWsCenterX, activeWsCenterY, indicatorRadius * 0.19, 0, 2 * Math.PI);
+ cr.arc(activeWsCenterX, activeWsCenterY, indicatorRadius * 0.2, 0, 2 * Math.PI);
cr.fill();
}))
,
@@ -148,12 +149,15 @@ export default () => EventBox({
self.add_events(Gdk.EventMask.POINTER_MOTION_MASK);
self.on('motion-notify-event', (self, event) => {
if (!self._clicked) return;
+ console.log('switching move');
const [_, cursorX, cursorY] = event.get_coords();
const widgetWidth = self.get_allocation().width;
const wsId = Math.ceil(cursorX * NUM_OF_WORKSPACES / widgetWidth);
Hyprland.sendMessage(`dispatch workspace ${wsId}`)
})
self.on('button-press-event', (self, event) => {
+ if (!(event.get_button()[1] === 1)) return; // We're only interested in left-click here
+ console.log('switching');
self._clicked = true;
const [_, cursorX, cursorY] = event.get_coords();
const widgetWidth = self.get_allocation().width;
diff --git a/.config/ags/widgets/desktopbackground/timeandlaunches.js b/.config/ags/widgets/desktopbackground/timeandlaunches.js
index e25e14a58..1f9b01305 100644
--- a/.config/ags/widgets/desktopbackground/timeandlaunches.js
+++ b/.config/ags/widgets/desktopbackground/timeandlaunches.js
@@ -62,7 +62,7 @@ export default () => Box({
hpack: 'start',
vpack: 'end',
vertical: true,
- className: 'bg-time-box spacing-v-20',
+ className: 'bg-time-box spacing-h--10',
children: [
TimeAndDate(),
// QuickLaunches(),
diff --git a/.config/ags/widgets/indicators/indicatorvalues.js b/.config/ags/widgets/indicators/indicatorvalues.js
index 6cf42a35e..236f65c12 100644
--- a/.config/ags/widgets/indicators/indicatorvalues.js
+++ b/.config/ags/widgets/indicators/indicatorvalues.js
@@ -70,6 +70,7 @@ export default () => MarginRevealer({
child: Box({
hpack: 'center',
vertical: false,
+ className: 'spacing-h--10',
children: [
brightnessIndicator,
volumeIndicator,
diff --git a/.config/ags/widgets/sideright/quicktoggles.js b/.config/ags/widgets/sideright/quicktoggles.js
index 249ee42aa..263fcb52f 100644
--- a/.config/ags/widgets/sideright/quicktoggles.js
+++ b/.config/ags/widgets/sideright/quicktoggles.js
@@ -78,20 +78,16 @@ export const ModuleNightLight = (props = {}) => Widget.Button({ // TODO: Make th
onClicked: (self) => {
self._enabled = !self._enabled;
self.toggleClassName('sidebar-button-active', self._enabled);
- if (self._enabled) {
- self._inhibitor = Utils.subprocess(
- ['wlsunset'],
- (output) => print(output),
- (err) => logError(err),
- self,
- );
- }
- else {
- self._inhibitor.force_exit();
- }
+ // if (self._enabled) Utils.execAsync(['bash', '-c', 'wlsunset & disown'])
+ if (self._enabled) Utils.execAsync('wlsunset')
+ else Utils.execAsync('pkill wlsunset');
},
child: MaterialIcon('nightlight', 'norm'),
- setup: setupCursorHover,
+ setup: (self) => {
+ setupCursorHover(self);
+ self._enabled = !!exec('pidof wlsunset');
+ self.toggleClassName('sidebar-button-active', self._enabled);
+ },
...props,
});
From 2d0292755ee27cabfd79f06d1bbbab048540584a Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Sun, 31 Dec 2023 03:50:50 +0700
Subject: [PATCH 035/265] chatgpt: code snippet: fix buffer
---
.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js b/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js
index 99faf5368..f6f396b4b 100644
--- a/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js
+++ b/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js
@@ -102,8 +102,8 @@ const CodeBlock = (content = '', lang = 'txt') => {
]
}),
onClicked: (self) => {
- const copyContent = sourceView.get_buffer().get_text(0, 0, 0); // TODO: fix this
- console.log(copyContent);
+ const buffer = sourceView.get_buffer();
+ const copyContent = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter(), false); // TODO: fix this
execAsync([`wl-copy`, `${copyContent}`]).catch(print);
},
}),
@@ -164,7 +164,6 @@ const MessageContent = (content) => {
// Code blocks
const codeBlockRegex = /^\s*```([a-zA-Z0-9]+)?\n?/;
if (codeBlockRegex.test(line)) {
- // console.log(`code at line ${index}`);
const kids = self.get_children();
const lastLabel = kids[kids.length - 1];
const blockContent = lines.slice(lastProcessed, index).join('\n');
From 5a7efaa1392f16c28c07149b0072313e7fca225e Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Sun, 31 Dec 2023 17:03:39 +0700
Subject: [PATCH 036/265] ags: sync
---
.config/ags/lib/notification.js | 9 +-
.../ags/scripts/templates/hypr/colors.conf | 8 +-
.config/ags/scss/_bar.scss | 7 +-
.config/ags/scss/_musicmaterial.scss | 1 +
.config/ags/style.css | 6 +-
.config/ags/widgets/bar/system.js | 99 ++++++++++---------
.config/ags/widgets/sideleft/sideleft.js | 4 +-
7 files changed, 78 insertions(+), 56 deletions(-)
diff --git a/.config/ags/lib/notification.js b/.config/ags/lib/notification.js
index e3adcc62c..97f53c092 100644
--- a/.config/ags/lib/notification.js
+++ b/.config/ags/lib/notification.js
@@ -258,8 +258,13 @@ export default ({
className: `${isPopup ? 'popup-' : ''}notif-${notifObject.urgency} spacing-h-10`,
children: [
notifIcon,
- notifText,
- notifExpandButton,
+ Box({
+ className: 'spacing-h-5',
+ children: [
+ notifText,
+ notifExpandButton,
+ ]
+ })
]
})
diff --git a/.config/ags/scripts/templates/hypr/colors.conf b/.config/ags/scripts/templates/hypr/colors.conf
index f62ab7a71..0c1ba7f08 100755
--- a/.config/ags/scripts/templates/hypr/colors.conf
+++ b/.config/ags/scripts/templates/hypr/colors.conf
@@ -1,4 +1,4 @@
-$SLURP_COMMAND="$(slurp -d -c {{ $onSecondaryContainer }}BB -b {{ $secondaryContainer }}22 -s 00000000)"
+$SLURP_COMMAND="$(slurp -d -c {{ $onSecondaryContainer }}BB -b {{ $secondaryContainer }}44 -s 00000000)"
general {
col.active_border = rgba({{ $onPrimary }}FF)
@@ -6,13 +6,13 @@ general {
}
plugin {
- droidbars {
+ droidbars { # This is my hyprbars mod that broke :(
# example config
bar_height = 30
background_color = rgba({{ $background }}FF)
# background_color_active = rgba({{ $surfaceVariant }}FF) # Not added yet
text_color = rgba({{ $onSecondaryContainer }}FF)
- font_family = Lexend
+ font_family = Rubik, Geist, AR One Sans, Reddit Sans, Inter, Roboto, Ubuntu, Noto Sans, sans-serif
button_font_fmily = JetBrainsMono NF
# example buttons (R -> L)
@@ -24,7 +24,7 @@ plugin {
}
hyprbars {
# Honestly idk if it works like css, but well, why not
- bar_text_font = Geist, AR One Sans, Reddit Sans, Inter, Roboto, Ubuntu, Noto Sans, sans-serif
+ bar_text_font = Rubik, Geist, AR One Sans, Reddit Sans, Inter, Roboto, Ubuntu, Noto Sans, sans-serif
bar_height = 30
bar_padding = 10
bar_button_padding = 5
diff --git a/.config/ags/scss/_bar.scss b/.config/ags/scss/_bar.scss
index dfde74374..8e58a313e 100644
--- a/.config/ags/scss/_bar.scss
+++ b/.config/ags/scss/_bar.scss
@@ -45,8 +45,7 @@ $bar_subgroup_bg: mix($surfaceVariant, $primary, 89%);
}
.bar-group-pad-system {
- padding-left: 1.023rem;
- padding-right: 0.341rem;
+ padding: 0rem 0.341rem;
}
.bar-group-pad-music {
@@ -131,6 +130,10 @@ $bar_subgroup_bg: mix($surfaceVariant, $primary, 89%);
margin: 0rem 0.341rem;
}
+.bar-clock-box {
+ margin: 0rem 0.682rem;
+}
+
.bar-clock {
@include titlefont;
font-size: 1.2727rem;
diff --git a/.config/ags/scss/_musicmaterial.scss b/.config/ags/scss/_musicmaterial.scss
index e69de29bb..8b1378917 100755
--- a/.config/ags/scss/_musicmaterial.scss
+++ b/.config/ags/scss/_musicmaterial.scss
@@ -0,0 +1 @@
+
diff --git a/.config/ags/style.css b/.config/ags/style.css
index c50978b5c..4378de070 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -549,8 +549,7 @@ tooltip {
padding: 0rem 0.681rem; }
.bar-group-pad-system {
- padding-left: 1.023rem;
- padding-right: 0.341rem; }
+ padding: 0rem 0.341rem; }
.bar-group-pad-music {
padding-right: 1.023rem;
@@ -619,6 +618,9 @@ tooltip {
background-color: rgba(53, 47, 51, 0.31);
margin: 0rem 0.341rem; }
+.bar-clock-box {
+ margin: 0rem 0.682rem; }
+
.bar-clock {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1.2727rem; }
diff --git a/.config/ags/widgets/bar/system.js b/.config/ags/widgets/bar/system.js
index c90ba4ba2..b2b51ecb4 100644
--- a/.config/ags/widgets/bar/system.js
+++ b/.config/ags/widgets/bar/system.js
@@ -28,7 +28,7 @@ const BatBatteryProgress = () => {
const BarClock = () => Widget.Box({
vpack: 'center',
- className: 'spacing-h-5 txt-onSurfaceVariant',
+ className: 'spacing-h-5 txt-onSurfaceVariant bar-clock-box',
children: [
Widget.Label({
className: 'bar-clock',
@@ -59,30 +59,27 @@ const UtilButton = ({ name, icon, onClicked }) => Button({
label: `${icon}`,
})
-const Utilities = () => Scrollable({
- hexpand: true,
- child: Box({
- hpack: 'center',
- className: 'spacing-h-5',
- children: [
- UtilButton({
- name: 'Screen snip', icon: 'screenshot_region', onClicked: () => {
- Utils.execAsync(['bash', '-c', `grim -g "$(slurp -d -c e2e2e2BB -b 31313122 -s 00000000)" - | wl-copy &`])
- .catch(print)
- }
- }),
- UtilButton({
- name: 'Color picker', icon: 'colorize', onClicked: () => {
- Utils.execAsync(['hyprpicker', '-a']).catch(print)
- }
- }),
- UtilButton({
- name: 'Toggle on-screen keyboard', icon: 'keyboard', onClicked: () => {
- App.toggleWindow('osk');
- }
- }),
- ]
- })
+const Utilities = () => Box({
+ hpack: 'center',
+ className: 'spacing-h-5',
+ children: [
+ UtilButton({
+ name: 'Screen snip', icon: 'screenshot_region', onClicked: () => {
+ Utils.execAsync(['bash', '-c', `grim -g "$(slurp -d -c e2e2e2BB -b 31313122 -s 00000000)" - | wl-copy &`])
+ .catch(print)
+ }
+ }),
+ UtilButton({
+ name: 'Color picker', icon: 'colorize', onClicked: () => {
+ Utils.execAsync(['hyprpicker', '-a']).catch(print)
+ }
+ }),
+ UtilButton({
+ name: 'Toggle on-screen keyboard', icon: 'keyboard', onClicked: () => {
+ App.toggleWindow('osk');
+ }
+ }),
+ ]
})
const BarBattery = () => Box({
@@ -117,17 +114,26 @@ const BarBattery = () => Box({
// revealer.revealChild = Battery.charging;
// }),
// }),
- Stack({
- transition: 'slide_up_down',
- items: [
- ['discharging', Widget.Label({
- className: 'txt-norm txt',
- label: 'โข',
- }),],
- ['charging', MaterialIcon('bolt', 'norm')],
- ],
+ // Stack({
+ // transition: 'slide_up_down',
+ // items: [
+ // ['discharging', Widget.Label({
+ // className: 'txt-norm txt',
+ // label: 'โข',
+ // }),],
+ // ['charging', MaterialIcon('bolt', 'norm')],
+ // ],
+ // setup: (self) => self.hook(Battery, revealer => {
+ // self.shown = Battery.charging ? 'charging' : 'discharging';
+ // }),
+ // }),
+ Revealer({
+ transitionDuration: 150,
+ revealChild: false,
+ transition: 'slide_right',
+ child: MaterialIcon('bolt', 'norm'),
setup: (self) => self.hook(Battery, revealer => {
- self.shown = Battery.charging ? 'charging' : 'discharging';
+ self.revealChild = Battery.charging;
}),
}),
Label({
@@ -156,21 +162,26 @@ const BarBattery = () => Box({
]
});
+const BarGroup = ({ child }) => Widget.Box({
+ className: 'bar-group-margin bar-sides',
+ children: [
+ Widget.Box({
+ className: 'bar-group bar-group-standalone bar-group-pad-system',
+ children: [child],
+ }),
+ ]
+});
+
export const ModuleSystem = () => Widget.EventBox({
onScrollUp: () => execAsync('hyprctl dispatch workspace -1'),
onScrollDown: () => execAsync('hyprctl dispatch workspace +1'),
onPrimaryClick: () => App.toggleWindow('sideright'),
child: Widget.Box({
- className: 'bar-group-margin bar-sides',
+ className: 'spacing-h-5',
children: [
- Widget.Box({
- className: 'bar-group bar-group-standalone bar-group-pad-system spacing-h-5',
- children: [
- BarClock(),
- Utilities(),
- BarBattery(),
- ],
- }),
+ BarGroup({ child: BarClock() }),
+ BarGroup({ child: Utilities() }),
+ BarGroup({ child: BarBattery() }),
]
})
});
diff --git a/.config/ags/widgets/sideleft/sideleft.js b/.config/ags/widgets/sideleft/sideleft.js
index a335eb276..fc8ceccf4 100644
--- a/.config/ags/widgets/sideleft/sideleft.js
+++ b/.config/ags/widgets/sideleft/sideleft.js
@@ -175,9 +175,9 @@ export default () => Box({
else if (event.get_keyval()[1] === Gdk.KEY_Tab)
switchToTab((currentTabId + 1) % contents.length);
else if (event.get_keyval()[1] === Gdk.KEY_Page_Up)
- switchToTab(Math.max(currentTabId - 1), 0);
+ switchToTab(Math.max(currentTabId - 1, 0));
else if (event.get_keyval()[1] === Gdk.KEY_Page_Down)
- switchToTab(Math.min(currentTabId + 1), contents.length);
+ switchToTab(Math.min(currentTabId + 1, contents.length - 1));
}
if (contentStack.shown == 'apis') { // If api tab is focused
// Automatically focus entry when typing
From ff377a58261183168fc4ffc52c5dda3f550e26e6 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Mon, 1 Jan 2024 01:52:25 +0700
Subject: [PATCH 037/265] add waifu image fetch
---
.config/ags/config.js | 9 +-
.config/ags/lib/md2pango.js | 29 +--
.config/ags/scss/_sidebars.scss | 61 +++++--
.config/ags/services/chatgpt.js | 2 +-
.config/ags/services/todo.js | 2 +-
.config/ags/services/waifus.js | 167 +++++++-----------
.config/ags/style.css | 25 ++-
.config/ags/widgets/dock/dock.js | 1 +
.../ags/widgets/indicators/musiccontrols.js | 4 +-
.config/ags/widgets/overview/miscfunctions.js | 8 +-
.config/ags/widgets/sideleft/apis/chatgpt.js | 37 ++--
.../sideleft/apis/chatgpt_chatmessage.js | 10 +-
.config/ags/widgets/sideleft/apis/waifu.js | 119 +++++++++++--
.config/ags/widgets/sideleft/apiwidgets.js | 6 +-
14 files changed, 269 insertions(+), 211 deletions(-)
diff --git a/.config/ags/config.js b/.config/ags/config.js
index 25df63fbc..65093724f 100644
--- a/.config/ags/config.js
+++ b/.config/ags/config.js
@@ -1,5 +1,6 @@
-"strict mode";
+"use strict";
// Import
+const { GLib } = imports.gi;
import { App, Utils } from './imports.js';
// Widgets
import Bar from './widgets/bar/main.js';
@@ -16,8 +17,6 @@ import SideRight from './widgets/sideright/main.js';
const CLOSE_ANIM_TIME = 210; // Longer than actual anim time (see styles) to make sure widgets animate fully
-// Init cache
-Utils.exec(`bash -c 'mkdir -p ~/.cache/ags/user/colorschemes'`);
// SCSS compilation
Utils.exec(`bash -c 'echo "" > ${App.configDir}/scss/_musicwal.scss'`); // reset music styles
Utils.exec(`bash -c 'echo "" > ${App.configDir}/scss/_musicmaterial.scss'`); // reset music styles
@@ -43,8 +42,8 @@ export default {
CornerTopright(),
CornerBottomleft(),
CornerBottomright(),
- // DesktopBackground(),
- // Dock(), // Buggy
+ // DesktopBackground(), // If you're going to uncomment these,
+ // Dock(), // Buggy // uncomment the import statement too.
Overview(),
Indicator(),
Cheatsheet(),
diff --git a/.config/ags/lib/md2pango.js b/.config/ags/lib/md2pango.js
index e14a5cb60..ec94dd1f0 100644
--- a/.config/ags/lib/md2pango.js
+++ b/.config/ags/lib/md2pango.js
@@ -57,7 +57,7 @@ const pad = (lines, start = 1, end = 1) => {
return lines.map((l) => l.padEnd(len + end, ' ').padStart(len + end + start, ' '))
}
-export function convert(text) {
+export default (text) => {
let lines = text.split('\n')
// Indicates if the current line is within a code block
@@ -205,33 +205,6 @@ export function convert(text) {
return output.join('\n')
}
-const readFile = (f) => {
- // node.js only and when running from the command line
- const fs = require('fs')
- return fs.readFileSync(f, 'utf8')
-}
-
-let __is_nodejs_main = false
-try {
- // node.js specific checks and exports
- __is_nodejs_main = (require.main === module)
- exports.convert = convert
-} catch (e) { }
-
-if (__is_nodejs_main) {
- // running in node.js called from the CLI
- let args = process.argv.slice(2)
- if (args.length == 0 || args.find((a) => a == '-h')) {
- console.log(`Usage: ${process.argv[1]} FILE [FILE...]`)
- process.exit(0)
- }
- for (let i = 0; i < args.length; i++) {
- const f = args[i];
- process.stdout.write(convert(readFile(f)));
- }
-
-}
-
export const markdownTest = `# Heading 1
## Heading 2
### Heading 3
diff --git a/.config/ags/scss/_sidebars.scss b/.config/ags/scss/_sidebars.scss
index 6eb0abb24..7321978bf 100644
--- a/.config/ags/scss/_sidebars.scss
+++ b/.config/ags/scss/_sidebars.scss
@@ -166,27 +166,27 @@ $onChatgpt: $onPrimary;
padding: 0rem $rounding_medium;
}
-.sidebar-navrail-btn>box>label {
+.sidebar-navrail-btn > box > label {
@include full-rounding;
@include menu_decel;
}
-.sidebar-navrail-btn:hover>box>label:first-child,
-.sidebar-navrail-btn:focus>box>label:first-child {
+.sidebar-navrail-btn:hover > box > label:first-child,
+.sidebar-navrail-btn:focus > box > label:first-child {
background-color: mix($t_surfaceVariant, $onSurfaceVariant, 90%);
}
-.sidebar-navrail-btn:active>box>label:first-child {
+.sidebar-navrail-btn:active > box > label:first-child {
background-color: mix($surfaceVariant, $onSurfaceVariant, 75%);
}
-.sidebar-navrail-btn-active>box>label:first-child {
+.sidebar-navrail-btn-active > box > label:first-child {
background-color: $secondaryContainer;
color: $onSecondaryContainer;
}
-.sidebar-navrail-btn-active:hover>box>label:first-child,
-.sidebar-navrail-btn-active:focus>box>label:first-child {
+.sidebar-navrail-btn-active:hover > box > label:first-child,
+.sidebar-navrail-btn-active:focus > box > label:first-child {
background-color: mix($secondaryContainer, $hovercolor, 90%);
color: mix($onSecondaryContainer, $hovercolor, 90%);
}
@@ -346,7 +346,7 @@ $onChatgpt: $onPrimary;
background-color: mix($surfaceVariant, $onSurfaceVariant, 75%);
}
-.sidebar-selector-tab-active>box>label {
+.sidebar-selector-tab-active > box > label {
color: $primary;
}
@@ -509,7 +509,7 @@ $onChatgpt: $onPrimary;
.sidebar-chat-apiswitcher-icon {
@include menu_decel;
@include full-rounding;
- min-width: 2.182rem;
+ min-width: 2.182rem;
min-height: 2.182rem;
color: $onSurface;
}
@@ -548,11 +548,19 @@ $onChatgpt: $onPrimary;
.sidebar-chat-send:hover,
.sidebar-chat-send:focus {
- background-color: mix($sidebar_chat_textboxareaColor, $t_onSecondaryContainer, 97%);
+ background-color: mix(
+ $sidebar_chat_textboxareaColor,
+ $t_onSecondaryContainer,
+ 97%
+ );
}
.sidebar-chat-send:active {
- background-color: mix($sidebar_chat_textboxareaColor, $t_onSecondaryContainer, 80%);
+ background-color: mix(
+ $sidebar_chat_textboxareaColor,
+ $t_onSecondaryContainer,
+ 80%
+ );
}
.sidebar-chat-send-available {
@@ -576,6 +584,7 @@ $onChatgpt: $onPrimary;
.sidebar-chat-indicator {
@include full-rounding;
min-width: 0.136rem;
+ background-color: $onBackground;
}
.sidebar-chat-indicator-user {
@@ -594,7 +603,6 @@ $onChatgpt: $onPrimary;
@include titlefont;
padding: 0.341rem;
margin-left: -0.136rem;
- padding: 0.341rem;
padding-left: 0.818rem;
}
@@ -699,7 +707,11 @@ $onChatgpt: $onPrimary;
}
.sidebar-chat-chip-action:active {
- background-color: mix($sidebar_chat_textboxareaColor, $onSurfaceVariant, 70%);
+ background-color: mix(
+ $sidebar_chat_textboxareaColor,
+ $onSurfaceVariant,
+ 70%
+ );
color: mix($sidebar_chat_textboxareaColor, $surfaceVariant, 70%);
}
@@ -741,3 +753,26 @@ $onChatgpt: $onPrimary;
background-color: mix($primary, $onPrimary, 80%);
}
+.sidebar-waifu-heading {
+ @include titlefont;
+ padding: 0.341rem;
+ margin-left: -0.136rem;
+ padding-left: 0.818rem;
+}
+
+.sidebar-waifu-content {
+ margin-left: 0.682rem;
+}
+
+.sidebar-waifu-txt {
+ @include readingfont;
+ margin-left: 0.682rem;
+}
+
+.sidebar-waifu-image {
+ margin-left: 0.682rem;
+ @include normal-rounding;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center;
+}
diff --git a/.config/ags/services/chatgpt.js b/.config/ags/services/chatgpt.js
index 28729f8d4..b50892235 100644
--- a/.config/ags/services/chatgpt.js
+++ b/.config/ags/services/chatgpt.js
@@ -44,7 +44,7 @@ function expandTilde(path) {
// We're using many models to not be restricted to 3 messages per minute.
// The whole chat will be sent every request anyway.
-const KEY_FILE_LOCATION = `~/.cache/ags/user/openai_api_key.txt`;
+const KEY_FILE_LOCATION = `${GLib.get_user_cache_dir()}/ags/user/openai_api_key.txt`;
const CHAT_MODELS = ["gpt-3.5-turbo-1106", "gpt-3.5-turbo", "gpt-3.5-turbo-16k", "gpt-3.5-turbo-0613"]
const ONE_CYCLE_COUNT = 3;
diff --git a/.config/ags/services/todo.js b/.config/ags/services/todo.js
index d6489f33c..f0dabb47f 100644
--- a/.config/ags/services/todo.js
+++ b/.config/ags/services/todo.js
@@ -63,7 +63,7 @@ class TodoService extends Service {
super();
this._todoPath = `${GLib.get_user_cache_dir()}/ags/user/todo.json`;
if (!fileExists(this._todoPath)) { // No? create file with empty array
- Utils.exec(`bash -c 'mkdir -p ~/.cache/ags/user'`);
+ Utils.exec(`bash -c 'mkdir -p ${GLib.get_user_cache_dir()}/ags/user'`);
Utils.exec(`touch ${this._todoPath}`);
Utils.writeFile("[]", this._todoPath).then(() => {
this._todoJson = JSON.parse(Utils.readFile(this._todoPath))
diff --git a/.config/ags/services/waifus.js b/.config/ags/services/waifus.js
index 3674713e6..f7f9b28c9 100644
--- a/.config/ags/services/waifus.js
+++ b/.config/ags/services/waifus.js
@@ -5,64 +5,20 @@ import GLib from 'gi://GLib';
import Soup from 'gi://Soup?version=3.0';
import { fileExists } from './messages.js';
-class WaifuResponse extends Service {
- static {
- Service.register(this,
- {
- 'delta': ['string'],
- },
- {
- 'content': ['string'],
- 'thinking': ['boolean'],
- 'done': ['boolean'],
- });
- }
-
- _role = '';
- _content = '';
- _thinking = false;
- _done = false;
-
- constructor(role, content, thinking = false, done = false) {
- super();
- this._role = role;
- this._content = content;
- this._thinking = thinking;
- this._done = done;
- }
-
- get done() { return this._done }
- set done(isDone) { this._done = isDone; this.notify('done') }
-
- get role() { return this._role }
- set role(role) { this._role = role; this.emit('changed') }
-
- get content() { return this._content }
- set content(content) {
- this._content = content;
- this.notify('content')
- this.emit('changed')
- }
-
- get label() { return this._parserState.parsed + this._parserState.stack.join('') }
-
- get thinking() { return this._thinking }
- set thinking(thinking) {
- this._thinking = thinking;
- this.notify('thinking')
- this.emit('changed')
- }
-
- addDelta(delta) {
- if (this.thinking) {
- this.thinking = false;
- this.content = delta;
- }
- else {
- this.content += delta;
- }
- this.emit('delta', delta);
- }
+function paramStringFromObj(params) {
+ return Object.entries(params)
+ .map(([key, value]) => {
+ if (Array.isArray(value)) { // If it's an array, repeat
+ if (value.length == 0) return '';
+ let thisKey = `${encodeURIComponent(key)}=${encodeURIComponent(value[0])}`
+ for (let i = 1; i < value.length; i++) {
+ thisKey += `&${encodeURIComponent(key)}=${encodeURIComponent(value[i])}`;
+ }
+ return thisKey;
+ }
+ return `${key}=${value}`;
+ })
+ .join('&');
}
class WaifuService extends Service {
@@ -76,9 +32,10 @@ class WaifuService extends Service {
'nekos': {},
'pics': {},
}
- _url = 'https://api.waifu.im/search';
+ _baseUrl = 'https://api.waifu.im/search';
_mode = 'im'; // Allowed: im
_responses = [];
+ _queries = [];
_nsfw = false;
_minHeight = 600;
@@ -86,7 +43,8 @@ class WaifuService extends Service {
Service.register(this, {
'initialized': [],
'clear': [],
- 'newResponse': ['string'],
+ 'newResponse': ['int'],
+ 'updateResponse': ['int'],
});
}
@@ -97,71 +55,68 @@ class WaifuService extends Service {
clear() {
this._responses = [];
+ this._queries = [];
this.emit('clear');
}
get mode() { return this._mode }
set mode(value) {
this._mode = value;
- this._url = this._endpoints[this._mode];
+ this._baseUrl = this._endpoints[this._mode];
}
get nsfw() { return this._nsfw }
set nsfw(value) { this._nsfw = value }
+ get queries() { return this._queries }
get responses() { return this._responses }
- readResponseRecursive(stream, response) {
- stream.read_line_async(
- 0, null,
- (stream, res) => {
- if (!stream) return;
- const [bytes] = stream.read_line_finish(res);
- const line = this._decoder.decode(bytes);
- if (line && line != '') {
- let data = line.substr(6);
- if (data == '[DONE]') return;
- try {
- const result = JSON.parse(data);
- if (result.choices[0].finish_reason === 'stop') {
- response.done = true;
- return;
- }
- response.addDelta(result.choices[0].delta.content);
- }
- catch {
- response.addDelta(line + '\n');
- }
- }
- this.readResponseRecursive(stream, response);
- });
- }
-
fetch(msg) {
+ const newMessageId = this._responses.length;
const taglist = msg.split(' ');
- this.emit('newResponse', msg);
- this._responses.push(msg);
-
+ this._queries.push(taglist);
+ this.emit('newResponse', newMessageId);
+ // Construct body/headers
const params = {
'included_tags': taglist,
'height': `>=${this._minHeight}`,
'nsfw': this._nsfw,
};
-
- const session = new Soup.Session();
- const message = new Soup.Message({
+ const paramString = paramStringFromObj(params);
+ console.log(paramString);
+ // Fetch
+ const options = {
method: 'GET',
- uri: GLib.Uri.parse(this._url, GLib.UriFlags.NONE),
- });
- session.send_message(message, (session, message) => {
- if (message.status_code === 200) {
- const responseBody = message.response_body.data;
- const data = JSON.parse(responseBody);
- // Process the response data as needed
- console.log(data);
- log(data);
- } else {
- logError('Request failed with status code: ' + message.status_code);
- }
- });
+ headers: this._headers[this._mode],
+ };
+ Utils.fetch(`${this._baseUrl}?${paramString}`, options)
+ .then(result => result.text()) // Parse
+ .then((dataString) => { // Store interesting stuff and emit
+ const parsedData = JSON.parse(dataString);
+ if (!parsedData.images) this._responses.push({
+ signature: -1,
+ url: '',
+ source: '',
+ dominant_color: '#383A40',
+ is_nsfw: false,
+ width: 0,
+ height: 0,
+ tags: [],
+ });
+ else {
+ const imageData = parsedData.images[0];
+ this._responses.push({
+ signature: imageData?.signature || -1,
+ url: imageData?.url || undefined,
+ source: imageData?.source,
+ dominant_color: imageData?.dominant_color || '#000000',
+ is_nsfw: imageData?.is_nsfw || false,
+ width: imageData?.width || 0,
+ height: imageData?.height || 0,
+ tags: imageData?.tags.map(obj => obj["name"]) || [],
+ });
+ }
+ this.emit('updateResponse', newMessageId);
+ })
+ .catch(console.error)
}
}
diff --git a/.config/ags/style.css b/.config/ags/style.css
index 4378de070..4582f992e 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -1839,7 +1839,8 @@ tooltip {
.sidebar-chat-indicator {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- min-width: 0.136rem; }
+ min-width: 0.136rem;
+ background-color: #eae0e4; }
.sidebar-chat-indicator-user {
background-color: #eae0e4; }
@@ -1854,7 +1855,6 @@ tooltip {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
padding: 0.341rem;
margin-left: -0.136rem;
- padding: 0.341rem;
padding-left: 0.818rem; }
.sidebar-chat-txtblock {
@@ -1980,6 +1980,27 @@ tooltip {
.sidebar-pin-enabled:active {
background-color: #dda0d4; }
+.sidebar-waifu-heading {
+ font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
+ padding: 0.341rem;
+ margin-left: -0.136rem;
+ padding-left: 0.818rem; }
+
+.sidebar-waifu-content {
+ margin-left: 0.682rem; }
+
+.sidebar-waifu-txt {
+ font-family: 'Lexend', 'Noto Sans', sans-serif;
+ margin-left: 0.682rem; }
+
+.sidebar-waifu-image {
+ margin-left: 0.682rem;
+ border-radius: 1.159rem;
+ -gtk-outline-radius: 1.159rem;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center; }
+
.session-bg {
margin-top: -2.727rem;
background-color: rgba(16, 13, 16, 0.64); }
diff --git a/.config/ags/widgets/dock/dock.js b/.config/ags/widgets/dock/dock.js
index 4714d268b..c2ac08011 100644
--- a/.config/ags/widgets/dock/dock.js
+++ b/.config/ags/widgets/dock/dock.js
@@ -129,6 +129,7 @@ const Taskbar = () => Widget.Box({
if (!address) return;
const removedButton = box._map.get(address);
+ if (!removedButton) return;
removedButton.revealChild = false;
Utils.timeout(ANIMATION_TIME, () => {
diff --git a/.config/ags/widgets/indicators/musiccontrols.js b/.config/ags/widgets/indicators/musiccontrols.js
index 7e59f5a50..ce590691e 100644
--- a/.config/ags/widgets/indicators/musiccontrols.js
+++ b/.config/ags/widgets/indicators/musiccontrols.js
@@ -17,7 +17,7 @@ function expandTilde(path) {
}
}
-const LIGHTDARK_FILE_LOCATION = '~/.cache/ags/user/colormode.txt'
+const LIGHTDARK_FILE_LOCATION = `${GLib.get_user_cache_dir()}/ags/user/colormode.txt`;
const lightDark = Utils.readFile(expandTilde(LIGHTDARK_FILE_LOCATION)).trim();
const COVER_COLORSCHEME_SUFFIX = '_colorscheme.css';
const PREFERRED_PLAYER = 'plasma-browser-integration';
@@ -165,7 +165,7 @@ const CoverArt = ({ player, ...rest }) => Box({
`${App.configDir}/scripts/color_generation/generate_colors_material.py --path '${coverPath}' > ${App.configDir}/scss/_musicmaterial.scss ${lightDark}`])
.then(() => {
exec(`wal -i "${player.coverPath}" -n -t -s -e -q ${lightDark}`)
- exec(`bash -c "cp ~/.cache/wal/colors.scss ${App.configDir}/scss/_musicwal.scss"`)
+ exec(`cp ${GLib.get_user_cache_dir()}/wal/colors.scss ${App.configDir}/scss/_musicwal.scss`);
exec(`sassc ${App.configDir}/scss/_music.scss ${stylePath}`);
self.css = `background-image: url('${coverPath}');`;
App.applyCss(`${stylePath}`);
diff --git a/.config/ags/widgets/overview/miscfunctions.js b/.config/ags/widgets/overview/miscfunctions.js
index 8cc5d4b87..8a3767429 100644
--- a/.config/ags/widgets/overview/miscfunctions.js
+++ b/.config/ags/widgets/overview/miscfunctions.js
@@ -21,12 +21,12 @@ export function launchCustomCommand(command) {
execAsync([`bash`, `-c`, `${App.configDir}/scripts/color_generation/switchcolor.sh`, `&`]).catch(print);
}
else if (args[0] == '>light') { // Light mode
- execAsync([`bash`, `-c`, `mkdir -p ~/.cache/ags/user && echo "-l" > ~/.cache/ags/user/colormode.txt`])
+ execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && echo "-l" > ${GLib.get_user_cache_dir()}/ags/user/colormode.txt`])
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchwall.sh --noswitch`]).catch(print))
.catch(print);
}
else if (args[0] == '>dark') { // Dark mode
- execAsync([`bash`, `-c`, `mkdir -p ~/.cache/ags/user && echo "" > ~/.cache/ags/user/colormode.txt`])
+ execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && echo "" > ${GLib.get_user_cache_dir()}/ags/user/colormode.txt`])
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchwall.sh --noswitch`]).catch(print))
.catch(print);
}
@@ -34,10 +34,10 @@ export function launchCustomCommand(command) {
execAsync([`bash`, `-c`, `${App.configDir}/scripts/color_generation/applycolor.sh --bad-apple`]).catch(print);
}
else if (args[0] == '>material') { // Light mode
- execAsync([`bash`, `-c`, `mkdir -p ~/.cache/ags/user && echo "material" > ~/.cache/ags/user/colorbackend.txt`]).catch(print);
+ 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);
}
else if (args[0] == '>pywal') { // Dark mode
- execAsync([`bash`, `-c`, `mkdir -p ~/.cache/ags/user && echo "pywal" > ~/.cache/ags/user/colorbackend.txt`]).catch(print);
+ 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);
}
else if (args[0] == '>todo') { // Todo
Todo.add(args.slice(1).join(' '));
diff --git a/.config/ags/widgets/sideleft/apis/chatgpt.js b/.config/ags/widgets/sideleft/apis/chatgpt.js
index 898a6a3fb..8faf03831 100644
--- a/.config/ags/widgets/sideleft/apis/chatgpt.js
+++ b/.config/ags/widgets/sideleft/apis/chatgpt.js
@@ -204,39 +204,24 @@ export const chatGPTView = Scrollable({
}
});
+const CommandButton = (command) => Button({
+ className: 'sidebar-chat-chip sidebar-chat-chip-action txt txt-small',
+ onClicked: () => sendMessage(command),
+ setup: setupCursorHover,
+ label: command,
+});
+
export const chatGPTCommands = Box({
className: 'spacing-h-5',
children: [
Box({ hexpand: true }),
- Button({
- className: 'sidebar-chat-chip sidebar-chat-chip-action txt txt-small',
- onClicked: () => chatContent.add(SystemMessage(
- `Key stored in:\n\`${ChatGPT.keyPath}\`\nTo update this key, type \`/key YOUR_API_KEY\``,
- '/key',
- chatGPTView)),
- setup: setupCursorHover,
- label: '/key',
- }),
- Button({
- className: 'sidebar-chat-chip sidebar-chat-chip-action txt txt-small',
- onClicked: () => chatContent.add(SystemMessage(
- `Currently using \`${ChatGPT.modelName}\``,
- '/model',
- chatGPTView
- )),
- setup: setupCursorHover,
- label: '/model',
- }),
- Button({
- className: 'sidebar-chat-chip sidebar-chat-chip-action txt txt-small',
- onClicked: () => clearChat(),
- setup: setupCursorHover,
- label: '/clear',
- }),
+ CommandButton('/key'),
+ CommandButton('/model'),
+ CommandButton('/clear'),
]
});
-export const chatGPTSendMessage = (text) => {
+export const sendMessage = (text) => {
// Check if text or API key is empty
if (text.length == 0) return;
if (ChatGPT.key.length == 0) {
diff --git a/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js b/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js
index f6f396b4b..2532ea459 100644
--- a/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js
+++ b/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js
@@ -3,7 +3,7 @@ import { App, Utils, Widget } from '../../../imports.js';
const { Box, Button, Entry, EventBox, Icon, Label, Revealer, Scrollable, Stack } = Widget;
const { execAsync, exec } = Utils;
import { MaterialIcon } from "../../../lib/materialicon.js";
-import { convert } from "../../../lib/md2pango.js";
+import md2pango from "../../../lib/md2pango.js";
import GtkSource from "gi://GtkSource?version=3.0";
const CUSTOM_SOURCEVIEW_SCHEME_PATH = `${App.configDir}/data/sourceviewtheme.xml`;
@@ -168,7 +168,7 @@ const MessageContent = (content) => {
const lastLabel = kids[kids.length - 1];
const blockContent = lines.slice(lastProcessed, index).join('\n');
if (!inCode) {
- lastLabel.label = convert(blockContent);
+ lastLabel.label = md2pango(blockContent);
contentBox.add(CodeBlock('', codeBlockRegex.exec(line)[1]));
}
else {
@@ -185,7 +185,7 @@ const MessageContent = (content) => {
const kids = self.get_children();
const lastLabel = kids[kids.length - 1];
const blockContent = lines.slice(lastProcessed, index).join('\n');
- lastLabel.label = convert(blockContent);
+ lastLabel.label = md2pango(blockContent);
contentBox.add(Divider());
contentBox.add(TextBlock());
lastProcessed = index + 1;
@@ -196,7 +196,7 @@ const MessageContent = (content) => {
const lastLabel = kids[kids.length - 1];
let blockContent = lines.slice(lastProcessed, lines.length).join('\n');
if (!inCode)
- lastLabel.label = `${convert(blockContent)}${useCursor ? CHATGPT_CURSOR : ''}`;
+ lastLabel.label = `${md2pango(blockContent)}${useCursor ? CHATGPT_CURSOR : ''}`;
else
lastLabel._updateText(blockContent);
}
@@ -208,7 +208,7 @@ const MessageContent = (content) => {
// xalign: 0,
// wrap: true,
// selectable: true,
- // label: '------------------------------\n' + convert(content),
+ // label: '------------------------------\n' + md2pango(content),
// }))
contentBox.show_all();
}]
diff --git a/.config/ags/widgets/sideleft/apis/waifu.js b/.config/ags/widgets/sideleft/apis/waifu.js
index e4e7dd631..b4bb650be 100644
--- a/.config/ags/widgets/sideleft/apis/waifu.js
+++ b/.config/ags/widgets/sideleft/apis/waifu.js
@@ -6,6 +6,19 @@ import { MaterialIcon } from "../../../lib/materialicon.js";
import { setupCursorHover, setupCursorHoverInfo } from "../../../lib/cursorhover.js";
import WaifuService from '../../../services/waifus.js';
+const MESSAGE_SCROLL_DELAY = 13; // In milliseconds, the time before an updated message scrolls to bottom
+
+// Create cache folder and clear pics from previous session
+Utils.exec(`bash -c 'mkdir -p ${GLib.get_user_cache_dir()}/ags/media/waifus'`);
+Utils.exec(`bash -c 'rm ${GLib.get_user_cache_dir()}/ags/media/waifus/*'`);
+
+const CommandButton = (command) => Button({
+ className: 'sidebar-chat-chip sidebar-chat-chip-action txt txt-small',
+ onClicked: () => sendMessage(command),
+ setup: setupCursorHover,
+ label: command,
+});
+
export const waifuTabIcon = Box({
hpack: 'center',
className: 'sidebar-chat-apiswitcher-icon',
@@ -15,17 +28,90 @@ export const waifuTabIcon = Box({
]
});
+const WaifuImage = (taglist) => {
+ const colorIndicator = Box({
+ className: `sidebar-chat-indicator`,
+ });
+ const downloadIndicator = Label({
+ className: 'sidebar-waifu-txt txt-smallie txt',
+ xalign: 0,
+ label: 'Downloading image...',
+ });
+ const blockHeading = Box({
+ className: 'sidebar-waifu-content',
+ vertical: true,
+ children: [
+ Box({
+ children: taglist.map((tag) => CommandButton(tag))
+ }),
+ downloadIndicator,
+ ]
+ });
+ const blockImage = Box({
+ hpack: 'start',
+ className: 'sidebar-waifu-image',
+ })
+ const thisBlock = Box({
+ className: 'sidebar-chat-message',
+ properties: [
+ ['update', (imageData) => {
+ const { signature, url, source, dominant_color, is_nsfw, width, height, tags } = imageData;
+ const imagePath = `${GLib.get_user_cache_dir()}/ags/media/waifus/${signature}`;
+ // Start download
+ Utils.execAsync(['bash', '-c', `wget -O '${imagePath}' '${url}'`])
+ .then(() => {
+ blockImage.css = `background-image:url('${imagePath}');`;
+ downloadIndicator.destroy();
+ })
+ .catch(print);
+ colorIndicator.css = `background-color: ${dominant_color};`;
+ // Width allocation
+ const widgetWidth = Math.floor(waifuContent.get_allocated_width() * 0.75); // idk tbh
+ blockImage.set_size_request(widgetWidth, Math.ceil(widgetWidth * height / width));
+ }],
+ ],
+ children: [
+ colorIndicator,
+ Box({
+ vertical: true,
+ className: 'spacing-v-10',
+ children: [
+ blockHeading,
+ blockImage,
+ ]
+ })
+ ],
+ setup: (self) => Utils.timeout(MESSAGE_SCROLL_DELAY, () => {
+ var adjustment = waifuView.get_vadjustment();
+ adjustment.set_value(adjustment.get_upper() - adjustment.get_page_size());
+ })
+ });
+ return thisBlock;
+}
+
const waifuContent = Box({
className: 'spacing-v-15',
vertical: true,
+ vexpand: true,
+ properties: [
+ ['map', new Map()],
+ ],
connections: [
[WaifuService, (box, id) => {
- const message = WaifuService.responses[id];
- if (!message) return;
- box.add(Label({
- label: message,
- }))
+ if (id === undefined) return;
+ console.log('new', WaifuService.queries[id]);
+ const newImageBlock = WaifuImage(WaifuService.queries[id]);
+ box.add(newImageBlock);
+ box.show_all();
+ box._map.set(id, newImageBlock);
}, 'newResponse'],
+ [WaifuService, (box, id) => {
+ if (id === undefined) return;
+ const data = WaifuService.responses[id];
+ if (!data) return;
+ const imageBlock = box._map.get(id);
+ imageBlock._update(data);
+ }, 'updateResponse'],
]
});
@@ -55,18 +141,21 @@ export const waifuCommands = Box({
className: 'spacing-h-5',
children: [
Box({ hexpand: true }),
- Button({
- className: 'sidebar-chat-chip sidebar-chat-chip-action txt txt-small',
- onClicked: () => {
- // command do something
- },
- setup: setupCursorHover,
- label: '/call',
- }),
+ CommandButton('/clear'),
]
});
-export const waifuCallAPI = (text) => {
+export const sendMessage = (text) => {
// Do something on send
- WaifuService.fetch(text);
+ // Commands
+ if (text.startsWith('/')) {
+ if (text.startsWith('/clear')) {
+ const kids = waifuContent.get_children();
+ for (let i = 0; i < kids.length; i++) {
+ const child = kids[i];
+ child.destroy();
+ }
+ }
+ }
+ else WaifuService.fetch(text);
}
\ No newline at end of file
diff --git a/.config/ags/widgets/sideleft/apiwidgets.js b/.config/ags/widgets/sideleft/apiwidgets.js
index 573b65dab..3c9b565d6 100644
--- a/.config/ags/widgets/sideleft/apiwidgets.js
+++ b/.config/ags/widgets/sideleft/apiwidgets.js
@@ -5,8 +5,8 @@ const { execAsync, exec } = Utils;
import { setupCursorHover, setupCursorHoverInfo } from "../../lib/cursorhover.js";
// APIs
import ChatGPT from '../../services/chatgpt.js';
-import { chatGPTView, chatGPTCommands, chatGPTSendMessage, chatGPTTabIcon } from './apis/chatgpt.js';
-import { waifuView, waifuCommands, waifuCallAPI, waifuTabIcon } from './apis/waifu.js';
+import { chatGPTView, chatGPTCommands, sendMessage as chatGPTSendMessage, chatGPTTabIcon } from './apis/chatgpt.js';
+import { waifuView, waifuCommands, sendMessage as waifuSendMessage, waifuTabIcon } from './apis/waifu.js';
const APIS = [
{
@@ -19,7 +19,7 @@ const APIS = [
},
{
name: 'Waifus',
- sendCommand: waifuCallAPI,
+ sendCommand: waifuSendMessage,
contentWidget: waifuView,
commandBar: waifuCommands,
tabIcon: waifuTabIcon,
From cc408501df7498d20b1f5ec7be71c0e70b6b18dd Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Mon, 1 Jan 2024 16:09:14 +0700
Subject: [PATCH 038/265] waifu widget: added actions
---
.config/ags/scss/_lib_classes.scss | 142 ++++++++------
.config/ags/scss/_sidebars.scss | 21 +-
.config/ags/services/waifus.js | 24 ++-
.config/ags/style.css | 32 ++-
.config/ags/widgets/sideleft/apis/chatgpt.js | 5 +
.../sideleft/apis/chatgpt_chatmessage.js | 17 +-
.config/ags/widgets/sideleft/apis/waifu.js | 182 +++++++++++++++---
7 files changed, 309 insertions(+), 114 deletions(-)
diff --git a/.config/ags/scss/_lib_classes.scss b/.config/ags/scss/_lib_classes.scss
index ad586d2aa..9340a362b 100644
--- a/.config/ags/scss/_lib_classes.scss
+++ b/.config/ags/scss/_lib_classes.scss
@@ -21,12 +21,11 @@
}
.test {
- background-image: linear-gradient(45deg,
- #F4D609 0%, #F4D609 10%, #212121 10%, #212121 20%,
- #F4D609 20%, #F4D609 30%, #212121 30%, #212121 40%,
- #F4D609 40%, #F4D609 50%, #212121 50%, #212121 60%,
- #F4D609 60%, #F4D609 70%, #212121 70%, #212121 80%,
- #F4D609 80%, #F4D609 90%, #212121 90%, #212121 100%);
+ background-image: linear-gradient(
+ 45deg, #f4d609 0%, #f4d609 10%, #212121 10%, #212121 20%, #f4d609 20%, #f4d609 30%, #212121 30%,
+ #212121 40%, #f4d609 40%, #f4d609 50%, #212121 50%, #212121 60%, #f4d609 60%,
+ #f4d609 70%, #212121 70%, #212121 80%, #f4d609 80%, #f4d609 90%, #212121 90%, #212121 100%
+ );
background-repeat: repeat;
}
@@ -186,183 +185,190 @@
min-height: 0.545rem;
}
-.spacing-h-3>* {
+.spacing-h-3 > * {
margin-right: 0.205rem;
}
-.spacing-h-3>*:last-child {
+.spacing-h-3 > *:last-child {
margin-right: 0rem;
}
-.spacing-v-15>* {
+.spacing-v-3 > * {
+ margin-bottom: 0.205rem;
+}
+
+.spacing-v-3 > *:last-child {
+ margin-bottom: 0rem;
+}
+
+.spacing-v-15 > * {
margin-bottom: 1.023rem;
}
-.spacing-v-15>*:last-child {
+.spacing-v-15 > *:last-child {
margin-bottom: 0rem;
}
-.spacing-h-15>* {
+.spacing-h-15 > * {
margin-right: 1.023rem;
}
-.spacing-h-15>*:last-child {
+.spacing-h-15 > *:last-child {
margin-right: 0rem;
}
-.spacing-h-15>revealer>* {
+.spacing-h-15 > revealer > * {
margin-right: 1.023rem;
}
-.spacing-h-15>revealer:last-child>* {
+.spacing-h-15 > revealer:last-child > * {
margin-right: 0rem;
}
-.spacing-h-15>scrolledwindow>* {
+.spacing-h-15 > scrolledwindow > * {
margin-right: 1.023rem;
}
-.spacing-h-15>scrolledwindow:last-child>* {
+.spacing-h-15 > scrolledwindow:last-child > * {
margin-right: 0rem;
}
-.spacing-v-5>box {
+.spacing-v-5 > box {
margin-bottom: 0.341rem;
}
-.spacing-v-5>box:last-child {
+.spacing-v-5 > box:last-child {
margin-bottom: 0rem;
}
-.spacing-v-5>* {
+.spacing-v-5 > * {
margin-bottom: 0.341rem;
}
-.spacing-v-5>*:last-child {
+.spacing-v-5 > *:last-child {
margin-bottom: 0rem;
}
-.spacing-v-5-revealer>revealer>* {
+.spacing-v-5-revealer > revealer > * {
margin-bottom: 0.341rem;
}
-.spacing-v-5-revealer>revealer:last-child>* {
+.spacing-v-5-revealer > revealer:last-child > * {
margin-bottom: 0rem;
}
-.spacing-v-5-revealer>scrolledwindow>* {
+.spacing-v-5-revealer > scrolledwindow > * {
margin-bottom: 0.341rem;
}
-.spacing-v-5-revealer>scrolledwindow:last-child>* {
+.spacing-v-5-revealer > scrolledwindow:last-child > * {
margin-bottom: 0rem;
}
-.spacing-h-4>* {
+.spacing-h-4 > * {
margin-right: 0.273rem;
}
-.spacing-h-4>*:last-child {
+.spacing-h-4 > *:last-child {
margin-right: 0rem;
}
-.spacing-h-5>* {
+.spacing-h-5 > * {
margin-right: 0.341rem;
}
-.spacing-h-5>*:last-child {
+.spacing-h-5 > *:last-child {
margin-right: 0rem;
}
-.spacing-h-5>widget>* {
+.spacing-h-5 > widget > * {
margin-right: 0.341rem;
}
-.spacing-h-5>widget:last-child>* {
+.spacing-h-5 > widget:last-child > * {
margin-right: 0rem;
}
-.spacing-h-5>revealer>* {
+.spacing-h-5 > revealer > * {
margin-right: 0.341rem;
}
-.spacing-h-5>revealer:last-child>* {
+.spacing-h-5 > revealer:last-child > * {
margin-right: 0rem;
}
-.spacing-h-5>scrolledwindow>* {
+.spacing-h-5 > scrolledwindow > * {
margin-right: 0.341rem;
}
-.spacing-h-5>scrolledwindow:last-child>* {
+.spacing-h-5 > scrolledwindow:last-child > * {
margin-right: 0rem;
}
-.spacing-v-minus5>* {
+.spacing-v-minus5 > * {
margin-bottom: -0.341rem;
}
-.spacing-v-minus5>*:last-child {
+.spacing-v-minus5 > *:last-child {
margin-bottom: 0rem;
}
-.spacing-h-10>* {
+.spacing-h-10 > * {
margin-right: 0.682rem;
}
-.spacing-h-10>*:last-child {
+.spacing-h-10 > *:last-child {
margin-right: 0rem;
}
-.spacing-h-10>revealer>* {
+.spacing-h-10 > revealer > * {
margin-right: 0.682rem;
}
-.spacing-h-10>revealer:last-child>* {
+.spacing-h-10 > revealer:last-child > * {
margin-right: 0rem;
}
-.spacing-h-10>scrolledwindow>* {
+.spacing-h-10 > scrolledwindow > * {
margin-right: 0.682rem;
}
-.spacing-h-10>scrolledwindow:last-child>* {
+.spacing-h-10 > scrolledwindow:last-child > * {
margin-right: 0rem;
}
-.spacing-h-10>flowboxchild>* {
+.spacing-h-10 > flowboxchild > * {
margin-right: 0.682rem;
}
-.spacing-h-10>flowboxchild:last-child>* {
+.spacing-h-10 > flowboxchild:last-child > * {
margin-right: 0rem;
}
-.spacing-v-10>* {
+.spacing-v-10 > * {
margin-bottom: 0.682rem;
}
-.spacing-v-10>*:last-child {
+.spacing-v-10 > *:last-child {
margin-bottom: 0rem;
}
-.spacing-h-20>* {
+.spacing-h-20 > * {
margin-right: 1.364rem;
}
-.spacing-h-20>*:last-child {
+.spacing-h-20 > *:last-child {
margin-right: 0rem;
}
-.spacing-v-20>* {
+.spacing-v-20 > * {
margin-bottom: 1.364rem;
}
-.spacing-v-20>*:last-child {
+.spacing-v-20 > *:last-child {
margin-bottom: 0rem;
}
-
.anim-enter {
@include anim-enter;
}
@@ -429,51 +435,51 @@
color: transparent;
}
-.spacing-h--5>box {
+.spacing-h--5 > box {
margin-right: -0.341rem;
}
-.spacing-h--5>box:last-child {
+.spacing-h--5 > box:last-child {
margin-right: 0rem;
}
-.spacing-v--5>* {
+.spacing-v--5 > * {
margin-bottom: -0.341rem;
}
-.spacing-v--5>*:last-child {
+.spacing-v--5 > *:last-child {
margin-bottom: 0rem;
}
-.spacing-h--10>* {
+.spacing-h--10 > * {
margin-left: -1.364rem;
}
-.spacing-h--10>*:first-child {
+.spacing-h--10 > *:first-child {
margin-left: 0rem;
}
-.spacing-v--10>* {
+.spacing-v--10 > * {
margin-bottom: -0.682rem;
}
-.spacing-v--10>*:last-child {
+.spacing-v--10 > *:last-child {
margin-bottom: 0rem;
}
-.spacing-v--10>* {
+.spacing-v--10 > * {
margin-bottom: -0.682rem;
}
-.spacing-v--10>*:last-child {
+.spacing-v--10 > *:last-child {
margin-bottom: 0rem;
}
-.spacing-h--20>* {
+.spacing-h--20 > * {
margin-left: -1.364rem;
}
-.spacing-h--20>*:first-child {
+.spacing-h--20 > *:first-child {
margin-left: 0rem;
}
@@ -491,4 +497,12 @@
.element-hide {
@include element_easeInOut;
-}
\ No newline at end of file
+}
+
+.element-decel {
+ @include element_decel;
+}
+
+.element-accel {
+ @include element_accel;
+}
diff --git a/.config/ags/scss/_sidebars.scss b/.config/ags/scss/_sidebars.scss
index 7321978bf..4503e7d61 100644
--- a/.config/ags/scss/_sidebars.scss
+++ b/.config/ags/scss/_sidebars.scss
@@ -759,16 +759,13 @@ $onChatgpt: $onPrimary;
margin-left: -0.136rem;
padding-left: 0.818rem;
}
-
.sidebar-waifu-content {
margin-left: 0.682rem;
}
-
.sidebar-waifu-txt {
@include readingfont;
margin-left: 0.682rem;
}
-
.sidebar-waifu-image {
margin-left: 0.682rem;
@include normal-rounding;
@@ -776,3 +773,21 @@ $onChatgpt: $onPrimary;
background-repeat: no-repeat;
background-position: center;
}
+.sidebar-waifu-image-actions {
+ padding: 0.313rem;
+}
+$waifu_image_overlay_transparency: 0.7;
+.sidebar-waifu-image-action {
+ @include full-rounding;
+ min-width: 1.875rem;
+ min-height: 1.875rem;
+ background-color: rgba(0, 0, 0, $waifu_image_overlay_transparency); // Fixed cuz on image
+ color: rgba(255, 255, 255, $waifu_image_overlay_transparency);
+}
+.sidebar-waifu-image-action:hover,
+.sidebar-waifu-image-action:focus {
+ background-color: rgba(30, 30, 30, $waifu_image_overlay_transparency);
+}
+.sidebar-waifu-image-action:active {
+ background-color: rgba(60, 60, 60, $waifu_image_overlay_transparency);
+}
diff --git a/.config/ags/services/waifus.js b/.config/ags/services/waifus.js
index f7f9b28c9..f1e167b00 100644
--- a/.config/ags/services/waifus.js
+++ b/.config/ags/services/waifus.js
@@ -5,6 +5,20 @@ import GLib from 'gi://GLib';
import Soup from 'gi://Soup?version=3.0';
import { fileExists } from './messages.js';
+// Usage from my python waifu fetcher, for reference
+// Usage: waifu-get.py [OPTION]... [TAG]...
+// Options:
+// --segs\tForce NSFW images
+// --im\tUse waifu.im API. You can use many tags
+// --pics\tUse waifu.pics API. Use 1 tag only.
+// --nekos\tUse nekos.life (old) API. No tags.
+
+// Tags:
+// waifu.im (type):
+// maid waifu marin-kitagawa mori-calliope raiden-shogun oppai selfies uniform
+// waifu.im (nsfw tags):
+// ecchi hentai ero ass paizuri oral milf
+
function paramStringFromObj(params) {
return Object.entries(params)
.map(([key, value]) => {
@@ -38,6 +52,7 @@ class WaifuService extends Service {
_queries = [];
_nsfw = false;
_minHeight = 600;
+ _status = 0;
static {
Service.register(this, {
@@ -81,17 +96,21 @@ class WaifuService extends Service {
'nsfw': this._nsfw,
};
const paramString = paramStringFromObj(params);
- console.log(paramString);
// Fetch
const options = {
method: 'GET',
headers: this._headers[this._mode],
};
+ var status = 0;
Utils.fetch(`${this._baseUrl}?${paramString}`, options)
- .then(result => result.text()) // Parse
+ .then(result => {
+ status = result.status;
+ return result.text();
+ })
.then((dataString) => { // Store interesting stuff and emit
const parsedData = JSON.parse(dataString);
if (!parsedData.images) this._responses.push({
+ status: status,
signature: -1,
url: '',
source: '',
@@ -104,6 +123,7 @@ class WaifuService extends Service {
else {
const imageData = parsedData.images[0];
this._responses.push({
+ status: status,
signature: imageData?.signature || -1,
url: imageData?.url || undefined,
source: imageData?.source,
diff --git a/.config/ags/style.css b/.config/ags/style.css
index 4582f992e..fefa3cfee 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -16,7 +16,7 @@
margin-top: 0rem; } }
.test {
- background-image: linear-gradient(45deg, #F4D609 0%, #F4D609 10%, #212121 10%, #212121 20%, #F4D609 20%, #F4D609 30%, #212121 30%, #212121 40%, #F4D609 40%, #F4D609 50%, #212121 50%, #212121 60%, #F4D609 60%, #F4D609 70%, #212121 70%, #212121 80%, #F4D609 80%, #F4D609 90%, #212121 90%, #212121 100%);
+ background-image: linear-gradient(45deg, #f4d609 0%, #f4d609 10%, #212121 10%, #212121 20%, #f4d609 20%, #f4d609 30%, #212121 30%, #212121 40%, #f4d609 40%, #f4d609 50%, #212121 50%, #212121 60%, #f4d609 60%, #f4d609 70%, #212121 70%, #212121 80%, #f4d609 80%, #f4d609 90%, #212121 90%, #212121 100%);
background-repeat: repeat; }
.test-size {
@@ -144,6 +144,12 @@
.spacing-h-3 > *:last-child {
margin-right: 0rem; }
+.spacing-v-3 > * {
+ margin-bottom: 0.205rem; }
+
+.spacing-v-3 > *:last-child {
+ margin-bottom: 0rem; }
+
.spacing-v-15 > * {
margin-bottom: 1.023rem; }
@@ -369,6 +375,12 @@
.element-hide {
transition: 300ms cubic-bezier(0.85, 0, 0.15, 1); }
+.element-decel {
+ transition: 300ms cubic-bezier(0, 0.55, 0.45, 1); }
+
+.element-accel {
+ transition: 300ms cubic-bezier(0.55, 0, 1, 0.45); }
+
* {
caret-color: #ffc4f5; }
* selection {
@@ -2001,6 +2013,24 @@ tooltip {
background-repeat: no-repeat;
background-position: center; }
+.sidebar-waifu-image-actions {
+ padding: 0.313rem; }
+
+.sidebar-waifu-image-action {
+ border-radius: 9999px;
+ -gtk-outline-radius: 9999px;
+ min-width: 1.875rem;
+ min-height: 1.875rem;
+ background-color: rgba(0, 0, 0, 0.7);
+ color: rgba(255, 255, 255, 0.7); }
+
+.sidebar-waifu-image-action:hover,
+.sidebar-waifu-image-action:focus {
+ background-color: rgba(30, 30, 30, 0.7); }
+
+.sidebar-waifu-image-action:active {
+ background-color: rgba(60, 60, 60, 0.7); }
+
.session-bg {
margin-top: -2.727rem;
background-color: rgba(16, 13, 16, 0.64); }
diff --git a/.config/ags/widgets/sideleft/apis/chatgpt.js b/.config/ags/widgets/sideleft/apis/chatgpt.js
index 8faf03831..62679add4 100644
--- a/.config/ags/widgets/sideleft/apis/chatgpt.js
+++ b/.config/ags/widgets/sideleft/apis/chatgpt.js
@@ -201,6 +201,11 @@ export const chatGPTView = Scrollable({
const viewport = scrolledWindow.child;
viewport.set_focus_vadjustment(new Gtk.Adjustment(undefined));
})
+ // Always scroll to bottom with new content
+ const adjustment = scrolledWindow.get_vadjustment();
+ adjustment.connect("changed", () => {
+ adjustment.set_value(adjustment.get_upper() - adjustment.get_page_size());
+ })
}
});
diff --git a/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js b/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js
index 2532ea459..65c228d67 100644
--- a/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js
+++ b/.config/ags/widgets/sideleft/apis/chatgpt_chatmessage.js
@@ -10,7 +10,6 @@ const CUSTOM_SOURCEVIEW_SCHEME_PATH = `${App.configDir}/data/sourceviewtheme.xml
const CUSTOM_SCHEME_ID = 'custom';
const USERNAME = GLib.get_user_name();
const CHATGPT_CURSOR = ' (o) ';
-const MESSAGE_SCROLL_DELAY = 13; // In milliseconds, the time before an updated message scrolls to bottom
/////////////////////// Custom source view colorscheme /////////////////////////
@@ -125,7 +124,11 @@ const CodeBlock = (content = '', lang = 'txt') => {
Box({
className: 'sidebar-chat-codeblock-code',
homogeneous: true,
- children: [sourceView,],
+ children: [Scrollable({
+ vscroll: 'never',
+ hscroll: 'automatic',
+ child: sourceView,
+ })],
})
]
})
@@ -246,11 +249,6 @@ export const ChatMessage = (message, scrolledWindow) => {
}, 'notify::thinking'],
[message, (self) => { // Message update
messageContentBox._fullUpdate(messageContentBox, message.content, message.role != 'user');
- Utils.timeout(MESSAGE_SCROLL_DELAY, () => {
- if (!scrolledWindow) return;
- var adjustment = scrolledWindow.get_vadjustment();
- adjustment.set_value(adjustment.get_upper() - adjustment.get_page_size());
- });
}, 'notify::content'],
[message, (label, isDone) => { // Remove the cursor
messageContentBox._fullUpdate(messageContentBox, message.content, false);
@@ -285,11 +283,6 @@ export const SystemMessage = (content, commandName, scrolledWindow) => {
],
})
],
- setup: (self) => Utils.timeout(MESSAGE_SCROLL_DELAY, () => {
- if (!scrolledWindow) return;
- var adjustment = scrolledWindow.get_vadjustment();
- adjustment.set_value(adjustment.get_upper() - adjustment.get_page_size());
- })
});
return thisMessage;
}
diff --git a/.config/ags/widgets/sideleft/apis/waifu.js b/.config/ags/widgets/sideleft/apis/waifu.js
index b4bb650be..e89cb41c7 100644
--- a/.config/ags/widgets/sideleft/apis/waifu.js
+++ b/.config/ags/widgets/sideleft/apis/waifu.js
@@ -1,13 +1,12 @@
-const { Gdk, GLib, Gtk, Pango } = imports.gi;
+const { Gdk, Gio, GLib, Gtk, Pango } = imports.gi;
import { App, Utils, Widget } from '../../../imports.js';
const { Box, Button, Entry, EventBox, Icon, Label, Revealer, Scrollable, Stack } = Widget;
const { execAsync, exec } = Utils;
import { MaterialIcon } from "../../../lib/materialicon.js";
+import { MarginRevealer } from '../../../lib/advancedrevealers.js';
import { setupCursorHover, setupCursorHoverInfo } from "../../../lib/cursorhover.js";
import WaifuService from '../../../services/waifus.js';
-const MESSAGE_SCROLL_DELAY = 13; // In milliseconds, the time before an updated message scrolls to bottom
-
// Create cache folder and clear pics from previous session
Utils.exec(`bash -c 'mkdir -p ${GLib.get_user_cache_dir()}/ags/media/waifus'`);
Utils.exec(`bash -c 'rm ${GLib.get_user_cache_dir()}/ags/media/waifus/*'`);
@@ -29,62 +28,146 @@ export const waifuTabIcon = Box({
});
const WaifuImage = (taglist) => {
+ var imagePath = '';
+ var blockImageData = {};
+ const ImageState = (icon, name) => Box({
+ className: 'spacing-h-5',
+ children: [
+ Box({ hexpand: true }),
+ Label({
+ className: 'sidebar-waifu-txt txt-smallie txt',
+ xalign: 0,
+ label: name,
+ }),
+ MaterialIcon(icon, 'norm'),
+ ]
+ })
+ const ImageAction = ({ name, icon, action }) => Button({
+ className: 'sidebar-waifu-image-action txt-norm icon-material',
+ tooltipText: name,
+ label: icon,
+ onClicked: action,
+ setup: setupCursorHover,
+ })
const colorIndicator = Box({
className: `sidebar-chat-indicator`,
});
- const downloadIndicator = Label({
- className: 'sidebar-waifu-txt txt-smallie txt',
- xalign: 0,
- label: 'Downloading image...',
+ const downloadState = Stack({
+ homogeneous: false,
+ transition: 'slide_up_down',
+ transitionDuration: 150,
+ items: [
+ ['api', ImageState('api', 'Calling API')],
+ ['download', ImageState('downloading', 'Downloading image')],
+ ['done', ImageState('done', 'Finished!')],
+ ['error', ImageState('error', 'Error')],
+ ]
+ });
+ const downloadIndicator = MarginRevealer({
+ vpack: 'center',
+ transition: 'slide_left',
+ revealChild: true,
+ child: downloadState,
});
const blockHeading = Box({
- className: 'sidebar-waifu-content',
- vertical: true,
+ hpack: 'fill',
+ className: 'sidebar-waifu-content spacing-h-5',
children: [
- Box({
- children: taglist.map((tag) => CommandButton(tag))
- }),
+ ...taglist.map((tag) => CommandButton(tag)),
+ Box({ hexpand: true }),
downloadIndicator,
]
});
- const blockImage = Box({
- hpack: 'start',
- className: 'sidebar-waifu-image',
+ const blockImageActions = Box({
+ className: 'sidebar-waifu-image-actions spacing-h-3',
+ children: [
+ Box({ hexpand: true }),
+ ImageAction({
+ name: 'Go to source',
+ icon: 'link',
+ action: () => execAsync(['xdg-open', `${blockImageData.source}`]).catch(print),
+ }),
+ ImageAction({
+ name: 'Hoard',
+ icon: 'save',
+ action: () => execAsync(['bash', '-c', `mkdir -p ~/Pictures/waifus && cp ${imagePath} ~/Pictures/waifus`]).catch(print),
+ }),
+ ImageAction({
+ name: 'Open externally',
+ icon: 'open_in_new',
+ action: () => execAsync(['xdg-open', `${imagePath}`]).catch(print),
+ }),
+ ]
})
+ const blockImage = Box({
+ className: 'test',
+ hpack: 'start',
+ vertical: true,
+ className: 'sidebar-waifu-image',
+ homogeneous: true,
+ children: [
+ Revealer({
+ transition: 'crossfade',
+ revealChild: false,
+ child: Box({
+ vertical: true,
+ children: [blockImageActions],
+ })
+ })
+ ]
+ })
+ const blockImageRevealer = Revealer({
+ transition: 'slide_down',
+ transitionDuration: 150,
+ revealChild: false,
+ child: blockImage,
+ });
const thisBlock = Box({
className: 'sidebar-chat-message',
properties: [
['update', (imageData) => {
- const { signature, url, source, dominant_color, is_nsfw, width, height, tags } = imageData;
- const imagePath = `${GLib.get_user_cache_dir()}/ags/media/waifus/${signature}`;
+ blockImageData = imageData;
+ const { status, signature, url, source, dominant_color, is_nsfw, width, height, tags } = blockImageData;
+ if (status != 200) {
+ downloadState.shown = 'error';
+ return;
+ }
+ imagePath = `${GLib.get_user_cache_dir()}/ags/media/waifus/${signature}`;
+ downloadState.shown = 'download';
+ // Width allocation
+ const widgetWidth = Math.min(Math.floor(waifuContent.get_allocated_width() * 0.75), width);
+ blockImage.set_size_request(widgetWidth, Math.ceil(widgetWidth * height / width));
// Start download
- Utils.execAsync(['bash', '-c', `wget -O '${imagePath}' '${url}'`])
- .then(() => {
- blockImage.css = `background-image:url('${imagePath}');`;
- downloadIndicator.destroy();
- })
+ const showImage = () => {
+ downloadState.shown = 'done';
+ blockImage.css = `background-image:url('${imagePath}');`;
+ blockImage.get_children()[0].revealChild = true;
+ Utils.timeout(blockImageRevealer.transitionDuration,
+ () => blockImageRevealer.revealChild = true
+ );
+ downloadIndicator._hide(downloadIndicator);
+ }
+ if (Gio.File.new_for_path(imagePath).query_exists(null)) showImage();
+ else Utils.execAsync(['bash', '-c', `wget -O '${imagePath}' '${url}'`])
+ .then(showImage)
.catch(print);
colorIndicator.css = `background-color: ${dominant_color};`;
- // Width allocation
- const widgetWidth = Math.floor(waifuContent.get_allocated_width() * 0.75); // idk tbh
- blockImage.set_size_request(widgetWidth, Math.ceil(widgetWidth * height / width));
}],
],
children: [
colorIndicator,
Box({
vertical: true,
- className: 'spacing-v-10',
+ className: 'spacing-v-5',
children: [
blockHeading,
- blockImage,
+ Box({
+ vertical: true,
+ children: [blockImageRevealer],
+ })
]
})
],
- setup: (self) => Utils.timeout(MESSAGE_SCROLL_DELAY, () => {
- var adjustment = waifuView.get_vadjustment();
- adjustment.set_value(adjustment.get_upper() - adjustment.get_page_size());
- })
});
return thisBlock;
}
@@ -99,7 +182,6 @@ const waifuContent = Box({
connections: [
[WaifuService, (box, id) => {
if (id === undefined) return;
- console.log('new', WaifuService.queries[id]);
const newImageBlock = WaifuImage(WaifuService.queries[id]);
box.add(newImageBlock);
box.show_all();
@@ -134,9 +216,29 @@ export const waifuView = Scrollable({
const viewport = scrolledWindow.child;
viewport.set_focus_vadjustment(new Gtk.Adjustment(undefined));
})
+ // Always scroll to bottom with new content
+ const adjustment = scrolledWindow.get_vadjustment();
+ adjustment.connect("changed", () => {
+ adjustment.set_value(adjustment.get_upper() - adjustment.get_page_size());
+ })
}
});
+// const waifuTags = Box({
+// className: 'spacing-h-5',
+// children: [
+// Box({ hexpand: true }),
+// CommandButton('waifu'),
+// CommandButton('maid'),
+// CommandButton('uniform'),
+// CommandButton('oppai'),
+// CommandButton('selfies'),
+// CommandButton('marin-kitagawa'),
+// CommandButton('raiden-shogun'),
+// CommandButton('mori-calliope'),
+// ]
+// });
+
export const waifuCommands = Box({
className: 'spacing-h-5',
children: [
@@ -156,6 +258,22 @@ export const sendMessage = (text) => {
child.destroy();
}
}
+ else if (text.startsWith('/test')) {
+ const newImage = WaifuImage(['/test']);
+ waifuContent.add(newImage);
+ Utils.timeout(13, () => newImage._update({ // Needs timeout or inits won't make it
+ // This is an image uploaded to my github repo
+ status: 200,
+ url: 'https://picsum.photos/400/600',
+ signature: 0,
+ source: 'https://picsum.photos/400/600',
+ dominant_color: '#9392A6',
+ is_nsfw: false,
+ width: 300,
+ height: 200,
+ tags: ['/test'],
+ }));
+ }
}
else WaifuService.fetch(text);
}
\ No newline at end of file
From 2932ffbf4b1528533b4c5241f97582a0b01bdf83 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Mon, 1 Jan 2024 16:15:05 +0700
Subject: [PATCH 039/265] small fixes
---
.config/ags/services/waifus.js | 7 ++---
.config/ags/style.css | 30 +++++++++++-----------
.config/ags/widgets/bar/system.js | 2 +-
.config/ags/widgets/sideleft/apis/waifu.js | 4 +--
4 files changed, 20 insertions(+), 23 deletions(-)
diff --git a/.config/ags/services/waifus.js b/.config/ags/services/waifus.js
index f1e167b00..dc15e3ff4 100644
--- a/.config/ags/services/waifus.js
+++ b/.config/ags/services/waifus.js
@@ -1,9 +1,6 @@
+const { Gdk, Gio, GLib } = imports.gi;
import { Utils, Widget } from '../imports.js';
import Service from 'resource:///com/github/Aylur/ags/service.js';
-import Gio from 'gi://Gio';
-import GLib from 'gi://GLib';
-import Soup from 'gi://Soup?version=3.0';
-import { fileExists } from './messages.js';
// Usage from my python waifu fetcher, for reference
// Usage: waifu-get.py [OPTION]... [TAG]...
@@ -127,7 +124,7 @@ class WaifuService extends Service {
signature: imageData?.signature || -1,
url: imageData?.url || undefined,
source: imageData?.source,
- dominant_color: imageData?.dominant_color || '#000000',
+ dominant_color: imageData?.dominant_color || '#9392A6',
is_nsfw: imageData?.is_nsfw || false,
width: imageData?.width || 0,
height: imageData?.height || 0,
diff --git a/.config/ags/style.css b/.config/ags/style.css
index fefa3cfee..7a00589c1 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -2247,9 +2247,9 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 29.659rem;
- background-color: #100d10;
+ background-color: #dae8ed;
padding: 0rem 1.023rem;
- background: linear-gradient(127deg, rgba(47, 41, 46, 0.7), rgba(47, 41, 46, 0.55) 70.71%), linear-gradient(217deg, rgba(78, 68, 75, 0.7), rgba(78, 68, 75, 0.55) 70.71%), radial-gradient(circle at 0% 100%, #554050 13%, rgba(0, 0, 0, 0) 100%), linear-gradient(336deg, rgba(85, 64, 80, 0.7), rgba(85, 64, 80, 0.55) 70.71%), linear-gradient(#100d10, #100d10); }
+ background: linear-gradient(127deg, rgba(131, 159, 170, 0.7), rgba(131, 159, 170, 0.55) 70.71%), linear-gradient(217deg, rgba(102, 105, 105, 0.7), rgba(102, 105, 105, 0.55) 70.71%), radial-gradient(circle at 0% 100%, #86776E 13%, rgba(0, 0, 0, 0) 100%), linear-gradient(336deg, rgba(144, 134, 123, 0.7), rgba(144, 134, 123, 0.55) 70.71%), linear-gradient(#dae8ed, #dae8ed); }
.osd-music-cover-fallback {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2257,8 +2257,8 @@ tooltip {
-gtk-outline-radius: 0.818rem;
min-width: 7.5rem;
min-height: 7.5rem;
- background-color: rgba(33, 27, 31, 0.31);
- color: #dad0d5; }
+ background-color: rgba(233, 241, 247, 0.3);
+ color: #0a0b0f; }
.osd-music-cover {
border-radius: 0.818rem;
@@ -2284,13 +2284,13 @@ tooltip {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
font-size: 1.364rem;
- color: #dad0d5; }
+ color: #0a0b0f; }
.osd-music-artists {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
font-size: 0.955rem;
- color: rgba(205, 196, 201, 0.9); }
+ color: rgba(20, 22, 26, 0.9); }
.osd-music-pill {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2299,8 +2299,8 @@ tooltip {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
min-width: 1.833rem;
padding: 0.273rem 0.682rem;
- background-color: rgba(55, 46, 53, 0.5);
- color: #dad0d5; }
+ background-color: rgba(139, 149, 154, 0.5);
+ color: #0a0b0f; }
.osd-music-controls {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2309,8 +2309,8 @@ tooltip {
font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
min-width: 1.833rem;
padding: 0.205rem;
- background-color: rgba(55, 46, 53, 0.5);
- color: #dad0d5; }
+ background-color: rgba(139, 149, 154, 0.5);
+ color: #0a0b0f; }
.osd-music-controlbtn {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2321,10 +2321,10 @@ tooltip {
.osd-music-controlbtn:hover,
.osd-music-controlbtn:focus {
- background-color: rgba(96, 87, 93, 0.55); }
+ background-color: rgba(107, 115, 119, 0.55); }
.osd-music-controlbtn:active {
- background-color: rgba(111, 102, 108, 0.575); }
+ background-color: rgba(94, 101, 106, 0.575); }
.osd-music-controlbtn-txt {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2338,15 +2338,15 @@ tooltip {
min-width: 0.409rem;
min-height: 3.068rem;
padding: 0.273rem;
- color: #dad0d5; }
+ color: #0a0b0f; }
.osd-music-playstate {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 3.068rem;
min-width: 3.068rem;
border-radius: 10rem;
- background-color: rgba(55, 46, 53, 0.5);
- color: #dad0d5; }
+ background-color: rgba(139, 149, 154, 0.5);
+ color: #0a0b0f; }
.osd-music-playstate-btn > label {
transition: 50ms cubic-bezier(0.05, 0.7, 0.1, 1);
diff --git a/.config/ags/widgets/bar/system.js b/.config/ags/widgets/bar/system.js
index b2b51ecb4..8c5465339 100644
--- a/.config/ags/widgets/bar/system.js
+++ b/.config/ags/widgets/bar/system.js
@@ -61,7 +61,7 @@ const UtilButton = ({ name, icon, onClicked }) => Button({
const Utilities = () => Box({
hpack: 'center',
- className: 'spacing-h-5',
+ className: 'spacing-h-5 txt-onSurfaceVariant',
children: [
UtilButton({
name: 'Screen snip', icon: 'screenshot_region', onClicked: () => {
diff --git a/.config/ags/widgets/sideleft/apis/waifu.js b/.config/ags/widgets/sideleft/apis/waifu.js
index e89cb41c7..7d48a98be 100644
--- a/.config/ags/widgets/sideleft/apis/waifu.js
+++ b/.config/ags/widgets/sideleft/apis/waifu.js
@@ -141,9 +141,9 @@ const WaifuImage = (taglist) => {
const showImage = () => {
downloadState.shown = 'done';
blockImage.css = `background-image:url('${imagePath}');`;
- blockImage.get_children()[0].revealChild = true;
+ blockImageRevealer.revealChild = true;
Utils.timeout(blockImageRevealer.transitionDuration,
- () => blockImageRevealer.revealChild = true
+ () => blockImage.get_children()[0].revealChild = true
);
downloadIndicator._hide(downloadIndicator);
}
From fae6cf50c199747237c1da7e04b1fb0c65a01de6 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Mon, 1 Jan 2024 16:39:09 +0700
Subject: [PATCH 040/265] update hyprland and swaylock
---
.config/hypr/colors.conf | 37 +++++++++++-----------
.config/hypr/hyprland.conf | 63 ++++++++++----------------------------
.config/hypr/keybinds.conf | 18 +++--------
.config/hypr/rules.conf | 4 +--
.config/swaylock/config | 11 +++----
5 files changed, 47 insertions(+), 86 deletions(-)
diff --git a/.config/hypr/colors.conf b/.config/hypr/colors.conf
index 4553b27b8..787741876 100755
--- a/.config/hypr/colors.conf
+++ b/.config/hypr/colors.conf
@@ -1,43 +1,44 @@
-# Auto generated color theme for image at: [Local wallpaper]
+$SLURP_COMMAND="$(slurp -d -c f8daeeBB -b 55405044 -s 00000000)"
+
general {
- col.active_border = rgba(3d1c70FF)
- col.inactive_border = rgba(4b4358CC)
+ col.active_border = rgba(551251FF)
+ col.inactive_border = rgba(554050CC)
}
plugin {
- droidbars {
+ droidbars { # This is my hyprbars mod that broke :(
# example config
bar_height = 30
- background_color = rgba(111012FF)
- # background_color_active = rgba(49454eFF) # Not added yet
- text_color = rgba(eadef7FF)
- font_family = Lexend
+ background_color = rgba(120F11FF)
+ # background_color_active = rgba(4e444bFF) # Not added yet
+ text_color = rgba(f8daeeFF)
+ font_family = Rubik, Geist, AR One Sans, Reddit Sans, Inter, Roboto, Ubuntu, Noto Sans, sans-serif
button_font_fmily = JetBrainsMono NF
# example buttons (R -> L)
# droidbars-button = [0]isLeft(0/1), [1]color, [2]color2, [3]width, [4]height, [5]icon, [6]buttonType, [7]on-click
- droidbars-button = 0, rgba(eadef7FF), rgba(d6baffFF), 42, 16,โ ๓ฐญ, normal, hyprctl dispatch killactive
- droidbars-button = 0, rgba(eadef7FF), rgba(d6baffFF), 42, 16,โ ๏, normal, hyprctl dispatch fullscreen 1
- droidbars-button = 1, rgba(eadef7FF), rgba(d6baffFF), 16, 16,โ๓ฐ, pin, hyprctl dispatch pin
- droidbars-button = 1, rgba(eadef7FF), rgba(d6baffFF), 16, 16,๓ฐ, float, hyprctl dispatch togglefloating
+ droidbars-button = 0, rgba(f8daeeFF), rgba(ffabf1FF), 42, 16,โ ๓ฐญ, normal, hyprctl dispatch killactive
+ droidbars-button = 0, rgba(f8daeeFF), rgba(ffabf1FF), 42, 16,โ ๏, normal, hyprctl dispatch fullscreen 1
+ droidbars-button = 1, rgba(f8daeeFF), rgba(ffabf1FF), 16, 16,โ๓ฐ, pin, hyprctl dispatch pin
+ droidbars-button = 1, rgba(f8daeeFF), rgba(ffabf1FF), 16, 16,๓ฐ, float, hyprctl dispatch togglefloating
}
hyprbars {
# Honestly idk if it works like css, but well, why not
- bar_text_font = Geist, AR One Sans, Reddit Sans, Inter, Roboto, Ubuntu, Noto Sans, sans-serif
+ bar_text_font = Rubik, Geist, AR One Sans, Reddit Sans, Inter, Roboto, Ubuntu, Noto Sans, sans-serif
bar_height = 30
bar_padding = 10
bar_button_padding = 5
bar_precedence_over_border = true
bar_part_of_window = true
- bar_color = rgb(111012)
- col.text = rgb(e7e1e6)
+ bar_color = rgb(120F11)
+ col.text = rgb(eae0e4)
# example buttons (R -> L)
# hyprbars-button = color, size, on-click
- hyprbars-button = rgb(e7e1e6), 13, ๓ฐญ, hyprctl dispatch killactive
- hyprbars-button = rgb(e7e1e6), 13, ๓ฐฏ, hyprctl dispatch fullscreen 1
- hyprbars-button = rgb(e7e1e6), 13, ๓ฐฐ, hyprctl dispatch movetoworkspacesilent special
+ hyprbars-button = rgb(eae0e4), 13, ๓ฐญ, hyprctl dispatch killactive
+ hyprbars-button = rgb(eae0e4), 13, ๓ฐฏ, hyprctl dispatch fullscreen 1
+ hyprbars-button = rgb(eae0e4), 13, ๓ฐฐ, hyprctl dispatch movetoworkspacesilent special
}
}
diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
index c30041a80..4b1caa952 100755
--- a/.config/hypr/hyprland.conf
+++ b/.config/hypr/hyprland.conf
@@ -2,35 +2,26 @@
# For Environment variables see env.conf
# For Keybinds variables see keybinds.conf
# For Auto-run stuff see execs.conf
+# For Window/layer rules see rules.conf
source=~/.config/hypr/env.conf
-$mainMod = SUPER
-
# MONITOR CONFIG
monitor=,preferred,auto,1
monitor=,addreserved, 0, 0, 0, 0
-#monitor=HDMI-A-1,1920x1080@60,1920x0,1,mirror,eDP-1
-#################### Core components (authentication, idle daemon and stuff) ##############
+# monitor=HDMI-A-1,1920x1080@60,1920x0,1,mirror,eDP-1
+
+# Startup executions
source=~/.config/hypr/execs.conf
-############################# Keybinds ############################
-source=~/.config/hypr/keybinds.conf
-
-############################## Input ##############################
input {
# Mouse
- # accel_profile = adaptive
force_no_accel = false
- #sensitivity = 0
- # Keyboard
- # Add a layout and comment kb_options for Win+Space switching shortcut
+ # Keyboard: Add a layout and uncomment kb_options for Win+Space switching shortcut
kb_layout = us
# kb_options = grp:win_space_toggle
-
- follow_mouse = 1
numlock_by_default = true
repeat_delay = 250
repeat_rate = 35
@@ -41,31 +32,25 @@ input {
clickfinger_behavior = true
scroll_factor = 0.5
}
- scroll_method = 2fg
}
binds {
- # focus_window_on_workspace_change = true
+ # focus_window_on_workspace_c# For Auto-run stuff see execs.confhange = true
scroll_event_delay = 0
}
gestures {
- # See https://wiki.hyprland.org/Configuring/Variables/ for more
workspace_swipe = true
workspace_swipe_distance = 700
workspace_swipe_fingers = 4
workspace_swipe_cancel_ratio = 0.2
workspace_swipe_min_speed_to_force = 5
-
workspace_swipe_direction_lock = true
- workspace_swipe_direction_lock_threshold = 0
-
+ workspace_swipe_direction_lock_threshold = 10
workspace_swipe_create_new = true
-
}
general {
- max_fps = 75
# Gaps and border
gaps_in = 4
gaps_out = 5
@@ -76,17 +61,16 @@ general {
col.active_border = rgba(0DB7D4FF)
col.inactive_border = rgba(31313600)
- # Functionality
- # resize_on_border = true
+ resize_on_border = true
no_focus_fallback = true
layout = dwindle
- #focus_to_other_workspaces = true
+ #focus_to_other_workspaces = true # ahhhh i still haven't properly implemented this
allow_tearing = false # some guy told me tearing might make things smoother idk
}
dwindle {
- preserve_split = true # you definitely want this
+ preserve_split = true
# no_gaps_when_only = 1
smart_split = false
smart_resizing = false
@@ -100,16 +84,11 @@ decoration {
xray = true
special = false
new_optimizations = on
-
size = 5
passes = 4
brightness = 1
noise = 0.01
contrast = 1
-
- #vibrancy = 0.1
- #vibrancy_darkness = 0
-
}
# Shadow
drop_shadow = true
@@ -170,22 +149,10 @@ misc {
}
debug {
- #overlay = true
- #damage_tracking = 0
+ # overlay = true
+ # damage_tracking = 0
- #damage_blink = yes
-}
-
-#misc {
-# vfr = false
-#}
-#debug {
-# overlay = true
-#}
-
-decoration {
- #screen_shader = ~/.config/hypr/shaders/drugs.frag
- #screen_shader = ~/.config/hypr/shaders/crt.frag
+ # damage_blink = yes
}
# Window and layer rules
@@ -196,3 +163,7 @@ source=~/.config/hypr/rules.conf
# Dynamic colors
source=~/.config/hypr/colors.conf
+# Keybinds
+source=~/.config/hypr/keybinds.conf
+
+
diff --git a/.config/hypr/keybinds.conf b/.config/hypr/keybinds.conf
index f814ddc4b..8f401fa11 100755
--- a/.config/hypr/keybinds.conf
+++ b/.config/hypr/keybinds.conf
@@ -35,9 +35,9 @@ bind = ControlShiftAlt, Delete, exec, pkill wlogout || wlogout -p layer-shell
bind = ControlShiftAltSuper, Delete, exec, systemctl poweroff
# Screenshot, Record, OCR, Color picker, Clipboard history
-bind = SuperShiftAlt, S, exec, grim -g "$(slurp -d -c D1E5F4BB -b 1B232866 -s 00000000)" - | swappy -f -
+bind = SuperShiftAlt, S, exec, grim -g $SLURP_COMMAND - | swappy -f -
bindl=,Print,exec,grim - | wl-copy
-bind = SuperShift, S, exec, grim -g "$(slurp -d -c D1E5F4BB -b 1B232866 -s 00000000)" - | wl-copy
+bind = SuperShift, S, exec, grim -g $SLURP_COMMAND - | wl-copy
bind = SuperAlt, R, exec, ~/.config/ags/scripts/record-script.sh
bind = ControlAlt, R, exec, ~/.config/ags/scripts/record-script.sh --fullscreen
bind = SuperShiftAlt, R, exec, ~/.config/ags/scripts/record-script.sh --fullscreen-sound
@@ -46,11 +46,11 @@ bind = Super, V, exec, pkill fuzzel || cliphist list | fuzzel --no-fuzzy --dmenu
# Text-to-image
# Normal
-bind = ControlSuperShift,S,exec,grim -g "$(slurp -d -c D1E5F4BB -b 1B232866 -s 00000000)" "tmp.png" && tesseract "tmp.png" - | wl-copy && rm "tmp.png"
+bind = ControlSuperShift,S,exec,grim -g $SLURP_COMMAND "tmp.png" && tesseract "tmp.png" - | wl-copy && rm "tmp.png"
# English
-bind = SuperShift,T,exec,grim -g "$(slurp -d -c D1E5F4BB -b 1B232866 -s 00000000)" "tmp.png" && tesseract -l eng "tmp.png" - | wl-copy && rm "tmp.png"
+bind = SuperShift,T,exec,grim -g $SLURP_COMMAND "tmp.png" && tesseract -l eng "tmp.png" - | wl-copy && rm "tmp.png"
# Japanese
-bind = SuperShift,J,exec,grim -g "$(slurp -d -c D1E5F4BB -b 1B232866 -s 00000000)" "tmp.png" && tesseract -l jpn "tmp.png" - | wl-copy && rm "tmp.png"
+bind = SuperShift,J,exec,grim -g $SLURP_COMMAND "tmp.png" && tesseract -l jpn "tmp.png" - | wl-copy && rm "tmp.png"
# Media
bind = SuperShift, N, exec, playerctl next || playerctl position `bc <<< "100 * $(playerctl metadata mpris:length) / 1000000 / 100"`
@@ -86,14 +86,6 @@ bindle = , XF86AudioRaiseVolume, exec, ags run-js 'indicator.popup(1);'
bindle = , XF86AudioLowerVolume, exec, ags run-js 'indicator.popup(1);'
bindle = , XF86MonBrightnessUp, exec, ags run-js 'indicator.popup(1);'
bindle = , XF86MonBrightnessDown, exec, ags run-js 'indicator.popup(1);'
-#bindr = Control, Control_R, exec, ags run-js 'indicator.popup(-1);'
-#bindr = Control, Control_R, exec, ags run-js 'Notifications.notifications.forEach((notif) => notif.dismiss())'
-#bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("sideright");'
-#bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("cheatsheet");'
-#bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("osk");'
-#bindr = Control, Control_R, exec, ags run-js 'App.closeWindow("session");'
-#bindr = Control, Control_R, exec, ags run-js 'openMusicControls.value = false'
-#bindr = Control, Control_R, exec, ags run-js 'openColorScheme.value = false'
###################################### Plugins #########################################
bind = ControlSuper, P, exec, hyprctl plugin load "~/.config/hypr/plugins/droidbars.so"
diff --git a/.config/hypr/rules.conf b/.config/hypr/rules.conf
index fdb7b2007..f5ea624b8 100644
--- a/.config/hypr/rules.conf
+++ b/.config/hypr/rules.conf
@@ -14,7 +14,7 @@ windowrule=float,title:^(Select a File)(.*)$
windowrule=float,title:^(Choose wallpaper)(.*)$
windowrule=float,title:^(Open Folder)(.*)$
windowrule=float,title:^(Save As)(.*)$
-windowrule=float,title:^(Library)(.*)$
+windowrule=float,title:^(Library)(.*)$
######## Layer rules ########
layerrule = xray 1, .*
@@ -59,5 +59,3 @@ layerrule = noanim, sideleft
#layerrule = ignorealpha 0.69, indicator*
#layerrule = blur, osk
#layerrule = ignorealpha 0.69, osk
-
-
diff --git a/.config/swaylock/config b/.config/swaylock/config
index 5fd609efd..4c5249666 100644
--- a/.config/swaylock/config
+++ b/.config/swaylock/config
@@ -1,13 +1,12 @@
ignore-empty-password
font=sans-serif
-font-size=50
+font-size=23
clock
timestr=%R
#datestr=%a, %e of %B
-#screenshots
-color=00000099
+color=000000dd
#fade-in=0.1
#effect-blur=20x2
@@ -15,8 +14,8 @@ color=00000099
#effect-scale=0.3
indicator
-indicator-radius=150
-indicator-thickness=12
+indicator-radius=80
+indicator-thickness=10
indicator-caps-lock
key-hl-color=d4d4d4
@@ -24,7 +23,7 @@ caps-lock-key-hl-color=d4d4d4
separator-color=00000000
-inside-color=00000099
+inside-color=000000ff
inside-clear-color=00000099
inside-caps-lock-color=00000099
inside-ver-color=00000099
From 577550642f09f478b46d7d4343967a8c966a3c2f Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Tue, 2 Jan 2024 15:54:55 +0700
Subject: [PATCH 041/265] ags: sync
---
...dvancedrevealers.js => advancedwidgets.js} | 41 +++--
.config/ags/lib/notification.js | 1 -
.config/ags/scss/_common.scss | 2 +-
.config/ags/scss/_lib_classes.scss | 13 +-
.config/ags/scss/_lib_mixins.scss | 51 +++----
.config/ags/scss/_sidebars.scss | 24 ++-
.config/ags/services/waifus.js | 25 ++-
.config/ags/style.css | 144 ++++++++++--------
.config/ags/widgets/bar/music.js | 9 +-
.../ags/widgets/indicators/indicatorvalues.js | 6 +-
.../ags/widgets/indicators/musiccontrols.js | 14 +-
.config/ags/widgets/overview/overview.js | 2 +-
.config/ags/widgets/sideleft/apis/chatgpt.js | 6 +-
.config/ags/widgets/sideleft/apis/waifu.js | 81 ++++++----
14 files changed, 251 insertions(+), 168 deletions(-)
rename .config/ags/lib/{advancedrevealers.js => advancedwidgets.js} (65%)
diff --git a/.config/ags/lib/advancedrevealers.js b/.config/ags/lib/advancedwidgets.js
similarity index 65%
rename from .config/ags/lib/advancedrevealers.js
rename to .config/ags/lib/advancedwidgets.js
index cab2d4ca6..74259e10a 100644
--- a/.config/ags/lib/advancedrevealers.js
+++ b/.config/ags/lib/advancedwidgets.js
@@ -1,6 +1,6 @@
const { Gdk, Gtk } = imports.gi;
import { App, SCREEN_WIDTH, SCREEN_HEIGHT, Service, Utils, Variable, Widget } from '../imports.js';
-const { Box, Button, Entry, EventBox, Icon, Label, Revealer, Scrollable, Stack } = Widget;
+const { Box, Button, EventBox, Label, Overlay, Revealer, Scrollable, Stack } = Widget;
export const MarginRevealer = ({
transition = 'slide_down',
@@ -13,46 +13,41 @@ export const MarginRevealer = ({
}) => {
const widget = Scrollable({
...rest,
- css: `min-height: 0px;`,
properties: [
['revealChild', true], // It'll be set to false after init if it's supposed to hide
['transition', transition],
- ['show', (self) => {
- if (self._revealChild) return;
- self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER);
+ ['show', () => {
+ if (widget._revealChild) return;
+ widget.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER);
child.toggleClassName(hideClass, false);
child.toggleClassName(showClass, true);
- self._revealChild = true;
+ widget._revealChild = true;
child.css = 'margin: 0px;';
}],
- ['hide', (self) => {
- if (!self._revealChild) return;
+ ['hide', () => {
+ if (!widget._revealChild) return;
child.toggleClassName(hideClass, true);
child.toggleClassName(showClass, false);
- self._revealChild = false;
- if (self._transition == 'slide_left')
+ widget._revealChild = false;
+ if (widget._transition == 'slide_left')
child.css = `margin-right: -${child.get_allocated_width()}px;`;
- else if (self._transition == 'slide_right')
+ else if (widget._transition == 'slide_right')
child.css = `margin-left: -${child.get_allocated_width()}px;`;
- else if (self._transition == 'slide_up')
+ else if (widget._transition == 'slide_up')
child.css = `margin-bottom: -${child.get_allocated_height()}px;`;
- else if (self._transition == 'slide_down')
+ else if (widget._transition == 'slide_down')
child.css = `margin-top: -${child.get_allocated_height()}px;`;
}],
- ['toggle', (self) => {
+ ['toggle', () => {
console.log('toggle');
- if (self._revealChild) self._hide(self);
- else self._show(self);
+ if (widget._revealChild) widget._hide();
+ else widget._show();
}],
...extraProperties,
],
- setup: (self) => {
- if (!revealChild)
- self.set_policy(Gtk.PolicyType.ALWAYS, Gtk.PolicyType.ALWAYS);
- else
- self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER);
- self.child = child;
- },
+ child: child,
+ hscroll: (revealChild ? 'never' : 'always'),
+ vscroll: (revealChild ? 'never' : 'always'),
});
child.toggleClassName(`${revealChild ? showClass : hideClass}`, true);
return widget;
diff --git a/.config/ags/lib/notification.js b/.config/ags/lib/notification.js
index 97f53c092..23de6b8cd 100644
--- a/.config/ags/lib/notification.js
+++ b/.config/ags/lib/notification.js
@@ -7,7 +7,6 @@ const { Box, EventBox, Icon, Overlay, Label, Button, Revealer } = Widget;
import { MaterialIcon } from "./materialicon.js";
import { setupCursorHover } from "./cursorhover.js";
import { AnimatedCircProg } from "./animatedcircularprogress.js";
-import { MarginRevealer } from './advancedrevealers.js';
function guessMessageType(summary) {
if (summary.includes('recording')) return 'screen_record';
diff --git a/.config/ags/scss/_common.scss b/.config/ags/scss/_common.scss
index 8332cb62e..f5fbf4fd3 100644
--- a/.config/ags/scss/_common.scss
+++ b/.config/ags/scss/_common.scss
@@ -68,7 +68,7 @@ menu>menuitem:focus {
}
.separator-line {
- background-color: $surfaceVariant;
+ background-color: $outline;
min-width: 0.068rem;
min-height: 0.068rem;
}
diff --git a/.config/ags/scss/_lib_classes.scss b/.config/ags/scss/_lib_classes.scss
index 9340a362b..32eb311b6 100644
--- a/.config/ags/scss/_lib_classes.scss
+++ b/.config/ags/scss/_lib_classes.scss
@@ -490,19 +490,24 @@
.menu-decel {
@include menu_decel;
}
-
.element-show {
@include element_easeInOut;
}
-
.element-hide {
@include element_easeInOut;
}
-
+.element-move {
+ @include element_easeInOut;
+}
.element-decel {
@include element_decel;
}
-
+.element-bounceout {
+ @include element_bounceOut;
+}
.element-accel {
@include element_accel;
}
+.page-move {
+ @include page_move;
+}
diff --git a/.config/ags/scss/_lib_mixins.scss b/.config/ags/scss/_lib_mixins.scss
index b43dc52e1..9dbc3ffbe 100644
--- a/.config/ags/scss/_lib_mixins.scss
+++ b/.config/ags/scss/_lib_mixins.scss
@@ -30,56 +30,38 @@ $rounding_large: 1.705rem;
@mixin titlefont {
// Geometric sans-serif
- font-family:
- 'Gabarito',
- 'Poppins',
- 'Lexend',
- sans-serif;
+ font-family: "Gabarito", "Poppins", "Lexend", sans-serif;
}
@mixin mainfont {
// Other clean sans-serif
- font-family:
- 'Rubik',
- 'Geist',
- 'AR One Sans',
- 'Reddit Sans',
- 'Inter',
- 'Roboto',
- 'Ubuntu',
- 'Noto Sans',
- sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter",
+ "Roboto", "Ubuntu", "Noto Sans", sans-serif;
// font-weight: 500;
}
@mixin icon-material {
// Material Design Icons
- font-family:
- 'Material Symbols Rounded',
- 'Material Symbols Outlined',
- 'Material Symbols Sharp';
+ font-family: "Material Symbols Rounded", "Material Symbols Outlined",
+ "Material Symbols Sharp";
}
@mixin icon-nerd {
// Nerd Fonts
- font-family:
- 'SpaceMono NF', 'SpaceMono Nerd Font',
- 'JetBrains Mono NF', 'JetBrains Mono Nerd Font',
- monospace;
+ font-family: "SpaceMono NF", "SpaceMono Nerd Font", "JetBrains Mono NF",
+ "JetBrains Mono Nerd Font", monospace;
}
@mixin techfont {
// Monospace for sys info n stuff. Doesn't have to be a nerd font, but it's cool.
- font-family: 'JetBrains Mono NF', 'JetBrains Mono Nerd Font', 'JetBrains Mono NL', 'SpaceMono NF', 'SpaceMono Nerd Font', monospace;
+ font-family: "JetBrains Mono NF", "JetBrains Mono Nerd Font",
+ "JetBrains Mono NL", "SpaceMono NF", "SpaceMono Nerd Font", monospace;
}
@mixin readingfont {
// The most readable fonts, for a comfortable reading experience
// in stuff like ChatGPT widget
- font-family:
- 'Lexend',
- 'Noto Sans',
- sans-serif;
+ font-family: "Lexend", "Noto Sans", sans-serif;
// font-weight: 500;
}
@@ -91,7 +73,6 @@ $rounding_large: 1.705rem;
color: $actiontext;
}
-
$elevation_margin: 0.476rem;
@mixin elevation-safe {
@@ -164,13 +145,17 @@ $elevation_margin: 0.476rem;
@mixin element_decel {
transition: 300ms cubic-bezier(0, 0.55, 0.45, 1);
}
-
+@mixin element_bounceOut {
+ transition: transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
+}
@mixin element_accel {
transition: 300ms cubic-bezier(0.55, 0, 1, 0.45);
}
-
@mixin element_easeInOut {
- transition: 300ms cubic-bezier(0.85, 0, 0.15, 1);
+ transition: 300ms cubic-bezier(0, 0.55, 0.45, 1);
+}
+@mixin page_move {
+ transition: 2000ms cubic-bezier(0, 0.55, 0.45, 1);
}
@function tint($color, $percentage) {
@@ -215,4 +200,4 @@ $overlay2: mix($onSurface, rgba(0, 0, 0, 0), 40%);
}
$white: white;
-$black: black;
\ No newline at end of file
+$black: black;
diff --git a/.config/ags/scss/_sidebars.scss b/.config/ags/scss/_sidebars.scss
index 4503e7d61..1bd92ffac 100644
--- a/.config/ags/scss/_sidebars.scss
+++ b/.config/ags/scss/_sidebars.scss
@@ -720,6 +720,21 @@ $onChatgpt: $onPrimary;
border: 0.068rem solid $sidebar_chat_textboxareaColor;
}
+.sidebar-chat-chip-toggle {
+ @include menu_decel;
+ @include small-rounding;
+ padding: 0.341rem 0.477rem;
+ background-color: $surfaceVariant;
+ color: $onSurfaceVariant;
+}
+.sidebar-chat-chip-toggle:focus,
+.sidebar-chat-chip-toggle:hover {
+ background-color: mix($surfaceVariant, $onSurfaceVariant, 83%);
+}
+.sidebar-chat-chip-toggle:active {
+ background-color: mix($surfaceVariant, $onSurfaceVariant, 67%);
+}
+
.sidebar-pin {
@include small-rounding;
@include menu_decel;
@@ -779,9 +794,14 @@ $onChatgpt: $onPrimary;
$waifu_image_overlay_transparency: 0.7;
.sidebar-waifu-image-action {
@include full-rounding;
- min-width: 1.875rem;
+ min-width: 1.875rem;
min-height: 1.875rem;
- background-color: rgba(0, 0, 0, $waifu_image_overlay_transparency); // Fixed cuz on image
+ background-color: rgba(
+ 0,
+ 0,
+ 0,
+ $waifu_image_overlay_transparency
+ ); // Fixed cuz on image
color: rgba(255, 255, 255, $waifu_image_overlay_transparency);
}
.sidebar-waifu-image-action:hover,
diff --git a/.config/ags/services/waifus.js b/.config/ags/services/waifus.js
index dc15e3ff4..51d037024 100644
--- a/.config/ags/services/waifus.js
+++ b/.config/ags/services/waifus.js
@@ -5,10 +5,10 @@ import Service from 'resource:///com/github/Aylur/ags/service.js';
// Usage from my python waifu fetcher, for reference
// Usage: waifu-get.py [OPTION]... [TAG]...
// Options:
-// --segs\tForce NSFW images
// --im\tUse waifu.im API. You can use many tags
// --pics\tUse waifu.pics API. Use 1 tag only.
// --nekos\tUse nekos.life (old) API. No tags.
+// --segs\tForce NSFW images
// Tags:
// waifu.im (type):
@@ -82,11 +82,25 @@ class WaifuService extends Service {
get responses() { return this._responses }
fetch(msg) {
+ // Init
const newMessageId = this._responses.length;
- const taglist = msg.split(' ');
+ const userArgs = msg.split(' ');
+ let taglist = [];
+ this._nsfw = false;
+ // Construct body/headers
+ for (let i = 0; i < userArgs.length; i++) {
+ const thisArg = userArgs[i];
+ if (thisArg == '--im') this._mode = 'im';
+ else if (thisArg == '--nekos') this._mode = 'nekos';
+ else if (thisArg.includes('pics')) this._mode = 'pics';
+ else if (thisArg.includes('segs') || thisArg.includes('sex') || thisArg.includes('lewd')) this._nsfw = true;
+ else {
+ taglist.push(thisArg);
+ if(['ecchi', 'hentai', 'ero', 'ass', 'paizuri', 'oral', 'milf'].includes(thisArg)) this._nsfw = true;
+ }
+ }
this._queries.push(taglist);
this.emit('newResponse', newMessageId);
- // Construct body/headers
const params = {
'included_tags': taglist,
'height': `>=${this._minHeight}`,
@@ -94,12 +108,13 @@ class WaifuService extends Service {
};
const paramString = paramStringFromObj(params);
// Fetch
- const options = {
+ // Note: body isn't included since passing directly to url is more reliable
+ const options = {
method: 'GET',
headers: this._headers[this._mode],
};
var status = 0;
- Utils.fetch(`${this._baseUrl}?${paramString}`, options)
+ Utils.fetch(`${this._endpoints[this._mode]}?${paramString}`, options)
.then(result => {
status = result.status;
return result.text();
diff --git a/.config/ags/style.css b/.config/ags/style.css
index 7a00589c1..83868efee 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -24,18 +24,18 @@
min-width: 3rem; }
.txt-title {
- font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
+ font-family: "Gabarito", "Poppins", "Lexend", sans-serif;
font-size: 2.045rem; }
.txt-title-small {
- font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
+ font-family: "Gabarito", "Poppins", "Lexend", sans-serif;
font-size: 1.364rem; }
.techfont {
- font-family: 'JetBrains Mono NF', 'JetBrains Mono Nerd Font', 'JetBrains Mono NL', 'SpaceMono NF', 'SpaceMono Nerd Font', monospace; }
+ font-family: "JetBrains Mono NF", "JetBrains Mono Nerd Font", "JetBrains Mono NL", "SpaceMono NF", "SpaceMono Nerd Font", monospace; }
.txt-reading {
- font-family: 'Lexend', 'Noto Sans', sans-serif; }
+ font-family: "Lexend", "Noto Sans", sans-serif; }
.no-anim {
transition: 0ms; }
@@ -57,47 +57,47 @@
margin: 10px; }
.txt-badonkers {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
font-size: 3rem; }
.txt-tiddies {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
font-size: 2.7273rem; }
.txt-hugerass {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
font-size: 2.045rem; }
.txt-hugeass {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
font-size: 1.8182rem; }
.txt-larger {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
font-size: 1.6363rem; }
.txt-large {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
font-size: 1.4545rem; }
.txt-norm {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
font-size: 1.2727rem; }
.txt-small {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
font-size: 1.0909rem; }
.txt-smallie {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
font-size: 1rem; }
.txt-smaller {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
font-size: 0.9091rem; }
.txt-tiny {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
font-size: 0.7273rem; }
.txt-poof {
@@ -119,16 +119,16 @@
font-style: italic; }
.titlefont {
- font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif; }
+ font-family: "Gabarito", "Poppins", "Lexend", sans-serif; }
.mainfont {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif; }
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif; }
.icon-material {
- font-family: 'Material Symbols Rounded', 'Material Symbols Outlined', 'Material Symbols Sharp'; }
+ font-family: "Material Symbols Rounded", "Material Symbols Outlined", "Material Symbols Sharp"; }
.icon-nerd {
- font-family: 'SpaceMono NF', 'SpaceMono Nerd Font', 'JetBrains Mono NF', 'JetBrains Mono Nerd Font', monospace; }
+ font-family: "SpaceMono NF", "SpaceMono Nerd Font", "JetBrains Mono NF", "JetBrains Mono Nerd Font", monospace; }
.separator-circle {
border-radius: 9999px;
@@ -370,17 +370,26 @@
transition: 300ms cubic-bezier(0.1, 1, 0, 1); }
.element-show {
- transition: 300ms cubic-bezier(0.85, 0, 0.15, 1); }
+ transition: 300ms cubic-bezier(0, 0.55, 0.45, 1); }
.element-hide {
- transition: 300ms cubic-bezier(0.85, 0, 0.15, 1); }
+ transition: 300ms cubic-bezier(0, 0.55, 0.45, 1); }
+
+.element-move {
+ transition: 300ms cubic-bezier(0, 0.55, 0.45, 1); }
.element-decel {
transition: 300ms cubic-bezier(0, 0.55, 0.45, 1); }
+.element-bounceout {
+ transition: transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1); }
+
.element-accel {
transition: 300ms cubic-bezier(0.55, 0, 1, 0.45); }
+.page-move {
+ transition: 2000ms cubic-bezier(0, 0.55, 0.45, 1); }
+
* {
caret-color: #ffc4f5; }
* selection {
@@ -432,7 +441,7 @@ menu > menuitem:focus {
background-color: #4a4147; }
.separator-line {
- background-color: #3b3338;
+ background-color: #9a8d95;
min-width: 0.068rem;
min-height: 0.068rem; }
@@ -634,11 +643,11 @@ tooltip {
margin: 0rem 0.682rem; }
.bar-clock {
- font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
+ font-family: "Gabarito", "Poppins", "Lexend", sans-serif;
font-size: 1.2727rem; }
.bar-date {
- font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
+ font-family: "Gabarito", "Poppins", "Lexend", sans-serif;
font-size: 1rem;
color: #eae0e4; }
@@ -710,7 +719,7 @@ tooltip {
.bar-music-playstate-txt {
transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
- font-family: 'Material Symbols Rounded', 'Material Symbols Outlined', 'Material Symbols Sharp'; }
+ font-family: "Material Symbols Rounded", "Material Symbols Outlined", "Material Symbols Sharp"; }
.bar-music-cover {
background-position: center;
@@ -887,7 +896,7 @@ tooltip {
padding: 1.364rem; }
.cheatsheet-key {
- font-family: 'JetBrains Mono NF', 'JetBrains Mono Nerd Font', 'JetBrains Mono NL', 'SpaceMono NF', 'SpaceMono Nerd Font', monospace;
+ font-family: "JetBrains Mono NF", "JetBrains Mono Nerd Font", "JetBrains Mono NL", "SpaceMono NF", "SpaceMono Nerd Font", monospace;
min-height: 1.364rem;
min-width: 1.364rem;
margin: 0.17rem;
@@ -920,7 +929,7 @@ tooltip {
background-color: #685e64; }
.cheatsheet-category-title {
- font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
+ font-family: "Gabarito", "Poppins", "Lexend", sans-serif;
font-size: 1.705rem; }
.bg-time-box {
@@ -961,11 +970,11 @@ tooltip {
border: 0.682rem solid; }
.bg-quicklaunch-title {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
color: #d1c2cb; }
.bg-quicklaunch-btn {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
border-radius: 9999px;
-gtk-outline-radius: 9999px;
background-color: #3b3338;
@@ -1067,7 +1076,7 @@ tooltip {
margin-top: 0.341rem; }
.osd-value-txt {
- font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
+ font-family: "Gabarito", "Poppins", "Lexend", sans-serif;
font-size: 1.688rem;
font-weight: 500;
color: #eae0e4; }
@@ -1209,7 +1218,7 @@ tooltip {
.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-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 {
@@ -1247,7 +1256,7 @@ tooltip {
background-color: rgba(54, 47, 51, 0.1147); }
.overview-tasks-workspace-number {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
color: rgba(220, 210, 214, 0.31); }
.overview-tasks-window {
@@ -1781,7 +1790,7 @@ tooltip {
.sidebar-module-btn-arrow {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- font-family: 'Material Symbols Rounded', 'Material Symbols Outlined', 'Material Symbols Sharp';
+ font-family: "Material Symbols Rounded", "Material Symbols Outlined", "Material Symbols Sharp";
background-color: rgba(59, 51, 56, 0.31);
min-width: 1.705rem;
min-height: 1.705rem; }
@@ -1864,7 +1873,7 @@ tooltip {
background-color: #dbbed2; }
.sidebar-chat-name {
- font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
+ font-family: "Gabarito", "Poppins", "Lexend", sans-serif;
padding: 0.341rem;
margin-left: -0.136rem;
padding-left: 0.818rem; }
@@ -1875,7 +1884,7 @@ tooltip {
padding-left: 0.818rem; }
.sidebar-chat-txt {
- font-family: 'Lexend', 'Noto Sans', sans-serif; }
+ font-family: "Lexend", "Noto Sans", sans-serif; }
.sidebar-chat-codeblock {
border-radius: 1.159rem;
@@ -1886,7 +1895,7 @@ tooltip {
border: 0.068rem solid rgba(248, 218, 238, 0.07); }
.sidebar-chat-codeblock-topbar {
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
margin: 0.273rem;
margin-bottom: 0rem;
background-color: #554050;
@@ -1915,7 +1924,7 @@ tooltip {
background-color: #967e8f; }
.sidebar-chat-codeblock-code {
- font-family: 'JetBrains Mono NF', 'JetBrains Mono Nerd Font', 'JetBrains Mono NL', 'SpaceMono NF', 'SpaceMono Nerd Font', monospace;
+ font-family: "JetBrains Mono NF", "JetBrains Mono Nerd Font", "JetBrains Mono NL", "SpaceMono NF", "SpaceMono Nerd Font", monospace;
padding: 0.682rem; }
.sidebar-chat-divider {
@@ -1965,6 +1974,21 @@ tooltip {
color: #776c73;
border: 0.068rem solid #776c73; }
+.sidebar-chat-chip-toggle {
+ transition: 300ms cubic-bezier(0.1, 1, 0, 1);
+ border-radius: 0.818rem;
+ -gtk-outline-radius: 0.818rem;
+ padding: 0.341rem 0.477rem;
+ background-color: #3b3338;
+ color: #d1c2cb; }
+
+.sidebar-chat-chip-toggle:focus,
+.sidebar-chat-chip-toggle:hover {
+ background-color: #554b51; }
+
+.sidebar-chat-chip-toggle:active {
+ background-color: #6d6269; }
+
.sidebar-pin {
border-radius: 0.818rem;
-gtk-outline-radius: 0.818rem;
@@ -1993,7 +2017,7 @@ tooltip {
background-color: #dda0d4; }
.sidebar-waifu-heading {
- font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
+ font-family: "Gabarito", "Poppins", "Lexend", sans-serif;
padding: 0.341rem;
margin-left: -0.136rem;
padding-left: 0.818rem; }
@@ -2002,7 +2026,7 @@ tooltip {
margin-left: 0.682rem; }
.sidebar-waifu-txt {
- font-family: 'Lexend', 'Noto Sans', sans-serif;
+ font-family: "Lexend", "Noto Sans", sans-serif;
margin-left: 0.682rem; }
.sidebar-waifu-image {
@@ -2247,9 +2271,9 @@ tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
min-width: 29.659rem;
- background-color: #dae8ed;
+ background-color: #100d10;
padding: 0rem 1.023rem;
- background: linear-gradient(127deg, rgba(131, 159, 170, 0.7), rgba(131, 159, 170, 0.55) 70.71%), linear-gradient(217deg, rgba(102, 105, 105, 0.7), rgba(102, 105, 105, 0.55) 70.71%), radial-gradient(circle at 0% 100%, #86776E 13%, rgba(0, 0, 0, 0) 100%), linear-gradient(336deg, rgba(144, 134, 123, 0.7), rgba(144, 134, 123, 0.55) 70.71%), linear-gradient(#dae8ed, #dae8ed); }
+ background: linear-gradient(127deg, rgba(47, 41, 46, 0.7), rgba(47, 41, 46, 0.55) 70.71%), linear-gradient(217deg, rgba(78, 68, 75, 0.7), rgba(78, 68, 75, 0.55) 70.71%), radial-gradient(circle at 0% 100%, #554050 13%, rgba(0, 0, 0, 0) 100%), linear-gradient(336deg, rgba(85, 64, 80, 0.7), rgba(85, 64, 80, 0.55) 70.71%), linear-gradient(#100d10, #100d10); }
.osd-music-cover-fallback {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2257,8 +2281,8 @@ tooltip {
-gtk-outline-radius: 0.818rem;
min-width: 7.5rem;
min-height: 7.5rem;
- background-color: rgba(233, 241, 247, 0.3);
- color: #0a0b0f; }
+ background-color: rgba(33, 27, 31, 0.31);
+ color: #dad0d5; }
.osd-music-cover {
border-radius: 0.818rem;
@@ -2282,35 +2306,35 @@ tooltip {
.osd-music-title {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
+ font-family: "Gabarito", "Poppins", "Lexend", sans-serif;
font-size: 1.364rem;
- color: #0a0b0f; }
+ color: #dad0d5; }
.osd-music-artists {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
- font-family: 'Rubik', 'Geist', 'AR One Sans', 'Reddit Sans', 'Inter', 'Roboto', 'Ubuntu', 'Noto Sans', sans-serif;
+ font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
font-size: 0.955rem;
- color: rgba(20, 22, 26, 0.9); }
+ color: rgba(205, 196, 201, 0.9); }
.osd-music-pill {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
+ font-family: "Gabarito", "Poppins", "Lexend", sans-serif;
min-width: 1.833rem;
padding: 0.273rem 0.682rem;
- background-color: rgba(139, 149, 154, 0.5);
- color: #0a0b0f; }
+ background-color: rgba(55, 46, 53, 0.5);
+ color: #dad0d5; }
.osd-music-controls {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- font-family: 'Gabarito', 'Poppins', 'Lexend', sans-serif;
+ font-family: "Gabarito", "Poppins", "Lexend", sans-serif;
min-width: 1.833rem;
padding: 0.205rem;
- background-color: rgba(139, 149, 154, 0.5);
- color: #0a0b0f; }
+ background-color: rgba(55, 46, 53, 0.5);
+ color: #dad0d5; }
.osd-music-controlbtn {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -2321,15 +2345,15 @@ tooltip {
.osd-music-controlbtn:hover,
.osd-music-controlbtn:focus {
- background-color: rgba(107, 115, 119, 0.55); }
+ background-color: rgba(96, 87, 93, 0.55); }
.osd-music-controlbtn:active {
- background-color: rgba(94, 101, 106, 0.575); }
+ background-color: rgba(111, 102, 108, 0.575); }
.osd-music-controlbtn-txt {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
- font-family: 'Material Symbols Rounded', 'Material Symbols Outlined', 'Material Symbols Sharp';
+ font-family: "Material Symbols Rounded", "Material Symbols Outlined", "Material Symbols Sharp";
font-size: 1.364rem;
margin: -0.1rem 0rem; }
@@ -2338,19 +2362,19 @@ tooltip {
min-width: 0.409rem;
min-height: 3.068rem;
padding: 0.273rem;
- color: #0a0b0f; }
+ color: #dad0d5; }
.osd-music-playstate {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
min-height: 3.068rem;
min-width: 3.068rem;
border-radius: 10rem;
- background-color: rgba(139, 149, 154, 0.5);
- color: #0a0b0f; }
+ background-color: rgba(55, 46, 53, 0.5);
+ color: #dad0d5; }
.osd-music-playstate-btn > label {
transition: 50ms cubic-bezier(0.05, 0.7, 0.1, 1);
- font-family: 'Material Symbols Rounded', 'Material Symbols Outlined', 'Material Symbols Sharp';
+ font-family: "Material Symbols Rounded", "Material Symbols Outlined", "Material Symbols Sharp";
font-size: 1.364rem;
margin: -0.1rem 0rem; }
diff --git a/.config/ags/widgets/bar/music.js b/.config/ags/widgets/bar/music.js
index 0c2c496a6..2892164dd 100644
--- a/.config/ags/widgets/bar/music.js
+++ b/.config/ags/widgets/bar/music.js
@@ -5,6 +5,13 @@ const { execAsync, exec } = Utils;
import { AnimatedCircProg } from "../../lib/animatedcircularprogress.js";
import { showMusicControls } from '../../variables.js';
+function trimTrackTitle(title) {
+ // Removes stuff likeใC93ใ at beginning
+ var pattern = /ใ[^ใ]*ใ/;
+ var cleanedTitle = title.replace(pattern, '');
+ return cleanedTitle.trim();
+}
+
const TrackProgress = () => {
const _updateProgress = (circprog) => {
const mpris = Mpris.getPlayer('');
@@ -69,7 +76,7 @@ export const ModuleMusic = () => Widget.EventBox({
connections: [[Mpris, label => {
const mpris = Mpris.getPlayer('');
if (mpris)
- label.label = `${mpris.trackTitle} โข ${mpris.trackArtists.join(', ')}`;
+ label.label = `${trimTrackTitle(mpris.trackTitle)} โข ${mpris.trackArtists.join(', ')}`;
else
label.label = 'No media';
}]],
diff --git a/.config/ags/widgets/indicators/indicatorvalues.js b/.config/ags/widgets/indicators/indicatorvalues.js
index 236f65c12..76125c9b3 100644
--- a/.config/ags/widgets/indicators/indicatorvalues.js
+++ b/.config/ags/widgets/indicators/indicatorvalues.js
@@ -3,7 +3,7 @@ const { GLib, Gtk } = imports.gi;
import { App, Service, Utils, Widget } from '../../imports.js';
import Audio from 'resource:///com/github/Aylur/ags/service/audio.js';
const { Box, Label, ProgressBar, Revealer } = Widget;
-import { MarginRevealer } from '../../lib/advancedrevealers.js';
+import { MarginRevealer } from '../../lib/advancedwidgets.js';
import Brightness from '../../services/brightness.js';
import Indicator from '../../services/indicator.js';
@@ -63,8 +63,8 @@ export default () => MarginRevealer({
hideClass: 'osd-hide',
connections: [
[Indicator, (revealer, value) => {
- if(value > -1) revealer._show(revealer);
- else revealer._hide(revealer);
+ if(value > -1) revealer._show();
+ else revealer._hide();
}, 'popup'],
],
child: Box({
diff --git a/.config/ags/widgets/indicators/musiccontrols.js b/.config/ags/widgets/indicators/musiccontrols.js
index ce590691e..1c7a65e33 100644
--- a/.config/ags/widgets/indicators/musiccontrols.js
+++ b/.config/ags/widgets/indicators/musiccontrols.js
@@ -4,7 +4,7 @@ const { exec, execAsync } = Utils;
import Mpris from 'resource:///com/github/Aylur/ags/service/mpris.js';
const { Box, EventBox, Icon, Scrollable, Label, Button, Revealer } = Widget;
-import { MarginRevealer } from '../../lib/advancedrevealers.js';
+import { MarginRevealer } from '../../lib/advancedwidgets.js';
import { AnimatedCircProg } from "../../lib/animatedcircularprogress.js";
import { MaterialIcon } from '../../lib/materialicon.js';
import { showMusicControls } from '../../variables.js';
@@ -74,6 +74,12 @@ function getTrackfont(player) {
if (title.includes('ๆฑๆน')) return 'Crimson Text, serif'; // Serif for Touhou stuff
return DEFAULT_MUSIC_FONT;
}
+function trimTrackTitle(title) {
+ // Removes stuff likeใC93ใ at beginning
+ var pattern = /ใ[^ใ]*ใ/;
+ var cleanedTitle = title.replace(pattern, '');
+ return cleanedTitle.trim();
+}
const TrackProgress = ({ player, ...rest }) => {
const _updateProgress = (circprog) => {
@@ -102,7 +108,7 @@ const TrackTitle = ({ player, ...rest }) => Label({
className: 'osd-music-title',
connections: [[player, (self) => {
// Player name
- self.label = player.trackTitle.length > 0 ? player.trackTitle : 'No media';
+ self.label = player.trackTitle.length > 0 ? trimTrackTitle(player.trackTitle) : 'No media';
// Font based on track/artist
const fontForThisTrack = getTrackfont(player);
self.css = `font-family: ${fontForThisTrack}, ${DEFAULT_MUSIC_FONT};`;
@@ -374,8 +380,8 @@ export default () => MarginRevealer({
}),
connections: [
[showMusicControls, (revealer) => {
- if(showMusicControls.value) revealer._show(revealer);
- else revealer._hide(revealer);
+ if(showMusicControls.value) revealer._show();
+ else revealer._hide();
}],
],
})
diff --git a/.config/ags/widgets/overview/overview.js b/.config/ags/widgets/overview/overview.js
index f4deac393..d1dc5af44 100644
--- a/.config/ags/widgets/overview/overview.js
+++ b/.config/ags/widgets/overview/overview.js
@@ -4,7 +4,7 @@ import Applications from 'resource:///com/github/Aylur/ags/service/applications.
import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';
const { execAsync, exec } = Utils;
import { setupCursorHover, setupCursorHoverGrab } from "../../lib/cursorhover.js";
-import { DoubleRevealer } from "../../lib/advancedrevealers.js";
+import { DoubleRevealer } from "../../lib/advancedwidgets.js";
import { execAndClose, expandTilde, hasUnterminatedBackslash, startsWithNumber, launchCustomCommand, ls } from './miscfunctions.js';
import {
CalculationResultButton, CustomCommandButton, DirectoryButton,
diff --git a/.config/ags/widgets/sideleft/apis/chatgpt.js b/.config/ags/widgets/sideleft/apis/chatgpt.js
index 62679add4..d0d650c08 100644
--- a/.config/ags/widgets/sideleft/apis/chatgpt.js
+++ b/.config/ags/widgets/sideleft/apis/chatgpt.js
@@ -8,7 +8,7 @@ import { setupCursorHover, setupCursorHoverInfo } from "../../../lib/cursorhover
import { SystemMessage, ChatMessage } from "./chatgpt_chatmessage.js";
import { ConfigToggle, ConfigSegmentedSelection, ConfigGap } from '../../../lib/configwidgets.js';
import { markdownTest } from '../../../lib/md2pango.js';
-import { MarginRevealer } from '../../../lib/advancedrevealers.js';
+import { MarginRevealer } from '../../../lib/advancedwidgets.js';
export const chatGPTTabIcon = Box({
hpack: 'center',
@@ -66,10 +66,10 @@ export const chatGPTSettings = MarginRevealer({
revealChild: true,
connections: [
[ChatGPT, (self) => Utils.timeout(200, () => {
- self._hide(self);
+ self._hide();
}), 'newMsg'],
[ChatGPT, (self) => Utils.timeout(200, () => {
- self._show(self);
+ self._show();
}), 'clear'],
],
child: Box({
diff --git a/.config/ags/widgets/sideleft/apis/waifu.js b/.config/ags/widgets/sideleft/apis/waifu.js
index 7d48a98be..a820d3548 100644
--- a/.config/ags/widgets/sideleft/apis/waifu.js
+++ b/.config/ags/widgets/sideleft/apis/waifu.js
@@ -3,10 +3,12 @@ import { App, Utils, Widget } from '../../../imports.js';
const { Box, Button, Entry, EventBox, Icon, Label, Revealer, Scrollable, Stack } = Widget;
const { execAsync, exec } = Utils;
import { MaterialIcon } from "../../../lib/materialicon.js";
-import { MarginRevealer } from '../../../lib/advancedrevealers.js';
+import { MarginRevealer } from '../../../lib/advancedwidgets.js';
import { setupCursorHover, setupCursorHoverInfo } from "../../../lib/cursorhover.js";
import WaifuService from '../../../services/waifus.js';
+const IMAGE_REVEAL_DELAY = 13; // Some wait for inits n other weird stuff
+
// Create cache folder and clear pics from previous session
Utils.exec(`bash -c 'mkdir -p ${GLib.get_user_cache_dir()}/ags/media/waifus'`);
Utils.exec(`bash -c 'rm ${GLib.get_user_cache_dir()}/ags/media/waifus/*'`);
@@ -125,7 +127,7 @@ const WaifuImage = (taglist) => {
const thisBlock = Box({
className: 'sidebar-chat-message',
properties: [
- ['update', (imageData) => {
+ ['update', (imageData, force = false) => {
blockImageData = imageData;
const { status, signature, url, source, dominant_color, is_nsfw, width, height, tags } = blockImageData;
if (status != 200) {
@@ -141,13 +143,15 @@ const WaifuImage = (taglist) => {
const showImage = () => {
downloadState.shown = 'done';
blockImage.css = `background-image:url('${imagePath}');`;
- blockImageRevealer.revealChild = true;
- Utils.timeout(blockImageRevealer.transitionDuration,
+ Utils.timeout(IMAGE_REVEAL_DELAY, () => {
+ blockImageRevealer.revealChild = true;
+ })
+ Utils.timeout(IMAGE_REVEAL_DELAY + blockImageRevealer.transitionDuration,
() => blockImage.get_children()[0].revealChild = true
);
- downloadIndicator._hide(downloadIndicator);
+ downloadIndicator._hide();
}
- if (Gio.File.new_for_path(imagePath).query_exists(null)) showImage();
+ if (!force && Gio.File.new_for_path(imagePath).query_exists(null)) showImage();
else Utils.execAsync(['bash', '-c', `wget -O '${imagePath}' '${url}'`])
.then(showImage)
.catch(print);
@@ -224,27 +228,50 @@ export const waifuView = Scrollable({
}
});
-// const waifuTags = Box({
-// className: 'spacing-h-5',
-// children: [
-// Box({ hexpand: true }),
-// CommandButton('waifu'),
-// CommandButton('maid'),
-// CommandButton('uniform'),
-// CommandButton('oppai'),
-// CommandButton('selfies'),
-// CommandButton('marin-kitagawa'),
-// CommandButton('raiden-shogun'),
-// CommandButton('mori-calliope'),
-// ]
-// });
+const waifuTags = Revealer({
+ revealChild: false,
+ transition: 'crossfade',
+ transitionDuration: 150,
+ child: Box({
+ className: 'spacing-h-5',
+ children: [
+ Scrollable({
+ vscroll: 'never',
+ hscroll: 'automatic',
+ hexpand: true,
+ child: Box({
+ className: 'spacing-h-5',
+ children: [
+ CommandButton('waifu'),
+ CommandButton('maid'),
+ CommandButton('uniform'),
+ CommandButton('oppai'),
+ CommandButton('selfies'),
+ CommandButton('marin-kitagawa'),
+ CommandButton('raiden-shogun'),
+ CommandButton('mori-calliope'),
+ ]
+ })
+ }),
+ Box({ className: 'separator-line' }),
+ ]
+ })
+});
export const waifuCommands = Box({
className: 'spacing-h-5',
- children: [
- Box({ hexpand: true }),
- CommandButton('/clear'),
- ]
+ setup: (self) => {
+ self.pack_end(CommandButton('/clear'), false, false, 0);
+ self.pack_start(Button({
+ className: 'sidebar-chat-chip-toggle',
+ setup: setupCursorHover,
+ label: 'Tags โ',
+ onClicked: () => {
+ waifuTags.revealChild = !waifuTags.revealChild;
+ }
+ }), false, false, 0);
+ self.pack_start(waifuTags, true, true, 0);
+ }
});
export const sendMessage = (text) => {
@@ -253,7 +280,7 @@ export const sendMessage = (text) => {
if (text.startsWith('/')) {
if (text.startsWith('/clear')) {
const kids = waifuContent.get_children();
- for (let i = 0; i < kids.length; i++) {
+ for (let i = kids.length - 1; i >= 0; i--) {
const child = kids[i];
child.destroy();
}
@@ -261,7 +288,7 @@ export const sendMessage = (text) => {
else if (text.startsWith('/test')) {
const newImage = WaifuImage(['/test']);
waifuContent.add(newImage);
- Utils.timeout(13, () => newImage._update({ // Needs timeout or inits won't make it
+ Utils.timeout(IMAGE_REVEAL_DELAY, () => newImage._update({ // Needs timeout or inits won't make it
// This is an image uploaded to my github repo
status: 200,
url: 'https://picsum.photos/400/600',
@@ -272,7 +299,7 @@ export const sendMessage = (text) => {
width: 300,
height: 200,
tags: ['/test'],
- }));
+ }, true));
}
}
else WaifuService.fetch(text);
From 49bda08cbc339510dd3c96caa09528f7b596a4e7 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Tue, 2 Jan 2024 15:55:19 +0700
Subject: [PATCH 042/265] ags: sync
---
.config/ags/lib/advancedwidgets.js | 7 ++--
.config/ags/scss/_common.scss | 6 ---
.config/ags/scss/_lib_classes.scss | 12 ++++--
.config/ags/scss/_lib_mixins.scss | 4 +-
.config/ags/scss/_sidebars.scss | 1 +
.config/ags/services/waifus.js | 6 ++-
.config/ags/style.css | 25 ++++++------
.config/ags/widgets/bar/leftspace.js | 2 +-
.config/ags/widgets/bar/rightspace.js | 21 +++++++++-
.config/ags/widgets/bar/tray.js | 2 +-
.config/ags/widgets/sideleft/apis/waifu.js | 45 +++++++++++++---------
11 files changed, 82 insertions(+), 49 deletions(-)
diff --git a/.config/ags/lib/advancedwidgets.js b/.config/ags/lib/advancedwidgets.js
index 74259e10a..aab474664 100644
--- a/.config/ags/lib/advancedwidgets.js
+++ b/.config/ags/lib/advancedwidgets.js
@@ -18,7 +18,8 @@ export const MarginRevealer = ({
['transition', transition],
['show', () => {
if (widget._revealChild) return;
- widget.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER);
+ widget.hscroll = 'never';
+ widget.vscroll = 'never';
child.toggleClassName(hideClass, false);
child.toggleClassName(showClass, true);
widget._revealChild = true;
@@ -46,8 +47,8 @@ export const MarginRevealer = ({
...extraProperties,
],
child: child,
- hscroll: (revealChild ? 'never' : 'always'),
- vscroll: (revealChild ? 'never' : 'always'),
+ hscroll: `${revealChild ? 'never' : 'always'}`,
+ vscroll: `${revealChild ? 'never' : 'always'}`,
});
child.toggleClassName(`${revealChild ? showClass : hideClass}`, true);
return widget;
diff --git a/.config/ags/scss/_common.scss b/.config/ags/scss/_common.scss
index f5fbf4fd3..7db4cd07c 100644
--- a/.config/ags/scss/_common.scss
+++ b/.config/ags/scss/_common.scss
@@ -67,12 +67,6 @@ menu>menuitem:focus {
background-color: mix($surfaceVariant, $onSurfaceVariant, 90%);
}
-.separator-line {
- background-color: $outline;
- min-width: 0.068rem;
- min-height: 0.068rem;
-}
-
tooltip {
@include normal-rounding;
background-color: $surfaceVariant;
diff --git a/.config/ags/scss/_lib_classes.scss b/.config/ags/scss/_lib_classes.scss
index 32eb311b6..e2ae27387 100644
--- a/.config/ags/scss/_lib_classes.scss
+++ b/.config/ags/scss/_lib_classes.scss
@@ -177,12 +177,18 @@
@include icon-nerd;
}
+.separator-line {
+ background-color: $outline;
+ min-width: 0.068rem;
+ min-height: 0.068rem;
+}
+
.separator-circle {
@include full-rounding;
- background-color: $onSurface;
+ background-color: $outline;
margin: 0rem 0.682rem;
- min-width: 0.545rem;
- min-height: 0.545rem;
+ min-width: 0.273rem;
+ min-height: 0.273rem;
}
.spacing-h-3 > * {
diff --git a/.config/ags/scss/_lib_mixins.scss b/.config/ags/scss/_lib_mixins.scss
index 9dbc3ffbe..54009bbd1 100644
--- a/.config/ags/scss/_lib_mixins.scss
+++ b/.config/ags/scss/_lib_mixins.scss
@@ -152,10 +152,10 @@ $elevation_margin: 0.476rem;
transition: 300ms cubic-bezier(0.55, 0, 1, 0.45);
}
@mixin element_easeInOut {
- transition: 300ms cubic-bezier(0, 0.55, 0.45, 1);
+ transition: 300ms cubic-bezier(0.85, 0, 0.15, 1);
}
@mixin page_move {
- transition: 2000ms cubic-bezier(0, 0.55, 0.45, 1);
+ transition: 500ms cubic-bezier(0.85, 0, 0.15, 1);
}
@function tint($color, $percentage) {
diff --git a/.config/ags/scss/_sidebars.scss b/.config/ags/scss/_sidebars.scss
index 1bd92ffac..27e9dcab7 100644
--- a/.config/ags/scss/_sidebars.scss
+++ b/.config/ags/scss/_sidebars.scss
@@ -582,6 +582,7 @@ $onChatgpt: $onPrimary;
}
.sidebar-chat-indicator {
+ @include menu_decel;
@include full-rounding;
min-width: 0.136rem;
background-color: $onBackground;
diff --git a/.config/ags/services/waifus.js b/.config/ags/services/waifus.js
index 51d037024..b5bfdfb30 100644
--- a/.config/ags/services/waifus.js
+++ b/.config/ags/services/waifus.js
@@ -81,9 +81,8 @@ class WaifuService extends Service {
get queries() { return this._queries }
get responses() { return this._responses }
- fetch(msg) {
+ async fetch(msg) {
// Init
- const newMessageId = this._responses.length;
const userArgs = msg.split(' ');
let taglist = [];
this._nsfw = false;
@@ -99,6 +98,7 @@ class WaifuService extends Service {
if(['ecchi', 'hentai', 'ero', 'ass', 'paizuri', 'oral', 'milf'].includes(thisArg)) this._nsfw = true;
}
}
+ const newMessageId = this._queries.length;
this._queries.push(taglist);
this.emit('newResponse', newMessageId);
const params = {
@@ -125,6 +125,7 @@ class WaifuService extends Service {
status: status,
signature: -1,
url: '',
+ extension: '',
source: '',
dominant_color: '#383A40',
is_nsfw: false,
@@ -138,6 +139,7 @@ class WaifuService extends Service {
status: status,
signature: imageData?.signature || -1,
url: imageData?.url || undefined,
+ extension: imageData.extension,
source: imageData?.source,
dominant_color: imageData?.dominant_color || '#9392A6',
is_nsfw: imageData?.is_nsfw || false,
diff --git a/.config/ags/style.css b/.config/ags/style.css
index 83868efee..2ea9d15bf 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -130,13 +130,18 @@
.icon-nerd {
font-family: "SpaceMono NF", "SpaceMono Nerd Font", "JetBrains Mono NF", "JetBrains Mono Nerd Font", monospace; }
+.separator-line {
+ background-color: #9a8d95;
+ min-width: 0.068rem;
+ min-height: 0.068rem; }
+
.separator-circle {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- background-color: #eae0e4;
+ background-color: #9a8d95;
margin: 0rem 0.682rem;
- min-width: 0.545rem;
- min-height: 0.545rem; }
+ min-width: 0.273rem;
+ min-height: 0.273rem; }
.spacing-h-3 > * {
margin-right: 0.205rem; }
@@ -370,13 +375,13 @@
transition: 300ms cubic-bezier(0.1, 1, 0, 1); }
.element-show {
- transition: 300ms cubic-bezier(0, 0.55, 0.45, 1); }
+ transition: 300ms cubic-bezier(0.85, 0, 0.15, 1); }
.element-hide {
- transition: 300ms cubic-bezier(0, 0.55, 0.45, 1); }
+ transition: 300ms cubic-bezier(0.85, 0, 0.15, 1); }
.element-move {
- transition: 300ms cubic-bezier(0, 0.55, 0.45, 1); }
+ transition: 300ms cubic-bezier(0.85, 0, 0.15, 1); }
.element-decel {
transition: 300ms cubic-bezier(0, 0.55, 0.45, 1); }
@@ -388,7 +393,7 @@
transition: 300ms cubic-bezier(0.55, 0, 1, 0.45); }
.page-move {
- transition: 2000ms cubic-bezier(0, 0.55, 0.45, 1); }
+ transition: 500ms cubic-bezier(0.85, 0, 0.15, 1); }
* {
caret-color: #ffc4f5; }
@@ -440,11 +445,6 @@ menu > menuitem:hover,
menu > menuitem:focus {
background-color: #4a4147; }
-.separator-line {
- background-color: #9a8d95;
- min-width: 0.068rem;
- min-height: 0.068rem; }
-
tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
@@ -1858,6 +1858,7 @@ tooltip {
margin: 0.682rem; }
.sidebar-chat-indicator {
+ transition: 300ms cubic-bezier(0.1, 1, 0, 1);
border-radius: 9999px;
-gtk-outline-radius: 9999px;
min-width: 0.136rem;
diff --git a/.config/ags/widgets/bar/leftspace.js b/.config/ags/widgets/bar/leftspace.js
index 16df27325..588dc8733 100644
--- a/.config/ags/widgets/bar/leftspace.js
+++ b/.config/ags/widgets/bar/leftspace.js
@@ -82,7 +82,7 @@ export const ModuleLeftSpace = () => Widget.EventBox({
xalign: 0,
className: 'txt txt-smallie',
setup: (self) => self.hook(Hyprland.active.client, label => { // Hyprland.active.client
- label.label = Hyprland.active.client._title.length === 0 ? `Workspace ${Hyprland.active.workspace.id}` : truncateTitle(Hyprland.active.client._title);
+ label.label = Hyprland.active.client._title.length === 0 ? `Workspace ${Hyprland.active.workspace.id}` : Hyprland.active.client._title;
}),
})
]
diff --git a/.config/ags/widgets/bar/rightspace.js b/.config/ags/widgets/bar/rightspace.js
index 9a7687ff4..28ec69737 100644
--- a/.config/ags/widgets/bar/rightspace.js
+++ b/.config/ags/widgets/bar/rightspace.js
@@ -1,6 +1,7 @@
import { App, Utils, Widget } from '../../imports.js';
import Audio from 'resource:///com/github/Aylur/ags/service/audio.js';
import Mpris from 'resource:///com/github/Aylur/ags/service/mpris.js';
+import SystemTray from 'resource:///com/github/Aylur/ags/service/systemtray.js';
const { execAsync } = Utils;
import Indicator from '../../services/indicator.js';
import { StatusIcons } from "../../lib/statusicons.js";
@@ -43,10 +44,28 @@ export const ModuleRightSpace = () => {
children: [
Widget.Box({
hexpand: true,
- className: 'spacing-h-15 txt',
+ className: 'spacing-h-5 txt',
children: [
Widget.Box({ hexpand: true, }),
barTray,
+ Widget.Revealer({
+ transition: 'slide_left',
+ revealChild: false,
+ properties: [
+ ['count', 0],
+ ['update', (self, diff) => {
+ self._count += diff;
+ self.revealChild = (self._count > 0);
+ }]],
+ child: Widget.Box({
+ vpack: 'center',
+ className: 'separator-circle',
+ }),
+ setup: (self) => self
+ .hook(SystemTray, (self) => self._update(self, 1), 'added')
+ .hook(SystemTray, (self) => self._update(self, -1), 'removed')
+ ,
+ }),
barStatusIcons,
],
}),
diff --git a/.config/ags/widgets/bar/tray.js b/.config/ags/widgets/bar/tray.js
index 34720765a..1d1c2e4b9 100644
--- a/.config/ags/widgets/bar/tray.js
+++ b/.config/ags/widgets/bar/tray.js
@@ -25,7 +25,7 @@ const SysTrayItem = item => Button({
export const Tray = (props = {}) => {
const trayContent = Box({
- className: 'bar-systray spacing-h-10',
+ className: 'margin-right-5 spacing-h-15',
properties: [
['items', new Map()],
['onAdded', (box, id) => {
diff --git a/.config/ags/widgets/sideleft/apis/waifu.js b/.config/ags/widgets/sideleft/apis/waifu.js
index a820d3548..decd52a9d 100644
--- a/.config/ags/widgets/sideleft/apis/waifu.js
+++ b/.config/ags/widgets/sideleft/apis/waifu.js
@@ -13,6 +13,11 @@ const IMAGE_REVEAL_DELAY = 13; // Some wait for inits n other weird stuff
Utils.exec(`bash -c 'mkdir -p ${GLib.get_user_cache_dir()}/ags/media/waifus'`);
Utils.exec(`bash -c 'rm ${GLib.get_user_cache_dir()}/ags/media/waifus/*'`);
+export function fileExists(filePath) {
+ let file = Gio.File.new_for_path(filePath);
+ return file.query_exists(null);
+}
+
const CommandButton = (command) => Button({
className: 'sidebar-chat-chip sidebar-chat-chip-action txt txt-small',
onClicked: () => sendMessage(command),
@@ -30,8 +35,6 @@ export const waifuTabIcon = Box({
});
const WaifuImage = (taglist) => {
- var imagePath = '';
- var blockImageData = {};
const ImageState = (icon, name) => Box({
className: 'spacing-h-5',
children: [
@@ -87,17 +90,17 @@ const WaifuImage = (taglist) => {
ImageAction({
name: 'Go to source',
icon: 'link',
- action: () => execAsync(['xdg-open', `${blockImageData.source}`]).catch(print),
+ action: () => execAsync(['xdg-open', `${thisBlock._imageData.source}`]).catch(print),
}),
ImageAction({
name: 'Hoard',
icon: 'save',
- action: () => execAsync(['bash', '-c', `mkdir -p ~/Pictures/waifus && cp ${imagePath} ~/Pictures/waifus`]).catch(print),
+ action: () => execAsync(['bash', '-c', `mkdir -p ~/Pictures/waifus && cp ${thisBlock._imagePath} ~/Pictures/waifus`]).catch(print),
}),
ImageAction({
name: 'Open externally',
icon: 'open_in_new',
- action: () => execAsync(['xdg-open', `${imagePath}`]).catch(print),
+ action: () => execAsync(['xdg-open', `${thisBlock._imagePath}`]).catch(print),
}),
]
})
@@ -127,14 +130,16 @@ const WaifuImage = (taglist) => {
const thisBlock = Box({
className: 'sidebar-chat-message',
properties: [
+ ['imagePath', ''],
+ ['imageData', ''],
['update', (imageData, force = false) => {
- blockImageData = imageData;
- const { status, signature, url, source, dominant_color, is_nsfw, width, height, tags } = blockImageData;
+ thisBlock._imageData = imageData;
+ const { status, signature, url, extension, source, dominant_color, is_nsfw, width, height, tags } = thisBlock._imageData;
if (status != 200) {
downloadState.shown = 'error';
return;
}
- imagePath = `${GLib.get_user_cache_dir()}/ags/media/waifus/${signature}`;
+ thisBlock._imagePath = `${GLib.get_user_cache_dir()}/ags/media/waifus/${signature}${extension}`;
downloadState.shown = 'download';
// Width allocation
const widgetWidth = Math.min(Math.floor(waifuContent.get_allocated_width() * 0.75), width);
@@ -142,7 +147,8 @@ const WaifuImage = (taglist) => {
// Start download
const showImage = () => {
downloadState.shown = 'done';
- blockImage.css = `background-image:url('${imagePath}');`;
+ // blockImage.css = `background-color: ${dominant_color};`;
+ blockImage.css = `background-image:url('${thisBlock._imagePath}');`; // TODO: use proper image widget
Utils.timeout(IMAGE_REVEAL_DELAY, () => {
blockImageRevealer.revealChild = true;
})
@@ -151,8 +157,8 @@ const WaifuImage = (taglist) => {
);
downloadIndicator._hide();
}
- if (!force && Gio.File.new_for_path(imagePath).query_exists(null)) showImage();
- else Utils.execAsync(['bash', '-c', `wget -O '${imagePath}' '${url}'`])
+ if (!force && fileExists(thisBlock._imagePath)) showImage();
+ else Utils.execAsync(['bash', '-c', `wget -O '${thisBlock._imagePath}' '${url}'`])
.then(showImage)
.catch(print);
colorIndicator.css = `background-color: ${dominant_color};`;
@@ -274,17 +280,19 @@ export const waifuCommands = Box({
}
});
+const clearChat = () => {
+ const kids = waifuContent.get_children();
+ for (let i = 0; i < kids.length; i++) {
+ const child = kids[i];
+ if (child) child.destroy();
+ }
+}
+
export const sendMessage = (text) => {
// Do something on send
// Commands
if (text.startsWith('/')) {
- if (text.startsWith('/clear')) {
- const kids = waifuContent.get_children();
- for (let i = kids.length - 1; i >= 0; i--) {
- const child = kids[i];
- child.destroy();
- }
- }
+ if (text.startsWith('/clear')) clearChat();
else if (text.startsWith('/test')) {
const newImage = WaifuImage(['/test']);
waifuContent.add(newImage);
@@ -292,6 +300,7 @@ export const sendMessage = (text) => {
// This is an image uploaded to my github repo
status: 200,
url: 'https://picsum.photos/400/600',
+ extension: '',
signature: 0,
source: 'https://picsum.photos/400/600',
dominant_color: '#9392A6',
From 207f0d5269468c7875ff992a7c73c7456d756f6a Mon Sep 17 00:00:00 2001
From: clsty
Date: Wed, 3 Jan 2024 07:28:56 +0800
Subject: [PATCH 043/265] Remove execute permission for non-executables.
---
.config/ags/scripts/README.md | 0
.../scripts/color_generation/pywal_to_material.scss | 0
.../specials/_material_badapple.scss | 0
.config/ags/scripts/templates/foot/foot.ini | 0
.config/ags/scripts/templates/fuzzel/fuzzel.ini | 0
.config/ags/scripts/templates/gtklock/main.scss | 0
.config/ags/scripts/templates/gtklock/style.css | 0
.config/ags/scripts/templates/hypr/colors.conf | 0
.config/foot/foot.ini | 0
.config/fuzzel/fuzzel.ini | 0
.config/gtklock/config.ini | 0
.config/gtklock/style.css | 0
.config/hypr/colors.conf | 0
.config/hypr/colors_default.conf | 0
.config/hypr/env.conf | 0
.config/hypr/execs.conf | 0
.config/hypr/hyprland.conf | 0
.config/hypr/keybinds.conf | 0
.config/hypr/plugins.conf | 0
.config/hypr/shaders/chromatic_abberation.frag | 0
.config/hypr/shaders/crt.frag | 0
.config/hypr/shaders/drugs.frag | 0
.config/hypr/shaders/extradark.frag | 0
.config/hypr/shaders/invert.frag | 0
.config/hypr/shaders/solarized.frag | 0
.config/starship.toml | 0
.config/wlogout/layout | 0
.config/wlogout/noise.png | Bin
.config/wlogout/style.css | 0
.../Cached Theme.pak | Bin
.../images/icon128.png | Bin
.../images/icon16.png | Bin
.../images/icon48.png | Bin
.../Chrome-catppuccin-mocha-Colorful/manifest.json | 0
.../chromethemes/EverForest-Dark-B/Cached Theme.pak | Bin
.../EverForest-Dark-B/images/icon128.png | Bin
.../EverForest-Dark-B/images/icon16.png | Bin
.../EverForest-Dark-B/images/icon48.png | Bin
.../chromethemes/EverForest-Dark-B/manifest.json | 0
.../chromethemes/TokyoNight/Cached Theme.pak | Bin
.../chromethemes/TokyoNight/images/icon128.png | Bin
.../chromethemes/TokyoNight/images/icon16.png | Bin
.../chromethemes/TokyoNight/images/icon48.png | Bin
.../chromethemes/TokyoNight/manifest.json | 0
.../gnome-text-editor/styles/catppuccin-frappe.xml | 0
.../gnome-text-editor/styles/catppuccin-latte.xml | 0
.../styles/catppuccin-macchiato.xml | 0
.../gnome-text-editor/styles/catppuccin-mocha.xml | 0
.../share/gnome-text-editor/styles/everforest-b.xml | 0
LICENSE | 0
README.md | 0
51 files changed, 0 insertions(+), 0 deletions(-)
mode change 100755 => 100644 .config/ags/scripts/README.md
mode change 100755 => 100644 .config/ags/scripts/color_generation/pywal_to_material.scss
mode change 100755 => 100644 .config/ags/scripts/color_generation/specials/_material_badapple.scss
mode change 100755 => 100644 .config/ags/scripts/templates/foot/foot.ini
mode change 100755 => 100644 .config/ags/scripts/templates/fuzzel/fuzzel.ini
mode change 100755 => 100644 .config/ags/scripts/templates/gtklock/main.scss
mode change 100755 => 100644 .config/ags/scripts/templates/gtklock/style.css
mode change 100755 => 100644 .config/ags/scripts/templates/hypr/colors.conf
mode change 100755 => 100644 .config/foot/foot.ini
mode change 100755 => 100644 .config/fuzzel/fuzzel.ini
mode change 100755 => 100644 .config/gtklock/config.ini
mode change 100755 => 100644 .config/gtklock/style.css
mode change 100755 => 100644 .config/hypr/colors.conf
mode change 100755 => 100644 .config/hypr/colors_default.conf
mode change 100755 => 100644 .config/hypr/env.conf
mode change 100755 => 100644 .config/hypr/execs.conf
mode change 100755 => 100644 .config/hypr/hyprland.conf
mode change 100755 => 100644 .config/hypr/keybinds.conf
mode change 100755 => 100644 .config/hypr/plugins.conf
mode change 100755 => 100644 .config/hypr/shaders/chromatic_abberation.frag
mode change 100755 => 100644 .config/hypr/shaders/crt.frag
mode change 100755 => 100644 .config/hypr/shaders/drugs.frag
mode change 100755 => 100644 .config/hypr/shaders/extradark.frag
mode change 100755 => 100644 .config/hypr/shaders/invert.frag
mode change 100755 => 100644 .config/hypr/shaders/solarized.frag
mode change 100755 => 100644 .config/starship.toml
mode change 100755 => 100644 .config/wlogout/layout
mode change 100755 => 100644 .config/wlogout/noise.png
mode change 100755 => 100644 .config/wlogout/style.css
mode change 100755 => 100644 Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/Cached Theme.pak
mode change 100755 => 100644 Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon128.png
mode change 100755 => 100644 Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon16.png
mode change 100755 => 100644 Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon48.png
mode change 100755 => 100644 Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/manifest.json
mode change 100755 => 100644 Import Manually/chromethemes/EverForest-Dark-B/Cached Theme.pak
mode change 100755 => 100644 Import Manually/chromethemes/EverForest-Dark-B/images/icon128.png
mode change 100755 => 100644 Import Manually/chromethemes/EverForest-Dark-B/images/icon16.png
mode change 100755 => 100644 Import Manually/chromethemes/EverForest-Dark-B/images/icon48.png
mode change 100755 => 100644 Import Manually/chromethemes/EverForest-Dark-B/manifest.json
mode change 100755 => 100644 Import Manually/chromethemes/TokyoNight/Cached Theme.pak
mode change 100755 => 100644 Import Manually/chromethemes/TokyoNight/images/icon128.png
mode change 100755 => 100644 Import Manually/chromethemes/TokyoNight/images/icon16.png
mode change 100755 => 100644 Import Manually/chromethemes/TokyoNight/images/icon48.png
mode change 100755 => 100644 Import Manually/chromethemes/TokyoNight/manifest.json
mode change 100755 => 100644 Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-frappe.xml
mode change 100755 => 100644 Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-latte.xml
mode change 100755 => 100644 Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-macchiato.xml
mode change 100755 => 100644 Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-mocha.xml
mode change 100755 => 100644 Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/everforest-b.xml
mode change 100755 => 100644 LICENSE
mode change 100755 => 100644 README.md
diff --git a/.config/ags/scripts/README.md b/.config/ags/scripts/README.md
old mode 100755
new mode 100644
diff --git a/.config/ags/scripts/color_generation/pywal_to_material.scss b/.config/ags/scripts/color_generation/pywal_to_material.scss
old mode 100755
new mode 100644
diff --git a/.config/ags/scripts/color_generation/specials/_material_badapple.scss b/.config/ags/scripts/color_generation/specials/_material_badapple.scss
old mode 100755
new mode 100644
diff --git a/.config/ags/scripts/templates/foot/foot.ini b/.config/ags/scripts/templates/foot/foot.ini
old mode 100755
new mode 100644
diff --git a/.config/ags/scripts/templates/fuzzel/fuzzel.ini b/.config/ags/scripts/templates/fuzzel/fuzzel.ini
old mode 100755
new mode 100644
diff --git a/.config/ags/scripts/templates/gtklock/main.scss b/.config/ags/scripts/templates/gtklock/main.scss
old mode 100755
new mode 100644
diff --git a/.config/ags/scripts/templates/gtklock/style.css b/.config/ags/scripts/templates/gtklock/style.css
old mode 100755
new mode 100644
diff --git a/.config/ags/scripts/templates/hypr/colors.conf b/.config/ags/scripts/templates/hypr/colors.conf
old mode 100755
new mode 100644
diff --git a/.config/foot/foot.ini b/.config/foot/foot.ini
old mode 100755
new mode 100644
diff --git a/.config/fuzzel/fuzzel.ini b/.config/fuzzel/fuzzel.ini
old mode 100755
new mode 100644
diff --git a/.config/gtklock/config.ini b/.config/gtklock/config.ini
old mode 100755
new mode 100644
diff --git a/.config/gtklock/style.css b/.config/gtklock/style.css
old mode 100755
new mode 100644
diff --git a/.config/hypr/colors.conf b/.config/hypr/colors.conf
old mode 100755
new mode 100644
diff --git a/.config/hypr/colors_default.conf b/.config/hypr/colors_default.conf
old mode 100755
new mode 100644
diff --git a/.config/hypr/env.conf b/.config/hypr/env.conf
old mode 100755
new mode 100644
diff --git a/.config/hypr/execs.conf b/.config/hypr/execs.conf
old mode 100755
new mode 100644
diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
old mode 100755
new mode 100644
diff --git a/.config/hypr/keybinds.conf b/.config/hypr/keybinds.conf
old mode 100755
new mode 100644
diff --git a/.config/hypr/plugins.conf b/.config/hypr/plugins.conf
old mode 100755
new mode 100644
diff --git a/.config/hypr/shaders/chromatic_abberation.frag b/.config/hypr/shaders/chromatic_abberation.frag
old mode 100755
new mode 100644
diff --git a/.config/hypr/shaders/crt.frag b/.config/hypr/shaders/crt.frag
old mode 100755
new mode 100644
diff --git a/.config/hypr/shaders/drugs.frag b/.config/hypr/shaders/drugs.frag
old mode 100755
new mode 100644
diff --git a/.config/hypr/shaders/extradark.frag b/.config/hypr/shaders/extradark.frag
old mode 100755
new mode 100644
diff --git a/.config/hypr/shaders/invert.frag b/.config/hypr/shaders/invert.frag
old mode 100755
new mode 100644
diff --git a/.config/hypr/shaders/solarized.frag b/.config/hypr/shaders/solarized.frag
old mode 100755
new mode 100644
diff --git a/.config/starship.toml b/.config/starship.toml
old mode 100755
new mode 100644
diff --git a/.config/wlogout/layout b/.config/wlogout/layout
old mode 100755
new mode 100644
diff --git a/.config/wlogout/noise.png b/.config/wlogout/noise.png
old mode 100755
new mode 100644
diff --git a/.config/wlogout/style.css b/.config/wlogout/style.css
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/Cached Theme.pak b/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/Cached Theme.pak
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon128.png b/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon128.png
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon16.png b/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon16.png
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon48.png b/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon48.png
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/manifest.json b/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/manifest.json
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/EverForest-Dark-B/Cached Theme.pak b/Import Manually/chromethemes/EverForest-Dark-B/Cached Theme.pak
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/EverForest-Dark-B/images/icon128.png b/Import Manually/chromethemes/EverForest-Dark-B/images/icon128.png
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/EverForest-Dark-B/images/icon16.png b/Import Manually/chromethemes/EverForest-Dark-B/images/icon16.png
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/EverForest-Dark-B/images/icon48.png b/Import Manually/chromethemes/EverForest-Dark-B/images/icon48.png
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/EverForest-Dark-B/manifest.json b/Import Manually/chromethemes/EverForest-Dark-B/manifest.json
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/TokyoNight/Cached Theme.pak b/Import Manually/chromethemes/TokyoNight/Cached Theme.pak
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/TokyoNight/images/icon128.png b/Import Manually/chromethemes/TokyoNight/images/icon128.png
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/TokyoNight/images/icon16.png b/Import Manually/chromethemes/TokyoNight/images/icon16.png
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/TokyoNight/images/icon48.png b/Import Manually/chromethemes/TokyoNight/images/icon48.png
old mode 100755
new mode 100644
diff --git a/Import Manually/chromethemes/TokyoNight/manifest.json b/Import Manually/chromethemes/TokyoNight/manifest.json
old mode 100755
new mode 100644
diff --git a/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-frappe.xml b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-frappe.xml
old mode 100755
new mode 100644
diff --git a/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-latte.xml b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-latte.xml
old mode 100755
new mode 100644
diff --git a/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-macchiato.xml b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-macchiato.xml
old mode 100755
new mode 100644
diff --git a/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-mocha.xml b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-mocha.xml
old mode 100755
new mode 100644
diff --git a/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/everforest-b.xml b/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/everforest-b.xml
old mode 100755
new mode 100644
diff --git a/LICENSE b/LICENSE
old mode 100755
new mode 100644
diff --git a/README.md b/README.md
old mode 100755
new mode 100644
From 74e7215918573eadc6f3363daf3271c068124e15 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Wed, 3 Jan 2024 18:05:52 +0700
Subject: [PATCH 044/265] Update waifu.js
---
.config/ags/widgets/sideleft/apis/waifu.js | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/.config/ags/widgets/sideleft/apis/waifu.js b/.config/ags/widgets/sideleft/apis/waifu.js
index decd52a9d..88f390497 100644
--- a/.config/ags/widgets/sideleft/apis/waifu.js
+++ b/.config/ags/widgets/sideleft/apis/waifu.js
@@ -36,11 +36,11 @@ export const waifuTabIcon = Box({
const WaifuImage = (taglist) => {
const ImageState = (icon, name) => Box({
- className: 'spacing-h-5',
+ className: 'spacing-h-5 txt',
children: [
Box({ hexpand: true }),
Label({
- className: 'sidebar-waifu-txt txt-smallie txt',
+ className: 'sidebar-waifu-txt txt-smallie',
xalign: 0,
label: name,
}),
@@ -161,6 +161,9 @@ const WaifuImage = (taglist) => {
else Utils.execAsync(['bash', '-c', `wget -O '${thisBlock._imagePath}' '${url}'`])
.then(showImage)
.catch(print);
+ blockHeading.get_children().forEach((child) => {
+ child.setCss(`border-color: ${dominant_color};`);
+ })
colorIndicator.css = `background-color: ${dominant_color};`;
}],
],
From 11f2308b1195cd82a395527fa444a52f87fcb3e3 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Wed, 3 Jan 2024 18:06:48 +0700
Subject: [PATCH 045/265] fix invert shader toggle (#150)
---
.config/ags/widgets/sideright/quicktoggles.js | 40 ++++++++++++++-----
1 file changed, 29 insertions(+), 11 deletions(-)
diff --git a/.config/ags/widgets/sideright/quicktoggles.js b/.config/ags/widgets/sideright/quicktoggles.js
index 263fcb52f..2f9908eb9 100644
--- a/.config/ags/widgets/sideright/quicktoggles.js
+++ b/.config/ags/widgets/sideright/quicktoggles.js
@@ -1,11 +1,22 @@
+const { GLib } = imports.gi;
import { Widget, Utils, Service } from '../../imports.js';
import Bluetooth from 'resource:///com/github/Aylur/ags/service/bluetooth.js';
import Network from 'resource:///com/github/Aylur/ags/service/network.js';
+import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';
const { execAsync, exec } = Utils;
import { BluetoothIndicator, NetworkIndicator } from "../../lib/statusicons.js";
import { setupCursorHover } from "../../lib/cursorhover.js";
import { MaterialIcon } from '../../lib/materialicon.js';
+function expandTilde(path) {
+ if (path.startsWith('~')) {
+ console.log(GLib.get_home_dir() + path.slice(1));
+ return GLib.get_home_dir() + path.slice(1);
+ } else {
+ return path;
+ }
+}
+
export const ToggleIconWifi = (props = {}) => Widget.Button({
className: 'txt-small sidebar-iconbutton',
tooltipText: 'Wifi | Right-click to configure',
@@ -31,9 +42,9 @@ export const ToggleIconBluetooth = (props = {}) => Widget.Button({
tooltipText: 'Bluetooth | Right-click to configure',
onClicked: () => {
const status = Bluetooth?.enabled;
- if (status)
+ if (status)
exec('rfkill block bluetooth');
- else
+ else
exec('rfkill unblock bluetooth');
},
onSecondaryClickRelease: () => {
@@ -95,15 +106,22 @@ export const ModuleInvertColors = (props = {}) => Widget.Button({
className: 'txt-small sidebar-iconbutton',
tooltipText: 'Color inversion',
onClicked: (button) => {
- const shaderPath = JSON.parse(exec('hyprctl -j getoption decoration:screen_shader')).str;
- if (shaderPath != "[[EMPTY]]" && shaderPath != "") {
- execAsync(['bash', '-c', `hyprctl keyword decoration:screen_shader ''`]).catch(print);
- button.toggleClassName('sidebar-button-active', false);
- }
- else {
- execAsync(['bash', '-c', `hyprctl keyword decoration:screen_shader ~/.config/hypr/shaders/invert.frag`]).catch(print);
- button.toggleClassName('sidebar-button-active', true);
- }
+ // const shaderPath = JSON.parse(exec('hyprctl -j getoption decoration:screen_shader')).str;
+ Hyprland.sendMessage('j/getoption decoration:screen_shader')
+ .then((output) => {
+ const shaderPath = JSON.parse(output)["str"].trim();
+ console.log(output)
+ console.log(shaderPath)
+ if (shaderPath != "[[EMPTY]]" && shaderPath != "") {
+ execAsync(['bash', '-c', `hyprctl keyword decoration:screen_shader '[[EMPTY]]'`]).catch(print);
+ button.toggleClassName('sidebar-button-active', false);
+ }
+ else {
+ Hyprland.sendMessage(`j/keyword decoration:screen_shader ${expandTilde('~/.config/hypr/shaders/invert.frag')}`)
+ .catch(print);
+ button.toggleClassName('sidebar-button-active', true);
+ }
+ })
},
child: MaterialIcon('invert_colors', 'norm'),
setup: setupCursorHover,
From 008dff29aaebba67105c52a610c1d9911eff0220 Mon Sep 17 00:00:00 2001
From: clsty
Date: Wed, 3 Jan 2024 21:48:35 +0800
Subject: [PATCH 046/265] Enable custom domain for openai api url
---
.config/ags/services/chatgpt.js | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/.config/ags/services/chatgpt.js b/.config/ags/services/chatgpt.js
index b50892235..19aa23e64 100644
--- a/.config/ags/services/chatgpt.js
+++ b/.config/ags/services/chatgpt.js
@@ -45,6 +45,16 @@ function expandTilde(path) {
// We're using many models to not be restricted to 3 messages per minute.
// The whole chat will be sent every request anyway.
const KEY_FILE_LOCATION = `${GLib.get_user_cache_dir()}/ags/user/openai_api_key.txt`;
+const APIDOM_FILE_LOCATION = `${GLib.get_user_cache_dir()}/ags/user/openai_api_dom.txt`;
+function replaceapidom(URL) {
+ //Utils.writeFile(URL, "/tmp/openai-url-old.log"); // For debugging
+ if (fileExists(expandTilde(APIDOM_FILE_LOCATION))) {
+ var contents = Utils.readFile(expandTilde(APIDOM_FILE_LOCATION)).trim();
+ var URL = URL.toString().replace("api.openai.com", contents);
+ }
+ //Utils.writeFile(URL, "/tmp/openai-url.log"); // For debugging
+ return URL;
+}
const CHAT_MODELS = ["gpt-3.5-turbo-1106", "gpt-3.5-turbo", "gpt-3.5-turbo-16k", "gpt-3.5-turbo-0613"]
const ONE_CYCLE_COUNT = 3;
@@ -126,7 +136,8 @@ class ChatGPTService extends Service {
_modelIndex = 0;
_key = '';
_decoder = new TextDecoder();
- url = GLib.Uri.parse('https://api.openai.com/v1/chat/completions', GLib.UriFlags.NONE);
+
+ url = GLib.Uri.parse(replaceapidom('https://api.openai.com/v1/chat/completions'), GLib.UriFlags.NONE);
constructor() {
super();
From 804a86f8b7f82025b2d62d9af2b132e0254e1eb8 Mon Sep 17 00:00:00 2001
From: clsty
Date: Wed, 3 Jan 2024 21:49:22 +0800
Subject: [PATCH 047/265] Improvements on install.sh
---
install.sh | 57 ++++++++++++++++++++++++++++++++++++++----------------
1 file changed, 40 insertions(+), 17 deletions(-)
diff --git a/install.sh b/install.sh
index e9ff41f65..40291770b 100755
--- a/install.sh
+++ b/install.sh
@@ -4,23 +4,23 @@ export base="$(pwd)"
function try { "$@" || sleep 0; }
function v() {
- echo -e "[$0]: \e[34mNow executing:\e[0m"
+ echo -e "\e[34m[$0]: Next command to be executed:\e[0m"
echo -e "\e[32m$@\e[0m"
execute=true
if $ask;then
while true;do
- echo -e "\e[34mDo you want to execute this command? \e[0m"
+ echo -e "\e[34mDo you want to execute the command shown above? \e[0m"
echo " y = Yes"
- echo " a = Abort this script"
+ echo " e = Exit now"
echo " s = Skip this command; NOT recommended unless you really sure"
echo " yesforall = yes and don't ask again; NOT recommended unless you really sure"
- read -p "Enter here [y/a/s/yesforall]:" p
+ read -p "Enter here [y/e/s/yesforall]:" p
case $p in
[yY]) echo -e "\e[34mOK, executing...\e[0m" ;break ;;
- [aA]) echo -e "\e[34mAborting...\e[0m" ;exit ;break ;;
+ [eE]) echo -e "\e[34mExiting...\e[0m" ;exit ;break ;;
[sS]) echo -e "\e[34mAlright, skipping this one...\e[0m" ;export execute=false ;break ;;
"yesforall") echo -e "\e[34mAlright, won't ask again. Executing...\e[0m"; export ask=false ;break ;;
- *) echo -e "\e[31mPlease enter one of [y/a/s/yesforall].\e[0m";;
+ *) echo -e "\e[31mPlease enter one of [y/e/s/yesforall].\e[0m";;
esac
done
fi
@@ -29,26 +29,49 @@ function v() {
fi
}
#####################################################################################
-printf "[$0]: Hi there!\n"
+startask (){
+printf "\e[34m[$0]: Hi there!\n"
printf 'This script 1. only works for ArchLinux and Arch-based distros.\n'
printf ' 2. has not been fully tested, use at your own risk.\n'
-printf "\e[36m== PLEASE BACKUP \"$HOME/.config\" AND \"$HOME/.local\" BY YOURSELF IF NEEDED! ==\n\e[97m"
+printf '\n'
+printf "\e[31m"
+printf "=============\n"
+printf "PLEASE CONFIRM\n"
+printf "YOU HAVE\n"
+printf " \"$HOME/.config\"\n"
+printf " AND\n"
+printf " \"$HOME/.local\"\n"
+printf "ALREADY BACKUPED\n"
+printf "BY YOURSELF!\n"
+printf "=============\n"
+printf "\n\e[97m"
+printf "Enter the capital \"YES\" to continue:"
+read -p " " p
+case $p in "YES")sleep 0;; *)exit;;esac
printf '\n'
printf 'Do you want to confirm everytime before a command executes?\n'
printf ' y = Yes, ask me before executing each of them. (RECOMMENDED)\n'
printf ' n = No, just execute them automatically.\n'
-printf ' E = Exit this script. (DEFAULT)\n'
-read -p "Enter y/n/E: " p
+printf ' a = Abort. (DEFAULT)\n'
+read -p "Enter [y/n/A]: " p
case $p in
y)export ask=true;;
- n)export ask=false; export c=" --noconfirm" ;;
+ n)export ask=false; export noconfirm=" --noconfirm" ;;
*)exit;;
esac
+}
+
+case $1 in
+ "-f")export ask=false; export noconfirm=" --noconfirm" ;;
+ *)startask ;;
+esac
+
set -e
#####################################################################################
printf '\e[36m1. Get packages and add user to video/input groups\n\e[97m'
-v yay -S --needed$c blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git hyprpicker-git rsync
+v yay -S --needed$noconfirm blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git hyprpicker-git rsync
+# NOTE: wayland-idle-inhibitor-git is for providing `wayland-idle-inhibitor.py' used by the `Keep system awake' button in `.config/ags/widgets/sideright/quicktoggles.js'.
v sudo usermod -aG video "$(whoami)"
v sudo usermod -aG input "$(whoami)"
@@ -71,7 +94,7 @@ installags (){
cd $base
}
if command -v ags >/dev/null 2>&1
- then echo -e "\e[34mCommand \"ags\" already exists. Won't install ags.\e[0m"
+ then echo -e "\e[34mCommand \"ags\" already exists. Won\'t install ags.\e[0m"
else installags
fi
@@ -79,7 +102,7 @@ fi
printf '\e[36m3. Copying\e[97m\n'
# In case ~/.local/bin does not exists
-v mkdir -p "$HOME/.local/bin"
+v mkdir -p "$HOME/.local/bin" "$HOME/.local/share"
# `--delete' for rsync to make sure that
# original dot files and new ones in the SAME DIRECTORY
@@ -93,11 +116,11 @@ do
fi
done
-# .local/bin should be processed seperately to avoid `--delete' for rsync,
-# since the files here comes from different places, not only one program.
+# some foldes (eg. .local/bin) should be processed seperately to avoid `--delete' for rsync,
+# since the files here come from different places, not only about one program.
v rsync -av ".local/bin/" "$HOME/.local/bin/"
#####################################################################################
-printf "[$0]: \e[36mFinished. See the \"Import Manually\" folder and grab anything you need.\e[97m\n"
+printf "\e[36m[$0]: Finished. See the \"Import Manually\" folder and grab anything you need.\e[97m\n"
printf "\e[36mPress \e[30m\e[46m Ctrl+Super+T \e[0m\e[36m to select a wallpaper\e[97m\n"
printf "\e[36mPress \e[30m\e[46m Super+/ \e[0m\e[36m for a list of keybinds\e[97m\n"
From 03e26d7768611d518662c36c2bbe2e8417da40a2 Mon Sep 17 00:00:00 2001
From: clsty
Date: Thu, 4 Jan 2024 07:55:41 +0800
Subject: [PATCH 048/265] Remove execute permission for non-executables
---
.config/ags/scss/_colors.scss | 0
.config/ags/scss/_dock.scss | 0
.config/ags/scss/_material.scss | 0
.config/ags/scss/_musicmaterial.scss | 0
4 files changed, 0 insertions(+), 0 deletions(-)
mode change 100755 => 100644 .config/ags/scss/_colors.scss
mode change 100755 => 100644 .config/ags/scss/_dock.scss
mode change 100755 => 100644 .config/ags/scss/_material.scss
mode change 100755 => 100644 .config/ags/scss/_musicmaterial.scss
diff --git a/.config/ags/scss/_colors.scss b/.config/ags/scss/_colors.scss
old mode 100755
new mode 100644
diff --git a/.config/ags/scss/_dock.scss b/.config/ags/scss/_dock.scss
old mode 100755
new mode 100644
diff --git a/.config/ags/scss/_material.scss b/.config/ags/scss/_material.scss
old mode 100755
new mode 100644
diff --git a/.config/ags/scss/_musicmaterial.scss b/.config/ags/scss/_musicmaterial.scss
old mode 100755
new mode 100644
From 719c223821b7e3d6153d26a347d6bc9a5938eaaf Mon Sep 17 00:00:00 2001
From: clsty
Date: Thu, 4 Jan 2024 08:00:19 +0800
Subject: [PATCH 049/265] Remove duplicated entry in .gitignore
---
.gitignore | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/.gitignore b/.gitignore
index b69e763b8..080a2b5e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,7 @@
.config/ags/style.css
-.config/hypr/colors.conf
.config/ags/scripts/templates/gradience/preset.json
.config/ags/scss/_musicmaterial.scss
.config/ags/style.css
-.config/hypr/colors.conf
.config/ags/scss/_material.scss
+.config/hypr/colors.conf
/ags
From e1fba5699c3fdf89dd1d07b870b4faca2029a3f4 Mon Sep 17 00:00:00 2001
From: clsty
Date: Thu, 4 Jan 2024 09:13:38 +0800
Subject: [PATCH 050/265] Read dependencies from a file.
---
dependencies.txt | 14 ++++++++++++++
install.sh | 15 +++++++++++----
2 files changed, 25 insertions(+), 4 deletions(-)
create mode 100644 dependencies.txt
diff --git a/dependencies.txt b/dependencies.txt
new file mode 100644
index 000000000..fc1cf0216
--- /dev/null
+++ b/dependencies.txt
@@ -0,0 +1,14 @@
+coreutils curl rsync wget ripgrep gojq npm meson typescript gjs sassc
+python-build python-material-color-utilities python-pillow python-poetry python-pywal
+hyprland-git xorg-xrandr
+cava pavucontrol wireplumber libdbusmenu-gtk3 plasma-browser-integration playerctl
+webp-pixbuf-loader gtk-layer-shell gtk3 gobject-introspection upower
+fuzzel yad ydotool
+gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module
+polkit-gnome gnome-keyring gnome-control-center
+blueberry networkmanager brightnessctl wlsunset-git gnome-bluetooth-3.0
+wayland-idle-inhibitor-git swayidle swaylock-effects-git wlogout
+wl-clipboard hyprpicker-git grim tesseract slurp
+adw-gtk3-git gradience-git swww
+lexend-fonts-git ttf-jetbrains-mono-nerd ttf-material-symbols-variable-git ttf-space-mono-nerd
+fish foot starship
diff --git a/install.sh b/install.sh
index 40291770b..d783f59ea 100755
--- a/install.sh
+++ b/install.sh
@@ -12,7 +12,7 @@ function v() {
echo -e "\e[34mDo you want to execute the command shown above? \e[0m"
echo " y = Yes"
echo " e = Exit now"
- echo " s = Skip this command; NOT recommended unless you really sure"
+ echo " s = Skip this command; NOT recommended (may break functions needed by the dot files!)"
echo " yesforall = yes and don't ask again; NOT recommended unless you really sure"
read -p "Enter here [y/e/s/yesforall]:" p
case $p in
@@ -56,23 +56,30 @@ printf ' a = Abort. (DEFAULT)\n'
read -p "Enter [y/n/A]: " p
case $p in
y)export ask=true;;
- n)export ask=false; export noconfirm=" --noconfirm" ;;
+ n)export ask=false;;
*)exit;;
esac
}
case $1 in
- "-f")export ask=false; export noconfirm=" --noconfirm" ;;
+ "-f")export ask=false;;
*)startask ;;
esac
set -e
+IFS_old=$IFS
#####################################################################################
printf '\e[36m1. Get packages and add user to video/input groups\n\e[97m'
-v yay -S --needed$noconfirm blueberry brightnessctl coreutils curl fish foot fuzzel gjs gnome-bluetooth-3.0 gnome-control-center gnome-keyring gobject-introspection grim gtk3 gtk-layer-shell libdbusmenu-gtk3 meson networkmanager npm plasma-browser-integration playerctl polkit-gnome python-pywal ripgrep sassc slurp starship swayidle typescript upower xorg-xrandr webp-pixbuf-loader wget wireplumber wl-clipboard tesseract yad ydotool adw-gtk3-git cava gojq gradience-git gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module hyprland-git lexend-fonts-git python-material-color-utilities python-pywal python-poetry python-build python-pillow swaylock-effects-git swww ttf-material-symbols-variable-git ttf-space-mono-nerd ttf-jetbrains-mono-nerd wayland-idle-inhibitor-git wlogout wlsunset-git hyprpicker-git rsync
+readarray -t pkglist < dependencies.txt
# NOTE: wayland-idle-inhibitor-git is for providing `wayland-idle-inhibitor.py' used by the `Keep system awake' button in `.config/ags/widgets/sideright/quicktoggles.js'.
+if $ask;then
+ for i in "${pkglist[@]}";do v yay -S --needed $i;done
+else
+ v yay -S --needed --noconfirm "${pkglist[*]}"
+fi
+
v sudo usermod -aG video "$(whoami)"
v sudo usermod -aG input "$(whoami)"
From 48c66b4bdaad3c57e8b9966c749e1d4fd93ddd61 Mon Sep 17 00:00:00 2001
From: clsty
Date: Thu, 4 Jan 2024 09:35:38 +0800
Subject: [PATCH 051/265] Add comments.
---
install.sh | 3 +++
1 file changed, 3 insertions(+)
diff --git a/install.sh b/install.sh
index d783f59ea..4b6bfda00 100755
--- a/install.sh
+++ b/install.sh
@@ -71,12 +71,15 @@ IFS_old=$IFS
#####################################################################################
printf '\e[36m1. Get packages and add user to video/input groups\n\e[97m'
+# Each line as an element of the array $pkglist
readarray -t pkglist < dependencies.txt
# NOTE: wayland-idle-inhibitor-git is for providing `wayland-idle-inhibitor.py' used by the `Keep system awake' button in `.config/ags/widgets/sideright/quicktoggles.js'.
if $ask;then
+ # execute per element of the array $pkglist
for i in "${pkglist[@]}";do v yay -S --needed $i;done
else
+ # execute for all elements of the array $pkglist in one line
v yay -S --needed --noconfirm "${pkglist[*]}"
fi
From 7efd084eb47c54954e378eb8588364499f904ee8 Mon Sep 17 00:00:00 2001
From: clsty
Date: Thu, 4 Jan 2024 09:59:11 +0800
Subject: [PATCH 052/265] Remove unused line.
---
install.sh | 1 -
1 file changed, 1 deletion(-)
diff --git a/install.sh b/install.sh
index 4b6bfda00..7e3fbc542 100755
--- a/install.sh
+++ b/install.sh
@@ -67,7 +67,6 @@ case $1 in
esac
set -e
-IFS_old=$IFS
#####################################################################################
printf '\e[36m1. Get packages and add user to video/input groups\n\e[97m'
From cd498366c65dd7d73a051391d7d2ac87df7f49d4 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Thu, 4 Jan 2024 14:06:30 +0700
Subject: [PATCH 053/265] #173 ?
---
.config/hypr/execs.conf | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
mode change 100644 => 100755 .config/hypr/execs.conf
diff --git a/.config/hypr/execs.conf b/.config/hypr/execs.conf
old mode 100644
new mode 100755
index 0b0b095dc..413a9a736
--- a/.config/hypr/execs.conf
+++ b/.config/hypr/execs.conf
@@ -14,8 +14,8 @@ exec-once = fcitx5
exec-once = dbus-update-activation-environment --all &
exec-once = /usr/bin/gnome-keyring-daemon --start --components=secrets &
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &
-exec-once = swayidle -w timeout 300 'swaylock' before-sleep 'swaylock' &
-exec-once = swayidle -w timeout 450 'pidof java || systemctl suspend' & # dont sleep if playing minecraft, else nvidia will fuck up
+exec-once = swayidle -w timeout 300 'swaylock' &
+exec-once = swayidle -w timeout 450 'pidof java || systemctl suspend' &
exec-once = sleep 1 && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # Some fix idk
# Clipboard history
From dfbfe006c5eff9f55c7a16be2fbf3b760bac8432 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Thu, 4 Jan 2024 20:12:27 +0700
Subject: [PATCH 054/265] more Hyprland.sendMessage
---
.config/ags/widgets/bar/music.js | 5 +++--
.config/ags/widgets/bar/system.js | 5 +++--
.config/ags/widgets/overview/overview.js | 19 ++++++++-----------
.config/ags/widgets/overview/searchbuttons.js | 2 +-
4 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/.config/ags/widgets/bar/music.js b/.config/ags/widgets/bar/music.js
index 2892164dd..f72be6a97 100644
--- a/.config/ags/widgets/bar/music.js
+++ b/.config/ags/widgets/bar/music.js
@@ -1,6 +1,7 @@
import { Service, Utils, Widget } from '../../imports.js';
import Mpris from 'resource:///com/github/Aylur/ags/service/mpris.js';
import Audio from 'resource:///com/github/Aylur/ags/service/audio.js';
+import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';
const { execAsync, exec } = Utils;
import { AnimatedCircProg } from "../../lib/animatedcircularprogress.js";
import { showMusicControls } from '../../variables.js';
@@ -30,8 +31,8 @@ const TrackProgress = () => {
}
export const ModuleMusic = () => Widget.EventBox({
- onScrollUp: () => execAsync('hyprctl dispatch workspace -1'),
- onScrollDown: () => execAsync('hyprctl dispatch workspace +1'),
+ onScrollUp: () => Hyprland.sendMessage(`dispatch workspace -1`),
+ onScrollDown: () => Hyprland.sendMessage(`dispatch workspace +1`),
onPrimaryClickRelease: () => showMusicControls.setValue(!showMusicControls.value),
onSecondaryClickRelease: () => execAsync(['bash', '-c', 'playerctl next || playerctl position `bc <<< "100 * $(playerctl metadata mpris:length) / 1000000 / 100"` &']),
onMiddleClickRelease: () => Mpris.getPlayer('')?.playPause(),
diff --git a/.config/ags/widgets/bar/system.js b/.config/ags/widgets/bar/system.js
index 8c5465339..db1719a2f 100644
--- a/.config/ags/widgets/bar/system.js
+++ b/.config/ags/widgets/bar/system.js
@@ -4,6 +4,7 @@ import { Service, Utils, Widget } from '../../imports.js';
const { Box, Label, Button, Overlay, Revealer, Scrollable, Stack, EventBox } = Widget;
const { exec, execAsync } = Utils;
const { GLib } = imports.gi;
+import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';
import Battery from 'resource:///com/github/Aylur/ags/service/battery.js';
import { MaterialIcon } from '../../lib/materialicon.js';
import { AnimatedCircProg } from "../../lib/animatedcircularprogress.js";
@@ -173,8 +174,8 @@ const BarGroup = ({ child }) => Widget.Box({
});
export const ModuleSystem = () => Widget.EventBox({
- onScrollUp: () => execAsync('hyprctl dispatch workspace -1'),
- onScrollDown: () => execAsync('hyprctl dispatch workspace +1'),
+ onScrollUp: () => Hyprland.sendMessage(`dispatch workspace -1`),
+ onScrollDown: () => Hyprland.sendMessage(`dispatch workspace +1`),
onPrimaryClick: () => App.toggleWindow('sideright'),
child: Widget.Box({
className: 'spacing-h-5',
diff --git a/.config/ags/widgets/overview/overview.js b/.config/ags/widgets/overview/overview.js
index d1dc5af44..a32421eae 100644
--- a/.config/ags/widgets/overview/overview.js
+++ b/.config/ags/widgets/overview/overview.js
@@ -126,10 +126,10 @@ const client = ({ address, size: [w, h], workspace: { id, name }, class: c, titl
hpack: 'center',
vpack: 'center',
onClicked: () => {
- execAsync([`bash`, `-c`, `hyprctl dispatch focuswindow address:${address}`, `&`]).catch(print);
+ Hyprland.sendMessage(`dispatch focuswindow address:${address}`);
App.closeWindow('overview');
},
- onMiddleClickRelease: () => execAsync([`bash`, `-c`, `hyprctl dispatch closewindow address:${address}`, `&`]).catch(print),
+ onMiddleClickRelease: () => Hyprland.sendMessage(`dispatch closewindow address:${address}`),
onSecondaryClick: (button) => {
button.toggleClassName('overview-tasks-window-selected', true);
const menu = Widget.Menu({
@@ -140,10 +140,7 @@ const client = ({ address, size: [w, h], workspace: { id, name }, class: c, titl
xalign: 0,
label: "Close (Middle-click)",
}),
- onActivate: () => {
- execAsync([`bash`, `-c`, `hyprctl dispatch closewindow address:${address}`, `&`])
- .catch(print);
- }
+ onActivate: () => Hyprland.sendMessage(`dispatch closewindow address:${address}`),
}),
ContextWorkspaceArray({
label: "Dump windows to workspace",
@@ -243,15 +240,15 @@ const workspace = index => {
children: [Widget.EventBox({
hexpand: true,
vexpand: true,
- onPrimaryClickRelease: () => {
- execAsync([`bash`, `-c`, `hyprctl dispatch workspace ${index}`, `&`]).catch(print);
+ onPrimaryClick: () => {
+ Hyprland.sendMessage(`dispatch workspace ${index}`)
App.closeWindow('overview');
},
- setup: eventbox => {
+ setup: (eventbox) => {
eventbox.drag_dest_set(Gtk.DestDefaults.ALL, TARGET, Gdk.DragAction.COPY);
eventbox.connect('drag-data-received', (_w, _c, _x, _y, data) => {
overviewTick.value = !overviewTick.value;
- execAsync([`bash`, `-c`, `hyprctl dispatch movetoworkspacesilent ${index},address:${data.get_text()}`, `&`]).catch(print);
+ Hyprland.sendMessage(`dispatch movetoworkspacesilent ${index},address:${data.get_text()}`)
});
},
child: fixed,
@@ -434,7 +431,7 @@ export const SearchAndWindows = () => {
else {
App.closeWindow('overview');
- execAsync(['bash', '-c', `xdg-open 'https://www.google.com/search?q=${text} -site:quora.com' &`]).catch(print); // fuck quora
+ execAsync(['bash', '-c', `xdg-open 'https://www.google.com/search?q=${text} -site:quora.com' &`]).catch(print); // quora is useless
}
},
// Actually onChange but this is ta workaround for a bug
diff --git a/.config/ags/widgets/overview/searchbuttons.js b/.config/ags/widgets/overview/searchbuttons.js
index 1e70d443f..f084d033e 100644
--- a/.config/ags/widgets/overview/searchbuttons.js
+++ b/.config/ags/widgets/overview/searchbuttons.js
@@ -167,6 +167,6 @@ export const SearchButton = ({ text = '' }) => searchItem({
content: `${text}`,
onActivate: () => {
App.closeWindow('overview');
- execAsync(['bash', '-c', `xdg-open 'https://www.google.com/search?q=${text} -site:quora.com' &`]).catch(print); // fuck quora
+ execAsync(['bash', '-c', `xdg-open 'https://www.google.com/search?q=${text} -site:quora.com' &`]).catch(print); // quora is useless
},
});
\ No newline at end of file
From dbab0741224cbdd5310d930ba4367174e211207a Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Thu, 4 Jan 2024 20:12:55 +0700
Subject: [PATCH 055/265] proper spacing for notif actions
---
.config/ags/lib/notification.js | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/.config/ags/lib/notification.js b/.config/ags/lib/notification.js
index 23de6b8cd..4c50fb785 100644
--- a/.config/ags/lib/notification.js
+++ b/.config/ags/lib/notification.js
@@ -158,18 +158,23 @@ export default ({
label: notifObject.body,
}),
Box({
- homogeneous: true,
- className: 'notif-actions',
+ className: 'notif-actions spacing-h-5',
children: [
Button({
+ hexpand: true,
className: `notif-action notif-action-${notifObject.urgency}`,
- label: 'Close',
onClicked: () => destroyWithAnims(),
+ child: Label({
+ label: 'Close',
+ })
}),
...notifObject.actions.map(action => Widget.Button({
+ hexpand: true,
className: `notif-action notif-action-${notifObject.urgency}`,
onClicked: () => notifObject.invoke(action.id),
- label: action.label,
+ child: Label({
+ label: action.label,
+ })
}))
],
})
From 28ae26a5b53cd2c20b1c9c2bade8a360f51f6676 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 5 Jan 2024 00:11:01 +0700
Subject: [PATCH 056/265] thorium very cool
---
.config/thorium-flags.conf | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 .config/thorium-flags.conf
diff --git a/.config/thorium-flags.conf b/.config/thorium-flags.conf
new file mode 100644
index 000000000..e8640c9de
--- /dev/null
+++ b/.config/thorium-flags.conf
@@ -0,0 +1,5 @@
+--password-store=gnome
+--ozone-platform-hint=wayland
+--gtk-version=4
+--ignore-gpu-blocklist
+--enable-features=TouchpadOverscrollHistoryNavigation
From 2f8bf3683179f0742c12dc6b635af64c0f14cc17 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 5 Jan 2024 02:23:51 +0700
Subject: [PATCH 057/265] ags: sync
---
.config/ags/lib/configwidgets.js | 33 ++--
.config/ags/lib/statusicons.js | 6 +-
.config/ags/scss/_cheatsheet.scss | 4 +-
.config/ags/scss/_common.scss | 6 +-
.config/ags/scss/_notifications.scss | 32 ++-
.config/ags/scss/_osk.scss | 8 +-
.config/ags/scss/_sidebars.scss | 82 +++-----
.config/ags/style.css | 120 ++++++------
.config/ags/widgets/cheatsheet/keybinds.js | 2 +-
.../onscreenkeyboard/onscreenkeyboard.js | 2 +-
.config/ags/widgets/overview/overview.js | 184 +++++++++---------
.../ags/widgets/sideright/notificationlist.js | 167 ++++++++++------
.config/ags/widgets/sideright/quicktoggles.js | 2 +-
13 files changed, 347 insertions(+), 301 deletions(-)
diff --git a/.config/ags/lib/configwidgets.js b/.config/ags/lib/configwidgets.js
index c9cde2982..0c845859f 100644
--- a/.config/ags/lib/configwidgets.js
+++ b/.config/ags/lib/configwidgets.js
@@ -37,22 +37,25 @@ export const ConfigToggle = ({ icon, name, desc = '', initValue, onChange, ...re
]
});
const interactionWrapper = Button({
+ properties: [
+ ['toggle', (newValue) => {
+ value = !value;
+ toggleIcon.toggleClassName('switch-fg-toggling-false', false);
+ if (!value) {
+ toggleIcon.label = '';
+ toggleIcon.toggleClassName('txt-poof', true);
+ }
+ toggleButtonIndicator.toggleClassName('switch-fg-true', value);
+ toggleButton.toggleClassName('switch-bg-true', value);
+ if (value) Utils.timeout(1, () => {
+ toggleIcon.label = 'check';
+ toggleIcon.toggleClassName('txt-poof', false);
+ })
+ onChange(interactionWrapper, value);
+ }]
+ ],
child: widgetContent,
- onClicked: () => { // mouse up/kb press
- value = !value;
- toggleIcon.toggleClassName('switch-fg-toggling-false', false);
- if (!value) {
- toggleIcon.label = '';
- toggleIcon.toggleClassName('txt-poof', true);
- }
- toggleButtonIndicator.toggleClassName('switch-fg-true', value);
- toggleButton.toggleClassName('switch-bg-true', value);
- if(value) Utils.timeout(1, () => {
- toggleIcon.label = 'check';
- toggleIcon.toggleClassName('txt-poof', false);
- })
- onChange(interactionWrapper, value);
- },
+ onClicked: (self) => self._toggle(self),
setup: (button) => {
setupCursorHover(button),
button.connect('pressed', () => { // mouse down
diff --git a/.config/ags/lib/statusicons.js b/.config/ags/lib/statusicons.js
index 48c0bce47..600e88117 100644
--- a/.config/ags/lib/statusicons.js
+++ b/.config/ags/lib/statusicons.js
@@ -99,7 +99,7 @@ const NetworkWiredIndicator = () => Widget.Stack({
return;
const { internet } = Network.wired;
- if (internet === 'connected' || internet === 'connecting')
+ if (['connecting', 'connected'].includes(internet))
stack.shown = internet;
else if (Network.connectivity !== 'full')
stack.shown = 'disconnected';
@@ -135,7 +135,7 @@ const NetworkWifiIndicator = () => Widget.Stack({
if (Network.wifi.internet == 'connected') {
stack.shown = String(Math.ceil(Network.wifi.strength / 25));
}
- else if (Network.wifi.internet == 'disconnected' || Network.wifi.internet == 'connecting') {
+ else if (["disconnected", "connecting"].includes(Network.wifi.internet)) {
stack.shown = Network.wifi.internet;
}
}),
@@ -154,7 +154,7 @@ export const NetworkIndicator = () => Widget.Stack({
return;
}
const primary = Network.primary || 'fallback';
- if (primary == 'wifi' || primary == 'wired')
+ if (['wifi', 'wired'].includes(primary))
stack.shown = primary;
else
stack.shown = 'fallback';
diff --git a/.config/ags/scss/_cheatsheet.scss b/.config/ags/scss/_cheatsheet.scss
index 5e124b1e1..b32b0c463 100644
--- a/.config/ags/scss/_cheatsheet.scss
+++ b/.config/ags/scss/_cheatsheet.scss
@@ -39,11 +39,11 @@
.cheatsheet-closebtn:hover,
.cheatsheet-closebtn:focus {
- background-color: $surfaceVariant;
+ background-color: $hovercolor;
}
.cheatsheet-closebtn:active {
- background-color: mix($surfaceVariant, $onSurfaceVariant, 70%);
+ background-color: $activecolor;
}
.cheatsheet-category-title {
diff --git a/.config/ags/scss/_common.scss b/.config/ags/scss/_common.scss
index 7db4cd07c..3ca445e49 100644
--- a/.config/ags/scss/_common.scss
+++ b/.config/ags/scss/_common.scss
@@ -66,6 +66,9 @@ menu>menuitem:hover,
menu>menuitem:focus {
background-color: mix($surfaceVariant, $onSurfaceVariant, 90%);
}
+menu>menuitem:active {
+ background-color: mix($surfaceVariant, $onSurfaceVariant, 80%);
+}
tooltip {
@include normal-rounding;
@@ -148,8 +151,7 @@ tooltip {
.segment-btn:focus,
.segment-btn:hover {
- background-color: $surfaceVariant;
- color: $onSurfaceVariant;
+ background-color: $hovercolor;
}
.segment-btn-enabled {
diff --git a/.config/ags/scss/_notifications.scss b/.config/ags/scss/_notifications.scss
index 40bb15fa6..24357c0b4 100644
--- a/.config/ags/scss/_notifications.scss
+++ b/.config/ags/scss/_notifications.scss
@@ -108,20 +108,34 @@ $notif_surface: $t_background;
background: $activecolor;
}
-.notif-closeall-btn {
+.notif-listaction-btn {
@include notif-rounding;
- padding: 0.341rem 0.341rem;
+ padding: 0.341rem 0.682rem;
}
-.notif-closeall-btn:hover,
-.notif-closeall-btn:focus {
+.notif-listaction-btn:hover,
+.notif-listaction-btn:focus {
background-color: $hovercolor;
}
-.notif-closeall-btn:active {
+.notif-listaction-btn:active {
background-color: $activecolor;
}
+.notif-listaction-btn-enabled {
+ background-color: $secondaryContainer;
+ color: $onSecondaryContainer;
+}
+
+.notif-listaction-btn-enabled:hover,
+.notif-listaction-btn-enabled:focus {
+ background-color: mix($secondaryContainer, $onSecondaryContainer, 90%);
+}
+
+.notif-listaction-btn-enabled:active {
+ background-color: mix($secondaryContainer, $onSecondaryContainer, 75%);
+}
+
.osd-notif {
@include notif-rounding;
background-color: transparentize(
@@ -170,11 +184,11 @@ $notif_surface: $t_background;
.notif-action-low:focus,
.notif-action-low:hover {
- background-color: mix($t_onSurfaceVariant, $t_surface, 18%);
+ background-color: $hovercolor;
}
.notif-action-low:active {
- background-color: mix($t_onSurfaceVariant, $t_surface, 23%);
+ background-color: $activecolor;
}
.notif-action-normal {
@@ -184,11 +198,11 @@ $notif_surface: $t_background;
.notif-action-normal:focus,
.notif-action-normal:hover {
- background-color: mix($t_onSurfaceVariant, $t_surface, 18%);
+ background-color: $hovercolor;
}
.notif-action-normal:active {
- background-color: mix($t_onSurfaceVariant, $t_surface, 23%);
+ background-color: $activecolor;
}
.notif-action-critical {
diff --git a/.config/ags/scss/_osk.scss b/.config/ags/scss/_osk.scss
index c04ec8d9a..ced6bf7ff 100644
--- a/.config/ags/scss/_osk.scss
+++ b/.config/ags/scss/_osk.scss
@@ -50,16 +50,16 @@ $osk_key_fontsize: 1.091rem;
.osk-key:hover,
.osk-key:focus {
- background-color: mix($t_surfaceVariant, $t_onSurfaceVariant, 90%);
+ background-color: $hovercolor;
}
.osk-key:active {
- background-color: mix($t_surfaceVariant, $t_onSurfaceVariant, 70%);
+ background-color: $activecolor;
font-size: $osk_key_fontsize;
}
.osk-key-active {
- background-color: mix($t_surfaceVariant, $t_onSurfaceVariant, 70%);
+ background-color: $activecolor;
}
.osk-key-normal {
@@ -109,4 +109,4 @@ $osk_key_fontsize: 1.091rem;
.osk-control-button:active {
background-color: mix($t_surfaceVariant, $t_onSurfaceVariant, 70%);
font-size: $osk_key_fontsize;
-}
\ No newline at end of file
+}
diff --git a/.config/ags/scss/_sidebars.scss b/.config/ags/scss/_sidebars.scss
index 27e9dcab7..7773f82a6 100644
--- a/.config/ags/scss/_sidebars.scss
+++ b/.config/ags/scss/_sidebars.scss
@@ -85,11 +85,11 @@ $onChatgpt: $onPrimary;
.sidebar-iconbutton:hover,
.sidebar-iconbutton:focus {
- background-color: mix($t_secondaryContainer, $t_onSecondaryContainer, 80%);
+ background-color: $hovercolor;
}
.sidebar-iconbutton:active {
- background-color: mix($t_secondaryContainer, $t_onSecondaryContainer, 60%);
+ background-color: $activecolor;
}
.sidebar-button {
@@ -107,20 +107,20 @@ $onChatgpt: $onPrimary;
.sidebar-button:hover,
.sidebar-button:focus {
- background-color: mix($t_secondaryContainer, $t_onSecondaryContainer, 80%);
+ background-color: $hovercolor;
}
.sidebar-button:active {
- background-color: mix($t_secondaryContainer, $t_onSecondaryContainer, 60%);
+ background-color: $activecolor;
}
.sidebar-button-nopad:hover,
.sidebar-button-nopad:focus {
- background-color: mix($t_secondaryContainer, $t_onSecondaryContainer, 80%);
+ background-color: $hovercolor;
}
.sidebar-button-nopad:active {
- background-color: mix($t_secondaryContainer, $t_onSecondaryContainer, 60%);
+ background-color: $activecolor;
}
.sidebar-button-left {
@@ -148,11 +148,11 @@ $onChatgpt: $onPrimary;
.sidebar-button-active:hover,
.sidebar-button-active:focus {
- background-color: mix($primary, $hovercolor, 90%);
+ background-color: mix($primary, $hovercolor, 70%);
}
.sidebar-button-active:active {
- background-color: mix($primary, $hovercolor, 70%);
+ background-color: mix($primary, $hovercolor, 40%);
}
.sidebar-buttons-separator {
@@ -173,11 +173,11 @@ $onChatgpt: $onPrimary;
.sidebar-navrail-btn:hover > box > label:first-child,
.sidebar-navrail-btn:focus > box > label:first-child {
- background-color: mix($t_surfaceVariant, $onSurfaceVariant, 90%);
+ background-color: $hovercolor;
}
.sidebar-navrail-btn:active > box > label:first-child {
- background-color: mix($surfaceVariant, $onSurfaceVariant, 75%);
+ background-color: $activecolor;
}
.sidebar-navrail-btn-active > box > label:first-child {
@@ -279,11 +279,11 @@ $onChatgpt: $onPrimary;
.sidebar-calendar-btn-today:hover,
.sidebar-calendar-btn-today:focus {
- background-color: mix($primary, $hovercolor, 90%);
+ background-color: mix($primary, $hovercolor, 70%);
}
.sidebar-calendar-btn-today:active {
- background-color: mix($primary, $hovercolor, 70%);
+ background-color: mix($primary, $hovercolor, 40%);
}
.sidebar-calendar-btn-othermonth {
@@ -303,12 +303,12 @@ $onChatgpt: $onPrimary;
.sidebar-calendar-monthyear-btn:hover,
.sidebar-calendar-monthyear-btn:focus {
- background-color: mix($t_surfaceVariant, $onSurfaceVariant, 95%);
+ background-color: $hovercolor;
color: mix($onSurfaceVariant, $surfaceVariant, 95%);
}
.sidebar-calendar-monthyear-btn:active {
- background-color: mix($surfaceVariant, $onSurfaceVariant, 85%);
+ background-color: $activecolor;
color: mix($onSurfaceVariant, $surfaceVariant, 85%);
}
@@ -321,12 +321,12 @@ $onChatgpt: $onPrimary;
}
.sidebar-calendar-monthshift-btn:hover {
- background-color: mix($t_surfaceVariant, $onSurfaceVariant, 95%);
+ background-color: $hovercolor;
color: mix($onSurfaceVariant, $surfaceVariant, 95%);
}
.sidebar-calendar-monthshift-btn:active {
- background-color: mix($surfaceVariant, $onSurfaceVariant, 85%);
+ background-color: $activecolor;
color: mix($onSurfaceVariant, $surfaceVariant, 85%);
}
@@ -339,11 +339,11 @@ $onChatgpt: $onPrimary;
.sidebar-selector-tab:hover,
.sidebar-selector-tab:focus {
- background-color: mix($t_surfaceVariant, $onSurfaceVariant, 90%);
+ background-color: $hovercolor;
}
.sidebar-selector-tab:active {
- background-color: mix($surfaceVariant, $onSurfaceVariant, 75%);
+ background-color: $activecolor;
}
.sidebar-selector-tab-active > box > label {
@@ -378,11 +378,11 @@ $onChatgpt: $onPrimary;
.sidebar-todo-item-action:hover,
.sidebar-todo-item-action:focus {
- background-color: mix($t_surface, $t_onSurface, 80%);
+ background-color: $hovercolor;
}
.sidebar-todo-item-action:active {
- background-color: mix($t_surface, $t_onSurface, 65%);
+ background-color: $activecolor;
}
.sidebar-todo-crosser {
@@ -398,23 +398,6 @@ $onChatgpt: $onPrimary;
background-color: $error;
}
-.sidebar-clipboard-item {
- border-radius: $rounding_small;
- min-height: 2.045rem;
- padding: 0.341rem;
- background-color: $t_secondaryContainer;
- color: $onSecondaryContainer;
-}
-
-.sidebar-clipboard-item:hover,
-.sidebar-clipboard-item:focus {
- background-color: mix($t_secondaryContainer, $t_onSecondaryContainer, 90%);
-}
-
-.sidebar-clipboard-item:active {
- background-color: mix($t_secondaryContainer, $t_onSecondaryContainer, 80%);
-}
-
.sidebar-todo-new {
@include full-rounding;
color: $onSecondaryContainer;
@@ -423,7 +406,7 @@ $onChatgpt: $onPrimary;
border: 0.068rem solid $onSurface;
}
-.sidebar-todo-new:hover,
+.sidebar-todo-newz,
.sidebar-todo-new:focus {
background-color: mix($t_secondaryContainer, $t_onSecondaryContainer, 97%);
}
@@ -630,7 +613,7 @@ $onChatgpt: $onPrimary;
@include mainfont;
margin: 0.273rem;
margin-bottom: 0rem;
- background-color: $secondaryContainer;
+ background-color: mix($t_secondaryContainer, $t_onSurfaceVariant, 30%);
color: $onSecondaryContainer;
border-radius: $rounding_medium - 0.273rem;
border: 0.068rem solid mix($secondaryContainer, $onSecondaryContainer, 90%);
@@ -646,7 +629,7 @@ $onChatgpt: $onPrimary;
.sidebar-chat-codeblock-topbar-btn {
@include full-rounding;
- padding: 0.273rem;
+ padding: 0.273rem 0.477rem;
}
.sidebar-chat-codeblock-topbar-btn:hover,
@@ -704,16 +687,11 @@ $onChatgpt: $onPrimary;
.sidebar-chat-chip-action:hover,
.sidebar-chat-chip-action:focus {
- background-color: $sidebar_chat_textboxareaColor;
+ background-color: $hovercolor;
}
.sidebar-chat-chip-action:active {
- background-color: mix(
- $sidebar_chat_textboxareaColor,
- $onSurfaceVariant,
- 70%
- );
- color: mix($sidebar_chat_textboxareaColor, $surfaceVariant, 70%);
+ background-color: $activecolor;
}
.sidebar-chat-chip-action-active {
@@ -725,15 +703,15 @@ $onChatgpt: $onPrimary;
@include menu_decel;
@include small-rounding;
padding: 0.341rem 0.477rem;
- background-color: $surfaceVariant;
+ background-color: $t_surfaceVariant;
color: $onSurfaceVariant;
}
.sidebar-chat-chip-toggle:focus,
.sidebar-chat-chip-toggle:hover {
- background-color: mix($surfaceVariant, $onSurfaceVariant, 83%);
+ background-color: $hovercolor;
}
.sidebar-chat-chip-toggle:active {
- background-color: mix($surfaceVariant, $onSurfaceVariant, 67%);
+ background-color: $activecolor;
}
.sidebar-pin {
@@ -746,11 +724,11 @@ $onChatgpt: $onPrimary;
.sidebar-pin:hover,
.sidebar-pin:focus {
- background-color: mix($t_surfaceVariant, $onSurfaceVariant, 90%);
+ background-color: $hovercolor;
}
.sidebar-pin:active {
- background-color: mix($surfaceVariant, $onSurfaceVariant, 75%);
+ background-color: $activecolor;
}
.sidebar-pin-enabled {
diff --git a/.config/ags/style.css b/.config/ags/style.css
index 2ea9d15bf..c4e1f4b7d 100644
--- a/.config/ags/style.css
+++ b/.config/ags/style.css
@@ -445,6 +445,9 @@ menu > menuitem:hover,
menu > menuitem:focus {
background-color: #4a4147; }
+menu > menuitem:active {
+ background-color: #595055; }
+
tooltip {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
@@ -517,8 +520,7 @@ tooltip {
.segment-btn:focus,
.segment-btn:hover {
- background-color: #3b3338;
- color: #d1c2cb; }
+ background-color: rgba(128, 128, 128, 0.3); }
.segment-btn-enabled {
background-color: #554050;
@@ -923,10 +925,10 @@ tooltip {
.cheatsheet-closebtn:hover,
.cheatsheet-closebtn:focus {
- background-color: #3b3338; }
+ background-color: rgba(128, 128, 128, 0.3); }
.cheatsheet-closebtn:active {
- background-color: #685e64; }
+ background-color: rgba(128, 128, 128, 0.7); }
.cheatsheet-category-title {
font-family: "Gabarito", "Poppins", "Lexend", sans-serif;
@@ -1322,14 +1324,14 @@ tooltip {
.osk-key:hover,
.osk-key:focus {
- background-color: rgba(74, 65, 71, 0.31); }
+ background-color: rgba(128, 128, 128, 0.3); }
.osk-key:active {
- background-color: rgba(104, 94, 100, 0.31);
+ background-color: rgba(128, 128, 128, 0.7);
font-size: 1.091rem; }
.osk-key-active {
- background-color: rgba(104, 94, 100, 0.31); }
+ background-color: rgba(128, 128, 128, 0.7); }
.osk-key-normal {
min-width: 2.5rem;
@@ -1444,10 +1446,10 @@ tooltip {
.sidebar-iconbutton:hover,
.sidebar-iconbutton:focus {
- background-color: #765f70; }
+ background-color: rgba(128, 128, 128, 0.3); }
.sidebar-iconbutton:active {
- background-color: #967e8f; }
+ background-color: rgba(128, 128, 128, 0.7); }
.sidebar-button {
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
@@ -1462,17 +1464,17 @@ tooltip {
.sidebar-button:hover,
.sidebar-button:focus {
- background-color: #765f70; }
+ background-color: rgba(128, 128, 128, 0.3); }
.sidebar-button:active {
- background-color: #967e8f; }
+ background-color: rgba(128, 128, 128, 0.7); }
.sidebar-button-nopad:hover,
.sidebar-button-nopad:focus {
- background-color: #765f70; }
+ background-color: rgba(128, 128, 128, 0.3); }
.sidebar-button-nopad:active {
- background-color: #967e8f; }
+ background-color: rgba(128, 128, 128, 0.7); }
.sidebar-button-left {
border-top-left-radius: 0.818rem;
@@ -1496,10 +1498,10 @@ tooltip {
.sidebar-button-active:hover,
.sidebar-button-active:focus {
- background-color: rgba(253, 195, 243, 0.93); }
+ background-color: rgba(246, 191, 237, 0.79); }
.sidebar-button-active:active {
- background-color: rgba(246, 191, 237, 0.79); }
+ background-color: rgba(228, 182, 221, 0.58); }
.sidebar-buttons-separator {
min-width: 0.068rem;
@@ -1516,10 +1518,10 @@ tooltip {
.sidebar-navrail-btn:hover > box > label:first-child,
.sidebar-navrail-btn:focus > box > label:first-child {
- background-color: rgba(116, 105, 111, 0.379); }
+ background-color: rgba(128, 128, 128, 0.3); }
.sidebar-navrail-btn:active > box > label:first-child {
- background-color: #61575d; }
+ background-color: rgba(128, 128, 128, 0.7); }
.sidebar-navrail-btn-active > box > label:first-child {
background-color: #554050;
@@ -1606,10 +1608,10 @@ tooltip {
.sidebar-calendar-btn-today:hover,
.sidebar-calendar-btn-today:focus {
- background-color: rgba(253, 195, 243, 0.93); }
+ background-color: rgba(246, 191, 237, 0.79); }
.sidebar-calendar-btn-today:active {
- background-color: rgba(246, 191, 237, 0.79); }
+ background-color: rgba(228, 182, 221, 0.58); }
.sidebar-calendar-btn-othermonth {
color: #867e82; }
@@ -1626,11 +1628,11 @@ tooltip {
.sidebar-calendar-monthyear-btn:hover,
.sidebar-calendar-monthyear-btn:focus {
- background-color: rgba(92, 83, 89, 0.3445);
+ background-color: rgba(128, 128, 128, 0.3);
color: #cabbc4; }
.sidebar-calendar-monthyear-btn:active {
- background-color: #52484e;
+ background-color: rgba(128, 128, 128, 0.7);
color: #bbadb5; }
.sidebar-calendar-monthshift-btn {
@@ -1642,11 +1644,11 @@ tooltip {
color: #d1c2cb; }
.sidebar-calendar-monthshift-btn:hover {
- background-color: rgba(92, 83, 89, 0.3445);
+ background-color: rgba(128, 128, 128, 0.3);
color: #cabbc4; }
.sidebar-calendar-monthshift-btn:active {
- background-color: #52484e;
+ background-color: rgba(128, 128, 128, 0.7);
color: #bbadb5; }
.sidebar-selector-tab {
@@ -1658,10 +1660,10 @@ tooltip {
.sidebar-selector-tab:hover,
.sidebar-selector-tab:focus {
- background-color: rgba(116, 105, 111, 0.379); }
+ background-color: rgba(128, 128, 128, 0.3); }
.sidebar-selector-tab:active {
- background-color: #61575d; }
+ background-color: rgba(128, 128, 128, 0.7); }
.sidebar-selector-tab-active > box > label {
color: #ffc4f5; }
@@ -1688,10 +1690,10 @@ tooltip {
.sidebar-todo-item-action:hover,
.sidebar-todo-item-action:focus {
- background-color: rgba(73, 66, 70, 0.31); }
+ background-color: rgba(128, 128, 128, 0.3); }
.sidebar-todo-item-action:active {
- background-color: rgba(103, 96, 100, 0.31); }
+ background-color: rgba(128, 128, 128, 0.7); }
.sidebar-todo-crosser {
transition: margin 200ms cubic-bezier(0.1, 1, 0, 1), background-color 0ms;
@@ -1703,20 +1705,6 @@ tooltip {
.sidebar-todo-crosser-removed {
background-color: #ffb4a9; }
-.sidebar-clipboard-item {
- border-radius: 0.818rem;
- min-height: 2.045rem;
- padding: 0.341rem;
- background-color: #554050;
- color: #f8daee; }
-
-.sidebar-clipboard-item:hover,
-.sidebar-clipboard-item:focus {
- background-color: #654f60; }
-
-.sidebar-clipboard-item:active {
- background-color: #765f70; }
-
.sidebar-todo-new {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
@@ -1725,7 +1713,7 @@ tooltip {
padding: 0.205rem 0.545rem;
border: 0.068rem solid #eae0e4; }
-.sidebar-todo-new:hover,
+.sidebar-todo-newz,
.sidebar-todo-new:focus {
background-color: #5a4555; }
@@ -1899,7 +1887,7 @@ tooltip {
font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
margin: 0.273rem;
margin-bottom: 0rem;
- background-color: #554050;
+ background-color: rgba(122, 103, 117, 0.517);
color: #f8daee;
border-radius: 0.886rem;
border: 0.068rem solid #654f60;
@@ -1915,7 +1903,7 @@ tooltip {
.sidebar-chat-codeblock-topbar-btn {
border-radius: 9999px;
-gtk-outline-radius: 9999px;
- padding: 0.273rem; }
+ padding: 0.273rem 0.477rem; }
.sidebar-chat-codeblock-topbar-btn:hover,
.sidebar-chat-codeblock-topbar-btn:focus {
@@ -1965,11 +1953,10 @@ tooltip {
.sidebar-chat-chip-action:hover,
.sidebar-chat-chip-action:focus {
- background-color: #776c73; }
+ background-color: rgba(128, 128, 128, 0.3); }
.sidebar-chat-chip-action:active {
- background-color: #92868d;
- color: #655b61; }
+ background-color: rgba(128, 128, 128, 0.7); }
.sidebar-chat-chip-action-active {
color: #776c73;
@@ -1980,15 +1967,15 @@ tooltip {
border-radius: 0.818rem;
-gtk-outline-radius: 0.818rem;
padding: 0.341rem 0.477rem;
- background-color: #3b3338;
+ background-color: rgba(59, 51, 56, 0.31);
color: #d1c2cb; }
.sidebar-chat-chip-toggle:focus,
.sidebar-chat-chip-toggle:hover {
- background-color: #554b51; }
+ background-color: rgba(128, 128, 128, 0.3); }
.sidebar-chat-chip-toggle:active {
- background-color: #6d6269; }
+ background-color: rgba(128, 128, 128, 0.7); }
.sidebar-pin {
border-radius: 0.818rem;
@@ -2000,10 +1987,10 @@ tooltip {
.sidebar-pin:hover,
.sidebar-pin:focus {
- background-color: rgba(116, 105, 111, 0.379); }
+ background-color: rgba(128, 128, 128, 0.3); }
.sidebar-pin:active {
- background-color: #61575d; }
+ background-color: rgba(128, 128, 128, 0.7); }
.sidebar-pin-enabled {
background-color: #ffc4f5; }
@@ -2185,18 +2172,29 @@ tooltip {
.notif-expand-btn:active {
background: rgba(128, 128, 128, 0.7); }
-.notif-closeall-btn {
+.notif-listaction-btn {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
- padding: 0.341rem 0.341rem; }
+ padding: 0.341rem 0.682rem; }
-.notif-closeall-btn:hover,
-.notif-closeall-btn:focus {
+.notif-listaction-btn:hover,
+.notif-listaction-btn:focus {
background-color: rgba(128, 128, 128, 0.3); }
-.notif-closeall-btn:active {
+.notif-listaction-btn:active {
background-color: rgba(128, 128, 128, 0.7); }
+.notif-listaction-btn-enabled {
+ background-color: #554050;
+ color: #f8daee; }
+
+.notif-listaction-btn-enabled:hover,
+.notif-listaction-btn-enabled:focus {
+ background-color: #654f60; }
+
+.notif-listaction-btn-enabled:active {
+ background-color: #7e6778; }
+
.osd-notif {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
@@ -2237,10 +2235,10 @@ tooltip {
.notif-action-low:focus,
.notif-action-low:hover {
- background-color: rgba(65, 57, 62, 0.31); }
+ background-color: rgba(128, 128, 128, 0.3); }
.notif-action-low:active {
- background-color: rgba(73, 65, 71, 0.31); }
+ background-color: rgba(128, 128, 128, 0.7); }
.notif-action-normal {
background-color: rgba(51, 44, 48, 0.31);
@@ -2248,10 +2246,10 @@ tooltip {
.notif-action-normal:focus,
.notif-action-normal:hover {
- background-color: rgba(65, 57, 62, 0.31); }
+ background-color: rgba(128, 128, 128, 0.3); }
.notif-action-normal:active {
- background-color: rgba(73, 65, 71, 0.31); }
+ background-color: rgba(128, 128, 128, 0.7); }
.notif-action-critical {
background-color: #654f60;
diff --git a/.config/ags/widgets/cheatsheet/keybinds.js b/.config/ags/widgets/cheatsheet/keybinds.js
index 1ad7e05df..589688260 100644
--- a/.config/ags/widgets/cheatsheet/keybinds.js
+++ b/.config/ags/widgets/cheatsheet/keybinds.js
@@ -38,7 +38,7 @@ export const Keybinds = () => Widget.Box({
children: category.binds.map((keybinds, i) => Widget.Box({ // Binds
vertical: false,
children: keybinds.keys.map((key, i) => Widget.Label({ // Specific keys
- className: `${key == 'OR' || key == '+' ? 'cheatsheet-key-notkey' : 'cheatsheet-key'} txt-small`,
+ className: `${['OR', '+'].includes(key) ? 'cheatsheet-key-notkey' : 'cheatsheet-key'} txt-small`,
label: key,
}))
}))
diff --git a/.config/ags/widgets/onscreenkeyboard/onscreenkeyboard.js b/.config/ags/widgets/onscreenkeyboard/onscreenkeyboard.js
index a347408f9..c0d1c62b3 100644
--- a/.config/ags/widgets/onscreenkeyboard/onscreenkeyboard.js
+++ b/.config/ags/widgets/onscreenkeyboard/onscreenkeyboard.js
@@ -83,7 +83,7 @@ const keyboardItself = (kbJson) => {
children: row.map(key => {
return Button({
className: `osk-key osk-key-${key.shape}`,
- hexpand: (key.shape == "space" || key.shape == "expand"),
+ hexpand: ["space", "expand"].includes(key.shape),
label: key.label,
setup: (button) => {
let pressed = false;
diff --git a/.config/ags/widgets/overview/overview.js b/.config/ags/widgets/overview/overview.js
index a32421eae..e47a2c8f5 100644
--- a/.config/ags/widgets/overview/overview.js
+++ b/.config/ags/widgets/overview/overview.js
@@ -40,8 +40,6 @@ const searchPromptTexts = [
'Type to search',
]
-const overviewTick = Variable(false);
-
function truncateTitle(str) {
let lastDash = -1;
let found = -1; // 0: em dash, 1: en dash, 2: minus, 3: vertical bar, 4: middle dot
@@ -108,7 +106,6 @@ const ContextWorkspaceArray = ({ label, actionFunc, thisWorkspace }) => Widget.M
button.connect("activate", () => {
// execAsync([`${onClickBinary}`, `${thisWorkspace}`, `${i}`]).catch(print);
actionFunc(thisWorkspace, i);
- overviewTick.value = !overviewTick.value;
});
submenu.append(button);
}
@@ -247,7 +244,6 @@ const 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) => {
- overviewTick.value = !overviewTick.value;
Hyprland.sendMessage(`dispatch movetoworkspacesilent ${index},address:${data.get_text()}`)
});
},
@@ -298,6 +294,7 @@ const arr = (s, n) => {
const OverviewRow = ({ startWorkspace, workspaces, windowName = 'overview' }) => Widget.Box({
children: arr(startWorkspace, workspaces).map(workspace),
properties: [['update', box => {
+ if (!App.getWindow(windowName).visible) return;
execAsync('hyprctl -j clients').then(clients => {
const json = JSON.parse(clients);
const children = box.get_children();
@@ -308,19 +305,18 @@ const OverviewRow = ({ startWorkspace, workspaces, windowName = 'overview' }) =>
}).catch(print);
}]],
- setup: (box) => box._update(box),
- connections: [
- // Update on change
- [overviewTick, box => { if (!App.getWindow(windowName).visible) return; Utils.timeout(2, () => box._update(box)); }],
- [Hyprland, box => { if (!App.getWindow(windowName).visible) return; box._update(box); }, 'client-added'],
- [Hyprland, box => { if (!App.getWindow(windowName).visible) return; box._update(box); }, 'client-removed'],
- // Update on show
- [App, (box, name, visible) => { // Update on open
- if (name == 'overview' && visible) {
- box._update(box);
- }
- }],
- ],
+ setup: (box) => {
+ box
+ .hook(Hyprland, (box, name, data) => {
+ if (["changefloatingmode", "movewindow"].includes(name))
+ box._update(box);
+ }, 'event')
+ .hook(Hyprland, (box) => box._update(box), 'client-added')
+ .hook(Hyprland, (box) => box._update(box), 'client-removed')
+ .hook(App, (box, name, visible) => { // Update on open
+ if (name == 'overview' && visible) box._update(box);
+ })
+ },
});
@@ -393,7 +389,7 @@ export const SearchAndWindows = () => {
const text = self.text;
if (text.length == 0) return;
const isAction = text.startsWith('>');
- const isDir = (entry.text[0] == '/' || entry.text[0] == '~');
+ const isDir = (['/', '~'].includes(entry.text[0]));
if (startsWithNumber(text)) { // Eval on typing is dangerous, this is a workaround
try {
@@ -434,72 +430,68 @@ export const SearchAndWindows = () => {
execAsync(['bash', '-c', `xdg-open 'https://www.google.com/search?q=${text} -site:quora.com' &`]).catch(print); // quora is useless
}
},
- // Actually onChange but this is ta workaround for a bug
- connections: [
- ['notify::text', (entry) => { // This is when you type
- const isAction = entry.text[0] == '>';
- const isDir = (entry.text[0] == '/' || entry.text[0] == '~');
- const children = resultsBox.get_children();
- for (let i = 0; i < children.length; i++) {
- const child = children[i];
- child.destroy();
- }
- // check empty if so then dont do stuff
- if (entry.text == '') {
- resultsRevealer.set_reveal_child(false);
- overviewRevealer.set_reveal_child(true);
- entryPromptRevealer.set_reveal_child(true);
- entryIconRevealer.set_reveal_child(false);
- entry.toggleClassName('overview-search-box-extended', false);
- }
- else {
- const text = entry.text;
- resultsRevealer.set_reveal_child(true);
- overviewRevealer.set_reveal_child(false);
- entryPromptRevealer.set_reveal_child(false);
- entryIconRevealer.set_reveal_child(true);
- entry.toggleClassName('overview-search-box-extended', true);
- _appSearchResults = Applications.query(text);
+ onChange: (entry) => {
+ const isAction = entry.text[0] == '>';
+ const isDir = (['/', '~'].includes(entry.text[0]));
+ const children = resultsBox.get_children();
+ for (let i = 0; i < children.length; i++) {
+ const child = children[i];
+ child.destroy();
+ }
+ // check empty if so then dont do stuff
+ if (entry.text == '') {
+ resultsRevealer.set_reveal_child(false);
+ overviewRevealer.set_reveal_child(true);
+ entryPromptRevealer.set_reveal_child(true);
+ entryIconRevealer.set_reveal_child(false);
+ entry.toggleClassName('overview-search-box-extended', false);
+ return;
+ }
+ const text = entry.text;
+ resultsRevealer.set_reveal_child(true);
+ overviewRevealer.set_reveal_child(false);
+ entryPromptRevealer.set_reveal_child(false);
+ entryIconRevealer.set_reveal_child(true);
+ entry.toggleClassName('overview-search-box-extended', true);
+ _appSearchResults = Applications.query(text);
- // Calculate
- if (startsWithNumber(text)) { // Eval on typing is dangerous, this is a small workaround.
- try {
- const fullResult = eval(text);
- 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();
+ // Calculate
+ if (startsWithNumber(text)) { // Eval on typing is dangerous, this is a small workaround.
+ try {
+ const fullResult = eval(text);
+ 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({
@@ -524,21 +516,37 @@ export const SearchAndWindows = () => {
overviewRevealer,
resultsRevealer,
],
- connections: [
- [App, (_b, name, visible) => {
+ setup: (self) => self
+ .hook(App, (_b, name, visible) => {
if (name == 'overview' && !visible) {
entryPromptRevealer.child.label = searchPromptTexts[Math.floor(Math.random() * searchPromptTexts.length)];
resultsBox.children = [];
entry.set_text('');
}
- }],
- ['key-press-event', (widget, event) => { // Typing
+ })
+ .on('key-press-event', (widget, event) => { // Typing
if (event.get_keyval()[1] >= 32 && event.get_keyval()[1] <= 126 && widget != entry) {
Utils.timeout(1, () => entry.grab_focus());
entry.set_text(entry.text + String.fromCharCode(event.get_keyval()[1]));
entry.set_position(-1);
}
- }],
- ],
+ })
+ ,
+ // connections: [
+ // [App, (_b, name, visible) => {
+ // if (name == 'overview' && !visible) {
+ // entryPromptRevealer.child.label = searchPromptTexts[Math.floor(Math.random() * searchPromptTexts.length)];
+ // resultsBox.children = [];
+ // entry.set_text('');
+ // }
+ // }],
+ // ['key-press-event', (widget, event) => { // Typing
+ // if (event.get_keyval()[1] >= 32 && event.get_keyval()[1] <= 126 && widget != entry) {
+ // Utils.timeout(1, () => entry.grab_focus());
+ // entry.set_text(entry.text + String.fromCharCode(event.get_keyval()[1]));
+ // entry.set_position(-1);
+ // }
+ // }],
+ // ],
});
};
diff --git a/.config/ags/widgets/sideright/notificationlist.js b/.config/ags/widgets/sideright/notificationlist.js
index 6f5b1240d..db65e21de 100644
--- a/.config/ags/widgets/sideright/notificationlist.js
+++ b/.config/ags/widgets/sideright/notificationlist.js
@@ -6,56 +6,103 @@ const { GLib, Gtk } = imports.gi;
import { Service, Utils, Widget } from '../../imports.js';
import Notifications from 'resource:///com/github/Aylur/ags/service/notifications.js';
const { lookUpIcon, timeout } = Utils;
-const { Box, Icon, Scrollable, Label, Button, Revealer } = Widget;
+const { Box, Button, Icon, Label, Revealer, Scrollable, Stack } = Widget;
import { MaterialIcon } from "../../lib/materialicon.js";
import { setupCursorHover } from "../../lib/cursorhover.js";
+import { ConfigToggle, ConfigSegmentedSelection, ConfigGap } from '../../lib/configwidgets.js';
import Notification from "../../lib/notification.js";
-const NotificationList = Box({
- vertical: true,
- vpack: 'start',
- className: 'spacing-v-5-revealer',
- connections: [
- [Notifications, (box, id) => {
- if (box.children.length == 0) {
- Notifications.notifications
- .forEach(n => {
- box.pack_end(Notification({
- notifObject: n,
- isPopup: false,
- }), false, false, 0)
- });
- box.show_all();
- }
- else if (id) {
+export default (props) => {
+ const dndToggle = ConfigToggle({
+ hpack: 'center',
+ icon: 'notifications_paused',
+ name: 'Do not disturb',
+ desc: "Don't pop up notifications",
+ initValue: Notifications.dnd,
+ onChange: (self, newValue) => {
+ Notifications.dnd = newValue;
+ silenceButton.toggleClassName('notif-listaction-btn-enabled', Notifications.dnd);
+ },
+ });
+ const notifEmptyContent = Box({
+ homogeneous: true,
+ children: [Box({
+ vertical: true,
+ vpack: 'center',
+ className: 'txt spacing-v-10',
+ children: [
+ Box({
+ vertical: true,
+ className: 'spacing-v-5',
+ children: [
+ MaterialIcon('notifications_active', 'badonkers'),
+ Label({ label: 'No notifications', className: 'txt-small' }),
+ ]
+ }),
+ dndToggle,
+ ]
+ })]
+ });
+ const notificationList = Box({
+ vertical: true,
+ vpack: 'start',
+ className: 'spacing-v-5-revealer',
+ connections: [
+ [Notifications, (box, id) => {
+ if (box.get_children().length == 0) { // On init there's no notif, or 1st notif
+ Notifications.notifications
+ .forEach(n => {
+ box.pack_end(Notification({
+ notifObject: n,
+ isPopup: false,
+ }), false, false, 0)
+ });
+ box.show_all();
+ return;
+ }
+ // 2nd or later notif
const notif = Notifications.getNotification(id);
-
const NewNotif = Notification({
notifObject: notif,
isPopup: false,
});
-
if (NewNotif) {
box.pack_end(NewNotif, false, false, 0);
box.show_all();
}
- }
- }, 'notified'],
-
- [Notifications, (box, id) => {
- if (!id) return;
- for (const ch of box.children) {
- if (ch._id === id) {
- ch._destroyWithAnims();
+ }, 'notified'],
+
+ [Notifications, (box, id) => {
+ if (!id) return;
+ for (const ch of box.children) {
+ if (ch._id === id) {
+ ch._destroyWithAnims();
+ }
}
- }
- }, 'closed'],
-
- [Notifications, box => box.visible = Notifications.notifications.length > 0],
- ],
-});
-
-export default (props) => {
+ }, 'closed'],
+ ],
+ });
+ const ListActionButton = (icon, name, action) => Button({
+ className: 'notif-listaction-btn',
+ onClicked: action,
+ child: Box({
+ className: 'spacing-h-5',
+ children: [
+ MaterialIcon(icon, 'norm'),
+ Label({
+ className: 'txt-small',
+ label: name,
+ })
+ ]
+ }),
+ setup: setupCursorHover,
+ });
+ const silenceButton = ListActionButton('notifications_paused', 'Silence', (self) => {
+ Notifications.dnd = !Notifications.dnd;
+ dndToggle._toggle(Notifications.dnd)
+ self.toggleClassName('notif-listaction-btn-enabled', Notifications.dnd);
+ });
+ const clearButton = ListActionButton('clear_all', 'Clear', () => Notifications.clear());
const listTitle = Revealer({
revealChild: false,
connections: [[Notifications, (revealer) => {
@@ -63,7 +110,7 @@ export default (props) => {
}]],
child: Box({
vpack: 'start',
- className: 'sidebar-group-invisible txt',
+ className: 'sidebar-group-invisible txt spacing-h-5',
children: [
Label({
hexpand: true,
@@ -71,40 +118,36 @@ export default (props) => {
className: 'txt-title-small',
label: 'Notifications',
}),
- Button({
- className: 'notif-closeall-btn',
- onClicked: () => {
- Notifications.clear();
- },
- child: Box({
- className: 'spacing-h-5',
- children: [
- MaterialIcon('clear_all', 'norm'),
- Label({
- className: 'txt-small',
- label: 'Clear',
- })
- ]
- }),
- setup: button => {
- setupCursorHover(button);
- },
- })
+ silenceButton,
+ clearButton,
]
})
});
- const listContents = Scrollable({
+ const notifList = Scrollable({
hexpand: true,
hscroll: 'never',
vscroll: 'automatic',
child: Box({
vexpand: true,
- children: [NotificationList],
- })
+ // homogeneous: true,
+ children: [notificationList],
+ }),
+ setup: (self) => {
+ const vScrollbar = self.get_vscrollbar();
+ vScrollbar.get_style_context().add_class('sidebar-scrollbar');
+ }
+ });
+ const listContents = Stack({
+ transition: 'crossfade',
+ transitionDuration: 150,
+ items: [
+ ['empty', notifEmptyContent],
+ ['list', notifList]
+ ],
+ setup: (self) => self
+ .hook(Notifications, (self) => self.shown = (Notifications.notifications.length > 0 ? 'list' : 'empty'))
+ ,
});
- listContents.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
- const vScrollbar = listContents.get_vscrollbar();
- vScrollbar.get_style_context().add_class('sidebar-scrollbar');
return Box({
...props,
className: 'sidebar-group-invisible spacing-v-5',
diff --git a/.config/ags/widgets/sideright/quicktoggles.js b/.config/ags/widgets/sideright/quicktoggles.js
index 2f9908eb9..8281f39e2 100644
--- a/.config/ags/widgets/sideright/quicktoggles.js
+++ b/.config/ags/widgets/sideright/quicktoggles.js
@@ -27,7 +27,7 @@ export const ToggleIconWifi = (props = {}) => Widget.Button({
child: NetworkIndicator(),
connections: [
[Network, button => {
- button.toggleClassName('sidebar-button-active', Network.wifi?.internet == 'connected' || Network.wired?.internet == 'connected')
+ button.toggleClassName('sidebar-button-active', [Network.wifi?.internet, Network.wired?.internet].includes('connected'))
}],
[Network, button => {
button.tooltipText = (`${Network.wifi?.ssid} | Right-click to configure` || 'Unknown');
From f3b179ea162243cac5964701b1badddfa271d865 Mon Sep 17 00:00:00 2001
From: clsty
Date: Fri, 5 Jan 2024 06:43:46 +0800
Subject: [PATCH 058/265] Minor fixes on text.
---
install.sh | 19 +++++--------------
1 file changed, 5 insertions(+), 14 deletions(-)
diff --git a/install.sh b/install.sh
index 7e3fbc542..6facf423b 100755
--- a/install.sh
+++ b/install.sh
@@ -12,7 +12,7 @@ function v() {
echo -e "\e[34mDo you want to execute the command shown above? \e[0m"
echo " y = Yes"
echo " e = Exit now"
- echo " s = Skip this command; NOT recommended (may break functions needed by the dot files!)"
+ echo " s = Skip this command; NOT recommended (may break functions needed by the dotfiles!)"
echo " yesforall = yes and don't ask again; NOT recommended unless you really sure"
read -p "Enter here [y/e/s/yesforall]:" p
case $p in
@@ -33,19 +33,10 @@ startask (){
printf "\e[34m[$0]: Hi there!\n"
printf 'This script 1. only works for ArchLinux and Arch-based distros.\n'
printf ' 2. has not been fully tested, use at your own risk.\n'
-printf '\n'
printf "\e[31m"
-printf "=============\n"
-printf "PLEASE CONFIRM\n"
-printf "YOU HAVE\n"
-printf " \"$HOME/.config\"\n"
-printf " AND\n"
-printf " \"$HOME/.local\"\n"
-printf "ALREADY BACKUPED\n"
-printf "BY YOURSELF!\n"
-printf "=============\n"
-printf "\n\e[97m"
-printf "Enter the capital \"YES\" to continue:"
+printf "Please CONFIRM that you HAVE ALREADY BACKED UP \"$HOME/.config/\" and \"$HOME/.local/\"\n folders!\n"
+printf "\e[97m"
+printf "Enter the capital \"YES\" (without quotes) to continue: "
read -p " " p
case $p in "YES")sleep 0;; *)exit;;esac
printf '\n'
@@ -114,7 +105,7 @@ printf '\e[36m3. Copying\e[97m\n'
v mkdir -p "$HOME/.local/bin" "$HOME/.local/share"
# `--delete' for rsync to make sure that
-# original dot files and new ones in the SAME DIRECTORY
+# original dotfiles and new ones in the SAME DIRECTORY
# (eg. in ~/.config/hypr) won't be mixed together
for i in .config/*
From f8631ae087ae5069ff6851e52a90e2a3c15fa8d6 Mon Sep 17 00:00:00 2001
From: clsty
Date: Fri, 5 Jan 2024 06:45:19 +0800
Subject: [PATCH 059/265] Minor typo fix.
---
install.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/install.sh b/install.sh
index 6facf423b..d2b3064b4 100755
--- a/install.sh
+++ b/install.sh
@@ -34,7 +34,7 @@ printf "\e[34m[$0]: Hi there!\n"
printf 'This script 1. only works for ArchLinux and Arch-based distros.\n'
printf ' 2. has not been fully tested, use at your own risk.\n'
printf "\e[31m"
-printf "Please CONFIRM that you HAVE ALREADY BACKED UP \"$HOME/.config/\" and \"$HOME/.local/\"\n folders!\n"
+printf "Please CONFIRM that you HAVE ALREADY BACKED UP \"$HOME/.config/\" and \"$HOME/.local/\" folders!\n"
printf "\e[97m"
printf "Enter the capital \"YES\" (without quotes) to continue: "
read -p " " p
From 20892e9df1acd03f19dcc46c442cf36f883acaa5 Mon Sep 17 00:00:00 2001
From: clsty
Date: Fri, 5 Jan 2024 06:47:25 +0800
Subject: [PATCH 060/265] Minor typo fix.
---
install.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/install.sh b/install.sh
index d2b3064b4..3b80e7720 100755
--- a/install.sh
+++ b/install.sh
@@ -36,7 +36,7 @@ printf ' 2. has not been fully tested, use at your own risk.\n'
printf "\e[31m"
printf "Please CONFIRM that you HAVE ALREADY BACKED UP \"$HOME/.config/\" and \"$HOME/.local/\" folders!\n"
printf "\e[97m"
-printf "Enter the capital \"YES\" (without quotes) to continue: "
+printf "Enter capital \"YES\" (without quotes) to continue: "
read -p " " p
case $p in "YES")sleep 0;; *)exit;;esac
printf '\n'
From 92d98a1a43ae9455ceee4908bb241c772afaefe1 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 5 Jan 2024 08:22:07 +0700
Subject: [PATCH 061/265] Update overview.js
---
.config/ags/widgets/overview/overview.js | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/.config/ags/widgets/overview/overview.js b/.config/ags/widgets/overview/overview.js
index e47a2c8f5..7ae4fff05 100644
--- a/.config/ags/widgets/overview/overview.js
+++ b/.config/ags/widgets/overview/overview.js
@@ -307,10 +307,10 @@ const OverviewRow = ({ startWorkspace, workspaces, windowName = 'overview' }) =>
}]],
setup: (box) => {
box
- .hook(Hyprland, (box, name, data) => {
- if (["changefloatingmode", "movewindow"].includes(name))
- box._update(box);
- }, 'event')
+ // .hook(Hyprland, (box, name, data) => { // idk, does this make it lag occasionally?
+ // if (["changefloatingmode", "movewindow"].includes(name))
+ // box._update(box);
+ // }, 'event')
.hook(Hyprland, (box) => box._update(box), 'client-added')
.hook(Hyprland, (box) => box._update(box), 'client-removed')
.hook(App, (box, name, visible) => { // Update on open
From 26a0e34b8be2ee0e22d74207049a660e33f4722c Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 5 Jan 2024 08:22:39 +0700
Subject: [PATCH 062/265] music controls actions (#172)
---
.config/ags/widgets/bar/music.js | 4 ++--
.config/ags/widgets/indicators/musiccontrols.js | 10 ++++++----
.config/ags/widgets/sideright/quicktoggles.js | 2 ++
3 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/.config/ags/widgets/bar/music.js b/.config/ags/widgets/bar/music.js
index f72be6a97..7ffecfe97 100644
--- a/.config/ags/widgets/bar/music.js
+++ b/.config/ags/widgets/bar/music.js
@@ -30,12 +30,12 @@ const TrackProgress = () => {
})
}
-export const ModuleMusic = () => Widget.EventBox({
+export const ModuleMusic = () => Widget.EventBox({ // TODO: use cairo to make button bounce smaller on click
onScrollUp: () => Hyprland.sendMessage(`dispatch workspace -1`),
onScrollDown: () => Hyprland.sendMessage(`dispatch workspace +1`),
onPrimaryClickRelease: () => showMusicControls.setValue(!showMusicControls.value),
onSecondaryClickRelease: () => execAsync(['bash', '-c', 'playerctl next || playerctl position `bc <<< "100 * $(playerctl metadata mpris:length) / 1000000 / 100"` &']),
- onMiddleClickRelease: () => Mpris.getPlayer('')?.playPause(),
+ onMiddleClickRelease: () => execAsync('playerctl play-pause').catch(print),
child: Widget.Box({
className: 'bar-group-margin bar-sides',
children: [
diff --git a/.config/ags/widgets/indicators/musiccontrols.js b/.config/ags/widgets/indicators/musiccontrols.js
index 1c7a65e33..e772868ca 100644
--- a/.config/ags/widgets/indicators/musiccontrols.js
+++ b/.config/ags/widgets/indicators/musiccontrols.js
@@ -200,6 +200,7 @@ const TrackControls = ({ player, ...rest }) => Widget.Revealer({
children: [
Button({
className: 'osd-music-controlbtn',
+ onClicked: () => execAsync('playerctl previous').catch(print),
child: Label({
className: 'icon-material osd-music-controlbtn-txt',
label: 'skip_previous',
@@ -207,6 +208,9 @@ const TrackControls = ({ player, ...rest }) => Widget.Revealer({
}),
Button({
className: 'osd-music-controlbtn',
+ onClicked: () => execAsync(['bash', '-c', 'playerctl next || playerctl position `bc <<< "100 * $(playerctl metadata mpris:length) / 1000000 / 100"`'])
+ .catch(print)
+ ,
child: Label({
className: 'icon-material osd-music-controlbtn-txt',
label: 'skip_next',
@@ -297,9 +301,7 @@ const PlayState = ({ player }) => {
overlays: [
Widget.Button({
className: 'osd-music-playstate-btn',
- onClicked: () => {
- Mpris.getPlayer().playPause()
- },
+ onClicked: () => { console.log('uwu'); execAsync('playerctl play-pause').catch(print) },
child: Widget.Label({
justification: 'center',
hpack: 'fill',
@@ -380,7 +382,7 @@ export default () => MarginRevealer({
}),
connections: [
[showMusicControls, (revealer) => {
- if(showMusicControls.value) revealer._show();
+ if (showMusicControls.value) revealer._show();
else revealer._hide();
}],
],
diff --git a/.config/ags/widgets/sideright/quicktoggles.js b/.config/ags/widgets/sideright/quicktoggles.js
index 8281f39e2..f7e7e1a0f 100644
--- a/.config/ags/widgets/sideright/quicktoggles.js
+++ b/.config/ags/widgets/sideright/quicktoggles.js
@@ -23,6 +23,7 @@ export const ToggleIconWifi = (props = {}) => Widget.Button({
onClicked: Network.toggleWifi,
onSecondaryClickRelease: () => {
execAsync(['bash', '-c', 'XDG_CURRENT_DESKTOP="gnome" gnome-control-center wifi', '&']);
+ App.closeWindow('sideright');
},
child: NetworkIndicator(),
connections: [
@@ -49,6 +50,7 @@ export const ToggleIconBluetooth = (props = {}) => Widget.Button({
},
onSecondaryClickRelease: () => {
execAsync(['bash', '-c', 'blueberry &']);
+ App.closeWindow('sideright');
},
child: BluetoothIndicator(),
connections: [
From ba195e2ec264956725eeff9dc34bfc5486d924ef Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 5 Jan 2024 15:42:19 +0700
Subject: [PATCH 063/265] music: no [FREE DOWNLOAD]
---
.config/ags/widgets/bar/music.js | 6 +++---
.config/ags/widgets/indicators/musiccontrols.js | 8 ++++----
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/.config/ags/widgets/bar/music.js b/.config/ags/widgets/bar/music.js
index 7ffecfe97..b8c9dbee8 100644
--- a/.config/ags/widgets/bar/music.js
+++ b/.config/ags/widgets/bar/music.js
@@ -7,9 +7,9 @@ import { AnimatedCircProg } from "../../lib/animatedcircularprogress.js";
import { showMusicControls } from '../../variables.js';
function trimTrackTitle(title) {
- // Removes stuff likeใC93ใ at beginning
- var pattern = /ใ[^ใ]*ใ/;
- var cleanedTitle = title.replace(pattern, '');
+ var cleanedTitle = title;
+ cleanedTitle = cleanedTitle.replace(/ใ[^ใ]*ใ/, ''); // Remove stuff likeใC93ใ at beginning
+ cleanedTitle = cleanedTitle.replace(/\[FREE DOWNLOAD\]/g, ''); // Remove F-777's [FREE DOWNLOAD]
return cleanedTitle.trim();
}
diff --git a/.config/ags/widgets/indicators/musiccontrols.js b/.config/ags/widgets/indicators/musiccontrols.js
index e772868ca..c6b3d2bb7 100644
--- a/.config/ags/widgets/indicators/musiccontrols.js
+++ b/.config/ags/widgets/indicators/musiccontrols.js
@@ -75,9 +75,9 @@ function getTrackfont(player) {
return DEFAULT_MUSIC_FONT;
}
function trimTrackTitle(title) {
- // Removes stuff likeใC93ใ at beginning
- var pattern = /ใ[^ใ]*ใ/;
- var cleanedTitle = title.replace(pattern, '');
+ var cleanedTitle = title;
+ cleanedTitle = cleanedTitle.replace(/ใ[^ใ]*ใ/, ''); // Remove stuff likeใC93ใ at beginning
+ cleanedTitle = cleanedTitle.replace(/\[FREE DOWNLOAD\]/g, ''); // Remove F-777's [FREE DOWNLOAD]
return cleanedTitle.trim();
}
@@ -301,7 +301,7 @@ const PlayState = ({ player }) => {
overlays: [
Widget.Button({
className: 'osd-music-playstate-btn',
- onClicked: () => { console.log('uwu'); execAsync('playerctl play-pause').catch(print) },
+ onClicked: () => execAsync('playerctl play-pause').catch(print),
child: Widget.Label({
justification: 'center',
hpack: 'fill',
From bc835043daa64bd11d1542353731cddaf891c4ac Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 5 Jan 2024 15:42:55 +0700
Subject: [PATCH 064/265] workspace widget: even faster
---
.config/ags/widgets/bar/workspaces.js | 190 ++++++++++++++------------
1 file changed, 101 insertions(+), 89 deletions(-)
diff --git a/.config/ags/widgets/bar/workspaces.js b/.config/ags/widgets/bar/workspaces.js
index b3be638f8..01e4a7ce6 100644
--- a/.config/ags/widgets/bar/workspaces.js
+++ b/.config/ags/widgets/bar/workspaces.js
@@ -16,14 +16,11 @@ const dummyOccupiedWs = Box({ className: 'bar-ws bar-ws-occupied' }); // Not sho
const WorkspaceContents = (count = 10) => {
return DrawingArea({
properties: [
+ ['initialized', false],
['workspaceMask', 0],
- ],
- css: `transition: 500ms cubic-bezier(0.1, 1, 0, 1);`,
- setup: (area) => area
- .hook(Hyprland.active.workspace, (area) =>
- area.setCss(`font-size: ${Hyprland.active.workspace.id}px;`)
- )
- .hook(Hyprland, (area) => {
+ ['updateMask', (self) => {
+ if(self._initialized) return; // We only need this to run once
+ console.log('update dayo')
const workspaces = Hyprland.workspaces;
let workspaceMask = 0;
for (let i = 0; i < workspaces.length; i++) {
@@ -34,95 +31,110 @@ const WorkspaceContents = (count = 10) => {
workspaceMask |= (1 << ws.id);
}
}
- area._workspaceMask = workspaceMask;
- }, 'notify::workspaces')
- .on('draw', Lang.bind(area, (area, cr) => {
- const allocation = area.get_allocation();
- const { width, height } = allocation;
+ self._workspaceMask = workspaceMask;
+ self._initialized = true;
+ }],
+ ['toggleMask', (self, occupied, name) => {
+ if (occupied) self._workspaceMask |= (1 << parseInt(name));
+ else self._workspaceMask &= ~(1 << parseInt(name));
+ }]
+ ],
+ css: `transition: 90ms cubic-bezier(0.1, 1, 0, 1);`,
+ setup: (area) => {
+ area
+ .hook(Hyprland.active.workspace, (area) =>
+ area.setCss(`font-size: ${Hyprland.active.workspace.id}px;`)
+ )
+ .hook(Hyprland, (self) => self._updateMask(self), 'notify::workspaces')
+ .hook(Hyprland, (self, name) => self._toggleMask(self, true, name), 'workspace-added')
+ .hook(Hyprland, (self, name) => self._toggleMask(self, false, name), 'workspace-removed')
+ .on('draw', Lang.bind(area, (area, cr) => {
+ const allocation = area.get_allocation();
+ const { width, height } = allocation;
- const workspaceStyleContext = dummyWs.get_style_context();
- const workspaceDiameter = workspaceStyleContext.get_property('min-width', Gtk.StateFlags.NORMAL);
- const workspaceRadius = workspaceDiameter / 2;
- const workspaceFontSize = workspaceStyleContext.get_property('font-size', Gtk.StateFlags.NORMAL) / 4 * 3;
- const workspaceFontFamily = workspaceStyleContext.get_property('font-family', Gtk.StateFlags.NORMAL);
- const wsbg = workspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
- const wsfg = workspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
+ const workspaceStyleContext = dummyWs.get_style_context();
+ const workspaceDiameter = workspaceStyleContext.get_property('min-width', Gtk.StateFlags.NORMAL);
+ const workspaceRadius = workspaceDiameter / 2;
+ const workspaceFontSize = workspaceStyleContext.get_property('font-size', Gtk.StateFlags.NORMAL) / 4 * 3;
+ const workspaceFontFamily = workspaceStyleContext.get_property('font-family', Gtk.StateFlags.NORMAL);
+ const wsbg = workspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
+ const wsfg = workspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
- const occupiedWorkspaceStyleContext = dummyOccupiedWs.get_style_context();
- const occupiedbg = occupiedWorkspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
- const occupiedfg = occupiedWorkspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
+ const occupiedWorkspaceStyleContext = dummyOccupiedWs.get_style_context();
+ const occupiedbg = occupiedWorkspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
+ const occupiedfg = occupiedWorkspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
- const activeWorkspaceStyleContext = dummyActiveWs.get_style_context();
- const activebg = activeWorkspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
- const activefg = activeWorkspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
- area.set_size_request(workspaceDiameter * count, -1);
- const widgetStyleContext = area.get_style_context();
- const activeWs = widgetStyleContext.get_property('font-size', Gtk.StateFlags.NORMAL);
+ const activeWorkspaceStyleContext = dummyActiveWs.get_style_context();
+ const activebg = activeWorkspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
+ const activefg = activeWorkspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
+ area.set_size_request(workspaceDiameter * count, -1);
+ const widgetStyleContext = area.get_style_context();
+ const activeWs = widgetStyleContext.get_property('font-size', Gtk.StateFlags.NORMAL);
- const activeWsCenterX = -(workspaceDiameter / 2) + (workspaceDiameter * activeWs);
- const activeWsCenterY = height / 2;
+ const activeWsCenterX = -(workspaceDiameter / 2) + (workspaceDiameter * activeWs);
+ const activeWsCenterY = height / 2;
- // Font
- const layout = PangoCairo.create_layout(cr);
- const fontDesc = Pango.font_description_from_string(`${workspaceFontFamily[0]} ${workspaceFontSize}`);
- layout.set_font_description(fontDesc);
- cr.setAntialias(Cairo.Antialias.BEST);
- // Get kinda min radius for number indicators
- layout.set_text("0".repeat(count.toString().length), -1);
- const [layoutWidth, layoutHeight] = layout.get_pixel_size();
- const indicatorRadius = Math.max(layoutWidth, layoutHeight) / 2 * 1.2; // a bit smaller than sqrt(2)*radius
- const indicatorGap = workspaceRadius - indicatorRadius;
-
- // Draw workspace numbers
- for (let i = 1; i <= count; i++) {
- if (area._workspaceMask & (1 << i)) {
- // Draw bg highlight
- cr.setSourceRGBA(occupiedbg.red, occupiedbg.green, occupiedbg.blue, occupiedbg.alpha);
- const wsCenterX = -(workspaceRadius) + (workspaceDiameter * i);
- const wsCenterY = height / 2;
- if (!(area._workspaceMask & (1 << (i - 1)))) { // Left
- cr.arc(wsCenterX, wsCenterY, workspaceRadius, 0.5 * Math.PI, 1.5 * Math.PI);
- cr.fill();
- }
- else {
- cr.rectangle(wsCenterX - workspaceRadius, wsCenterY - workspaceRadius, workspaceRadius, workspaceRadius * 2)
- cr.fill();
- }
- if (!(area._workspaceMask & (1 << (i + 1)))) { // Right
- cr.arc(wsCenterX, wsCenterY, workspaceRadius, -0.5 * Math.PI, 0.5 * Math.PI);
- cr.fill();
- }
- else {
- cr.rectangle(wsCenterX, wsCenterY - workspaceRadius, workspaceRadius, workspaceRadius * 2)
- cr.fill();
- }
-
- // Set color for text
- cr.setSourceRGBA(occupiedfg.red, occupiedfg.green, occupiedfg.blue, occupiedfg.alpha);
- }
- else
- cr.setSourceRGBA(wsfg.red, wsfg.green, wsfg.blue, wsfg.alpha);
- layout.set_text(`${i}`, -1);
+ // Font
+ const layout = PangoCairo.create_layout(cr);
+ const fontDesc = Pango.font_description_from_string(`${workspaceFontFamily[0]} ${workspaceFontSize}`);
+ layout.set_font_description(fontDesc);
+ cr.setAntialias(Cairo.Antialias.BEST);
+ // Get kinda min radius for number indicators
+ layout.set_text("0".repeat(count.toString().length), -1);
const [layoutWidth, layoutHeight] = layout.get_pixel_size();
- const x = -workspaceRadius + (workspaceDiameter * i) - (layoutWidth / 2);
- const y = (height - layoutHeight) / 2;
- cr.moveTo(x, y);
- // cr.showText(text);
- PangoCairo.show_layout(cr, layout);
- cr.stroke();
- }
+ const indicatorRadius = Math.max(layoutWidth, layoutHeight) / 2 * 1.2; // a bit smaller than sqrt(2)*radius
+ const indicatorGap = workspaceRadius - indicatorRadius;
- // Draw active ws
- // base
- cr.setSourceRGBA(activebg.red, activebg.green, activebg.blue, activebg.alpha);
- cr.arc(activeWsCenterX, activeWsCenterY, indicatorRadius, 0, 2 * Math.PI);
- cr.fill();
- // inner decor
- cr.setSourceRGBA(activefg.red, activefg.green, activefg.blue, activefg.alpha);
- cr.arc(activeWsCenterX, activeWsCenterY, indicatorRadius * 0.2, 0, 2 * Math.PI);
- cr.fill();
- }))
- ,
+ // Draw workspace numbers
+ for (let i = 1; i <= count; i++) {
+ if (area._workspaceMask & (1 << i)) {
+ // Draw bg highlight
+ cr.setSourceRGBA(occupiedbg.red, occupiedbg.green, occupiedbg.blue, occupiedbg.alpha);
+ const wsCenterX = -(workspaceRadius) + (workspaceDiameter * i);
+ const wsCenterY = height / 2;
+ if (!(area._workspaceMask & (1 << (i - 1)))) { // Left
+ cr.arc(wsCenterX, wsCenterY, workspaceRadius, 0.5 * Math.PI, 1.5 * Math.PI);
+ cr.fill();
+ }
+ else {
+ cr.rectangle(wsCenterX - workspaceRadius, wsCenterY - workspaceRadius, workspaceRadius, workspaceRadius * 2)
+ cr.fill();
+ }
+ if (!(area._workspaceMask & (1 << (i + 1)))) { // Right
+ cr.arc(wsCenterX, wsCenterY, workspaceRadius, -0.5 * Math.PI, 0.5 * Math.PI);
+ cr.fill();
+ }
+ else {
+ cr.rectangle(wsCenterX, wsCenterY - workspaceRadius, workspaceRadius, workspaceRadius * 2)
+ cr.fill();
+ }
+
+ // Set color for text
+ cr.setSourceRGBA(occupiedfg.red, occupiedfg.green, occupiedfg.blue, occupiedfg.alpha);
+ }
+ else
+ cr.setSourceRGBA(wsfg.red, wsfg.green, wsfg.blue, wsfg.alpha);
+ layout.set_text(`${i}`, -1);
+ const [layoutWidth, layoutHeight] = layout.get_pixel_size();
+ const x = -workspaceRadius + (workspaceDiameter * i) - (layoutWidth / 2);
+ const y = (height - layoutHeight) / 2;
+ cr.moveTo(x, y);
+ // cr.showText(text);
+ PangoCairo.show_layout(cr, layout);
+ cr.stroke();
+ }
+
+ // Draw active ws
+ // base
+ cr.setSourceRGBA(activebg.red, activebg.green, activebg.blue, activebg.alpha);
+ cr.arc(activeWsCenterX, activeWsCenterY, indicatorRadius, 0, 2 * Math.PI);
+ cr.fill();
+ // inner decor
+ cr.setSourceRGBA(activefg.red, activefg.green, activefg.blue, activefg.alpha);
+ cr.arc(activeWsCenterX, activeWsCenterY, indicatorRadius * 0.2, 0, 2 * Math.PI);
+ cr.fill();
+ }));
+ },
})
}
From f2ddc977933f4cb8c8e96e27b9558fece0ccfb33 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 5 Jan 2024 17:17:39 +0700
Subject: [PATCH 065/265] cleaner gradience preset (#111)
---
.../scripts/templates/gradience/preset_template.json | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/.config/ags/scripts/templates/gradience/preset_template.json b/.config/ags/scripts/templates/gradience/preset_template.json
index 0f2bc011f..aeb57489c 100644
--- a/.config/ags/scripts/templates/gradience/preset_template.json
+++ b/.config/ags/scripts/templates/gradience/preset_template.json
@@ -118,7 +118,12 @@
"thumbnail_bg_color": "#1a1b26",
"thumbnail_fg_color": "#AEE5FA",
"shade_color": "rgba(0, 0, 0, 0.36)",
- "scrollbar_outline_color": "rgba(0, 0, 0, 0.5)"
+ "scrollbar_outline_color": "rgba(0, 0, 0, 0.5)",
+
+ "sidebar_bg_color": "@window_bg_color",
+ "sidebar_fg_color":"@window_fg_color",
+ "sidebar_border_color": "@sidebar_bg_color",
+ "sidebar_backdrop_color": "@sidebar_bg_color"
},
"palette": {
"blue_": {},
@@ -132,8 +137,8 @@
"dark_": {}
},
"custom_css": {
- "gtk4": "@define-color sidebar_bg_color @window_bg_color; @define-color sidebar_fg_color @window_fg_color; @define-color sidebar_border_color @window_bg_color; @define-color sidebar_backdrop_color @window_bg_color; ",
- "gtk3": "@define-color sidebar_bg_color @window_bg_color; @define-color sidebar_fg_color @window_fg_color; @define-color sidebar_border_color @window_bg_color; @define-color sidebar_backdrop_color @window_bg_color; "
+ "gtk4": "",
+ "gtk3": ""
},
"plugins": {}
}
\ No newline at end of file
From 14c4684669a0a027e8927630ec2ec7ad4436e52e Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 5 Jan 2024 22:48:51 +0700
Subject: [PATCH 066/265] ags: sync
---
.config/ags/scripts/record-script.sh | 2 +-
.config/ags/scss/_bar.scss | 5 +-
.config/ags/widgets/bar/workspaces.js | 178 +++++++++++++-------------
3 files changed, 90 insertions(+), 95 deletions(-)
diff --git a/.config/ags/scripts/record-script.sh b/.config/ags/scripts/record-script.sh
index 904b98f80..83c2df3fa 100755
--- a/.config/ags/scripts/record-script.sh
+++ b/.config/ags/scripts/record-script.sh
@@ -17,6 +17,6 @@ if [[ "$(pidof wf-recorder)" == "" ]]; then
wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t --geometry "$(slurp)" & disown
fi
else
- /usr/bin/kill --signal SIGINT wf-recorder
+ kill --signal SIGINT wf-recorder
notify-send "Recording Stopped" "Stopped" -a 'record-script.sh'
fi
diff --git a/.config/ags/scss/_bar.scss b/.config/ags/scss/_bar.scss
index 8e58a313e..840142d99 100644
--- a/.config/ags/scss/_bar.scss
+++ b/.config/ags/scss/_bar.scss
@@ -4,10 +4,7 @@
$black: black;
$white: white;
$bar_ws_width: 1.774rem;
-$bar_subgroup_bg: mix($surfaceVariant, $primary, 89%);
-@if $darkmode ==true {
- $bar_subgroup_bg: $surfaceVariant;
-}
+$bar_subgroup_bg: $surfaceVariant;
@mixin bar-group-rounding {
@include small-rounding;
diff --git a/.config/ags/widgets/bar/workspaces.js b/.config/ags/widgets/bar/workspaces.js
index 01e4a7ce6..d1cd15378 100644
--- a/.config/ags/widgets/bar/workspaces.js
+++ b/.config/ags/widgets/bar/workspaces.js
@@ -15,12 +15,12 @@ const dummyOccupiedWs = Box({ className: 'bar-ws bar-ws-occupied' }); // Not sho
// Font size = workspace id
const WorkspaceContents = (count = 10) => {
return DrawingArea({
+ css: `transition: 90ms cubic-bezier(0.1, 1, 0, 1);`,
properties: [
['initialized', false],
['workspaceMask', 0],
['updateMask', (self) => {
- if(self._initialized) return; // We only need this to run once
- console.log('update dayo')
+ if (self._initialized) return; // We only need this to run once
const workspaces = Hyprland.workspaces;
let workspaceMask = 0;
for (let i = 0; i < workspaces.length; i++) {
@@ -39,102 +39,100 @@ const WorkspaceContents = (count = 10) => {
else self._workspaceMask &= ~(1 << parseInt(name));
}]
],
- css: `transition: 90ms cubic-bezier(0.1, 1, 0, 1);`,
- setup: (area) => {
- area
- .hook(Hyprland.active.workspace, (area) =>
- area.setCss(`font-size: ${Hyprland.active.workspace.id}px;`)
- )
- .hook(Hyprland, (self) => self._updateMask(self), 'notify::workspaces')
- .hook(Hyprland, (self, name) => self._toggleMask(self, true, name), 'workspace-added')
- .hook(Hyprland, (self, name) => self._toggleMask(self, false, name), 'workspace-removed')
- .on('draw', Lang.bind(area, (area, cr) => {
- const allocation = area.get_allocation();
- const { width, height } = allocation;
+ setup: (area) => area
+ .hook(Hyprland.active.workspace, (area) =>
+ area.setCss(`font-size: ${Hyprland.active.workspace.id}px;`)
+ )
+ .hook(Hyprland, (self) => self._updateMask(self), 'notify::workspaces')
+ .hook(Hyprland, (self, name) => self._toggleMask(self, true, name), 'workspace-added')
+ .hook(Hyprland, (self, name) => self._toggleMask(self, false, name), 'workspace-removed')
+ .on('draw', Lang.bind(area, (area, cr) => {
+ const allocation = area.get_allocation();
+ const { width, height } = allocation;
- const workspaceStyleContext = dummyWs.get_style_context();
- const workspaceDiameter = workspaceStyleContext.get_property('min-width', Gtk.StateFlags.NORMAL);
- const workspaceRadius = workspaceDiameter / 2;
- const workspaceFontSize = workspaceStyleContext.get_property('font-size', Gtk.StateFlags.NORMAL) / 4 * 3;
- const workspaceFontFamily = workspaceStyleContext.get_property('font-family', Gtk.StateFlags.NORMAL);
- const wsbg = workspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
- const wsfg = workspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
+ const workspaceStyleContext = dummyWs.get_style_context();
+ const workspaceDiameter = workspaceStyleContext.get_property('min-width', Gtk.StateFlags.NORMAL);
+ const workspaceRadius = workspaceDiameter / 2;
+ const workspaceFontSize = workspaceStyleContext.get_property('font-size', Gtk.StateFlags.NORMAL) / 4 * 3;
+ const workspaceFontFamily = workspaceStyleContext.get_property('font-family', Gtk.StateFlags.NORMAL);
+ const wsbg = workspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
+ const wsfg = workspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
- const occupiedWorkspaceStyleContext = dummyOccupiedWs.get_style_context();
- const occupiedbg = occupiedWorkspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
- const occupiedfg = occupiedWorkspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
+ const occupiedWorkspaceStyleContext = dummyOccupiedWs.get_style_context();
+ const occupiedbg = occupiedWorkspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
+ const occupiedfg = occupiedWorkspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
- const activeWorkspaceStyleContext = dummyActiveWs.get_style_context();
- const activebg = activeWorkspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
- const activefg = activeWorkspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
- area.set_size_request(workspaceDiameter * count, -1);
- const widgetStyleContext = area.get_style_context();
- const activeWs = widgetStyleContext.get_property('font-size', Gtk.StateFlags.NORMAL);
+ const activeWorkspaceStyleContext = dummyActiveWs.get_style_context();
+ const activebg = activeWorkspaceStyleContext.get_property('background-color', Gtk.StateFlags.NORMAL);
+ const activefg = activeWorkspaceStyleContext.get_property('color', Gtk.StateFlags.NORMAL);
+ area.set_size_request(workspaceDiameter * count, -1);
+ const widgetStyleContext = area.get_style_context();
+ const activeWs = widgetStyleContext.get_property('font-size', Gtk.StateFlags.NORMAL);
- const activeWsCenterX = -(workspaceDiameter / 2) + (workspaceDiameter * activeWs);
- const activeWsCenterY = height / 2;
+ const activeWsCenterX = -(workspaceDiameter / 2) + (workspaceDiameter * activeWs);
+ const activeWsCenterY = height / 2;
- // Font
- const layout = PangoCairo.create_layout(cr);
- const fontDesc = Pango.font_description_from_string(`${workspaceFontFamily[0]} ${workspaceFontSize}`);
- layout.set_font_description(fontDesc);
- cr.setAntialias(Cairo.Antialias.BEST);
- // Get kinda min radius for number indicators
- layout.set_text("0".repeat(count.toString().length), -1);
- const [layoutWidth, layoutHeight] = layout.get_pixel_size();
- const indicatorRadius = Math.max(layoutWidth, layoutHeight) / 2 * 1.2; // a bit smaller than sqrt(2)*radius
- const indicatorGap = workspaceRadius - indicatorRadius;
+ // Font
+ const layout = PangoCairo.create_layout(cr);
+ const fontDesc = Pango.font_description_from_string(`${workspaceFontFamily[0]} ${workspaceFontSize}`);
+ layout.set_font_description(fontDesc);
+ cr.setAntialias(Cairo.Antialias.BEST);
+ // Get kinda min radius for number indicators
+ layout.set_text("0".repeat(count.toString().length), -1);
+ const [layoutWidth, layoutHeight] = layout.get_pixel_size();
+ const indicatorRadius = Math.max(layoutWidth, layoutHeight) / 2 * 1.2; // a bit smaller than sqrt(2)*radius
+ const indicatorGap = workspaceRadius - indicatorRadius;
- // Draw workspace numbers
- for (let i = 1; i <= count; i++) {
- if (area._workspaceMask & (1 << i)) {
- // Draw bg highlight
- cr.setSourceRGBA(occupiedbg.red, occupiedbg.green, occupiedbg.blue, occupiedbg.alpha);
- const wsCenterX = -(workspaceRadius) + (workspaceDiameter * i);
- const wsCenterY = height / 2;
- if (!(area._workspaceMask & (1 << (i - 1)))) { // Left
- cr.arc(wsCenterX, wsCenterY, workspaceRadius, 0.5 * Math.PI, 1.5 * Math.PI);
- cr.fill();
- }
- else {
- cr.rectangle(wsCenterX - workspaceRadius, wsCenterY - workspaceRadius, workspaceRadius, workspaceRadius * 2)
- cr.fill();
- }
- if (!(area._workspaceMask & (1 << (i + 1)))) { // Right
- cr.arc(wsCenterX, wsCenterY, workspaceRadius, -0.5 * Math.PI, 0.5 * Math.PI);
- cr.fill();
- }
- else {
- cr.rectangle(wsCenterX, wsCenterY - workspaceRadius, workspaceRadius, workspaceRadius * 2)
- cr.fill();
- }
-
- // Set color for text
- cr.setSourceRGBA(occupiedfg.red, occupiedfg.green, occupiedfg.blue, occupiedfg.alpha);
+ // Draw workspace numbers
+ for (let i = 1; i <= count; i++) {
+ if (area._workspaceMask & (1 << i)) {
+ // Draw bg highlight
+ cr.setSourceRGBA(occupiedbg.red, occupiedbg.green, occupiedbg.blue, occupiedbg.alpha);
+ const wsCenterX = -(workspaceRadius) + (workspaceDiameter * i);
+ const wsCenterY = height / 2;
+ if (!(area._workspaceMask & (1 << (i - 1)))) { // Left
+ cr.arc(wsCenterX, wsCenterY, workspaceRadius, 0.5 * Math.PI, 1.5 * Math.PI);
+ cr.fill();
+ }
+ else {
+ cr.rectangle(wsCenterX - workspaceRadius, wsCenterY - workspaceRadius, workspaceRadius, workspaceRadius * 2)
+ cr.fill();
+ }
+ if (!(area._workspaceMask & (1 << (i + 1)))) { // Right
+ cr.arc(wsCenterX, wsCenterY, workspaceRadius, -0.5 * Math.PI, 0.5 * Math.PI);
+ cr.fill();
+ }
+ else {
+ cr.rectangle(wsCenterX, wsCenterY - workspaceRadius, workspaceRadius, workspaceRadius * 2)
+ cr.fill();
}
- else
- cr.setSourceRGBA(wsfg.red, wsfg.green, wsfg.blue, wsfg.alpha);
- layout.set_text(`${i}`, -1);
- const [layoutWidth, layoutHeight] = layout.get_pixel_size();
- const x = -workspaceRadius + (workspaceDiameter * i) - (layoutWidth / 2);
- const y = (height - layoutHeight) / 2;
- cr.moveTo(x, y);
- // cr.showText(text);
- PangoCairo.show_layout(cr, layout);
- cr.stroke();
- }
- // Draw active ws
- // base
- cr.setSourceRGBA(activebg.red, activebg.green, activebg.blue, activebg.alpha);
- cr.arc(activeWsCenterX, activeWsCenterY, indicatorRadius, 0, 2 * Math.PI);
- cr.fill();
- // inner decor
- cr.setSourceRGBA(activefg.red, activefg.green, activefg.blue, activefg.alpha);
- cr.arc(activeWsCenterX, activeWsCenterY, indicatorRadius * 0.2, 0, 2 * Math.PI);
- cr.fill();
- }));
- },
+ // Set color for text
+ cr.setSourceRGBA(occupiedfg.red, occupiedfg.green, occupiedfg.blue, occupiedfg.alpha);
+ }
+ else
+ cr.setSourceRGBA(wsfg.red, wsfg.green, wsfg.blue, wsfg.alpha);
+ layout.set_text(`${i}`, -1);
+ const [layoutWidth, layoutHeight] = layout.get_pixel_size();
+ const x = -workspaceRadius + (workspaceDiameter * i) - (layoutWidth / 2);
+ const y = (height - layoutHeight) / 2;
+ cr.moveTo(x, y);
+ // cr.showText(text);
+ PangoCairo.show_layout(cr, layout);
+ cr.stroke();
+ }
+
+ // Draw active ws
+ // base
+ cr.setSourceRGBA(activebg.red, activebg.green, activebg.blue, activebg.alpha);
+ cr.arc(activeWsCenterX, activeWsCenterY, indicatorRadius, 0, 2 * Math.PI);
+ cr.fill();
+ // inner decor
+ cr.setSourceRGBA(activefg.red, activefg.green, activefg.blue, activefg.alpha);
+ cr.arc(activeWsCenterX, activeWsCenterY, indicatorRadius * 0.2, 0, 2 * Math.PI);
+ cr.fill();
+ }))
+ ,
})
}
From 5ddb5bcd2c1a3fbcca3f90b5a041230eff7daa65 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 5 Jan 2024 22:49:01 +0700
Subject: [PATCH 067/265] Update preset.json
---
.config/ags/scripts/templates/gradience/preset.json | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/.config/ags/scripts/templates/gradience/preset.json b/.config/ags/scripts/templates/gradience/preset.json
index 8591b87f8..d5b3171da 100644
--- a/.config/ags/scripts/templates/gradience/preset.json
+++ b/.config/ags/scripts/templates/gradience/preset.json
@@ -118,7 +118,12 @@
"thumbnail_bg_color": "#1a1b26",
"thumbnail_fg_color": "#AEE5FA",
"shade_color": "rgba(0, 0, 0, 0.36)",
- "scrollbar_outline_color": "rgba(0, 0, 0, 0.5)"
+ "scrollbar_outline_color": "rgba(0, 0, 0, 0.5)",
+
+ "sidebar_bg_color": "@window_bg_color",
+ "sidebar_fg_color":"@window_fg_color",
+ "sidebar_border_color": "@sidebar_bg_color",
+ "sidebar_backdrop_color": "@sidebar_bg_color"
},
"palette": {
"blue_": {},
@@ -132,8 +137,8 @@
"dark_": {}
},
"custom_css": {
- "gtk4": "@define-color sidebar_bg_color @window_bg_color; @define-color sidebar_fg_color @window_fg_color; @define-color sidebar_border_color @window_bg_color; @define-color sidebar_backdrop_color @window_bg_color; ",
- "gtk3": "@define-color sidebar_bg_color @window_bg_color; @define-color sidebar_fg_color @window_fg_color; @define-color sidebar_border_color @window_bg_color; @define-color sidebar_backdrop_color @window_bg_color; "
+ "gtk4": "",
+ "gtk3": ""
},
"plugins": {}
}
\ No newline at end of file
From 3868b7ed09521da07356cbb00d22cfb5035c033c Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 5 Jan 2024 22:50:21 +0700
Subject: [PATCH 068/265] notifs: fix Clear and Silence button
---
.../ags/widgets/sideright/notificationlist.js | 54 +++++++------------
1 file changed, 19 insertions(+), 35 deletions(-)
diff --git a/.config/ags/widgets/sideright/notificationlist.js b/.config/ags/widgets/sideright/notificationlist.js
index db65e21de..0173b09e2 100644
--- a/.config/ags/widgets/sideright/notificationlist.js
+++ b/.config/ags/widgets/sideright/notificationlist.js
@@ -13,17 +13,6 @@ import { ConfigToggle, ConfigSegmentedSelection, ConfigGap } from '../../lib/con
import Notification from "../../lib/notification.js";
export default (props) => {
- const dndToggle = ConfigToggle({
- hpack: 'center',
- icon: 'notifications_paused',
- name: 'Do not disturb',
- desc: "Don't pop up notifications",
- initValue: Notifications.dnd,
- onChange: (self, newValue) => {
- Notifications.dnd = newValue;
- silenceButton.toggleClassName('notif-listaction-btn-enabled', Notifications.dnd);
- },
- });
const notifEmptyContent = Box({
homogeneous: true,
children: [Box({
@@ -39,7 +28,6 @@ export default (props) => {
Label({ label: 'No notifications', className: 'txt-small' }),
]
}),
- dndToggle,
]
})]
});
@@ -71,7 +59,7 @@ export default (props) => {
box.show_all();
}
}, 'notified'],
-
+
[Notifications, (box, id) => {
if (!id) return;
for (const ch of box.children) {
@@ -99,29 +87,25 @@ export default (props) => {
});
const silenceButton = ListActionButton('notifications_paused', 'Silence', (self) => {
Notifications.dnd = !Notifications.dnd;
- dndToggle._toggle(Notifications.dnd)
self.toggleClassName('notif-listaction-btn-enabled', Notifications.dnd);
});
- const clearButton = ListActionButton('clear_all', 'Clear', () => Notifications.clear());
- const listTitle = Revealer({
- revealChild: false,
- connections: [[Notifications, (revealer) => {
- revealer.revealChild = (Notifications.notifications.length > 0);
- }]],
- child: Box({
- vpack: 'start',
- className: 'sidebar-group-invisible txt spacing-h-5',
- children: [
- Label({
- hexpand: true,
- xalign: 0,
- className: 'txt-title-small',
- label: 'Notifications',
- }),
- silenceButton,
- clearButton,
- ]
- })
+ const clearButton = ListActionButton('clear_all', 'Clear', () => {
+ notificationList.get_children().forEach(ch => ch.destroy());
+ Notifications.clear();
+ });
+ const listTitle = Box({
+ vpack: 'start',
+ className: 'sidebar-group-invisible txt spacing-h-5',
+ children: [
+ Label({
+ hexpand: true,
+ xalign: 0,
+ className: 'txt-title-small',
+ label: 'Notifications',
+ }),
+ silenceButton,
+ clearButton,
+ ]
});
const notifList = Scrollable({
hexpand: true,
@@ -150,7 +134,7 @@ export default (props) => {
});
return Box({
...props,
- className: 'sidebar-group-invisible spacing-v-5',
+ className: 'sidebar-group spacing-v-5',
vertical: true,
children: [
listTitle,
From 02f0b0c868bac1be56aef315f733b4ded53fa65b Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 5 Jan 2024 23:51:09 +0700
Subject: [PATCH 069/265] Update notificationlist.js
---
.config/ags/widgets/sideright/notificationlist.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/.config/ags/widgets/sideright/notificationlist.js b/.config/ags/widgets/sideright/notificationlist.js
index 0173b09e2..8e7d7801f 100644
--- a/.config/ags/widgets/sideright/notificationlist.js
+++ b/.config/ags/widgets/sideright/notificationlist.js
@@ -100,7 +100,9 @@ export default (props) => {
Label({
hexpand: true,
xalign: 0,
- className: 'txt-title-small',
+ className: 'txt-title-small margin-left-10',
+ // ^ (extra margin on the left so that it looks similarly spaced
+ // when compared to borderless "Clear" button on the right)
label: 'Notifications',
}),
silenceButton,
From 2ac5f01f8375c110ac0af32719e165f4194721b2 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 5 Jan 2024 23:52:47 +0700
Subject: [PATCH 070/265] add battery fallback (#163)
---
.config/ags/widgets/bar/system.js | 120 +++++++++++++++++++-----------
1 file changed, 76 insertions(+), 44 deletions(-)
diff --git a/.config/ags/widgets/bar/system.js b/.config/ags/widgets/bar/system.js
index db1719a2f..1766c5480 100644
--- a/.config/ags/widgets/bar/system.js
+++ b/.config/ags/widgets/bar/system.js
@@ -86,48 +86,6 @@ const Utilities = () => Box({
const BarBattery = () => Box({
className: 'spacing-h-4 txt-onSurfaceVariant',
children: [
- // Revealer({ // A dot for charging state
- // transitionDuration: 150,
- // revealChild: false,
- // transition: 'crossfade',
- // child: Widget.Box({
- // className: 'spacing-h-3',
- // children: [
- // Widget.Box({
- // vpack: 'center',
- // className: 'bar-batt-chargestate-charging-smaller',
- // setup: (self) => self.hook(Battery, box => {
- // box.toggleClassName('bar-batt-chargestate-low', Battery.percent <= BATTERY_LOW);
- // box.toggleClassName('bar-batt-chargestate-full', Battery.charged);
- // }),
- // }),
- // Widget.Box({
- // vpack: 'center',
- // className: 'bar-batt-chargestate-charging',
- // setup: (self) => self.hook(Battery, box => {
- // box.toggleClassName('bar-batt-chargestate-low', Battery.percent <= BATTERY_LOW);
- // box.toggleClassName('bar-batt-chargestate-full', Battery.charged);
- // }),
- // }),
- // ]
- // }),
- // setup: (self) => self.hook(Battery, revealer => {
- // revealer.revealChild = Battery.charging;
- // }),
- // }),
- // Stack({
- // transition: 'slide_up_down',
- // items: [
- // ['discharging', Widget.Label({
- // className: 'txt-norm txt',
- // label: 'โข',
- // }),],
- // ['charging', MaterialIcon('bolt', 'norm')],
- // ],
- // setup: (self) => self.hook(Battery, revealer => {
- // self.shown = Battery.charging ? 'charging' : 'discharging';
- // }),
- // }),
Revealer({
transitionDuration: 150,
revealChild: false,
@@ -163,6 +121,60 @@ const BarBattery = () => Box({
]
});
+const BarResourceValue = (name, icon, command) => Widget.Box({
+ vpack: 'center',
+ className: 'bar-batt spacing-h-5',
+ children: [
+ MaterialIcon(icon, 'small'),
+ Widget.ProgressBar({ // Progress
+ vpack: 'center', hexpand: true,
+ className: 'bar-prog-batt',
+ setup: (self) => self.poll(5000, (progress) => execAsync(['bash', '-c', command])
+ .then((output) => {
+ progress.value = Number(output) / 100;
+ progress.tooltipText = `${name}: ${Number(output)}%`
+ })
+ .catch(print)
+ ),
+ }),
+ ]
+});
+
+const BarResource = (name, icon, command) => {
+ const resourceLabel = Label({
+ className: 'txt-smallie txt-onSurfaceVariant',
+ });
+ const resourceCircProg = AnimatedCircProg({
+ className: 'bar-batt-circprog',
+ vpack: 'center', hpack: 'center',
+ connections: [[5000, (progress) => execAsync(['bash', '-c', command])
+ .then((output) => {
+ progress.css = `font-size: ${Number(output)}px;`;
+ resourceLabel.label = `${Math.round(Number(output))}%`;
+ widget.tooltipText = `${name}: ${Math.round(Number(output))}%`;
+ }).catch(print)
+ ]],
+ });
+ const widget = Box({
+ className: 'spacing-h-4 txt-onSurfaceVariant',
+ children: [
+ resourceLabel,
+ Overlay({
+ child: Widget.Box({
+ vpack: 'center',
+ className: 'bar-batt',
+ homogeneous: true,
+ children: [
+ MaterialIcon(icon, 'small'),
+ ],
+ }),
+ overlays: [resourceCircProg]
+ }),
+ ]
+ });
+ return widget;
+}
+
const BarGroup = ({ child }) => Widget.Box({
className: 'bar-group-margin bar-sides',
children: [
@@ -181,8 +193,28 @@ export const ModuleSystem = () => Widget.EventBox({
className: 'spacing-h-5',
children: [
BarGroup({ child: BarClock() }),
- BarGroup({ child: Utilities() }),
- BarGroup({ child: BarBattery() }),
+ Stack({
+ transition: 'slide_up_down',
+ transitionDuration: 150,
+ items: [
+ ['laptop', Box({
+ className: 'spacing-h-5', children: [
+ BarGroup({ child: Utilities() }),
+ BarGroup({ child: BarBattery() }),
+ ]
+ })],
+ ['desktop', Box({
+ className: 'spacing-h-5', children: [
+ BarGroup({ child: BarResource('RAM usage', 'memory', `free | awk '/^Mem/ {printf("%.2f\\n", ($3/$2) * 100)}'`), }),
+ BarGroup({ child: BarResource('Swap usage', 'swap_horiz', `free | awk '/^Swap/ {printf("%.2f\\n", ($3/$2) * 100)}'`), }),
+ ]
+ })],
+ ],
+ setup: (stack) => Utils.timeout(10, () => {
+ if (!Battery.available) stack.shown = 'desktop';
+ else stack.shown = 'laptop';
+ })
+ })
]
})
});
From e91443e23c9023ab3f08e921972b7d2210bfe287 Mon Sep 17 00:00:00 2001
From: clsty
Date: Sat, 6 Jan 2024 15:49:21 +0800
Subject: [PATCH 071/265] Remove execute permission for non-executable
---
.config/hypr/execs.conf | 0
1 file changed, 0 insertions(+), 0 deletions(-)
mode change 100755 => 100644 .config/hypr/execs.conf
diff --git a/.config/hypr/execs.conf b/.config/hypr/execs.conf
old mode 100755
new mode 100644
From 7853d7370ed1c64f7d9651bedaa5024659043c61 Mon Sep 17 00:00:00 2001
From: clsty
Date: Sat, 6 Jan 2024 15:49:47 +0800
Subject: [PATCH 072/265] Fix and improvement on installation script.
---
install.sh | 42 +++++++++++++++++++++++++++---------------
1 file changed, 27 insertions(+), 15 deletions(-)
diff --git a/install.sh b/install.sh
index 3b80e7720..61f6c768b 100755
--- a/install.sh
+++ b/install.sh
@@ -7,6 +7,7 @@ function v() {
echo -e "\e[34m[$0]: Next command to be executed:\e[0m"
echo -e "\e[32m$@\e[0m"
execute=true
+ hasfailed=false
if $ask;then
while true;do
echo -e "\e[34mDo you want to execute the command shown above? \e[0m"
@@ -25,7 +26,16 @@ function v() {
done
fi
if $execute;then
- "$@"
+ "$@" || hasfailed=true
+ fi
+ if $hasfailed ;then
+ echo -e "\e[31m[$0]: Command \"\e[32m$@\e[31m\" has failed. You may need to resolve the problem manually before proceeding.\e[0m"
+ read -p "Ignore the error and continue this script anyway (NOT Recommended)? [y/N]" p
+ case $p in
+ [yY]) echo -e "\e[34mAlright, continue...\e[0m" ;;
+ *) echo -e "\e[34mOK, exiting...\e[0m" ;exit 1 ;;
+ esac
+ else echo -e "\e[34m[$0]: Command \"\e[32m$@\e[34m\" done.\e[0m"
fi
}
#####################################################################################
@@ -80,22 +90,22 @@ v sudo usermod -aG input "$(whoami)"
printf '\e[36m2. Installing AGS from git repo\e[97m\n'
sleep 1
-installags (){
- v git clone --recursive https://github.com/Aylur/ags.git|| \
- if [ -d ags ];then
- printf "\e[36mSeems \"./ags\" already exists.\e[97m\n"
- cd ags
- v git pull
- else exit 1
- fi
- v npm install
- v meson setup build
- v meson install -C build
+install-ags (){
+ mkdir -p $base/ags
+ cd $base/ags
+ try git init -b main
+ try git remote add origin https://github.com/Aylur/ags.git
+ git pull origin main && git submodule update --init --recursive
+ npm install
+ meson setup build
+ meson install -C build
cd $base
}
-if command -v ags >/dev/null 2>&1
- then echo -e "\e[34mCommand \"ags\" already exists. Won\'t install ags.\e[0m"
- else installags
+if command -v ags >/dev/null 2>&1;then
+ echo -e "\e[34mCommand \"ags\" already exists, no need to install.\e[0m"
+ echo -e "\e[34mYou can reinstall ags in order to update to the latest version anyway.\e[0m"
+ if $ask;then v install-ags;fi
+else v install-ags
fi
#####################################################################################
@@ -116,6 +126,8 @@ do
fi
done
+test -f ~/.config/hypr/colors.conf || cp ~/.config/hypr/colors_default.conf ~/.config/hypr/colors.conf
+
# some foldes (eg. .local/bin) should be processed seperately to avoid `--delete' for rsync,
# since the files here come from different places, not only about one program.
v rsync -av ".local/bin/" "$HOME/.local/bin/"
From 1ce492579b147d453eb0520e3eeafe80ea41b02e Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Sat, 6 Jan 2024 16:19:07 +0700
Subject: [PATCH 073/265] fix swaylock #173
---
.config/hypr/execs.conf | 6 +-----
.config/swaylock/config | 3 ++-
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/.config/hypr/execs.conf b/.config/hypr/execs.conf
index 413a9a736..c97a53197 100755
--- a/.config/hypr/execs.conf
+++ b/.config/hypr/execs.conf
@@ -14,7 +14,7 @@ exec-once = fcitx5
exec-once = dbus-update-activation-environment --all &
exec-once = /usr/bin/gnome-keyring-daemon --start --components=secrets &
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &
-exec-once = swayidle -w timeout 300 'swaylock' &
+exec-once = swayidle -w timeout 300 'swaylock -f' &
exec-once = swayidle -w timeout 450 'pidof java || systemctl suspend' &
exec-once = sleep 1 && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # Some fix idk
@@ -24,8 +24,4 @@ exec-once = wl-paste --watch cliphist store &
# Cursor
exec-once = hyprctl setcursor Bibata-Modern-Classic 24
-# Plugins
-# are a good way to crash Hyprland
-# so nothing here
-
diff --git a/.config/swaylock/config b/.config/swaylock/config
index 4c5249666..a8b544e07 100644
--- a/.config/swaylock/config
+++ b/.config/swaylock/config
@@ -1,5 +1,6 @@
+daemonize
ignore-empty-password
-font=sans-serif
+font=Rubik
font-size=23
clock
From ecf3ff281f8933e536e22b6662f6b836f56594ec Mon Sep 17 00:00:00 2001
From: clsty
Date: Sat, 6 Jan 2024 17:58:43 +0800
Subject: [PATCH 074/265] Show function's definition.
---
install.sh | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/install.sh b/install.sh
index 61f6c768b..8eda8e542 100755
--- a/install.sh
+++ b/install.sh
@@ -38,6 +38,12 @@ function v() {
else echo -e "\e[34m[$0]: Command \"\e[32m$@\e[34m\" done.\e[0m"
fi
}
+function showfun() {
+ echo -e "\e[34mThe definition of function \"$1\" is as follows:\e[0m"
+ printf "\e[32m"
+ type -a $1
+ printf "\e[97m"
+}
#####################################################################################
startask (){
printf "\e[34m[$0]: Hi there!\n"
@@ -104,10 +110,10 @@ install-ags (){
if command -v ags >/dev/null 2>&1;then
echo -e "\e[34mCommand \"ags\" already exists, no need to install.\e[0m"
echo -e "\e[34mYou can reinstall ags in order to update to the latest version anyway.\e[0m"
- if $ask;then v install-ags;fi
-else v install-ags
+ askags=$ask
+else askags=true
fi
-
+if $askags;then showfun install-ags;v install-ags;fi
#####################################################################################
printf '\e[36m3. Copying\e[97m\n'
From d2dd37adf42b1085362f3cce0eae8d9d356d1df6 Mon Sep 17 00:00:00 2001
From: clsty
Date: Sat, 6 Jan 2024 18:46:58 +0800
Subject: [PATCH 075/265] Add option to repeat failed command.
---
install.sh | 28 ++++++++++++++++++++--------
1 file changed, 20 insertions(+), 8 deletions(-)
diff --git a/install.sh b/install.sh
index 8eda8e542..95a6f119c 100755
--- a/install.sh
+++ b/install.sh
@@ -8,6 +8,7 @@ function v() {
echo -e "\e[32m$@\e[0m"
execute=true
hasfailed=false
+ cmdstatus=0 # 0=normal; 1=failed; 2=failed but ignored
if $ask;then
while true;do
echo -e "\e[34mDo you want to execute the command shown above? \e[0m"
@@ -15,7 +16,7 @@ function v() {
echo " e = Exit now"
echo " s = Skip this command; NOT recommended (may break functions needed by the dotfiles!)"
echo " yesforall = yes and don't ask again; NOT recommended unless you really sure"
- read -p "Enter here [y/e/s/yesforall]:" p
+ read -p "Enter here [y/e/s/yesforall]: " p
case $p in
[yY]) echo -e "\e[34mOK, executing...\e[0m" ;break ;;
[eE]) echo -e "\e[34mExiting...\e[0m" ;exit ;break ;;
@@ -26,17 +27,28 @@ function v() {
done
fi
if $execute;then
- "$@" || hasfailed=true
+ "$@" || cmdstatus=1
fi
- if $hasfailed ;then
+ while [ $cmdstatus == 1 ] ;do
echo -e "\e[31m[$0]: Command \"\e[32m$@\e[31m\" has failed. You may need to resolve the problem manually before proceeding.\e[0m"
- read -p "Ignore the error and continue this script anyway (NOT Recommended)? [y/N]" p
+ echo -e "\e[31mWhich one would you like to do? \e[0m"
+ echo " r = Repeat this command (DEFAULT)"
+ echo " e = Exit now"
+ echo " i = Ignore the error and continue this script anyway (may break functions needed by the dotfiles!)"
+ read -p "Enter here [R/e/i]: " p
case $p in
- [yY]) echo -e "\e[34mAlright, continue...\e[0m" ;;
- *) echo -e "\e[34mOK, exiting...\e[0m" ;exit 1 ;;
+ [iI]) echo -e "\e[34mAlright, ignore and continue...\e[0m";cmdstatus=2;;
+ [eE]) echo -e "\e[34mAlright, will exit.\e[0m";break;;
+ *) echo -e "\e[34mOK, repeating...\e[0m"
+ "$@" && cmdstatus=0
+ ;;
esac
- else echo -e "\e[34m[$0]: Command \"\e[32m$@\e[34m\" done.\e[0m"
- fi
+ done
+ case $cmdstatus in
+ 0) echo -e "\e[34m[$0]: Command \"\e[32m$@\e[34m\" finished.\e[0m";;
+ 1) echo -e "\e[31m[$0]: Command \"\e[32m$@\e[31m\" has failed. Exiting...\e[0m";exit 1;;
+ 2) echo -e "\e[31m[$0]: Command \"\e[32m$@\e[31m\" has failed but ignored by user.\e[0m";;
+ esac
}
function showfun() {
echo -e "\e[34mThe definition of function \"$1\" is as follows:\e[0m"
From f21006e57b2151bb3c9c10709d621c188228d848 Mon Sep 17 00:00:00 2001
From: clsty
Date: Sat, 6 Jan 2024 19:10:32 +0800
Subject: [PATCH 076/265] Minor fixes; add 3 as cmdstatus for skipped.
---
install.sh | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/install.sh b/install.sh
index 95a6f119c..8d33817d6 100755
--- a/install.sh
+++ b/install.sh
@@ -8,7 +8,7 @@ function v() {
echo -e "\e[32m$@\e[0m"
execute=true
hasfailed=false
- cmdstatus=0 # 0=normal; 1=failed; 2=failed but ignored
+ cmdstatus=0 # 0=normal; 1=failed; 2=failed but ignored; 3=skipped
if $ask;then
while true;do
echo -e "\e[34mDo you want to execute the command shown above? \e[0m"
@@ -20,7 +20,7 @@ function v() {
case $p in
[yY]) echo -e "\e[34mOK, executing...\e[0m" ;break ;;
[eE]) echo -e "\e[34mExiting...\e[0m" ;exit ;break ;;
- [sS]) echo -e "\e[34mAlright, skipping this one...\e[0m" ;export execute=false ;break ;;
+ [sS]) echo -e "\e[34mAlright, skipping this one...\e[0m" ;export execute=false;cmdstatus=3 ;break ;;
"yesforall") echo -e "\e[34mAlright, won't ask again. Executing...\e[0m"; export ask=false ;break ;;
*) echo -e "\e[31mPlease enter one of [y/e/s/yesforall].\e[0m";;
esac
@@ -48,6 +48,7 @@ function v() {
0) echo -e "\e[34m[$0]: Command \"\e[32m$@\e[34m\" finished.\e[0m";;
1) echo -e "\e[31m[$0]: Command \"\e[32m$@\e[31m\" has failed. Exiting...\e[0m";exit 1;;
2) echo -e "\e[31m[$0]: Command \"\e[32m$@\e[31m\" has failed but ignored by user.\e[0m";;
+ 3) echo -e "\e[33m[$0]: Command \"\e[32m$@\e[33m\" has been skipped by user.\e[0m";;
esac
}
function showfun() {
@@ -144,7 +145,10 @@ do
fi
done
-test -f ~/.config/hypr/colors.conf || cp ~/.config/hypr/colors_default.conf ~/.config/hypr/colors.conf
+target="$HOME/.config/hypr/colors.conf"
+test -f $target || { \
+ echo -e "\e[34mFile \"$target\" not found.\e[0m" && \
+ v cp "$HOME/.config/hypr/colors_default.conf" $target ; }
# some foldes (eg. .local/bin) should be processed seperately to avoid `--delete' for rsync,
# since the files here come from different places, not only about one program.
From 651875dfc5a727c7a37b78295283d5c07f2a5308 Mon Sep 17 00:00:00 2001
From: clsty
Date: Sat, 6 Jan 2024 19:11:56 +0800
Subject: [PATCH 077/265] Remove unused line.
---
install.sh | 1 -
1 file changed, 1 deletion(-)
diff --git a/install.sh b/install.sh
index 8d33817d6..e30508b65 100755
--- a/install.sh
+++ b/install.sh
@@ -7,7 +7,6 @@ function v() {
echo -e "\e[34m[$0]: Next command to be executed:\e[0m"
echo -e "\e[32m$@\e[0m"
execute=true
- hasfailed=false
cmdstatus=0 # 0=normal; 1=failed; 2=failed but ignored; 3=skipped
if $ask;then
while true;do
From 1e6709b68484f360fd33c86a088430ce74cbde95 Mon Sep 17 00:00:00 2001
From: clsty
Date: Sat, 6 Jan 2024 19:26:45 +0800
Subject: [PATCH 078/265] Better informing
---
install.sh | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/install.sh b/install.sh
index e30508b65..e8ab62492 100755
--- a/install.sh
+++ b/install.sh
@@ -29,8 +29,8 @@ function v() {
"$@" || cmdstatus=1
fi
while [ $cmdstatus == 1 ] ;do
- echo -e "\e[31m[$0]: Command \"\e[32m$@\e[31m\" has failed. You may need to resolve the problem manually before proceeding.\e[0m"
- echo -e "\e[31mWhich one would you like to do? \e[0m"
+ echo -e "\e[31m[$0]: Command \"\e[32m$@\e[31m\" has failed."
+ echo -e "You may need to resolve the problem manually BEFORE repeating this command.\e[0m"
echo " r = Repeat this command (DEFAULT)"
echo " e = Exit now"
echo " i = Ignore the error and continue this script anyway (may break functions needed by the dotfiles!)"
@@ -57,6 +57,13 @@ function showfun() {
printf "\e[97m"
}
#####################################################################################
+# For debugging
+# ask=false
+# mkdir -p /tmp/test1
+# v mkdir /tmp/test1
+#
+# echo "debug part fin";exit
+#####################################################################################
startask (){
printf "\e[34m[$0]: Hi there!\n"
printf 'This script 1. only works for ArchLinux and Arch-based distros.\n'
From 87faa51c080165c42695e5c345d1672b0471bfcd Mon Sep 17 00:00:00 2001
From: clsty
Date: Sat, 6 Jan 2024 20:12:51 +0800
Subject: [PATCH 079/265] Add install-rubik for Rubik font
---
.gitignore | 1 +
dependencies.txt | 2 +-
install.sh | 30 ++++++++++++++++++++++++++----
3 files changed, 28 insertions(+), 5 deletions(-)
diff --git a/.gitignore b/.gitignore
index 080a2b5e7..a7d968cff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
.config/ags/scss/_material.scss
.config/hypr/colors.conf
/ags
+/rubik
diff --git a/dependencies.txt b/dependencies.txt
index fc1cf0216..75468dbe0 100644
--- a/dependencies.txt
+++ b/dependencies.txt
@@ -10,5 +10,5 @@ blueberry networkmanager brightnessctl wlsunset-git gnome-bluetooth-3.0
wayland-idle-inhibitor-git swayidle swaylock-effects-git wlogout
wl-clipboard hyprpicker-git grim tesseract slurp
adw-gtk3-git gradience-git swww
-lexend-fonts-git ttf-jetbrains-mono-nerd ttf-material-symbols-variable-git ttf-space-mono-nerd
+fontconfig lexend-fonts-git ttf-jetbrains-mono-nerd ttf-material-symbols-variable-git ttf-space-mono-nerd
fish foot starship
diff --git a/install.sh b/install.sh
index e8ab62492..f60498b83 100755
--- a/install.sh
+++ b/install.sh
@@ -112,7 +112,7 @@ v sudo usermod -aG video "$(whoami)"
v sudo usermod -aG input "$(whoami)"
#####################################################################################
-printf '\e[36m2. Installing AGS from git repo\e[97m\n'
+printf '\e[36m2. Installing AGS and rubik from git repo\e[97m\n'
sleep 1
install-ags (){
@@ -126,13 +126,35 @@ install-ags (){
meson install -C build
cd $base
}
+install-rubik (){
+ mkdir -p $base/rubik
+ cd $base/rubik
+ try git init -b main
+ try git remote add origin https://github.com/googlefonts/rubik.git
+ git pull origin main && git submodule update --init --recursive
+ sudo mkdir -p /usr/local/share/fonts/TTF/
+ sudo cp fonts/variable/Rubik*.ttf /usr/local/share/fonts/TTF/
+ sudo mkdir -p /usr/local/share/licenses/ttf-rubik/
+ sudo cp OFL.txt /usr/local/share/licenses/ttf-rubik/LICENSE
+ fc-cache -fv
+ cd $base
+}
+
if command -v ags >/dev/null 2>&1;then
echo -e "\e[34mCommand \"ags\" already exists, no need to install.\e[0m"
echo -e "\e[34mYou can reinstall ags in order to update to the latest version anyway.\e[0m"
- askags=$ask
-else askags=true
+ ask_ags=$ask
+else ask_ags=true
fi
-if $askags;then showfun install-ags;v install-ags;fi
+if $(fc-list|grep -q Rubik); then
+ echo -e "\e[34mFont \"Rubik\" already exists, no need to install.\e[0m"
+ echo -e "\e[34mYou can reinstall Rubik in order to update to the latest version anyway.\e[0m"
+ ask_rubik=$ask
+else ask_rubik=true
+fi
+
+if $ask_ags;then showfun install-ags;v install-ags;fi
+if $ask_rubik;then showfun install-rubik;v install-rubik;fi
#####################################################################################
printf '\e[36m3. Copying\e[97m\n'
From ebe4191b6f23d76b521c7d0b6281e3aac764bbab Mon Sep 17 00:00:00 2001
From: clsty
Date: Sun, 7 Jan 2024 08:49:13 +0800
Subject: [PATCH 080/265] Several fix (err catch inside fun; install-yay...)
---
install.sh | 138 ++++++++++++++++++++++++++++++++++-------------------
1 file changed, 90 insertions(+), 48 deletions(-)
diff --git a/install.sh b/install.sh
index f60498b83..87ebcb617 100755
--- a/install.sh
+++ b/install.sh
@@ -7,7 +7,6 @@ function v() {
echo -e "\e[34m[$0]: Next command to be executed:\e[0m"
echo -e "\e[32m$@\e[0m"
execute=true
- cmdstatus=0 # 0=normal; 1=failed; 2=failed but ignored; 3=skipped
if $ask;then
while true;do
echo -e "\e[34mDo you want to execute the command shown above? \e[0m"
@@ -19,27 +18,31 @@ function v() {
case $p in
[yY]) echo -e "\e[34mOK, executing...\e[0m" ;break ;;
[eE]) echo -e "\e[34mExiting...\e[0m" ;exit ;break ;;
- [sS]) echo -e "\e[34mAlright, skipping this one...\e[0m" ;export execute=false;cmdstatus=3 ;break ;;
- "yesforall") echo -e "\e[34mAlright, won't ask again. Executing...\e[0m"; export ask=false ;break ;;
+ [sS]) echo -e "\e[34mAlright, skipping this one...\e[0m" ;execute=false ;break ;;
+ "yesforall") echo -e "\e[34mAlright, won't ask again. Executing...\e[0m"; ask=false ;break ;;
*) echo -e "\e[31mPlease enter one of [y/e/s/yesforall].\e[0m";;
esac
done
fi
- if $execute;then
- "$@" || cmdstatus=1
+ if $execute;then x "$@";else
+ echo -e "\e[33m[$0]: Command \"\e[32m$@\e[33m\" has been skipped by user.\e[0m"
fi
+}
+# When use v() for a defined function, use x() INSIDE its definition to catch errors.
+function x() {
+ if "$@";then cmdstatus=0;else cmdstatus=1;fi # 0=normal; 1=failed; 2=failed but ignored
while [ $cmdstatus == 1 ] ;do
echo -e "\e[31m[$0]: Command \"\e[32m$@\e[31m\" has failed."
echo -e "You may need to resolve the problem manually BEFORE repeating this command.\e[0m"
echo " r = Repeat this command (DEFAULT)"
echo " e = Exit now"
- echo " i = Ignore the error and continue this script anyway (may break functions needed by the dotfiles!)"
+ echo " i = Ignore this error and continue (your setup might not work correctly)"
read -p "Enter here [R/e/i]: " p
case $p in
[iI]) echo -e "\e[34mAlright, ignore and continue...\e[0m";cmdstatus=2;;
[eE]) echo -e "\e[34mAlright, will exit.\e[0m";break;;
*) echo -e "\e[34mOK, repeating...\e[0m"
- "$@" && cmdstatus=0
+ if "$@";then cmdstatus=0;else cmdstatus=1;fi
;;
esac
done
@@ -47,11 +50,10 @@ function v() {
0) echo -e "\e[34m[$0]: Command \"\e[32m$@\e[34m\" finished.\e[0m";;
1) echo -e "\e[31m[$0]: Command \"\e[32m$@\e[31m\" has failed. Exiting...\e[0m";exit 1;;
2) echo -e "\e[31m[$0]: Command \"\e[32m$@\e[31m\" has failed but ignored by user.\e[0m";;
- 3) echo -e "\e[33m[$0]: Command \"\e[32m$@\e[33m\" has been skipped by user.\e[0m";;
esac
}
function showfun() {
- echo -e "\e[34mThe definition of function \"$1\" is as follows:\e[0m"
+ echo -e "\e[34m[$0]: The definition of function \"$1\" is as follows:\e[0m"
printf "\e[32m"
type -a $1
printf "\e[97m"
@@ -64,6 +66,7 @@ function showfun() {
#
# echo "debug part fin";exit
#####################################################################################
+if ! command -v pacman >/dev/null 2>&1;then printf "\e[31m[$0]: pacman not found, it seems that the system is not ArchLinux or Arch-based distros. Aborting...\e[0m\n";exit 1;fi
startask (){
printf "\e[34m[$0]: Hi there!\n"
printf 'This script 1. only works for ArchLinux and Arch-based distros.\n'
@@ -71,35 +74,53 @@ printf ' 2. has not been fully tested, use at your own risk.\n'
printf "\e[31m"
printf "Please CONFIRM that you HAVE ALREADY BACKED UP \"$HOME/.config/\" and \"$HOME/.local/\" folders!\n"
printf "\e[97m"
-printf "Enter capital \"YES\" (without quotes) to continue: "
+printf "Enter capital \"YES\" (without quotes) to continue:"
read -p " " p
case $p in "YES")sleep 0;; *)exit;;esac
printf '\n'
printf 'Do you want to confirm everytime before a command executes?\n'
-printf ' y = Yes, ask me before executing each of them. (RECOMMENDED)\n'
-printf ' n = No, just execute them automatically.\n'
-printf ' a = Abort. (DEFAULT)\n'
+printf ' y = Yes, ask me before executing each of them. (RECOMMENDED)\n'
+printf ' n = No, just execute them automatically.\n'
+printf ' a = Abort. (DEFAULT)\n'
read -p "Enter [y/n/A]: " p
case $p in
- y)export ask=true;;
- n)export ask=false;;
+ y)ask=true;;
+ n)ask=false;;
*)exit;;
esac
}
case $1 in
- "-f")export ask=false;;
+ "-f")ask=false;;
*)startask ;;
esac
set -e
#####################################################################################
-printf '\e[36m1. Get packages and add user to video/input groups\n\e[97m'
+printf "\e[36m[$0]: 1. Get packages and add user to video/input groups\n\e[97m"
# Each line as an element of the array $pkglist
readarray -t pkglist < dependencies.txt
# NOTE: wayland-idle-inhibitor-git is for providing `wayland-idle-inhibitor.py' used by the `Keep system awake' button in `.config/ags/widgets/sideright/quicktoggles.js'.
+# yay will be installed as AUR package and upgrade there, no need to build here in cache/yay .
+install-yay() {
+ x sudo pacman -Sy --needed --noconfirm base-devel
+ try git clone https://aur.archlinux.org/yay-bin.git /tmp/buildyay
+ cd /tmp/buildyay
+ x makepkg -o
+ x makepkg -se
+ x makepkg -i --noconfirm
+ cd $base
+ rm -rf /tmp/buildyay
+}
+
+if ! command -v yay >/dev/null 2>&1;then
+ echo -e "\e[33m[$0]: \"yay\" not found.\e[0m"
+ showfun install-yay
+ v install-yay
+fi
+
if $ask;then
# execute per element of the array $pkglist
for i in "${pkglist[@]}";do v yay -S --needed $i;done
@@ -112,51 +133,72 @@ v sudo usermod -aG video "$(whoami)"
v sudo usermod -aG input "$(whoami)"
#####################################################################################
-printf '\e[36m2. Installing AGS and rubik from git repo\e[97m\n'
+printf "\e[36m[$0]: 2. Installing AGS and fonts from git repo\e[97m\n"
sleep 1
install-ags (){
- mkdir -p $base/ags
- cd $base/ags
+ x mkdir -p $base/cache/ags
+ x cd $base/cache/ags
try git init -b main
try git remote add origin https://github.com/Aylur/ags.git
- git pull origin main && git submodule update --init --recursive
- npm install
- meson setup build
- meson install -C build
- cd $base
+ x git pull origin main && git submodule update --init --recursive
+ x npm install
+ x meson setup build
+ x meson install -C build
+ x cd $base
}
-install-rubik (){
- mkdir -p $base/rubik
- cd $base/rubik
+install-Rubik (){
+ x mkdir -p $base/cache/Rubik
+ x cd $base/cache/Rubik
try git init -b main
try git remote add origin https://github.com/googlefonts/rubik.git
- git pull origin main && git submodule update --init --recursive
- sudo mkdir -p /usr/local/share/fonts/TTF/
- sudo cp fonts/variable/Rubik*.ttf /usr/local/share/fonts/TTF/
- sudo mkdir -p /usr/local/share/licenses/ttf-rubik/
- sudo cp OFL.txt /usr/local/share/licenses/ttf-rubik/LICENSE
- fc-cache -fv
- cd $base
+ x git pull origin main && git submodule update --init --recursive
+ x sudo mkdir -p /usr/local/share/fonts/TTF/
+ x sudo cp fonts/variable/Rubik*.ttf /usr/local/share/fonts/TTF/
+ x sudo mkdir -p /usr/local/share/licenses/ttf-rubik/
+ x sudo cp OFL.txt /usr/local/share/licenses/ttf-rubik/LICENSE
+ x fc-cache -fv
+ x cd $base
+}
+install-Gabarito (){
+ x mkdir -p $base/cache/Gabarito
+ x cd $base/cache/Gabarito
+ try git init -b main
+ try git remote add origin https://github.com/naipefoundry/gabarito.git
+ x git pull origin main && git submodule update --init --recursive
+ x sudo mkdir -p /usr/local/share/fonts/TTF/
+ x sudo cp fonts/ttf/Gabarito*.ttf /usr/local/share/fonts/TTF/
+ x sudo mkdir -p /usr/local/share/licenses/ttf-gabarito/
+ x sudo cp OFL.txt /usr/local/share/licenses/ttf-gabarito/LICENSE
+ x fc-cache -fv
+ x cd $base
}
if command -v ags >/dev/null 2>&1;then
- echo -e "\e[34mCommand \"ags\" already exists, no need to install.\e[0m"
- echo -e "\e[34mYou can reinstall ags in order to update to the latest version anyway.\e[0m"
+ echo -e "\e[33m[$0]: Command \"ags\" already exists, no need to install.\e[0m"
+ echo -e "\e[34mYou can reinstall it in order to update to the latest version anyway.\e[0m"
ask_ags=$ask
else ask_ags=true
fi
-if $(fc-list|grep -q Rubik); then
- echo -e "\e[34mFont \"Rubik\" already exists, no need to install.\e[0m"
- echo -e "\e[34mYou can reinstall Rubik in order to update to the latest version anyway.\e[0m"
- ask_rubik=$ask
-else ask_rubik=true
-fi
-
if $ask_ags;then showfun install-ags;v install-ags;fi
-if $ask_rubik;then showfun install-rubik;v install-rubik;fi
+
+if $(fc-list|grep -q Rubik); then
+ echo -e "\e[33m[$0]: Font \"Rubik\" already exists, no need to install.\e[0m"
+ echo -e "\e[34mYou can reinstall it in order to update to the latest version anyway.\e[0m"
+ ask_Rubik=$ask
+else ask_Rubik=true
+fi
+if $ask_Rubik;then showfun install-Rubik;v install-Rubik;fi
+
+if $(fc-list|grep -q Gabarito); then
+ echo -e "\e[33m[$0]: Font \"Gabarito\" already exists, no need to install.\e[0m"
+ echo -e "\e[34mYou can reinstall it in order to update to the latest version anyway.\e[0m"
+ ask_Gabarito=$ask
+else ask_Gabarito=true
+fi
+if $ask_Gabarito;then showfun install-Gabarito;v install-Gabarito;fi
#####################################################################################
-printf '\e[36m3. Copying\e[97m\n'
+printf "\e[36m[$0]: 3. Copying\e[97m\n"
# In case ~/.local/bin does not exists
v mkdir -p "$HOME/.local/bin" "$HOME/.local/share"
@@ -167,7 +209,7 @@ v mkdir -p "$HOME/.local/bin" "$HOME/.local/share"
for i in .config/*
do
- echo "Found target: $i"
+ echo "[$0]: Found target: $i"
if [ -d "$i" ];then v rsync -av --delete "$i/" "$HOME/$i/"
elif [ -f "$i" ];then v rsync -av "$i" "$HOME/$i"
fi
@@ -175,7 +217,7 @@ done
target="$HOME/.config/hypr/colors.conf"
test -f $target || { \
- echo -e "\e[34mFile \"$target\" not found.\e[0m" && \
+ echo -e "\e[34m[$0]: File \"$target\" not found.\e[0m" && \
v cp "$HOME/.config/hypr/colors_default.conf" $target ; }
# some foldes (eg. .local/bin) should be processed seperately to avoid `--delete' for rsync,
From 57eb436948875711c32ab83fa343ee1b91d3b402 Mon Sep 17 00:00:00 2001
From: clsty
Date: Sun, 7 Jan 2024 09:12:49 +0800
Subject: [PATCH 081/265] Add cache/ to gitignore
---
.gitignore | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/.gitignore b/.gitignore
index a7d968cff..69150b66c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,5 +4,4 @@
.config/ags/style.css
.config/ags/scss/_material.scss
.config/hypr/colors.conf
-/ags
-/rubik
+/cache
From 2538429fb8af475e778573c4d7afaf017d4abc0e Mon Sep 17 00:00:00 2001
From: clsty
Date: Sun, 7 Jan 2024 09:55:36 +0800
Subject: [PATCH 082/265] minor fix for install-yay.
---
install.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/install.sh b/install.sh
index 87ebcb617..d144e4247 100755
--- a/install.sh
+++ b/install.sh
@@ -106,12 +106,12 @@ readarray -t pkglist < dependencies.txt
# yay will be installed as AUR package and upgrade there, no need to build here in cache/yay .
install-yay() {
x sudo pacman -Sy --needed --noconfirm base-devel
- try git clone https://aur.archlinux.org/yay-bin.git /tmp/buildyay
- cd /tmp/buildyay
+ x git clone https://aur.archlinux.org/yay-bin.git /tmp/buildyay
+ x cd /tmp/buildyay
x makepkg -o
x makepkg -se
x makepkg -i --noconfirm
- cd $base
+ x cd $base
rm -rf /tmp/buildyay
}
From d21cfa628a96a27469e0373619db71ed37c0ca67 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Sun, 7 Jan 2024 10:28:15 +0700
Subject: [PATCH 083/265] use cairo instead of css for waifu images
major memory improvement woo
---
.config/ags/widgets/sideleft/apis/waifu.js | 123 +++++++++++++--------
1 file changed, 76 insertions(+), 47 deletions(-)
diff --git a/.config/ags/widgets/sideleft/apis/waifu.js b/.config/ags/widgets/sideleft/apis/waifu.js
index 88f390497..1ac731ac7 100644
--- a/.config/ags/widgets/sideleft/apis/waifu.js
+++ b/.config/ags/widgets/sideleft/apis/waifu.js
@@ -1,6 +1,6 @@
-const { Gdk, Gio, GLib, Gtk, Pango } = imports.gi;
+const { Gdk, GdkPixbuf, Gio, GLib, Gtk, Pango } = imports.gi;
import { App, Utils, Widget } from '../../../imports.js';
-const { Box, Button, Entry, EventBox, Icon, Label, Revealer, Scrollable, Stack } = Widget;
+const { Box, Button, Entry, EventBox, Icon, Label, Overlay, Revealer, Scrollable, Stack } = Widget;
const { execAsync, exec } = Utils;
import { MaterialIcon } from "../../../lib/materialicon.js";
import { MarginRevealer } from '../../../lib/advancedwidgets.js';
@@ -83,49 +83,58 @@ const WaifuImage = (taglist) => {
downloadIndicator,
]
});
- const blockImageActions = Box({
- className: 'sidebar-waifu-image-actions spacing-h-3',
- children: [
- Box({ hexpand: true }),
- ImageAction({
- name: 'Go to source',
- icon: 'link',
- action: () => execAsync(['xdg-open', `${thisBlock._imageData.source}`]).catch(print),
- }),
- ImageAction({
- name: 'Hoard',
- icon: 'save',
- action: () => execAsync(['bash', '-c', `mkdir -p ~/Pictures/waifus && cp ${thisBlock._imagePath} ~/Pictures/waifus`]).catch(print),
- }),
- ImageAction({
- name: 'Open externally',
- icon: 'open_in_new',
- action: () => execAsync(['xdg-open', `${thisBlock._imagePath}`]).catch(print),
- }),
- ]
- })
- const blockImage = Box({
- className: 'test',
- hpack: 'start',
- vertical: true,
- className: 'sidebar-waifu-image',
- homogeneous: true,
- children: [
- Revealer({
- transition: 'crossfade',
- revealChild: false,
- child: Box({
- vertical: true,
- children: [blockImageActions],
+ const blockImageActions = Revealer({
+ transition: 'crossfade',
+ revealChild: false,
+ child: Box({
+ vertical: true,
+ children: [
+ Box({
+ className: 'sidebar-waifu-image-actions spacing-h-3',
+ children: [
+ Box({ hexpand: true }),
+ ImageAction({
+ name: 'Go to source',
+ icon: 'link',
+ action: () => execAsync(['xdg-open', `${thisBlock._imageData.source}`]).catch(print),
+ }),
+ ImageAction({
+ name: 'Hoard',
+ icon: 'save',
+ action: () => execAsync(['bash', '-c', `mkdir -p ~/Pictures/waifus && cp ${thisBlock._imagePath} ~/Pictures/waifus`]).catch(print),
+ }),
+ ImageAction({
+ name: 'Open externally',
+ icon: 'open_in_new',
+ action: () => execAsync(['xdg-open', `${thisBlock._imagePath}`]).catch(print),
+ }),
+ ]
})
- })
- ]
+ ],
+ })
})
+ const blockImage = Widget.DrawingArea({
+ className: 'sidebar-waifu-image',
+ });
+ // const blockImage = Box({});
+ // const blockImage = Image({
+ // hpack: 'start',
+ // vertical: true,
+ // className: 'sidebar-waifu-image',
+ // // homogeneous: true,
+ // })
const blockImageRevealer = Revealer({
transition: 'slide_down',
transitionDuration: 150,
revealChild: false,
- child: blockImage,
+ child: Overlay({
+ child: Box({
+ homogeneous: true,
+ className: 'sidebar-waifu-image',
+ children: [blockImage],
+ }),
+ overlays: [blockImageActions],
+ }),
});
const thisBlock = Box({
className: 'sidebar-chat-message',
@@ -141,29 +150,48 @@ const WaifuImage = (taglist) => {
}
thisBlock._imagePath = `${GLib.get_user_cache_dir()}/ags/media/waifus/${signature}${extension}`;
downloadState.shown = 'download';
- // Width allocation
- const widgetWidth = Math.min(Math.floor(waifuContent.get_allocated_width() * 0.75), width);
- blockImage.set_size_request(widgetWidth, Math.ceil(widgetWidth * height / width));
- // Start download
+ // Width/height
+ const widgetWidth = Math.min(Math.floor(waifuContent.get_allocated_width() * 0.85), width);
+ const widgetHeight = Math.ceil(widgetWidth * height / width);
+ blockImage.set_size_request(widgetWidth, widgetHeight);
const showImage = () => {
downloadState.shown = 'done';
- // blockImage.css = `background-color: ${dominant_color};`;
- blockImage.css = `background-image:url('${thisBlock._imagePath}');`; // TODO: use proper image widget
+ const pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(thisBlock._imagePath, widgetWidth, widgetHeight, false);
+
+ blockImage.set_size_request(widgetWidth, widgetHeight);
+ blockImage.connect("draw", (widget, cr) => {
+ const borderRadius = widget.get_style_context().get_property('border-radius', Gtk.StateFlags.NORMAL);
+
+ // Draw a rounded rectangle
+ cr.arc(borderRadius, borderRadius, borderRadius, Math.PI, 1.5 * Math.PI);
+ cr.arc(widgetWidth - borderRadius, borderRadius, borderRadius, 1.5 * Math.PI, 2 * Math.PI);
+ cr.arc(widgetWidth - borderRadius, widgetHeight - borderRadius, borderRadius, 0, 0.5 * Math.PI);
+ cr.arc(borderRadius, widgetHeight - borderRadius, borderRadius, 0.5 * Math.PI, Math.PI);
+ cr.closePath();
+ cr.clip();
+
+ // Paint image as bg
+ Gdk.cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
+ cr.paint();
+ });
+
+ // Reveal stuff
Utils.timeout(IMAGE_REVEAL_DELAY, () => {
blockImageRevealer.revealChild = true;
})
Utils.timeout(IMAGE_REVEAL_DELAY + blockImageRevealer.transitionDuration,
- () => blockImage.get_children()[0].revealChild = true
+ () => blockImageActions.revealChild = true
);
downloadIndicator._hide();
}
+ // Show
if (!force && fileExists(thisBlock._imagePath)) showImage();
else Utils.execAsync(['bash', '-c', `wget -O '${thisBlock._imagePath}' '${url}'`])
.then(showImage)
.catch(print);
blockHeading.get_children().forEach((child) => {
child.setCss(`border-color: ${dominant_color};`);
- })
+ })
colorIndicator.css = `background-color: ${dominant_color};`;
}],
],
@@ -176,6 +204,7 @@ const WaifuImage = (taglist) => {
blockHeading,
Box({
vertical: true,
+ hpack: 'start',
children: [blockImageRevealer],
})
]
From c1c22410525f07f011ef3b1ee7d9cf2fdaee4ca6 Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Sun, 7 Jan 2024 10:47:25 +0700
Subject: [PATCH 084/265] fix lock for laptop lid close
---
.config/hypr/execs.conf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.config/hypr/execs.conf b/.config/hypr/execs.conf
index c97a53197..3c4204b0c 100644
--- a/.config/hypr/execs.conf
+++ b/.config/hypr/execs.conf
@@ -14,7 +14,7 @@ exec-once = fcitx5
exec-once = dbus-update-activation-environment --all &
exec-once = /usr/bin/gnome-keyring-daemon --start --components=secrets &
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &
-exec-once = swayidle -w timeout 300 'swaylock -f' &
+exec-once = swayidle -w timeout 300 'swaylock -f' before-sleep 'swaylock -f' &
exec-once = swayidle -w timeout 450 'pidof java || systemctl suspend' &
exec-once = sleep 1 && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # Some fix idk
From 5397bb2dc95f06e217b598ece569b99876b6f2ef Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Sun, 7 Jan 2024 10:49:35 +0700
Subject: [PATCH 085/265] remove gtklock from dependencies (#177)
---
dependencies.txt | 17 +++++------------
1 file changed, 5 insertions(+), 12 deletions(-)
diff --git a/dependencies.txt b/dependencies.txt
index 75468dbe0..0eee40509 100644
--- a/dependencies.txt
+++ b/dependencies.txt
@@ -1,14 +1,7 @@
coreutils curl rsync wget ripgrep gojq npm meson typescript gjs sassc
-python-build python-material-color-utilities python-pillow python-poetry python-pywal
-hyprland-git xorg-xrandr
+python-build python-material-color-utilities python-pillow python-poetry python-pywal hyprland-git xorg-xrandr
cava pavucontrol wireplumber libdbusmenu-gtk3 plasma-browser-integration playerctl
-webp-pixbuf-loader gtk-layer-shell gtk3 gobject-introspection upower
-fuzzel yad ydotool
-gtklock gtklock-playerctl-module gtklock-powerbar-module gtklock-userinfo-module
-polkit-gnome gnome-keyring gnome-control-center
-blueberry networkmanager brightnessctl wlsunset-git gnome-bluetooth-3.0
-wayland-idle-inhibitor-git swayidle swaylock-effects-git wlogout
-wl-clipboard hyprpicker-git grim tesseract slurp
-adw-gtk3-git gradience-git swww
-fontconfig lexend-fonts-git ttf-jetbrains-mono-nerd ttf-material-symbols-variable-git ttf-space-mono-nerd
-fish foot starship
+webp-pixbuf-loader gtk-layer-shell gtk3 gobject-introspection upower fuzzel yad ydotool
+polkit-gnome gnome-keyring gnome-control-center blueberry networkmanager brightnessctl wlsunset-git gnome-bluetooth-3.0
+wayland-idle-inhibitor-git swayidle swaylock-effects-git wlogout wl-clipboard hyprpicker-git grim tesseract slurp
+adw-gtk3-git gradience-git swww fontconfig lexend-fonts-git ttf-jetbrains-mono-nerd ttf-material-symbols-variable-git ttf-space-mono-nerd fish foot starship
From c2b344fde3b66241b181b04bd259f12c5f78952a Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Sun, 7 Jan 2024 11:37:26 +0700
Subject: [PATCH 086/265] swaylock instead of gtklock (#177)
---
.config/ags/widgets/session/sessionscreen.js | 3 ++-
.config/wlogout/layout | 2 +-
.config/wlogout/noise.png | Bin 134825 -> 0 bytes
.config/wlogout/style.css | 1 -
uninstall.sh | 4 ++--
5 files changed, 5 insertions(+), 5 deletions(-)
mode change 100644 => 100755 .config/wlogout/layout
delete mode 100644 .config/wlogout/noise.png
mode change 100644 => 100755 .config/wlogout/style.css
diff --git a/.config/ags/widgets/session/sessionscreen.js b/.config/ags/widgets/session/sessionscreen.js
index 994fc9cd6..468508da1 100644
--- a/.config/ags/widgets/session/sessionscreen.js
+++ b/.config/ags/widgets/session/sessionscreen.js
@@ -57,7 +57,8 @@ const SessionButton = (name, icon, command, props = {}) => {
export default () => {
// lock, logout, sleep
- const lockButton = SessionButton('Lock', 'lock', () => { App.closeWindow('session'); execAsync('gtklock') });
+ // const lockButton = SessionButton('Lock', 'lock', () => { App.closeWindow('session'); execAsync('gtklock') });
+ const lockButton = SessionButton('Lock', 'lock', () => { App.closeWindow('session'); execAsync('swaylock') });
const logoutButton = SessionButton('Logout', 'logout', () => { App.closeWindow('session'); execAsync(['bash', '-c', 'loginctl terminate-user $USER']) });
const sleepButton = SessionButton('Sleep', 'sleep', () => { App.closeWindow('session'); execAsync('systemctl suspend') });
// hibernate, shutdown, reboot
diff --git a/.config/wlogout/layout b/.config/wlogout/layout
old mode 100644
new mode 100755
index 2d79da961..0d7a33130
--- a/.config/wlogout/layout
+++ b/.config/wlogout/layout
@@ -1,6 +1,6 @@
{
"label" : "lock",
- "action" : "gtklock",
+ "action" : "swaylock",
"text" : "lock",
"keybind" : "l"
}
diff --git a/.config/wlogout/noise.png b/.config/wlogout/noise.png
deleted file mode 100644
index 028b188b5481499da80d1680c1d6b7d867ac1eb2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 134825
zcmV*MKx4m&P)tcQZ4b|GkbNeYa6|Zq^^LaM|f6IwW6?0LvX98n!G1GsAOUZ
z;S*u6CIbrJntHs>ZziYf{AIEh2`_@x?CDOoaJ+?;jFuA~7xv_`C8aTs`6bR|eq~wm
zu$&Qe!UXW+CQgY>vJ~-2&dbi)`zC6>B?{tEzO;6RkJN?l8Y8aoRVBd#o#V~$P4WoJnwime0H~j_K)7-b{m8Rx72G-AkV?m2&g$hQ2VJ2*UoF{yWL`~gbZXe@Lk
zz6AgP010qNS#tmY3labT3lag+-G2N403ZNKL_t(|UR2!$lr+WF#_`^rx1+>~8*w1+
z?(T#TclQu?4{>)l;_mM5?g~+eyAXk|es%c2XTLdT&(2JDSKa&E=So#q*KF;#-+t@U
zp7ylmMmM_Aa;#$=Yx&*pez)ws_uk7ZU-`=An%BJM@~?mWYkvOP*S@wq?|IK#Zg;!e
zEvGrnX_gCI-~!7pe({Ut(T{%g^56gdclpzw{v<~P52x%8zkz1;V{_gxqN~
zae4aFpT4~Djc;5Y`N&5uhaP(9a_@WJd-?dsKfYY}!WUkya+RwrKl;&+md8BiG0Pq9
zaEICUInHs8`5n0~e({Sh*SN+tmbbm_ZOfOx{N?#yo9}wpyOs}r@Po5GIy(QCzx?IY
z!FN}_@|BmDyyPVdEL?Z)bDw*8!3$n6+y2(KzO_93;SXPKcC(u;AN}Y@m#bd&sQup;+KPkPd6_d^ajWXi|R
zPkG8ymWy2EBJ(=m>4!|$xz2T#2S5116SLZI?I})iiuuQ$Fna4--@2Ukw5Of@d9l0W
zH@x8uCr>`~p${#4?z!i3-RoX=_I2hnpLu@o9N+uw82&x$S@IdKXmuqBsk=;4o!>;psm#MR*k(+Ak<>tFx+
z#6*9mJmo2;+<5!9zx{1_&U2nK`FYcu-gMfAo#0IF0}niKx#&eNI{Vc>J@A~p*@Jz~
zbfz;+t~l?LpZw&s-DNIwnaQ!wfBy5!i(mZWi8Yz%j03NJ^{aQw!e(sF&e}fFiB2@R
zNVdZdKYYs0Mi;!`1(%n->}3;+d)(t5%d1}Xs(B6{X8Q*|@PYGsKJ@z6zkYI-oR0H5
z-?NQtV0zy3o_Asci(B35R?-0KKn^Zy{&y4PNNt>69bch>>@`iMt7
zVjV$j9Y$UM_{Tr4!!g$T+~+>)P-gb)nnB2QkbE5g&U5rNc)618uYdjPdcXk(%
zo)J`LyX3v)EpIv7)Te%YM;7h*Om?!kmhAqt?U-}OqEBs(V6+aRt^?3{{vg)++Sk5z
zwyzyJ55iBG9D|R3$>bX6`qP&7$pHiBk>6+64M(2x`wW8zJm3NIdgl(~u7i~8Fwn$#
zIKukb&wh3tgqZIK$*25|>jy@3BG-H0``+1?zUeZYaoTJ+&pbYex()}Jy1{7>dAE&V
zll!>*GB8cz@JUM@<=>1518KM*WgaUu;G;GWzUV=lIhu+mTV9@QRDBVJGdoj*Kv2
zXaAk&eLlo)Y{VYqC`Q1`x#tCdnAwT@#4=-ms+u3Gx*A{tX=qq0FinEfFk!2S0l23*o1f4SNv(G*=!(H~W
zmz@=q45`Za@sEEzqq}3nh|4g@>{|v%C
zXMf})r_A{2Pk(wj^{G!iv#8AE{3;CnsMyF&t`Rh5o2ns|nars=q~{>zltFfM4m@N%
zFIkb?DiZCed{jv?n(Qf?t9pE=A{&I7nawpS6!xSqPQXPLRqc{hMM`cmI!6VkYLSiM
zAe)mzX2k{egH6ZT`0|&({FGh)FxLm1aD-ec26C!U=%DgC|M}0qy#4KOpIl*o{KE(G
zlh2W
zU)467!$&o!GS@eZe0H7cNhNWUo7`k#tfH-&8UbMTfxB!C7jmieRA(wr{b^r+szLl?
zcjvMlJF4RFoW6XD?#{()-)m{$cj}PSEobP<++i=ih9`l&Xd*1V&SyKMxFMnCi
zde*ZpBN|VjIogR&eBwzOgb*+c{WLnF{ZvdK1N_ylcC|@>JKy=vlTZi>)GJ--O0$oD
z{No>UI7wjredHq_Sx$12lT70M<~P4tzW@F2Px3ORmp-&ZSb}>Gd=ABM`q|prnugMb
z01SA*9sl^pp9E5Blj|Mtc*pY6m%eoQ_rL!=ub~fzQl^u|kYHq@_`~wBhdpdL*~v~eae^Ow5K-VaBti^*UjO>nUygB%W6bs#6_!eG
zN#H^ky3lm2r#|(m%dKyH>-n7$nnNhrfB*a6Pr00@56)_+%Go2&r7m@;ub*^*G1oDPAykVB(
z`o;&>A+Y2jSi=kU&egYI^Q&L|YLZ?;@_BG<+J&>x3(m;Op^#LfktAV*Cjt$*fAE7J
z%s?_S?d(es!2|eT>sr^E&gQz2y{GL|*v97tVGC3p{{V>pp*CRcfb1tIP!|*qP`3uYj8?V;lJub=3=zlYIDjO-`8~!Km>7{mYERz`g;;<8``>rZ^Kf$4z*bcRCr(9Iq$U@G
zZEtVSj80zo!Hd%)pU<3y9Plil_%GwBq69YqRUklgItlKABCObv%*aPx*TP+*ah%<}
zkcr*NW!~VK&wS?c>}NlFIJL4inO
z`o=fDF$t}Gl_MMISK9(L-328)z%vy;N2+~TaG0O|^rurFjwZ<>ytxrv5Xfug9futdcNj&(@?*v=;yS@tExqL#Bay=OZSoXkOeyR>xI<13BLEmbXlM;G1fe?D#JT!iyX@reDV-
zK)U0F1keBZ5iA5){)ET$Wh==~aRSdR<3zzm3EQMP(rQpdEE@;_6coWZ0KWJPSKa#f{p9g%aEdpcSDiIfxI2i(YrACA#cfHW!3
z0kq4uhK7b~?C&}_>x*5++|sOa$%7~KA!9cMwBJz8Ij~}5fkH*29el-8!x(L_5qqjq
zT?+?ovKQF}06yU}dr3I1^*tLjEns*qAP9^C1v{{zU`%(zHnt`go*22np3UGTn3GK#
zKJ!(9gx$ylA3>h)=pV=N*bAQeWpBwE4mjovTp}GsGU)KvN
zbV4K~WH>;`lI~8BnG+*=@-#0%ULYfjfJa8oOm_|jFa4b01SgmV;2882KoFHKj=@HN
zA|FTUj+S7h(qJ6lAupmJq`*uL`od2|0dG3d9pTtPKZpxgB!(5z!b^Lq=kC%9Qi!1n
zahzNNq^t{bnOC5c#U&lz!A{#`*B1;ps^q~D*aViGPBj55a*@w9&2y@Nkef5It;)}T
zPK7gU;e3wY3zqumJG#>m4*G$)0H?a?E;qeYEqLoiA9wlKgf8Ufq;y~}frozD!X1?n
zo;#n7*^AS2bO9bmUCb6)Y>-CG59Gnf=qM;K`3XE{e*Vvmq;GrE=6#Q|B
zz7hbP44nmh?ZShtv?mFva$Eyja>9o5lg%((aX=(6!i5DfW;
z>*z&BK~6v21%{)x@EnG0W*Cioc!QIT*4UZ-_>qK!gRtj|@FbUbgy&oC;t-l(I^Zh5RmgxnBwMc5Vc8XLJOuq
z0)`-jh={?698P7(2>~LLaR3Hv0*`?>us{MN&Lh~gbivS*;q-&JIF}Ok~Rxk
z=3ey&Q`q2^YuE=D$tiJj5VA|s?8reS8<^oDZaY`s>>`oT6Bf>ugavc5lNp!1U`>7)
z;iz-nK;Roj3LG3~1VDHSp6tgqMk#_J860=6q>@vURp7%j#{~_(K`w2
z2HJI=>m(W&ur-`KNYy!+6h4hi$m-hWjQK7bsM!2(2rgDM
zmnbQyx&%--v(c7Yo(N1>LBIi#4Pk&RVgi$K32kD|IT`}KECUF@GXTdIR2YP?6r!MW
z1Osg&ED{h*Ak#O8A(%jsp&7uu5HJAF*|d*zf)^qpgRIBN{MV0HcQ5si05X<7&08Q7
z;9ReoGq(UhK?D}$bG$J=Km|R33*HPz28QP(UchA({cD%OoG(jN=~b39Dh!d{^)Nsr
z#&SJf1OpBv__Y2D26P~^Kmr#yAPQ_br^==26Mr}wPYhJy_yP8QNc`N(H<-XV7${NJlLVNQi3X{Vn4PQ
zC>(R1HsC1`!BEAlPn={2ftViMsKEmm;aGRd8t$+)%XT3mE#Rmq0;Q+=mU_
z@t%I{3=aW>gToj{9Aj_EQUKr+wb8mUb~2X=YqG<$piFOkWxLiR;wui&hwU5U(VaZ7
z!5i2)hir}+4e5(7n8Fa0;psg1;{yG=iwGCT8uHRZrAZILyy*c!5?}d0uJRwrMtdgV
zeTEqu&|hBy6fTgH4e?VkLtgqhUofrhs=zI4R~VX7k&7}iIzs^q@GVTEcqK7#TuTvv
z16e@fup(!-yn!Iw1BVbCkz=*MOeXXakt3DB(k)O5BPZi%OVA?|gCmh(M^0b@z&S{b
z#9jgd{R|yt24LhQz(WSIBXCYePsb1rIkeG2Qr8OJ&6UVvoW99##3R2n;?%Uev`bd)2pq_d)a-~uWOF{Qv84(S
zrvw$a;X;da$qB0}zZMKjm~ikJ?qzmu3mW<*H`@s$4Y_cmVGeG>RW)lE9J;PE?tJ;z6
zx=ZFblF69b6ZBjMAG&gCGBC8`mMoN!Wh(utGMkSwHv>}!)lb1l;6OMPfyqzC?r8zo
zwk}ITfV)z@B^HJmuGO~yBOqwEyH)}p+5B;2IFX6o
#9fN(~&B0=ew%+3AaqUA8ohZk(=iYxp>kjx3`=f!_qj}Le(P_iTc!zrI}&*uW7
z053qfyBwy@p%Z>}XR_frpMoX5$f7OwhD$dY*pwadoBV>K^IhBeN;bxM0b6_gk{*IQ
zA7K~VVW-yo!B9mcFbZ;f2Ui;gvo%iZ2mWjULq!g(abI8Lk-)v@EBchs^t;W-gl+!8
z34)78O+I%!*WyOPYn0&56LAR#G?AL)5MHqJJwiI4qq?Jo1m>w2PS9{&LoK97!iGYX
z_X47cM5JT@FTqRj(H941IGL@xH{J_gj81N{n(#vo^2p#aa*Ht$ziY#R(^ZC>xHL61|*;ZSQBQX6K(;XrPb}k}l
z#|;y95|~>wi4e#DM^)e+9%k#k)uk6>HIL)7CQ=zF!r9`gg^Vi0B$(Z
z#6Eu456Qtwi
z$2gI-Kdr0cXx8$$#+sKF6jqv2mLsYZ5WX=j!df6I%Uc5jOvE4;g9s=Vmsy;LXo7|H
zFBBIj0fN+m0K#(wYeIZ(9g1}(9D;*d!y+4)yAg~;`$&nju18daHK!*K(#0Z6x?7_{
z9(W>$OlAn|8d;0X)}kN{0;pn<^);_~&0H_zd_llk9c|K?@dbF-uoc;?Te0v~K(HW>
zBU>{h(ZERdyVt$$H60fQ92Rlt4l{wZ1(?VKJ8SaTz}g}B$ds^w2faByZonh^TSvsX
zIiR*%r>4Jd9%u`fv}J)H`K%|h#;sf9t`}g~7ALH+qdVCp3XXE@V;_4uh40*EK48>&jrmUT~rZzI^2?
zUzv6xs~}4T6)}5qe3b@{@P*b+abRo51T{9qCz$yjr>tw@+^|;BHO!Pq@ls%it2PBt
zNmvpfA05~W2OP%_YyY%OMpeC}BtWYm2^aQ)1^K&a
zA(2Z00+XT$-&!Zfc9tIrcG;8Nz2^%sqc_{(xb={5=X=|YM}a^%Q4FBKmx(w=6Ldgr
zB9zjE0HUlQ(gO?Wy*LBmyY)^GZ2?)(5I|a;uH*((C9nTY9vfzey#6>m8CqhY(()2a
zy}He+eD3xsCy~V|D_eT+h3GyvF4sPS3Kl9%eZZhcN@Q&gN^j(m`RM050TwQdWVqpb
z)tC0YcTKmzwU1!$DuFUBn@;u|A@4Fc^}b
zJq`O|Bap*TVAwgFb-wm`SXrO!M<;S?pUx7HfJ&Q&?n4BoFhe2-MFb%V3IZ}RqjHSy&@~x|#Dw+&
zI7jxGQk<4tJ>!JX`sJjI*gO>Qwa03%)=W
zV93O{9G-(AH=Pj?Rt?PrDzeEch{70*t?GdXvcjVhoKZO_0|}zeMG|^zhd%muJ}2k2
zoG*Fl%|3K<4a_7E-}~d>0uDKp@q&m<>0Hi%Al>1Gz2o$0o`T~D7|0@6d9@a++xihx
zfTWvXplw_r7e_Z&A&4TNKxcs}`QS}&L>6#N-fNf6-KoT{YzTic;|klrguJaWq60o?
zi{q$toP&GL5ws;v|H+L@+LolqNsbnIx*5bS{6WI?xhaU&9tu+Az$q`hP`T(&V010p
z!{47^p%2`0jEsVSpw1V(;E0Qco_q}NOEQkrNg!;_OyBxo>z;=cFzDgBmfCb<2p{x;
z=Mo6J7(xo}`03^cy9+2dPBx#53q3c?w)~m=+B9u}v#K~jr{y5@#eE4-@>Hoh4m)j1
z7Hq_ax&g*MeAR!LYyl*H*oIGJ6O;pN{sV^&roDdf$`bqvQGHcRL9T?Ec@A
z_|Ekt`RHIif$g()?NHzeY@a=)-tG`X(Ak&It{EhlPmFtF+x7M9iFy4F=bcaA>({OV
z?r;uc&8OBqTb
zX$J)T&==-|D02q^dg(*k^tO9~9U5Ta9C)xrI%tb-Fw?&N=zhka<4O@}f6a78ePd3NN?RYzPI1h%}fHm6}Oe>`aC6Lu!6KD}qt@F%Zx^+(5cX2HMw
zhYi`yF}iIVtBZ6h0u!Gq8&!kot7H}NjB~pqr_zw!O^S)cRXJ5!vasQt(zxN9EYfm*
zQCGF)B@>IzDl(bGF}Fok45F*!A}~2r4YCHgyqxPCk=?E6);}2<_)aF4nPioQA+059
zPc6d%ZOZCBX-*bdLRP1v%nBdZ$cid9llZcNs4w%#hU8SKnz!i2gu7e%)Q|I(`r4K;
zR6?+q(e$lqGdwltL$_|p>)#MZ|EdNV&u7nEk;5?1%k|oUl|EENDitrERWm9qm6Z(L
zBFUBsDBH}m+n
z5&;AdC>Vj!dX$D@$RKC|NT1474q~2ylQC3}1vri*NMMKqj5f9NeXFt&$NUEeqLVQ+
z((8`_TUg2ov@M{J%Q3ndLNrE4TE=j#VRkFH1rT#wEl@T5q623{S^?FZ8-pm9;ji3h
z^p-0iAR-{Jpky8lW}Jz$x)wQGIjwDaax{*qKLH#LJqsq-x~YM$C|6a<@pEt#D7D-Tmwiv|}yS#YY_Ci@w8oZIOXJ_$&Q<7EH-)7)?+9>RjBE
zh;bS&Y$GrU;LZ8s1D|#-yX3#*B@aFbf}-Fo+59OJmAgtx<*Ff<64IadmH$dj<+Nbu
zy$#ls>`F!dm4DiBj_dqaN*Z$cz7kz&tQ0kjP#$VaX{*Fko*H_#S)OZ@q{>?*s(zHK
z%4mN|M}6o|xvDhvz3-H(J~sqaZfZ~2s=Z2l=a5Ce+A$J%$(=UzV+iJ2n9zd_3||@+HC$HC)0GT{0S(2K^bP-gk4N-zE}J-pC-8v@{K(~c
zeK^l|c;G)=yw{d%*$(b(=dURT`oUA1zH5_6IBC-{y3w6Hh9YDz7YE?zGh67BJbXJ2!GUf#qiq;_
z?_7Q05p3wijumSsl~1{+&-QpT!9J`mBA|=z|Pwuo-3KrYHVIOXablgRE-X2oct8
zPJ2nIW@G}9QRb0}+(K1t80N|1vW2Yd7N*a(tB{#xE0Nr--S)Z?wcUOeja_G{gK}G@
z^1U)tl^`?gQ`A*0xE-$gQ5mRk+}4)0+%mT}k!2ZfhpO&WB{EPu7+7~h2N}rTOR@qT
zoG06pPqjuTx4LC}TZg#)?p84@T3zp$tm6+}GPexk7Odq2u5E~-D3wp-kmCCIWSa}BEv(OW0zzsX#>nHnIM;UD{|LM)9iyn~5~
zh#aZ_+tTRUQXKrjB|57Fa2ZE>#zw^2f$1eM>D=D=H;A^M#gqkWFRh28OmwiQt>#bZy5C*QsbN(@>G}GrsCv
zHr3x_AN$zpBmBZmCqANLGJNB^bauVAEZuQ4NrmJ)Rg+~BIDu#Erh3#~ThQRL(FP1u
z_LfxO0Xwjdn*&WXkjrN;@kd+m#4ml}sVNYcZXG=#y?aT&k{Ia(0w;RlQ@MsLh}zr(
zlKY-QgjBvNhY=1jkVFXwRKdz{(*-NDs(XGcyztDp{4*+R=|8f;%(H+Md`3sxr9Y
z6C(kJ+^%8xhOfX9JoU-p{YQ9Y(;hiohro_C6a*Hc8omO#-7FAQnJb_J8L1G1^CNCM
z8fZrlBR5$adLgYc-Vo4tu4`@xAp{?DD1s*(keg!*hKA=1tZj}1_nw(UIz;m_L@^W*
z_?$1u8wMhTp$mBhTsoMu5XcagEnq6Z^^h(5vWdQ6z`@}HGd4whB<5f^qixr)we!f(
zatyXGbwIY}JlyR>W_<`W+H9@~hhW_!MtEe%K;GsB@k@YpEk3e!!{=`O$36Y97l)Pf
zym}6kGc>%%p&n5)w86m^M3S36^lxa@0%aJ$39spm56+nVTqzy>u{*hO6?Udr1Yh5|26uY~
z6OP(8{{&mIvo{`*5jL)Ar&1g*cJMFuZwXbqo9Ne2oS%`o$I93mc0IF++hnExHjshZ
zc$={Z;-GmF5fAu|%VZSQut*7bj^9Je=0yl2bEp#9`Lh-BoU!d%83);$0Bn+x(=wpr
zJzK|l^(Vq2CPx%JdS;FejtNvU31FIZ-MJSM;CkkToD8nQQ9;tjwK5h*V-VN~D*7*2!I1G0Rv?E3LhDPPO_*!n
zcZ@DjsYqJd!6{wCsRf!=k;B_DdbJFKy&cc?<~Cr;@dPmEX@g7x0#4{#Qfs9*%=E7!
zKz_D&T!utO96@G%A-<}f9BkOia1+8X#yxnlq2S3D*{w<)H#sS61Q7P&JZ!IB0jTY6
zyyt`^8hVkD4n_(p7MxOHs#aTmqe|39H*x5X@9@EIxRaq3;yuULT#>*^C)mP3@}aN9
zCZG!lFoALQXl;{g1p?g10Xj*f&Beiy?i?9k1Z_4WE5GWw!j@dP>Csj*5@2(C>?U#H
z5j(W4Gu-)(?^=37Ui_J{46$G#{&&$4S%U_#w#7q6Kd+QD9
zh0m?UGViq+TfACV1{DM-?-+oU
z%Z6u$Vaj!VI)@yhxqf=INU4jwhB<9_%$Nd-0D=(8acz59Io+Bp20?^wHV9ty6r2oG
z1un)^wW;!8EBGK|kGs&(IRYty8Y+=rvS4Vk8Dg{+i42kmY+=GNWIN{~Fyb4I!WNDu
zyy>EU*C3SPG=h^u8^~{HLvC%j+tUyfc8-%tW^^4ptHwDj-Fzo`RdvX=h6{p&A+n(`
zCqzK};9xjl3c%2WZOF+c9A41CK|#0e4L-t7aAa%v;{h9)GEmXL
z3O?}WL%0t+K82S8vEjD!1ZEs}y+?bD7WhJ|&T)aPJxi(3V1J1ak9wX{(AO7?>Ej&y
z^HhT&sh}yq!4@B2#g-D6fbP2%Qmgh9FgV8d*{p@OcHV^(pJF#M;53|l&o}V_7qqRa
z!heZRav`57l;=M8xib;!cUM2}B+|7JJdglH01;dSX3!$248{0uAEPuiyRTEhjv)Xc
z*f1X8TniMLnlYW*P5^CI#(70xB#@N^J|%L?0sz@o8a)T6-R?k%&H@)ga{3lHl3kzO
z?I5Ev+n-?Md^&JIz?IR}eYex`gO!&xT
zf&n9Ol2-kzAYp*ChD_wrW~;i%hPXX%C*W{u$9v3zt|}7PAh&kd17QUxaRl-
z5eL}?eONdju~bK@C7d9ups9bDz*(k5FhpzTRrZA;XA(f^3P;b9l9O{gA4Yhj&z@W$
zPx~tgYUFTk+n#VB?^~KsHP})XOIzCT5Fc<`U~20Ve1SJd!zp+fzK{cF1uFfk1o;PU
z(~tdNASgJ;`2t7FSXyW;0I*ZjAh2&&3=Zo$iBF&+Cl25tTY8a~ZD7|HLhx!xja#_O
z4+{>iX;=#zcE%k=1X(0z?ePhG5kOQg?4=zTdaqq}BNI;GQMQ0zHq|B^^zYo}N@3s}
zv81IqJsrXi^{c{U18r308?Fn`Fi-(H2T$PU8o>>2n^7Tb2
zM0EsHt@tqpkyG$dZRo@pSC&+(TT76!
zvJ?@$Z`jy#OrF2;o${AH$V3l1wL2pc0@io3Boej@sj5TZlm%Q*-X0tAe3Rjj00#qA
zigT(;o#(Sm01FvQWgzf#2vr7R(wze|9F%=k4Uz*LpZLTl&KnS%8~%bt%LPm>>krYj
z$8lt3_CW~$mGQ{MVN?b(u^>Yp0mgHgf=5^i!ur+@ecKs8wWLB|BXe%{1Fu?RPyLZk
zg@V*bs7gb)p6}}iE=)4Z^gS-bF4`BM@q^7>3mX*$r`IMN$tUTl5;+N?OBi^=&MIvD
z5wLvce0XX@!fQRCHUw%i3nFbI2OD!YctcK!k{#IyM?B-nMk-|Z!c~8Gj|+zQaM6#d
zAEyK|dan$f2lSp40MDss?IV1jc`7pPJ_f2<;e4Ift7
z(j71OJevq?Jx@w!Nv;hGBtbq(PNO{u9k*eI5Bg9MYGYfLYW|9Y7^k;LP8lY1i@eHq
z5f@s1wC0zHs^#4<8A;)B1_xAil&qhfq}$es)dFb
z$fR-shU0=CLo+hNX2{km$yl<8&;3e|VV3h`BSruseK@ilbRsVX|7#
z;#hQMkI2G?@G(^4(Cl3%R}HgUJCEvvt=L6C7kHg3o8ye@t5RVv0KpB(1wa^ut)U*-
z+Wwhc*`JfC_{gd6evJnXFn108Vap-N-<`qkCUJKClM7y69E$vO$3Fp_Tml70(4On7
z@?Z%U&gq=ycvRE4iF?}aaT2)UKj-rzR~4eq`qno7u)Sk+6*TFs9eu(~An!&+H?Hv5
zcikQD<_tVwuRZNcE^H!Ud(XM~D&J)TqYg>fH3Bux!J6IRj{o$QFxZM+%(dY_i4MN-
zbe(p5F4(u%94yI*^SCAO2}s)V(yxTTmV&%d1Rb=?|LNNg*s@bMYkH0mX4>D35^U36
zSV(P~2*Co76z%7tR2H(OOygF#21G;7!C`!EqFQuz9^n~ZFadn+ir|h>Kt;rmva(Fc
zNF2QVu{f?_B!y*;wm<2PjA}y}DYH120T4hY)sJ>$B!SUbScVg@%5KOnvI~HMFnxg~
z05h6n=8Tl&mU*}-07TBDedBBfR8^6Ku^7T|g3kVPR@n;SjoD=*8Kmt`?3e(XCV}bV
zJe40}>$3;9&4JKaMptFP4PiM3{mq3mq=uJ3rb10T?eFXHP^ow8atFl3&25gL9puYNT@;+Ig>9
z5kzEK!3>{pq|pG!flaILWpsCh&1Xr#k_p-S`7l)n8R!UG+-Gxo`d?LoC*7w;@$#1v>mxz3GpP^phBIRvUwh7SwaDz>X$_M1{({~k|AH{nO7VkBc8)j41hm;
z=);ai1%iyKR{P{3J4`HZfGMBU2P{;|Waq2;5+97p?5II@*!0tUaK}%&;PuwgiwdWs
z2^^v-BN4Rq9I^?*6=8wTxj2NZ3%s6W_q_;Du(k~;18Ki4Fq&s_td+kAjwFCpP52L3
zj)BC;Dl^C?BD&z^THi6K06{@fU67*#W1II9@i`=L1(bGDH9w;i7le?Ij%{MrPqhOc
zE~*)s6KMr%#sRD>1_NZFpWq5$0Yva_hXer;&dPBwPN#Y$6Fpil18?N0s_P{ohdC8I-oIPFF&xh+z71YxK
z90>;6@5u+jj~?(OmkeoMu!Mr7Rn?LLIq5F&t7LIO<`vM|Nq|ml2V3os$$P;9N08rl
z%|USpGN?vWuw>$l+7oC?wD51AHjaeX>?_%L36@?x3PqP53xXlN;e?muHYCJL{RtTC
zp#3(vgthN|c0OLwf&ai3$6G4WFH=c6bl|wKcdqtb+s?MFpeG;w$iQ~~+AWmM^lt-A
z{@hL*c!0C)*;4>)Kz@9yQs>*`R2}J~omts}-}sF0&Y`FF=mP`&xgNgyat?X;n1Bff
z*RZF64djf
z5<>}6O2MAIXUG;c8eWRZ-I78G7yIVe3PYuvjFLPl?@!)YNz#0?JA(nZV?Nt
z*54o!g2F;O`a%?ell^Vd~4E`o6siNSEI-~khpx@?0JP4YXpEv&W8-tAgpXti^9ScGq@VUDXEvb#q6
z0+tNT?ycXVZ-GwY;vCv7AheSu+2OA;6Kr9Sv(bqi8itdvA$9YpJ%7j9=%(M+4Cznc
zQr-0U5ocpNn6rTZjaLE)9N18BF45t>;K3gFgSX`52VVS=>>QuH`5=AaLsrNAcRe3b
zIZJeOX=@vml;b_VM5cC~fLlwF*q(j+VF)@)I3;R)q%V6p*Jst2e#p!=_y}MAp3VX#
z`SFY_ZR^87>D=D%IHeeQ?8FDP}#
zlddL4`^6Oo(H`B%h13GN0D#nnM`Y55@AT_h83~^7a*p{3eX#)t@x9fpD)
zhQM@Hwk!7$1wk6dkYB~-7#qM0Nn1^>456^8^!
zwrN8=!!5x;@TCKL;s|+6NRvU3YwH(7Wsay1fr1kwZ%Z_M=VpT8FCGdC-EHF7ZYtw^gf*^Tt!*E_(Y;H*InBu}`KFEg7>p4)o5r8EV_-RMLWJ}lMLF*m`XhS_d
zz#mL)2#j>*o7z>}umu^kM~BV0XoCzI7NAV{5*+a6R#Zo#F_QQWagAf!I@fhNv=WdS`w&or5Ly0!E7qnz)!yof%2tZkeVtV>=eUK(_|PL%e3x7>Gw(}pi5O4dQ&8Wzev!>3ADn}~
z-Hm(DUNOa<+S!ciXyZbS8}~DU?5kWuUW%zCIE%T7eny*+qP1&uq)Jnj0oh*@!<>gf
zeJ7jfr;XKQB7|cQekEoA*#P)H9>Ap7eF@nun2
z!|)W~BERVE?x5=tmct-wTLE)$KpPSYI*i!@L&jGA`(CDP%^4YyLqGwtK&n({bd?9p
z^ec-LpbN$VBIj0RkXwe8X96*_`|m7Ls!UdYMo~VgZDXFvTSa3|a92p55K$yxk%0
zF&MJ5leXXp3wk+E@X!}M@UK9pFSz*=d|TfId%;Py#>v@=%#OFEvI-VI=mkgDsEj#$
zKc@u?_NG6~Jd4+ci>lLhnjkw|4T;F4>JZ4tu1`}Ej;r_tIn|OIEO^BZ-m4r1I=%yE
z_M{j2=!~my)TVwMgSVu?=0*bi7WZJMqBGgwf?pN7egzgI10xweM`v=d3ETw_|LLY*
zJirl!g_s~1!VtH}sXrAPKEMG#aM*hsU>Ct0k0eVzEs(N}qK6J_!&k^_T1S8M#&i7H
z@F>-en8Hr&XR1nYgg1DiK7e|%#8L=H7;nQ=Qvc0kx8Dve@39b!WoyQ)C
zr|tGF>zPbd2s;U`+JF%=RT{x^np|4cD`!`iI$3x-Hj2~!MwYrY~@nKQO1wBZUF*eTrg-H)BRrUk458ad;eM1RUqtPgr5S1VAR?@L83==_(xj?wNXL4u?l$l
zGg4^xUGvR?82yZ%^g%a$v!`S2A;u=KbDsXQAz)1<@J(4
zQV2QROx<4cC@HkP*KGk$x``PqgJf9qCUF
zgm;}_;pMYH#UTm?J*2B&ZLnE4cKSU@dh{%)#M_==f}Ox%c&=|8lUT{?JZ-@(uIs-&
z_Swrc1iQOlTm2Lm$29EHW|Pj|lR;bf)9{P4lZOp`j}!h2LNMs=CjK~=&B)Zvv(`km
z;+`D+FscM^YJ_e1Lvvv4*{Xj@hTQb-?yqZ9Ol-u4lB5Cz)~>^O`nLwm++AzAjAU?*
z+{uC?u*7492Y(c-@nkbP*obCDNu{?)ChM37QJMnFkU(@*c5)08*@ha%xn9;#2uO@A
z7&*Tk7EQt_qZvQ|RY0o0G*@PFB0*60Q0keBLF~rFO-?I+mBz^Azw2ctLlzlM84E=H
znS|uf2-_3&0FiOKqo)KF5Hg%KFM>%WD6m_L#rZ{kfyI0TLKynd+h@j5@(Y;y7c3dt
zTwtq?IgH_{ii`6hk)aM*4gU;bVM;zkp^rd>EN!6!D^5jEWJQo3!|B1oVOVYZ7xRdQ7gp4hNn3_Cf`nlSy9m7W
zf+>5;=xkM`W1dnH5|BAG-WTBE&j;{@d=15LiS1zLd++%NPU5GefO~i?={e59=|F$>
zjU=8p001BWNklDexNpk;}A+
z_629x=$kEYhh4SZT$W)d9TXkfzykq{9Q;Dj;ac)-MkJqeSct7ELIOhx0=F0uQ0|Ta
zMAaiAY5+kSkDE_o00toxff1y;BqFLxha)gFqc*o-%ua!pPH0nqNK9D))iMOcaHj)l
z$i|3(7ep8li5fO=6b`0c0LZ4u$?2V|9V9MzAU)aWL=M@I%s@kIF9B7SC|hvUCi)H2
zWVsfcGK$Pl)gYj`gQH*M?T)8R$_e$aFV}I7_8ii#WAGAq1bYDyd0LBPZcdQp#7GZ6
zRSaAaiX-`s-CV;t1QBz1f**%6$0V@`p#8uBEM3z&GHr4YI+6t$1w{@g*jk*ZAMzuY
zYLUaS3mN-?4)YNLmAOxC($$}NAxTa!g9|5Wb-H%hh4Yb5P!mjBH^#x)OQq`Oj-XUf
zA)DYT$iq+YmAQK~%JK-oO27Wt16L$yb54?gIZw%fK7vKVcQ<>qXRgR(G^|@x%*K+3
zxnLs*wh#dM7^m*pOv%_nUcAP6JfbW6u_;}ACjhj~4&L(z1x1hYn1_@kRR7xJhis)^
z*wWwUepo|5WkW#*jur;@j34`wU)%ckJv{N4p9nJar3*h6)cUzI!Amewbqbs~#hz@<
z=6EN$w6~tN*v=p9;9_33O$ZD}C0vPUGl;c8N}bC9Dk0?8xrzWO9M`z&LrLs=hV9NC
zViKAoB8I?3*>(u%X?nrJOCKgcIkVtMIiwI|L}JG&(JEiZ9b>#E4^=Ko$SN6`5s_33
z0%a?31qtuTL?=O2UxFQS31qG6Zhe?QM2;p85faD@suI;FV72FS!BAjpQ6Cvh9K%vc
z&LLzApp#psXAp+4=vLt9*(x$N_tT1F@{+;b8@R!!yC=xhvJ=Bzva^Nu5d+~ks9=Wp
zzIR+8k|_lP{UdhU)C$T1jO#eBK+*&y;NbA;J`_sRCT~ZWnyig1V~1>kdHI^&Ywa-z`!NL
zB-Iw%^F@^wTk->e2oApMIaK!2mtw+-b^a;Y2@D0vZV>Qa81Xq3l+S`Md2v`D5&=Ei
z23wU(E~6hj6Wnk|aw3B^$b*k$7Q~##cDN$B+`Oi{wh^A~J(8s7gxaMHo)#Tm(ljLYNCcJdJtDejJwo3@p|zPnhmW;<~<`6r90!c-%G7d%w}
zbmI6(>XxhXk)Q5lMm|PzthIf(uQA-ZugSzfiqIeNmKzUGChIv5|>WHi;WAWatb=CiMSpNXJm0gUYn;nooLS$psy^7C^BXF{UiOz|B@)=PJzF9>
z$6CFlrTY(#!R(Y3Ao5K__;ibGOD$tx&vz)DTV
z5v2hmgY~`Yt|j`~^VxNrO#hVXM*}FvLG`JB!#$NvZIYwOM`YoM+E&T5?B9PCBn(sx
zJ<=lZ7&bVrAD{Il*a+-^CzrqqL;bi>(F)`?!b3i!EAR;9UWU9fV;Gu$ViP2!2d9!n
z>5t&r?JgF=FeW)TqRDmFvICpaK>#A7Y>q_q7ZeP$;nGTP=a~Feb+sJCclt$2c52HY
zfr?yo%W26?e;Br(^A$ucbAd3&~Yz5{(3i
z?Cc=>vy-6SV_rU+i-7?ia%fo5gUvXL>XnZ8g}3Y#Pw=9}!ng+~=ePTZs<|IuVPkmh
z{JD5o8;Nu$kFF938ND|u(I%|i8I@qk={tJivP!X=GO%+Ef9MGZQx4wKhuqHfa;*g6
zdjW-A`LQ6XZ5YFauanPc10UNFmRIa{w|6L(-odKqG@b=^G9vEM;oP$Y8jmszcCj0;m)?q&8(bvOBk3NM#rS
zyPqZ(XndzMh7b9*FY}X)bLdxKfH|jt1Ki;#7-?Horc$K4Arg7aUm$LKz_*5q{bWek
z%FZfg6)2LlPKGS17Iu>DVPTF#Mwhf?JJl+3BORH1hL-?~=rSRP&_902u;yA+SL_B$
z)uwYft0@JXQk~#}fJF|8Q&vZM!5+SC%!u3^MS#FrdaE>=PlAW<+Y(s?$wnfsk$Cm0hY@wJB&yY;=^+yE8_&_``nf}wZ8a4UkVJAMGSe?RIB(}9caQhTNXVsq8317ZYm?zs
z2#60v&MLqNgp7trG7d)twhZff0Z;F6VF
z4C{KqhJ4;5RNFfXBqp%iS_6LOBgi9g!WY>KlnCnPM&tOFKR93Y;d{YADNZ)dF6bi^
zQYh8wKt7I)h=PR-*|V06k6>g&Y7Qa!z=obZ$l7zA^w%EDz1NqDMYg1`{@9bwEsdzU
z>X}J4VLR0T`wCdNA?U+_Gt&beUgXh+Y6dr2gQeONT#y%^@J=@O9Xre9zNc4f6E{TB`GlJ6Ha^t
zPB`qCwj|irB^o{KTv`DOatYq;<1RP}dOd_JSogye^xzBr;6~3Ds`B5Kwcs|HjBK>S
zF7CYbFn*&6eYe>rez)TZuB9&H@ML#=NLaYXH@(=a
zZLR5|$Pgdk&0o5MU8U??oA+7TFdao!0EjHl7&__cbMp?OEkK$y2b2ji#sq+CL{3@E
z{1%~gMnFRp)rU5#BB;_85qw{^Z4V-uLa3KVqlHe=&SYxA2HZf6ZxGDQ_Qo|ovR}hk+V2%`wEg->OP|%;g;IG47GC3|Fa@#?-1cEF`
zuObl01PfKKU?cGuw(3*m$L2n(=FGp~jL-PuTp5{de6R9@JGse+D}p!dREIc09>EJ%
z{kjsn;tnjlRBG_03ul!i*_}@22Fb00!C^AtAKT!Lpu1!OJC12Y
zz*+eg{&z}O3k>K;-amWN%)4a-g|L$vH-W0!rJSpeB@#@29n+A
z!f@IbTvU-V2FFEc8Mj{`MyQ_Uk{tyA`t%Dj3`9r7cbyESO7NYEpu1Hq4SS@1rSrImZ
zy7o98n{rrz&~OcAf*UzGoGOHTt=`r*yj`dAkc_kiE9bJgYL&w~Pg|~`7c70J4@p3v
z^=h>~{RQ`)+~=4$3l9O6oUoHHBn$obpf(!`ekxvbAZ^O$IJ?t_9PKXJkDYY;zvL
zT{=ABf-
zxNk~??FDJ=;1q7_m)>mL4yk15mxb6xP{mDh!kz4RA_=R?RM_G``+wm%U*$s*CZEMU
zRh?jytlH$)?8R^OB~h?vOHOc@o@DbrOtmFYchi8*Jv5JZ?7i)vNngOaNqUl#QQG^P16p(o)0RZQA2GD)csn?dfzvrx1%<@zxgzPEdNDNhT
z^cH9(AIAhF{}F&r-S#JIw(W@ofui+sWoeGVUdndIv@3zNvnVGtY~*Clm9*RtsIp|^
zeq5xb0fGrf69@#H?o84{1;9qm72NPl{{oF*&tB}0hrTap`!CV7BA;&L@jc%3CY=4LrjG{_a@2W?08ax1Mc;5ghgJI{2uT;e{IlqSztf@*Tkpx7nR475iDU+
zg+wOFP*vxJYaEjkk;}9L&UeSI$IKkd4zM6U3{@O>!Y2BIjmnXpszewG+8j}^Gg(Xz
z0asNi0lR}UxmfHFVh
zpN>`a!A}5%RmBRwW+%Q+XZ;EK{7O}hOZ;AirNU%OwlclYT(N4Co_wn19dPD%biz-5
z-BS|90shSgjcoY1q=0wq&8K@Fb89$`pRt}~W+V~Ni-QAK=Pd+Nfgz{Aeo2M_`?V2H
z>s$&Wx2O-4f&+shim@u;edZv@$pC>z83v}XEFvR{y3W_P{>aJEdH|P`DT4vdP_0*D
zNJL-&nH}K$(yjK$!Wm>-z%zjJ9U}uwsswxRl*|F$ZSEeb?Llxx5$GFc3Tm!l_zgPDD57J6CpXBSZWvxUw19
z$%Tt#pr8KftPO3!2lj%o1Y>x}dFW{VtG(i3&VC%gbVIug&;hmrmKWLSEum^3UicAhjbCFtVszh0vXw
zp3BmQSC7$n81=#X%|Ke!lCIZJNoa%$Vdx2!OEP4Kud0f
z5^Tr|c+TZ}0l7Vi1Q_S*lYR(|V7_Zk%=bPUO32W#Ku+huv#pL>zeYCMoV<>=w-@rW
zUqb+d6j=NTMjTFZ63laGRRuXXiy;_2^~330*Sag`z?NOusAU4pQzEbznY7XKe$8VD
z)ErOp!@Hhwr6&wwi#N{EFS4s**cH)nj6(=+Fcz%H<9xO(LFz|4t`#r^05&F*giz4t
z6Z&DN0t~-sqe&Q(F+O=uM%a=AhsmZQ=_kwJ!Z}ryZPCR3B{Fw-*_po1lT;eMlTX#b
zS0vv21CDJGCHb?H{_$8~RUu1Mjy2EAHaJV(e1MLEkpy3`!E=c~645`oU`@w9;vh2A>ln>w4K-pz@!*jOjhcCNty9zCiCGSI*x~r-HAxkzcTFb$8AQNV32T8Ih8aH~>75
z+pvJs!jFNp?WG?>+2*1ICYZI9qF;5UA1CN3czPNha3r=cY03sj#JK%Z2^m#B{=p+$0Z&%Ak*6V)?>L8Q0}e0{;QDnKj?$3Y%@%Wo
zu5Tf6ce?};cBZ$s@I#R26!i1GB*{4pOI$~PT*DpTvmO3<(U&~hY}hT(NG8rPM*<6f
z+SLYLs3Pby=X$}$dk#l8HgEX?>{L>)XM6n62fX>4
z{{;_8v|qkYNPh&Og|%Ht0=H
zHlvF~MQ-20OOWa3_F$l>A-^`dd+j{!!$i`kkRUT3ks!qp{PSJQNwmQ(iV2Bi8yJF!
z6M#t=(N4xgSiwM+LV9=GWC4Hz1`+%*7Uj&@v|?7~a5?0d#&qEJxNm%zj6oi7Mfo(qW1@zM|75kxQ`JAyeb
zy8ui(`r#0QOsjx_t7J!V*EVsDj0{R1@|y>6tfv6$iuJ4ehG_I5~nKsUU`6u3;;>wdtDktAa{u?ao7`c#X$Z{_H3TXooEH?8idc+<9b$CCs$Zk5F)2d{V{n6HeViPcpZ+x<1&)e~Ex^
zu^sFMiND?
zzI;w%Cm(r`3+3l!~mwo0&Q
zYt|kbWjtVsxW3bN0YD|@n1DukYcweDvn=hr9%3a|k0
zN)yXKu+GM3!&vh7+!DeAu|1|4oFV8+C-XvN^Dwh>dX$AsRzwQ|%6xeBqZz70y0`X(
zTrwjPB7!w-R`v?)vLb@Qm4UU7#O6>CKp^PHX4{R^dKeDGCfb&T=~P8&GPd0>IjUg6
zDOEfi-8!9i(WIv}N$tkKmh55;9>S7Sf?{jy(+oY^T0{WQ7GAXtk8=bP>ubni9h3^y
zkjy#0!vl^$b`FDQ=2qxKK6YnMLwok-4Awg#zqLnf;jSWkSl`yLUZtlG&TQ4R^Vy+?
z!12(kY(b|jX!I9vtfjN|ihS)tLJyPW=7bs!<3rV5TM}Et#3uZRePO3x-{XPl2Yt5a
zm3?qV5O7UHLIHvP>?0s@d|1GT-uS^@-HFtm7p@AFus2MDYZW3K!k<6GM;wq;*pQ9z
znBDQ+8Y$2F_M^G35fH736C^#8*$>{*%~KHl(v;8a0YCa#gC`i$3D$hPxmI!+?$X73
z=h;SR{$6IQxXTu*7Rt%??XknSO29Hm^8*4xk0_`LWJklOR;n_dpvO^Va)u);Bj{IF
zR?Y*F5jlGcpv
zK*eZPR)T|}gX;v4hQF#ZnN!9W?3!zlv1Fqrwc#V!YDd)od}Koo0TCW#X=B9hKnY^9
z7nuMTt3;i{IRwU@x9b;*
zkP`>!p}J%T?U2j&tuf=!`cV-HipZ;K!Zj5qy;@SBveq|UR4ncKiUZ~@I3|n)DSn-S7f&2>KKr_sy;KO2GIzj0XA)tx)<
zP2JGJ^|0wKdK(l9HiEfeM+fp*-XMwMG;W&KAxrant+{L(hx{<4OFMzYm+pkKWy>Sl
z2o%=r#<$vuSex2!Uav=W^iO{>ZmU{2I{{@bzyYOSVG(RNJrW|gIRFZ}M(5r)x!mn-
z&V%snvu%#RdB8Cr0T}%f5UB~nnSkv&;5c93oX`ttWphr^f;EciyX|3+%XLa#-*Euv
z0#IO7&ii8!$NG6I!P7a0QrciBvUB)uf45dfRlr$V)QNc7GJl3}txJ+o;Ng1bI@ZmG
zopW~jGh`Ad1yF74xBaZ0E9fyk+pvX)U_$@lH%(Aub0
zrMD2Wc}SHEESu|uEzZD>-mnr71^edA1X<1^s3N>JnrFgi^1_C`&cUB1eI*w`jlOIr
z2sK~Ya0VX@r{IRK0w?U*3?{XSe}Zjy)+BIA0*-=-N=T)rlEOnt7%oj$@EJCyqr}%<
zW8DlO4;~0qbbwi#Axd(%4kx-9rI5RMOmfko?X~$1y_*3ZtHwhbdVbl5#BPvkMtHc8>!I;LW$Vj$L42UO{_;vBXo*Hgt!zp^2<0
z@Zu0InMQyKyzrvRuWfMH&G69>&$-&74_hO*p@V)5MfxEKMCTwLx@Es^2Ej(+#TP>z
z!!|E^anxE`(A{f9~z`;4Xwjm;YU;!`fYpX4txAY;1V=dqI{Pv`8XZ$MDQ@QWj6_^A0=TskIe~aMnm|{hjF0i1)B$k
znRD=58;TY(!UebZhGD&FC6DK^6`L!BoVboR>mcRo{ZM!vjswzV
z1FVDS>j)IH9mht1T1P;b{b+9pz7CtM!w|F25wPYlpS3Zv>-_Jtrk@n*001BWNklO|AQFo0D9`;ni0U)Q6)?n2MMN}
z*0c@cP8~+Tp4Se;tb=${jzOq(kYs*O*YMVcw)IU8IO`9tzN0VPT}w9Y&>hZ$NV9GI
zj{rZ5IGiW^?Db7XNVr&zr`chPnUxcHH&)V-NB=&-KnBr}OwIo#Ehm
zGSgGP@Y+_ME4^d_nL*|@PH(lUa=EstH3%82GG8Qi>XiwFau?AF`3m3_J5wzL#Ol&Gj&IRfRd6h8wCJ
z6{z-96Yw##G?bAQ$t&xU!!^oec=)3S-P#t!XVt3G+qp87c6)YH8*J&-qZFzjm5FLW
z1x+?tOxD$&>Wh3mFW93`hNXsbY;0Jix-}%whJKpMkvUZl_@qKL*X10QLXRt{NLnUB
zXLz$AF3?|fOI{hcANr+#i+thiy-JWQc-hdF4mfMbLN9#6o1WEd-*tU9gfVP_InMNO
zvj44VgMm39l@~etr5|$O2mSnqLvz3VxCFcnv)V&Uo8+M7DF^vHQZ`qwO;@M0s$EZfJoF989?cFJ*8Wg&%rpk{~WxZJCula`0`wkh0y0?y@JPX74H1zA`50R}-g5-H!l7+M$Ol*L``$~??ePXg
z5U|_)jn4WI>|q6KLnOn6wmA`8;hM7`mFw6BKHZW=5OyOY9Q(;JL0&+_4Z)6`dw7}L
z_<<_|K062y?Jl4%T%wQREYkZdSPDo2V9y$A3!e00JHsYZ2Z9q^1Q9{PIdpYCIp|`p
z5{J5Z03Yr9uAgpiJ0hHAM_93)KyFzIzTu$u>BH{b@PR)*ILFKNaOMw9MB@q!_0#ix
ze2e4aBV6gvF`MWogZ^7_k2`cF11<_G0aO`J
zvYG>sX&FmfzT>=fp_A<0(gp2uFmp}jM_TaLtz4u~RUnviVdNbBlb@kEpFSA4ZJ?VM
zab7?3-h@8Fo6|Et;Cfj~@S?lyBVd?+fRl-`-`pH0LMZy0lhmG|K~8gF
z{%cp|R4{`bAPAk+q%OTkgRj1S8qI
z+x&u9Hv+1v1!wac0)zhB+)V{SK3rl0Nv1%|p}R{A2iMTQeaYdXl5#iHG4h#XF&8M<
z`j6A}fH5btM1!t;!1w$^z_0SeGxMVK;+*g?7ssyJWK(|7+-#!~JZ4YxG;Av2;yiiv
ztxdSP&ioV(xu(r6*#h^?iQ$KKoa13?0oz=cz@VCfGrT1R%Q9?Z%y#Ylhpv3ecY>}t)}4u5+c3v{Sh6c_nG2L)&1;&IWIOSNFSm}9
zeCC8zc-kfhE=U0LSwfD;h&}O6SVGDw-PV?AOnS+vZMV@1=~i(wG^IsTj?^6(#@M+?
zu)98jg=-1xe2(T?1~35*kZyyv3YHN$t^cwT;+RD2nLSb6uoA(0bflkMqC;5$(45XW
zGPk}ETX`zmw{qF%hKY=gT>9+M3mKxjo7$qQ{=67N>8oGPgQ6U+X-*jp_6S9Rp}%%z>+VXzou1^x4|fn%K4fFNDhcGIgY$dTg)?c3
z4s2#pShYlNK@5+**RKF*I4RhWPlZNbfkV&{yi_30m2B7%{~8s*pX0PZ8a9Hsc5%aT
zGPV;1Ea=Y`bmJR*LB*jGQ(>#1+wlPA^y+aex*OWlnS*xYhwTI&_L3AhcYAdSaK2|}
zg@X!A6$F3&LSDMLz98t@7Q*ts9yFKe*qB{mtX=k3)stTU?QtakRpY8zyb~z#TNRF<
zt)_QQ&;Rx$486(cKe=$r^+t210a_N+ok$qdi5=jzWrE%KQG`_1aX1bFT*N>mqy#)t
zP*Mc%mo7LX;~<(0)C0zd&Os?4x)OwQAOzAdlyd||j;Sn13V{Z=6m6XlV*(aQDW^ST
zps?#5*H$}7kVA$h6GJM0k(5!)OY}SwJzXOZkjFLtx6&M#0tOuz5IGsJyO0Qi@Y)2n
z>W{8eC6mYnFGG)Zi)djga`zk^UD_o=
zC9BldRu9;ko8Yi22SmUDvdQpp<(PtKtM47t9+FC0{j9tsrVRnhas9Ie{n=3x>&bxD
zA>oKXg|zG`ps+VR1+R8$Mbe&eb&g=94exQaJJAUJe_Y*LZtFS>g<&|XrrpQ=*dcTf
z9pT|8;0KHoplF-e5-*F3)Wu5ss3Zb%@QIfdE){5VY{-E8bS5W#RJm+{)H>d$hpov6
z2QW?-m6&A39)?2gC94u5X>o`xb%w<+gj11S^8*isHEd_NoBT7pN^oF!7Qs&hGK43LIVJT^4kzh
z2`!j(*07AgCR>3`P$0Oz=1N$h;AEw&_EZ%D%Whf0!0-Z4btB_5nBf$_
zDf^YQK*R9}MtO-~4aXQ-*3$BRFShvxh3T@AOj|
z(_P}o9|%jyuP=6PFN@!X5QgU}HyICs@{20eS0@QrM8FraWP~7y=;VIwupgfy8$&x_
zWlwS-1XV77Abi1vO!%8$*o53YwSW|mzBc%h-CNFv9osGFs9ymqk;%CHiXh+#CJ?x)
z$q$^85t(;5B%8JM0Erlq3l!IphYYZo?ArjR(S8fFxh|Cw-CnwCf
zADQ|bMzo=C#MFr|uBD&K4d3XOEi0ay6SRfG@EUom7-tD%I6)vWG=O40#uV&2W^Chm
z3Yq8fzDz85Wjn@|Y3)x3f>JJSikw81Dq&ba>X@f_@Kh0fP1
z32;>&W9mayBf9`@XK4u*{i@`&qvwgjnd&nl(
z*+GCIG^Au7PZOsqFyOOEkaK}ebphyf7kq5Z*+8rvz|kg6f>(kS{u!e{WR-bj4
z9TGNg-?8MKHExOu(M8QU!E?7-M63*HTi}050IcxB``u9DwDu
z<8wi%9OvN1;Z2OYw_Ufb?iv0fWyVGVbZ6LhfzunoaVVL!t55p6j_h>nK~QAd_6l}U
zg~;X&o!Xw!^OVY6gs7bkbOUJFSEYqa{Z_#m&LAB6AUk^MO9COI{
z2hVMw&L*xSuY1_UoM#I!{%1q>AhXytT|;;Jb-J*7y+;Q2AulfQ`Z7_e+F@t`q~cJP
zGic601e`0Y13ZBl+xWS83#D`c+%Sz1R0{5u5IeIQ8uP?b2bQ7+vb`0;ysT>A47wl9qarsS+;E;
zz|bQj-s>R3&QuccDik)NH?rVYy7l-5(nm`ECm&Lir1(q~=YIhR^yHM;$-qwl$-eFt
zgvh4-Xxb#Z_aq%yLVVf-XhhSoGX->8MmjpB#RGmcT+~OwY|e%Z{L+&Ph)iX`XLJ`p
ze91=o6cB#kAC~A2f034;_dYE2$QM7rO~J*6k|v^1xx*#7;Zns(7WSqCY;>fsDu$il
zgWuqVeaKQGr>ClkjBqL8umKre?{ig5U#8+SxPWysvWJ3%UMkqOS%?+-vrh|U9VycZ
zrk#VYFyVLpaxFRd&vj%s@!xZ~KG$v}(^esNZ#0DPT-RQ%9=PTg*y;2XyYpQG6Q)KU
zJC0>7f(aCW;si!zY&ZK2RD@Yed;baLU<~j~)gJk=U^nt7x
zTA&JM1WF!)mXTVG1OUJjJo@7hO36B9NnqhHasY&EAae>bM5p8=8=~+(y<36d2yJ!#
z6c9E)!pH(2;mRHjJpq`^Wi~{vN&+gf_(6v5?>Jcmt53FJKfh(1zFbofxKA7Jqi5Ka
zE_{Ma1%LZpybpj?dmOJaBNt!M7io6lgg|VPoNNFI_+I2>7dp!JDhTbh|B0=eTo#P2
z6nRfz!xU@*FEEoy#b)^6{hn28Zy{UBV)nho67L(YgC*_NE#Cs^|h>~IWxh^A(jFgm+zD`!8;wY8G;sDDmQb($QVZW1ct17vZWYqj?U+Z3|Sg^sQ6$5*67v>
zJK5l=jkxrYU>=V+Foqw)78wc&$l^UU4gj6=E}#mK7*eqKkyYG7Ap#;C0viS*0RhIT
zh>sB%MZd=A0;=V1&gYcoaSSm{`ZJEel}&rXnMho0#dK(zz-z)mJ0;IOhCd$)0r
zt@=JlSqaIJOV(#+nb*rc8GW&jcIf~_hCH0lzU@_0)(dbxMvmm?uO`FE0*saQeZhh2
z*@B#G3{V10ph-CN)vjPOHzMl-VbukB$*o;B;a`}6BYt3)cJPx$khBWs8i57m+7~2b
zBzGs)(p!M>che5qVe=M=+E^)QU=M-$OyD9KSS34K!c4%(6-MKmfVZ15QJ+wPmJ%`0}f$E66e2)7Z?-M?w4eHB10_FPg~?;XNy4m
zM0fg_1BY1{VjH|+aYqHue)@o!*$K8WvCKe*2^th|DhR=%4uIbsYpY3UR#80g^EZ$8zKsZ=BIkTtlhQ(SB21{H12V2-{vb@yOul*%aC+MP6DfmUN$46)g*!K9z#+0
zu`j*oB3rj{wdWA6jtNRxxXFAr>!eFTT!!r#J=sZ{Y|S^E%_r@UCnM*RnSB9EBJkpC
zHUu;Q%})YHA7pA0*8P6i!-}6a4H3xZeHcP+$=b`K)J7Em|N1?b4h6NI=_U5zzUjK!zJS8RGG48$ZR3
ziE(x!qjN<2BNgjL?E_l)b(w5
zU^p442Zgn%U-uiT`CPW~zRY6ifT+mz`}=!AWDX1a13X5z+{^JYhioM{fYSW{piN*B
zNcKFHS>2EMkq7(v{O|AY0>{=4SqXqG6?2A63=o#M0gV0h$p>T-#3~RVXE$>pK2zn9
zQGoE3Ow0zVA#*5zVjm0g1|IvERAJs12uK6@_}lyikP1}&+hf%ER%Cha)Ru99PXJUs
z*$SX41)vb}cQgDidHv-c2)Yn$uqs9$!4L1eCd!wHyE
zNy8akk%M3ae!B6c%1DxhQ&Sl#aob~5R!k~w6Yg4(@gR>8<3K%>7_+4SLl
z0Vz;8!~NQ$CkK%qP}rh&sjna>
zS0_I5GvBIAk)^q_9u@LGf3gd?TnCI^NT4k!bgHjb72k83@Znm3(-!b*TgGI6vakaz
z`CQO7q0Haz*S8UFF5TRm&GF)`KAL2#37uv&kDIo^7@0P_AtUvCvHfz{Ej?f2kDD<7!Kcx
z5c2z9%(0#7t)~IV*|Vpxs7hjMKVpf!V2_XKMP{<#3bKh`3A%$9Bms71i&>VOR^>PW
zQMCHfX^jM;xZn^-0MU4wQ>vO|LPk`DaU>#Y7c1b%Q~+vxtV)sXIKU7_cI&i8a})?d
z6@pn+Vk#(rqM$K6gS#FX8P0U-XiMf;+e9K@BDOZJF;07O=%6Z*VL3|HN2)TRp{ZhnaDbWt74uI4(m
z#i#r!_*5#YBh|GbqO3?ZpL@;^x$v3$JS1;3rK~HEtNuC_fUO0!N)32bs)9!ag*3>Z
zeR8TcRZQlx;1ga-aw?!69YazA3_b*9$0*U={1ji(w~fJqNpJ{8*QB(B+5|lL
zy)Vw#myUE1FEC~}XTgfC_zH$xCkFh6dDXZ%y*6WuC3q!+e#y^f@WAeHu1|^ENQ|!R
z1H%?W;9u;(o<48^{~4VjQa0@|t~f$_Mh%X%A*WSjRi1kkLU;p#YwsQ}!*HC;7=oDd
z5Q5AIKmrw^06H==G^i1RdXJLk6tFAD0cy`{5dd3O?GW5&08oF73v{g*QL24FG73ky
zhpaM|N(xv6Iby0LcVFKOLLQ(3RHZfGkW1<5cdKaH^x_cjYm-BImJjI3i4q?nFaw#0Cea`8EyF=I9)4~b#zUn
zCV-Gl&xPp=@d$#lxk-6ol|9+a%W$BoS#n^vR>qK{xeM3!4czSo;}_|U2T(iYLol#_OzDRF-2>xvWUIEZuq%RZ=+p*Kq%LV0
z($kAREhMoqQfv#1{`pW9Lw4`8v;UC_-TA_Agxg*!GFBBDqKOeP+zP&m-rpU0q#yCz
zZhh51U$7&Yv}XhYvtp0z)2_~!HgvI8AQAXF2{SexSR6@UVU
z46;3-yB|3r7=iCv?U6;m_w`CWdkFOUZlfsja1T)HuP;3)F|_HkWoGxYgTMshmfATE
z$jK+z_^1hd6@bryjm%_2;&k96wxxdu>h<6#J2eDDIxwEzGh07*naR16yPB@B|ud8dy?x$%qrb(P7^g4Y;Eew8gB0$5o4k6O?Xfj?Rat|`Hgx^HFpjX1H#$ks1J;BgQFne^yli&K{V~I&W
zWN0-QM%v5?XUI%uE_t=FnE!#g;D8DCKmb(}9hBId37e8dQs7(3ux}aeFgy673zBA!
zsxxgHe$uU@U0|GlV29p)+YC}gIwedMO7UfmRW-&o?q%N|DI+JD`4REJGcq;I)Q7kc
z6CDQxGi20`gg|foYNruE_rktWiR;PlTDav8Q#3wPeUS&g$fvFPWoPfvzsK{~#x)2@
zBH%A}Lgoq^G0C6EQh(yz=k%kqzUWKdHiqki|M3Fd4Nad7uESwUP{Q_zi(u4Io3- D%0)0hT0yv=DEM-J^sZ)sc=V0_wE2m%_8F;b6RbgHOqAOJX(68ZwF{ab7tSD;+`gEfzEK1ed#UB(v$AwX>)Ez&iG6}d?A5o2Z5CN49D0S
zm}Eymgs?g~MWtp%*4!kb>_}kpA^-$I-%e(wH{fZ@e2Zah%jvQ*TWO2DZ2vx`5+T9~
zec3>;vXy(P0AQ?ysa^L=II=GC;Cn-E2|<-50QpnZO6Df^Wo>gWR<;GNdsWNu$~Um?
zo_2h<)JLpx0zS};+RcZ5Ky_&o&EesMv^UD)0OUqw;eI0GQ>YUrwJo$uE1cs3L$bUFrLjO
z4$;5BY)37nIhw(}VmOWgDvD7EFa2JbfqbEFDD<%X0f%7|oPbeR~q1v}Zi*E3k02jGmWtD*Y0JpD<3@Sl^A|M2q#3E>bp8TEDB)bBY{tR#Q
zFVHRBtC)P|TK>}ySrG!;>&HEY9Xbx@h(55U50?fA~VM0$9~1QSpg>^~I(Lfsfc8*0s}fq-^GWeetgt^f_4(
zOONvS?Wdgr?X@bgwja>2)OE1UkN5()AtKkpj2DdAUV+5PN(S;v7zzS}3=86kP57k)
z6`DiUj;R5wcF}dH|aJIoBnLwBkyn*RPChJCkpZEykpSafW?VaDoaLRd#Kbb-f_$fJHL$e+w->Lret;!eJ8?GXL-;Kl&TSdU%&E
zuI&L`I+~Ld6as~f8~&;+=|o2Tlh5#6TQE)L7KuzQBO4WKizUd!y=>mxBK;cH>Q}NM
zBP>*LSUEK%fn=L^6%$Rk(^G7a0ru!87Wk^2`A7>MyyrK+!FG>4HOyjDF%0YEBom+Z
z5HmZv7Jk_PDNF3I0
ao8A02gtbb7Z8_c2yX*)!Dip%oBqs}UnB`dq%h`TlS=;hE=W`Zg
z+O{Cj91zFp9ixkV0Rj6{&XTc=U|WI1>e^TdRD#mB23bmg_?z)9u`@aYx<;v~eJ@L<
z?HRIkPIg(jFSr0kOb-kU2{;`jW>Qc47~XO%8B|nA!7_21Wd$VrSl+gLD~Q{Vq$*$^
z#LIq`lT{o7h9eElY}C{Td&^=r?zyig^JO2-vc-b#&9PX*S0z{?rmt)ZXzU_kbY8t|
z-V!xm`d?CL_>L58EkHtuRR+|T>-uJDHbW-B!p{5;q>_TbB?AmdX231r_^2lov@a;w
z5I)$Oz08-jhYf&LPYAlrx@=)vhAjc+1nDV3vALnX0Cf-WvMoa58#uN3)uT;t=P?k0
zq#Er}F0vyCzThtx8$607kt0Alh+|umT+5c?hm6`&jKGxpUFUs?
zpUv0;e(A?PY@mI7z!uuJ9m6&TWNZ$R-{AivSSW4C!Z9w^G3RgqR_py9i69&&xlSVl
zW@w54ihET!oCj=-)X_EC7n~-1IY}ThGG-@(|GkW*8#BvPf=8R=;V_>uaPwGpiI;`@
zTB?q4k%ihRthy`P$;1Ma!+T&^)g=Sa4Z-z%T8}5m5>oBpCuB6V>#TBZSeQVjEo9J5V0N^Rq{)7C(?7l8
z4Q|`hN4~Zgq(423Jos3E2~N0`7|6#Tu4QL_6$5-jH*wRqDht%kup&zjrn^>hZ!>M*
zyPz+xhEE8X&DoPrkOkTKla68zk(q;J_vUYrc!|~ZY{Z`CoyCh-vZC2W<5qpi&lW~P
zeCysG!E!D6dk~wf+9Eq0;lB;5un*hh!5JkhoIn<2?)7Xy9i3>PV^%OMMixjE?kjy{
zW7jH82?7Z1H!(yBM1mAxwP{`eFp){aF3Pzd0rnuMd$r5pDgxQFQwJCXYj<9^fLDI|
zArAv|G;?2G(Gs|Rd#;c%fQ5Xn)2@5|bO!7!REh_3_&q>_Tlt+@@l
z3vNJcC@N0gZUjSAAe+9p%6)k-Ztu`ByYd}4=<
zB@sAc!}{yYF!qr2#1jtT@4oXvd+_Lf_8>od^C|l`FW#1__+d6E26MVW@KQ>JVr~N1
z+eGQ3+%3)+AE0Tq=*+&rjVK2M30fTd7Fo9#Zsx%f9vL+zYvk6T4sE+gx
zAT5d@M#FNplp)y#!2zT>Lo$$yu7+al*ds!cMOB$o0szJ?ajz!Tks;j;^#NX%BZFXc
z3PopLd8%Hu0Yr4RBfDf}L8g5^f&t)qP*~gKF$6?te61RFoj`5aVy=`#@
zp$y6R*RX<(Rb&XHhmYYz^5Iv$F)Ryz4J-J9z3r}cZCgzYrPxii=6OBA&d2O87TDW0
zrVI>S*`Y+n)@;uf;sSoy2v%W{UHHea%yo(b&&wh{!#ln}x;|5FX$NTEr59R5Fc<3pUVtpiu$yHZ?-*Abpzz#52UhsP0Q}xAw
zKyHo%usM;#v_XFvmF$47PXvjS5Ro>K2K$<$0Wjoi-VK-m2dH|?=ik47Hz+xtoIr-C
z^sgU!njbLq=xAbgMGjs7Y2MM}Gyq}lM@1pK3OoTQxJ>Z2Q(W@kV|GLUh|gRS+XJ=W
z6maapSLC9n?2qVsIK2l}k#!G53l4UWlnk-FABjtPaKaA!3&i@AC_FT-T7e&!0(Q9I
zKQHp~pL&oN0J1BqpLO)3orqb5{7Ee`|R!-WZTi;
z{0u8dSt3A~aG@g8Zk3*PRA-W+_UMl!*~WX4r??`M{^@US2}!ms#r5RkM}>+)fj#*P
zM!fi^N37sbv4QA4Ze?D#-R(#UskU#=-;xsBxsIOr2AS&XSpy%z#t6ppZC(RnKFt0LT!LwzLbVvQ`JYwaLvrNUa^pGNU08fyt$muWZ*J
z<08}IUm3h1j?b_^**T%_%4>NU@gW<|01Ck@+c9QeN7md2
zJ;|jSLh7z3D_I12^BFzH(u$wJFPoBIpJde@`?P}Emu;{)`g$Q$f0!HHK
z%x?Xvx*IY|LfYi__C~QedH7d0XB)xRo;Nr{h%oGZ7*YiwcSPKrT9rm;bn%a*i}c`}
z-8-m|kD7xNq*e3$Au*9hUy_}K3*Y3Te_v;XIP{M+tgOPtdl*G-qZuOx*NH6&mEE*S
zCil44ePX2P7}(Z7d$b9&xat|+@ZZTA