From fc5a0acaecf12c3fd487d89898720c910d8d6a68 Mon Sep 17 00:00:00 2001 From: Chris Cochrun <chris@cochrun.xyz> Date: Thu, 8 Dec 2022 12:15:21 -0600 Subject: [PATCH] a metric butt ton of updates that idk.... --- README.org | 17 ++- eww/eww.scss | 198 +++++++++++++------------ eww/eww.yuck | 240 ++++++++++++++----------------- eww/favicon.ico | Bin 0 -> 236606 bytes eww/notifications.yuck | 6 +- eww/scripts/appname | 37 +++++ eww/scripts/bright | 3 + eww/scripts/notifications | 55 +++++++ eww/scripts/pop | 26 ++-- eww/scripts/wifi | 22 ++- eww/scripts/workspace | 122 +++++++++------- eww/sidebar.yuck | 121 +++++----------- hypr/hyprland.conf | 17 ++- scripts/getvol | 1 + scripts/window.sh | 4 +- system/kaladin/configuration.nix | 5 +- system/syl/configuration.nix | 5 +- user/home.nix | 12 +- 18 files changed, 486 insertions(+), 405 deletions(-) create mode 100644 eww/favicon.ico create mode 100755 eww/scripts/appname create mode 100755 eww/scripts/bright create mode 100755 eww/scripts/notifications diff --git a/README.org b/README.org index d1e7a01..5cc435c 100644 --- a/README.org +++ b/README.org @@ -183,7 +183,7 @@ services.xserver = { displayManager = { startx.enable = true; sddm = { - enable = true; + enable = false; }; session = [ { @@ -361,6 +361,7 @@ rsync jq ripgrep fd +socat ffmpeg-full imagemagick libheif @@ -420,6 +421,7 @@ libnotify rofi-wayland wofi waybar +tridactyl-native eww-wayland wlrctl hyprpaper @@ -605,6 +607,7 @@ services.emacs = { no-littering tree-sitter tree-sitter-langs + rustic evil evil-collection general @@ -2272,6 +2275,8 @@ I also use home-manager for managing dotfiles. This means that everything is con }; }; + home.file.".mozilla/native-messaging-hosts".source = "/run/current-system/sw/lib/mozilla/native-messaging-hosts"; + home.file.".mozilla/firefox/nw77o6yc.default/chrome" = { source = ../firefox/chrome; recursive = true; @@ -2296,9 +2301,7 @@ I also use home-manager for managing dotfiles. This means that everything is con source = ../fish/functions; }; - home.file.".config/hypr" = { - source = ../hypr; - }; + home.file.".config/hypr".source = config.lib.file.mkOutOfStoreSymlink ../hypr; home.file.".config/dunst" = { source = ../dunst; @@ -2491,8 +2494,10 @@ I also use home-manager for managing dotfiles. This means that everything is con After = [ "graphical-session.target" ]; # PartOf = [ "plasma-workspace.target" ]; }; - - # Install = { WantedBy = [ "plasma-workspace.target" ]; }; + Service = { + Environment = ["PATH=/etc/profiles/per-user/chris/bin" + "WAYLAND_DISPLAY=wayland-1"]; + }; }; }; diff --git a/eww/eww.scss b/eww/eww.scss index 00dfe6e..044a56f 100644 --- a/eww/eww.scss +++ b/eww/eww.scss @@ -3,7 +3,7 @@ Created by saimoom **/ *{ all: unset; font-family: feather; - font-family: mononoki Nerd Font; + font-family: VictorMono Nerd Font; } $background: rgba(00, 00, 00, 0.7); @@ -20,10 +20,31 @@ $purple: #C574DD; $teal: #79E6F3; $white: #FDFDFD; +$base00: #282a36; +$base01: #34353e; +$base02: #43454f; +$base03: #78787e; +$base04: #a5a5a9; +$base05: #e2e4e5; +$base06: #eff0eb; +$base07: #f1f1f0; +$base08: #ff5c57; +$base09: #ff9f43; +$base0A: #f3f99d; +$base0B: #5af78e; +$base0C: #9aedfe; +$base0D: #57c7ff; +$base0E: #ff6ac1; +$base0F: #b2643c; +$basetransparent: rgba(40, 42, 54, 0.0); +$backtransparent: rgba(40, 42, 54, 0.7); + /** General **/ .bar_class { - background-color: $background; + background-color: $backtransparent; border-radius: 20px 20px 20px 20px; + box-shadow: 2px 2px 5px 5px #101010; + margin: 8px 18px 13px 18px; } .module { margin: 0px 0px 0px 0px; @@ -31,9 +52,12 @@ $white: #FDFDFD; } .side{ - background-color: $background; + background-color: $backtransparent; border-width: 0px; - padding: 0px 30px 0px 30px; + padding: 30px 30px 0px 30px; + border-radius: 20px 20px 20px 20px; + box-shadow: 2px 2px 5px 5px #101010; + margin: 8px 18px 13px 18px; } .center_modules { @@ -43,7 +67,7 @@ $white: #FDFDFD; /** tooltip!! **/ tooltip.background { - background-color: $background; + background-color: $backtransparent; font-size: 18; border-radius: 10px; color: $white; @@ -57,34 +81,34 @@ tooltip label { /** Widgets **/ .clock_time_class, .clock_minute_class { - font-size: 28; + font-size: 16; } .clock_date_class { - font-size: 24; + font-size: 16; margin: 0px 20px 0px -1px; - color: $red; + color: $base08; } .clock_time_class { - color: $white; + color: $base0B; font-weight: bold; margin: 0px 20px 0px 5px; } .notif_button { - font-size: 28; - margin: 0px 20px 0px 0px; - color: $white; + font-size: 18; + margin: 2px 20px 0px 0px; + color: $base05; } .membar { - color: $orange; - background-color: $widget-background; - border-radius: 10px; + color: $base0A; + background-color: $base01; + border-radius: 5px; } .batbar { - color: $purple; + color: $base0E; background-color: $widget-background; - border-radius: 10px; + border-radius: 5px; } .brightbar trough highlight { background-image: linear-gradient(to right, $orange 30%, #f2cdcd 50%, $orange 100% *50); @@ -95,53 +119,54 @@ tooltip label { border-radius: 10px; } .volume_icon { - font-size: 22; - color: $blue; - margin: 0px 10px 0px 10px; + font-size: 18; + color: $base08; + margin: 0px 10px 0px 10px; } .module_essid { font-size: 18; - color: $blue; - margin: 0px 10px 0px 0px; + color: $base0C; + margin: 0px 10px 0px 0px; } .module-wif { - font-size: 22; - color: $blue; - margin: 0px 10px 0px 5px; + font-size: 18; + color: $base0C; + margin: 0px 10px 0px 10px; } .iconlauncher { color: $white; - font-size: 36px; + font-size: 10px; margin: 0px 10px 0px 15px; } + .iconsearch { color: $white; - font-size: 24px; + font-size: 18px; } .iconmem { - color: $orange; + color: $base0A; } .iconbat { - color: $purple; + color: $base0B; } .iconbat, .iconmem { font-size: 15; - margin: 15px; + margin: 10px; } .bright_icon { - font-size: 22; - color: $orange; - margin: 0px 10px 0px 10px; + font-size: 18; + color: $base09; + margin: 0px 10px 0px 10px; } .separ { - color: $grey; + color: $base03; font-weight: bold; - font-size: 22px; + font-size: 24px; margin: 0px 8px 0px 8px; } @@ -151,19 +176,20 @@ tooltip label { .mem_module { background-color: rgba(00, 00, 00, 0.0); - border-radius: 16px; - margin: 0px 10px 0px 3px; + border-radius: 16px; + margin: 0px 10px 0px 3px; } + .bat_module { background-color: rgba(00, 00, 00, 0.0); - border-radius: 16px; - margin: 0px 10px 0px 10px; + border-radius: 16px; + margin: 0px 10px 0px 10px; } .works { - font-size: 28px; + font-size: 22px; font-weight: normal; - margin: 10px 0px 0px 10px; + margin: 2px 0px 0px 20px; background-color: rgba(00, 00, 00, 0.0); } @@ -174,23 +200,23 @@ tooltip label { /* Unoccupied */ .0 { - color: $grey; + color: $base03; } /* Occupied */ .01, .02, .03, .04, .05, .06, .07, .08, .09 { - color: $white; + color: $base05; } /* Focused */ .011, .022, .033, .044, .055, .066, .077, .088, .099{ - color: $purple; + color: $base0D; } // Calendar .cal { - background-color: $background; + background-color: $backtransparent; font-family: mononoki Nerd Font; font-size: 18px; font-weight: normal; @@ -287,43 +313,44 @@ color: $black; .app-name { - color: $blue; - font-size : 20px; - font-weight : bold; - margin : 10px 0px 0px 0px; + color: $base0D; + font-size : 14px; + font-weight : bold; + padding : 4px 0px 0px 0px; } .app-icon { - margin : 8px 10px 0px 0px; + margin : 6px 10px 0px 0px; + } .app-button { - color: $blue; - font-size : 30px; - font-weight : bold; - margin : 0px 15px 0px 15px; + color: $base0D; + font-size : 20px; + font-weight : bold; + margin : 0px 15px 0px 15px; } .launcher-icon { - margin : 5px -5px 10px 15px; + margin : 9px 0px 10px 15px; } .audio-box { background-color: $background; - border-radius: 16px; + border-radius: 16px; } .speaker_icon { - background-size: cover; + background-size: cover; background-image: url('images/speaker.png'); - background-position: center; - min-height: 70px; - min-width: 75px; - margin: 10px 20px 5px 20px; - border-radius: 12px; + background-position: center; + min-height: 70px; + min-width: 75px; + margin: 10px 20px 5px 20px; + border-radius: 12px; } .speaker_text { - color: $blue; + color: $base0D; font-size : 26px; font-weight : bold; margin: 20px 0px 0px 0px; @@ -441,7 +468,7 @@ font-family: JetBrainsMono Nerd Font Mono; } .label_temp { - color : $blue; + color : $base0D; font-size : 35px; font-weight : bold; margin : 0px 0px 0px 0px; @@ -450,13 +477,13 @@ font-family: JetBrainsMono Nerd Font Mono; } .label_stat { - color : $blue; + color : $base0D; font-size : 38px; font-weight : bold; } .label_quote { - color : $blue; + color : $base0D; font-size : 18px; padding-bottom: 10px; font-weight : normal; @@ -467,10 +494,10 @@ font-family: JetBrainsMono Nerd Font Mono; background-color: $widget-background; padding: 33px 27px 27px 27px; border-radius: 12px; - color: $blue; - font-size : 18px; - font-style : italic; - font-family: Cartograph CF; + color: $base0D; + font-size : 12px; + font-style : italic; + font-family: Cartograph CF; box-shadow: 0px 0px 6px 6px rgb(0, 0, 0, .4);} .stats-box { @@ -482,7 +509,7 @@ font-family: JetBrainsMono Nerd Font Mono; .stats-icon { font-size: 23px; - color: $blue; + color: $base0D; font-family: JetBrainsMono Nerd Font Mono; } @@ -580,59 +607,54 @@ scale trough { } .notification { - all: unset; - background-color: $widget-background; - padding: 20px 25px 20px 17px; + all: unset; + background-color: $base00; + padding: 10px 15px 10px 7px; margin: 0px 15px 0px 15px; - border-radius: 12px; + border-radius: 12px; border-width: 2px; border-style: solid; - border-color: $red;} + border-color: $base09;} .notification-header { - all: unset; - background-color: $widget-background; - padding: 20px 25px 20px 17px; + all: unset; + background-color: $base00; + padding: 10px 15px 10px 7px; margin: 20px 15px 10px 15px; - border-radius: 12px; + border-radius: 12px; border-width: 2px; border-style: solid; - border-color: $green;} + border-color: $base0A;} .notification-icon { color: $white; - font-size: 36px; - margin: 0px 20px 0px 10px; + font-size: 16px; + margin: 0px 10px 0px 0px; } .notification-appname { - font-family: "Inter Nerd Font"; font-size: 14px; font-weight: bold; color: $orange; } .notification-summary { - font-family: "Inter Nerd Font"; font-size: 18px; font-weight: bold; color: $white; } .notification-body { - font-family: "Inter Nerd Font"; font-size: 14px; color: $white; } .notification-label { - font-family: "Mononoki Nerd Font"; font-size: 30px; color: $blue; margin: 0px 50px 0px 0px; } .notification-action { - font-family: "Mononoki Nerd Font"; font-size: 36px; color: $white; margin: 0px 0px 0px 20px; diff --git a/eww/eww.yuck b/eww/eww.yuck index 39f3b37..00713e8 100644 --- a/eww/eww.yuck +++ b/eww/eww.yuck @@ -3,13 +3,13 @@ (include "sidebar.yuck") (include "notifications.yuck") -(defpoll clock_time :interval "5s" "date '+\%l\%M \%p'") +(defpoll clock_time :interval "5s" "date '+\%l:\%M \%p'") (defpoll clock_date :interval "1h" "date '+%b %d, %Y'") (defpoll calendar_day :interval "2h" "date '+%d'") (defpoll calendar_year :interval "2h" "date '+%Y'") -(defpoll volume_percent :interval "1s" "scripts/sbvol --get") -(defpoll mic_percent :interval "3s" "amixer -D pulse sget Capture | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%' | head -n 1") -(defpoll brightness_percent :interval "5s" "light") +(defpoll volume_percent :interval "1s" "~/bin/getvol | cut -c 1-2") +(defpoll mic_percent :interval "3s" "pamixer --get-volume --default-source") +(defpoll brightness_percent :interval "5s" "scripts/bright") (defpoll COL_WLAN :interval "1m" "scripts/wifi --COL") (defpoll ESSID_WLAN :interval "1m" "scripts/wifi --ESSID") (defpoll WLAN_ICON :interval "1m" "scripts/wifi --ICON") @@ -26,21 +26,6 @@ ;; widgets -(defwidget launcher [] - (box - :class "launcher_module" - :orientation "h" - (button - :onclick "rofi -no-lazy-grab -show drun -theme ~/.config/hypr/themes/neon/rofi/launcher.rasi &" - (image - :class "launcher-icon" - :path "favicon.ico" - :image-width 36)) - (button - :onclick "rofi -show filebrowser &" - :class "iconsearch" "") - )) - (defwidget workspaces [] (literal :content workspace)) @@ -48,32 +33,32 @@ (defwidget appnames [] (eventbox :onhover "${EWW_CMD} update control_reveal=true" - :onhoverlost "${EWW_CMD} update control_reveal=false" + :onhoverlost "${EWW_CMD} update control_reveal=false" (box - :orientation "h" - :space-evenly "false" - :vexpand "false" - :hexpand "false" - (literal - :content appname) - (revealer - :transition "slideright" - :reveal control_reveal - :duration "350ms" - (box - :vexpand "false" - :hexpand "false" - :orientation "h" - :space-evenly "false" - (button - :class "app-button" - :onclick "hyprctl dispatch togglefloating 1" "") - (button - :class "app-button" - :onclick "hyprctl dispatch fullscreen 1" "") - (button - :class "app-button" - :onclick "hyprctl dispatch killactive 1" "")))))) + :orientation "h" + :space-evenly "false" + :vexpand "false" + :hexpand "false" + (literal + :content appname) + (revealer + :transition "slideright" + :reveal control_reveal + :duration "250ms" + (box + :vexpand "false" + :hexpand "false" + :orientation "h" + :space-evenly "false" + (button + :class "app-button" + :onclick "hyprctl dispatch togglefloating 1" "") + (button + :class "app-button" + :onclick "hyprctl dispatch fullscreen 1" "") + (button + :class "app-button" + :onclick "hyprctl dispatch killactive 1" "")))))) (defwidget bright [] (eventbox @@ -86,15 +71,15 @@ :spacing "3" (revealer :transition "slideright" - :reveal br_reveal - :duration "350ms" + :reveal br_reveal + :duration "250ms" (scale :class "brightbar" - :value brightness_percent - :orientation "h" - :tooltip "${brightness_percent}%" - :max 100 - :min 0 - :onchange "light -S {}" )) + :value brightness_percent + :orientation "h" + :tooltip "${brightness_percent}%" + :max 100 + :min 0 + :onchange "brightnessctl s {}%" )) (label :text "" :class "bright_icon" @@ -111,41 +96,40 @@ :spacing "3" (revealer :transition "slideright" - :reveal vol_reveal - :duration "350ms" + :reveal vol_reveal + :duration "250ms" (scale - :class "volbar" - :value volume_percent - :orientation "h" - :tooltip "${volume_percent}%" - :max 100 - :min 0 - :onchange "amixer -D pulse sset Master {}%" )) + :class "volbar" + :value volume_percent + :orientation "h" + :tooltip "${volume_percent}%" + :max 100 + :min 0 + :onchange "pamixer --set-volume {}" )) (button - :onclick "scripts/pop audio_ctl" - :class "volume_icon" - "墳")))) + :onclick "scripts/pop audio" + :class "volume_icon" + "墳")))) (defwidget wifi [] (eventbox :onhover "${EWW_CMD} update wifi_rev=true" - :onhoverlost "${EWW_CMD} update wifi_rev=false" - (box - :vexpand "false" - :hexpand "false" - :space-evenly "false" - (revealer - :transition "slideright" - :reveal wifi_rev - :duration "350ms" - (label - :class "module_essid" - :text ESSID_WLAN - )) - (button - :class "module-wif" - :onclick "networkmanager_dmenu" - WLAN_ICON)))) + :onhoverlost "${EWW_CMD} update wifi_rev=false" + (box + :vexpand "false" + :hexpand "false" + :space-evenly "false" + (revealer + :transition "slideright" + :reveal wifi_rev + :duration "250ms" + (label + :class "module_essid" + :text ESSID_WLAN)) + (button + :class "module-wif" + :onclick "networkmanager_dmenu" + WLAN_ICON)))) (defwidget bat [] (box @@ -153,13 +137,13 @@ :vexpand "false" :hexpand "false" (circular-progress - :value {EWW_BATTERY["BAT0"].capacity} + :value {EWW_BATTERY["BAT1"].capacity} :class "batbar" :thickness 4 (button :onclick "scripts/pop system" :class "iconbat" - :tooltip "battery on ${EWW_BATTERY["BAT0"].capacity}%" + :tooltip "${EWW_BATTERY["BAT1"].capacity}% battery left" " ")))) (defwidget mem [] @@ -191,7 +175,7 @@ :class "clock_time_class" ) (revealer :transition "slideleft" :reveal time_rev - :duration "350ms" + :duration "250ms" (button :class "clock_date_class" :onclick "scripts/pop calendar" clock_date))))) @@ -202,7 +186,7 @@ :space-evenly "false" :orientation "h" (button - :onclick "if ${EWW_CMD} state | grep 'rightside: false' ; then ${EWW_CMD} update rightside=true ; else ${EWW_CMD} update rightside=false ; fi" + :onclick "if ${EWW_CMD} state | grep 'rightside: false' ; then ${EWW_CMD} update rightside=true ; else ${EWW_CMD} update rightside=false ; fi" (label :text "")))) @@ -230,8 +214,6 @@ :space-evenly false :halign "start" :class "left_modules" - (launcher) - (sep) (workspaces))) (defwidget center [] (box @@ -242,20 +224,19 @@ (appnames))) (defwidget right [] (box - :orientation "h" - :space-evenly false - :halign "end" - :class "right_modules" - (bright) - (volume) - (wifi) - (sep) - (bat) - (mem) - (sep) - (clock_module) - (notif_button) -)) + :orientation "h" + :space-evenly false + :halign "end" + :class "right_modules" + (bright) + (volume) + (wifi) + (sep) + (bat) + (mem) + (sep) + (clock_module) + (notif_button))) (defwidget bar_layout [] (centerbox @@ -270,9 +251,9 @@ :exclusive true :geometry (geometry :x "15px" - :y "10px" - :width "98%" - :height "20px" + :y "3px" + :width "100%" + :height "0px" :anchor "bottom center") :stacking "fg" :windowtype "dock" @@ -336,11 +317,11 @@ :hexpand "false" (scale :value volume_percent - :orientation "h" - :onchange "amixer -D pulse sset Master {}%" - :tooltip "volume on ${volume_percent}%" - :max 100 - :min 0)))) + :orientation "h" + :onchange "amixer -D pulse sset Master {}%" + :tooltip "volume on ${volume_percent}%" + :max 100 + :min 0)))) (label :text "_____________________________________" :class "audio_sep" @@ -403,7 +384,7 @@ :orientation "h" :space-evenly "false" (circular-progress - :value {EWW_BATTERY["BAT0"].capacity} + :value {EWW_BATTERY["BAT1"].capacity} :class "sys_bat" :thickness 9 (label :text "" @@ -423,12 +404,12 @@ :limit-width 9 :wrap false) (label - :text "${EWW_BATTERY["BAT0"].capacity}%" + :text "${EWW_BATTERY["BAT1"].capacity}%" :halign "start" :class "sys_text_bat_sub" :limit-width 22 :wrap false) - (label :text "${EWW_BATTERY["BAT0"].status}" + (label :text "${EWW_BATTERY["BAT1"].status}" :halign "start" :class "sys_text_bat_sub" :limit-width 22 @@ -481,13 +462,12 @@ :focusable "false" :screen 1 :monitor 0 - :geometry - (geometry - :x "20" - :y "7%" - :anchor "top right" - :width "290px" - :height "120px") + :geometry (geometry + :x "20" + :y "0" + :anchor "bottom right" + :width "290px" + :height "120px") (system)) @@ -498,19 +478,19 @@ :class "cal" :orientation "v" (box - :class "cal-in" - (calendar - :day calendar_day - :year calendar_year)))) + :class "cal-in" + (calendar + :day calendar_day + :year calendar_year)))) (defwindow calendar :stacking "fg" :focusable "false" :screen 1 :monitor 0 - :geometry (geometry - :x "20" - :y "7%" - :anchor "top right" - :width "270px" - :height "60px") -(cal)) + :geometry (geometry + :x "20" + :y "0" + :anchor "bottom right" + :width "270px" + :height "60px") + (cal)) diff --git a/eww/favicon.ico b/eww/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5fd2a00d454f8b919e6d1280df8069874f33c70c GIT binary patch literal 236606 zcmZQzU}Ruqc)$Rn6&N(;Ff)iTFfeE^Fo4Avm>}W|Ake@JB1iFP2#kinXb6mkz-S1J zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2n?$bke8QdfMHo#83rW<X$EaIDF#b@ z2?kFqF@`W_QHBIBVTN>nA%^TA1kMZ;Vo354W{7YTVeqjPW3V-rV9?c&WKdC(W{{JW zVUUxP1Dgw?6%-VPRhW%>W;6r{g#akc!?3KZEQ7SP41=kzB!iWK6oZGA1Vc|6FT<IM ztPIztvoQSs4>C=ggMmR=fPq;-gq25LL`qsl#6(9@#M4SlB+^w>B*j-)Br{M*Br8w| zOsDw^i$r^fi1^rwiC7v)h$zZSi*WMGi7>D#h%hiH2{ABeaxpLjGhLa-!f<I03&Wgp zZiWz7F$N0*DF#m)39x%)WMsg36y{D44RXmS9u0w^76PEO3&Wr~2bACRG$a{Tl(I4W z|HS~#V~~8N%W7#LEma&UsJEz;+hSW2hxvv&PWL6{+!ZUUxK^&J<~+Euf#cwwcJ_lO zC$b*AGK1ydoq5a$A1-1#_+$yw!6!>0_|X!kgLf7%AG|V$<>2Y5tOxh?upivi!f|j_ zJ?Ft?wOm`4RC6~ktK$mV*2Q75td7f~E{WgR&00c^g<F{m<PI3VvXFtn&QuJXA3@~= z%nu-XsKvpkdq-9XfYPXvk`lPB2THq9&cX}~41SCZ492Vs4C)*T^0LD2mJ$|qG5j%G z>N#>ROk&NsHIt?4`gE3M59Tsodb5=A#fKFP&p)hSc=d4=!<Wyi8UB7=!|)%B*COao zYZ?B-@j8b8pVl$_{|LhC8UB9+;SCJ`KSJ?`jST-m_}vDEZ*SH!ym_;p;rYvTj4$pj zXS#D`0n3If3s_n%%w@^h*~^~Wna!IL<Ra#vr7k1Gz@W;(z+k|}z+lbvbUg!uin1Jo ztCbi7$d4l{R!4n17(+l?Tbsew))w4e1J!Sm(y|QJ1`-TM+SnKv7<AYfxD-X4OvF|4 z0)+ggWb#&TspD9DZ7R$98`D_My;#8X_QNv9KVMcdK=3Mte_vKJ{QtZPib3qv4F5mD z@EV5ypP=~TT89597?khUG5r4k!s{9Se?Z0?82-P9;f)Oc-$U`cO$`6vZwBLk?>001 zeYct6&+Cm0f1a#m{Bmsx^VJLUS+?)$XJ0z4jHkUQS}4rRPC|--!HDJmF$RY7i&z+Z z9Yh)A<YX9RWg&e^RaI36H8r)t7)_&Y8m1wjp(w&2At?iHM=~(1Wnf@%V3wAVlP(Pv zG@qKuTfC`;bMd)8){D>PF+KUXl=1WD<qZG7u0-H3D;fTS@aL7#JO|5rAR3nMKr}Sp zVa<PJ<~>mUgX7H%|KDw9`2Q9}Z(;cVZYu=8*~0Mu)n<kt57#o?y|#>b?uA7x*$1Yv z`FG^<+39LZD>E?YvNJFoU|?YQ&mb=+$-pjPG+H+f)3iR&-U79`Kv+s#7+mJ7tH?0) zCi5{cFhnzIsY<I91qp_)D(7lD*~PZz@oc7xAD1wG{kojt&$kr}|3Uc63WonEn2LE1 z)b7Nn`(Sk*h=$gA$aNpKy!Uns!+$v5%JBc~R)+s?K=d|-|8KW5{C=~I;oGaN44)sY zW4e88HtW{)T^#*2Df}r`#*zjM4BBkV+c+7_45Yx}Bdeeb&WoTh8|b(jwSQ=b04NQC zuz;8%LrJgzsBOtACMhpj8zrD~xRu@SY!BO%7xS2IeOkis@7r>Q{~-JoRM$Z<O1=Z- zL*%@NUiX3OJ7kPh_o1{oL2Xc6bss3tA!DTc2hVq#Aax$7-UDHHzJujKXx;<mzc<?$ z{=@L=?F|3lfbb56|1Y;O{C~8O@%gC*tjl&!WsjXy#$%+ZCL_ndpvJYVjh#VWUXDRd zP7$0Bhjt1Wb^Snu0H{wVBP-9KswB(s|1ih}cFZnjl8RF@_(JwKb1Zr?i|NwWB@C~> zFK77nZ8^iguge(zgE2JU!SWzV{)6T{Qrn$G=RHv0kC?oNl>b2OPL%wIC+~ss9~|#s z`2QM&cQX8VwUgo9{f$g_4$NX(KeL7>Bh*7on}I=-9W<tDVI;*MB`wb&B_%bQ7eUEr z6ypp5P(262LgGpc##&Mg3=Brh3>?aQ9r65XJL@>3?@VP`_+cUA?eEJNetloY@c$bW zgYz9I|Ir}tf%<(Y`473?LmzX&k@rAtPi%D`-n<9OhiG*ldft1rgW><Hoe=zb7sLP8 zyBYpH-@)+Y>T2dKyQZ;cOf2U$mXwkgWMI%{b+Zv;5SNr^P*51H6LBWM5h?-7bJ9|h z3{o-*3_g~k3=9mNj3N^9V#Ps1PTOladS1+CI{bAB!^`i>7`}g7%J3hKL3s{_@#Q`A zb|+|z1sNl^IYDe(?M`UkBiQEy<wFAPPK>+<YI}n691N3?_rQ5@7sLOTQ2c5)!|#{7 z8QwhH%6M`247Qo|S^S|Isxq<+3?|G?xm*mA(h3Z6@(QE%;RwxdFmHqM9cZ3TQd*8d zUQULAfx(<fR6<_3G+4;xP&0e)i`h(Pzb#?-_8mFT!Pu~T2cz-jKYZ;@I?Oe|>psvJ zClq7kKUls4(FF1ysNIQN_o3&%m%ADMgYh1Q|1bA2{CcpB@y3C<YztfS`GfSerDYiy zj9Hwl#26$b<rqL~Zb0z>i<41$WP|`H&Sm5j86>1ZYay)|S@;wL%0mQQ4>z-SzL?E) z@%s{nPd}D0{Qm~RusjE&2fEz}>gOS2P<;o(NcA2)+MPJ_-fo8fFZLkt%Y6(#?r&qf zdw3!1?3R4Ka0Pi;aRvr0W?gL=25||c(YkPCWIJ#?iwJNrh)F6i{9Ow2v>j8to2dGR z3eJ)jvzU&5U(E0ol<&TS@*NDr@*RwZ)p;NqU%f|4yA!F+iL1{y*xQ}p_9v|FL(6|J z_A>kj<9!T2@9$u|xpf+QduEid1p|Wy8)%$HQc9jdMs~DK3QCc~5rgVG2?+@XAu%}y zGi?b5(3pU|k)+IuV(y4%Gnp5CTg>q2#}bA=pnM0zxavOmcnezoLmBHt&wI3(YXH@O zuzC+fBh`KIHYd_pCwQ&_G}jL5>%lOny$QqAYIowud(ZbW{C~cW;s1+$VEWaaZA{xY zP31_B^b^%$V9?~~tK?u16_aD&U}pfAlfy9`jzm9!_VdWeD>8^l$}=!9XfcUM$Vs-w z@P}XSWu5nV0ptB2iy3}=U(E0ymhV6`sd*1H-++?;@b&pXV=tg_78oX??!%a4CpPaP z<v(Kke4zP0_*mz5=sW{xtP_Nx<DJB|JHd4xDBpoFB;SGa;Pd?q|DPXV`2A!b!;6dS znAc6L=E>I8l2&41P-O%4#ieBw7$hYnM`CgvHhu=xdGc~{48jtiKAt`U1A``8fQ`7x zrgF}<H?x_p{#eZL8=UVzc@Kn_K=L3s?}6H$u=Xa1CZ*4ZUiX3W8#0FFI}lAo-XqxV z+=y7)NlKp&w#Eh9JUcx9f#&!?`3{7M$a|o17kIx9*5(A|JrG9Af6w+a{0HIZ2O0i6 z+{5@}`)u}ENnyes3=GQL3=G<gy!>(ua<a0cb>R@qk;=--49dzX3|zuW4F7*HFo;UX zidTmTMBeOY+5CMG!|NZ58UA6*d*sx8DD@tC-lIjka|6Tw51{rY3?t<~Z0$~Py+=X2 z6Jx9sln<eE4aD^MVC_y&+Y^kT`3{u#o*iKL561@?K3?9;e4?+CH&;tTN|k}ZmQhR` zGG_=HryhdIa6~#8RPPB(sxm0ai8C-T_%eE!OUP|3=gfUQi|ORg#SFht@*PsWM^4@& zsohD>xdt-Yo$xvj)aC?X66-#Ay$2figw}n;=Dnu}8UBOtvqKF3?(b#1y=^voOI)ys zE@%zJvOWd|ej!EhUXu}-pofU3H8eCBgoT9}M8stooQ%X67+95g^ZbPDZ}hWF{<e_e z4!L;`w9W-S=7Mj$lfph9Xipz#t;?tN4F5qG-0lSR^N=yD&I8d%^&X*iCv0B>h^9rm z6I<Q`_5Hy09gcP<yxuzi$$Oyu2gZjO{yjOw@a)oN=GCnwd;!9ua^nAQF))aT%7IfN zsC)%8Mu|Za0_y7O3{CA583aUR7#O&fSf!+8WhW%_r9Ya&yz}QGhL1lMG5iN%Ty-DT zJ|DE-M^xTJZ+9a1_dsk=Uk@3tVfg<Aw5Jxjm-f{P#{bWjG5&kLobk=IIV_j&FJjtx zYd-U~B~@J8W|wdya4Gk;*=TrHDfhNnWoWn@!k=Biz3uEAmTmV|GHt)KfaT1CHB3(* ztz-Q2cs(O{UG>}T4FBJO)>MP)I~c}O@4ccyyAzz}p!MI=Lk#~x_z8$U!tnFfZl;s7 z+qvsZ45c&~SQI(=_@x+>lr=~98xESB$G`yU>xqhrFz^V;GB7Zxu^4Db886P`?t3?f z@&3=n41YlR4uo;#J#yNexcYop*H%N@o#1`!YZ(5$U&ZkK?Fz<^*Jm-mJ~x&1*!DJ# z`4h5v>kC2!>q;U76J0DMtnE!CM4ZjV`4||K`572gDZ&O?l6+paVgeS1k_I{9LgD$5 zg4J~?{B;|<Ii?(*!M5l8B9^C*HZXpCv6bQ5n;i^)-t2^od1CbY=$QAO9A@|r!cUJd z{C#+k@y)vF97|m7#61`ol(?j&Bp8%cv_{*bgCGxr+9Ln2g2z`t<C`o#R$|8c>)EG% zUBLMKC$!EZH}6r}?)<Wf;s00A84{}*-h5caaO>VY=JPw-*f&kh<7u8##1j<eEaGCW zC#lQ8swBd|u#pk8mlZS@{r?mLgPWxogR6x&`1~`_8ZB}$=nOSm6A1<n8!?8yTxRHg z;r~!tjZaroTHVb?%wcjVk9T)IZ~3||j-_W8v7CLrmGRoEoeVEt?_&4~T3bzNy$70a z0FSqT#$J%dTyWKWpu7jiM;QJ;KEm+n&`Q>INfAPz@lh^AU2z5mX7$mr(E-eZpfNE? z8F>aZWzgD9eU@}DVdG0(tW$q1WOxqBbI2H1-A9Xd=a*Fse?P5a`2Bnl)3dXaSoa+6 zVb5J&#bucvA}GtjFE7Txpur8wXSqRw3|`h^3`z<z4ARoF;I)t-KY_{=7^X(>!ps8E z;C)pxGGM!;Wn>wgEW{ZiJVhA(KL**P&B4H|Bpl!@Dl@O1TW|X$_PB$y*jC+K%XIho z4u+qvb~F5Wxtrl1XpRAfvGw~%9diNaK~Q`15W{~^yAz)8Ky@G_?}75)|0l;7KAqpf zysjpfADjn+y+s&A#UOi|K&~If^a%mb*(>7W;tUc}vJ9L;DvS*5%G^y+0#5fQvCRIt zi1@rm)pqA9hW}qyG5mPHobkrPc}xo~O<^gjkK^~#*Ob-+?MVgYx0)D!@OhlFNM~`< zC&cjE0?L=*H41W|_0X~malXRP`q79*K|xkEHAKj5?+mt#tE-u(J>JH6^5t%ZFRwsj zoXD8W@lIm%-s7VT|3Mg(2e0p8+AyJkCqh<MPKbd)g;`KYhCxhBj6qXV6Te4CWvLPZ zps)t*SzzGQVH6ORldq2u$a+4V>B!GT44;teJP;dKy+=;o!#3CObrr+^kINapKb*^S z`&2*MjJ|ZfkU$4<Nd^W>=Fck`7{Z-}7z9P-7!(yD``$olohpGqLqkAr1YvOr1qO2i zF@_ThKzCvNXD~OC7OGAYaNa(Zz4hWM=JSttFn)Xq&3E9jPCRq$ILA6c<1Vmz4@86N zJP<y@@c#)?-3Q8hV0?_>|KsBf-)|payf&qUr$JdsMjw<1g@i$EAO;4|7&r}sW<(ne zs`o(cGf@dS1_nkwMjl}~`Icz@^5@f;uKrxa@E4Td&@rz32X1$Q#y62M32R(HXDNML z&hYEj4CZSya(U*3JB#|u%gf3zFqkt>%Hjd9b<<Us0ryWpX&HovQsjZ$3&Z{85)1;u z3JgAu;-GV;n0N#f1U>A;o$50AyN)elJ@s%q<JXtSa||#xsILdZ<n{T$?M`sMgVukK zjxqcP;m5}r{@*^x_;h+3_e4cSX#)lZRc1jUSq9J=UlkRVp%m0Z!mXgZCnzY$ASMZ# z12Se57MGQ8jpi?Z0n2*}A@d8!`43m#Bd6|zjdy-s$?*Hra)#G8rn8(|R>n2W-9kJ_ zKvZ6afx(d3)=&h#uN0JaheW^<=}3@&KxasR_9$p;fYxQsWnke_6fx14bm%PN?L4xG z^}xfOjL%=}XZQ}D^MmC(5KZO02g-ksjx+p!e1hTsokNUIr?qiU)KG)uK_Ow#7&rq1 zD7_HrwNYh6gaD}CladDIJwtGtvon^j{LL(Ay+`A`_jLus|F0_;{(f1(@c7;==1tog zI8y`c#0(f1RQMT~R9Q7tq!}cn<l${hBD^zXm4Nag2!ryWq5`PRr@_R)pvr4vAgMCF zo+skWN|t#~_A=ajet_W@c)XKFc@LET9v)}-|L6q6|9eLnpU&>)ny9J*%7ZG*!Xh#Z zOiWDRd8r{A(1XO`pmGe<rT~rA@rY|PatX@IH%IZ8zn;l-4cz9WQr^Qi*YI^E!}}Kt znD!j+W=o587u957&|&+3j)4JG9)QLZrKP38?aV<EWOQ=|$nT(W8_?dp>U17(+tkWL zQhwb;j-V?WnO8qM!0_}rjq~5b6Ab?!on-ib_bB7j=^fk?<>X`x7+92<Ma5(oKx1^H zV=|N{2T3Uz1_ecBaNa8m5-fi*mHFx~P=61U_dpnFo)6Ui#MSNu_xaHGHGukmpnZHW zjI_S&+X{y7@0T#%zBrL}QcbjgBLkx{_mUD01`dA35mDC>8*`xg5QMq-lo-;&1sNC^ z^jV|*MGSY$Vz0ilgYo?HgA5<R<D8(e77!+4t^r%057zF4)qSA62g8p}G5o)InDJ>> zEzd-0X&D199z|vmQE6hmFscqq2!QTV0F4_8iApi>2+PZ)dI*=@n@C>XBeBo-@5^$A z2ao13EnZc@6=0wx4esBGh)FWYE9-#kI#7DU;^Yx41PTuj)=&{<;Nk`K6HFKdgyjWW zi};+*uVe0cw4d?nvqKEOKx@lD7~eb}sd?|=NrwLqPBQ#|c#7fwwS$aLs|)!iNJz-) zvU902%E^KDPbiGocp=y0pmrxnuK;+>ttMNFhj7@fK9&pQ)O+~y9(ud;+X{xiAC@rQ zIMTt^5M(c=$-rRG)RWA`AS$WA09s=T!XS5zV(cLR3LjA4OG;XS!OmO^JdbFsFD138 zi!<Z)F2-Ze4m13uRsI9#!P5-?FYRM`T$RsX&cLL^FDnZ=cT|0}FNi(5u!_RQk9ooC zIW<|lEyOJ@bg*vuxsc({4^Vp(hN;}{{I-JO-Q(Fz2j>@Xr|77G_F~&IO3TPGNXm?! z4}>+M@CbtHLJ$@bRbu%6ih)5wQdYDoi$C!68kRMny$w$eGyH?EbHO&xcN8+u0B&=F z<{Us{Eyo%DgT`E7ZB8%^t@}WE@4+dC{~-MEG{gThyO=Me#R~;7FsN_}2ug#?PFT9a z<Lpr>(2ZSwehi!fvJ4Dt$}GlOlE!;$Ii~(x$ncV!yoayugY9boof-dm8N;g!{j78I z0)-qI7}Pl#7$!4t@PpQafX4VnqlMfM0FBRZ@+yJrK?Vjx7EdQJy-hROTkq{-y!-SB z!#}KZ>=fiZQ2x7rn&JP0GYnr2ZeUsG>mlmFz^KH<z#z#0%736Tfn2|g1bv{ptYj6{ z8T_n77!(y`lvfsVP5d^W;rUNkod=?ctoMk_d*44SX1uw#g}v2MU($?$L5)>Z0&?a7 z4-e1iJQ5WW9cb<d)Q{)k2lc~D8RcYU)OxCTny&3&y7}}d!{5iS`VVc69l7oU*L$G) z?*zktaJ_c|(&t02_h5Msl>fl^48x~QOW4=gSV~wiFa$7)ijD5!#TT8RvI%sLoCN5) zITmH!X{o%~ALlSWBq{G9?Pmv%cY?+@(J^$a^V@QUZ*Lbd?p#;J8K<ryBg(*_!NkfV z&A`htdj1x^cp^s*6t|!~9HQc~3=FI)OoGC4iY+C4Nf);=?|pKV;T^eSE(G%5|GTFd z-Y=QX*()tACzTw{1>Um+s*}m_!*JIF8t-IalV)IGRpQR@683#Oh55j*g$(~_(e4E0 zy*CRPch1P+31;9><c)I^V33rSXYlg!8r|DT!-U4q&(9z%BF&(!0XpYjjWau5(DA}n z=7mp=F}wxkL3o`<VxJF7-S_|g8HWG&&ocbKc8u{xQzc(IE4zZIzn|9V9TZsN7gQz* ziYtQeb96P8usGYsw)WQ|hR?Lhdsip1?5K$p2<8@&=k>Q1WZ)H11(%IjoHi;%#Sj3E zYdbhNFv!X&GJxiF85q>r;zERNHqT{W_~<CZTX_B>VY~%b-n(~(;s3p}4FB(+WB7S$ zH}lc>NZ}CBxv#<^qkEQ+qZHgWkp=Y)f*BO#WMy_$bM*dL!0>^p?M~?0YEZp*c_Pb> za3_&q1_ot59TiaqE@4#$aNUdSs8KdeLjV-s4vuaNy!@c?Ep;{%LrI%;v)C6t1m!_! z-orM}4x8&E)b0e;eX#ro%Y%D2u<5Z7m5&}IUiB?C%#H1*^VFkDMZiviRokpQpl zROM`m;!k`(oADY--Xmem1>EPuvBm|I_wG(--Vy0663oD+$j8nr37!`MrG+67RKw1R zptuhY4~OPKWj0eoN!#rU*%m%N!SI%vc@LET?ww=!fBOu>%W1vb4T3`QVmjJV3>Fr4 z3?MfQyMQIZL!kXy+(MxB5{694?jmLnCoymTwUFT#wcDMbymw_H%g)>Yp<s4?1wKwb z2?ix4Wd_jL90|@HRZ8U$0F8_O|NkGJ2mRbdZ8yweU-<AC!&}%mCz!@E&qt`;3C?$C z8UBOv-raKy|L>h=_<Q*n)5ZF7{$K_M4R$VWnGwBT5H!}QV{Ff0Zy?SfBO@!jt%9@r z$3ha@ozOF@@y#`W^4|R!%sUf2gu!i287XlFIR()9yvkHgO{2z<69S-gU~Fv6z|9M4 zi>k7j8%x;kUdFoc;R&QXNQL}&_dLV@dlwjf?b*P(%En5<7<Ar_q$FftG&$}b>Us<e z3>bI>L1C`WF(HXB_TwDJ>p#gH@5I{fT*mMpbU*a#1&llEqWFWEc@_B76-B{qPSD!@ zp&ow2$^D>t-?L}WGVp=>gUW2dJ|ecKwlFVzbdupMxqUux{dbPxKd9~l<MRyvL3!}@ zIffStrgPSD^C$@GYKt%^Dk=@9pd`vKpuR6?ydTsTb~h8Zx!%LN4P|X734K01b>Htd z3mNy!$mR**5|rojwGsf2wSd|@L^*O)5nV$76fdrBo($5`pu4|S+455aY|rmxUi|PB z!)H>*TX5w)Q2x7nk>UTj!%UY_5`@AT7*shxcP@d(-|6bv0k#a3|AMTAK>aU?treV| zKNc{&K^b$Q!Wx%POBf!`FW}B(U{~VvvJhh67Ev1==N#a8CuBWne!|<wmqAP%w0B5@ ztsqUn>*{`{Qx8uu`~&s(Kp4EX<ut>8Fb$gH1I;tQFsQ!=!dU7(P~N+9f#E+0-@VB2 zZO3}nl@4|i+6)X~403WK>+V4z@LZn@Q%RtZ_p2F9H^66gg6cdFM$3CY7BT$CyQdG! z`j#(C8D8&c;+SZnBPG)m%flcjrUc6Cgra{`eh`EJs2&uTGG@@ylwx4zP~@G`#$9;x z2;-dx&^!pvci8eDDBr;_f&6#pBE$b1XBppgxA5eH?jDqu9vS<TK;@gPln_IJjTnQW zrnKa_cD5Nm7czXM=6L7#<qTiW^sp{6)seJhU{+=o5FHs|I|#B4)tmroA4y1p=7iN4 zB_w6l=Jj*7JvhbioGN(_R0m#U_<#2j!=DrTnRi5ni5mQV&%hueq5>WppqeKJp+R<b zb_@cdpfML+mYM0iKA-0@UZQ5Z^ZRm!f3M~<ovI8M@B-cU2Rf4;bUwr&42n@F5eNa$ zc~8P3p!1ZB89kiE^p9_4S@-Y^!%uJ?L~eJ&>O2rlsNRF-Jy893`y#{tTNfE#ESt}f z%gCg}qpKr6tk>Iv$}~tn*Obv*S5ohC7wgiWix_^w>prx0Cq|o-z}o8X%NYK?UC4NA zRxVEwJHH~IzJ?TonVA{*tOx>8Jt{p&Ljbg9n-{!qLXV{=Qy}>4Zsy|;&M^D}t#1Kg z<TWn%##}&sJ~+O}@E?}{?p$X0cjgGwp@=XMcLoM^RtX6?@c9OVG&m@77HG_0ObXPd zFlAnr&z=2c9^(^u-ow)G!^nToxjw9O4NDpRe_h7#a(xwNtBAO)3In?;6KKymD9=;m z=uyoB8UmpB1N8@WjB^>7SQN!-i}^Bd9cR2wjl6gJ62pHe{<wN6`$Q!rSpi!cNd{3- z(P6nR1~lIQI)^>nK}`PHH0DiIZg>8;GmUv&pq-dL1A_%4Xb<1$+Li&$I#jb96pu18 z@(gqO7#LKPWu&((W$V3vhT#Laz5}&6L72pLCp6zd^512K|Ci4&Ua70*vt(chVdUnK z8+Q2*RE|kX$ucmoEAh_H=1KcHpW!aN?jzLhgw}hw=J~!aWBC7O0pr<*7=bX*`gTzX zc?L;I&>68*O9G<?4R8p6`Yn6{pn38$48eY)mM3>IZ@zzy;TJd$g4UM7@*i}L9X!`? z9x~T}t=);7|88Ao_<!pP!@JeX*xTggWu+Y*#2BPNX?1}8OjYZ-)ETNn1sI~8M3wJO zWZC+25z-n@BJ&^Cb|++C!`qz=9L=H<pbMwpFv!Y}+%-j1jk7^!80ely@ZM|&WuC4E zp2S-x8SjABc7iZ?eG4cLBIiHQSPKjz_4$zV-fd9cyUg(a_7#S|7fvx<sx0Mq0=3Z? z7_<kO@5y%#sP0pcmuFyLuw!0R%oX`%KI3bu)qTqu{#~BPa>UzO-1Pq*1_myn(X*1s zkEy|}6VwkB5mRCCaTjG!RFsujIhSMcy>kq|D9wA&`VUkG{@S>ft(k#AnOjFkdf4m- z1?9gpt*i`QmJ;F*CNWR^xsc&IIR6n@@8N29g3b>7xR~+%<P6>l1_o6=K4H0G6J~=u zCk&kHKxs)-3{;kDvnIy~g<LqubmtyYod<4r!s<K_O`zUG%6p*v_wT}Krmckqf;tQg z^B81ghR2#15ed+kr$6KT93Jma^BAvV%X<XZxS;RpgRHIob7dmSemf)3`8t=u^9-Q) z8MxFjYBN1TfR~q-K}k`PK~zjmarqpM1^3P~d;{e>7>4)vNY8)&Z(Lz`y<#axJ_Caq zhlV=j94>nJiB@)i#;)AV#2GYIWh5_lu}=TF2)fpV3U%M>1&p_vV)-)|7*x1H_acqv zJzB-$;4&8!&r;H$I?#YQEKtPr_-^LI_bxE}1?4|V^4`s>4F7LkWB7CO81s&hU{QlV z-x(OBWrp@1H5pk@IO(!fg$jDVnZ*QI>q3RR_iZ`Dm!lnQ)1{<k6&V<G8Rg|i*O(2i zTtYk7fbt*Y%mN7p1_ouJsXg4Kcg`_9r!?<@@*fCayUh5azn3QmRIV#3g4Sx$&M&ky z85B<H%CZcMJW2xFt2ihBSjg}L)Xqf5DD&(D<{ChKJ`jGrfbmL0jDR}>LldKzqyhtI zZl9KZ88v%wg#c(Q29&;LO<-s6@f6cMzK41H-HQx=;dzj>e&2skzJuXg*BSop+{U`Y z!a`Ej$6IvBrY%tT{J+e=knAp^^LPsLDexW#BI`b^a}A(<4v_hVZzsFhdgbM0#e(dF zhwXZy!Ik0%pKCzrOHK~7K2(is_GGTiTd+Eig1mS08pD4OzIdMTNkcuK9|J=nqogFL z4LA7wkIzM*u#u7hohRtbG$)HE;nO_E*Ldqaq_v&+#ydfE-<ySu7aC&(ycrm*nWSZh z#~2m9upE`c9RhN4khAT5y~OlS?ql8p+S34A+lg(S4{f{?rQQSOI}pBcjp6@|YYab^ zF6HQ8VNv2SFc^CGJA(3`yO}tHilQv<oe3;c!1L`$bstKblZ3qYZ5hMgW1VcXg~jDX z47EUa+knPaamUZ7%<v8YP&$*60@Y7i95W_x<=r~Z@CtAKy8>S80-9?8V_2ILOhfBF zQ2x7lgW=zq(@cA^vIG^69bp8wu|ReWmC%$1l}pDN7;=1tjbF`V!f1Qq%70kfosc#s zXnpnnk4qR|FD>SdV_*np5|<nua~Ue>fmZGW<q6PT*r2nN(vpNUFCAyveCHCwKZ@$U z>kR*ITxa-y<uc>bj&|M<28JM}p>$3YC`=UO!RP$*F3RI6{knkRC34#nSKh<d?gZUc z1Ukp;@<i5EPNovtg+T(N``KxgsE3%jps{atbr}XOZbhyg8`yGgUt)L)&wtSMWkk0- zp?MFK|8Cr1__k^_`%F1`IazCKF>oC?6oLjc=Vz)d#h|Swqj093ZTru~4F6&IkKDWm z%70&%F+5pb$`#GPpvJ`~JoM*AheBKq6*n?6YlH7Nt1jo)yLOiG7&!kCllQJd##`Y1 zKBWA2^CrXpqeq#qg@lOO&z;B4AS5(2LIYGDF)-LL<@pH(Je$t+jF|jKsND$~cX>XK z>0ECrpVGQY4)8evpuL$xBSc1BN$U^*wYd^vg%~W%C3%kSWnKzeR}I48dJmKjk@|h$ zz8)ywfiO~^4_xQL^4|@H|JQFY{J(UW@q0@vZzThR7ROMS;{t^P#GRU43v+o|zAa?< zMvc1f+j53KyPMb-v+*eiX{rvr@hDoSzmaY}DBX#PgT`UZS$f)es%~6h_)KZu1LeOP zHyQq|TFt&%TufdHG#3xDXE28~$bF7R5)7(}(n6=(*tWpt{3vX9{{OI;@oQ%iUnv8F zHV0%)&0r3NQMV052!PTa1A`A^Xt0Ri=_5>!ZzI)tx2`bYo@;>Bc`zDU_kr`@Er$Px z4m00~iWb(*$`%0MSuhZOBi2q(7=ZRqML3EYJ(<RQ5!Ci1C+~sUo6tVr|8FZ8{@<O! zd?~_N)M8^b+vpw#Vk2XOsRN}w8*6a}Wn~%ZjceF8f%f!)@*ND5((VN1z3Vp_{)6y^ zON_58tN2407#x}8<v?}p;0;(gu=}<!_9pU0f0)bo><4IW4;>S+#tfGCzAk3~=f9ne z9IJVR6l641M%$i)H}(hCWuW{AI>(cNL4&)knWy>sMTVc0<~>mUyLyA++srwf%?u3c zoa%#oPlUWIXuYZ<^T{^0*6)iL{*qJo!Sf#Ip6KNa|KBfW{4gnlH<y9Il379ubXU^A z#`CD{gEs^~V}GFbS7N-7>*=FRcW;BnSdcM+@fPHI50v-7_%_4;{fAgKTUkp8y15VT zc?dr%F$Q&I8L2BhtgA8VJ|gNp<aQ^l?z=Oc`I?uNxWoS)qxZ58-jqK$Tn5U2hK7=$ zxnbpXtJt>P2IV&j^53;v4F9j+X83>nG}HO8a1mor-UijPgTuF&u4s$lV+eN;HG4Rf z`TP%1enW11g7~0)v>*&xOO1{}^&Jc^XZR1we;~ZQfnztXki3MNlH`z?1H}xPQ4xBD zfP@5SO|}k4XB$ud)r*XXaTictgsklZuWy0RHz19-fa^PGzYmo6VEFtM#^)vF{86BF zHjwdsdijQUdqCyF(;3VRQ`33<U(aFsh*JMS^B$o!F7UP|H2-~B&hT?VA@^hk1}#n* znbA3S;$vgvssye70Ogb19D$5W=NR9C$6YAMd)IC={J(sI;qROUob?P0Cm3bHeXPM3 zzM!#@|LYkTuJ*GAep|%w1>W}~Gw*#{&hY>BLdJI$5dx_U42CSA{5|-5J?f&t76PDj z0%|9^xr#d+KEQna)^*%#Ty79i_kr>s2p>Jg+yu(k$tl8v&C6i-K<Z^f);p6~vcE58 z_=cYU2(57e*L~1>57h4bzJlTZ`3bBKoJ_?{^8)xs+n(T19wi8c04V=yX-P8h@ySap zn$NKhmj6Ke8sKeC&|Du0c@LETPG4l2?%*iNpPeU2$O&|p2l+X~L7c(LKw9Y5M3z}U zmN5JV=RY#*K2ZMqwvyrBkxsUq;*zrRptE~HcF^5pqZSUi5CEkUP+tW!4>5Tn*Cfzh zK1%Z5)!PjJuiatzf9e9${>&U9%}LX^2VGqN^7EV=9)_+&eubB_nNETGeiY<AQ2zU} zg5l57Qm$SG1~q<2-8$rw!l;7>C<H*`prAfWLB2rBr3;MjQR+Ps>poEayLyM=|Ap&} z&u7i&a=w0#fdO=1{Q!9ltF@r~$H1_du`ij=<->f&N1$;Q7zVdHv5a-1&ozMZ92~D; z`2TVt<InCCz7$Yf9ul5dtsWH|4FQZ00Hw#4W^RV4NMVaZ2biDTyaCzM2hN8iv^!yW z50w9|+-CSTcM)d}1A`&!V5<)x`NN!Lb{0?3mqiR8Q1TwO`3BfL1BgcI^MUf;mlX{E zzpiBX|6n%rhe&6U@b%T4463TC7-2jrFd725LI9Ni6cnTx)YPQ(H*I3OdFv)L|B;#Z zK>6?5U54LFS98o_U{Dg22kmdgW%&SzL-qn`aV*N?p8pLr=Lc<j;;Q?=V=bV(2f|4C z50v*n7?l66O=UUfZXs^omcTo@=5qkzbf{aYtSrMIE-oj%VmbR7(0LL#$2xB^{D;l+ zfoV{G?>57K<hl=>|L!sTU%r<8q>PM=tghbRy59#fC!)f+yPkbHD9?fFKM?(m#C9hr z?}0EV|DEY)UBk|=ASNj#GwAxeLp^Pd1oz9zg4QbPa?GB^S%2d?!ylaa?-o-2!;$x{ z-evfI^&Z3jt$SE6I=hO=2Zo3Ysvwk?lVM=zm*>1anPoYpc@LKV?#*VN$-tn^0;*d< z?TJC<;Zes7`Vauk!-K{Swr*ujzj1@%7kF(asQn3D-vV0e0<Q01`43;-gXX^z7nm;Q zm+;HiH1Z89|LdtsGbk&_az35Ogg5^YYIlP29vH7=_<yFKbtVIY4(n+C8&pv}WE=xZ zH=z8ta3M$fl`D*p{D++Ph-`O)>b@&?8UA0n$MFB`HO7k#ZM^c`lXwPIICxu$GdP+^ zaz390&3{<how)KIY|I6m?^ZDU|FV+d|A%Fa|9evTW->6Cg7e>?^6aQ%hC~Q}^55ep z3=A<bLg^<?GX1)Nl=n!f`@ne*n*Yw-V7%BnnMZ!wT&_VC1{GmK426NhoUi9HEho3n zho1l1lR){;Y&8E3s+b-+jsfMro3|Jk!oq~pkDp-rbpy1Q0h$MiZFj=+9yI@*zsY!U z{xVMaW$QQwRY0sN<7QY^%)|M90VCG@hpX;`=Q&Wl2f`~M_22ttjQ>aT-=K=(A?Fxy z{=3b<5FU=2|8V9#(3s~PhX0_kPA~@LIT*eNX@6e4&2VwcJ~sKChgb(ycwFpdXE@)( z&iQ#UTK)sgFCb&2xdv?QPEgwugh%t=po-oh=@^v!2Wo#p>pz_Nk3il7_5Uv2Ww?0s zJhS}qi_C*6Ox`SDW_YuJh4brD21NabbZ#}c{==8|km|nAD;fU3Up`v@4XOwpf{wwK z|0v0Op!|3FKEuTex0&QG-eDY6A@Y4W1H<<f44mJVq2@nuz5~^NB;>u%t48zRpo-if z>KOF=2inID&wse)8bEa*tj!6cq3up+-un;Ae^(wb$X|IdxB>-~|9&9nKTw`S#z^@O zSDz2m?gZ6+qxo-e#qCga4RZcFc9Q8AQTY#)=U^B!?+xnw_kB6E{v)N`2_0`i&U>Tz zZ>XmD!R2mH{=0F9fgvnhI2|Sb;i~&!`3^*5&wGP5|Gizn%<y&rGo<~Aqu#?9Z$azx zf$|*;gZqEUqw^1gD@6}2*P!ITQ_%X4n7l_I|6RDlB!BVl;OhU~p2Eg(YYH3Zm!*u$ z;e9?(J|v>u32t+)WcUxudm#G#3daBKqxo-WCHO(+TC(#WuDb65!~aY787`i<!YqIC zD$}6y?V&bKhW#yEoF5k><v*mnhf(+8Xm^709tgi%!T7&zH2)2%I38+_!N`Ai82*FK zkwD+q0AF8*zux<Q`2oZKi}x5V?mfvWf8Y$upbCzKMZ64i^7%O5ErRAhe0dK~yAzc6 zKCfo@KbrprRrC%?$AI(ST?U4*2;uZ&p!O$dY!lxcJHGt)fB~HU&fjIcxM4TD{FVc3 zgDOm_BZU}BLWMbB&1YH;s_T$3uJKN6?M_hM`vlE@t)uJD22~snHOGMR-?iHe4549= z{0BP2g{-;{n)g8U-?=-C7Z<GJlwY=KaIHTJcM@mtvytF@4qE?-ukORw?p)3AAC~_< ztYY}TxshWg1B3qP`p==3@CS)|LHQ4~|DmmuC;i-I#$Vw42dV>M7*yZEFs?q|eMr3r z%6pd{GW<VtoAKg=ncVU-7Z0xW*Y-wI3?|yroKNO3EeD<339J85>OOpVZxtf%f$G1{ zYZ(6DnG4$gr#YJc21$AzYR-V=zs);X)34rU_yu0mNg(eb&9j5%8o+H%aNYxry@2xH zEyj!O{k-xMXK@dz;80hRVUU)V<$N@o8J_=8@*WX=K2W{`<24NbLHY0YoYDL@s3LiY zIR=*hHf|$6|6K;vcQ6cXcV2?#Jy893`X=MW+EzaK&WVF-|DT+!3<IZt9Os?s%;5eX zuDpjn&kh@Jfweo4^WQCS{?lTWkOJMQG{ho*)VTv50+Nz4;5*?rZev5O|6pxS5RI$d ziJbSK`S0>0hX2Q}GF>dJ;Fqs$<sESUAv*w+{}>pQIS;q9E&sBd;Xg|LBca{-X$`}F z7=E~rX(pGT9BZhv=;-+`$bmh|CMpE{14Y33Z}&l#^s9HE?N3migJI;ncaH(m-o#V) zf%4zZV=NZ~LPX?alZA+K1HBZ<%7E%94bBy1T+2V>$baDRPEbD&8Lwve53ch-G*aFJ z<-w0@8D@Uj$iVu34dZD3qgO-@BYQw&FXyi?GF-jG0MCEu`)NV_JrE|;?gX_xFF$7Z zzj7PfMQt4^c`F<7K^0P<wl)KU7RSt7o+Y1<^B=VC1Lr-oH7+P^PW1e@mf`>Fm5l3( z!i6MHPi7g-f1`lp5YX0^X5iyh<T`$qsrlMnhCf8jvm>`VA2R$0<vSR@{Dk5Ef;H^t zL`7ufR8^%&b`LEzK+Xd;W}TeLTk~-l!)I{&6Pow1_W3|{ASlnlFlOEN|LrQq3v24Q zEdSqOV2}mhYfVcZjG8^%LSW)lZicc-0ogN`nbu#u%kU3g_aV1CVeL&AjVu2>V)%dQ zF~gs^D>;@jGboCH&Q=>t;RQJ#Fodx+f#3hlV#cSSJO{(zx(}4!kTERZfoLpw@8epA z{~y;fd^$OaHS+&o1_pi2!ByT2rm!D%3-%D$b%2Fo_Iyr*OE(#BQ&jgoV)%dY5ySrr z4;j8sS-@4sz@W_msc*2`I}oCv{I{!#gJE(epUSI6j2A)Y=YsMd!Mul-|DgE}l=ndR z=j&CB@gLWLd^CFgJSY@KF>xUPx)0&x1tx~GR~e13++lc1u<pZG??Ln5x%-T7=C9`T z1obOH>76*2&_@->JvGsS3~9b1qL1b>FZsHX;SW*y52@}$%X|Mnu4DN1Y#CD?1A_&# zu(-l#ACNv#IV^0El2QPVeeOHT;&SCK!wYc!!`1GD<~`(jc37Y95;X6D>c3OB8IQO2 z^XhFoIylE8oJ^${7`Rn9?#*T{`?8YZ2f?}zDepnYJ3)0G1g~TG|7ktL-+K$0=lR%5 zh_|Kkjpn~$ku&Jy2~#s^1_lOI_N{wZORwHz_yii`gyG9X%r$`XA5z}C_?Y4U$y<yI zVv|Hg+b0aJxj#gR>N5P_&A{+x2~*JLl?-3NbL*t{`9Sp^9KT-8c&#ggFNlG`gc(%F zBJ3JvjfMdB5CEl<u6`bd{wdtN=dLp@y>gG?FD&nYXkz9XK=mF7gX%pne$4Ry+<nF- zc?C7bwR;BF+G|)Sfc*V`4+F#1X)J-C(DNVC+G_B8A5z_irQHe6e;?K{{Qt0?;m6`C zu1*F99S+ca8X!Ah_Knh`A%HCe6crW0ZO<vQxK%FSVK@%Tb1;lE??KnNfa^WbyaQU@ z2de)LT?XC%-pQCzIJoBCk;CBkItGR%W!yopmolQ(f1q&|7)Hu_*xH>R*D*ly-+FNV z`@g!Lb1MUjqL8A3^k^FtIj~3BSVKTULY@IMX3){g6Lje|!+m((BeUHJ%6sP@GW=h% ziM@$|VGpB%BB*VP)#?EkoKwKfknStwaeprJi!Y!$57hpI<vS2fY~F*^eg8jhVEBJ& zHp@j@V@ZqK^B6|+-+;&P;CFzQmK1}Cu)N%o)$9we-e>p$&wsEvJ`fEZb3tBP4X*o; z>pc+rF~fgQ{yTk_@q2YEZz%)AD+b6~lffAdIe|h9ZWa<cH)gOL0_Q(ao<qh+`Hw)m z6V&zu;}@$KU$v(4#ev3s2iv^M;EaWl>nc$CC@kY=2niQ4KX{7y%GLXjbK`NgJ3(zt zWDLr4FbvIm7oRZvKYokpURu784=4=|=01>vi39_WkOKe3DXeoa@*h&(!`1GD_W8j1 z?gO;_`F;b#zkPk|Ees51tP)bPBR6r4`kY`0fad)`d8BVDci4qnjGsYu-(^sJhm47- z`(SwwL_cBpf9ML+(ST4<<+Xd52Xz}vS{k$tJDu@hCwu3|Re0A{L*^Mk>s+AyJy5?7 zBmZq+`2S%e!~Y$f?CXR?<>j>1M%Td*OoSs;0jOS*k^=SpG<e#3c-k)AVfcxW|47Yy z(EPXUILi)Gb4h+XC-Fg@{~+t)3K_f8__ALwV|))D>jbqwk?KBT+npaaF#LZH&40HR zGG9&d6*g;08=VInq1lU|w?X;O%|nzyQ%hQI{dTtPSMM|YL#g|4<vmdQ6V~Pg(V#pB z#TTA1{6GJg;n$Q!TvHhsRJhgDLG=qkrwo_^P#A#f|0q{cr~C7mZ-Vx*gW8%fOmyA@ zwLPKv50nSrtY>(?yO-VV&3cAG-Txi1fFHFOS}(aVMnnq-9=pKw^a_?XC!sYips^Mh z2IV~vK6Q`reMudEIs=0tE2w=tn1dRW|B}6h8SIQDMX%3fS^jwq!yj1Q1JNk?58Cbo zw>hEXov=P1tnLHlz4sd#{=eVI@cH5#mLvuSJ7!r~d1zP<=8zb58$Ck+l<q)dFANOk zERAivwHNO&d?l*x1J!ph46XB!^WVj%4F8YbU^<mkDxmx3KLdljyaGMFMY3I>aL`nh zV_;y=X5ZV%Ui@hd!)H*w17U1=4_BWLobO=u-$sW2A2u=kys?ORnw_bn`1UT=(fmhp z%nWZ0pmZlL25K8B@h#uLzMR;+hrY%IIq!k$zKc&8{_Z%%GDk~WM#R`mYDlCzX<5kH z*WDc)&hJ+-yu`?RNMkPGx)0RWM8>du2cjW$AE^HO|9maujn;I2e+GtFMo@Tz@bFGm zqrM|H1VC$E<}6`j2nrK5ICPfz#1&9q57hny(V(?0FbwMJ!7!}e1JOuzA1L1;;a^)% zu;w!`1Tx9XgX$GxT{Lj&KyBovM1F>XP(jnX^Ozrf2IV(oOj^4WocBO&(07{|zMYxH z+Q`75$u2A=HzdlUfs2KaWwW$2Xx#HZ!-5qY;g{|)JcrkR$oUVJ??5yt&%rQK-UHQt z@Vxhw;s41yjNh92c@lpAXJBAt5gsyuYM>>>prI<GbhM9c*C$YZgXKRE8;UXNK2Uv! zjFIZTcbgdgzu(O8|MGm6eGX=l>cvs~46-s3Lnb^%9ZI_p0JVcuRb?2sI246eY-FE) z`2oXUaQ-7E?}73lQvQSIy(bL+FFs@VzxM+34gU~Pr-d8X7$E&i+WCW;CM(FxGBB_z z^Divtu71CU;SId+hb!-a+Mjsx9w`5T@av5X59U^KCo(W-aDdtapt_ct?jAL3XoY~1 zk`jZ8iVDM=B^(T$6L{25UuQf78smgv@cJ@P+w&pPSuUVF2g5k>-i4>&{P%su4)*zq zin0pU_F_Y-y(J?DS%Y2~BWU_!IpY~{{-ZGOf%4z`EewASPi0#rEGDnSz%+U;;n2!0 z)ORf?|1mIt)<kJ?&0o%udig%XJEH48q`ZgH?tH@VAC&*jJ!W{;H-|fdfx(4IQetTB z{|5Dk^TUJ~ylf=|?k{9s18#%j%6~ZOJ#e3I6T^Q{z60aU4FBJ6VfcT2G4qoIU*Tj1 z25nY3xuF#<)K7sU+eA?N2Q=SoV<%y{aX0JwD-RfcqSSr3>OD~Xhm`-2+nu1i2f`=r zGG3|c;?sQfAF}Qr)Xp6$p$&4YgcNAJNSAd_7kl%EwG7{goofK)I}irvIavPN%<%u+ zW`_T7LG%`e-|O2sW-%}+@vAD2?nxRdX@VB+l#~FaF)QZA4&J=;w;A8!%zL1G2+DIX zOd#)Fc*gK|>v5K~_AU~l0pUZlodwE+pt`#vS}^?ia>f_n{0HjiA!8hMA4=W><v~!s zgXO=i4F508XSrx^Dq%jioQVNc*U}<xN6j4EAplBWI=bM!MzV|7u!HJ8jQdi+dy0t7 zd(d_#sO~%WnBhnF4DNac1`RIIzVE>u64+e_3ZH5D+zbH@VoKNMu<ZSaobNzv9C;64 z-S>72!+#KdwTa=?f*S5p1_o6=P(2H3hhTTbsOWGF0X9|@@ILph2|QM(uQOi3S@*%} zJP?gk?_ulnf%4vkXAJ+3-eS64P|fcMYTL>U(X(ek`42p1%c#P)p_#M&!+M6#Sl5?< z@*&z>1HAr2s`o(o4u;=tW%z%57VAE914#o0h7JZ${sY-JT+`a9zYrmyt*s4S1FWnJ z9(UnbyPd84@&kr%p!^3O?*!F%Fbq037nJW{7%Bf@>+_v|%JBcfGlt(A4zsS&Gmutr za1{rqErjhuiv>Bi+L5s?QNa4yO2(5|^B;k{2kZC2@*bGp%JBdBCdRjIS$vfY4C>qx zQlo1^hgQlU-?gt_zh;n>0Oh^^3<aeE8mF%@uD$Yr;SV_Pku%qT)b0f3zq3ym9!;3X z9mBw&#ipzRvWI-P4zx~C{TJyb%3!7^Epl@{^SqB682({dTa8%b0_y9*Fpj$K?N)~W zZ?-c0f4hz0@5wo=d&~_a%@`O0M%SbbbY#=Xeo$LSPF{+Emq$T--g1uWD-Rf6;i~(< zXP1HMKBRgNSGyCG_s&0K_<#Hk<B^OaLCx3y85m@wmFVOv+F2tHZa*Jj+}X(y_ijDI z3-q<sp#B~R!`qyo{D&*=f%<>Y{P$)X!~bU+8Q)GU=FMbaaA%T~Rv6N41=_{H@G)6U zO^rcbPL<*0H3o*X96`II7nx36c?hlhU~Nti4a#%K7%BhZYIj2O-}lYOSlgu}<vFeG zhQ@kpLa__lvjOVIW(5nIK3v9h0koeToCnElcY^9ZFy6-S|Lt~$f2ZcMu8@|Im5lY~ zW&q6x5^~R|{Ll>n4Gj$jF)>L7(75Eh<s5aFA29r&R=X2a_nm&o_^NpVZv+E_4Kpa+ z4u>%XkRR+#B^jio<#-QHV4L=S1H&&+eFwuR^&Y;u4_5Di=xq%DLG>R9KiSB5qdAi= z4zxd6Ok#9h_R!5;_+1W4N04>ank*p^B2I_SG4H+nkl`OV|AFc}7{*cW5o&i{c+T*D z=UJ9Lff1rgd6l5`#ftbHG(==U;RYFp(PgcU6Nr1hn(;m??}2EP{D-UE3F_~G@*NB# z<-a#O7=Bz^&b%f!Qb?{TgP*~~!h-=+P7aaa8FeO+As`_k!C-4I$)Kqv!@X%QYscjW z4Da#gJy1R*rrr6B;XkPEJNJ~~eeZ1UW(Eco0cq*sRgQz|^5zs?25Vy}xl40dmVMa7 z@EdR51I@LA`g$-7%Xc6eDet}B&hQ_EUv6V~zNmpKn1R8Fm61b^L0w&)$XFd!HWWet zREG0#gZ3DCFlHAD8lSnrcm_P?0;}_2G$_x(FoC=Wn(Kr1`Tm3Iz9YAojwfXcSuimC zX8@hCFciXtST};g53-IxlWkQaSHzq340qpy+M381Pu&OZ@1f;AP}>uf_dxi~4u<cS zma@zXaTC=7^)>m0m5FuQsJbB#0-!T*T|LAYG&H5fS8ZXdzx;sV72diJSKdRLYXH@I zQ2c()KDHWpc{u?$Z?R!Hj%Q=Q$FQJ^lOe`SRQ296rahqjeDJm>F?kOy|AF!y9PeQG z|9S_*<F#F!g$yjpyvm9)!!itqKvto;6G3ISxESc%6+PCvR=$Aqw;9i0e#r0_zP1ch z_rdBs5RH`g2=)1(dGG(J2aI=WJNcYJWw)@P@{rnVL~MYA!ckEHv|d(|ZBIXY-P?@} zU%~kgSKb4)JwbU6hOx9e!TAr8_x``$$?*UBYUX`0z9I&oHUyuL;;;-yV#9klr~{=L z5Uy(AVNlnQk=(qOb@t_l48PFx9-(twz;h0uwJlE>{)5|`AR5~5JO7;F@3vDc%iX-i zMU%3HhHaVwg(IjR$iU#ll<Y6;eQ!C_C2$>xEC0dr9f-!2_dxwWX#RV(gW><n9Sm<b z_Hk6Q^C)qf8b~wn^74+3#SGz$2s%$zPyjRs?!?sI#}jhy7UOM{yoaam1LrwVdlQC{ z^B*klJ!ANP`Vr&v>UO?71_ljIP`?k9PKR)i;dMI5Z??t~41yx^BAePdCcfLu@EzCs zGI*a4U;abNd#`pf{C~BR;qTL}jJw-%`79V1ESMNM<VVM1@W#mCl?0^~adA+4DW1VM zKvePQMJ7<)_Z=nwf!doeOh&u&!gGed8;`PXwYHbgIQN`^VW_UPCN>s9VJZneE60er zC`!of(Q2mi??CNLbPURKFpR72!_0f2{P+L$E`|?B=dt!!nMleN#ql#JDvX{JLu~vE zCUu~-i^|F}4E($be6yEu=3czda34MIQPl2y#_<2l6UJw4Q+YBN7}U5xa}J=jZG$Nc zXyF!6o5J2yf<Z+|R^q@U_DOHIFnj^8sfOi2SiS?%1oGbN9Sr|L?M`Uj2hM-5b}{^W zzJuY$%v$bP1_n(I2}$|Uu^3uJBn{03mDA#4p!siWrp$anyOY-#4_to8@Ebk<VO!rx zY`gQq3x?mjF0gFz4iwWpau-zhjhr!a5phu1#xqvL3wk_W%X9@^2ZHh(GA5A!u;jh} zFLyEgf3=(8@3l3|t8$`+6u%r{VBix{Vvv>|y!R&3Fewi?qe1(r1^G1@q7#G|Ow6SD zw;o_^z4U<L3o&_**zwNu&l&!oeai5%dlq*#=&Weay)B?TKjZ?7Ob3JfniVPlI-^kZ z&{VeGw_6y#!S*%4`+a2QJy8C8xf`4ZpKO}Ik<TL_FBs&)!yqjKn!hE}!K2#f76MF6 zObikdpf#SV98F!k0T=EvoWBHGX9gN;0by8w4@M*P`%vmW9OEtEIfoYv|8`wq+2|i8 zssS1+2dx_hrAfMZa)2!Y`Bhp5G^b<6T%9Q3^>{7Qd6fJ|Ox^>vJt1Q*uy!Z7?t|sO zm%AB$-`~P`urOXQl7U%?S3*)2e1;=v|K<RDf7E&`ApnXOP`Z!+pXs8?>gFltxc3zE z%FB<4tNT#$9%#%HSN?m>@c+zHhNr!AxN}BQzYjggC1q3@jC7<J#3bZJxAt&Md9#(_ z8@TR6%6rIbT#)DbaJ4&;^4@<?9r$t&!;ce-S++P^i<>eq_%n)2$T5hCiJ?1Xls^bU z02D8v@eg+|0S0L)S-FL)IHp|!t?>lac`yvC^FTDNdXGTfJO6^=&*l@X+wEN>w3{Yy zF$fE44g%lP-wB|yPFxbyCbVM8j}&sfx0>nFTPo(g7ke1~gYeT`44?Z-dHVST<>e1d z8G2{Q(LZJe#>Tw7JO&YASq2s+MZv^0q1@wFn4Vk)ogYCU?-AYS1I_t8XZU~WG2_dY zNuV)LO%74vk$r9gXiUVyP=Y~HN={-^H%H&=Z46&Pbsh+V>pRf=Itb&KYXFaX?qWc1 zcY^CaP~HRKmwOrh-Pz1^wIWp@4s>^fh^QR+{E&f3WuvxY3jxsjPDx47T%R4IU!bV{ z?&B<=y+tVFo$#?ve03kR&569W8r<K5<~>l|xA8dZMtf%o9ne}c&{z+s9>C_Nkst>0 zyO<<seM2B)Vt|PEt(8od--7ZRI>wd%2;@Cb{(G^P;s48h41Z28W!dFuDQ?ZcpvEF2 zGrabf4CS-}N&}#FCkvB0ql}EK>Y_CqvoAeh_(sflCn<eC(3t1Rhm6lF+dykwv^XTh zM|Rx@N;9Ca2Vp~PNd|5K1)&9X+;y+EGCU)y?jthqf$|>+Kik9bdQm%9m!Pn`q>7Rx zcs(4*4WoGALqJ3XRQIWImDllQoxaI<`!cM}38F#u9SkG&`ABVdo`1pcY1vNpdHRM@ zsvp63X^!SUP|Sn!pA>jaj5d?6qnPpa70m13>|po>&V$6%d!T%{n*rSB1dX|X>pW=R z50vjf`1xLj|1b74{J*=6@pfG{e<TBg2@AiF;%GY*6afQ>L2)lE49a`ztiFMw&U;TX zAG!PpX>S88-@$04{D)HaLED`eYpY@H&gTsOjz3^Lol_y;!@!`%E+!^7x+ViD-a-99 zB}LHvrFtw2>bWDHZDD)>TH6A{#Ey63%6rfEG5iPN7yB80URc9CH`Gg10o4BI;8hxp z2c&qQClhpUk&vJogO{H$gPfeK;+$n1(=I(^_(<(`=eg$$|Ia;V__TBfd#$vzJg=Rz zI0GL)8$G=`B<vCqS7tami;=<JTvGYi9M;9)IuJC+2g3O0`M`A_p}Ysmf6w<b{C~Ee z;nC`Tjsj&R8F2;%O9s$9B&Zx75`i>K90>|<Wn~oxEgfM7R%S)MrcU0RGq)HY(x~0} zf8SN+!?9_?)(i~pjG%RGAp3_&P*TkspfG`~OEX}tNfC&DxRLPzXipz_j1!jsKy6JJ zMrw27Yj=Y49kl*~=D%N$_cENE-^LZsz@Wk@BO}Ye&(F`GrKLqRzl<7$KLkK)fQ5xX zYY^?2imUitPF!W$hq9*@*4~8CWVSm&b>Eq%3?F*ua<?!rsPKdCYXOb*;CJ1~lm+EK z(Eh-Zcpe57B^jA@-JBC&?PPdIO#UOG?gQ0-|DPXZ_;qbF)Arav5i<q`6D9^`1qMyc zkvR`b@6-lL|5B3j;JX`ibfp!x>}Q>E`4Ph>lG~loJ|C{R22kER|AOJihNG+-9Noo@ z7#QNg`-?#7jNX18D)xcGMhv{?OPw{wSH$tg8s>wqcQO10=RsJ#2cnVcK2r1EvjYtO zLHOwbh7Wreu=SW3Ny?R`@-Z;;*fN05cO5EWH5A<`E-nsU0|;7kDJUQ(F?AkS!TGz4 z82gIgbA7n#JpyZ7KzR>@PdsG2Rn`nXo03OZNOrWZPeh^tjm5~xg2rOhIOjKTr##=r zcoVdz2)wq8h`a|L?}W8CVKk)Q2d?`-c@K;aGW>hIpW*uIi5#&E3~C&5vQiB4N+#g@ zjEQjOs1h<l05sptz#zfE&ZZ!qoFSNf;wsab%a4%u6~Wq@AQ~y}kvi7^%6sRYGrU~7 zgS|~vO-9r|40Nu95`&~9Xk9lM4j(~UKy{#$4CMZ56MZS=BXilNzTVC7h1mQDnrpz) z=R?hV2N?c8J;?C?*&&9%H?}ivFH90}U|>*T6B3qYU}k0>L7`1QuY%UNh>3#c8uVDA z;)DaXA7VL)lK1e;^<kT9Akgmov+pYN*5GInO9loVW>JyRxjs^2nw_1UfrA&cHq?!& zC5PYk?nb5)uaMfDB#yUW&3mBy2g1(|GrYaDiFr}DuZSH3g9^K-nC$4>JSmYygj!IU z3fj-kz@W~gZy;r`ei!RnZ09IZtKE6(G2_EYi@9PM7&O=w6{Q)3g@uW5<){)^2!QsY zfX2x5w4@n$1r>x>ba1x4*v0S;l<z>8<USv${R!>&f!dy+d<Vye82&#!%<y)@boN=Q zDl#fL@q7%t0?MQJ>cS#}LK@WOR904pu60ln>X^V&d;TutQ)0$j$Z2<;f5Gs5%|W&m z#%5A#<*nQdLj0->%E}{WZ##w2g`ypFh9CpO4F)d<ann<aS=PVW!|;=={D&{^LGs`K z`}-K5O>N{Z;S-P-G&d4qP*PH20G)Y`;-FCuNg)85V>dT9XAl(yojst+kyj!ReDo62 zrOS^P{=xGfsIP~Nk@|hu+MT%8xPbb6=U*`VJ9LxjWOANhAOnLAi;#fAXj_J)7(-PI zDz|t9Kw~i~T#ecMG55DH-gpUHTLz**>&o^r{3oT)hf?nyV)*|Agby?Pe|m)B@14Dj zM=CP;BN!Nz`2~bz8B7gF_X?uM2x&Y60|N#|22kEp;qdksbv$sEdDZ1d3`Ct_hLZP) z9Pd2yl;PE+#ay+#TneILNetjN45;l(nyW`u!$JVmc9E4=VKCB_U=S6T6I<EM+4_7p z!%J}clL~q7DJbuO@L`7kPe6I_D8u(t>shvE#|v38FeESv2q}QijRCcXVQw0wi3<VH zJfEZls1L8kY;7xHyL==2QmXH#g|6>})_q^s9cEo(X)B?%WCtU|=sFkT;)#$dQ28Ye z-W#UL9N;Quer^TJwwHSueuL&2K$seJA1LpE@ezjqPmVHtIk}Eys->x<A_GGrgSdn| zgNTR-A!m-tBZUAc&J+|B8NB`Y8KflTq~<Q;?7#GY;T^oqi9Xf|YJXDL?mTjb>0)-d zKoA3iDu<BZ=>9UK=%APh8oL$|1C3p4vvm~lMc&`Wc=5$vhJVz~dykJW{0HHOM;LCd zp2krsAt@`zz@W(}AOy0TVsDHX13>u?;#noZ#!lY!GdI!Z*wOPJfxL%rt^ri{oq5Xe zWa@IxDgizP0V7ih22~Yx2GIB�{e)r6B-{PdRx-hW{@Z7-VE*W!FvM=z6}F;Uls0 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μD` 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 literal 0 HcmV?d00001 diff --git a/eww/notifications.yuck b/eww/notifications.yuck index 8feca7f..0395f1f 100644 --- a/eww/notifications.yuck +++ b/eww/notifications.yuck @@ -2,7 +2,7 @@ :geometry (geometry :x "0px" :y "0px" :width "1px" - :height "93%" + :height "63%" :anchor "bottom right") :stacking "fg" :monitor "0" @@ -15,7 +15,7 @@ (revealer :transition "slideleft" :reveal rightside - :duration "550ms" + :duration "250ms" (rightside)))) (defvar rightside false) @@ -53,7 +53,7 @@ (scroll :vscroll "true" :hscroll "false" - :height 840 + :height 740 :width 200 (literal :content notifications) diff --git a/eww/scripts/appname b/eww/scripts/appname new file mode 100755 index 0000000..bb28cc8 --- /dev/null +++ b/eww/scripts/appname @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +#define icons for workspaces 1-9 +#icontheme=$(geticons -U) +icontheme=$(grep "gtk-icon-theme-name" "$HOME"/.config/gtk-3.0/settings.ini | cut --delimiter="=" -f 2) + +workspaces() { +if [[ ${1:0:12} == "activewindow" ]]; then #set focused workspace + string=${1:14} + class="${string/,*/}" + export title=${string/,/, } + [[ $title == ", " ]] && unset title + export iconpath=$(geticons "$class" -s 16 -c 1 -t "$icontheme" | head -n 1) +fi +} + +module() { +#output eww widget +echo "(box \ + :orientation \"h\" \ + :halign \"start\" \ + :space-evenly false \ + (image \ + :class \"app-icon\" \ + :path \"$iconpath\" \ + :image-width \"18\") \ + (label \ + :class \"app-name\" \ + :limit-width \"35\" \ + :text \"$title\" \ + :tooltip \"$title\"))" +} + +socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r event; do +workspaces "$event" +module +done diff --git a/eww/scripts/bright b/eww/scripts/bright new file mode 100755 index 0000000..d621dbb --- /dev/null +++ b/eww/scripts/bright @@ -0,0 +1,3 @@ +#!/bin/sh + +brightnessctl | rg Current | awk '{print $4}' | sed 's/(\(.*\)%)/\1/' diff --git a/eww/scripts/notifications b/eww/scripts/notifications new file mode 100755 index 0000000..1478a6c --- /dev/null +++ b/eww/scripts/notifications @@ -0,0 +1,55 @@ +#!/usr/bin/env bash + +tmp=/tmp/dunst-history.json + +notif() { +export ids=($(dunstctl history | jq '.data[] | .[].id.data')) + +printf "\n (box \ + :orientation \"v\" \ + :space-evenly \"false\" \ + :spacing \"20\" \ + :halign \"start\" " + +for id in "${ids[@]}"; do + mapfile -t notif < <(jq -r ".data[] | .[] | select(.id.data == $id) | .appname.data, .icon_path.data, .summary.data, .body.data" "$tmp" | sed -r '/^\s*$/d' | sed -e 's/\%/ percent/g') + printf "(eventbox :onclick \"dunstctl history-pop $id && dunstctl action 0 && dunstctl close\" \ + (box \ + :class \"notification\" \ + :orientation \"h\" \ + :width 300 \ + :space-evenly \"false\" \ + (image \ + :class \"notification-icon\" \ + :path \"${notif[1]}\" \ + :image-height 50 \ + :image-width 100) \ + (box \ + :orientation \"v\" \ + :space-evenly \"false\" \ + :valign \"left\" \ + :width 300 \ + :spacing 10 \ + (label \ + :xalign 0 \ + :wrap "true" \ + :class \"notification-appname\" \ + :text \"${notif[0]}\") \ + (label \ + :xalign 0 \ + :wrap "true" \ + :class \"notification-summary\" \ + :text \"${notif[2]}\") \ + (label \ + :xalign 0 \ + :wrap "true" \ + :class \"notification-body\" \ + :text \"${notif[3]}\"))))" +done +printf ") \n" +} + +notif +tail --follow $tmp 2> /dev/null | grep --line-buffered "aa{sv}" | while read -r; do +notif +done diff --git a/eww/scripts/pop b/eww/scripts/pop index aef82e8..4f7f352 100755 --- a/eww/scripts/pop +++ b/eww/scripts/pop @@ -1,20 +1,20 @@ -#!/bin/bash +#!/usr/bin/env bash calendar() { LOCK_FILE="$HOME/.cache/eww-calendar.lock" EWW_BIN="$HOME/.local/bin/eww/eww" run() { - ${EWW_BIN} -c $HOME/.config/eww/bar open calendar + eww open calendar } # Open widgets if [[ ! -f "$LOCK_FILE" ]]; then - ${EWW_BIN} -c $HOME/.config/eww/bar close system music_win audio_ctl + eww close system music_win audio_ctl touch "$LOCK_FILE" run && echo "ok good!" else - ${EWW_BIN} -c $HOME/.config/eww/bar close calendar + eww close calendar rm "$LOCK_FILE" && echo "closed" fi } @@ -25,16 +25,16 @@ LOCK_FILE_MEM="$HOME/.cache/eww-system.lock" EWW_BIN="$HOME/.local/bin/eww/eww" run() { - ${EWW_BIN} -c $HOME/.config/eww/bar open system + eww open system } # Open widgets if [[ ! -f "$LOCK_FILE_MEM" ]]; then - ${EWW_BIN} -c $HOME/.config/eww/bar close calendar music_win audio_ctl + eww close calendar music_win audio_ctl touch "$LOCK_FILE_MEM" run && echo "ok good!" else - ${EWW_BIN} -c $HOME/.config/eww/bar close system + eww close system rm "$LOCK_FILE_MEM" && echo "closed" fi } @@ -45,16 +45,16 @@ LOCK_FILE_SONG="$HOME/.cache/eww-song.lock" EWW_BIN="$HOME/.local/bin/eww/eww" run() { - ${EWW_BIN} -c $HOME/.config/eww/bar open music_win + eww open music_win } # Open widgets if [[ ! -f "$LOCK_FILE_SONG" ]]; then - ${EWW_BIN} -c $HOME/.config/eww/bar close system calendar + eww close system calendar touch "$LOCK_FILE_SONG" run && echo "ok good!" else - ${EWW_BIN} -c $HOME/.config/eww/bar close music_win + eww close music_win rm "$LOCK_FILE_SONG" && echo "closed" fi } @@ -66,16 +66,16 @@ LOCK_FILE_AUDIO="$HOME/.cache/eww-audio.lock" EWW_BIN="$HOME/.local/bin/eww/eww" run() { - ${EWW_BIN} -c $HOME/.config/eww/bar open audio_ctl + eww open audio_ctl } # Open widgets if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then - ${EWW_BIN} -c $HOME/.config/eww/bar close system calendar music + eww close system calendar music touch "$LOCK_FILE_AUDIO" run && echo "ok good!" else - ${EWW_BIN} -c $HOME/.config/eww/bar close audio_ctl + eww close audio_ctl rm "$LOCK_FILE_AUDIO" && echo "closed" fi } diff --git a/eww/scripts/wifi b/eww/scripts/wifi index 5d7cc59..f44045a 100755 --- a/eww/scripts/wifi +++ b/eww/scripts/wifi @@ -1,26 +1,22 @@ -#!/bin/bash +#!/bin/sh status=$(nmcli g | grep -oE "disconnected") -essid=$(nmcli c | grep wlp2s0 | awk '{print ($1)}') +essid=$(nmcli -t -f active,ssid dev wifi | grep '^yes' | cut -d: -f2) if [ $status ] ; then - icon="" + icon="睊" text="" col="#575268" else - icon="" + icon="" text="${essid}" col="#a1bdce" fi - -if [[ "$1" == "--COL" ]]; then - echo $col -elif [[ "$1" == "--ESSID" ]]; then - echo $text -elif [[ "$1" == "--ICON" ]]; then - echo $icon -fi - +case $1 in + --COL) echo $col;; + --ESSID) echo $text;; + --ICON) echo $icon;; +esac diff --git a/eww/scripts/workspace b/eww/scripts/workspace index f202ef1..40a2578 100755 --- a/eww/scripts/workspace +++ b/eww/scripts/workspace @@ -1,56 +1,72 @@ -#!/bin/sh -workspaces() { +#!/usr/bin/env bash -ws1="1" -ws2="2" -ws3="3" -ws4="4" -ws5="5" -ws6="6" +#define icons for workspaces 1-9 +ic=(0 輸 " " " " ) -# Unoccupied -un="0" - -# check if Occupied -o1=$(bspc query -D -d .occupied --names | grep "$ws1" ) -o2=$(bspc query -D -d .occupied --names | grep "$ws2" ) -o3=$(bspc query -D -d .occupied --names | grep "$ws3" ) -o4=$(bspc query -D -d .occupied --names | grep "$ws4" ) -o5=$(bspc query -D -d .occupied --names | grep "$ws5" ) -o6=$(bspc query -D -d .occupied --names | grep "$ws6" ) - -# check if Focused -f1=$(bspc query -D -d focused --names | grep "$ws1" ) -f2=$(bspc query -D -d focused --names | grep "$ws2" ) -f3=$(bspc query -D -d focused --names | grep "$ws3" ) -f4=$(bspc query -D -d focused --names | grep "$ws4" ) -f5=$(bspc query -D -d focused --names | grep "$ws5" ) -f6=$(bspc query -D -d focused --names | grep "$ws6" ) - -ic_1="" -ic_2="" -ic_3="" -ic_4="" -ic_5="" -ic_6="" -if [ $f1 ]; then - ic_1="" -elif [ $f2 ]; then - ic_2="" -elif [ $f3 ]; then - ic_3="" -elif [ $f4 ]; then - ic_4="" -elif [ $f5 ]; then - ic_5="" -elif [ $f6 ]; then - ic_6="" -fi - -echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"bspc desktop -f $ws1\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"bspc desktop -f $ws2\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"bspc desktop -f $ws3\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"bspc desktop -f $ws4\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"bspc desktop -f $ws5\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"bspc desktop -f $ws6\" :class \"$un$o6$f6\" \"$ic_6\"))" - -} -workspaces -bspc subscribe desktop node_transfer | while read -r _ ; do -workspaces +#initial check for occupied workspaces +for num in $(hyprctl workspaces | grep ID | awk '{print $3}'); do + export o"$num"="$num" +done + +#initial check for focused workspace +for num in $(hyprctl monitors | grep -B 4 "focused: yes" | awk 'NR==1{print $3}'); do + export f"$num"="$num" + export fnum=f"$num" + export mon=$(hyprctl monitors | grep -B 2 "\($num\)" | awk 'NR==1{print $2}') +done + +workspaces() { +if [[ ${1:0:9} == "workspace" ]] && [[ ${1:11} != "special" ]]; then #set focused workspace + unset -v "$fnum" + num=${1:11} + export f"$num"="$num" + export fnum=f"$num" + +elif [[ ${1:0:10} == "focusedmon" ]]; then #set focused workspace following monitor focus change + unset -v "$fnum" + string=${1:12} + num=${string##*,} + export mon=${string/,*/} + export f"$num"="$num" + export fnum=f"$num" + +elif [[ ${1:0:13} == "moveworkspace" ]] && [[ ${1##*,} == "$mon" ]]; then #Set focused workspace following swapactiveworkspace + unset -v "$fnum" + string=${1:15} + num=${string/,*/} + export f"$num"="$num" + export fnum=f"$num" + +elif [[ ${1:0:15} == "createworkspace" ]]; then #set Occupied workspace + num=${1:17} + export o"$num"="$num" + export onum=o"$num" + +elif [[ ${1:0:16} == "destroyworkspace" ]]; then #unset unoccupied workspace + num=${1:18} + unset -v o"$num" +fi +} +module() { +#output eww widget +echo "(eventbox :onscroll \"echo {} | sed -e 's/up/-1/g' -e 's/down/+1/g' | xargs hyprctl dispatch workspace\" \ + (box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" :valign \"center\" \ + (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/neon/scripts/workspace 1\'\" :onrightclick \"hyprctl dispatch workspace 1 && $HOME/.config/hypr/themes/neon/scripts/default_app\" :class \"0$o1$f1\" \"${ic[1]}\") \ + (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/neon/scripts/workspace 2\'\" :onrightclick \"hyprctl dispatch workspace 2 && $HOME/.config/hypr/themes/neon/scripts/default_app\" :class \"0$o2$f2\" \"${ic[2]}\") \ + (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/neon/scripts/workspace 3\'\" :onrightclick \"hyprctl dispatch workspace 3 && $HOME/.config/hypr/themes/neon/scripts/default_app\" :class \"0$o3$f3\" \"${ic[3]}\") \ + (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/neon/scripts/workspace 4\'\" :onrightclick \"hyprctl dispatch workspace 4 && $HOME/.config/hypr/themes/neon/scripts/default_app\" :class \"0$o4$f4\" \"${ic[4]}\") \ + (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/neon/scripts/workspace 5\'\" :onrightclick \"hyprctl dispatch workspace 5 && $HOME/.config/hypr/themes/neon/scripts/default_app\" :class \"0$o5$f5\" \"${ic[5]}\") \ + (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/neon/scripts/workspace 6\'\" :onrightclick \"hyprctl dispatch workspace 6 && $HOME/.config/hypr/themes/neon/scripts/default_app\" :class \"0$o6$f6\" \"${ic[6]}\") \ + (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/neon/scripts/workspace 7\'\" :onrightclick \"hyprctl dispatch workspace 7 && $HOME/.config/hypr/themes/neon/scripts/default_app\" :class \"0$o7$f7\" \"${ic[7]}\") \ + (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/neon/scripts/workspace 8\'\" :onrightclick \"hyprctl dispatch workspace 8 && $HOME/.config/hypr/themes/neon/scripts/default_app\" :class \"0$o8$f8\" \"${ic[8]}\") \ + (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/neon/scripts/workspace 9\'\" :onrightclick \"hyprctl dispatch workspace 9 && $HOME/.config/hypr/themes/neon/scripts/default_app\" :class \"0$o9$f9\" \"${ic[9]}\") \ + )\ + )" +} + +module + +socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r event; do +workspaces "$event" +module done diff --git a/eww/sidebar.yuck b/eww/sidebar.yuck index 658c264..2ad3cac 100644 --- a/eww/sidebar.yuck +++ b/eww/sidebar.yuck @@ -1,8 +1,8 @@ (defwindow sidebar :geometry (geometry :x "0px" - :y "0px" + :y "10px" :width "1px" - :height "1024" + :height "724" :anchor "bottom left") :stacking "fg" :monitor "0" @@ -10,14 +10,16 @@ (defwidget sidebar [] (eventbox - :halign "start" - :onhover "${EWW_CMD} update side=true" - :onhoverlost "${EWW_CMD} update side=false" - (revealer - :transition "slideright" - :reveal side - :duration "550ms" - (side)))) + :class "side_class" + :halign "start" + :onhover "${EWW_CMD} update side=true" + :onhoverlost "${EWW_CMD} update side=false" + (revealer + :transition "slideright" + :reveal side + :duration "250ms" + (side)))) + (defvar side false) ;; background @@ -30,7 +32,6 @@ :halign "start" (fetch) (top) - (music-side) (system-side) (tray)) ) @@ -41,53 +42,9 @@ :space-evenly "false" :spacing "30" :halign "center" - (date) - (weather)) + (date)) ) -;; Music Widgets -(defwidget music-side [] - (box - :class "music-player" - :orientation "h" - :space-evenly "false" - :spacing 15 - :halign "center" - :valign "start" - :hexpand "true" - :width "" - (box - :class "album_art" - :style "background-image: url('${art}');") - (box - :orientation "v" - :space-evenly "false" - :valign "center" - :halign "center" - :spacing 10 - (label - :class "song" - :limit-width 15 - :text title) - (label - :class "artist" - :limit-width 15 - :text artist) - (box - :orientation "h" - :space-evenly "false" - :valign "center" - :halign "center" - :spacing 25 - (button :class "btn_prev" :onclick "scripts/music previous" "玲") - (button :class "btn_play" :onclick "scripts/music toggle" playpause) - (button :class "btn_next" :onclick "scripts/music next" "怜"))))) - -(defpoll art :interval "1s" "scripts/music coverloc") -(defpoll title :interval "1s" "scripts/music title") -(defpoll artist :interval "1s" "scripts/music artist") -(defpoll playpause :interval "1s" "scripts/music statusicon") - ;; weather (defwidget weather [] (box @@ -187,22 +144,22 @@ :value {(EWW_DISK["/"].used / EWW_DISK["/"].total) * 100} :class "scale" :width 280)) - (box - :class "stats" - :hexpand "false" - :vexpand "false" - :space-evenly "false" - (label - :tooltip "${gpu}%" - :class "stats-icon" - :text "調") - (scale - :min 0 - :max 101 - :active false - :value gpu - :class "scale" - :width 280)) + ;; (box + ;; :class "stats" + ;; :hexpand "false" + ;; :vexpand "false" + ;; :space-evenly "false" + ;; (label + ;; :tooltip "${gpu}%" + ;; :class "stats-icon" + ;; :text "調") + ;; (scale + ;; :min 0 + ;; :max 101 + ;; :active false + ;; :value gpu + ;; :class "scale" + ;; :width 280)) (box :class "stats" :hexpand "false" @@ -220,7 +177,7 @@ :value volume_percent :class "scale" :width 280 - :onchange "amixer sset Master {}%") + :onchange "pamixer --set-volume {}") ))) (deflisten gpu "scripts/gpu") @@ -237,17 +194,17 @@ :class "poweroff" :halign "center" :tooltip "Shut Down" - :onclick "kitty poweroff &" "⏻") + :onclick "alacritty poweroff &" "⏻") (button :class "reboot" :halign "center" :tooltip "Reboot" - :onclick "kitty reboot &" "") + :onclick "alacritty reboot &" "") (button :class "firmware" :halign "center" :tooltip "Reboot to EFI" - :onclick "kitty systemctl reboot --firmware &" "拉") + :onclick "alacritty systemctl reboot --firmware &" "拉") (button :class "exit" :halign "center" @@ -257,9 +214,9 @@ :class "restart" :halign "center" :tooltip "edit Config" - :onclick "footclient nvim ~/.config/hypr/hyprland.conf &" ""))) + :onclick "emacsclient ~/.config/hypr/hyprland.conf &" ""))) -(defpoll uptime :interval "1m" "uptime -p | sed -e 's/up //;s/ hours,/h/;s/ minutes/m/'") +(defpoll uptime :interval "1m" "uptime | awk '{print $3}' | sed 's/,//;s/\(.*\):\(.*\)/\1 h \2 m/") (defpoll packages :interval "5m" `pacman -Q | wc -l`) (defpoll kernal :interval "5m" `uname -r`) (defpoll name :interval "5m" `whoami`) @@ -286,10 +243,10 @@ :class "uptime" :halign "start" :text " : ${uptime}") - (label - :class "packages" - :halign "start" - :text " : ${packages}") + ;; (label + ;; :class "packages" + ;; :halign "start" + ;; :text " : ${packages}") (label :class "kernal" :halign "start" diff --git a/hypr/hyprland.conf b/hypr/hyprland.conf index 832a831..ff985d0 100644 --- a/hypr/hyprland.conf +++ b/hypr/hyprland.conf @@ -89,19 +89,16 @@ misc:disable_autoreload = true # example window rules # for windows named/classed as abc and xyz -#windowrule=move 69 420,abc -#windowrule=size 420 69,abc -#windowrule=tile,xyz -#windowrule=float,abc -#windowrule=pseudo,abc windowrule=opaque,firefox windowrule=float,dolphin +windowrule=float,mpv windowrule=size 90% 76%,mpv windowrule=center,mpv windowrule=float,pulsemixer -windowrule=workspace special,mpv windowrule=workspace 1,firefox windowrule=workspace 2,emacs +windowrule=float,btop +windowrule=size 60% 60%,btop # example binds bind=SUPER,RETURN,exec,alacritty @@ -110,10 +107,13 @@ bind=SUPERSHIFT,Q,exit, bind=SUPERSHIFT,D,exec,dolphin bind=SUPERSHIFT,F,togglefloating, bindr=SUPER,Super_L,exec,/home/chris/bin/launcher.sh -bindr=SUPERALT,Alt_L,exec,/home/chris/bin/windows.sh +bindr=ALT,Alt_L,exec,/home/chris/bin/window.sh +bind=SUPER,w,exec,/home/chris/bin/window.sh bind=SUPER,E,exec,/home/chris/bin/emacslof +bind=SUPER,d,exec,emacsclient -c -e '(dired-jump)' bind=SUPER,B,exec,/home/chris/bin/fflof bind=SUPER,A,exec,alacritty --class pulsemixer -e pulsemixer +bind=SUPERCTRL,/,exec,alacritty --class btop -e btop bind=SUPER,P,exec,/home/chris/bin/rbw.sh bind=SUPER,M,fullscreen,1 @@ -168,6 +168,9 @@ binde=, XF86AudioMute, exec, pamixer -t binde=, XF86MonBrightnessUp, exec, brightnessctl s +10% binde=, XF86MonBrightnessDown, exec, brightnessctl s 10%- +bind=SUPERCTRL,b,exec,eww.sh +bind=SUPERALT,n,exec,eww update rightside=true + bindm=SUPER,mouse:272,movewindow bindm=SUPER,mouse:273,resizewindow diff --git a/scripts/getvol b/scripts/getvol index e1d5718..85493ed 100755 --- a/scripts/getvol +++ b/scripts/getvol @@ -1,4 +1,5 @@ #!/bin/sh echo $(pamixer --get-volume-human) >> /tmp/vol +echo $(pamixer --get-volume-human) diff --git a/scripts/window.sh b/scripts/window.sh index 355b629..f465423 100755 --- a/scripts/window.sh +++ b/scripts/window.sh @@ -4,8 +4,6 @@ list_windows() ( wlrctl window list ) -window=$(list_windows | rofi -sync -dmenu -p "select window..." -theme ~/.config/rofi/launchers-git/laptop-rbw.rasi | awk '{print $1}' | sed 's/://') - -echo $window +window=$(list_windows | rofi -i -sync -dmenu -p " " -theme ~/.config/rofi/launchers-git/laptop-rbw.rasi | awk '{print $1}' | sed 's/://') wlrctl window focus $window diff --git a/system/kaladin/configuration.nix b/system/kaladin/configuration.nix index e936b8b..cb3a93a 100644 --- a/system/kaladin/configuration.nix +++ b/system/kaladin/configuration.nix @@ -95,7 +95,7 @@ displayManager = { startx.enable = true; sddm = { - enable = true; + enable = false; }; session = [ { @@ -242,6 +242,7 @@ jq ripgrep fd + socat ffmpeg-full imagemagick libheif @@ -296,6 +297,7 @@ rofi-wayland wofi waybar + tridactyl-native eww-wayland wlrctl hyprpaper @@ -462,6 +464,7 @@ no-littering tree-sitter tree-sitter-langs + rustic evil evil-collection general diff --git a/system/syl/configuration.nix b/system/syl/configuration.nix index 772af97..089b950 100644 --- a/system/syl/configuration.nix +++ b/system/syl/configuration.nix @@ -88,7 +88,7 @@ displayManager = { startx.enable = true; sddm = { - enable = true; + enable = false; }; session = [ { @@ -261,6 +261,7 @@ jq ripgrep fd + socat ffmpeg-full imagemagick libheif @@ -315,6 +316,7 @@ rofi-wayland wofi waybar + tridactyl-native eww-wayland wlrctl hyprpaper @@ -448,6 +450,7 @@ no-littering tree-sitter tree-sitter-langs + rustic evil evil-collection general diff --git a/user/home.nix b/user/home.nix index 05740da..214e833 100644 --- a/user/home.nix +++ b/user/home.nix @@ -316,6 +316,8 @@ }; }; + home.file.".mozilla/native-messaging-hosts".source = "/run/current-system/sw/lib/mozilla/native-messaging-hosts"; + home.file.".mozilla/firefox/nw77o6yc.default/chrome" = { source = ../firefox/chrome; recursive = true; @@ -340,9 +342,7 @@ source = ../fish/functions; }; - home.file.".config/hypr" = { - source = ../hypr; - }; + home.file.".config/hypr".source = config.lib.file.mkOutOfStoreSymlink ../hypr; home.file.".config/dunst" = { source = ../dunst; @@ -535,8 +535,10 @@ After = [ "graphical-session.target" ]; # PartOf = [ "plasma-workspace.target" ]; }; - - # Install = { WantedBy = [ "plasma-workspace.target" ]; }; + Service = { + Environment = ["PATH=/etc/profiles/per-user/chris/bin" + "WAYLAND_DISPLAY=wayland-1"]; + }; }; };