commit 8db26e970702f6849dce223a04eb09ac5d0a006d
Author: end-4 <97237370+end-4@users.noreply.github.com>
Date: Thu Feb 22 15:35:06 2024 +0700
stuff
diff --git a/early/.config/dunst/dunstrc b/early/.config/dunst/dunstrc
new file mode 100755
index 000000000..771dd80bc
--- /dev/null
+++ b/early/.config/dunst/dunstrc
@@ -0,0 +1,59 @@
+[global]
+monitor = 0
+follow = mouse
+geometry = "280x50-20+90"
+indicate_hidden = no
+shrink = no
+separator_height = 4
+separator_color = yes
+padding = 20
+horizontal_padding = 20
+frame_width = 3
+sort = no
+idle_threshold = 120
+font = Rubik 13
+line_height = 4
+markup = full
+format = "%s\n%b"
+alignment = left
+show_age_threshold = 60
+word_wrap = yes
+ignore_newline = no
+stack_duplicates = false
+hide_duplicate_count = yes
+show_indicators = no
+icon_position = left
+max_icon_size = 48
+sticky_history = yes
+history_length = 20
+browser = x-www-browser -new-tab
+always_run_script = true
+title = Dunst
+class = Dunst
+corner_radius = 10
+origin = top-right
+offset = 8x69
+
+[shortcuts]
+close = ctrl+shift+space
+close_all = ctrl+shift+space
+history = ctrl+grave
+context = ctrl+shift+period
+
+[urgency_low]
+timeout = 4
+background = "#1A1B2699"
+foreground = "#A4D7F1"
+frame_color = "#A4D7F1"
+
+[urgency_normal]
+timeout = 8
+background = "#1A1B2699"
+foreground = "#A4D7F1"
+frame_color = "#A4D7F1"
+
+[urgency_critical]
+timeout = 0
+background = "#1A1B2699"
+foreground = "#FDDC74"
+frame_color = "#FDDC74"
diff --git a/early/.config/eww/.vscode/c_cpp_properties.json b/early/.config/eww/.vscode/c_cpp_properties.json
new file mode 100755
index 000000000..a2461ad1a
--- /dev/null
+++ b/early/.config/eww/.vscode/c_cpp_properties.json
@@ -0,0 +1,18 @@
+{
+ "configurations": [
+ {
+ "name": "Linux",
+ "includePath": [
+ "${workspaceFolder}/**",
+ "/usr/include/**"
+ ],
+ "defines": [],
+ "compilerPath": "/usr/bin/clang",
+ "cStandard": "c17",
+ "cppStandard": "c++17",
+ "intelliSenseMode": "linux-clang-x64",
+ "configurationProvider": "ms-vscode.makefile-tools",
+ }
+ ],
+ "version": 4
+}
\ No newline at end of file
diff --git a/early/.config/eww/.vscode/settings.json b/early/.config/eww/.vscode/settings.json
new file mode 100755
index 000000000..6e9310476
--- /dev/null
+++ b/early/.config/eww/.vscode/settings.json
@@ -0,0 +1,81 @@
+{
+ "files.associations": {
+ "optional": "cpp",
+ "system_error": "cpp",
+ "fstream": "cpp",
+ "iosfwd": "cpp",
+ "string_view": "cpp",
+ "string": "cpp",
+ "any": "cpp",
+ "array": "cpp",
+ "bit": "cpp",
+ "*.tcc": "cpp",
+ "cctype": "cpp",
+ "clocale": "cpp",
+ "cmath": "cpp",
+ "codecvt": "cpp",
+ "compare": "cpp",
+ "concepts": "cpp",
+ "cstddef": "cpp",
+ "cstdint": "cpp",
+ "cstdio": "cpp",
+ "cstdlib": "cpp",
+ "cstring": "cpp",
+ "ctime": "cpp",
+ "cwchar": "cpp",
+ "cwctype": "cpp",
+ "deque": "cpp",
+ "forward_list": "cpp",
+ "map": "cpp",
+ "unordered_map": "cpp",
+ "vector": "cpp",
+ "exception": "cpp",
+ "functional": "cpp",
+ "initializer_list": "cpp",
+ "iomanip": "cpp",
+ "iostream": "cpp",
+ "istream": "cpp",
+ "limits": "cpp",
+ "memory": "cpp",
+ "new": "cpp",
+ "numbers": "cpp",
+ "numeric": "cpp",
+ "ostream": "cpp",
+ "ranges": "cpp",
+ "ratio": "cpp",
+ "span": "cpp",
+ "sstream": "cpp",
+ "stdexcept": "cpp",
+ "streambuf": "cpp",
+ "type_traits": "cpp",
+ "tuple": "cpp",
+ "typeinfo": "cpp",
+ "utility": "cpp",
+ "valarray": "cpp",
+ "csignal": "cpp",
+ "cstdarg": "cpp",
+ "atomic": "cpp",
+ "bitset": "cpp",
+ "charconv": "cpp",
+ "chrono": "cpp",
+ "condition_variable": "cpp",
+ "list": "cpp",
+ "set": "cpp",
+ "unordered_set": "cpp",
+ "algorithm": "cpp",
+ "iterator": "cpp",
+ "memory_resource": "cpp",
+ "random": "cpp",
+ "regex": "cpp",
+ "source_location": "cpp",
+ "format": "cpp",
+ "mutex": "cpp",
+ "semaphore": "cpp",
+ "shared_mutex": "cpp",
+ "stdfloat": "cpp",
+ "stop_token": "cpp",
+ "thread": "cpp",
+ "cinttypes": "cpp",
+ "variant": "cpp"
+ }
+}
\ No newline at end of file
diff --git a/early/.config/eww/.vscode/tasks.json b/early/.config/eww/.vscode/tasks.json
new file mode 100755
index 000000000..2cd0264c6
--- /dev/null
+++ b/early/.config/eww/.vscode/tasks.json
@@ -0,0 +1,30 @@
+{
+ "tasks": [
+ {
+ "type": "cppbuild",
+ "label": "C/C++: g++ build active file",
+ "command": "/usr/bin/g++",
+ "args": [
+ "-fdiagnostics-color=always",
+ "-g",
+ "${file}",
+ "-o",
+ "${fileDirname}/${fileBasenameNoExtension}",
+ "-lboost_iostreams",
+ "`pkg-config --libs boost_iostreams`"
+ ],
+ "options": {
+ "cwd": "${fileDirname}"
+ },
+ "problemMatcher": [
+ "$gcc"
+ ],
+ "group": {
+ "kind": "build",
+ "isDefault": true
+ },
+ "detail": "Task generated by Debugger."
+ }
+ ],
+ "version": "2.0.0"
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_bgdecor.scss b/early/.config/eww/css/_bgdecor.scss
new file mode 100755
index 000000000..9ca03cd64
--- /dev/null
+++ b/early/.config/eww/css/_bgdecor.scss
@@ -0,0 +1,125 @@
+.bg-decor-dow {
+ color: $onPrimaryContainer;
+ font-family: Rubik;
+ font-size: 35pt;
+}
+
+.bg-decor-date {
+ color: $onPrimaryContainer;
+ font-family: Rubik;
+ font-size: 20pt;
+}
+
+.bg-module {
+ // background-color: shade($colorbg, 10%);
+ border-radius: 30px;
+ padding: 20px;
+ margin: 5px;
+}
+
+.bg-text {
+ text-shadow: -1px -1px 0 $primaryContainer,
+ 1px -1px 0 $primaryContainer,
+ -1px 1px 0 $primaryContainer,
+ 1px 1px 0 $primaryContainer;
+ color: $onPrimaryContainer;
+ font-family: 'Rubik';
+}
+
+.bg-icon {
+ margin-bottom: 9px;
+ color: $onSecondaryContainer;
+ font-family: 'Material Symbols Rounded';
+ font-size: 15pt;
+ min-width: 40px;
+ min-height: 40px;
+ background-color: $secondaryContainer;
+ border-radius: 13px;
+}
+
+.bg-title {
+ text-shadow: -1px -1px 0 $primaryContainer,
+ 1px -1px 0 $primaryContainer,
+ -1px 1px 0 $primaryContainer,
+ 1px 1px 0 $primaryContainer;
+ color: $onPrimaryContainer;
+ font-size: 16pt;
+ margin: 5px;
+ padding-bottom: 10px;
+ padding-left: 5px;
+}
+
+.bg-cool-text {
+ color: $onPrimaryContainer;
+ font-family: 'Rubik';
+ font-size: 13pt;
+ margin: 5px;
+ text-shadow: -1px -1px 0 $primaryContainer,
+ 1px -1px 0 $primaryContainer,
+ -1px 1px 0 $primaryContainer,
+ 1px 1px 0 $primaryContainer;
+}
+
+.bg-progress {
+ margin: 5px;
+ min-width: 450px;
+
+ trough {
+ border-radius: 9999px;
+ background-color: #24222A;
+ min-height: 10px;
+ }
+
+ highlight {
+ border-radius: 9999px;
+ background-color: $color3;
+ }
+}
+
+.bg-graph-container {
+ min-width: 150px;
+ min-height: 30px;
+ padding-bottom: 4px;
+ padding-top: 4px;
+ border-radius: 8px;
+ border: 1px solid $onPrimaryContainer;
+ margin: 5px;
+ box-shadow: -1px -1px 0 $primaryContainer,
+ 1px -1px 0 $primaryContainer,
+ -1px 1px 0 $primaryContainer,
+ 1px 1px 0 $primaryContainer;
+}
+
+.bg-graph {
+ color: $color3;
+ // background-color: $color3;
+}
+
+.bg-date {
+ min-width: 500px;
+}
+
+.bg-decor-input-left {
+ border-top-left-radius: 999px;
+ border-bottom-left-radius: 999px;
+ margin-top: 30px;
+ padding-left: 20px;
+ padding-right: 20px;
+ font-size: 15pt;
+ min-height: 50px;
+ background-color: rgba(255, 255, 255, 0.2);
+}
+
+.bg-decor-input-right {
+ border-top-right-radius: 999px;
+ border-bottom-right-radius: 999px;
+ margin-top: 30px;
+ padding-left: 20px;
+ padding-right: 20px;
+ // padding-top: 5px;
+ // padding-bottom: 5px;
+ font-size: 15pt;
+ min-height: 50px;
+ background-color: rgba(255, 255, 255, 0.2);
+ color: rgba(255, 255, 255, 0.2);
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_bottombar.scss b/early/.config/eww/css/_bottombar.scss
new file mode 100755
index 000000000..d3671b573
--- /dev/null
+++ b/early/.config/eww/css/_bottombar.scss
@@ -0,0 +1,65 @@
+.bottombar-closed-hitbox {
+ min-width: 1920px;
+ background-color: mix(rgba(30, 30, 30, 0.5), $colorbg, 50%);
+}
+.bottombar-bg {
+ min-width: 1920px;
+ min-height: 300px;
+ border-top-left-radius: 26px;
+ border-top-right-radius: 26px;
+ background-color: shade($colorbg, 70%);
+ background-size: 100% auto;
+ background-position: center center;
+
+ margin-top: 5px; //for shadow
+ box-shadow: 0px -2px 3px rgba(0, 0, 0, 0.5);
+}
+
+.bottombar-bg-front {
+ min-width: 1920px;
+ min-height: 300px;
+ border-top-left-radius: 26px;
+ border-top-right-radius: 26px;
+ border-bottom: 0px solid transparent;
+ background-color: mix(rgba(30, 30, 30, 0.5), $colorbg, 50%);
+ background-size: 100% 100%;
+
+ margin-top: 5px; //for shadow
+}
+
+.cava-column {
+ // background-image: linear-gradient($color1, $color3);
+ background-color: rgb(176, 226, 247);
+ border-top-left-radius: 99px;
+ border-top-right-radius: 99px;
+ margin: 8px;
+ margin-bottom: 0px;
+}
+
+.bottombar-musicinfo-box {
+ margin-left: 50px;
+ margin-top: 50px;
+}
+
+.bottombar-title {
+ font-family: 'Lexend';
+ font-size: 30pt;
+ font-weight: 500;
+ text-shadow: 2px 4px 4px rgba(0, 0, 0, 0.5);
+}
+
+.bottombar-artist {
+ font-family: 'Lexend';
+ font-size: 16pt;
+ font-weight: 500;
+ text-shadow: 2px 4px 4px rgba(0, 0, 0, 0.5);
+}
+
+.bottombar-music-cover {
+ border-radius: 15px;
+ min-height: 200px;
+ min-width: 200px;
+ background-size: auto 100%;
+ background-position: center;
+ box-shadow: 2px 4px 4px rgba(0, 0, 0, 0.5);
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_calendar.scss b/early/.config/eww/css/_calendar.scss
new file mode 100755
index 000000000..e22548ba9
--- /dev/null
+++ b/early/.config/eww/css/_calendar.scss
@@ -0,0 +1,125 @@
+.calendar-win {
+ @include window;
+ background-color: $colorbarbg;
+ border: 3px solid $color3;
+ border-radius: 15px;
+ color: $colortext;
+ padding: .2em;
+ font-family: 'Rubik';
+ margin: 14px;
+}
+
+calendar {
+ * {
+ padding-top: 10px;
+ color: $primary;
+ }
+
+ :selected {
+ color: $onPrimary;
+ font-weight: bolder;
+ background-color: $primary;
+ border-radius: 8px;
+ }
+
+ .header {
+ color: $colortext;
+ margin: 15px;
+ min-height: 400px;
+ }
+
+ .highlight {
+ color: $onTertiaryContainer;
+ font-weight: bold;
+ }
+
+ .button {
+ color: $colortext;
+ padding-top: 10px;
+ }
+
+ :indeterminate {
+ color: $onBackground;
+ }
+}
+
+.calendarwin-title {
+ border-radius: 9999px;
+ font-size: 15pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ margin: 1px;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.calendarwin-button {
+ border-radius: 9999px;
+ font-size: 12pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ margin: 1px;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.calendarwin-text {
+ border-radius: 9999px;
+ font-size: 11pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.calendarwin-icon {
+ background-position: center;
+ min-height: 42px;
+ min-width: 30px;
+}
+
+.calendarwin-text {
+ border-radius: 9999px;
+ font-size: 12pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ min-height: 50px;
+ min-width: 50px;
+ margin: 3px;
+}
+
+.calendarwin-day-1 {
+ background-color: transparent;
+ color: #7C7C7C;
+}
+
+.calendarwin-day0 {
+ background-color: transparent;
+ color: white;
+}
+
+.calendarwin-day1 {
+ background-color: $primary;
+ color: black;
+}
+
+.calendarwin-day0:hover {
+ background-color: rgba(75, 75, 75, 0.5);
+}
+
+.calendarwin-day0:active {
+ background-color: tint(rgba(75, 75, 75, 0.5), 10%);
+}
+
+.calendarwin-day1:hover {
+ background-color: tint($color4, 10%);
+ color: black;
+}
+
+.calendarwin-day1:active {
+ background-color: tint($color4, 20%);
+ color: black;
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_colors.scss b/early/.config/eww/css/_colors.scss
new file mode 100755
index 000000000..7e7546543
--- /dev/null
+++ b/early/.config/eww/css/_colors.scss
@@ -0,0 +1,77 @@
+
+
+$rosewater: #f5e0dc;
+$flamingo: #f2cdcd;
+$pink: #f5c2e7;
+$mauve: #cba6f7;
+$red: #f38ba8;
+// $red: #EF738A;
+$maroon: #eba0ac;
+$peach: #fab387;
+$yellow: #f9e2af;
+$green: #a6e3a1;
+$teal: #94e2d5;
+$sky: #89dceb;
+$sapphire: #74c7ec;
+$blue: #89b4fa;
+$lavender: #b4befe;
+$true: #EF738A;
+$false: #A9B1D6;
+
+
+$forestgreen: #A8B468;
+$forestyellow : #8e8370;
+$foresttext : #d3c6ab;
+$forestblack : #1e201f;
+$forestred : #e76c69;
+$forestpink : #d698b5;
+$forestorange : #e59576;
+$forestgray : #75817b;
+$forestgraylight: #495156;
+$forestgreendark: #7fba90;
+$forestblue: #77AEA7;
+
+$tokyobluedark: #1A1B26;
+$tokyobluelessdark: #1f212e;
+$tokyotext: #a9b1d6;
+$tokyopink: #ff79b1; //nah theres no pink in tokyonight, but i need one so added
+$tokyored: #EF738A;
+$tokyoorange: #FF9E64;
+$tokyoyellow: #E0AF68;
+$tokyogreen: #9ECE6A;
+$tokyoturquoise: #73daca;
+$tokyoice: #b4f9f8;
+$tokyocyan: #0DB9D7;
+$tokyoblue: #7AA2F7;
+$tokyopurple: #9778D0;
+$tokyogrey: #444B6A;
+$catbg: #1E1E2E;
+
+$text: $tokyotext;
+$subtext1: #868dac;
+$subtext0: #a6adc8;
+$overlay2: #9399b2;
+$overlay1: #7f849c;
+$overlay0: rgba(108, 112, 134, 0.4);
+$overlayedge: rgba(108, 112, 134, 0.15);
+
+$hover0: rgba(200, 200, 200, 0.3);
+
+$surface2: rgba(88, 91, 112, 0.7);
+$surface1: rgba(69, 71, 90, 0.7);
+// $surface0: rgba(28, 28, 48, 0.5); //Needs dynamic change
+// $surface0: #24222A; //Needs dynamic change
+
+
+$base: #1E201F;
+$mantle: #181825;
+$crust: #121415;
+
+$fg: $tokyotext;
+$bg: #171726;
+$barbg: #131426;
+$shadow: $crust;
+
+// $battcolor: $tokyogreen;
+// $memcolor: $tokyoorange;
+// $cpucolor: $tokyoblue;
\ No newline at end of file
diff --git a/early/.config/eww/css/_colorscheme.scss b/early/.config/eww/css/_colorscheme.scss
new file mode 100755
index 000000000..eca473230
--- /dev/null
+++ b/early/.config/eww/css/_colorscheme.scss
@@ -0,0 +1,14 @@
+//Auto generated color theme for image at: [Local wallpaper]
+@function bluetint($color, $percentage) { @return mix(#CDDFED, $color, $percentage); }
+@function blueshade($color, $percentage) { @return mix(#152E50, $color, $percentage); }
+$colorbarbg: #1f252d;
+$colorbg: rgba(31,37,45,0.75);
+$colortext: #e6e2e7;
+$color0: #60C4F1;
+$color1: #9F9BAB;
+$color2: #DBB4AD;
+$color3: #A2AECF;
+$color4: #CFB7CE;
+$color5: #A4D7F1;
+$color6: #e6e2e7;
+$color7: #A2AECF;
diff --git a/early/.config/eww/css/_colorscheme_default.scss b/early/.config/eww/css/_colorscheme_default.scss
new file mode 100755
index 000000000..eca473230
--- /dev/null
+++ b/early/.config/eww/css/_colorscheme_default.scss
@@ -0,0 +1,14 @@
+//Auto generated color theme for image at: [Local wallpaper]
+@function bluetint($color, $percentage) { @return mix(#CDDFED, $color, $percentage); }
+@function blueshade($color, $percentage) { @return mix(#152E50, $color, $percentage); }
+$colorbarbg: #1f252d;
+$colorbg: rgba(31,37,45,0.75);
+$colortext: #e6e2e7;
+$color0: #60C4F1;
+$color1: #9F9BAB;
+$color2: #DBB4AD;
+$color3: #A2AECF;
+$color4: #CFB7CE;
+$color5: #A4D7F1;
+$color6: #e6e2e7;
+$color7: #A2AECF;
diff --git a/early/.config/eww/css/_colorscheme_osu.scss b/early/.config/eww/css/_colorscheme_osu.scss
new file mode 100755
index 000000000..48bb59f78
--- /dev/null
+++ b/early/.config/eww/css/_colorscheme_osu.scss
@@ -0,0 +1,11 @@
+$colorbg: #0f0e11; //Get from color0
+$colortext: white; //Get from color4
+$color0: #8C66FF;
+$color1: #CC3378;
+$color2: #5933CC;
+$color3: #EEAA00;
+$color4: white;
+$color5: white;
+$color6: white;
+$color7: white; //Get from color4 (border)
+$colormusic: white;
\ No newline at end of file
diff --git a/early/.config/eww/css/_dashboard.scss b/early/.config/eww/css/_dashboard.scss
new file mode 100755
index 000000000..4f5d533e3
--- /dev/null
+++ b/early/.config/eww/css/_dashboard.scss
@@ -0,0 +1,236 @@
+.dash-window {
+ background-color: transparent;
+}
+
+.dash-title {
+ color: $primary;
+ font-size: 18pt;
+}
+
+.dash-subtitle {
+ color: $color5;
+ font-size: 13pt;
+}
+
+.dash {
+ min-height: 50px;
+ min-width: 50px;
+ background-color: $colorbarbg;
+ border-radius: 15px;
+ padding: 20px;
+ margin: 5px;
+}
+
+.dash-profile {
+ min-width: 300px;
+ min-height: 228px;
+}
+
+.dash-user-pic {
+ margin: 20px;
+ min-width: 150px;
+ min-height: 150px;
+ background-repeat: no-repeat;
+ background-size: 100%;
+ border-radius: 1500px;
+ background-position: center;
+}
+
+.dash-fetch {
+ color: $colortext;
+ font-size: 15pt;
+}
+
+.dash-fetch-icon {
+ color: $colortext;
+ font-size: 16pt;
+ margin: 3px;
+ font-family: Material Symbols Rounded;
+}
+
+.dash-fetch-icon-nerd {
+ color: $colortext;
+ font-size: 16pt;
+ margin: 3px;
+ font-family: JetBrainsMono Nerd Font Regular;
+}
+
+.dash-icon {
+ font-size: 24pt;
+ font-weight: bold;
+ font-family: Material Symbols Rounded;
+}
+
+.dash-button {
+ border-radius: 15px;
+}
+
+.dash-button:hover {
+ background-color: tint($colorbarbg, 10%);
+}
+
+.dash-button:focus {
+ background-color: tint($colorbarbg, 10%);
+}
+
+.dash-button:active {
+ background-color: tint($colorbarbg, 20%);
+}
+
+.dash-quote-content {
+ margin: 2px;
+ color: $colortext;
+ font-size: 14pt;
+}
+
+.dash-quote-author {
+ margin: 2px;
+ color: $colortext;
+ font-size: 12pt;
+}
+
+.dash-tile {
+ min-width: 800px;
+}
+
+.dash-input-icon {
+ padding-left: 15px;
+ padding-right: 15px;
+ min-width: 30px;
+ margin: -5px;
+ margin-left: 15px;
+ background-color: $colorbarbg;
+ border: 2px solid tint($colorbarbg, 10%);
+ border-radius: 10px;
+ color: $colortext;
+ font-size: 19pt;
+}
+
+.dash-input {
+ padding-left: 15px;
+ padding-right: 15px;
+ min-width: 860px;
+ margin: -5px;
+ background-color: $colorbarbg;
+ border: 2px solid tint($colorbarbg, 10%);
+ border-radius: 10px;
+ color: $colortext;
+ font-size: 15pt;
+ caret-color: $colortext;
+
+ selection {
+ background-color: rgba(154, 152, 152, 0.5);
+ }
+}
+
+.dash-time {
+ color: $primary;
+ font-size: 35pt;
+}
+
+.dash-date {
+ color: $primary;
+ font-size: 18pt;
+}
+
+.dash-clock-text-area {
+ min-width: 200px;
+}
+
+.dash-clock-circle-area {
+ // margin-left: 10px;
+}
+
+.dash-clock-circle {
+ background-color: $surface0;
+}
+
+.dash-clock-inner {
+ padding: 36px;
+}
+
+.dash-clock-circle-minute {
+ margin: 10px;
+ background-color: $overlay0;
+}
+
+.dash-debug-area {
+ background-color: rgba(214, 28, 50, 0.3);
+}
+
+.dash-dir-area {
+ min-width: 198px;
+}
+
+.dash-dir {
+ font-size: 15pt;
+ padding: 10px;
+ padding-left: 15px;
+}
+
+.dash-resources {
+ min-width: 198px;
+ min-height: 122px;
+}
+
+.dash-resouce-icon {
+ font-size: 99pt;
+}
+
+.dash-resource-inner {
+ padding: 30px;
+}
+
+.dash-resource-text {
+ font-size: 15pt;
+ margin: 3px;
+}
+
+.dash-resource-title {
+ font-size: 15pt;
+}
+
+.dash-resource-tile {
+ // background-color: tint($colorbarbg, 20%);
+ border-radius: 12px;
+ padding-left: 15px;
+ padding-right: 15px;
+ padding-top: 11px;
+ // padding: 15px;
+}
+
+.clrt {
+ color: $colortext;
+}
+
+.clr0 {
+ color: $primary;
+}
+
+.clr1 {
+ color: $secondary;
+}
+
+.clr2 {
+ color: $tertiary;
+}
+
+.clr3 {
+ color: $primary;
+}
+
+.clr4 {
+ color: $secondary;
+}
+
+.clr5 {
+ color: $tertiary;
+}
+
+.clr6 {
+ color: $primary;
+}
+
+.clr7 {
+ color: $secondary;
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_dashfs.scss b/early/.config/eww/css/_dashfs.scss
new file mode 100755
index 000000000..5694d7d1e
--- /dev/null
+++ b/early/.config/eww/css/_dashfs.scss
@@ -0,0 +1,344 @@
+.dashfs-bg {
+ background-color: rgba(20, 20, 20, 0.7);
+}
+
+.dashfs-greet {
+ border-radius: 10px;
+ margin-top: 40px;
+ margin-left: 40px;
+ border: 3px solid transparent;
+ border-left: 3px solid $color5;
+ padding: 10px;
+}
+
+.dashfs-greet-text {
+ font-family: 'Rubik';
+ font-size: 20pt;
+ color: $color5;
+}
+
+.dashfs-greet-subtext {
+ font-family: 'Rubik';
+ font-size: 14pt;
+ color: $color5;
+}
+
+.dashfs-clock {
+ border-radius: 10px;
+ margin-top: 40px;
+ margin-right: 40px;
+ border: 3px solid transparent;
+ border-right: 3px solid $color4;
+ padding: 15px;
+}
+
+.dashfs-clock-time {
+ margin-top: -15px;
+ font-family: 'Rubik';
+ font-size: 45pt;
+ color: $color4;
+}
+
+.dashfs-clock-date {
+ font-family: 'Rubik';
+ font-size: 22pt;
+ color: $color4;
+}
+
+.dashfs-calendar-title {
+ border-radius: 9999px;
+ font-size: 15pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ margin: 1px;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.dashfs-calendar-button {
+ border-radius: 9999px;
+ font-size: 12pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ margin: 1px;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.dashfs-calendar-text {
+ border-radius: 9999px;
+ font-size: 11pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.dashfs-section-nopad {
+ border-radius: 10px;
+ border: 3px solid transparent;
+ border-top: 3px solid $color4;
+}
+
+.dashfs-section {
+ border-radius: 10px;
+ border: 3px solid transparent;
+ border-top: 3px solid $color1;
+ padding: 10px;
+ min-width: 200px;
+}
+
+.dashfs-section-title {
+ color: $color1;
+ font-size: 18pt;
+ font-family: 'Rubik';
+ margin-bottom: 5px;
+}
+
+.dashfs-fetch {
+ color: $color1;
+ font-size: 15pt;
+ font-family: 'Rubik';
+}
+
+.dashfs-fetch-icon {
+ color: $color1;
+ font-size: 16pt;
+ margin: 5px 0px;
+ margin-right: 10px;
+ font-family: 'Material Symbols Rounded';
+}
+
+.dashfs-section-button {
+ border-radius: 8px;
+ padding: 0 10px;
+}
+
+.dashfs-section-button:hover {
+ background-color: $overlay0;
+}
+
+.dashfs-calendar-icon {
+ background-position: center;
+ min-height: 42px;
+ min-width: 30px;
+}
+
+.dashfs-monthbutton {
+ // background-size: 80% auto;
+ background-color: transparent;
+ background-position: center;
+ border-radius: 6px;
+ margin: 12px 3px;
+ margin-top: 0px;
+ padding: 6px;
+ min-width: 20px;
+ min-height: 20px;
+}
+
+.dashfs-monthbutton:hover {
+ background-color: rgba(95, 95, 95, 0.4);
+}
+
+.dashfs-calendar-text {
+ border-radius: 9999px;
+ font-size: 12pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.dashfs-nerd-icon {
+ color: $color1;
+ font-size: 16pt;
+ margin: 5px 0px;
+ margin-right: 10px;
+ font-family: 'JetBrainsMono Nerd Font';
+}
+
+.dashfs-button-only {
+ :first-child {
+ :first-child {
+ border-radius: 10px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ }
+ }
+}
+
+.dashfs-button-only:hover {
+ :first-child {
+ :first-child {
+ background-color: shade($overlay0, 2%);
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ }
+ }
+}
+
+.dashfs-button-pad {
+ padding: 3px;
+ // min-width: 42px;
+ min-height: 42px;
+}
+
+.dashfs-taskbaricon {
+ background-size: 60%;
+ background-position: center;
+ min-width: 64px;
+ min-height: 64px;
+ border-radius: 10px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.dashfs-taskbaricon-false {
+ background-size: 70%;
+ background-position: center;
+ min-width: 64px;
+ min-height: 64px;
+ border-radius: 10px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.dashfs-taskbaricon-true {
+ background-size: 70%;
+ background-position: center;
+ min-width: 64px;
+ min-height: 64px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.dashfs-taskbar-indicator-true {
+ border-radius: 10px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ margin-bottom: 4px;
+ margin-top: 65px;
+ margin-left: 25px;
+ margin-right: 25px;
+ background-color: $color4;
+}
+
+.dashfs-taskbar-indicator-false {
+ border-radius: 10px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ margin-bottom: 4px;
+ margin-top: 65px;
+ margin-left: 32px;
+ margin-right: 32px;
+ background-color: #9C98A3;
+}
+
+.dashfs-day-1 {
+ background-color: transparent;
+ color: #7C7C7C;
+}
+
+.dashfs-day0 {
+ background-color: transparent;
+ color: white;
+}
+
+.dashfs-day1 {
+ background-color: tint($color4, 20%);
+ color: black;
+}
+
+.dashfs-day0:hover {
+ background-color: rgba(75, 75, 75, 0.5);
+}
+
+.dashfs-day0:active {
+ background-color: tint(rgba(75, 75, 75, 0.5), 10%);
+}
+
+.dashfs-day1:hover {
+ background-color: tint($color4, 10%);
+ color: black;
+}
+
+.dashfs-day1:active {
+ background-color: tint($color4, 20%);
+ color: black;
+}
+
+.dashfs-music-cover {
+ border-radius: 10px;
+ min-height: 50px;
+ min-width: 50px;
+ background-size: auto 100%;
+ background-position: center;
+}
+
+.dashfs-resource-title {
+ color: $tertiary;
+ font-size: 18pt;
+ font-family: 'Rubik';
+ margin-bottom: 5px;
+}
+
+.dashfs-resource-box {
+ border-radius: 10px;
+ border: 3px solid transparent;
+ border-top: 3px solid $tertiary;
+ padding: 20px 5px;
+ min-width: 110px;
+}
+
+.dashfs-resource-circle {
+ color: $tertiary;
+ background-color: #5B5A5C;
+}
+
+.dashfs-resource-icon {
+ color: $tertiary;
+ font-size: 30pt;
+ font-family: 'Material Symbols Rounded';
+}
+
+.dashfs-resource-label {
+ color: $onTertiary;
+ background-color: $tertiary;
+ font-size: 13pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ padding: 3px 8px;
+ border-radius: 9999px;
+ min-width: 50px;
+}
+
+.dashfs-graph {
+ background-image: url('images/svg/graph.svg');
+ background-size: 100% 100%;
+ background-position: center;
+}
+
+.dashfs-cava-column {
+ background-color: rgba(176, 226, 247, 0.1);
+ border-radius: 9999px;
+ margin: 5px 0;
+}
+
+.dashfs-quote-content {
+ font-family: 'Space Grotesk';
+ font-weight: 500;
+ font-size: 16pt;
+ color: $primary;
+}
+
+.dashfs-quote-author {
+ font-family: 'Space Grotesk';
+ font-weight: 500;
+ font-size: 14pt;
+ color: $primary;
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_editmode.scss b/early/.config/eww/css/_editmode.scss
new file mode 100755
index 000000000..3733a2095
--- /dev/null
+++ b/early/.config/eww/css/_editmode.scss
@@ -0,0 +1,18 @@
+.edit-mode-checkbox-false {
+ min-height: 53px;
+ min-width: 53px;
+ // background-image: url('images/svg/tournaments.svg');
+ background-size: auto 65%;
+ background-position: center;
+ color: transparent;
+}
+
+.edit-mode-checkbox-true {
+ min-height: 53px;
+ min-width: 53px;
+ background-color: $overlay0;
+ // background-image: url('images/svg/tournaments.svg');
+ background-size: auto 65%;
+ background-position: center;
+ color: transparent;
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_iconcolor.txt b/early/.config/eww/css/_iconcolor.txt
new file mode 100755
index 000000000..75c915a19
--- /dev/null
+++ b/early/.config/eww/css/_iconcolor.txt
@@ -0,0 +1,6 @@
+#d7e2ff
+#dfbbde
+#9F9BAB
+#A2AECF
+#CFB7CE
+#CFB7CE
diff --git a/early/.config/eww/css/_iconcolor_default.txt b/early/.config/eww/css/_iconcolor_default.txt
new file mode 100755
index 000000000..75c915a19
--- /dev/null
+++ b/early/.config/eww/css/_iconcolor_default.txt
@@ -0,0 +1,6 @@
+#d7e2ff
+#dfbbde
+#9F9BAB
+#A2AECF
+#CFB7CE
+#CFB7CE
diff --git a/early/.config/eww/css/_material.scss b/early/.config/eww/css/_material.scss
new file mode 100755
index 000000000..15525e274
--- /dev/null
+++ b/early/.config/eww/css/_material.scss
@@ -0,0 +1,27 @@
+$primary: #adc6ff;
+$onPrimary: #002d6f;
+$primaryContainer: #17448f;
+$onPrimaryContainer: #d7e2ff;
+$secondary: #bfc6dd;
+$onSecondary: #293041;
+$secondaryContainer: #3f4659;
+$onSecondaryContainer: #dbe2f9;
+$tertiary: #dfbbde;
+$onTertiary: #412743;
+$tertiaryContainer: #593e5a;
+$onTertiaryContainer: #fcd7fa;
+$error: #ffb4a9;
+$onError: #680003;
+$errorContainer: #930006;
+$onErrorContainer: #ffb4a9;
+$colorbarbg: #1b1b1e;
+$onBackground: #e4e2e6;
+$surface: #1b1b1e;
+$onSurface: #e4e2e6;
+$surfaceVariant: #44464e;
+$onSurfaceVariant: #c5c6d0;
+$outline: #8e9099;
+$shadow: #000000;
+$inverseSurface: #e4e2e6;
+$inverseOnSurface: #303033;
+$inversePrimary: #355ca8;
diff --git a/early/.config/eww/css/_material_default.scss b/early/.config/eww/css/_material_default.scss
new file mode 100755
index 000000000..15525e274
--- /dev/null
+++ b/early/.config/eww/css/_material_default.scss
@@ -0,0 +1,27 @@
+$primary: #adc6ff;
+$onPrimary: #002d6f;
+$primaryContainer: #17448f;
+$onPrimaryContainer: #d7e2ff;
+$secondary: #bfc6dd;
+$onSecondary: #293041;
+$secondaryContainer: #3f4659;
+$onSecondaryContainer: #dbe2f9;
+$tertiary: #dfbbde;
+$onTertiary: #412743;
+$tertiaryContainer: #593e5a;
+$onTertiaryContainer: #fcd7fa;
+$error: #ffb4a9;
+$onError: #680003;
+$errorContainer: #930006;
+$onErrorContainer: #ffb4a9;
+$colorbarbg: #1b1b1e;
+$onBackground: #e4e2e6;
+$surface: #1b1b1e;
+$onSurface: #e4e2e6;
+$surfaceVariant: #44464e;
+$onSurfaceVariant: #c5c6d0;
+$outline: #8e9099;
+$shadow: #000000;
+$inverseSurface: #e4e2e6;
+$inverseOnSurface: #303033;
+$inversePrimary: #355ca8;
diff --git a/early/.config/eww/css/_music.scss b/early/.config/eww/css/_music.scss
new file mode 100755
index 000000000..5f120c08d
--- /dev/null
+++ b/early/.config/eww/css/_music.scss
@@ -0,0 +1,305 @@
+.music-area {
+ padding: 10px;
+ @include rounding;
+}
+
+.song-cover-art {
+ @include rounding;
+ background-position: center;
+ background-size: 100%;
+ margin: 4px 5px 4px 0;
+ min-height: 24px;
+ min-width: 24px;
+}
+
+.music-window {
+ @include window;
+ @include rounding;
+ background-color: $colorbarbg;
+ border: 3px solid;
+ color: $colortext;
+ margin: 3px;
+}
+
+.music-cover-art {
+ @include rounding;
+ background-color: transparent;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-image: url("eww_covers/cover_art_default");
+ background-position: 50% 15%;
+ // border-radius: 5px;
+ // margin: 1em;
+ // min-height: 200px;
+ min-width: 200px;
+}
+
+.music-box {
+ @include rounding;
+ padding-top: 24px;
+ background-color: rgba(0, 0, 0, 0.4);
+ background-position: top;
+}
+
+.music-title {
+ // font-weight: bold;
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ min-height: 39px;
+ font-size: 19pt;
+ color: $colortext;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+.music-title-hover {
+ // font-weight: bold;
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ font-size: 19pt;
+ color: $colortext;
+ background-color: $overlay0;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+.music-title-bar {
+ font-family: 'Rubik';
+ font-size: 15pt;
+ color: $colorbar;
+ padding-left: 10px;
+ padding-right: 10px;
+
+}
+
+.music-artist-bar {
+ color: $colorbar;
+ padding-left: 10px;
+ padding-right: 10px;
+ font-family: 'Rubik';
+ font-size: 11pt;
+}
+
+.music-artist {
+ color: $colortext;
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ font-weight: bold;
+ margin-bottom: 5px;
+ min-height: 25px;
+}
+
+.music-button label {
+ font-family: 'Material Symbols Rounded';
+ // color: $text;
+ font-size: 2rem;
+ font-family: SF Mono Nerd Font;
+ padding: 8px;
+}
+
+.music-time {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ color: $color1;
+ margin: 0 1rem;
+}
+
+.music-bar scale {
+ font-family: 'Material Symbols Rounded';
+ font-family: SF Mono Nerd Font;
+
+ highlight {
+ background-color: $color1;
+ border-radius: 24px;
+ }
+
+ trough {
+ background-color: $surface0;
+ border-radius: 24px;
+ min-height: 10px;
+ min-width: 170px;
+ }
+}
+
+.music-ctl {
+ border-radius: 0px;
+ color: $color1;
+ // padding-right: 10px;
+ min-height: 53px;
+}
+
+.music-icon {
+ padding-top: 5px; //Because the music icon is a bit high
+ padding-left: 16px;
+ padding-right: 16px;
+ color: $color1;
+ background-image: url("images/LinageMusic.png");
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center;
+}
+
+.music-ctl-revealer {
+ margin-top: -4px;
+ // transition: 200ms cubic-bezier(0.3, 0, 0.8, 0.15);
+}
+
+.music-ctl-revealer-false {
+ // padding-left: 10px;
+}
+
+.music-ctl-revealer-true {
+ background-color: $overlay0;
+}
+
+.music-media-source {
+ border-top-left-radius: 10px;
+ border-bottom-right-radius: 15px;
+ min-width: 40px;
+ min-height: 20px;
+ background-color: rgba(0, 0, 0, 0.4);
+}
+
+.music-source-icon {
+ font-family: 'JetBrainsMono Nerd Font';
+ font-size: 16pt;
+ margin-right: 5px;
+}
+
+.song-button {
+ color: $colortext;
+ border-radius: 9999px;
+ margin: 3px 3px;
+ min-width: 52px;
+ font-size: 32pt;
+}
+
+.song-button:hover {
+ background-color: $overlay0;
+}
+
+.music-button-box {
+ font-family: 'Material Symbols Rounded';
+ color: $colortext;
+ min-width: 160px;
+ margin-top: 6px;
+ margin-bottom: 6px;
+ padding-bottom: 0px;
+ background-color: rgba(0, 0, 0, 0.6);
+ border-radius: 9999px;
+}
+
+.osu-music-box {
+ // min-width: 75px;
+ min-height: 53px;
+ background-size: auto 65%;
+ background-position: 50% 50%;
+ // background-image: url('images/svg/beatmaps.svg');
+ // background-color: $colorbarbg;
+ background-repeat: no-repeat;
+ padding-left: 15px;
+}
+
+.osu-music-box-dummy {
+ min-width: 50px;
+ min-height: 53px;
+ margin-right: -6px;
+ margin-left: 6px;
+}
+
+.osu-music-slider {
+ margin-top: 9px;
+ margin-bottom: 9px;
+ min-height: 6px;
+ padding-left: 13px;
+
+ trough {
+ border-radius: 9999px;
+ background-color: #5c5b5b;
+ min-height: 6px;
+ // margin-left: 32px;
+ // margin-right: 32px;
+ // min-width: 70px;
+ min-width: 3px;
+ }
+
+ highlight {
+ min-width: 3px;
+ border-radius: 9999px;
+ background-color: $colorbar;
+ }
+}
+
+.track-scale {
+ @include rounding;
+
+ trough {
+ border-bottom-left-radius: 9999px;
+ border-bottom-right-radius: 9999px;
+ background-color: rgba(0, 0, 0, 0.8);
+ min-height: 8px;
+ // margin-left: 32px;
+ // margin-right: 32px;
+ // min-width: 70px;
+ min-width: 3px;
+ }
+
+ highlight {
+ min-width: 8px;
+ border-bottom-left-radius: 9999px;
+ border-bottom-right-radius: 9999px;
+ background-color: $color0;
+ }
+}
+
+.bar-music-cover {
+ border-radius: 10px;
+ min-height: 45px;
+ min-width: 45px;
+ background-size: auto 100%;
+ background-position: center;
+}
+
+.bar-music-state {
+ font-family: 'Material Symbols Rounded';
+ color: $color6;
+ background-color: rgba(0, 0, 0, 0.7);
+ border-radius: 9999px;
+ min-width: 30px;
+ min-height: 30px;
+}
+
+.music-cava-column {
+ background-color: $color0;
+ margin: 0 3px;
+ margin-bottom: 8px;
+ border-top-left-radius: 99px;
+ border-top-right-radius: 99px;
+}
+
+.music-time-label {
+ color: $colorbar;
+ background-color: rgba(0, 0, 0, 0.6);
+ font-size: 13pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ padding: 3px 8px;
+ border-radius: 9999px;
+ min-width: 50px;
+}
+
+.music-button-box-bar {
+ font-family: 'Material Symbols Rounded';
+ color: $colortext;
+ min-width: 160px;
+ margin: 0 0px;
+ border-radius: 9999px;
+}
+
+.song-button-bar {
+ color: $colortext;
+ border-radius: 9999px;
+ // margin: 3px;
+ min-width: 52px;
+ font-size: 32pt;
+}
+
+.song-button-bar:hover {
+ background-color: rgba(0, 0, 0, 0.4);
+}
diff --git a/early/.config/eww/css/_notification.scss b/early/.config/eww/css/_notification.scss
new file mode 100755
index 000000000..4becad4de
--- /dev/null
+++ b/early/.config/eww/css/_notification.scss
@@ -0,0 +1,84 @@
+.notifications-box {
+ // @include window;
+ // padding: 1rem;
+ font-family: 'Rubik';
+}
+
+.notification {
+ // @include rounding;
+ border-radius: 12px;
+ font-size: 12pt;
+ font-family: 'Rubik';
+ background-color: $surface0;
+ // border-bottom: 3px solid $colorbg;
+ padding: .7rem;
+ margin-top: 5px;
+ margin-bottom: 5px;
+
+ // box {
+ // margin-bottom: .5rem;
+ // }
+
+ label {
+ font-size: 1rem;
+ }
+
+ &:hover {
+ border: 3px solid $color7;
+ }
+
+ .appname {
+ font-size: 13pt;
+ color: $color0;
+ font-weight: bold;
+ }
+
+ .summary {
+ font-size: 13pt;
+ color: $colortext;
+ font-weight: bold;
+ }
+
+ .body {
+ color: $colortext;
+ }
+}
+
+// .container {
+// &:first-child {
+// border-radius: 8px 8px 0 0;
+// }
+
+// ;
+
+// &:last-child {
+// border-radius: 0 0 8px 8px;
+// }
+
+// ;
+// }
+
+.notification-header {
+ margin-bottom: 1rem;
+}
+
+.notification-label {
+ color: $colortext;
+ font-size: 1.5rem;
+}
+
+.notification-action {
+ border-radius: 50%;
+ margin-top: 33px;
+ margin-bottom: 9px;
+ padding: 0 .3rem;
+
+ label {
+ color: $colortext;
+ font-size: 1.4rem;
+ }
+
+ &:hover {
+ background: $surface0;
+ }
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_osd.scss b/early/.config/eww/css/_osd.scss
new file mode 100755
index 000000000..230464171
--- /dev/null
+++ b/early/.config/eww/css/_osd.scss
@@ -0,0 +1,44 @@
+.osd-window {
+ margin: 5px;
+ border-radius: 9999px;
+ min-width: 10px;
+ min-height: 40px;
+}
+
+.osd-var {
+ margin: 5px;
+ background-color: $surface;
+ border-radius: 9999px;
+ min-width: 100px;
+ min-height: 37px;
+ padding: 7px;
+
+ box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.5);
+}
+
+.osd-circle {
+ // margin-left: 14px;
+ background-color: #5c5b5b;
+ color: $colortext;
+}
+
+.osd-incircle {
+ font-size: 19pt;
+ padding: 6px;
+ font-family: "Material Symbols Rounded"; //AAAAAAAAAGGGHHH
+ color: $colortext;
+}
+
+.osd-incircle-bright {
+ font-size: 19pt;
+ padding: 6px;
+ font-family: "Material Symbols Rounded"; //AAAAAAAAAGGGHHH
+ color: $colortext;
+}
+
+.osd-text {
+ font-size: 15pt;
+ font-family: "Rubik"; //AAAAAAAAAGGGHHH
+ color: $colortext;
+ padding-right: 5px;
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_osettings.scss b/early/.config/eww/css/_osettings.scss
new file mode 100755
index 000000000..70f2b13b8
--- /dev/null
+++ b/early/.config/eww/css/_osettings.scss
@@ -0,0 +1,612 @@
+$bgdetail: $onSecondary;
+$bgdetail2: $onTertiary;
+
+.osettings-window {
+ min-width: 501px;
+ padding-top: 20px;
+ background-color: shade($colorbarbg, 4%);
+ color: $onBackground;
+ font-family: Rubik;
+ margin: 7px;
+ margin-left: 0px;
+ border-top-right-radius: 53px;
+
+ // background-image: linear-gradient(rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)),
+ // url('images/pictures/banner_left');
+
+ background-color: shade($onSecondary, 50%);
+
+ background-image:
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+
+ radial-gradient(circle at 50% 50%, rgba(0, 0, 0, 0) 24%, rgba(0, 0, 0, 0) 24%, $bgdetail 24%, $bgdetail 24%, $bgdetail 27%, $bgdetail 27%, rgba(0, 0, 0, 0) 27%, rgba(0, 0, 0, 0) 27%),
+ radial-gradient(circle at 50% 50%, rgba(0, 0, 0, 0) 24%, rgba(0, 0, 0, 0) 24%, $bgdetail 26%, $bgdetail 26%, $bgdetail 27%, $bgdetail 27%, rgba(0, 0, 0, 0) 27%, rgba(0, 0, 0, 0) 27%),
+ radial-gradient(circle at 50% 50%, rgba(0, 0, 0, 0) 24%, rgba(0, 0, 0, 0) 24%, $bgdetail 25%, $bgdetail 25%, $bgdetail 27%, $bgdetail 27%, rgba(0, 0, 0, 0) 27%, rgba(0, 0, 0, 0) 27%),
+
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 38%, $bgdetail 38%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 38%, $bgdetail 38%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 38%, $bgdetail 38%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 38%, $bgdetail 38%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+
+ linear-gradient(rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3)),
+ ;
+ background-size:
+ 15px 30px, 15px 30px, 15px 30px, 15px 30px,
+ 15px 30px, 15px 30px, 15px 30px, 15px 30px,
+ 15px 30px, 15px 30px, 15px 30px,
+
+ 15px 30px, 15px 30px, 15px 30px, 15px 30px,
+ 15px 30px, 15px 30px, 15px 30px, 15px 30px,
+ 15px 30px, 15px 30px, 15px 30px, 15px 30px,
+
+ 60px 60px, 120px 120px, 90px 90px,
+
+ 20px 40px, 20px 40px, 40px 80px, 40px 80px,
+ 40px 80px, 40px 80px,
+
+ 100% 100%,
+ ;
+ background-position:
+ 0px 100px, 15px 100px, 30px 100px, 45px 100px,
+ 60px 100px, 75px 100px, 90px 100px, 105px 100px,
+ 120px 100px, 135px 100px, 150px 100px,
+
+ 550px 40px, 535px 40px, 520px 40px, 505px 40px,
+ 490px 40px, 475px 40px, 460px 40px, 445px 40px,
+ 430px 40px, 415px 40px, 400px 40px, 385px 40px,
+
+ 300px 60px, 165px 135px, 180px 5px,
+
+ 360px 190px, 380px 190px, 340px 170px, 380px 170px,
+ 40px -10px, 80px -10px,
+
+ top,
+ ;
+ background-repeat: no-repeat;
+
+ box-shadow: 2px -4px 4px rgba(0, 0, 0, 0.5);
+}
+
+.onotify-window {
+ min-width: 529px;
+ background-color: shade($colorbarbg, 5%);
+ color: $onBackground;
+ font-family: Rubik;
+ margin: 7px;
+ margin-right: 0px;
+ border-top-left-radius: 53px;
+
+
+ // background-image: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),
+ // url('images/pictures/banner_right');
+
+ background-color: shade($onSecondary, 50%);
+
+ background-image:
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 35%, $bgdetail 35%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+
+ radial-gradient(circle at 50% 50%, rgba(0, 0, 0, 0) 24%, rgba(0, 0, 0, 0) 24%, $bgdetail 24%, $bgdetail 24%, $bgdetail 27%, $bgdetail 27%, rgba(0, 0, 0, 0) 27%, rgba(0, 0, 0, 0) 27%),
+ radial-gradient(circle at 50% 50%, rgba(0, 0, 0, 0) 24%, rgba(0, 0, 0, 0) 24%, $bgdetail 26%, $bgdetail 26%, $bgdetail 27%, $bgdetail 27%, rgba(0, 0, 0, 0) 27%, rgba(0, 0, 0, 0) 27%),
+ radial-gradient(circle at 50% 50%, rgba(0, 0, 0, 0) 24%, rgba(0, 0, 0, 0) 24%, $bgdetail 25%, $bgdetail 25%, $bgdetail 27%, $bgdetail 27%, rgba(0, 0, 0, 0) 27%, rgba(0, 0, 0, 0) 27%),
+
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 59%, $bgdetail 59%, $bgdetail 61%, rgba(0, 0, 0, 0) 61%),
+
+ linear-gradient(-135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 38%, $bgdetail 38%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+ linear-gradient(135deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 38%, $bgdetail 38%, $bgdetail 44%, rgba(0, 0, 0, 0) 44%),
+
+ linear-gradient(rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3)),
+ ;
+ background-size:
+ 15px 30px, 15px 30px, 15px 30px, 15px 30px,
+ 15px 30px, 15px 30px, 15px 30px, 15px 30px,
+ 15px 30px, 15px 30px, 15px 30px,
+
+ 15px 30px, 15px 30px, 15px 30px, 15px 30px,
+ 15px 30px, 15px 30px, 15px 30px, 15px 30px,
+ 15px 30px, 15px 30px, 15px 30px, 15px 30px,
+
+ 60px 60px, 120px 120px, 90px 90px,
+
+ 160px 80px,
+ 40px 80px, 40px 80px,
+
+ 100% 100%,
+ ;
+ background-position:
+ 100px 16px, 115px 16px, 130px 16px, 145px 16px,
+ 160px 16px, 175px 16px, 190px 16px, 205px 16px,
+ 220px 16px, 235px 16px, 250px 16px,
+
+ 550px 90px, 535px 90px, 520px 90px, 505px 90px,
+ 490px 90px, 475px 90px, 460px 90px, 445px 90px,
+ 430px 90px, 415px 90px, 400px 90px, 385px 90px,
+
+ 300px 60px, 165px 135px, 220px 95px,
+
+ -25px 90px,
+ 400px -10px, 440px -10px,
+
+ top,
+ ;
+ background-repeat: no-repeat;
+
+ box-shadow: -2px -4px 4px rgba(0, 0, 0, 0.5);
+}
+
+.osettings-separator {
+ background-color: shade($colorbarbg, 5%);
+ min-height: 6px;
+ margin-top: 27px;
+}
+
+.osettings-content {
+ // padding-top: 13px;
+ margin-top: 27px;
+ padding-bottom: 8px;
+ padding-top: 8px;
+ font-family: Rubik;
+ color: $onBackground;
+ background-color: shade($colorbarbg, 5%);
+ border-top-right-radius: 53px;
+}
+
+.onotify-content {
+ // padding-top: 13px;
+ margin-top: 27px;
+ padding-top: 8px;
+ padding-bottom: 16px;
+ font-family: Rubik;
+ color: $onPrimaryContainer;
+ background-color: shade($colorbarbg, 5%);
+ border-top-left-radius: 53px;
+}
+
+.osettings-heading {
+ padding-left: 28px;
+ padding-right: 28px;
+ color: $primary;
+ font-family: Rubik;
+}
+
+.osettings-title {
+ color: $onPrimaryContainer;
+ font-family: Rubik;
+ font-size: 30pt;
+ text-shadow: 2px 3px 4px rgba(0, 0, 0, 0.5);
+}
+
+.osettings-subtitle {
+ color: $onSecondaryContainer;
+ font-family: Rubik;
+ font-size: 14pt;
+ text-shadow: 2px 3px 4px rgba(0, 0, 0, 0.5);
+}
+
+.osettings-section-icon {
+ margin-top: 33px;
+ margin-bottom: 9px;
+ color: $onSecondaryContainer;
+ font-family: 'Material Symbols Rounded';
+ font-size: 20pt;
+ min-width: 50px;
+ min-height: 50px;
+ background-color: $secondaryContainer;
+ border-radius: 16px;
+}
+
+.osettings-section {
+ margin-top: 33px;
+ margin-bottom: 9px;
+ color: $onSecondaryContainer;
+ font-family: Rubik;
+ font-size: 20pt;
+}
+
+.osettings-text {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ color: $onBackground;
+ font-family: Rubik;
+ font-size: 14pt;
+}
+
+.osettings-text-icon {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ color: $onBackground;
+ font-family: 'Material Symbols Rounded';
+ font-size: 14pt;
+ min-width: 50px;
+}
+
+.osettings-search {
+ margin-left: 28px;
+ margin-right: 28px;
+ margin-top: 35px;
+ background-color: tint($colorbarbg, 4%);
+ border: 2px solid $tertiary;
+ color: $tertiary;
+ border-radius: 10px;
+ font-size: 11pt;
+ min-height: 45px;
+ caret-color: $tertiary;
+
+ selection {
+ background-color: rgba(154, 152, 152, 0.5);
+ }
+
+ box-shadow: 2px 3px 4px rgba(0, 0, 0, 0.5);
+}
+
+.osettings-search-text {
+ color: $tertiary;
+ padding: 10px;
+ font-size: 13pt;
+ min-width: 420px;
+}
+
+.osettings-search-icon {
+ color: $tertiary;
+ padding: 6px;
+ padding-left: 0px;
+ font-size: 20pt;
+}
+
+.osettings-scroll-bg {
+ padding-left: 28px;
+ padding-right: 28px;
+}
+
+.osettings-scroll-bg-colored {
+ padding-left: 28px;
+ padding-right: 28px;
+ background-color: shade($colorbarbg, 5%);
+}
+
+.osettings-btn {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ border-radius: 9999px;
+ min-height: 50px;
+ font-weight: normal;
+ font-size: 13pt;
+}
+
+.osettings-btn {
+ font-weight: bold;
+}
+
+.osettings-btn-destructive {
+ color: $onTertiary;
+ background-color: $tertiary;
+ background-image: linear-gradient(45deg, shade($color4, 5%) 58%, tint($color4, 10%) 58%);
+ background-size: 300% 300%;
+ background-position: 50% 50%;
+}
+
+.osettings-btn-neutral {
+ color: $onPrimary;
+ background-color: $primary;
+ background-image: linear-gradient(45deg, shade($color1, 5%) 58%, tint($color1, 10%) 58%);
+ background-size: 300% 300%;
+ background-position: 50% 50%;
+}
+
+.osettings-btn-informative {
+ color: $onSecondary;
+ background-color: $secondary;
+ background-image: linear-gradient(45deg, shade($color5, 5%) 58%, tint($color5, 10%) 58%);
+ background-size: 300% 300%;
+ background-position: 50% 50%;
+}
+
+.osettings-btn-neutral:hover,
+.osettings-btn-neutral:focus {
+ background-color: tint($primary, 10%);
+ // background-image: linear-gradient(135deg, $color3 75%, $color3 75%);
+ background-position: 70% 0%;
+}
+
+.osettings-btn-destructive:hover,
+.osettings-btn-destructive:focus {
+ background-color: tint($tertiary, 10%);
+ // background-image: linear-gradient(135deg, tint($color4, 10%) 75%, tint($color4, 10%) 75%);
+ background-position: 70% 0%;
+}
+
+.osettings-btn-informative:hover,
+.osettings-btn-informative:focus {
+ background-color: tint($secondary, 10%);
+ // background-image: linear-gradient(135deg, tint($color5, 10%) 75%, tint($color5, 10%) 75%);
+ background-position: 70% 0%;
+}
+
+.osettings-btn-neutral:active {
+ background-color: tint($primary, 10%);
+ // background-image: linear-gradient(135deg, $color3 75%, $color3 75%);
+ background-position: 100% 50%;
+}
+
+.osettings-btn-destructive:active {
+ background-color: tint($tertiary, 10%);
+ // background-image: linear-gradient(135deg, tint($color4, 10%) 75%, tint($color4, 10%) 75%);
+ background-position: 100% 50%;
+}
+
+.osettings-btn-informative:active {
+ background-color: tint($secondary, 10%);
+ // background-image: linear-gradient(135deg, tint($color5, 10%) 75%, tint($color5, 10%) 75%);
+ background-position: 100% 50%;
+}
+
+.rounder {
+ border-radius: 9999px;
+}
+
+.osettings-slider {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ min-height: 6px;
+ border-radius: 9999px;
+ background-image: linear-gradient(45deg, $primary 50%, tint($colorbarbg, 15%) 50%);
+ padding: 0px;
+
+ trough {
+ border-radius: 9999px;
+ background-color: tint($colorbarbg, 15%);
+ min-height: 6px;
+ margin-left: 32px;
+ margin-right: 32px;
+ // min-width: 70px;
+ }
+
+ highlight {
+ border-radius: 9999px;
+ background-color: $primary;
+ background-image: linear-gradient(45deg, $primary 0%, $primary 100%);
+ }
+
+ slider {
+ border-radius: 9999px;
+ min-height: 20px;
+ min-width: 65px;
+ background-color: $primary;
+ margin: -8px;
+ }
+
+ slider:hover {
+ background-color: $primary;
+ }
+}
+
+.osettings-checkbox {
+ border-radius: 9999px;
+ // min-height: 20px;
+ // min-height: 6px;
+ min-width: 60px;
+ background-color: transparent;
+ color: transparent;
+ border: 3px solid $primary;
+
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.osettings-checkbox-1 {
+ border-radius: 9999px;
+ // min-height: 20px;
+ // min-height: 6px;
+ min-width: 60px;
+ background-color: $primary;
+ color: transparent;
+ border: 3px solid $primary;
+
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.osettings-checkbox-0 {
+ border-radius: 9999px;
+ // min-height: 20px;
+ // min-height: 6px;
+ min-width: 60px;
+ background-color: transparent;
+ color: transparent;
+ border: 3px solid $primary;
+
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.osettings-checkbox:checked {
+ border-radius: 9999px;
+ background-color: $primary;
+ color: $primary;
+}
+
+.osettings-waifu {
+ margin-top: 30px;
+ min-width: 350px;
+ min-height: 350px;
+ border-radius: 20px;
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-position: center center;
+}
+
+.onotify-app-icon {
+ margin: 9px 5px;
+
+ color: $onSecondaryContainer;
+ font-family: 'Material Symbols Rounded';
+ font-size: 20pt;
+ min-width: 40px;
+ min-height: 40px;
+ background-color: $secondaryContainer;
+ border-radius: 14px;
+
+ box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.5);
+}
+
+.onotify-app-name {
+ margin-top: 5px;
+ margin-bottom: 5px;
+ color: $onSecondaryContainer;
+ font-family: Rubik;
+ font-size: 15pt;
+}
+
+.onotify-app-text {
+ color: $onSecondaryContainer;
+ font-family: Rubik;
+ font-size: 13pt;
+}
+
+.onotify-app-ser {
+ color: $onSecondaryContainer;
+ font-family: Rubik;
+ font-size: 13pt;
+}
+
+.onotify-app-vol-circle {
+ background-color: #5c5b5b;
+ color: $primary;
+}
+
+.onotify-app-volbox {
+ margin: 9px 5px;
+ padding: 5px;
+
+ color: $onSecondaryContainer;
+ font-family: 'Material Symbols Rounded';
+ font-size: 20pt;
+ min-width: 40px;
+ min-height: 40px;
+ background-color: $secondaryContainer;
+ border-radius: 14px;
+
+ box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.5);
+}
+
+.osettings-tag {
+ color: $onTertiary;
+ background-color: $tertiary;
+ font-size: 13pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ padding: 3px 8px;
+ border-radius: 9999px;
+ min-width: 50px;
+ margin-top: 25px;
+}
+
+.osettings-tag:hover {
+ background-color: tint($tertiary, 20%);
+}
+
+.osettings-tag:active {
+ background-color: tint($tertiary, 40%);
+}
+
+.osettings-tag-nerd {
+ color: $onTertiary;
+ background-color: $tertiary;
+ font-size: 13pt;
+ font-family: 'JetBrainsMono Nerd Font';
+ font-weight: 500;
+ padding: 3px 8px;
+ border-radius: 9999px;
+ min-width: 50px;
+ margin-top: 25px;
+}
+
+.osettings-tag-nerd:hover {
+ background-color: tint($tertiary, 20%);
+}
+
+.osettings-tag-nerd:active {
+ background-color: tint($tertiary, 40%);
+}
+
+.osettings-tag-material {
+ color: $onTertiary;
+ background-color: $tertiary;
+ font-size: 13pt;
+ font-family: 'Material Symbols Rounded';
+ font-weight: 500;
+ padding: 3px 8px;
+ border-radius: 9999px;
+ // min-width: 25px;
+ margin-top: 25px;
+}
+
+.osettings-tag-material:hover {
+ background-color: tint($tertiary, 20%);
+}
+
+.osettings-tag-material:active {
+ background-color: tint($tertiary, 40%);
+}
+
+.notif-indicator {
+ font-family: 'Rubik';
+ font-size: 10pt;
+}
+
+.notif-badge {
+ border-radius: 99px;
+ min-width: 20px;
+ min-height: 20px;
+ background-color: $color1;
+ color: #000000;
+ margin-bottom: 8px;
+ margin-right: 5px;
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_overview.scss b/early/.config/eww/css/_overview.scss
new file mode 100755
index 000000000..6dfd58adf
--- /dev/null
+++ b/early/.config/eww/css/_overview.scss
@@ -0,0 +1,195 @@
+.overview-window {
+ @include window;
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ border-radius: 22px;
+ background-color: shade($colorbarbg, 4%);
+ // background-color: transparent;
+ // border: 3px solid $color0;
+ //padding: 5px;
+}
+
+.overview-window-title {
+ font-size: 15pt;
+ color: $onPrimaryContainer;
+ border-radius: 15px;
+ background-color: tint($surface, 5%);
+ margin: 4px;
+ padding: 4px;
+ min-height: 30px;
+ background-image: linear-gradient(135deg, $onSecondary 15%, rgba(0, 0, 0, 0) 15%, rgba(0, 0, 0, 0) 33%, $onSecondary 33%, $onSecondary 68%, rgba(0, 0, 0, 0) 68%, rgba(0, 0, 0, 0) 95%, $onSecondary 95%);
+}
+
+.overview-window-top {
+ @include rounding;
+ background-color: transparent;
+ border: 3px solid transparent;
+ //padding: 5px;
+}
+
+.overview-ws {
+ border: 2px solid;
+ border-radius: 15px;
+ background-color: tint($surface, 2%);
+ margin: 4px;
+}
+
+.overview-ws-true {
+ color: $primary;
+}
+
+.overview-ws-false {
+ color: transparent;
+}
+
+.overview-ws-window {
+ border-radius: 15px;
+ background-color: shade($surface0, 2%);
+ border: 1px solid $surface0;
+ border-top: 1px solid tint($surface0, 5%);
+}
+
+.overview-ws-window-content {
+ border-radius: 11px;
+ // background-color: rgba(135, 147, 163, 0.7);
+}
+
+.overview-topbar-icon {
+ min-width: 30px;
+ min-height: 30px;
+ margin: 5px;
+ background-size: contain;
+}
+
+.overview-topbar-button {
+ min-width: 30px;
+ min-height: 30px;
+ margin: 5px;
+ border-radius: 8px;
+}
+
+.overview-topbar-button:hover {
+ background-color: $overlay0;
+}
+
+.overview-icon {
+ background-repeat: no-repeat;
+ background-position: center;
+}
+
+.overview-background {
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 100%;
+ border-radius: 15px;
+}
+
+.overview-ws-text {
+ //padding-left: 5px;
+ font-size: 13pt;
+}
+
+.overview-ws-subtext {
+ //padding-left: 5px;
+ font-size: 9pt;
+}
+
+.overview-ws-number {
+ //Note: height 100px width 356px
+ font-size: 25pt;
+ border-radius: 11px;
+ background-color: $overlay0;
+ color: $onBackground;
+ //margin: 10px;
+ min-height: 40px;
+ min-width: 40px;
+}
+
+.overview-title {
+ font-weight: bold;
+ font-size: 15pt;
+ //padding-top: .6rem;
+ //padding-bottom: .6rem;
+}
+
+.overview-search-box {
+ border: 2px solid;
+ border-radius: 9999px;
+ background-color: tint($colorbarbg, 4%);
+ color: $onBackground;
+ font-size: 15pt;
+ min-height: 45px;
+ min-width: 130px;
+
+ margin: 20px 20px;
+ padding: 2px 17px;
+
+ caret-color: $onBackground;
+
+ selection {
+ background-color: rgba(154, 152, 152, 0.5);
+ }
+}
+
+.overview-search-box:focus {
+ color: $tertiary;
+}
+
+.overview-results {
+ // background-color: $surface;
+ padding: 10px 5px;
+ border-radius: 20px;
+}
+
+.overview-search-result {
+ border-radius: 9999px;
+ background-color: $onTertiary;
+ color: $onBackground;
+ font-size: 15pt;
+ min-height: 47px;
+ min-width: 400px;
+ padding: 2px 12px;
+ padding-left: 57px;
+ margin: 0px 5px;
+
+ background-image: linear-gradient(135deg, rgba(0, 0, 0, 0) 60%, tint($tertiaryContainer, 10%) 60%);
+ background-size: 400% auto;
+ background-position: 40% 50%;
+
+ caret-color: transparent;
+
+ selection {
+ background-color: transparent;
+ }
+}
+
+.overview-search-result-icon {
+ background-color: $tertiaryContainer;
+ border-radius: 9999px;
+ min-height: 51px;
+ min-width: 51px;
+ // padding: 2px 12px;
+}
+
+.overview-search-result:focus {
+ color: $onTertiaryContainer;
+ // background-color: $tertiaryContainer;
+ background-position: 65% 50%;
+}
+
+.overview-search-result:active {
+ color: $onTertiaryContainer;
+ // background-color: $tertiaryContainer;
+ background-position: 100% 50%;
+}
+
+.overview-search-typetosearch-pad {
+ min-width: 160px;
+ margin: 20px 20px;
+ padding: 2px 12px;
+}
+
+.overview-search-typetosearch-text {
+ margin: 13px 13px;
+ font-size: 15pt;
+ color: #CCCCCC;
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_sidebar.scss b/early/.config/eww/css/_sidebar.scss
new file mode 100755
index 000000000..6ff26692c
--- /dev/null
+++ b/early/.config/eww/css/_sidebar.scss
@@ -0,0 +1,171 @@
+.system-menu-box {
+ @include window;
+ background-color: $colorbarbg;
+ border: 3px solid $border;
+ // color: $colortext;
+}
+
+.separator {
+ font-size: 1rem;
+}
+
+.top-row {
+ margin: 1rem 1.5rem 0;
+
+ .time {
+ font-size: 2rem;
+ }
+
+ .date-box {
+ margin: 0 1rem;
+
+ label {
+ font-size: 1.1rem;
+ }
+
+ .date {
+ background: unset;
+ margin: 0 .5rem 0 0;
+ padding: 0;
+ }
+ }
+}
+
+.system-row {
+ font-family: Rubik;
+ // margin: .5rem .7rem;
+ margin-top: 27px;
+
+ .airplane-box button {
+ padding: 1rem 3rem;
+ }
+
+ .power-box button {
+ padding-left: 30px;
+ padding-right: 30px;
+ }
+
+ label {
+ font-size: 1rem;
+ }
+}
+
+.element {
+ font-family: 'Rubik';
+ border-top-left-radius: 31px;
+ border-top-right-radius: 31px;
+ border-bottom-left-radius: 31px;
+ border-bottom-right-radius: 10px;
+ background-color: $secondaryContainer;
+ color: $onSecondaryContainer;
+ margin: .3rem;
+ box-shadow: 2px 3px 4px rgba(0, 0, 0, 0.5);
+
+ button {
+ border-top-left-radius: 31px;
+ border-top-right-radius: 31px;
+ border-bottom-left-radius: 31px;
+ border-bottom-right-radius: 10px;
+ padding: 1rem;
+
+ label {
+ font-size: 1.5rem;
+ }
+
+ &:hover {
+ background: $overlay0;
+ }
+ }
+}
+
+.sliders {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ @include rounding;
+ background-color: $surface0;
+ margin: .5rem 1rem;
+ padding: .6rem 1rem;
+
+ scale {
+ margin-right: -1rem;
+ min-width: 25.8rem;
+ }
+
+ scale trough {
+ background-color: $bg1;
+ border-radius: 24px;
+ margin: 0 1rem;
+ min-height: 10px;
+ min-width: 70px;
+ }
+
+ box {
+ margin: .2rem 0;
+ }
+
+ label {
+ font-size: 1.2rem;
+ }
+}
+
+.sliderbg {
+ background-color: transparent;
+ padding: 0px;
+}
+
+.volume-bar highlight {
+ font-family: SF Mono Nerd Font;
+ @include rounding;
+ background: $color6;
+ // background-image: linear-gradient(to right, $tokyocyan 30%, $tokyopurple 100%);
+}
+
+.volume-slider-box scale highlight {
+ @include rounding;
+ background: $color6;
+ // background-image: linear-gradient(to right, $tokyocyan 30%, $tokyopurple 100%);
+ // border: 2px solid;
+ min-height: 0.9rem;
+}
+
+// .volume-slider-box scale {
+// @include rounding;
+// background-color: #1A1B26;
+// border: 2px solid;
+// }
+
+.bottom-row {
+ margin: .5rem 1rem;
+
+ .battery-icon {
+ font-size: 2rem;
+ }
+
+ .battery-wattage {
+ color: $color7;
+ }
+
+ .battery-status {
+ color: $colortext;
+ margin: 0 .5rem;
+ }
+
+ button {
+ background-color: $surface0;
+ border-radius: 50%;
+ margin-bottom: .1rem;
+ padding: 0 .5rem;
+
+ label {
+ font-size: 1.5rem;
+ }
+
+ &:hover {
+ background: $overlay0;
+ }
+ }
+}
+
+.power-button {
+ min-height: 2.5rem;
+ // min-width: 2.5rem;
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_supercontext.scss b/early/.config/eww/css/_supercontext.scss
new file mode 100755
index 000000000..b65e07e3d
--- /dev/null
+++ b/early/.config/eww/css/_supercontext.scss
@@ -0,0 +1,55 @@
+.supercontext-window {
+ transition: 0ms;
+}
+
+.supercontext-button {
+ transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ border-radius: 99px;
+ background-color: $primary;
+ color: $onPrimary;
+ font-family: 'Material Symbols Rounded';
+ font-size: 21pt;
+ background-image: radial-gradient(circle at 50% 100%, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 0%, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 0%);
+}
+
+.supercontext-button-number {
+ transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ border-radius: 99px;
+ background-color: $primary;
+ color: $onPrimary;
+ font-family: 'Lexend';
+ font-size: 21pt;
+ background-image: radial-gradient(circle at 50% 100%, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 0%, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 0%);
+}
+
+.supercontext-button-number-child {
+ :first-child {
+ transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ border-radius: 99px;
+ background-color: $primary;
+ color: $onPrimary;
+ font-family: 'Lexend';
+ font-size: 21pt;
+ background-image: radial-gradient(circle at 50% 100%, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 0%, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 0%);
+ }
+}
+
+.supercontext-button-number-child:hover {
+ :first-child {
+ background-image: radial-gradient(circle at 50% 100%, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 15%, tint($primary, 26%) 15%, rgba(0, 0, 0, 0) 15%, rgba(0, 0, 0, 0) 15%);
+ }
+}
+
+.supercontext-button-number-child:active {
+ :first-child {
+ background-image: radial-gradient(circle at 50% 100%, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 100%, tint($primary, 26%) 100%, rgba(0, 0, 0, 0) 100%, rgba(0, 0, 0, 0) 100%);
+ }
+}
+
+.supercontext-button:hover {
+ background-image: radial-gradient(circle at 50% 100%, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 15%, tint($primary, 26%) 15%, rgba(0, 0, 0, 0) 15%, rgba(0, 0, 0, 0) 15%);
+}
+
+.supercontext-button:active {
+ background-image: radial-gradient(circle at 50% 100%, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 0%, tint($primary, 26%) 100%, tint($primary, 26%) 100%, rgba(0, 0, 0, 0) 100%, rgba(0, 0, 0, 0) 100%);
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_system.scss b/early/.config/eww/css/_system.scss
new file mode 100755
index 000000000..0bba21fed
--- /dev/null
+++ b/early/.config/eww/css/_system.scss
@@ -0,0 +1,194 @@
+.membar {
+ color: $color5;
+}
+
+.cpubar {
+ color: $color4;
+}
+
+.batbar {
+ color: $color6;
+ padding-right: 4px;
+}
+
+.cpubar-circle {
+ background-color: #5c5b5b;
+}
+.membar-circle {
+ background-color: #5c5b5b;
+}
+.batbar-circle {
+ background-color: #5c5b5b;
+}
+
+// .batbar-circle {
+// color: $battcolor;
+// padding-right: 4px;
+// }
+
+// .membar,
+// .cpubar,
+// .batbar {
+// // background-color: transparent;
+// padding: 0px;
+// }
+
+.membar:hover,
+.cpubar:hover,
+.batbar:hover {
+ // border-top: 2px solid;
+}
+
+.batt-percentage {
+ color: $color6;
+ padding-right: 5px;
+ padding-left: 4px;
+}
+
+.batt-low {
+ background-color: #B5E8E0;
+ color: #161320;
+ animation-name: blink;
+ animation-duration: 0.5s;
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+}
+
+.sys-menu-charge {
+ padding-left: 2px;
+ color: $colorbar;
+}
+
+.iconmem {
+ color: $color5;
+}
+
+.iconcpu {
+ color: $color4;
+}
+
+.icon-text {
+ font-size: 3rem;
+ padding: .7rem;
+}
+
+.sys-text-sub {
+ color: $onBackground;
+}
+
+.sys-text-mem,
+.sys-text-cpu {
+ font-size: 1rem;
+ font-weight: bold;
+}
+
+.sys-icon-mem,
+.sys-icon-cpu {
+ font-size: 1.5rem;
+ margin: 1.5rem;
+}
+
+.system-info-box {
+ @include rounding;
+ background-color: $surface0;
+ margin: .5rem 1rem;
+ // padding: .5rem;
+}
+
+.sys-mem,
+.sys-cpu {
+ background-color: $colorbg;
+}
+
+.sys-icon-mem,
+.sys-text-mem,
+.sys-mem {
+ color: $memcolor;
+}
+
+.sys-icon-cpu,
+.sys-text-cpu,
+.sys-cpu {
+ color: $cpucolor;
+}
+
+.sys-box {
+ margin: .3em;
+ // background-color: tint($colorbarbg, 7%);
+ // border-radius: 20px;
+ // padding: 35px;
+
+ box {
+ margin-left: 1rem;
+ }
+}
+
+.cpu-menu {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ color: $color4;
+ padding-left: 5px;
+}
+
+.mem-menu {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ color: $color5;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+.mem-menu-left {
+ color: $color5;
+ padding-left: 5px;
+ padding-right: 0px;
+}
+
+.mem-menu-mid {
+ color: $color5;
+ padding-left: 0px;
+ padding-right: 0px;
+}
+
+.mem-menu-right {
+ color: $color5;
+ padding-left: 0px;
+ padding-right: 5px;
+}
+
+.sys-menu {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ color: $battcolor;
+ margin: 0px;
+ padding: 0px;
+}
+
+.sys-menu-button {
+ color: $colorbar;
+ margin: 0px;
+ padding-left: 16px;
+ padding-right: 16px;
+ background-image: url("images/LinageSettings.png");
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center;
+}
+
+// .volume-bar, .brightness-slider, .slider {
+// background-color: #16161E;
+// border: 2px solid #7C9FF5;
+// border-radius: 99px;
+// }
+
+.sys-toggle {
+ font-size: 3pt;
+}
+
+.inside-circle {
+ min-height: 27px;
+ min-width: 27px;
+}
+
+.sys-circle-inner {
+ font-size: 15pt;
+ padding: 5px;
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_taskbar.scss b/early/.config/eww/css/_taskbar.scss
new file mode 100755
index 000000000..6387da2fa
--- /dev/null
+++ b/early/.config/eww/css/_taskbar.scss
@@ -0,0 +1,87 @@
+.taskbaricon {
+ background-size: 60%;
+ background-position: center;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.taskbaricon-false {
+ background-size: 70%;
+ background-position: center;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.taskbaricon-true {
+ background-size: 70%;
+ background-position: center;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.taskbar-indicator-true {
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ margin-bottom: 4px;
+ margin-top: 43px;
+ margin-left: 16px;
+ margin-right: 16px;
+ background-color: $primary;
+}
+
+.taskbar-indicator-false {
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ margin-bottom: 4px;
+ margin-top: 43px;
+ margin-left: 22px;
+ margin-right: 22px;
+ background-color: #9C98A3;
+}
+
+.taskbar-button-only {
+ :first-child {
+ :first-child {
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ }
+ }
+}
+
+.taskbar-button-only:hover {
+ :first-child {
+ :first-child {
+ background-color: shade($overlay0, 2%);
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ }
+ }
+}
+
+.taskbar-button-only:active {
+ :first-child {
+ :first-child {
+ background-color: tint($overlay0, 8%);
+ border: 1px solid tint($overlayedge, 10%);
+ border-top: 1px solid tint($overlayedge, 15%);
+ }
+ }
+}
+
+.taskbar-button-pad {
+ padding: 3px;
+ // min-width: 42px;
+ min-height: 42px;
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_themer.scss b/early/.config/eww/css/_themer.scss
new file mode 100755
index 000000000..b2aafc963
--- /dev/null
+++ b/early/.config/eww/css/_themer.scss
@@ -0,0 +1,205 @@
+.themer-button {
+ min-height: 53px;
+ min-width: 53px;
+ color: $colortext;
+ font-family: Material Symbols Rounded;
+ // background-image: url('images/svg/beatmappacks.svg');
+ // background-size: auto 65%;
+ // background-position: center;
+}
+
+
+.themer-button-false {
+ min-height: 53px;
+ min-width: 53px;
+ color: $colortext;
+ font-family: Material Symbols Rounded;
+ // background-image: url('images/svg/beatmappacks.svg');
+ // background-image: linear-gradient(45deg, rgba(0, 0, 0, 0) 60%, tint($overlay0, 10%) 60%);
+ // background-size: 400% auto;
+ // background-position: 90% 50%;
+}
+
+.themer-button-true {
+ min-height: 53px;
+ min-width: 53px;
+ color: $colortext;
+ font-family: Material Symbols Rounded;
+ background-color: $overlay0;
+ // background-image: linear-gradient(45deg, rgba(0, 0, 0, 0) 60%, tint($overlay0, 10%) 60%);
+ // background-size: 400% auto;
+ // background-position: 90% 50%;
+}
+
+.themer-action-button {
+ @include rounding;
+ min-height: 53px;
+ min-width: 53px;
+ color: $colortext;
+ font-family: Material Symbols Rounded;
+}
+
+.themer-action-button:hover {
+ background-color: $overlay0;
+}
+
+.themer-action-button:active {
+ background-color: $overlay0;
+}
+
+.themer-action-button:focus {
+ border: 2px solid $overlay0;
+}
+
+.themer-menu-box {
+ @include window;
+ @include rounding;
+ border-radius: 15px;
+ background-color: shade($colorbarbg, 4%);
+ margin: 14px;
+ transition: 250ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ // box-shadow: 2px 2px 6px #16161E;
+}
+
+.themer-title {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ font-size: 15pt;
+ padding: .6rem;
+ color: $colortext;
+ font-size: 14pt;
+}
+
+.themer-prompt {
+ color: $colortext;
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ font-size: 12pt;
+ padding: .6rem;
+}
+
+.themer-input {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ // background-color: $surface0;
+ background-color: tint($colorbarbg, 4%);
+ color: $colortext;
+ border-radius: 10px;
+ padding: 7px;
+ margin-top: 2px;
+ margin-bottom: 2px;
+ border: 2px solid $overlay0;
+ caret-color: $colortext;
+
+ selection {
+ background-color: rgba(154, 152, 152, 0.5);
+ }
+}
+
+.themer-input:focus {
+ border: 2px solid $colortext;
+}
+
+.themer-color-preview-section {
+ @include rounding;
+}
+
+.themer-color-preview {
+ min-height: 25px;
+ min-width: 25px;
+ border-radius: 5px;
+ border-width: 55px;
+}
+
+.preview-0 {
+ background-color: $color0;
+}
+
+.preview-1 {
+ background-color: $color1;
+}
+
+.preview-2 {
+ background-color: $color2;
+}
+
+.preview-3 {
+ background-color: $color3;
+}
+
+.preview-4 {
+ background-color: $color4;
+}
+
+.preview-5 {
+ background-color: $color5;
+}
+
+.preview-6 {
+ background-color: $color6;
+}
+
+.preview-7 {
+ background-color: $color7;
+}
+
+.preview-primary {
+ background-color: $primary;
+}
+
+.preview-onPrimary {
+ background-color: $onPrimary;
+}
+
+.preview-primaryContainer {
+ background-color: $primaryContainer;
+}
+
+.preview-onPrimaryContainer {
+ background-color: $onPrimaryContainer;
+}
+
+.preview-secondary {
+ background-color: $secondary;
+}
+
+.preview-onSecondary {
+ background-color: $onSecondary;
+}
+
+.preview-secondaryContainer {
+ background-color: $secondaryContainer;
+}
+
+.preview-onSecondaryContainer {
+ background-color: $onSecondaryContainer;
+}
+
+.preview-tertiary {
+ background-color: $tertiary;
+}
+
+.preview-onTertiary {
+ background-color: $onTertiary;
+}
+
+.preview-tertiaryContainer {
+ background-color: $tertiaryContainer;
+}
+
+.preview-onTertiaryContainer {
+ background-color: $onTertiaryContainer;
+}
+
+.preview-background {
+ background-color: $colorbarbg;
+}
+
+.preview-onBackground {
+ background-color: $onBackground;
+}
+
+.preview-surface {
+ background-color: $surface;
+}
+
+.preview-onSurface {
+ background-color: $onSurface;
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_volume.scss b/early/.config/eww/css/_volume.scss
new file mode 100755
index 000000000..fd7acf507
--- /dev/null
+++ b/early/.config/eww/css/_volume.scss
@@ -0,0 +1,29 @@
+.vol-icon {
+ color: $color6;
+ padding-right: 2px;
+}
+
+// .vol-icon {
+// color: $tokyocyan;
+// padding-right: 2px;
+// }
+
+.volbar highlight {
+ background-image: linear-gradient(to right, $teal 30%, $sky 100%);
+ border-radius: 10px;
+}
+
+
+.vol-menu {
+ font-size: 1pt;
+ color: $color6;
+ padding-right: 2px;
+ padding-top: 4px;
+}
+
+.vol-menu:hover {
+ border-top: 2px solid;
+}
+.vol-icon:hover {
+ border-top: 2px solid;
+}
\ No newline at end of file
diff --git a/early/.config/eww/css/_winstuff.scss b/early/.config/eww/css/_winstuff.scss
new file mode 100755
index 000000000..a144247d4
--- /dev/null
+++ b/early/.config/eww/css/_winstuff.scss
@@ -0,0 +1,2014 @@
+.winwin {
+ background: rgba(40, 40, 40, 0.71);
+ border-radius: 12px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-top: 1px solid rgba(64, 64, 64, 0.5);
+ margin: 12px;
+}
+
+.winwin-center {
+ background: rgba(40, 40, 40, 0.71);
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-bottom: 0px solid transparent;
+ border-top: 1px solid rgba(30, 30, 30, 0.5);
+ margin: 0px 12px;
+}
+
+.winwin-center-noseparator {
+ background: rgba(40, 40, 40, 0.71);
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-bottom: 0px solid transparent;
+ border-top: 0px solid transparent;
+ margin: 0px 12px;
+}
+
+.winwin-topbar {
+ background: rgba(28, 28, 28, 0.71);
+ border-top-left-radius: 12px;
+ border-top-right-radius: 12px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-bottom: 0px solid transparent;
+ margin: 12px;
+ margin-bottom: 0px;
+}
+
+.winwin-top {
+ transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ background: rgba(40, 40, 40, 0.71);
+ border-top-left-radius: 12px;
+ border-top-right-radius: 12px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-top: 1px solid rgba(64, 64, 64, 0.5);
+ border-bottom: 0px solid transparent;
+ margin: 12px;
+ margin-bottom: 0px;
+}
+
+.winwin-bottom {
+ background: rgba(28, 28, 28, 0.7);
+ border-bottom-left-radius: 12px;
+ border-bottom-right-radius: 12px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-top: 1px solid rgba(30, 30, 30, 0.5);
+ margin: 12px;
+ margin-top: 0px;
+}
+
+.winwin-bottom-light {
+ transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ background: rgba(40, 40, 40, 0.71);
+ border-bottom-left-radius: 12px;
+ border-bottom-right-radius: 12px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-top: 0px solid transparent;
+ margin: 12px;
+ margin-top: 0px;
+}
+
+.winwin-bottom-pad {
+ padding: 6px 12px;
+}
+
+.winstart-bottom-pad {
+ padding: 0px 43px;
+}
+
+.winbar-bg {
+ background: rgba(25, 25, 25, 0.7);
+ background-image: url('images/textures/acrylic.png');
+ background-blend-mode: luminosity;
+
+ min-height: 50px;
+ border-top: 1px solid rgba(64, 64, 64, 0.8);
+ animation-name: flyin-bottom;
+ animation-duration: 350ms;
+ animation-timing-function: cubic-bezier(0.05, 0.7, 0.1, 1);
+ animation-iteration-count: 1;
+}
+
+.winbutton-pad {
+ padding: 3px;
+ // min-width: 42px;
+ min-height: 42px;
+}
+
+.winbutton-only {
+ :first-child {
+ :first-child {
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ }
+ }
+}
+
+.winbutton-only:hover {
+ :first-child {
+ :first-child {
+ background-color: shade($overlay0, 2%);
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ }
+ }
+}
+
+.winbutton-only:active {
+ :first-child {
+ :first-child {
+ background-color: tint($overlay0, 8%);
+ border: 1px solid tint($overlayedge, 10%);
+ border-top: 1px solid tint($overlayedge, 15%);
+ }
+ }
+}
+
+.winnotif-text {
+ background-color: transparent;
+ font-size: 12pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ margin: 1px;
+}
+
+.winnotif-bodytext {
+ color: #CDCDCD;
+}
+
+.winbartext {
+ background-color: transparent;
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+}
+
+.wintoggle-text {
+ background-color: transparent;
+ font-size: 10pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+}
+
+.winstarticon-true {
+ background-size: 60%;
+ background-position: center;
+ background-image: url('images/icons/win.png');
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.winstarticon-false {
+ background-size: 60%;
+ background-position: center;
+ background-image: url('images/icons/win-inactive.png');
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.winbaricon {
+ background-size: 60%;
+ background-position: center;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.thewinbutton:active {
+ :first-child {
+ :first-child {
+ background-size: 50%;
+ background-image: url('images/icons/win-clicked.png');
+ }
+ }
+}
+
+.wintaskbaricon {
+ background-size: 60%;
+ background-position: center;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.wintaskbaricon-false {
+ background-size: 70%;
+ background-position: center;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.wintaskbaricon-true {
+ background-size: 70%;
+ background-position: center;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.wintaskbar-indicator-true {
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ margin-bottom: 4px;
+ margin-top: 43px;
+ margin-left: 16px;
+ margin-right: 16px;
+ background-color: $primary;
+}
+
+.wintaskbar-indicator-false {
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ margin-bottom: 4px;
+ margin-top: 43px;
+ margin-left: 22px;
+ margin-right: 22px;
+ background-color: #9C98A3;
+}
+
+.winbutton-only:active {
+ :first-child {
+ :first-child {
+ background-size: 50%;
+ }
+ }
+}
+
+.wintimedate {
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ padding: 0 10px;
+}
+
+.winbutton-true {
+ background-color: shade($overlay0, 2%);
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+}
+
+.winicon {
+ background-position: center;
+ min-height: 42px;
+ min-width: 30px;
+}
+
+.winwifi {
+ background-image: url('images/svg/dark/wifi.svg');
+}
+
+.winwifi1 {
+ background-image: url('images/svg/dark/wifi1.svg');
+}
+
+.winwifi2 {
+ background-image: url('images/svg/dark/wifi2.svg');
+}
+
+.winwifi3 {
+ background-image: url('images/svg/dark/wifi3.svg');
+}
+
+.winwifi4 {
+ background-image: url('images/svg/dark/wifi4.svg');
+}
+
+.winwifi-activated {
+ background-image: url('images/svg/light/wifi.svg');
+}
+
+.winwifi1-activated {
+ background-image: url('images/svg/light/wifi1.svg');
+}
+
+.winwifi2-activated {
+ background-image: url('images/svg/light/wifi2.svg');
+}
+
+.winwifi3-activated {
+ background-image: url('images/svg/light/wifi3.svg');
+}
+
+.winwifi4-activated {
+ background-image: url('images/svg/light/wifi4.svg');
+}
+
+.winbat0 {
+ background-image: url('images/svg/dark/bat0.svg');
+}
+
+.winbat1 {
+ background-image: url('images/svg/dark/bat1.svg');
+}
+
+.winbat2 {
+ background-image: url('images/svg/dark/bat2.svg');
+}
+
+.winbat3 {
+ background-image: url('images/svg/dark/bat3.svg');
+}
+
+.winbat4 {
+ background-image: url('images/svg/dark/bat4.svg');
+}
+
+.winbat5 {
+ background-image: url('images/svg/dark/bat5.svg');
+}
+
+.winbat6 {
+ background-image: url('images/svg/dark/bat6.svg');
+}
+
+.winbat7 {
+ background-image: url('images/svg/dark/bat7.svg');
+}
+
+.winbat8 {
+ background-image: url('images/svg/dark/bat8.svg');
+}
+
+.winbat9 {
+ background-image: url('images/svg/dark/bat9.svg');
+}
+
+.winbat10 {
+ background-image: url('images/svg/dark/bat10.svg');
+}
+
+.winbatcharge {
+ background-image: url('images/svg/dark/batcharge.svg');
+}
+
+.winvol0 {
+ background-image: url('images/svg/dark/vol0.svg');
+}
+
+.winvol1 {
+ background-image: url('images/svg/dark/vol1.svg');
+}
+
+.winvol2 {
+ background-image: url('images/svg/dark/vol2.svg');
+}
+
+.winvol3 {
+ background-image: url('images/svg/dark/vol3.svg');
+}
+
+.winvolmute {
+ background-image: url('images/svg/dark/volmute.svg');
+}
+
+.winbrightness {
+ background-image: url('images/svg/dark/brightness.svg');
+}
+
+.winbluetooth {
+ background-image: url('images/svg/dark/bluetooth.svg');
+}
+
+.winbluetooth-false {
+ background-image: url('images/svg/dark/bluetoothfalse.svg');
+}
+
+.winbluetooth-true {
+ background-image: url('images/svg/light/bluetoothtrue.svg');
+}
+
+.winbluetooth {
+ background-image: url('images/svg/light/bluetooth.svg');
+}
+
+.winbluetooth-false {
+ background-image: url('images/svg/dark/bluetoothfalse.svg');
+}
+
+.winbluetooth-true {
+ background-image: url('images/svg/dark/bluetoothtrue.svg');
+}
+
+.winactions-airplane {
+ background-image: url('images/svg/dark/airplane.svg');
+}
+
+.winactions-nightlight-activated {
+ background-image: url('images/svg/light/night.svg');
+}
+
+.winactions-nightlight {
+ background-image: url('images/svg/dark/brightness.svg');
+}
+
+.wincog {
+ background-image: url('images/svg/dark/cog.svg');
+}
+
+.winbell {
+ background-image: url('images/svg/dark/notif.svg');
+}
+
+.winreset {
+ background-image: url('images/svg/dark/reset.svg');
+}
+
+.winnotifsnooze {
+ background-image: url('images/svg/dark/notifsnooze.svg');
+}
+
+.winapp {
+ background-image: url('images/svg/dark/app.svg');
+}
+
+.wincaretup {
+ background-image: url('images/svg/dark/caretup.svg');
+}
+
+.wincaretdown {
+ background-image: url('images/svg/dark/caretdown.svg');
+}
+
+.winsearch-icon {
+ background-image: url('images/svg/dark/search-fluent.svg');
+}
+
+.winstart-search-searchbox-icon {
+ background-size: 100%;
+ background-position: center;
+ min-height: 21px;
+ min-width: 21px;
+ margin-left: 4px;
+ margin-right: 10px;
+}
+
+.winactions-togglerow {
+ margin: 12px;
+ margin-bottom: 0px;
+}
+
+.winactions-sliderrow {
+ margin: 0 12px;
+}
+
+.winactions-media-pad {
+ padding: 25px;
+}
+
+.winactions-toggle {
+ background-color: shade($overlay0, 2%);
+ border-radius: 6px;
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ margin: 12px;
+ min-height: 50px;
+ min-width: 98px;
+}
+
+.winactions-toggle-true {
+ background-color: $primary;
+}
+
+.winactions-toggle-icon {
+ min-width: 21px;
+ min-height: 21px;
+ background-position: center;
+ background-repeat: no-repeat;
+ // background-size: auto 45%;
+}
+
+.winactions-toggle-icon:hover {
+ background-color: $hover0;
+}
+
+.winactions-toggle-icon:active {
+ background-color: tint($hover0, 10%);
+}
+
+.winactions-toggle-icon-center {
+ border-radius: 6px;
+}
+
+.winactions-toggle-icon-left {
+ min-width: 21px;
+ min-height: 21px;
+ background-position: center;
+ background-repeat: no-repeat;
+ // background-size: auto 45%;
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+ border-right: 1px solid tint($overlayedge, 5%);
+}
+
+.winactions-toggle-icon-right {
+ min-width: 21px;
+ min-height: 21px;
+ background-position: center;
+ background-repeat: no-repeat;
+ // background-size: auto 45%;
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+ border-right: 1px solid tint($overlayedge, 5%);
+}
+
+.winactions-toggle-icon-left:hover {
+ background-color: $hover0;
+}
+
+.winactions-toggle-icon-right:hover {
+ background-color: $hover0;
+}
+
+.winactions-toggle-icon-left:active {
+ background-color: tint($hover0, 10%);
+}
+
+.winactions-toggle-icon-right:active {
+ background-color: tint($hover0, 10%)
+}
+
+.winactions-toggle-arrow {
+ background-image: url('images/svg/dark/rightarrow.svg');
+ background-position: center;
+ background-repeat: no-repeat;
+ // background-size: 40%;
+}
+
+.winactions-toggle-arrow-activated {
+ background-image: url('images/svg/light/rightarrow.svg');
+ background-position: center;
+ background-repeat: no-repeat;
+ // background-size: 40%;
+}
+
+.winactions-element {
+ margin: 12px;
+}
+
+.winslider {
+ border-radius: 9999px;
+ transition: 0ms cubic-bezier(0.05, 0.7, 0.1, 1);
+
+ trough {
+ border-radius: 9999px;
+ background-color: #A69999;
+ min-height: 4px;
+ transition: 0ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ }
+
+ highlight {
+ border-radius: 9999px;
+ background-color: $primary;
+ background-image: linear-gradient(45deg, $primary 0%, $primary 100%);
+ transition: 0ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ }
+
+ slider {
+ border-radius: 9999px;
+ border: 5px solid #454545;
+ min-height: 11px;
+ min-width: 11px;
+ background-color: $primary;
+ margin: -8px;
+ transition: 0ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ }
+
+ slider:hover {
+ border-radius: 9999px;
+ border: 4px solid #454545;
+ min-height: 13px;
+ min-width: 13px;
+ background-color: $primary;
+ margin: -8px;
+ }
+
+ slider:active {
+ border-radius: 9999px;
+ border: 6px solid #454545;
+ min-height: 9px;
+ min-width: 9px;
+ background-color: $primary;
+ margin: -8px;
+ }
+
+ // slider:focus {
+ // background-color: $primary;
+ // }
+}
+
+.winslider-winactions {
+ margin: 0 9px;
+
+ trough {
+ min-width: 287px;
+ }
+}
+
+.winnotif-badge {
+ border-radius: 9999px;
+ min-width: 20px;
+ min-height: 20px;
+ background-color: $primary;
+ color: #000000;
+ margin-left: 10px;
+}
+
+.winnotif-notif {
+ background-color: rgba(55, 55, 55, 0.6);
+ border-radius: 6px;
+ border: 1px solid rgba(30, 30, 30, 0.2);
+ margin: 4px;
+ padding: 13px;
+}
+
+.winnotif-notif-icon {
+ background-position: center center;
+ min-height: 20px;
+ min-width: 20px;
+ margin: 8px;
+}
+
+.winnotif-appname {
+ margin: 8px;
+ background-color: transparent;
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+}
+
+.winnotif-title {
+ margin: 17px;
+}
+
+.winnotif-button {
+ background-size: 50% auto;
+ background-color: rgba(75, 75, 75, 0.25);
+ background-position: center;
+ border-radius: 6px;
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ margin: 12px 3px;
+ padding: 6px;
+ min-width: 20px;
+ min-height: 20px;
+}
+
+.winnotif-button:hover {
+ background-color: rgba(95, 95, 95, 0.4);
+}
+
+.winnotif-button:active {
+ background-color: tint(rgba(95, 95, 95, 0.4), 20%);
+}
+
+.wincalendar-title {
+ border-radius: 9999px;
+ font-size: 12pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ margin: 1px;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.wincalendar-button {
+ border-radius: 9999px;
+ font-size: 12pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ margin: 1px;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.wincalendar-text {
+ border-radius: 9999px;
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.day-1 {
+ background-color: transparent;
+ color: #7C7C7C;
+}
+
+.day0 {
+ background-color: transparent;
+ color: white;
+}
+
+.day-1:hover {
+ background-color: rgba(75, 75, 75, 0.5);
+}
+
+.day0:hover {
+ background-color: rgba(75, 75, 75, 0.5);
+}
+
+.day-1:active {
+ background-color: tint(rgba(75, 75, 75, 0.5), 10%);
+}
+
+.day0:active {
+ background-color: tint(rgba(75, 75, 75, 0.5), 10%);
+}
+
+.day1 {
+ background-color: $primary;
+ color: #000000;
+}
+
+.day1:hover {
+ background-color: tint($primary, 10%);
+}
+
+.day1:active {
+ background-color: tint($primary, 20%);
+}
+
+.winarrow-up {
+ background-image: url('images/svg/dark/uparrow.svg');
+}
+
+.winarrow-down {
+ background-image: url('images/svg/dark/downarrow.svg');
+}
+
+.winactions-bottom-button {
+ background-color: transparent;
+ border-radius: 6px;
+ // border: 1px solid transparent;
+ // border-top: 1px solid transparent;
+ min-width: 42px;
+ min-height: 42px;
+}
+
+.winactions-bottom-button:hover {
+ background-color: rgba(75, 75, 75, 0.5);
+}
+
+.winactions-bottom-button:active {
+ background-color: tint(rgba(75, 75, 75, 0.5), 10%);
+}
+
+.winnotif-calendar {
+ background: rgba(40, 40, 40, 0.6);
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-bottom: 0px solid transparent;
+ border-top: 1px solid rgba(30, 30, 30, 0.5);
+ margin: 0px 12px;
+}
+
+.winnotif-monthbutton {
+ // background-size: 80% auto;
+ background-color: transparent;
+ background-position: center;
+ border-radius: 6px;
+ margin: 12px 3px;
+ padding: 6px;
+ min-width: 20px;
+ min-height: 20px;
+}
+
+.winnotif-monthbutton:hover {
+ background-color: rgba(95, 95, 95, 0.4);
+}
+
+.winnotif-monthbutton:active {
+ background-color: tint(rgba(95, 95, 95, 0.4), 10%);
+}
+
+.winstart-search-contents {
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ background-color: transparent;
+ border-radius: 6px;
+ border: 0px solid transparent;
+ padding: 11px;
+ margin: 34px;
+ margin-left: 69px;
+
+ selection {
+ background-color: tint($primary, 50%);
+ color: #1e1e1e;
+ }
+}
+
+.winstart-search-accent {
+ min-height: 2px;
+ background-color: $primary;
+ border-bottom-left-radius: 99px;
+ border-bottom-right-radius: 99px;
+ margin: 34px 36px;
+ margin-bottom: 34px;
+}
+
+.winstart-search-prompt {
+ background-color: rgba(34, 32, 39, 0.5);
+ border-radius: 6px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ padding: 11px;
+ margin: 34px;
+}
+
+.winstart-search-prompt-text {
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ color: #CCCCCC;
+}
+
+.winstart-button-allapps {
+ background-color: rgba(75, 75, 75, 0.25);
+ border-radius: 6px;
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ padding: 6px;
+ min-width: 20px;
+ min-height: 20px;
+}
+
+.winstart-button-allapps:hover {
+ background-color: rgba(95, 95, 95, 0.4);
+}
+
+.winstart-button-allapps:active {
+ background-color: tint(rgba(95, 95, 95, 0.4), 20%);
+}
+
+.winstart-allapps-arrow {
+ background-image: url('images/svg/dark/rightarrow.svg');
+ background-position: center;
+ background-repeat: no-repeat;
+ min-width: 15px;
+ min-width: 15px;
+ margin-left: 8px;
+ background-size: 90%;
+}
+
+.winstart-allapps-icon {
+ font-family: 'Material Symbols Rounded';
+ font-size: 13pt;
+ font-weight: 300;
+}
+
+.winstart-section {
+ background-color: transparent;
+ font-size: 11.4pt;
+ font-family: 'Cantarell';
+ font-weight: 700;
+}
+
+.winstart-pinnedapps {
+ margin: 12px 34px;
+}
+
+.winsearch-section-box {
+ margin: 0 72px;
+ margin-bottom: 12px;
+}
+
+.winstart-pinnedapps-entry-pad {
+ padding-top: 11px;
+}
+
+.winstart-pinnedapps-entry {
+ min-width: 101px;
+ min-height: 88px;
+ border-radius: 6px;
+}
+
+.winstart-pinnedapps-entry:hover {
+ background-color: rgba(95, 95, 95, 0.6);
+}
+
+.winstart-pinnedapps-icon {
+ min-width: 33px;
+ min-height: 33px;
+}
+
+.winstart-recommended {
+ margin: 0px 60px;
+ margin-bottom: 33px;
+}
+
+.winstart-recommended-entry {
+ // min-width: 285.67px;
+ min-height: 59px;
+ border-radius: 6px;
+}
+
+.winstart-recommended-entry:hover {
+ background-color: rgba(49, 49, 49, 0.45);
+}
+
+.winstart-recommended-entry-pad {
+ min-width: 266.67px;
+ min-height: 59px;
+ border-radius: 6px;
+}
+
+.winstart-recommended-icon {
+ min-width: 33px;
+ min-height: 33px;
+ margin: 13px;
+}
+
+.winstart-recommended-text {
+ margin: 13px 0px;
+}
+
+.winstart-recommended-name {
+ color: white;
+}
+
+.winstart-recommended-subtext {
+ color: #C1C1C1;
+}
+
+.winstart-user {
+ border-radius: 6px;
+ padding: 5px 16px;
+ margin: 14px;
+}
+
+.winstart-user:hover {
+ background-color: rgba(49, 49, 49, 0.7);
+}
+
+.winstart-user-icon {
+ min-width: 33px;
+ min-height: 33px;
+ border-radius: 9999px;
+ background: white;
+ background-image: url('images/svg/light/user.svg');
+ background-position: center;
+ background-repeat: no-repeat;
+}
+
+.winstart-power-icon {
+ background-size: 53%;
+ // background-image: url('images/svg/dark/power.svg');
+ background-position: center;
+ background-repeat: no-repeat;
+ min-width: 43px;
+ min-height: 43px;
+ border-radius: 6px;
+ margin: 14px;
+}
+
+.winstart-power-icon-true {
+ background-color: rgba(49, 49, 49, 0.7);
+}
+
+.winstart-power-icon:hover {
+ background-color: rgba(49, 49, 49, 0.7);
+}
+
+.winstart-allapps-box {
+ padding: 0 55px;
+}
+
+.winstart-allapps-app-pad {
+ padding-top: 11px;
+}
+
+.winstart-allapps-app {
+ border-radius: 6px;
+ min-height: 42px;
+ min-width: 564px;
+}
+
+.winstart-allapps-app:hover {
+ background-color: rgba(49, 49, 49, 0.45);
+}
+
+.winstart-allapps-app-icon {
+ margin: 8px;
+}
+
+.winstart-allapps-appname {
+ margin-left: 15px;
+}
+
+.winsearch-pad {
+ margin-left: 34px;
+ margin-right: 34px;
+}
+
+.winsearch-actions-box {
+ background-color: rgba(73, 73, 73, 0.5);
+ border-radius: 9px;
+}
+
+.winsearch-tag-strip {
+ min-height: 34px;
+ margin: 0 34px;
+ margin-bottom: 3px;
+}
+
+.winsearch-tag {
+ background-color: rgba(73, 73, 73, 0.25);
+ border-radius: 9999px;
+ padding: 10px 15px;
+ margin: 0 3px;
+}
+
+.winsearch-tag-false {
+ background-color: rgba(73, 73, 73, 0.25);
+ border-radius: 9999px;
+ padding: 10px 15px;
+ margin: 0 3px;
+}
+
+.winsearch-tag-true {
+ background-color: $primary;
+ color: $onPrimary;
+ border-radius: 9999px;
+ padding: 10px 15px;
+ margin: 0 3px;
+}
+
+.winsearch-result {
+ border-radius: 6px;
+ margin: 2px;
+ min-height: 42px;
+ padding: 0 12px;
+ padding-left: 57px;
+ caret-color: transparent;
+
+ border-left: 3px solid transparent;
+ // border-top: 2px solid transparent;
+ // border-bottom: 2px solid transparent;
+
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+
+ selection {
+ background-color: transparent;
+ }
+
+ background-position: -0.5% center;
+ background-size: auto 65%;
+ background-image: url('images/svg/linetransparent.svg');
+}
+
+.winsearch-result:focus {
+ background-color: rgba(73, 73, 73, 0.25);
+ background-position: -0.5% center;
+ background-size: auto 65%;
+ background-image: url('images/svg/linevertical.svg');
+
+ // border-left: 3px solid $primary;
+ // border-top: 2px solid transparent;
+ // border-bottom: 2px solid transparent;
+}
+
+.winsearch-result-icon {
+ margin-left: 13px;
+}
+
+.winsearch-result-icon-big {
+ margin-top: 34px;
+ margin-bottom: 14px;
+}
+
+.winsearch-section {
+ min-height: 38px;
+ margin-left: 13px;
+}
+
+.winsearch-result-actions-title {
+ font-size: 13pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ color: white;
+}
+
+.winsearch-result-actions-subtext {
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ color: #8E8D8F;
+ margin-bottom: 8px;
+}
+
+.winsearch-separator {
+ min-height: 3px;
+ background-color: rgba(73, 73, 73, 0.25);
+ border: 1px rgba(73, 73, 73, 0.4);
+ margin: 21px 17px;
+}
+
+.winsearch-actions-icon {
+ margin-left: 13px;
+}
+
+.winsearch-actions-button {
+ border-radius: 6px;
+ min-height: 34px;
+ margin: 0 17px;
+}
+
+.winsearch-actions-button:hover {
+ background-color: rgba(108, 108, 108, 0.25);
+}
+
+.winsearch-actions-button:focus {
+ background-color: rgba(108, 108, 108, 0.25);
+}
+
+.winsearch-actions-button:active {
+ background-color: tint(rgba(108, 108, 108, 0.25), 5%);
+}
+
+.winosd-window {
+ margin: 5px;
+ border-radius: 9px;
+ min-width: 10px;
+ min-height: 40px;
+}
+
+.winosd-var-shape {
+ padding: 7px;
+ min-width: 100px;
+ min-height: 37px;
+ border-radius: 9px;
+ margin: 12px;
+}
+
+.winosd-var {
+ padding: 7px;
+ min-width: 100px;
+ min-height: 37px;
+ background: rgba(45, 46, 48, 0.8);
+ background-image: url('images/textures/acrylic.png');
+ border-radius: 15px;
+ // border: 1px solid rgba(60, 60, 60, 0.4);
+ // border-top: 1px solid rgba(64, 64, 64, 0.5);
+ border: 1px solid rgba(34, 35, 38, 0.5);
+ margin: 14px;
+}
+
+.winslider-osd {
+ border-radius: 9999px;
+ margin: 0 9px;
+ transition: 0ms cubic-bezier(0.05, 0.7, 0.1, 1);
+
+ trough {
+ border-radius: 9999px;
+ background-color: #A69999;
+ min-height: 4px;
+ min-width: 116px;
+ transition: 0ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ }
+
+ highlight {
+ border-radius: 9999px;
+ background-color: $primary;
+ background-image: linear-gradient(45deg, $primary 0%, $primary 100%);
+ transition: 0ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ }
+}
+
+.win-segoeicon {
+ font-family: 'Segoe Fluent Icons';
+ font-weight: bold;
+}
+
+.winpower-window {
+ padding: 5px;
+ background: rgba(40, 40, 40, 0.71);
+ border-radius: 12px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-top: 1px solid rgba(64, 64, 64, 0.5);
+ margin: 12px;
+ box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.65);
+}
+
+.winpower-buttonicon {
+ padding: 10px;
+ min-width: 20px;
+ min-height: 20px;
+}
+
+.winpower-button {
+ background-color: transparent;
+ border-radius: 6px;
+ // border: 1px solid transparent;
+ // border-top: 1px solid transparent;
+ min-width: 42px;
+ min-height: 42px;
+ // margin: 0 5px;
+}
+
+.winpower-button:hover {
+ background-color: rgba(75, 75, 75, 0.5);
+}
+
+.winpower-button:active {
+ background-color: tint(rgba(75, 75, 75, 0.5), 10%);
+}
+
+.wingamebar-overlay {
+ background-color: rgba(10, 10, 10, 0.4);
+}
+
+.wingamebar-window {
+ background: #252525;
+ border-radius: 10px;
+ border: 1px solid $overlay0;
+ transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
+}
+
+.wingamebar-titlebar {
+ background: #1C1C1C;
+ border-top-left-radius: 8px;
+ border-top-right-radius: 8px;
+ border: 2px $overlay0;
+ padding: 10px;
+}
+
+.wingamebar-icon {
+ font-family: 'Segoe Fluent Icons';
+ font-size: 10pt;
+ font-weight: bold;
+}
+
+.wingamebar-text {
+ font-family: 'Bahnschrift';
+ font-size: 12pt;
+ font-weight: 500;
+}
+
+.wingamebar-text-small {
+ font-size: 10pt;
+}
+
+.wingamebar-text-clock {
+ font-size: 17pt;
+ margin: 17px;
+}
+
+.wingamebar-text-bigmetric {
+ font-size: 25pt;
+}
+
+.wingamebar-content {
+ padding: 8px 17px;
+}
+
+.wingamebar-capture {
+ padding: 17px;
+}
+
+.wingamebar-capture-button {
+ min-width: 57px;
+ min-height: 57px;
+ background: #3A3A3A;
+ border: 1px solid #3A3A3A;
+ border-radius: 9999px;
+}
+
+.wingamebar-capture-button:hover {
+ border: 1px solid white;
+}
+
+.wingamebar-capture-button-unavailable {
+ min-width: 55px;
+ min-height: 55px;
+ background: #282828;
+ border: 2px solid #282828;
+ border-radius: 9999px;
+}
+
+.wingamebar-subtext {
+ color: #A8A8A8;
+}
+
+.wingamebar-capture-bottom {
+ border-top: 1px solid #373737;
+ padding: 8px 17px;
+ color: #DEDEDE;
+}
+
+.wingamebar-button-pad:hover {
+ :first-child {
+ background-color: $overlay0;
+ }
+}
+
+.wingamebar-button:hover {
+ background-color: $overlay0;
+}
+
+.wingamebar-capture-bottom {
+ border-bottom-left-radius: 8px;
+ border-bottom-right-radius: 8px;
+}
+
+.wingamebar-navbar {
+ min-height: 35px;
+ border-bottom: 2px solid #333333;
+ padding: 0 17px;
+}
+
+.wingamebar-navbar-button {
+ min-height: 35px;
+ min-width: 75px;
+ margin-bottom: -2px;
+ background-image: url('images/svg/dark/linehorizontal.svg');
+ background-position: bottom;
+ background-size: 100% auto;
+}
+
+.wingamebar-audio-sys {
+ padding: 17px;
+ border-bottom: 2px solid #333333;
+}
+
+.winslider-gamebar-sys {
+ margin: 0 5px;
+
+ trough {
+ min-width: 260px;
+ }
+}
+
+.winslider-gamebar-app {
+
+ // margin: 0 5px;
+ trough {
+ min-width: 205px;
+ margin: 0 3px;
+ }
+}
+
+.wingamebar-audio-appicon {
+ margin-left: 17px;
+ margin-bottom: 5px;
+}
+
+.wingamebar-control-button {
+ min-width: 59px;
+ min-height: 59px;
+ border-radius: 6px;
+ margin: 5px;
+}
+
+.wingamebar-control-button:hover {
+ background-color: $hover0;
+}
+
+.wingamebar-control-button-active {
+ min-width: 59px;
+ min-height: 59px;
+ border-radius: 6px;
+ margin: 5px;
+ background-size: auto 4%;
+ background-position: 0% 93%;
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0) 21%, $primary 21%, $primary 79%, rgba(0, 0, 0, 0) 79%, rgba(0, 0, 0, 0) 100%);
+}
+
+.wingamebar-control-button-active:hover {
+ background-color: $hover0;
+}
+
+.wingamebar-control-sidesection-left {
+ background-color: #1C1C1C;
+ min-height: 68px;
+ min-width: 68px;
+ border-top-left-radius: 10px;
+ border-bottom-left-radius: 10px;
+}
+
+.wingamebar-control-sidesection-right {
+ background-color: #1C1C1C;
+ min-height: 68px;
+ min-width: 68px;
+ border-top-right-radius: 10px;
+ border-bottom-right-radius: 10px;
+}
+
+.wingamebar-control-button {
+ font-size: 15pt;
+}
+
+.wingamebar-performance-metricscolumn {
+ min-width: 100px;
+}
+
+.wingamebar-performance-metric-false {
+ min-height: 25px;
+ padding: 0 17px;
+}
+
+.wingamebar-performance-metric-true {
+ min-height: 25px;
+ background-color: #3C3C3C;
+ padding: 0 17px;
+}
+
+.wingamebar-performance-grapharea {
+ border-bottom-right-radius: 10px;
+}
+
+.wingamebar-performance-graphpad {
+ padding: 17px;
+}
+
+.wingamebar-performance-graph-graphpad {
+ padding-top: 37px;
+ padding-bottom: 37px;
+ padding-left: 17px;
+ padding-right: 17px;
+}
+
+.wingamebar-graph {
+ color: $primary;
+}
+
+.winnews-topbar {
+ margin: 25px;
+ margin-bottom: 13px;
+}
+
+.winnews-user {
+ border-radius: 9999px;
+}
+
+.winnews-user:hover {
+ background-color: rgba(49, 49, 49, 0.7);
+}
+
+.winnews-title {
+ font-family: 'Cantarell';
+ font-size: 12pt;
+ font-weight: bold;
+ font-size: 16pt;
+ margin-right: 20px;
+}
+
+.winnews-clock {
+ font-family: 'Cantarell';
+ font-size: 12pt;
+ font-weight: 500;
+ font-size: 16pt;
+ margin-right: 20px;
+}
+
+.winnews-search-prompt {
+ background-color: rgba(34, 32, 39, 0.5);
+ border-radius: 9999px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ padding: 5px;
+}
+
+.winnews-search-prompt-text {
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ color: #CCCCCC;
+}
+
+.winnews-search-contents {
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ background-color: transparent;
+ border-radius: 6px;
+ border: 0px solid transparent;
+ // padding: 11px;
+ // margin: 34px;
+ margin-left: 37px;
+
+ selection {
+ background-color: tint($primary, 50%);
+ color: #1e1e1e;
+ }
+}
+
+.winnews-widgets {
+ margin: 0 46px;
+ margin-top: 4px;
+}
+
+.winnews-section-icon {
+ color: $onSecondaryContainer;
+ font-family: 'Material Symbols Rounded';
+ font-size: 20pt;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ margin: 5px;
+}
+
+.winnews-widget {
+ border-radius: 9px;
+ background-color: $onSecondary;
+ padding-bottom: 10px;
+}
+
+.winnews-widget-nopad {
+ border-radius: 9px;
+ background-color: $onSecondary;
+}
+
+.winnews-section {
+ color: $onSecondaryContainer;
+ font-family: 'Cantarell';
+ font-size: 15pt;
+ font-weight: bold;
+ margin: 5px;
+}
+
+.winnews-text {
+ margin: 5px 0px;
+ background-repeat: no-repeat;
+ color: $onBackground;
+ font-family: 'Cantarell';
+ font-size: 12pt;
+}
+
+.winnews-option {
+ padding: 0 17px;
+ margin-left: 43px;
+}
+
+.winslider-winnews {
+ margin: 0 5px;
+ min-height: 21px;
+
+ trough {
+ min-width: 260px;
+ }
+}
+
+.win-checkbox-0 {
+ margin: 5px 0px;
+ border-radius: 9999px;
+ min-width: 26px;
+ min-height: 26px;
+ background: url('images/svg/checkbox_no.svg');
+ background-repeat: no-repeat;
+ color: transparent;
+}
+
+.win-checkbox-1 {
+ margin: 5px 0px;
+ border-radius: 9999px;
+ min-width: 26px;
+ min-height: 26px;
+ background: url('images/svg/checkbox.svg');
+ background-repeat: no-repeat;
+ color: transparent;
+}
+
+.winnews-fetch-pad {
+ padding: 0 17px;
+ padding-left: 15px;
+}
+
+.winnews-fetch-icon {
+ color: $primary;
+ font-size: 16pt;
+ font-family: Material Symbols Rounded;
+}
+
+.winnews-fetch {
+ font-size: 15pt;
+}
+
+.winnews-waifu {
+ min-width: 380px;
+ min-height: 380px;
+ border-bottom-left-radius: 12px;
+ border-bottom-right-radius: 12px;
+ background-size: 100% auto;
+ background-position: top;
+}
+
+.winnews-title-right {
+ margin-right: 15px;
+}
+
+.winnews-link {
+ color: #89B4FA;
+}
+
+.wintaskview-bg {
+ // background-color: rgba(0, 0, 0, 0.2);
+ background-color: rgba(50, 63, 83, 0.2);
+}
+
+.wintaskview-workspaces-bg {
+ border-radius: 9px;
+ background-color: rgba(15, 15, 15, 0.75);
+ margin: 10px;
+ min-height: 60px;
+ box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.65);
+}
+
+.wintaskview-text {
+ background-color: transparent;
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ margin: 1px;
+ color: white;
+}
+
+.wintaskview-workspace-bg {
+ background-size: 100% auto;
+ background-position: center;
+ border-radius: 5px;
+}
+
+.taskview-ws {
+ margin: 4px;
+ padding: 8px 12px;
+ background-size: 17% 2%;
+ background-position: bottom;
+}
+
+.taskview-ws-true {
+ background-color: rgba(75, 75, 75, 0.6);
+ border-radius: 9px;
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+
+ background-image: url('images/svg/linehorizontal.svg');
+}
+
+.taskview-ws-false {
+ background-color: transparent;
+ border-radius: 9px;
+ border: 1px solid transparent;
+}
+
+.taskview-ws-window {
+ border-radius: 5px;
+ background-color: #2C2C2C;
+ border: 1px solid $surface0;
+ border-top: 1px solid tint($surface0, 5%);
+}
+
+.taskview-thisws-window {
+ border-radius: 12px;
+ background-color: rgba(22, 22, 22, 0.85);
+ color: white;
+}
+
+.wintaskview-thisws-window-close {
+ color: white;
+ font-size: 15pt;
+}
+
+.taskview-thisws-window-thumbnail {
+ border-radius: 4px;
+ border-bottom-left-radius: 12px;
+ border-bottom-right-radius: 12px;
+ background-color: #202020;
+ margin: 1px;
+}
+
+.winactions-media-cover {
+ border-radius: 5px;
+ min-height: 45px;
+ min-width: 45px;
+ background-size: auto 100%;
+ background-position: center;
+}
+
+.winactions-media-title {
+ color: white;
+ background-color: transparent;
+ font-size: 12pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+}
+
+.winactions-media-artist {
+ color: white;
+ background-color: transparent;
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+}
+
+.winactions-media-button {
+ font-size: 14pt;
+ color: white;
+ border-radius: 5px;
+ padding: 10px;
+ margin: -5px;
+}
+
+.winactions-media-button:hover {
+ background-color: rgba(95, 95, 95, 0.6);
+}
+
+.winactions-media-button:active {
+ background-color: rgba(100, 100, 100, 0.8);
+}
+
+.winwin-shadow {
+ margin: 12px;
+ border-radius: 12px;
+ box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.65);
+ // box-shadow: 0px 8px 10px red;
+}
+
+.winwin-topbar-shadow {
+ border-top-left-radius: 12px;
+ border-top-right-radius: 12px;
+ margin: 12px;
+ margin-bottom: 0px;
+ margin-top: 6px;
+ box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.65);
+}
+
+.winwin-center-shadow {
+ margin: 0px 12px;
+ box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.65);
+}
+
+.winwin-center-noseparator-shadow {
+ margin: 0px 12px;
+ box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.65);
+}
+
+.winwin-topbar-shadow {
+ border-top-left-radius: 12px;
+ border-top-right-radius: 12px;
+ margin: 12px;
+ margin-bottom: 0px;
+ box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.65);
+}
+
+.winwin-top-shadow {
+ transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ border-top-left-radius: 12px;
+ border-top-right-radius: 12px;
+ margin: 12px;
+ margin-bottom: 0px;
+ box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.65);
+}
+
+.winwin-bottom-shadow {
+ border-bottom-left-radius: 12px;
+ border-bottom-right-radius: 12px;
+ margin: 12px;
+ margin-top: 0px;
+ box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.65);
+}
+
+.winwin-bottom-light-shadow {
+ transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ border-bottom-left-radius: 12px;
+ border-bottom-right-radius: 12px;
+ margin: 12px;
+ margin-top: 0px;
+ box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.65);
+}
+
+.winnewsicon {
+ background-position: center;
+ background-image: url('images/icons/winnews.png');
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.winnewsicon-interaction:active {
+ :first-child {
+ :first-child {
+ background-image: url('images/icons/winnews-clicked.png');
+ }
+ }
+}
+
+.wintaskviewicon {
+ background-position: center;
+ background-size: 60%;
+ background-image: url('images/icons/wintaskview.png');
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.wintaskviewicon-interaction:active {
+ :first-child {
+ :first-child {
+ background-size: 50%;
+ background-image: url('images/icons/wintaskview-clicked.png');
+ }
+ }
+}
+
+.winbarbutton-h {
+ :first-child {
+ :first-child {
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ }
+ }
+}
+
+.winbarbutton-h:hover {
+ :first-child {
+ :first-child {
+ background-color: shade($overlay0, 2%);
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ }
+ }
+}
+
+.winbarbutton-h:active {
+ :first-child {
+ :first-child {
+ background-color: tint($overlay0, 8%);
+ border: 1px solid tint($overlayedge, 10%);
+ border-top: 1px solid tint($overlayedge, 15%);
+ }
+ }
+}
+
+.wintray-button {
+ border-radius: 6px;
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ padding: 6px;
+ min-width: 20px;
+ min-height: 20px;
+}
+
+.winbarbutton-h-open {
+ :first-child {
+ :first-child {
+ background-color: shade($overlay0, 2%);
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ }
+ }
+}
+
+.winnews-tag-strip {
+ min-height: 34px;
+ margin: 0 15px;
+ // margin-bottom: 3px;
+}
+
+.winnews-tag {
+ border-radius: 9999px;
+ padding: 10px 15px;
+ margin: 0 3px;
+ background-color: $secondaryContainer;
+ color: $onSecondaryContainer;
+}
+
+.winnews-tag:hover {
+ background-color: tint($secondaryContainer, 10%);
+ color: tint($onSecondaryContainer, 10%);
+}
+
+.winnews-tag:active {
+ background-color: tint($secondaryContainer, 20%);
+ color: tint($onSecondaryContainer, 20%);
+}
+
+.winnews-tag-false {
+ background-color: rgba(73, 73, 73, 0.25);
+ border-radius: 9999px;
+ padding: 10px 15px;
+ margin: 0 3px;
+}
+
+.winnews-tag-true {
+ background-color: $primary;
+ color: $onPrimary;
+ border-radius: 9999px;
+ padding: 10px 15px;
+ margin: 0 3px;
+}
+
+.winbsod-background {
+ background-color: #000000;
+}
+
+.winbsod-text {
+ font-family: 'Cantarell';
+}
+
+.winbsod-face {
+ font-size: 150pt;
+}
+
+.winbsod-desc {
+ font-size: 30pt;
+}
+
+.winbsod-technicalinfo {
+ font-size: 15pt;
+}
+
+.winnews-cava-column {
+ background-color: $primary;
+ border-top-left-radius: 99px;
+ border-top-right-radius: 99px;
+ margin: 0 4px;
+}
+
+.winnews-widget-nopad-cava {
+ border-radius: 9px;
+ background-color: $onSecondary;
+
+ :first-child {
+ border-bottom-left-radius: 99px;
+ }
+
+ :last-child {
+ border-bottom-right-radius: 99px;
+ }
+}
+
+.winlang-text {
+ color: white;
+}
+
+.winlang-subtext {
+ color: #C1C1C1;
+}
+
+.winlang-lang-false {
+ padding: 15px;
+ margin: 4px;
+ border-radius: 6px;
+
+ background-position: -0.5% center;
+ background-size: 5px 24px;
+ background-image: url('images/svg/linetransparent.svg');
+}
+
+.winlang-lang-false:hover {
+ background-color: rgba(73, 73, 73, 0.2);
+}
+
+.winlang-lang-true {
+ padding: 15px;
+ margin: 4px;
+ border-radius: 6px;
+
+ background-color: rgba(73, 73, 73, 0.25);
+ background-position: -0.5% center;
+ background-size: 5px 24px;
+ background-image: url('images/svg/linevertical.svg');
+}
+
+.winlang-bottom-button {
+ background-color: transparent;
+ border-radius: 6px;
+ // border: 1px solid transparent;
+ // border-top: 1px solid transparent;
+ min-width: 42px;
+ min-height: 42px;
+}
+
+.winlang-bottom-button:hover {
+ background-color: rgba(75, 75, 75, 0.5);
+}
+
+.winlang-bottom-button:active {
+ background-color: tint(rgba(75, 75, 75, 0.5), 10%);
+}
\ No newline at end of file
diff --git a/early/.config/eww/eww.scss b/early/.config/eww/eww.scss
new file mode 100755
index 000000000..c3aacdfa2
--- /dev/null
+++ b/early/.config/eww/eww.scss
@@ -0,0 +1,639 @@
+@import 'css/colors';
+@import 'css/colorscheme';
+@import 'css/material';
+@import 'images/svg/color.scss';
+
+@function tint($color, $percentage) {
+ @return mix(rgb(245, 250, 255), $color, $percentage);
+}
+
+@function shade($color, $percentage) {
+ @return mix(rgb(0, 7, 18), $color, $percentage);
+}
+
+$grey: grey;
+$battcolor: $color6;
+$memcolor: $color5;
+$cpucolor: $color4;
+$border: $color7;
+$surface0: tint($colorbg, 10%);
+$bg1: $surface0;
+
+//thanks flick0!
+@keyframes gradient {
+ 0% {
+ background-position: 0% 50%;
+ }
+
+ 50% {
+ background-position: 100% 50%;
+ }
+
+ 100% {
+ background-position: 0% 50%;
+ }
+}
+
+//also thanks to him
+@keyframes blink {
+ to {
+ background-color: #f9e2af;
+ color: #96804e;
+ }
+}
+
+@keyframes ripple {
+ to {
+ background-size: 1000% 1000%;
+ }
+}
+
+@keyframes flyin-bottom {
+ from {
+ margin-bottom: -55px;
+ margin-top: 55px;
+ }
+
+ to {
+ margin-bottom: 0px;
+ margin-top: 0px;
+ }
+}
+
+@keyframes flyin-top {
+ from {
+ margin-bottom: 55px;
+ margin-top: -55px;
+ }
+
+ to {
+ margin-bottom: 0px;
+ margin-top: 0px;
+ }
+}
+
+@mixin rounding {
+ border-radius: 10px;
+}
+
+@mixin filter {
+ saturate {
+ filter: saturate(3);
+ }
+
+ grayscale {
+ filter: grayscale(100%);
+ }
+
+ contrast {
+ filter: contrast(160%);
+ }
+
+ brightness {
+ filter: brightness(0.25);
+ }
+
+ blur {
+ filter: blur(3px);
+ }
+
+ invert {
+ filter: invert(100%);
+ }
+
+ .sepia {
+ filter: sepia(100%);
+ }
+
+ huerotate {
+ filter: hue-rotate(180deg);
+ }
+
+ rss.opacity {
+ filter: opacity(50%);
+ }
+}
+
+@mixin window {
+ border: 3px solid $primary;
+ // box-shadow: 0 2px 3px $shadow;
+ margin: 5px 5px 10px;
+ @include rounding;
+}
+
+* {
+ all: unset;
+ transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ // font-family: 'Rubik', 'Material Symbols Rounded';
+ background-repeat: no-repeat;
+}
+
+.scale slider {
+ transition: all 75ms cubic-bezier(0, 0, 0.2, 1);
+}
+
+.progress slider {
+ transition: all 75ms cubic-bezier(0, 0, 0.2, 1);
+}
+
+.music-ctl-revealer {
+ font-family: Material Symbols Rounded;
+}
+
+@import 'css/bottombar';
+@import 'css/bgdecor';
+@import 'css/calendar';
+@import 'css/dashboard';
+@import 'css/dashfs';
+@import 'css/editmode';
+@import 'css/music';
+@import 'css/notification';
+@import 'css/overview';
+@import 'css/osd';
+@import 'css/osettings';
+@import 'css/sidebar';
+@import 'css/supercontext';
+@import 'css/system';
+@import 'css/themer';
+@import 'css/taskbar';
+@import 'css/volume';
+@import 'css/winstuff';
+
+.module-group {
+ // background-color: $colorbg;
+ min-height: 53px;
+ color: $fg;
+ border-bottom-right-radius: 26px;
+ border-bottom-left-radius: 26px;
+}
+
+.bar-bg-only {
+ margin-top: 8px;
+ margin-bottom: 8px;
+ margin-right: -1911px;
+ margin-left: 8px;
+ border-radius: 26px;
+ background-color: mix(shade($colorbarbg, 45%), $primary, 97%);
+ // background-color: shade($colorbg, 75%);
+ // background-color: #0B121C;
+ background-image: linear-gradient(135deg, shade($onSecondary, 47%) 18%, rgba(0, 0, 0, 0) 18%, rgba(0, 0, 0, 0) 37%, shade($onSecondary, 47%) 37%, shade($onSecondary, 47%) 63%, rgba(0, 0, 0, 0) 63%, rgba(0, 0, 0, 0) 85%, shade($onSecondary, 47%) 85%);
+
+ box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.5);
+}
+
+.bar-bg-only-compact {
+ margin-right: -1920px;
+ background-color: shade($colorbg, 75%);
+ background-image: linear-gradient(135deg, shade($onSecondary, 47%) 18%, rgba(0, 0, 0, 0) 18%, rgba(0, 0, 0, 0) 37%, shade($onSecondary, 47%) 37%, shade($onSecondary, 47%) 63%, rgba(0, 0, 0, 0) 63%, rgba(0, 0, 0, 0) 85%, shade($onSecondary, 47%) 85%);
+}
+
+.bar-normal {
+ // margin: 8px;
+ min-height: 53px;
+ color: $fg;
+ border-bottom-right-radius: 26px;
+ border-bottom-left-radius: 26px;
+
+ label {
+ font-size: 1.2rem;
+ }
+
+ font-family: 'Rubik';
+ // animation-name: flyin-top;
+ // animation-duration: 350ms;
+ // animation-timing-function: cubic-bezier(0.05, 0.7, 0.1, 1);
+ // animation-iteration-count: 1;
+}
+
+.bar-compact {
+ background-color: shade($colorbg, 70%); //because dark background makes colors pop
+ border-bottom: 1px solid $primary;
+ min-height: 53px;
+ color: $fg;
+
+ label {
+ font-size: 1.2rem;
+ }
+
+ font-family: 'Rubik';
+}
+
+tooltip {
+ background: $colorbarbg;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-radius: 8px;
+ color: white;
+
+ label {
+ font-size: 13pt;
+ }
+}
+
+.music-module {
+ font-family: Material Symbols Rounded;
+}
+
+.icon {
+ font-family: Material Symbols Rounded;
+ // padding-left: 4px;
+ // padding-right: 4px;
+}
+
+.module {
+ font-family: Material Symbols Rounded;
+ min-height: 53px;
+}
+
+.module-timedate {
+ padding-left: 13px;
+ padding-right: 13px;
+}
+
+.hour {
+ // font-weight: bold;
+ // padding-left: 13px;
+ color: $colorbar;
+ font-size: 20pt;
+}
+
+.clock {
+ color: $color2;
+ font-family: 'Rubik';
+ font-size: 19pt;
+}
+
+// .clock-module:hover {
+// border-top: 2px solid $color5;
+// }
+
+.minute {
+ color: $color2;
+ font-family: 'Rubik', 'Material Symbols Rounded';
+}
+
+.timedate-time {
+ label {
+ font-size: 16pt;
+ }
+}
+
+.date {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ color: $color2;
+
+ // margin-top: -2px;
+ label {
+ font-size: 12pt;
+ }
+}
+
+.bright-icon {
+ color: $color2;
+ padding-right: 4px;
+ padding-top: 4px;
+}
+
+// .bright-icon:hover {
+// border-top: 2px solid;
+// }
+
+.module-bt {
+ font-size: 1.2rem;
+}
+
+.workspaces {
+ // margin-left: 10px;
+ background-color: transparent;
+}
+
+.player-controls {
+ font-family: Material Symbols Rounded;
+}
+
+.volume-icon {
+ padding-left: 3px;
+ padding-right: 3px;
+}
+
+.net-icon {
+ color: $color7;
+ font-family: Material Symbols Rounded;
+ padding-left: 4px;
+ padding-right: 4px;
+ padding-top: 4px;
+}
+
+// .net-icon:hover {
+// border-top: 2px solid;
+// }
+
+.my-separator {
+ padding-left: 15px;
+ padding-right: 15px;
+ color: $onBackground;
+ min-height: 53px;
+}
+
+.ws {
+ font-size: 6rem;
+ transition: 75ms cubic-bezier(0.05, 0.9, 0.1, 1); //Hyprland, no overshot
+ // transition: 400ms cubic-bezier(0.2, 0.0, 0, 1.0); //Material 3
+}
+
+.ws-top {
+ // padding-top: 9px;
+}
+
+.ws-active-top {
+
+}
+
+.ws-text {
+ font-size: 16pt;
+ font-family: Rubik;
+ border-radius: 9999px;
+ // padding-left: 3px;
+ // padding-right: 3px;
+ min-width: 27px;
+ min-height: 27px;
+ color: $colorbarbg;
+ margin-top: 13px;
+ margin-bottom: 13px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+.ws-text-top {
+ // font-size: 16pt;
+ // font-family: Rubik;
+ border-radius: 9999px;
+ // padding-left: 3px;
+ // padding-right: 3px;
+ min-width: 27px;
+ min-height: 5px;
+ color: $colorbarbg;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+.ws-text-active {
+ background-color: $colorbar;
+}
+
+.ws:hover {
+ :first-child {
+ color: $tertiary;
+ }
+}
+
+.ws-active {
+ background-color: $onBackground;
+}
+
+.ws-inactive {
+ // background-color: tint($colorbg, 37%);
+ background-color: rgba(194, 192, 192, 0.7);
+}
+
+.ws-empty {
+ // background-color: tint($colorbg, 10%);
+ background-color: rgba(146, 145, 145, 0.3);
+}
+
+.activewin {
+ color: $colorbar;
+ // padding-left: 8px;
+ // padding-right: 8px;
+}
+
+// .themer-get {
+// padding-top: 4px;
+// padding-left: 10px;
+// padding-right: 10px;
+// background-image: url("images/grayscale/Add.png");
+// background-repeat: no-repeat;
+// background-position: center;
+// background-size: 100%;
+// }
+
+// .themer-restore {
+// padding-top: 7px;
+// padding-left: 10px;
+// padding-right: 10px;
+// padding-bottom: 16px;
+// background-image: url("images/grayscale/Backup.png");
+// background-repeat: no-repeat;
+// background-position: center;
+// background-size: 100%;
+// }
+
+
+.icon,
+.icon,
+.icon-text,
+.vol-icon label {
+ font-family: "Material Symbols Rounded";
+}
+
+.username {
+ color: $onBackground;
+}
+
+.userpic {
+ margin: 5px;
+ min-height: 42px;
+ min-width: 42px;
+ background-size: 100%;
+ border-radius: 5px;
+ background-repeat: no-repeat;
+}
+
+.osettings-toggle-button-false {
+ :first-child {
+ :first-child {
+ padding: 0px 11px;
+ min-width: 53px;
+ min-height: 53px;
+ background-color: transparent;
+ // background-image: url('images/svg/settings.svg');
+ background-size: 400% auto;
+ background-repeat: no-repeat;
+ background-image: linear-gradient(45deg, rgba(0, 0, 0, 0) 60%, tint($overlay0, 10%) 60%);
+ border-radius: 26px;
+
+ :active {
+ background-color: $overlay0;
+ background-position: 90% 50%;
+ }
+ }
+ }
+}
+
+.osettings-toggle-button-false:hover {
+ :first-child {
+ :first-child {
+ background-color: $overlay0;
+ background-position: 60% 50%;
+ }
+ }
+}
+
+.osettings-toggle-button-true {
+ :first-child {
+ :first-child {
+ padding: 0px 11px;
+ min-width: 53px;
+ min-height: 53px;
+ background-color: $overlay0;
+ background-position: 90% 50%;
+ background-repeat: no-repeat;
+ background-image: linear-gradient(45deg, rgba(0, 0, 0, 0) 60%, tint($overlay0, 10%) 60%);
+ background-size: 400% auto;
+ border-radius: 26px;
+ }
+ }
+}
+
+.module-button-pad {
+ margin: 8px 0;
+ border-radius: 26px;
+ // background-color: shade($colorbg, 75%);
+}
+
+.module-button-pad-left {
+ margin: 8px 0;
+ margin-left: 8px;
+ // background-color: shade($colorbg, 75%);
+ border-top-left-radius: 26px;
+ border-bottom-left-radius: 26px;
+}
+
+.module-button-pad-center {
+ margin: 8px 0;
+ // background-color: shade($colorbg, 75%);
+}
+
+.module-button-pad-right {
+ margin: 8px 0;
+ margin-right: 8px;
+ // background-color: shade($colorbg, 75%);
+ border-bottom-right-radius: 26px;
+ border-top-right-radius: 26px;
+}
+
+.module-button-pad-right-nomargin {
+ // background-color: shade($colorbg, 75%);
+ border-bottom-right-radius: 26px;
+ border-top-right-radius: 26px;
+}
+
+.onotify-toggle-button-false {
+ min-width: 53px;
+ min-height: 53px;
+ background-color: transparent;
+ background-repeat: no-repeat;
+ background-size: auto 65%;
+ background-position: center;
+
+ :hover {
+ background-color: $overlay0;
+ // background-image: url('./images/lazer_icons/notifications_hover.png');
+ }
+
+ border-radius: 26px;
+}
+
+.onotify-toggle-button-true {
+ min-width: 53px;
+ min-height: 53px;
+ background-color: $overlay0;
+ // background-image: url('./images/lazer_icons/notifications_hover.png');
+ background-repeat: no-repeat;
+ background-size: auto 65%;
+ background-position: center;
+}
+
+.real-onotify-toggle-button {
+ min-width: 53px;
+ min-height: 53px;
+ // background-image: url('./images/svg/forum.svg');
+ background-repeat: no-repeat;
+ background-size: auto 65%;
+ background-position: center;
+
+ :hover {
+ background-color: $overlay0;
+ }
+}
+
+.real-onotify-toggle-button-true {
+ min-width: 53px;
+ min-height: 53px;
+ background-color: $overlay0;
+ background-size: auto 65%;
+ background-position: center;
+ // background-image: url('./images/svg/forum.svg');
+ background-repeat: no-repeat;
+}
+
+.module-button {
+ transition: 500ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ border-radius: 26px;
+ padding: 0px 5px;
+ background-image: linear-gradient(45deg, rgba(0, 0, 0, 0) 60%, tint($overlay0, 10%) 60%);
+ background-size: 400% auto;
+ background-position: 40% 50%;
+}
+
+.module-button-hover {
+ transition: 500ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ border-radius: 26px;
+ padding: 0px 5px;
+ background-image: linear-gradient(45deg, rgba(0, 0, 0, 0) 60%, tint($overlay0, 10%) 60%);
+ background-size: 400% auto;
+ background-color: $overlay0;
+ background-position: 60% 50%;
+}
+
+.module-button:hover {
+ background-color: $overlay0;
+ background-position: 60% 50%;
+}
+
+.module-button:active {
+ background-color: $overlay0;
+ background-position: 100% 50%;
+}
+
+.module-button-true {
+ border-radius: 26px;
+ padding: 0px 5px;
+ background-color: $overlay0;
+ background-image: linear-gradient(45deg, rgba(0, 0, 0, 0) 60%, tint($overlay0, 10%) 60%);
+ background-size: 400% auto;
+ background-position: 90% 50%;
+}
+
+.dynbg-image {
+ transition: 900ms cubic-bezier(0.05, 0.9, 0.1, 1); // Hyprland default bezier but no overshot
+}
+
+progressbar>trough {
+ min-width: 30px;
+}
+
+.box-that-is-there {
+ background-color: transparent;
+}
+
+.search-button {
+ min-height: 53px;
+ min-width: 65px;
+ color: $colortext;
+ font-family: Material Symbols Rounded;
+}
+
+.workspaces-top {
+ min-width: 306px;
+ min-height: 5px;
+}
\ No newline at end of file
diff --git a/early/.config/eww/eww.yuck b/early/.config/eww/eww.yuck
new file mode 100755
index 000000000..df7bc23bd
--- /dev/null
+++ b/early/.config/eww/eww.yuck
@@ -0,0 +1,233 @@
+(include "./variables.yuck")
+;##################### Modules #########################
+(include "./modules/activewindow.yuck")
+(include "./modules/audiolevels.yuck")
+(include "./modules/bluetooth.yuck")
+(include "./modules/bright.yuck")
+(include "./modules/clock.yuck")
+(include "./modules/editmode.yuck")
+(include "./modules/music.yuck")
+; (include "./modules/net.yuck")
+(include "./modules/searchbutton.yuck")
+(include "./modules/sys.yuck")
+(include "./modules/taskbar.yuck")
+(include "./modules/user.yuck")
+; (include "./modules/volume.yuck")
+(include "./modules/winstuff.yuck")
+(include "./modules/workspaces.yuck")
+
+;##################### Windows #########################
+; Normal stuff
+(include "./windows/bottombar.yuck")
+(include "./windows/bg-decor.yuck")
+(include "./windows/dynamic-bg.yuck")
+(include "./windows/dashboard.yuck")
+(include "./windows/dashfs.yuck")
+(include "./windows/calendar.yuck")
+(include "./windows/music.yuck")
+(include "./windows/overview.yuck")
+(include "./windows/osd.yuck")
+(include "./windows/osettings.yuck")
+(include "./windows/onotify.yuck")
+; (include "./windows/system-menu.yuck")
+(include "./windows/supercontext.yuck")
+(include "./windows/themer.yuck")
+
+; Windows 11 stuff
+(include "./windows/winactions.yuck")
+(include "./windows/winbsod.yuck")
+(include "./windows/wingamebar.yuck")
+(include "./windows/winlang.yuck")
+(include "./windows/winnews.yuck")
+(include "./windows/winnotif.yuck")
+(include "./windows/winosd.yuck")
+(include "./windows/winoverview.yuck")
+(include "./windows/winpowermenu.yuck")
+(include "./windows/winshadows.yuck")
+(include "./windows/winstart.yuck")
+(include "./windows/wintaskview.yuck")
+
+(defwidget separator []
+ (box
+ :valign "start"
+ (label
+ :class "my-separator"
+ :text "|"
+ )
+ )
+)
+
+(defwidget left []
+ (eventbox
+ :onhover "${EWW_CMD} update music_reveal=true"
+ :onhoverlost "${EWW_CMD} update music_reveal=false"
+ (box
+ :space-evenly false :spacing 5
+ :valign "start" :halign "start"
+ (box :space-evenly false :class "module-group"
+ (osettings-button)
+ (osu-music-module)
+ )
+ ; (box :space-evenly false :class "module-group"
+ ; (taskbar)
+ ; )
+ (revealer
+ :reveal false
+ :transition "slideright"
+ (label
+ :text "${volume.audio} ${brightness.level} ${wsjsona[0][0].at} ${wsjsonb[0][0].at}" ; Dummy to keep listeners active
+ )
+ )
+ )
+ )
+)
+
+(defwidget right []
+ (eventbox
+ :onhover "${EWW_CMD} update right_hover=true"
+ :onhoverlost "${EWW_CMD} update right_hover=false"
+ (box
+ :space-evenly false :spacing 5
+ :halign "end" :valign "start"
+ (box :space-evenly false :class "module-group"
+ ; (editmode)
+ (themer)
+ )
+ ; (user)
+ (box :space-evenly false :class "module-group"
+ (onotify-button)
+ )
+ )
+ )
+)
+
+(defwidget center []
+ (box
+ :space-evenly false :orientation "v"
+ ; (revealer
+ ; :transition "slidedown"
+ ; :duration "0ms"
+ ; :reveal {!(rev_center_ws || awin.title == 'null')}
+ ; ; :reveal true
+ ; (workspaces_top)
+ ; )
+ (box
+ :valign "start"
+ :space-evenly false :spacing 5
+ :halign "center"
+ ; :style "${!(rev_center_ws || awin.title == 'null') ? 'margin-top: -15px; transition: 0px;' : 'transition: 0px;'}"
+ (box
+ :space-evenly false :space-evenly false
+ :spacing 5 :class "module-group" :style "padding-right: 10px;"
+ (searchbutton)
+ (revealer
+ :reveal {rev_center_ws || awin.title == 'null'}
+ ; :reveal false
+ :transition "slideright"
+ :duration "0ms"
+ (workspaces)
+ )
+ (revealer
+ :reveal {!(rev_center_ws || awin.title == 'null')}
+ ; :reveal true
+ :transition "slideright"
+ :duration "0ms"
+ (activewindow)
+ )
+ )
+ )
+ )
+)
+
+(defwidget bar [] ; Class .bar applies automatically
+ (box
+ :space-evenly false
+ :orientation "h"
+ (box
+ :class "bar-bg-only${compact ? '-compact' : ''}"
+ :style "
+ margin-right: -${RES_WIDTH - 9}px;
+ "
+ )
+ (centerbox
+ :class "bar-${compact ? 'compact' : 'normal'}"
+ :width {RES_WIDTH}
+ (left)
+ (center)
+ (right)
+ )
+ )
+)
+
+(defwidget winbar []
+ (centerbox
+ :class "winbar-bg"
+ (box
+ :space-evenly false
+ (winnews-button)
+ (eventbox
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ (box
+ :space-evenly false
+ :style "margin-left: ${RES_WIDTH / 2 - 100 - (25 * arraylength(tasks))}px;"
+ (winstarticon)
+ (wintaskview-button)
+ (wintaskbar)
+ (revealer
+ :reveal false
+ :transition "slideright"
+ (label
+ :text "${lang_ibus.name_abbr} ${activews} ${mcover.source} ${mname_win.title} ${net.level} ${brightness.level} ${wsjsona[0][0].at} ${wsjsonb[0][0].at}" ; Dummy to keep listeners active
+ )
+ )
+ )
+ )
+ )
+ (box
+
+ )
+ (box
+ :halign "end"
+ :space-evenly false
+ (wintray-button)
+ (winlang)
+ (winactions)
+ (windate)
+ )
+ )
+)
+
+(defwindow bar
+ :stacking "fg"
+ :wm-ignore true
+ :monitor 0
+ :namespace "bar"
+ :geometry (geometry
+ :x "0%"
+ :y "0%"
+ :width "100%"
+ :height "69px"
+ :anchor "top center"
+ )
+ :exclusive false
+ (bar)
+)
+
+(defwindow winbar
+ :stacking "fg"
+ :monitor 0
+ :exclusive true
+ :geometry (geometry
+ :x "0%"
+ :y "0%"
+ :width "100%"
+ ; :height "53px"
+ ; :width "53px"
+ ; :height "100%"
+ :anchor "bottom center"
+ )
+ ; :stacking "fg"
+ :exclusive false
+ (winbar)
+)
+
diff --git a/early/.config/eww/eww_covers/cover_art_default b/early/.config/eww/eww_covers/cover_art_default
new file mode 100644
index 000000000..f607b5ae0
Binary files /dev/null and b/early/.config/eww/eww_covers/cover_art_default differ
diff --git a/early/.config/eww/eww_covers/cover_art_error b/early/.config/eww/eww_covers/cover_art_error
new file mode 100755
index 000000000..09715b548
Binary files /dev/null and b/early/.config/eww/eww_covers/cover_art_error differ
diff --git a/early/.config/eww/images/icons/discord.png b/early/.config/eww/images/icons/discord.png
new file mode 100755
index 000000000..149f06417
Binary files /dev/null and b/early/.config/eww/images/icons/discord.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Add.png b/early/.config/eww/images/icons/grayscale/Grayscale_Add.png
new file mode 100755
index 000000000..4872a7a06
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Add.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Backup.png b/early/.config/eww/images/icons/grayscale/Grayscale_Backup.png
new file mode 100755
index 000000000..92ae6dbc4
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Backup.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Calculator.png b/early/.config/eww/images/icons/grayscale/Grayscale_Calculator.png
new file mode 100755
index 000000000..5b19eae58
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Calculator.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Camera.png b/early/.config/eww/images/icons/grayscale/Grayscale_Camera.png
new file mode 100755
index 000000000..d1529ee0d
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Camera.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Corner.png b/early/.config/eww/images/icons/grayscale/Grayscale_Corner.png
new file mode 100755
index 000000000..5c257b63c
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Corner.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Crosshair.png b/early/.config/eww/images/icons/grayscale/Grayscale_Crosshair.png
new file mode 100755
index 000000000..aa6075f43
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Crosshair.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_DocsWhite.png b/early/.config/eww/images/icons/grayscale/Grayscale_DocsWhite.png
new file mode 100755
index 000000000..19f80d3e6
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_DocsWhite.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Docscan.png b/early/.config/eww/images/icons/grayscale/Grayscale_Docscan.png
new file mode 100755
index 000000000..8b3c244c6
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Docscan.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Document.png b/early/.config/eww/images/icons/grayscale/Grayscale_Document.png
new file mode 100755
index 000000000..799cb6db3
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Document.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Document_alt.png b/early/.config/eww/images/icons/grayscale/Grayscale_Document_alt.png
new file mode 100755
index 000000000..a71e604f9
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Document_alt.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_DownloadLinage.png b/early/.config/eww/images/icons/grayscale/Grayscale_DownloadLinage.png
new file mode 100755
index 000000000..066c150bc
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_DownloadLinage.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_FilesPurple.png b/early/.config/eww/images/icons/grayscale/Grayscale_FilesPurple.png
new file mode 100755
index 000000000..c85f21937
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_FilesPurple.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_FilesRed.png b/early/.config/eww/images/icons/grayscale/Grayscale_FilesRed.png
new file mode 100755
index 000000000..51707a0cd
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_FilesRed.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_FilesYellow.png b/early/.config/eww/images/icons/grayscale/Grayscale_FilesYellow.png
new file mode 100755
index 000000000..5bdac70cc
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_FilesYellow.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_FolderImageRed.png b/early/.config/eww/images/icons/grayscale/Grayscale_FolderImageRed.png
new file mode 100755
index 000000000..0f50a9f4b
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_FolderImageRed.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_FolderRoot.png b/early/.config/eww/images/icons/grayscale/Grayscale_FolderRoot.png
new file mode 100755
index 000000000..c5e37a327
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_FolderRoot.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Github.png b/early/.config/eww/images/icons/grayscale/Grayscale_Github.png
new file mode 100755
index 000000000..7608d95fd
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Github.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_GoogleEarth.png b/early/.config/eww/images/icons/grayscale/Grayscale_GoogleEarth.png
new file mode 100755
index 000000000..3b0f86446
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_GoogleEarth.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Linage17Settings.png b/early/.config/eww/images/icons/grayscale/Grayscale_Linage17Settings.png
new file mode 100755
index 000000000..05178be8b
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Linage17Settings.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_LinageAudioFX.png b/early/.config/eww/images/icons/grayscale/Grayscale_LinageAudioFX.png
new file mode 100755
index 000000000..df7091791
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_LinageAudioFX.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_LinageBrowser.png b/early/.config/eww/images/icons/grayscale/Grayscale_LinageBrowser.png
new file mode 100755
index 000000000..16cc3f036
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_LinageBrowser.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_LinageCalculator.png b/early/.config/eww/images/icons/grayscale/Grayscale_LinageCalculator.png
new file mode 100755
index 000000000..38ecf2608
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_LinageCalculator.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_LinageClock.png b/early/.config/eww/images/icons/grayscale/Grayscale_LinageClock.png
new file mode 100755
index 000000000..12f67b1dd
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_LinageClock.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_LinageFiles.png b/early/.config/eww/images/icons/grayscale/Grayscale_LinageFiles.png
new file mode 100755
index 000000000..554030dd1
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_LinageFiles.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_LinageMusic.png b/early/.config/eww/images/icons/grayscale/Grayscale_LinageMusic.png
new file mode 100755
index 000000000..6546f877d
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_LinageMusic.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_LinageRecorder.png b/early/.config/eww/images/icons/grayscale/Grayscale_LinageRecorder.png
new file mode 100755
index 000000000..ef278196d
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_LinageRecorder.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_LinageSettings.png b/early/.config/eww/images/icons/grayscale/Grayscale_LinageSettings.png
new file mode 100755
index 000000000..918de402a
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_LinageSettings.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_LinageSettingsAnother.png b/early/.config/eww/images/icons/grayscale/Grayscale_LinageSettingsAnother.png
new file mode 100755
index 000000000..918de402a
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_LinageSettingsAnother.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_LinageTerminal.png b/early/.config/eww/images/icons/grayscale/Grayscale_LinageTerminal.png
new file mode 100755
index 000000000..a1066c33c
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_LinageTerminal.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_LinageTerminalDark.png b/early/.config/eww/images/icons/grayscale/Grayscale_LinageTerminalDark.png
new file mode 100755
index 000000000..bdeed5d76
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_LinageTerminalDark.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_LinageTrack.png b/early/.config/eww/images/icons/grayscale/Grayscale_LinageTrack.png
new file mode 100755
index 000000000..c27de887b
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_LinageTrack.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_MusicEdit.png b/early/.config/eww/images/icons/grayscale/Grayscale_MusicEdit.png
new file mode 100755
index 000000000..5a2894496
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_MusicEdit.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Nvidia.png b/early/.config/eww/images/icons/grayscale/Grayscale_Nvidia.png
new file mode 100755
index 000000000..fb2e3c717
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Nvidia.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Radio.png b/early/.config/eww/images/icons/grayscale/Grayscale_Radio.png
new file mode 100755
index 000000000..64052ac35
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Radio.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Root.png b/early/.config/eww/images/icons/grayscale/Grayscale_Root.png
new file mode 100755
index 000000000..b765d03e6
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Root.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Speedtest.png b/early/.config/eww/images/icons/grayscale/Grayscale_Speedtest.png
new file mode 100755
index 000000000..c3d283bb9
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Speedtest.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Stats.png b/early/.config/eww/images/icons/grayscale/Grayscale_Stats.png
new file mode 100755
index 000000000..7475e4a68
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Stats.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Steam.png b/early/.config/eww/images/icons/grayscale/Grayscale_Steam.png
new file mode 100755
index 000000000..8d562e730
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Steam.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Tor.png b/early/.config/eww/images/icons/grayscale/Grayscale_Tor.png
new file mode 100755
index 000000000..76cae8227
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Tor.png differ
diff --git a/early/.config/eww/images/icons/grayscale/Grayscale_Weather.png b/early/.config/eww/images/icons/grayscale/Grayscale_Weather.png
new file mode 100755
index 000000000..6b6af20f6
Binary files /dev/null and b/early/.config/eww/images/icons/grayscale/Grayscale_Weather.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/beatmaps.png b/early/.config/eww/images/icons/lazer_icons/beatmaps.png
new file mode 100755
index 000000000..6790f713c
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/beatmaps.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/changelog.png b/early/.config/eww/images/icons/lazer_icons/changelog.png
new file mode 100755
index 000000000..33bad1bee
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/changelog.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/dashboard.png b/early/.config/eww/images/icons/lazer_icons/dashboard.png
new file mode 100755
index 000000000..d3bd65852
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/dashboard.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/dashboard_hover.png b/early/.config/eww/images/icons/lazer_icons/dashboard_hover.png
new file mode 100755
index 000000000..5a444383d
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/dashboard_hover.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/forum.png b/early/.config/eww/images/icons/lazer_icons/forum.png
new file mode 100755
index 000000000..cbf58770b
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/forum.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/music.png b/early/.config/eww/images/icons/lazer_icons/music.png
new file mode 100755
index 000000000..2c3898f7c
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/music.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/music_hover.png b/early/.config/eww/images/icons/lazer_icons/music_hover.png
new file mode 100755
index 000000000..942a6521d
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/music_hover.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/music_hover_reference.png b/early/.config/eww/images/icons/lazer_icons/music_hover_reference.png
new file mode 100755
index 000000000..369f8cdce
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/music_hover_reference.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/music_reference.png b/early/.config/eww/images/icons/lazer_icons/music_reference.png
new file mode 100755
index 000000000..2ee032bba
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/music_reference.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/news.png b/early/.config/eww/images/icons/lazer_icons/news.png
new file mode 100755
index 000000000..c07bd0c1f
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/news.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/notifications.png b/early/.config/eww/images/icons/lazer_icons/notifications.png
new file mode 100755
index 000000000..50ea3d40b
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/notifications.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/notifications_hover.png b/early/.config/eww/images/icons/lazer_icons/notifications_hover.png
new file mode 100755
index 000000000..0ef188ca1
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/notifications_hover.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/options.png b/early/.config/eww/images/icons/lazer_icons/options.png
new file mode 100755
index 000000000..cec497cd9
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/options.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/options_hover.png b/early/.config/eww/images/icons/lazer_icons/options_hover.png
new file mode 100755
index 000000000..42439b642
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/options_hover.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/rankings.png b/early/.config/eww/images/icons/lazer_icons/rankings.png
new file mode 100755
index 000000000..d7210d3d0
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/rankings.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/transparent/beatmappacks.png b/early/.config/eww/images/icons/lazer_icons/transparent/beatmappacks.png
new file mode 100755
index 000000000..29722cb97
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/transparent/beatmappacks.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/transparent/beatmaps.png b/early/.config/eww/images/icons/lazer_icons/transparent/beatmaps.png
new file mode 100755
index 000000000..4fea440a3
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/transparent/beatmaps.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/transparent/changelog.png b/early/.config/eww/images/icons/lazer_icons/transparent/changelog.png
new file mode 100755
index 000000000..1f2f16c67
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/transparent/changelog.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/transparent/chat.png b/early/.config/eww/images/icons/lazer_icons/transparent/chat.png
new file mode 100755
index 000000000..d823c584d
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/transparent/chat.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/transparent/contests.png b/early/.config/eww/images/icons/lazer_icons/transparent/contests.png
new file mode 100755
index 000000000..994d5632c
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/transparent/contests.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/transparent/forum.png b/early/.config/eww/images/icons/lazer_icons/transparent/forum.png
new file mode 100755
index 000000000..d39b6fe21
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/transparent/forum.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/transparent/home.png b/early/.config/eww/images/icons/lazer_icons/transparent/home.png
new file mode 100755
index 000000000..cfd881e46
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/transparent/home.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/transparent/news.png b/early/.config/eww/images/icons/lazer_icons/transparent/news.png
new file mode 100755
index 000000000..05e5d4dc7
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/transparent/news.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/transparent/rankings.png b/early/.config/eww/images/icons/lazer_icons/transparent/rankings.png
new file mode 100755
index 000000000..04191ae5b
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/transparent/rankings.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/transparent/search.png b/early/.config/eww/images/icons/lazer_icons/transparent/search.png
new file mode 100755
index 000000000..a061f307a
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/transparent/search.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/transparent/settings.png b/early/.config/eww/images/icons/lazer_icons/transparent/settings.png
new file mode 100755
index 000000000..a74388e9a
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/transparent/settings.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/transparent/store.png b/early/.config/eww/images/icons/lazer_icons/transparent/store.png
new file mode 100755
index 000000000..b6c02fb37
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/transparent/store.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/transparent/tournaments.png b/early/.config/eww/images/icons/lazer_icons/transparent/tournaments.png
new file mode 100755
index 000000000..de1a29bda
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/transparent/tournaments.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/transparent/wiki.png b/early/.config/eww/images/icons/lazer_icons/transparent/wiki.png
new file mode 100755
index 000000000..405e287a5
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/transparent/wiki.png differ
diff --git a/early/.config/eww/images/icons/lazer_icons/wiki.png b/early/.config/eww/images/icons/lazer_icons/wiki.png
new file mode 100755
index 000000000..6d6c7ba91
Binary files /dev/null and b/early/.config/eww/images/icons/lazer_icons/wiki.png differ
diff --git a/early/.config/eww/images/icons/win-clicked.png b/early/.config/eww/images/icons/win-clicked.png
new file mode 100755
index 000000000..a65486725
Binary files /dev/null and b/early/.config/eww/images/icons/win-clicked.png differ
diff --git a/early/.config/eww/images/icons/win-inactive.png b/early/.config/eww/images/icons/win-inactive.png
new file mode 100755
index 000000000..37328e3e5
Binary files /dev/null and b/early/.config/eww/images/icons/win-inactive.png differ
diff --git a/early/.config/eww/images/icons/win.png b/early/.config/eww/images/icons/win.png
new file mode 100755
index 000000000..88b1a19de
Binary files /dev/null and b/early/.config/eww/images/icons/win.png differ
diff --git a/early/.config/eww/images/icons/winnews-clicked.png b/early/.config/eww/images/icons/winnews-clicked.png
new file mode 100755
index 000000000..2605b1741
Binary files /dev/null and b/early/.config/eww/images/icons/winnews-clicked.png differ
diff --git a/early/.config/eww/images/icons/winnews.png b/early/.config/eww/images/icons/winnews.png
new file mode 100755
index 000000000..7829fd79e
Binary files /dev/null and b/early/.config/eww/images/icons/winnews.png differ
diff --git a/early/.config/eww/images/icons/wintaskview-clicked.png b/early/.config/eww/images/icons/wintaskview-clicked.png
new file mode 100644
index 000000000..7600a58a6
Binary files /dev/null and b/early/.config/eww/images/icons/wintaskview-clicked.png differ
diff --git a/early/.config/eww/images/icons/wintaskview.png b/early/.config/eww/images/icons/wintaskview.png
new file mode 100755
index 000000000..89847d551
Binary files /dev/null and b/early/.config/eww/images/icons/wintaskview.png differ
diff --git a/early/.config/eww/images/pictures/banner_left b/early/.config/eww/images/pictures/banner_left
new file mode 100755
index 000000000..0989c19ea
Binary files /dev/null and b/early/.config/eww/images/pictures/banner_left differ
diff --git a/early/.config/eww/images/pictures/banner_right b/early/.config/eww/images/pictures/banner_right
new file mode 100755
index 000000000..faa9a0c09
Binary files /dev/null and b/early/.config/eww/images/pictures/banner_right differ
diff --git a/early/.config/eww/images/pictures/qr_aur.png b/early/.config/eww/images/pictures/qr_aur.png
new file mode 100644
index 000000000..23e4efbdb
Binary files /dev/null and b/early/.config/eww/images/pictures/qr_aur.png differ
diff --git a/early/.config/eww/images/svg/__mode_light_dark.txt b/early/.config/eww/images/svg/__mode_light_dark.txt
new file mode 100755
index 000000000..e69de29bb
diff --git a/early/.config/eww/images/svg/airplane.svg b/early/.config/eww/images/svg/airplane.svg
new file mode 100755
index 000000000..11b593e1f
--- /dev/null
+++ b/early/.config/eww/images/svg/airplane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/app.svg b/early/.config/eww/images/svg/app.svg
new file mode 100755
index 000000000..64e2d1378
--- /dev/null
+++ b/early/.config/eww/images/svg/app.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/appgeneric.svg b/early/.config/eww/images/svg/appgeneric.svg
new file mode 100755
index 000000000..c7456466c
--- /dev/null
+++ b/early/.config/eww/images/svg/appgeneric.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/applycolor.svg b/early/.config/eww/images/svg/applycolor.svg
new file mode 100755
index 000000000..07b2f25de
--- /dev/null
+++ b/early/.config/eww/images/svg/applycolor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bat0.svg b/early/.config/eww/images/svg/bat0.svg
new file mode 100755
index 000000000..7fe10e0eb
--- /dev/null
+++ b/early/.config/eww/images/svg/bat0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bat1.svg b/early/.config/eww/images/svg/bat1.svg
new file mode 100755
index 000000000..3e41578b6
--- /dev/null
+++ b/early/.config/eww/images/svg/bat1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bat10.svg b/early/.config/eww/images/svg/bat10.svg
new file mode 100755
index 000000000..5c2739e21
--- /dev/null
+++ b/early/.config/eww/images/svg/bat10.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bat2.svg b/early/.config/eww/images/svg/bat2.svg
new file mode 100755
index 000000000..4b73e100f
--- /dev/null
+++ b/early/.config/eww/images/svg/bat2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bat3.svg b/early/.config/eww/images/svg/bat3.svg
new file mode 100755
index 000000000..86b718597
--- /dev/null
+++ b/early/.config/eww/images/svg/bat3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bat4.svg b/early/.config/eww/images/svg/bat4.svg
new file mode 100755
index 000000000..ff67b8500
--- /dev/null
+++ b/early/.config/eww/images/svg/bat4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bat5.svg b/early/.config/eww/images/svg/bat5.svg
new file mode 100755
index 000000000..994659647
--- /dev/null
+++ b/early/.config/eww/images/svg/bat5.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bat6.svg b/early/.config/eww/images/svg/bat6.svg
new file mode 100755
index 000000000..ee151c925
--- /dev/null
+++ b/early/.config/eww/images/svg/bat6.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bat7.svg b/early/.config/eww/images/svg/bat7.svg
new file mode 100755
index 000000000..d441ac926
--- /dev/null
+++ b/early/.config/eww/images/svg/bat7.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bat8.svg b/early/.config/eww/images/svg/bat8.svg
new file mode 100755
index 000000000..e4220079f
--- /dev/null
+++ b/early/.config/eww/images/svg/bat8.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bat9.svg b/early/.config/eww/images/svg/bat9.svg
new file mode 100755
index 000000000..9c32b2e6e
--- /dev/null
+++ b/early/.config/eww/images/svg/bat9.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/batcharge.svg b/early/.config/eww/images/svg/batcharge.svg
new file mode 100755
index 000000000..61e66bb8a
--- /dev/null
+++ b/early/.config/eww/images/svg/batcharge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/beatmappacks.svg b/early/.config/eww/images/svg/beatmappacks.svg
new file mode 100755
index 000000000..1cfed8c97
--- /dev/null
+++ b/early/.config/eww/images/svg/beatmappacks.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/beatmaps.svg b/early/.config/eww/images/svg/beatmaps.svg
new file mode 100755
index 000000000..bf32972dc
--- /dev/null
+++ b/early/.config/eww/images/svg/beatmaps.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bluetooth.svg b/early/.config/eww/images/svg/bluetooth.svg
new file mode 100755
index 000000000..a07d4ea33
--- /dev/null
+++ b/early/.config/eww/images/svg/bluetooth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bluetoothfalse.svg b/early/.config/eww/images/svg/bluetoothfalse.svg
new file mode 100755
index 000000000..2c8c3b8ff
--- /dev/null
+++ b/early/.config/eww/images/svg/bluetoothfalse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bluetoothtrue.svg b/early/.config/eww/images/svg/bluetoothtrue.svg
new file mode 100755
index 000000000..f705be95e
--- /dev/null
+++ b/early/.config/eww/images/svg/bluetoothtrue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/bright0.svg b/early/.config/eww/images/svg/bright0.svg
new file mode 100755
index 000000000..7fe10e0eb
--- /dev/null
+++ b/early/.config/eww/images/svg/bright0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/brightness.svg b/early/.config/eww/images/svg/brightness.svg
new file mode 100755
index 000000000..eb68c1859
--- /dev/null
+++ b/early/.config/eww/images/svg/brightness.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/calculator.svg b/early/.config/eww/images/svg/calculator.svg
new file mode 100755
index 000000000..03322ce39
--- /dev/null
+++ b/early/.config/eww/images/svg/calculator.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/caretdown.svg b/early/.config/eww/images/svg/caretdown.svg
new file mode 100755
index 000000000..983cf2eab
--- /dev/null
+++ b/early/.config/eww/images/svg/caretdown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/caretup.svg b/early/.config/eww/images/svg/caretup.svg
new file mode 100755
index 000000000..82236a6a2
--- /dev/null
+++ b/early/.config/eww/images/svg/caretup.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/changelog.svg b/early/.config/eww/images/svg/changelog.svg
new file mode 100755
index 000000000..9d6e39562
--- /dev/null
+++ b/early/.config/eww/images/svg/changelog.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/chat.svg b/early/.config/eww/images/svg/chat.svg
new file mode 100755
index 000000000..9876d2e85
--- /dev/null
+++ b/early/.config/eww/images/svg/chat.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/checkbox.svg b/early/.config/eww/images/svg/checkbox.svg
new file mode 100755
index 000000000..8de017a32
--- /dev/null
+++ b/early/.config/eww/images/svg/checkbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/checkbox_no.svg b/early/.config/eww/images/svg/checkbox_no.svg
new file mode 100755
index 000000000..7cf715419
--- /dev/null
+++ b/early/.config/eww/images/svg/checkbox_no.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/cog.svg b/early/.config/eww/images/svg/cog.svg
new file mode 100755
index 000000000..176f37680
--- /dev/null
+++ b/early/.config/eww/images/svg/cog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/color.scss b/early/.config/eww/images/svg/color.scss
new file mode 100755
index 000000000..d5bef1bc5
--- /dev/null
+++ b/early/.config/eww/images/svg/color.scss
@@ -0,0 +1 @@
+$colorbar: #d7e2ff;
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/color.txt b/early/.config/eww/images/svg/color.txt
new file mode 100755
index 000000000..bd3f7fb13
--- /dev/null
+++ b/early/.config/eww/images/svg/color.txt
@@ -0,0 +1 @@
+#d7e2ff
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/contests.svg b/early/.config/eww/images/svg/contests.svg
new file mode 100755
index 000000000..5c45ddf82
--- /dev/null
+++ b/early/.config/eww/images/svg/contests.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/copy.svg b/early/.config/eww/images/svg/copy.svg
new file mode 100755
index 000000000..c77000c87
--- /dev/null
+++ b/early/.config/eww/images/svg/copy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/airplane.svg b/early/.config/eww/images/svg/dark/airplane.svg
new file mode 100755
index 000000000..c289fd7cb
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/airplane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/app.svg b/early/.config/eww/images/svg/dark/app.svg
new file mode 100755
index 000000000..b2a2169f0
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/app.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/appgeneric.svg b/early/.config/eww/images/svg/dark/appgeneric.svg
new file mode 100755
index 000000000..70f378c96
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/appgeneric.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/applycolor.svg b/early/.config/eww/images/svg/dark/applycolor.svg
new file mode 100755
index 000000000..70d163583
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/applycolor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bat0.svg b/early/.config/eww/images/svg/dark/bat0.svg
new file mode 100755
index 000000000..5a4b54eaf
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bat0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bat1.svg b/early/.config/eww/images/svg/dark/bat1.svg
new file mode 100755
index 000000000..d0fee08cf
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bat1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bat10.svg b/early/.config/eww/images/svg/dark/bat10.svg
new file mode 100755
index 000000000..6518b5510
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bat10.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bat2.svg b/early/.config/eww/images/svg/dark/bat2.svg
new file mode 100755
index 000000000..359e89591
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bat2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bat3.svg b/early/.config/eww/images/svg/dark/bat3.svg
new file mode 100755
index 000000000..71d54b711
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bat3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bat4.svg b/early/.config/eww/images/svg/dark/bat4.svg
new file mode 100755
index 000000000..fccf41179
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bat4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bat5.svg b/early/.config/eww/images/svg/dark/bat5.svg
new file mode 100755
index 000000000..f038d856b
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bat5.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bat6.svg b/early/.config/eww/images/svg/dark/bat6.svg
new file mode 100755
index 000000000..1e78412ea
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bat6.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bat7.svg b/early/.config/eww/images/svg/dark/bat7.svg
new file mode 100755
index 000000000..e2ac822f8
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bat7.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bat8.svg b/early/.config/eww/images/svg/dark/bat8.svg
new file mode 100755
index 000000000..ab8433e94
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bat8.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bat9.svg b/early/.config/eww/images/svg/dark/bat9.svg
new file mode 100755
index 000000000..bbe514d7b
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bat9.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/batcharge.svg b/early/.config/eww/images/svg/dark/batcharge.svg
new file mode 100755
index 000000000..eb76029ba
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/batcharge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/beatmappacks.svg b/early/.config/eww/images/svg/dark/beatmappacks.svg
new file mode 100755
index 000000000..4f4bc4bd2
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/beatmappacks.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/beatmaps.svg b/early/.config/eww/images/svg/dark/beatmaps.svg
new file mode 100755
index 000000000..34aca1b69
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/beatmaps.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bluetooth.svg b/early/.config/eww/images/svg/dark/bluetooth.svg
new file mode 100755
index 000000000..3320f9394
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bluetooth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bluetoothfalse.svg b/early/.config/eww/images/svg/dark/bluetoothfalse.svg
new file mode 100755
index 000000000..50742113a
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bluetoothfalse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bluetoothtrue.svg b/early/.config/eww/images/svg/dark/bluetoothtrue.svg
new file mode 100755
index 000000000..a13c122a6
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bluetoothtrue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/bright0.svg b/early/.config/eww/images/svg/dark/bright0.svg
new file mode 100755
index 000000000..5a4b54eaf
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/bright0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/brightness.svg b/early/.config/eww/images/svg/dark/brightness.svg
new file mode 100755
index 000000000..7c9ded244
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/brightness.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/calculator.svg b/early/.config/eww/images/svg/dark/calculator.svg
new file mode 100755
index 000000000..0a8f53dd1
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/calculator.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/caretdown.svg b/early/.config/eww/images/svg/dark/caretdown.svg
new file mode 100755
index 000000000..75b3c59f0
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/caretdown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/caretup.svg b/early/.config/eww/images/svg/dark/caretup.svg
new file mode 100755
index 000000000..aecea9e57
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/caretup.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/changelog.svg b/early/.config/eww/images/svg/dark/changelog.svg
new file mode 100755
index 000000000..4d610ba10
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/changelog.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/chat.svg b/early/.config/eww/images/svg/dark/chat.svg
new file mode 100755
index 000000000..c0b632db2
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/chat.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/checkbox.svg b/early/.config/eww/images/svg/dark/checkbox.svg
new file mode 100755
index 000000000..dde43be39
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/checkbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/checkbox_no.svg b/early/.config/eww/images/svg/dark/checkbox_no.svg
new file mode 100755
index 000000000..773954a56
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/checkbox_no.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/cog.svg b/early/.config/eww/images/svg/dark/cog.svg
new file mode 100755
index 000000000..fd8990e30
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/cog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/color.scss b/early/.config/eww/images/svg/dark/color.scss
new file mode 100755
index 000000000..e96f7e758
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/color.scss
@@ -0,0 +1 @@
+$colorbar: white;
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/color.txt b/early/.config/eww/images/svg/dark/color.txt
new file mode 100755
index 000000000..65c27486f
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/color.txt
@@ -0,0 +1 @@
+white
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/contests.svg b/early/.config/eww/images/svg/dark/contests.svg
new file mode 100755
index 000000000..ee97f1e25
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/contests.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/copy.svg b/early/.config/eww/images/svg/dark/copy.svg
new file mode 100755
index 000000000..dfc96f75f
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/copy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/downarrow.svg b/early/.config/eww/images/svg/dark/downarrow.svg
new file mode 100755
index 000000000..8007c824d
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/downarrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/folderopen.svg b/early/.config/eww/images/svg/dark/folderopen.svg
new file mode 100755
index 000000000..7a13e37ce
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/folderopen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/forum.svg b/early/.config/eww/images/svg/dark/forum.svg
new file mode 100755
index 000000000..d498ef84e
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/forum.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/graph.svg b/early/.config/eww/images/svg/dark/graph.svg
new file mode 100755
index 000000000..dce5d1733
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/graph.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/home.svg b/early/.config/eww/images/svg/dark/home.svg
new file mode 100755
index 000000000..83014e4d2
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/home.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/icosahedron.svg b/early/.config/eww/images/svg/dark/icosahedron.svg
new file mode 100755
index 000000000..c73725b17
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/icosahedron.svg
@@ -0,0 +1,67 @@
+
+
+
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/linehorizontal.svg b/early/.config/eww/images/svg/dark/linehorizontal.svg
new file mode 100755
index 000000000..7d8af77a0
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/linehorizontal.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/linetransparent.svg b/early/.config/eww/images/svg/dark/linetransparent.svg
new file mode 100755
index 000000000..9be840a61
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/linetransparent.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/linevertical.svg b/early/.config/eww/images/svg/dark/linevertical.svg
new file mode 100755
index 000000000..1c823058c
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/linevertical.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/moon.svg b/early/.config/eww/images/svg/dark/moon.svg
new file mode 100755
index 000000000..83a0417d9
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/news.svg b/early/.config/eww/images/svg/dark/news.svg
new file mode 100755
index 000000000..3368f9490
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/news.svg
@@ -0,0 +1,18 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/night.svg b/early/.config/eww/images/svg/dark/night.svg
new file mode 100755
index 000000000..1e0aacb7e
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/night.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/notif.svg b/early/.config/eww/images/svg/dark/notif.svg
new file mode 100755
index 000000000..27b31c32a
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/notif.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/notifsnooze.svg b/early/.config/eww/images/svg/dark/notifsnooze.svg
new file mode 100755
index 000000000..14b47c028
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/notifsnooze.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/open.svg b/early/.config/eww/images/svg/dark/open.svg
new file mode 100755
index 000000000..f2d77ca1b
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/power.svg b/early/.config/eww/images/svg/dark/power.svg
new file mode 100755
index 000000000..ea17b7eeb
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/power.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/protocol.svg b/early/.config/eww/images/svg/dark/protocol.svg
new file mode 100755
index 000000000..716cacbb5
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/protocol.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/radiobutton.svg b/early/.config/eww/images/svg/dark/radiobutton.svg
new file mode 100755
index 000000000..1ed6e36b2
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/radiobutton.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/rankings.svg b/early/.config/eww/images/svg/dark/rankings.svg
new file mode 100755
index 000000000..4534694db
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/rankings.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/reset.svg b/early/.config/eww/images/svg/dark/reset.svg
new file mode 100755
index 000000000..1d866ae5c
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/reset.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/rightarrow.svg b/early/.config/eww/images/svg/dark/rightarrow.svg
new file mode 100755
index 000000000..6fd1d98eb
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/rightarrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/root.svg b/early/.config/eww/images/svg/dark/root.svg
new file mode 100755
index 000000000..306fd7f39
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/root.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/search-fluent.svg b/early/.config/eww/images/svg/dark/search-fluent.svg
new file mode 100755
index 000000000..d06ad1ac9
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/search-fluent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/search.svg b/early/.config/eww/images/svg/dark/search.svg
new file mode 100755
index 000000000..4542bf491
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/search.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/settings.svg b/early/.config/eww/images/svg/dark/settings.svg
new file mode 100755
index 000000000..c69c6a3a6
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/settings.svg
@@ -0,0 +1,23 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/store.svg b/early/.config/eww/images/svg/dark/store.svg
new file mode 100755
index 000000000..e4ac6edd5
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/store.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/tournaments.svg b/early/.config/eww/images/svg/dark/tournaments.svg
new file mode 100755
index 000000000..cd0f69268
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/tournaments.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/uparrow.svg b/early/.config/eww/images/svg/dark/uparrow.svg
new file mode 100755
index 000000000..5ea8ae99a
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/uparrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/user.svg b/early/.config/eww/images/svg/dark/user.svg
new file mode 100755
index 000000000..5127e451a
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/vol0.svg b/early/.config/eww/images/svg/dark/vol0.svg
new file mode 100755
index 000000000..036a79126
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/vol0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/vol1.svg b/early/.config/eww/images/svg/dark/vol1.svg
new file mode 100755
index 000000000..96d5570a5
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/vol1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/vol2.svg b/early/.config/eww/images/svg/dark/vol2.svg
new file mode 100755
index 000000000..a090e3c39
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/vol2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/vol3.svg b/early/.config/eww/images/svg/dark/vol3.svg
new file mode 100755
index 000000000..a090e3c39
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/vol3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/volmute.svg b/early/.config/eww/images/svg/dark/volmute.svg
new file mode 100755
index 000000000..474a67cb0
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/volmute.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/wifi.svg b/early/.config/eww/images/svg/dark/wifi.svg
new file mode 100755
index 000000000..bd7500be3
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/wifi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/wifi1.svg b/early/.config/eww/images/svg/dark/wifi1.svg
new file mode 100755
index 000000000..e77cb492f
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/wifi1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/wifi2.svg b/early/.config/eww/images/svg/dark/wifi2.svg
new file mode 100755
index 000000000..9bd4c1127
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/wifi2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/wifi3.svg b/early/.config/eww/images/svg/dark/wifi3.svg
new file mode 100755
index 000000000..15147e602
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/wifi3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/wifi4.svg b/early/.config/eww/images/svg/dark/wifi4.svg
new file mode 100755
index 000000000..360b10868
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/wifi4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/dark/wiki.svg b/early/.config/eww/images/svg/dark/wiki.svg
new file mode 100755
index 000000000..a2d8358b6
--- /dev/null
+++ b/early/.config/eww/images/svg/dark/wiki.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/downarrow.svg b/early/.config/eww/images/svg/downarrow.svg
new file mode 100755
index 000000000..c431b25a2
--- /dev/null
+++ b/early/.config/eww/images/svg/downarrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/folderopen.svg b/early/.config/eww/images/svg/folderopen.svg
new file mode 100755
index 000000000..b2ecc8c55
--- /dev/null
+++ b/early/.config/eww/images/svg/folderopen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/forum.svg b/early/.config/eww/images/svg/forum.svg
new file mode 100755
index 000000000..7bf9fd29c
--- /dev/null
+++ b/early/.config/eww/images/svg/forum.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/graph.svg b/early/.config/eww/images/svg/graph.svg
new file mode 100755
index 000000000..b67cd95d4
--- /dev/null
+++ b/early/.config/eww/images/svg/graph.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/home.svg b/early/.config/eww/images/svg/home.svg
new file mode 100755
index 000000000..0d4a85f53
--- /dev/null
+++ b/early/.config/eww/images/svg/home.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/icosahedron.svg b/early/.config/eww/images/svg/icosahedron.svg
new file mode 100755
index 000000000..e0f921696
--- /dev/null
+++ b/early/.config/eww/images/svg/icosahedron.svg
@@ -0,0 +1,67 @@
+
+
+
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/airplane.svg b/early/.config/eww/images/svg/light/airplane.svg
new file mode 100755
index 000000000..7d16cd031
--- /dev/null
+++ b/early/.config/eww/images/svg/light/airplane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/app.svg b/early/.config/eww/images/svg/light/app.svg
new file mode 100755
index 000000000..ce93fdea2
--- /dev/null
+++ b/early/.config/eww/images/svg/light/app.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/appgeneric.svg b/early/.config/eww/images/svg/light/appgeneric.svg
new file mode 100755
index 000000000..251cac6bd
--- /dev/null
+++ b/early/.config/eww/images/svg/light/appgeneric.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/applycolor.svg b/early/.config/eww/images/svg/light/applycolor.svg
new file mode 100755
index 000000000..695583a97
--- /dev/null
+++ b/early/.config/eww/images/svg/light/applycolor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/bat0.svg b/early/.config/eww/images/svg/light/bat0.svg
new file mode 100755
index 000000000..9bcffe06d
--- /dev/null
+++ b/early/.config/eww/images/svg/light/bat0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/bat1.svg b/early/.config/eww/images/svg/light/bat1.svg
new file mode 100755
index 000000000..c00e2b58d
--- /dev/null
+++ b/early/.config/eww/images/svg/light/bat1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/bat10.svg b/early/.config/eww/images/svg/light/bat10.svg
new file mode 100755
index 000000000..80d559853
--- /dev/null
+++ b/early/.config/eww/images/svg/light/bat10.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/bat2.svg b/early/.config/eww/images/svg/light/bat2.svg
new file mode 100755
index 000000000..9a912d0bd
--- /dev/null
+++ b/early/.config/eww/images/svg/light/bat2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/bat3.svg b/early/.config/eww/images/svg/light/bat3.svg
new file mode 100755
index 000000000..edc5afece
--- /dev/null
+++ b/early/.config/eww/images/svg/light/bat3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/bat4.svg b/early/.config/eww/images/svg/light/bat4.svg
new file mode 100755
index 000000000..05b2c815b
--- /dev/null
+++ b/early/.config/eww/images/svg/light/bat4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/bat5.svg b/early/.config/eww/images/svg/light/bat5.svg
new file mode 100755
index 000000000..287e71cb4
--- /dev/null
+++ b/early/.config/eww/images/svg/light/bat5.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/bat6.svg b/early/.config/eww/images/svg/light/bat6.svg
new file mode 100755
index 000000000..c6c2d92d2
--- /dev/null
+++ b/early/.config/eww/images/svg/light/bat6.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/bat7.svg b/early/.config/eww/images/svg/light/bat7.svg
new file mode 100755
index 000000000..c3dd369a6
--- /dev/null
+++ b/early/.config/eww/images/svg/light/bat7.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/bat8.svg b/early/.config/eww/images/svg/light/bat8.svg
new file mode 100755
index 000000000..b2f433242
--- /dev/null
+++ b/early/.config/eww/images/svg/light/bat8.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/bat9.svg b/early/.config/eww/images/svg/light/bat9.svg
new file mode 100755
index 000000000..7b3c8ec77
--- /dev/null
+++ b/early/.config/eww/images/svg/light/bat9.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/batcharge.svg b/early/.config/eww/images/svg/light/batcharge.svg
new file mode 100755
index 000000000..55be957f9
--- /dev/null
+++ b/early/.config/eww/images/svg/light/batcharge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/beatmappacks.svg b/early/.config/eww/images/svg/light/beatmappacks.svg
new file mode 100755
index 000000000..a37a07de5
--- /dev/null
+++ b/early/.config/eww/images/svg/light/beatmappacks.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/beatmaps.svg b/early/.config/eww/images/svg/light/beatmaps.svg
new file mode 100755
index 000000000..5c8bcedbd
--- /dev/null
+++ b/early/.config/eww/images/svg/light/beatmaps.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/bluetooth.svg b/early/.config/eww/images/svg/light/bluetooth.svg
new file mode 100755
index 000000000..91a7988a8
--- /dev/null
+++ b/early/.config/eww/images/svg/light/bluetooth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/bluetoothfalse.svg b/early/.config/eww/images/svg/light/bluetoothfalse.svg
new file mode 100755
index 000000000..1e01de0af
--- /dev/null
+++ b/early/.config/eww/images/svg/light/bluetoothfalse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/bluetoothtrue.svg b/early/.config/eww/images/svg/light/bluetoothtrue.svg
new file mode 100755
index 000000000..34f93fb9f
--- /dev/null
+++ b/early/.config/eww/images/svg/light/bluetoothtrue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/brightness.svg b/early/.config/eww/images/svg/light/brightness.svg
new file mode 100755
index 000000000..3a3704d3c
--- /dev/null
+++ b/early/.config/eww/images/svg/light/brightness.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/calculator.svg b/early/.config/eww/images/svg/light/calculator.svg
new file mode 100755
index 000000000..d1a6a8e2a
--- /dev/null
+++ b/early/.config/eww/images/svg/light/calculator.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/caretdown.svg b/early/.config/eww/images/svg/light/caretdown.svg
new file mode 100755
index 000000000..d4a1baf5f
--- /dev/null
+++ b/early/.config/eww/images/svg/light/caretdown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/caretup.svg b/early/.config/eww/images/svg/light/caretup.svg
new file mode 100755
index 000000000..d316a3a52
--- /dev/null
+++ b/early/.config/eww/images/svg/light/caretup.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/changelog.svg b/early/.config/eww/images/svg/light/changelog.svg
new file mode 100755
index 000000000..bb55ed079
--- /dev/null
+++ b/early/.config/eww/images/svg/light/changelog.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/chat.svg b/early/.config/eww/images/svg/light/chat.svg
new file mode 100755
index 000000000..6f3a9e386
--- /dev/null
+++ b/early/.config/eww/images/svg/light/chat.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/checkbox.svg b/early/.config/eww/images/svg/light/checkbox.svg
new file mode 100755
index 000000000..931aef1e9
--- /dev/null
+++ b/early/.config/eww/images/svg/light/checkbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/checkbox_no.svg b/early/.config/eww/images/svg/light/checkbox_no.svg
new file mode 100755
index 000000000..dee077c1a
--- /dev/null
+++ b/early/.config/eww/images/svg/light/checkbox_no.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/cog.svg b/early/.config/eww/images/svg/light/cog.svg
new file mode 100755
index 000000000..fe00d1b58
--- /dev/null
+++ b/early/.config/eww/images/svg/light/cog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/color.scss b/early/.config/eww/images/svg/light/color.scss
new file mode 100755
index 000000000..dd580d4ee
--- /dev/null
+++ b/early/.config/eww/images/svg/light/color.scss
@@ -0,0 +1 @@
+$colorbar: #000000;
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/color.txt b/early/.config/eww/images/svg/light/color.txt
new file mode 100755
index 000000000..c0abf774f
--- /dev/null
+++ b/early/.config/eww/images/svg/light/color.txt
@@ -0,0 +1 @@
+#000000
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/contests.svg b/early/.config/eww/images/svg/light/contests.svg
new file mode 100755
index 000000000..efd5b94e7
--- /dev/null
+++ b/early/.config/eww/images/svg/light/contests.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/copy.svg b/early/.config/eww/images/svg/light/copy.svg
new file mode 100755
index 000000000..646e5c69c
--- /dev/null
+++ b/early/.config/eww/images/svg/light/copy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/downarrow.svg b/early/.config/eww/images/svg/light/downarrow.svg
new file mode 100755
index 000000000..9a444f159
--- /dev/null
+++ b/early/.config/eww/images/svg/light/downarrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/folderopen.svg b/early/.config/eww/images/svg/light/folderopen.svg
new file mode 100755
index 000000000..b7516348d
--- /dev/null
+++ b/early/.config/eww/images/svg/light/folderopen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/forum.svg b/early/.config/eww/images/svg/light/forum.svg
new file mode 100755
index 000000000..f743df8e9
--- /dev/null
+++ b/early/.config/eww/images/svg/light/forum.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/graph.svg b/early/.config/eww/images/svg/light/graph.svg
new file mode 100755
index 000000000..68c74ee66
--- /dev/null
+++ b/early/.config/eww/images/svg/light/graph.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/home.svg b/early/.config/eww/images/svg/light/home.svg
new file mode 100755
index 000000000..50eb4a235
--- /dev/null
+++ b/early/.config/eww/images/svg/light/home.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/icosahedron.svg b/early/.config/eww/images/svg/light/icosahedron.svg
new file mode 100755
index 000000000..c443f2a56
--- /dev/null
+++ b/early/.config/eww/images/svg/light/icosahedron.svg
@@ -0,0 +1,67 @@
+
+
+
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/linehorizontal.svg b/early/.config/eww/images/svg/light/linehorizontal.svg
new file mode 100755
index 000000000..81ead10da
--- /dev/null
+++ b/early/.config/eww/images/svg/light/linehorizontal.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/linetransparent.svg b/early/.config/eww/images/svg/light/linetransparent.svg
new file mode 100755
index 000000000..9be840a61
--- /dev/null
+++ b/early/.config/eww/images/svg/light/linetransparent.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/linevertical.svg b/early/.config/eww/images/svg/light/linevertical.svg
new file mode 100755
index 000000000..ff695f8c9
--- /dev/null
+++ b/early/.config/eww/images/svg/light/linevertical.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/moon.svg b/early/.config/eww/images/svg/light/moon.svg
new file mode 100755
index 000000000..76b35d988
--- /dev/null
+++ b/early/.config/eww/images/svg/light/moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/news.svg b/early/.config/eww/images/svg/light/news.svg
new file mode 100755
index 000000000..057a49a14
--- /dev/null
+++ b/early/.config/eww/images/svg/light/news.svg
@@ -0,0 +1,18 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/night.svg b/early/.config/eww/images/svg/light/night.svg
new file mode 100755
index 000000000..053a6c46e
--- /dev/null
+++ b/early/.config/eww/images/svg/light/night.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/notif.svg b/early/.config/eww/images/svg/light/notif.svg
new file mode 100755
index 000000000..0903c73a0
--- /dev/null
+++ b/early/.config/eww/images/svg/light/notif.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/notifsnooze.svg b/early/.config/eww/images/svg/light/notifsnooze.svg
new file mode 100755
index 000000000..e6b23f29f
--- /dev/null
+++ b/early/.config/eww/images/svg/light/notifsnooze.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/open.svg b/early/.config/eww/images/svg/light/open.svg
new file mode 100755
index 000000000..5b1267935
--- /dev/null
+++ b/early/.config/eww/images/svg/light/open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/power.svg b/early/.config/eww/images/svg/light/power.svg
new file mode 100755
index 000000000..0d12dd7c0
--- /dev/null
+++ b/early/.config/eww/images/svg/light/power.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/protocol.svg b/early/.config/eww/images/svg/light/protocol.svg
new file mode 100755
index 000000000..92fe7abe2
--- /dev/null
+++ b/early/.config/eww/images/svg/light/protocol.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/radiobutton.svg b/early/.config/eww/images/svg/light/radiobutton.svg
new file mode 100755
index 000000000..80513fb32
--- /dev/null
+++ b/early/.config/eww/images/svg/light/radiobutton.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/rankings.svg b/early/.config/eww/images/svg/light/rankings.svg
new file mode 100755
index 000000000..9b322c401
--- /dev/null
+++ b/early/.config/eww/images/svg/light/rankings.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/reset.svg b/early/.config/eww/images/svg/light/reset.svg
new file mode 100755
index 000000000..c9cdbcd84
--- /dev/null
+++ b/early/.config/eww/images/svg/light/reset.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/rightarrow.svg b/early/.config/eww/images/svg/light/rightarrow.svg
new file mode 100755
index 000000000..4bfb1349b
--- /dev/null
+++ b/early/.config/eww/images/svg/light/rightarrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/root.svg b/early/.config/eww/images/svg/light/root.svg
new file mode 100755
index 000000000..2dedab277
--- /dev/null
+++ b/early/.config/eww/images/svg/light/root.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/search-fluent.svg b/early/.config/eww/images/svg/light/search-fluent.svg
new file mode 100755
index 000000000..bbcd5f5b4
--- /dev/null
+++ b/early/.config/eww/images/svg/light/search-fluent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/search.svg b/early/.config/eww/images/svg/light/search.svg
new file mode 100755
index 000000000..cf0ea4678
--- /dev/null
+++ b/early/.config/eww/images/svg/light/search.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/settings.svg b/early/.config/eww/images/svg/light/settings.svg
new file mode 100755
index 000000000..c8e51e41e
--- /dev/null
+++ b/early/.config/eww/images/svg/light/settings.svg
@@ -0,0 +1,23 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/store.svg b/early/.config/eww/images/svg/light/store.svg
new file mode 100755
index 000000000..0e8b78cec
--- /dev/null
+++ b/early/.config/eww/images/svg/light/store.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/tournaments.svg b/early/.config/eww/images/svg/light/tournaments.svg
new file mode 100755
index 000000000..cc0e1a95f
--- /dev/null
+++ b/early/.config/eww/images/svg/light/tournaments.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/uparrow.svg b/early/.config/eww/images/svg/light/uparrow.svg
new file mode 100755
index 000000000..f27adb950
--- /dev/null
+++ b/early/.config/eww/images/svg/light/uparrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/user.svg b/early/.config/eww/images/svg/light/user.svg
new file mode 100755
index 000000000..ee072b7b9
--- /dev/null
+++ b/early/.config/eww/images/svg/light/user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/vol0.svg b/early/.config/eww/images/svg/light/vol0.svg
new file mode 100755
index 000000000..2f724a3d5
--- /dev/null
+++ b/early/.config/eww/images/svg/light/vol0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/vol1.svg b/early/.config/eww/images/svg/light/vol1.svg
new file mode 100755
index 000000000..43938e063
--- /dev/null
+++ b/early/.config/eww/images/svg/light/vol1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/vol2.svg b/early/.config/eww/images/svg/light/vol2.svg
new file mode 100755
index 000000000..0e1ae1921
--- /dev/null
+++ b/early/.config/eww/images/svg/light/vol2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/vol3.svg b/early/.config/eww/images/svg/light/vol3.svg
new file mode 100755
index 000000000..0e1ae1921
--- /dev/null
+++ b/early/.config/eww/images/svg/light/vol3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/volmute.svg b/early/.config/eww/images/svg/light/volmute.svg
new file mode 100755
index 000000000..ac61db6f5
--- /dev/null
+++ b/early/.config/eww/images/svg/light/volmute.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/wifi.svg b/early/.config/eww/images/svg/light/wifi.svg
new file mode 100755
index 000000000..1ad75251f
--- /dev/null
+++ b/early/.config/eww/images/svg/light/wifi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/wifi1.svg b/early/.config/eww/images/svg/light/wifi1.svg
new file mode 100755
index 000000000..875b72537
--- /dev/null
+++ b/early/.config/eww/images/svg/light/wifi1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/wifi2.svg b/early/.config/eww/images/svg/light/wifi2.svg
new file mode 100755
index 000000000..b5650c541
--- /dev/null
+++ b/early/.config/eww/images/svg/light/wifi2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/wifi3.svg b/early/.config/eww/images/svg/light/wifi3.svg
new file mode 100755
index 000000000..72b566f01
--- /dev/null
+++ b/early/.config/eww/images/svg/light/wifi3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/wifi4.svg b/early/.config/eww/images/svg/light/wifi4.svg
new file mode 100755
index 000000000..792fd532e
--- /dev/null
+++ b/early/.config/eww/images/svg/light/wifi4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/light/wiki.svg b/early/.config/eww/images/svg/light/wiki.svg
new file mode 100755
index 000000000..1eb3de640
--- /dev/null
+++ b/early/.config/eww/images/svg/light/wiki.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/linehorizontal.svg b/early/.config/eww/images/svg/linehorizontal.svg
new file mode 100755
index 000000000..c6750fc04
--- /dev/null
+++ b/early/.config/eww/images/svg/linehorizontal.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/linetransparent.svg b/early/.config/eww/images/svg/linetransparent.svg
new file mode 100755
index 000000000..9be840a61
--- /dev/null
+++ b/early/.config/eww/images/svg/linetransparent.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/linevertical.svg b/early/.config/eww/images/svg/linevertical.svg
new file mode 100755
index 000000000..705cbf429
--- /dev/null
+++ b/early/.config/eww/images/svg/linevertical.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/moon.svg b/early/.config/eww/images/svg/moon.svg
new file mode 100755
index 000000000..b4c745e06
--- /dev/null
+++ b/early/.config/eww/images/svg/moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/news.svg b/early/.config/eww/images/svg/news.svg
new file mode 100755
index 000000000..a303d6969
--- /dev/null
+++ b/early/.config/eww/images/svg/news.svg
@@ -0,0 +1,18 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/night.svg b/early/.config/eww/images/svg/night.svg
new file mode 100755
index 000000000..183124a11
--- /dev/null
+++ b/early/.config/eww/images/svg/night.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/notif-snooze.svg b/early/.config/eww/images/svg/notif-snooze.svg
new file mode 100755
index 000000000..e72c0282c
--- /dev/null
+++ b/early/.config/eww/images/svg/notif-snooze.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/notif.svg b/early/.config/eww/images/svg/notif.svg
new file mode 100755
index 000000000..089c7a90c
--- /dev/null
+++ b/early/.config/eww/images/svg/notif.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/notifsnooze.svg b/early/.config/eww/images/svg/notifsnooze.svg
new file mode 100755
index 000000000..32e29b0bc
--- /dev/null
+++ b/early/.config/eww/images/svg/notifsnooze.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/open.svg b/early/.config/eww/images/svg/open.svg
new file mode 100755
index 000000000..ca0548a74
--- /dev/null
+++ b/early/.config/eww/images/svg/open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/power.svg b/early/.config/eww/images/svg/power.svg
new file mode 100755
index 000000000..7850d5b9e
--- /dev/null
+++ b/early/.config/eww/images/svg/power.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/protocol.svg b/early/.config/eww/images/svg/protocol.svg
new file mode 100755
index 000000000..c1e925a49
--- /dev/null
+++ b/early/.config/eww/images/svg/protocol.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/radiobutton.svg b/early/.config/eww/images/svg/radiobutton.svg
new file mode 100755
index 000000000..f6fdaa25f
--- /dev/null
+++ b/early/.config/eww/images/svg/radiobutton.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/rankings.svg b/early/.config/eww/images/svg/rankings.svg
new file mode 100755
index 000000000..1e9608c1a
--- /dev/null
+++ b/early/.config/eww/images/svg/rankings.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/reset.svg b/early/.config/eww/images/svg/reset.svg
new file mode 100755
index 000000000..d792b64e2
--- /dev/null
+++ b/early/.config/eww/images/svg/reset.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/rightarrow.svg b/early/.config/eww/images/svg/rightarrow.svg
new file mode 100755
index 000000000..e9ee4e44d
--- /dev/null
+++ b/early/.config/eww/images/svg/rightarrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/root.svg b/early/.config/eww/images/svg/root.svg
new file mode 100755
index 000000000..a065674de
--- /dev/null
+++ b/early/.config/eww/images/svg/root.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/search-fluent.svg b/early/.config/eww/images/svg/search-fluent.svg
new file mode 100755
index 000000000..ac537c2ef
--- /dev/null
+++ b/early/.config/eww/images/svg/search-fluent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/search.svg b/early/.config/eww/images/svg/search.svg
new file mode 100755
index 000000000..4fb4aba46
--- /dev/null
+++ b/early/.config/eww/images/svg/search.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/settings.svg b/early/.config/eww/images/svg/settings.svg
new file mode 100755
index 000000000..16d3221c4
--- /dev/null
+++ b/early/.config/eww/images/svg/settings.svg
@@ -0,0 +1,23 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/store.svg b/early/.config/eww/images/svg/store.svg
new file mode 100755
index 000000000..eb28267d0
--- /dev/null
+++ b/early/.config/eww/images/svg/store.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/tournaments.svg b/early/.config/eww/images/svg/tournaments.svg
new file mode 100755
index 000000000..4958b945a
--- /dev/null
+++ b/early/.config/eww/images/svg/tournaments.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/uparrow.svg b/early/.config/eww/images/svg/uparrow.svg
new file mode 100755
index 000000000..d25dd0fe8
--- /dev/null
+++ b/early/.config/eww/images/svg/uparrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/user.svg b/early/.config/eww/images/svg/user.svg
new file mode 100755
index 000000000..3f9cb15be
--- /dev/null
+++ b/early/.config/eww/images/svg/user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/vol0.svg b/early/.config/eww/images/svg/vol0.svg
new file mode 100755
index 000000000..d05654890
--- /dev/null
+++ b/early/.config/eww/images/svg/vol0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/vol1.svg b/early/.config/eww/images/svg/vol1.svg
new file mode 100755
index 000000000..f8bea12df
--- /dev/null
+++ b/early/.config/eww/images/svg/vol1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/vol2.svg b/early/.config/eww/images/svg/vol2.svg
new file mode 100755
index 000000000..949646027
--- /dev/null
+++ b/early/.config/eww/images/svg/vol2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/vol3.svg b/early/.config/eww/images/svg/vol3.svg
new file mode 100755
index 000000000..949646027
--- /dev/null
+++ b/early/.config/eww/images/svg/vol3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/volmute.svg b/early/.config/eww/images/svg/volmute.svg
new file mode 100755
index 000000000..8f770e6cc
--- /dev/null
+++ b/early/.config/eww/images/svg/volmute.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/wifi.svg b/early/.config/eww/images/svg/wifi.svg
new file mode 100755
index 000000000..3c762bdfa
--- /dev/null
+++ b/early/.config/eww/images/svg/wifi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/wifi1.svg b/early/.config/eww/images/svg/wifi1.svg
new file mode 100755
index 000000000..2bf3a821c
--- /dev/null
+++ b/early/.config/eww/images/svg/wifi1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/wifi2.svg b/early/.config/eww/images/svg/wifi2.svg
new file mode 100755
index 000000000..5df6581f6
--- /dev/null
+++ b/early/.config/eww/images/svg/wifi2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/wifi3.svg b/early/.config/eww/images/svg/wifi3.svg
new file mode 100755
index 000000000..f738613b0
--- /dev/null
+++ b/early/.config/eww/images/svg/wifi3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/wifi4.svg b/early/.config/eww/images/svg/wifi4.svg
new file mode 100755
index 000000000..6d0807168
--- /dev/null
+++ b/early/.config/eww/images/svg/wifi4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/svg/wiki.svg b/early/.config/eww/images/svg/wiki.svg
new file mode 100755
index 000000000..a79a5fa3d
--- /dev/null
+++ b/early/.config/eww/images/svg/wiki.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/early/.config/eww/images/textures/acrylic.png b/early/.config/eww/images/textures/acrylic.png
new file mode 100755
index 000000000..028b188b5
Binary files /dev/null and b/early/.config/eww/images/textures/acrylic.png differ
diff --git a/early/.config/eww/images/wallpaper/wallpaper b/early/.config/eww/images/wallpaper/wallpaper
new file mode 100755
index 000000000..3ac6974ee
Binary files /dev/null and b/early/.config/eww/images/wallpaper/wallpaper differ
diff --git a/early/.config/eww/modules/activewindow.yuck b/early/.config/eww/modules/activewindow.yuck
new file mode 100755
index 000000000..6e510dddd
--- /dev/null
+++ b/early/.config/eww/modules/activewindow.yuck
@@ -0,0 +1,26 @@
+(defwidget activewindow []
+ (box
+ :valign "center"
+ :space-evenly false
+ :orientation "v"
+ (box
+ (eventbox
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ :onhover "${EWW_CMD} update rev_center_ws=true"
+ (box
+ :space-evenly false
+ :class "activewin"
+ (revealer
+ :transition "slideright"
+ :reveal "${!music_reveal}"
+ :duration "300ms"
+ (label
+ :limit-width 40
+ :text "${awin.title}"
+ )
+ )
+ )
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/early/.config/eww/modules/audiolevels.yuck b/early/.config/eww/modules/audiolevels.yuck
new file mode 100755
index 000000000..da529c3a6
--- /dev/null
+++ b/early/.config/eww/modules/audiolevels.yuck
@@ -0,0 +1,71 @@
+(defwidget audiolevels[]
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "sliders"
+ (label
+ :text "Volume mixer"
+ :xalign 0
+ :style "font-weight: bold;"
+ )
+ (for i in audiojson
+ (eventbox
+ :onscroll "pactl set-sink-input-volume ${i.sink} $(echo {} | sed -e \"s/up/+10/g\" -e \"s/down/-10/g\")% &"
+ :onrightclick "pactl set-sink-input-volume ${i.sink} 100%"
+ (box
+ :space-evenly false
+ :orientation "v"
+ ; (label :class "time" :text "DEBUG:${i}")
+ (centerbox
+ :space-evenly false
+ :orientation "h"
+ ; :halign "center"
+ (label
+ :xalign 0
+ :class "audiotext"
+ :limit-width 42
+ :style "font-size: 13pt; padding-bottom: 2px;"
+ :text "${i.name} (#${i.sink})"
+ )
+ (label
+ :xalign 0
+ :class "audiotext"
+ :limit-width 30
+ :style "font-size: 13pt; padding-bottom: 2px;"
+ :text ""
+ )
+ (box :orientation "v"
+ (label
+ :xalign 1
+ :class "audiotext"
+ :style "font-size: 13pt; padding-bottom: 2px;"
+ :text "${i.volume}%"
+ )
+ )
+ )
+ (box
+ :class "volume-slider-box"
+ :space-evenly false
+ (eventbox
+ ; :class "volume-icon"
+ :onclick "pactl set-sink-input-volume ${i.sink} 0%"
+ :onscroll "pactl set-sink-input-volume ${i.sink} $(echo {} | sed -e \"s/up/+10/g\" -e \"s/down/-10/g\")%"
+ :onrightclick "pactl set-sink-input-volume ${i.sink} 100%"
+ (label
+ :style "font-family: 'Material Symbols Rounded';"
+ :text "${volume.icon}"
+ )
+ )
+ (scale
+ :class "sliderbg"
+ :value {i.volume}
+ :class "volume-bar slider"
+ :onchange "pactl set-sink-input-volume ${i.sink} {}%"
+ :tooltip "${i.name}: ${i.volume}%"
+ )
+ )
+ )
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/early/.config/eww/modules/bluetooth.yuck b/early/.config/eww/modules/bluetooth.yuck
new file mode 100755
index 000000000..bb84e9668
--- /dev/null
+++ b/early/.config/eww/modules/bluetooth.yuck
@@ -0,0 +1,13 @@
+(defwidget bluetooth []
+ (eventbox
+ :onrightclick "gnome-control-center bluetooth"
+ (button
+ :class "module-bt module icon"
+ :onclick "blueberry"
+ :onrightclick "gnome-control-center bluetooth"
+ :tooltip "${bluetooth.text} ${bluetooth.batt_icon}"
+ :style "color: ${bluetooth.color};"
+ {bluetooth.icon}
+ )
+ )
+)
diff --git a/early/.config/eww/modules/bright.yuck b/early/.config/eww/modules/bright.yuck
new file mode 100755
index 000000000..d45bfcaaf
--- /dev/null
+++ b/early/.config/eww/modules/bright.yuck
@@ -0,0 +1,15 @@
+(defwidget bright []
+ (box
+ :class "module"
+ (eventbox
+ :class "bright-icon"
+ :onscroll "echo $(echo {} | sed -e 's/down/-U 5/g' -e 's/up/-A 5/g' | xargs light) && scripts/bright osd"
+ (label
+ :valign "start"
+ :text {brightness.icon}
+ :class "bright-icon icon"
+ :tooltip "brightness ${round(brightness.level, 0)}%"
+ )
+ )
+ )
+)
diff --git a/early/.config/eww/modules/clock.yuck b/early/.config/eww/modules/clock.yuck
new file mode 100755
index 000000000..1a93b3890
--- /dev/null
+++ b/early/.config/eww/modules/clock.yuck
@@ -0,0 +1,51 @@
+(defwidget clock_module []
+ (eventbox
+ :onclick "${EWW_CMD} update popup='calendar'"
+ :class "${popup == 'calendar' ? 'calendar-win' : ''}"
+ :style "${rev_ontf ? 'background-color: #838383;' : ''}"
+ ; clock-module
+ (box
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "module"
+ :valign "start"
+ :orientation "v"
+ :style "min-width: 115px;"
+ (box
+ :space-evenly false
+ :halign "start"
+ (label :text "${time.hour}" :class "clock hour")
+ (label :text ":" :class "clock")
+ (label :text {time.minute} :class "clock minute")
+ )
+ (button
+ :style "background"
+ :halign "start"
+ :valign "start"
+ :class "date-clock"
+ :onclick "${EWW_CMD} update popup='calendar'"
+ "${time.day}, ${time.date}"
+ )
+
+ )
+ (revealer
+ :reveal "${popup == 'calendar'}"
+ :transition "slideright"
+ :duration "0ms"
+ (revealer
+ :reveal "${popup == 'calendar'}"
+ :transition "crossfade"
+ :duration "0ms"
+ (revealer
+ :reveal "${popup == 'calendar'}"
+ :transition "slidedown"
+ :duration "0ms"
+ (calendar)
+ )
+ )
+ )
+ )
+ )
+)
+
diff --git a/early/.config/eww/modules/editmode.yuck b/early/.config/eww/modules/editmode.yuck
new file mode 100755
index 000000000..24a9b89c7
--- /dev/null
+++ b/early/.config/eww/modules/editmode.yuck
@@ -0,0 +1,24 @@
+(defwidget editmode []
+ (eventbox
+ :cursor "col-resize"
+ :onhover "${EWW_CMD} update edit_hover=true"
+ :onhoverlost "${EWW_CMD} update edit_hover=false"
+ :onscroll "hyprctl dispatch splitratio $(echo {} | sed -e \"s/up/-0.1/g\" -e \"s/down/+0.1/g\")"
+ :onmiddleclick "scripts/toggle-compactmode.sh"
+ :onrightclick "scripts/toggle-compactmode.sh --toggle --border 0"
+ (checkbox
+ :class "module-button${editing ? '-true' : (edit_hover ? '-hover' : '')} edit-mode-checkbox-${editing}"
+ :onchecked "scripts/editmode.sh enable"
+ :onunchecked "scripts/editmode.sh disable"
+ :tooltip "Edit mode (middle-click to move, right-click to resize windows)"
+ (image
+ :path "images/svg/tournaments.svg"
+ :image-height 33
+ :image-width 33
+ :style "
+ margin-left: -5.5px;
+ "
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/early/.config/eww/modules/gamebar.json b/early/.config/eww/modules/gamebar.json
new file mode 100755
index 000000000..efb2c03f8
--- /dev/null
+++ b/early/.config/eww/modules/gamebar.json
@@ -0,0 +1,42 @@
+{
+ "controls": {
+ "at": [
+ 960,
+ 65
+ ],
+ "size": [
+ 530,
+ 70
+ ]
+ },
+ "capture": {
+ "at": [
+ 202,
+ 131.5
+ ],
+ "size": [
+ 338,
+ 197
+ ]
+ },
+ "audio": {
+ "at": [
+ 202,
+ 644.5
+ ],
+ "size": [
+ 338,
+ 789
+ ]
+ },
+ "performance": {
+ "at": [
+ 1718,
+ 932
+ ],
+ "size": [
+ 338,
+ 230
+ ]
+ }
+}
\ No newline at end of file
diff --git a/early/.config/eww/modules/gamebar_topleft_size.json b/early/.config/eww/modules/gamebar_topleft_size.json
new file mode 100755
index 000000000..9635a8ef7
--- /dev/null
+++ b/early/.config/eww/modules/gamebar_topleft_size.json
@@ -0,0 +1,42 @@
+{
+ "controls": {
+ "at": [
+ 495,
+ 30
+ ],
+ "size": [
+ 930,
+ 70
+ ]
+ },
+ "capture": {
+ "at": [
+ 33,
+ 33
+ ],
+ "size": [
+ 338,
+ 197
+ ]
+ },
+ "audio": {
+ "at": [
+ 33,
+ 250
+ ],
+ "size": [
+ 338,
+ 589
+ ]
+ },
+ "performance": {
+ "at": [
+ 1250,
+ 604
+ ],
+ "size": [
+ 338,
+ 230
+ ]
+ }
+}
\ No newline at end of file
diff --git a/early/.config/eww/modules/langs.json b/early/.config/eww/modules/langs.json
new file mode 100755
index 000000000..3fa2bda59
--- /dev/null
+++ b/early/.config/eww/modules/langs.json
@@ -0,0 +1,14 @@
+[
+ {
+ "name": "English (United States)",
+ "name_method": "US",
+ "name_ibus": "xkb:us::eng",
+ "name_abbr": "ENG"
+ },
+ {
+ "name": "Vietnamese",
+ "name_method": "Vietnamese Telex (Bamboo Engine)",
+ "name_ibus": "Bamboo::Us",
+ "name_abbr": "VIE"
+ }
+]
\ No newline at end of file
diff --git a/early/.config/eww/modules/music.yuck b/early/.config/eww/modules/music.yuck
new file mode 100755
index 000000000..4d9168a4a
--- /dev/null
+++ b/early/.config/eww/modules/music.yuck
@@ -0,0 +1,144 @@
+(defwidget osu-music-module []
+ (eventbox
+ :onscroll "echo $(echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%) && scripts/volume osd"
+ :onclick "scripts/toggle-music.sh &"
+ :onmiddleclick "playerctl play-pause"
+ :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
+ :onhover "${EWW_CMD} update music_hover=true"
+ :onhoverlost "${EWW_CMD} update music_hover=false"
+ (box
+ :space-evenly false
+ :class "module-button-pad-center"
+ (box
+ :space-evenly false
+ :class "module-button${music_open ? '-true' : (music_hover ? '-hover' : '')}"
+ (revealer ; dummy keep alive
+ :reveal false
+ :duration "0ms"
+ :transition "slideright"
+ ; (label :text "${mcover.image} ${cavajson[0]}")
+ (label :text "${mcover.image}")
+ )
+ (box
+ :space-evenly false
+ :valign "start"
+ ; :class "osu-music-box"
+ :class "osu-music-box"
+ ; (image
+ ; :path "images/svg/beatmaps.svg"
+ ; :image-width 33
+ ; :image-height 33
+ ; :class "osu-music-box-dummy"
+ ; )
+ (overlay
+ (box
+ :halign "center" :valign "center"
+ :class "bar-music-cover"
+ :style "background-image: url('eww_covers/cover_art_default')"
+ )
+ (box
+ :halign "center" :valign "center"
+ :class "bar-music-cover"
+ :style "background-image: url('${mcover.image}')"
+ )
+ (label
+ :class "bar-music-state"
+ :halign "center" :valign "center"
+ :style "
+ font-size: 18pt;
+ margin-bottom: -1px;
+ color: ${colormode == 'one' ? coloraccent : (mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7)};
+ "
+ :text "${mplay == 'Playing' ? '' : ''}"
+ )
+ )
+ )
+ (revealer
+ :transition "slideright"
+ ; :reveal "${(music_reveal || osd_vol || (mname.title != '')) && !focus}"
+ :reveal true
+ :duration "300ms"
+ :class "music-ctl-revealer"
+ :onscroll "echo $(echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%) && scripts/volume osd"
+ :limit-width 20
+ (eventbox
+ :onscroll "echo $(echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%) && scripts/volume osd"
+ (box
+ :space-evenly false :orientation "h"
+ :width 421
+ (box
+ :space-evenly false :orientation "v"
+ :valign "center"
+ :class "music-ctl-revealer"
+ :hexpand "true"
+ (label
+ :class "music-title-bar"
+ :limit-width 50
+ :xalign 0
+ :style "
+ color: ${colormode == 'one' ? coloraccent : (mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7)};
+ "
+ :text {mname.title == '' ? 'Playerctl' : mname.title}
+ )
+ (revealer
+ :transition "slidedown"
+ :reveal "${mname.artist != ''}"
+ :duration "20ms"
+ (label
+ :class "music-artist-bar"
+ :limit-width 50
+ :xalign 0
+ :style "font-size: 11pt; font-family: 'Rubik';
+ color: ${colormode == 'one' ? coloraccent : (mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7)};
+ "
+ :text {mname.artist}
+ )
+ )
+ )
+ (revealer
+ :reveal {music_hover}
+ :transition "slideleft"
+ :duration "400ms"
+ (revealer
+ :reveal {music_hover}
+ :transition "crossfade"
+ :duration "400ms"
+ (centerbox
+ :class "music-button-box-bar"
+ (button
+ :class "song-button-bar"
+ :style "
+ font-size: 30pt;
+ color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};
+ "
+ :onclick "playerctl previous"
+ ""
+ )
+ (button
+ :class "song-button-bar"
+ :style "
+ font-size: 30pt;
+ color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};
+ "
+ :onclick "playerctl play-pause"
+ "${music.status != '' ? music.status : ''}"
+ )
+ (button
+ :class "song-button-bar"
+ :style "
+ font-size: 30pt;
+ color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};
+ "
+ :onclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
+ ""
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/early/.config/eww/modules/net.yuck b/early/.config/eww/modules/net.yuck
new file mode 100755
index 000000000..4a9adad73
--- /dev/null
+++ b/early/.config/eww/modules/net.yuck
@@ -0,0 +1,19 @@
+(defwidget net []
+ (box
+ :class "module"
+ (eventbox
+ :class "net-icon"
+ :onclick "iwgtk &"
+ :onrightclick "gnome-control-center network &"
+ :tooltip {net.essid}
+ ; :style "color: ${net.color};"
+ (label
+ :valign "start"
+ :text {net.icon}
+ :class "net-icon"
+ :tooltip {net.essid}
+ ; :style "color: ${net.color};"
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/early/.config/eww/modules/pinned-apps.json b/early/.config/eww/modules/pinned-apps.json
new file mode 100755
index 000000000..a127007bd
--- /dev/null
+++ b/early/.config/eww/modules/pinned-apps.json
@@ -0,0 +1,21 @@
+[
+ [
+ {"name": "File Explorer", "exec": "gtk-launch org.gnome.Nautilus.desktop &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/nautilus.svg"},
+ {"name": "Firefox", "exec": "gtk-launch firefox &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/firefox.svg"},
+ {"name": "Terminal", "exec": "gtk-launch org.codeberg.dnkl.foot.desktop &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/foot.svg"},
+ {"name": "Paint", "exec": "gtk-launch org.kde.kolourpaint.desktop &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/kolourpaint.svg"},
+ {"name": "Settings", "exec": "gtk-launch org.gnome.Settings.desktop &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/gnome-control-center.svg"},
+ {"name": "Notepad", "exec": "gtk-launch org.gnome.TextEditor &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/org.gnome.TextEditor.svg"}
+ ],
+ [
+ {"name": "Clock", "exec": "gtk-launch org.gnome.clocks &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/gnome-clocks.svg"},
+ {"name": "Edge", "exec": "/usr/bin/microsoft-edge-stable --password-store=gnome --enable-features=UseOzonePlatform --ozone-platform=wayland --gtk-version=4 &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/microsoft-edge.svg"},
+ {"name": "Visual Studio Code", "exec": "code --password-store=gnome --enable-features=UseOzonePlatform --ozone-platform=wayland &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/code.svg"},
+ {"name": "Calculator", "exec": "gtk-launch org.gnome.Calculator &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/org.gnome.Calculator.svg"},
+ {"name": "GitHub Desktop", "exec": "gtk-launch github-desktop &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/github-desktop.svg"},
+ {"name": "Photos", "exec": "gtk-launch org.gnome.eog &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/eog.svg"}
+ ],
+ [
+ {"name": "VLC Media Player", "exec": "gtk-launch vlc &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/vlc.svg"}
+ ]
+]
\ No newline at end of file
diff --git a/early/.config/eww/modules/recommended.json b/early/.config/eww/modules/recommended.json
new file mode 100755
index 000000000..78ad1fd00
--- /dev/null
+++ b/early/.config/eww/modules/recommended.json
@@ -0,0 +1,9 @@
+[
+ [
+ {"name": "This is NOT Windows 11", "subtext": "end-4/dots-hyprland → windoes", "exec": "xdg-open 'https://github.com/end-4/dots-hyprland/tree/windoes' &", "icon": "images/icons/github.svg"},
+ {"name": "Get Hyprland help", "subtext": "+ chance to be called a retard", "exec": "xdg-open 'https://discord.com/invite/hQ9XvMUjjr' &", "icon": "images/icons/discord.png"}
+ ],
+ [
+ {"name": "r/unixporn", "subtext": "Hot windows n statusbar sex", "exec": "xdg-open 'https://www.reddit.com/r/unixporn/' &", "icon": "images/icons/reddit.svg"}
+ ]
+]
\ No newline at end of file
diff --git a/early/.config/eww/modules/searchbutton.yuck b/early/.config/eww/modules/searchbutton.yuck
new file mode 100755
index 000000000..35922f07d
--- /dev/null
+++ b/early/.config/eww/modules/searchbutton.yuck
@@ -0,0 +1,17 @@
+(defwidget searchbutton []
+ (eventbox
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ :class "osettings-toggle-button-${open_overview}"
+ :onclick "scripts/toggle-overview.sh"
+ :onmiddleclick "scripts/toggle-overview.sh"
+ :onrightclick "scripts/toggle-overview.sh"
+ (box
+ :class "module-button-pad-center"
+ (image
+ :path "images/svg/search.svg"
+ :image-width 33
+ :image-height 33
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/early/.config/eww/modules/sys.yuck b/early/.config/eww/modules/sys.yuck
new file mode 100755
index 000000000..1bb7fee9e
--- /dev/null
+++ b/early/.config/eww/modules/sys.yuck
@@ -0,0 +1,388 @@
+(defwidget sys []
+ (eventbox
+ :class "${popup == 'system-menu' ? 'system-menu-box' : 'sysbar'}"
+ ; :onscroll "echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "module"
+ :space-evenly false
+ :spacing 5
+ :halign "end"
+ (syscpu)
+ (sysmem)
+ (sysbatt)
+ ; (settingscog)
+ )
+ (revealer
+ :reveal "${popup == 'system-menu'}"
+ :transition "slideright"
+ :duration "0ms"
+ (revealer
+ :reveal "${popup == 'system-menu'}"
+ :transition "crossfade"
+ :duration "0ms"
+ (revealer
+ :reveal "${popup == 'system-menu'}"
+ :transition "slidedown"
+ :duration "0ms"
+ (box
+ :space-evenly false
+ (box
+ ; :class "system-menu-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "top-row"
+ :space-evenly false
+ (label :class "time" :text "${time.hour}:${time.minute}")
+ (box
+ :class "date-box"
+ :space-evenly false
+ (label :class "date" :text "${time.day},")
+ (label :class "date" :text "${time.date}")
+ )
+ )
+
+ (box
+ :class "system-row"
+ :space-evenly false
+ (box
+ :class "wifi-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element"
+ :space-evenly false
+ (button
+ ; :class "wifi-button"
+ :onclick "scripts/net toggle"
+ :style "font-family: Material Symbols Rounded;"
+ {net.icon}
+ )
+ (label :class "separator" :text "|")
+ (button
+ :class "wifi-arrow-btn"
+ :style "font-family: Material Symbols Rounded;"
+ :onclick "nm-connection-editor &"
+ ""
+ )
+ )
+ (label :style "font-size: 12pt;" :class "sys-toggle" :text {net.essid} :xalign 0.5 :limit-width 15)
+ )
+
+ (box
+ :class "bluetooth-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element icon"
+ :space-evenly false
+ (button
+ :class "bluetooth-button"
+ :onclick "scripts/bluetooth toggle"
+ :style "font-family: 'Material Symbols Rounded';"
+ {bluetooth.icon}
+ )
+ (label :class "separator" :text "|")
+ (button
+ :class "bluetooth-arrow-btn"
+ :onclick "blueberry"
+ ""
+ )
+ )
+ (label
+ :style "font-size: 12pt;"
+ :text {bluetooth.text}
+ :xalign 0.5
+ :class "sys-toggle"
+ :tooltip "${bluetooth.text} ${bluetooth.batt_icon}"
+ :limit-width 15
+ )
+ )
+
+ (box
+ :class "airplane-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element"
+ (button
+ :class "airplane-button"
+ :onclick "scripts/airplane toggle"
+ airplane
+ )
+ )
+ (label :style "font-size: 12pt;" :text "Airplane Mode" :xalign 0.5 :limit-width 16)
+ )
+
+ (box
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element"
+ (button
+ :halign "end"
+ :onclick "wlogout -p layer-shell &"
+ ""
+ )
+ )
+ (label
+ :style "font-size: 12pt;"
+ :text "Power"
+ :class "sys-toggle"
+ :xalign 0.5
+ :limit-width 16
+ )
+ )
+ )
+ (audiolevels)
+ (box
+ :class "system-info-box"
+ :style "margin-bottom: 17px;"
+ ; cpu
+ (box
+ :class "sys-box"
+ :space-evenly false
+ :halign "start"
+ (circular-progress
+ :value "${EWW_CPU.avg}"
+ :class "sys-cpu"
+ :thickness 3
+ (label
+ :text ""
+ :class "sys-icon-cpu icon")
+ )
+ (box
+ :orientation "v"
+ :vexpand false
+ (label
+ :text "CPU"
+ :halign "start"
+ :class "sys-text-cpu"
+ :style "font-size: 12pt;"
+ )
+ (label
+ :text "${round(EWW_CPU.avg,2)}%"
+ :halign "start"
+ :class "sys-text-sub"
+ :style "font-size: 12pt;"
+ )
+ (label
+ :text "${EWW_CPU.cores[0].freq} MHz"
+ :halign "start"
+ :class "sys-text-sub"
+ :style "font-size: 12pt;"
+ )
+ )
+ )
+
+ ; memory
+ (box
+ :class "sys-box"
+ :space-evenly false
+ :halign "end"
+ (circular-progress
+ :value {memory.percentage}
+ :class "sys-mem"
+ :thickness 3
+ (label
+ :text ""
+ :class "sys-icon-mem icon"
+ )
+ )
+ (box
+ :orientation "v"
+ (label :style "font-size: 12pt;" :text "Memory" :halign "start" :class "sys-text-mem")
+ (label :style "font-size: 12pt;" :text "${memory.used} / ${memory.total}" :halign "start" :class "sys-text-sub")
+ (label :style "font-size: 12pt;" :text "Swap ${memory.swapused} / ${memory.swaptotal}" :halign "start" :class "sys-text-sub")
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwidget syscpu []
+ (revealer
+ :reveal "${((popup == 'system-menu' || EWW_CPU.avg>= 50) || force_sys_rev)}"
+ :transition "slideleft"
+ :duration "300ms"
+ :onscroll "echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%"
+ (eventbox
+ :class "cpubar"
+ :space-evenly false
+ (box
+ :class "cpubar"
+ :space-evenly false
+ (circular-progress
+ :value "${EWW_CPU.avg}"
+ :class "cpubar-circle"
+ :thickness 4
+ :start-at 75
+ :style "${colormode == 'one' ? ('color: ' + coloraccent + ';') : ''}"
+ (box
+ :tooltip "CPU: ${round(EWW_CPU.avg,0)}%"
+ :class "inside-circle"
+ (label :class "icon-text" :text "")
+ )
+ )
+ (revealer
+ :transition "slideright"
+ :reveal "${sys_rev || popup == 'system-menu' || force_sys_rev || EWW_CPU.avg>= 50}"
+ :duration "300ms"
+ :class "sys-menu"
+ :onclick "${EWW_CMD} update popup='system-menu'"
+ (cpumenu)
+ )
+ )
+ )
+ )
+)
+
+(defwidget sysmem []
+ (eventbox
+ :class "membar"
+ :space-evenly false
+ (box
+ :class "membar"
+ :space-evenly false
+ (circular-progress
+ :value {memory.percentage}
+ :class "membar-circle"
+ :thickness 4
+ :start-at 75
+ :style "${colormode == 'one' ? ('color: ' + coloraccent + ';') : ''}"
+ (box
+ :class "inside-circle"
+ :tooltip "RAM: ${round(memory.percentage,0)}%"
+ (label :class "icon-text" :text "")
+ )
+ )
+ (revealer
+ :transition "slideright"
+ :reveal "${sys_rev || force_sys_rev || memory.percentage + memory.swappercentage >= 120}"
+ :duration "300ms"
+ :class "sys-menu"
+ :onclick "${EWW_CMD} update popup='system-menu'"
+ (memmenu)
+ )
+ )
+ )
+)
+
+(defwidget sysbatt []
+ (eventbox
+ :onscroll "echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%"
+ :class "batbar"
+ :space-evenly false
+ (box
+ :class "batbar"
+ :space-evenly false
+ (circular-progress
+ :value "${EWW_BATTERY['BATT']['capacity']}"
+ :class "batbar-circle"
+ :thickness 4
+ :start-at 75
+ :style "border-radius: 99px; color: ${battery.circolor};"
+ (box
+ :class "inside-circle"
+ :tooltip "Battery: ${EWW_BATTERY['BATT']['capacity']}%"
+ :onclick "${EWW_CMD} update popup='system-menu'"
+ :style "border-radius: 99px; color: ${battery.color}; background-color: ${battery.bgcolor};"
+ (label :class "icon-text" :text "")
+ )
+ )
+ (revealer
+ :transition "slideright"
+ :reveal true
+ :duration "300ms"
+ :class "sys-menu"
+ (sysmenu)
+ )
+ )
+ )
+)
+
+(defwidget cpumenu[]
+ (eventbox
+ :class "cpu-menu"
+ (box
+ :orientation "h"
+ :space-evenly false
+ (label :class "cpu-menu icon" :text ""
+ :style "${colormode == 'one' ? ('color: ' + coloraccent + ';') : ''}"
+ )
+ (label :class "cpu-menu" :text "${round(EWW_CPU.avg,0)}%"
+ :style "${colormode == 'one' ? ('color: ' + coloraccent + ';') : ''}"
+ )
+ )
+ )
+)
+
+(defwidget memmenu[]
+ (eventbox
+ (box
+ :space-evenly false
+ (label :class "mem-menu-left" :text ""
+ :style "${colormode == 'one' ? ('color: ' + coloraccent + ';') : ''}"
+ )
+ (label :class "mem-menu-left" :text "${memory.used}"
+ :style "${colormode == 'one' ? ('color: ' + coloraccent + ';') : ''}"
+ )
+ (label :class "mem-menu-mid" :text ""
+ :style "${colormode == 'one' ? ('color: ' + coloraccent + ';') : ''}"
+ )
+ (label :class "mem-menu-right" :text "${memory.swapused}"
+ :style "${colormode == 'one' ? ('color: ' + coloraccent + ';') : ''}"
+ )
+ )
+ )
+)
+
+(defwidget sysmenu[]
+ (eventbox
+ :class "sys-menu"
+ :style "color: ${battery.color}"
+ (box
+ :space-evenly false
+ (label :class "sys-menu-charge" :text "${battery.quickicon}"
+ :style "${colormode == 'one' ? ('color: ' + coloraccent + ';') : ''}"
+ )
+ (label :class "batt-percentage" :text "${EWW_BATTERY["BATT"].capacity}%"
+ :style "${colormode == 'one' ? ('color: ' + coloraccent + ';') : ''}"
+ )
+ ; (revealer
+ ; :reveal "${popup == 'system-menu' || force_sys_rev}"
+ ; :transition "slideright"
+ ; :duration "300ms"
+ ; :class "sys-menu"
+ ; (label :class "batt-percentage" :text " | ${battery.wattage} | ${battery.status}")
+ ; )
+ )
+ )
+)
+
+(defwidget settingscog[]
+ (eventbox
+ :onscroll "echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%"
+ :class "settings-icon"
+ (revealer
+ :transition "slideright"
+ :reveal true
+ :duration "300ms"
+ :onclick "${EWW_CMD} update popup='system-menu'"
+ (button
+ :class "sys-menu-button"
+ :onclick "${EWW_CMD} update popup='system-menu'"
+ " "
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/early/.config/eww/modules/taskbar.json b/early/.config/eww/modules/taskbar.json
new file mode 100755
index 000000000..eb76c2c3d
--- /dev/null
+++ b/early/.config/eww/modules/taskbar.json
@@ -0,0 +1,34 @@
+[
+ {
+ "address": [],
+ "class": "org.gnome.Nautilus",
+ "count": 0,
+ "icon": "/usr/share/icons/Win11-dark/apps/scalable/nautilus.svg",
+ "workspace": [],
+ "exec": "nautilus --new-window &"
+ },
+ {
+ "address": [],
+ "class": "firefox",
+ "count": 0,
+ "icon": "/usr/share/icons/Win11-dark/apps/scalable/firefox.svg",
+ "workspace": [],
+ "exec": "firefox &"
+ },
+ {
+ "address": [],
+ "class": "code-url-handler",
+ "count": 0,
+ "icon": "/usr/share/icons/Win11-dark/apps/scalable/code.svg",
+ "workspace": [],
+ "exec": "code --password-store=gnome --enable-features=UseOzonePlatform --ozone-platform=wayland &"
+ },
+ {
+ "address": [],
+ "class": "foot",
+ "count": 0,
+ "icon": "/usr/share/icons/Win11-dark/apps/scalable/foot.svg",
+ "workspace": [],
+ "exec": "foot &"
+ }
+]
\ No newline at end of file
diff --git a/early/.config/eww/modules/taskbar.yuck b/early/.config/eww/modules/taskbar.yuck
new file mode 100755
index 000000000..df7b18a88
--- /dev/null
+++ b/early/.config/eww/modules/taskbar.yuck
@@ -0,0 +1,30 @@
+(defwidget taskbar []
+ (box
+ :orientation "h"
+ :space-evenly false
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ (for app in tasks
+ (overlay
+ (eventbox
+ :class "taskbar-button-only"
+ :onclick "${app.count > 0 ? ('hyprctl dispatch workspace ' + app.workspace[0] + ' &') : (app.exec)}"
+ ; :tooltip "${app.class}"
+ ; :onclick "hyprctl dispatch workspace ${app.workspace[0]} && hyprctl dispatch focusdow address:${app.address[0]} &"
+ (box
+ :class "taskbar-button-pad"
+ (box
+ :class "taskbaricon"
+ :style "
+ background-image: url('${app.icon}');
+ ${app.class == awin.class ? 'background-color: rgba(108, 112, 134, 0.4); border: 1px solid rgba(108, 112, 134, 0.15); border-top: 1px solid rgba(108, 112, 134, 0.15);' : ''}
+ "
+ )
+ )
+ )
+ (box :class "taskbar-indicator-${app.class == awin.class ? 'true' : (app.count > 0 ? 'false' : 'none')}")
+ )
+ )
+ ; Dummy keep alive
+ (revealer :transition "slideright" :reveal false (label :text {awin.class}))
+ )
+)
\ No newline at end of file
diff --git a/early/.config/eww/modules/user.yuck b/early/.config/eww/modules/user.yuck
new file mode 100755
index 000000000..1a30d25be
--- /dev/null
+++ b/early/.config/eww/modules/user.yuck
@@ -0,0 +1,16 @@
+(defwidget user []
+ (box
+ :space-evenly false
+ :orientation "h"
+ :style "padding-left: 28px; padding-right: 22px;"
+ (label
+ :class "username"
+ :style "margin-right: 5px;"
+ :text "${username == "" ? username_default : username}"
+ )
+ (box
+ :class "userpic"
+ :style "background-image: url('/var/lib/AccountsService/icons/${username == "" ? username_default : username}');"
+ )
+ )
+)
\ No newline at end of file
diff --git a/early/.config/eww/modules/volume.yuck b/early/.config/eww/modules/volume.yuck
new file mode 100755
index 000000000..af4970df2
--- /dev/null
+++ b/early/.config/eww/modules/volume.yuck
@@ -0,0 +1,33 @@
+(defwidget volume-module []
+ (box
+ :class "vol-menu"
+ (eventbox
+ ; :class "vol-menu"
+ :onscroll "echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%"
+ :onrightclick "pavucontrol"
+ :onclick "scripts/volume mute SINK"
+ (box
+ (label
+ ; :class "vol-menu"
+ :tooltip "volume ${volume.percent}%"
+ :style "font-family: 'Material Symbols Rounded';"
+ :text "${volume.icon}"
+ :valign "start"
+ )
+ (label :valign "start" :text "${volume.percent}%")
+ )
+ )
+ ; (volmenu)
+ )
+)
+
+(defwidget volmenu[]
+ (eventbox
+ :class "vol-menu"
+ :onscroll "echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%"
+ :onrightclick "pavucontrol"
+ :onclick "scripts/volume mute SINK"
+ :valign "start"
+ (label :class "vol-menu" :text "${volume.percent}%")
+ )
+)
diff --git a/early/.config/eww/modules/winstuff.yuck b/early/.config/eww/modules/winstuff.yuck
new file mode 100755
index 000000000..b56959ef9
--- /dev/null
+++ b/early/.config/eww/modules/winstuff.yuck
@@ -0,0 +1,163 @@
+(defwidget winstarticon []
+ (eventbox
+ :class "winbutton-only thewinbutton"
+ :onclick "scripts/toggle-winstart.sh &"
+ :onmiddleclick "playerctl play-pause"
+ :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
+ (box
+ :class "winbutton-pad"
+ (box
+ :class "winstarticon-${rev_winstart} winbutton-${rev_winstart}"
+ )
+ )
+ )
+)
+
+(defwidget winactions []
+ (eventbox
+ :class "winbutton"
+ :onhover "${EWW_CMD} update winactions_hover=true &"
+ :onhoverlost "${EWW_CMD} update winactions_hover=false &"
+ :onclick "scripts/toggle-winactions.sh &"
+ :onscroll "echo $(echo {} | sed -e 's/down/-U 3/g' -e 's/up/-A 3/g' | xargs light) && scripts/brightness osd &"
+ (box
+ :class "winbutton-pad"
+ (box
+ :class "wintimedate winbutton-${winactions_hover || rev_winactions}"
+ :space-evenly false
+ (box
+ :orientation "h"
+ :space-evenly false
+ (image :class "winicon" :path "images/svg/dark/wifi${net.level}.svg")
+ (image :class "winicon" :path "images/svg/dark/vol${volume.audio == 1 ? round(volume.percent / 33, 0) : 'mute'}.svg")
+ (image :class "winicon" :path "images/svg/dark/bat${round(battery.percentage / 10, 0)}.svg")
+ )
+ )
+ )
+ )
+)
+
+(defwidget windate []
+ (eventbox
+ :class "winbutton"
+ :onhover "${EWW_CMD} update winnotif_hover=true &"
+ :onhoverlost "${EWW_CMD} update winnotif_hover=false &"
+ :onclick "scripts/toggle-winnotif.sh &"
+ :onscroll "echo $(echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%) && scripts/volume osd"
+ (box
+ :class "winbutton-pad"
+ (box
+ :class "wintimedate winbutton-${winnotif_hover || rev_winnotif}"
+ :space-evenly false
+ (box
+ :orientation "v"
+ :space-evenly false
+ (box
+ :space-evenly false
+ :halign "end"
+ :class "wintime"
+ (label :text "${time.hour}" :class "winbartext")
+ (label :text ":" :class "winbartext")
+ (label :text {time.minute} :class "winbartext")
+ )
+ (label
+ :class "winbartext"
+ :text "${time.date}/${time.year}"
+ )
+ )
+ (revealer
+ :reveal {arraylength(notifications) > 0}
+ :transition "slideleft"
+ :duration "200ms"
+ :class "dummy${notifications[0].id}"
+ (box
+ :halign "center"
+ :valign "center"
+ :class "winnotif-badge"
+ (label :class "winbartext" :text "${arraylength(notifications)}")
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwidget wintaskbar []
+ (box
+ :orientation "h"
+ :space-evenly false
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ (for app in tasks
+ (overlay
+ (eventbox
+ :class "winbutton-only"
+ :onclick "${app.count > 0 ? ('hyprctl dispatch workspace ' + app.workspace[0] + ' &') : (app.exec)}"
+ ; :tooltip "${app.class}"
+ ; :onclick "hyprctl dispatch workspace ${app.workspace[0]} && hyprctl dispatch focuswindow address:${app.address[0]} &"
+ (box
+ :class "winbutton-pad"
+ (box
+ :class "wintaskbaricon"
+ :style "
+ background-image: url('${app.icon}');
+ ${app.class == awin.class ? 'background-color: rgba(108, 112, 134, 0.4); border: 1px solid rgba(108, 112, 134, 0.15); border-top: 1px solid rgba(108, 112, 134, 0.15);' : ''}
+ "
+ )
+ )
+ )
+ (box :class "wintaskbar-indicator-${app.class == awin.class ? 'true' : (app.count > 0 ? 'false' : 'none')}")
+ )
+ )
+ ; Dummy keep alive
+ (revealer :transition "slideright" :reveal false (label :text {awin.class}))
+ )
+)
+
+(defwidget wintaskview-button []
+ (eventbox
+ :class "winbarbutton-h wintaskviewicon-interaction"
+ :onclick "scripts/toggle-wintaskview.sh &"
+ :onmiddleclick "playerctl play-pause"
+ :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
+ (box
+ :class "winbutton-pad"
+ (box
+ :class "wintaskviewicon winbutton-${rev_wintaskview}"
+ :path "images/icons/wintaskview.png"
+ :image-width 26
+ :image-height 26
+ )
+ )
+ )
+)
+
+(defwidget wintray-button []
+ (eventbox
+ :class "winbarbutton-h${tray_is_open ? '-open' : ''}"
+ :onclick "pkill waybar || waybar -c ~/.config/eww/scripts/custom_configs/waybar-tray-config/config && sleep 0.9 && scripts/update-tray.sh &"
+ (box
+ :class "winbutton-pad"
+ (image
+ :style "padding: 0 5px;"
+ :path "images/svg/dark/uparrow.svg"
+ :image-width 20
+ :image-height 20
+ )
+ )
+ )
+)
+
+(defwidget winlang []
+ (eventbox
+ :class "winbarbutton-h${rev_winlang ? '-open' : ''}"
+ :onclick "scripts/toggle-winlang.sh"
+ (box
+ :class "winbutton-pad"
+ (label
+ :class "winbartext"
+ :width 40
+ :text "${lang_ibus.name_abbr}"
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/early/.config/eww/modules/workspaces.yuck b/early/.config/eww/modules/workspaces.yuck
new file mode 100755
index 000000000..6ace33d8b
--- /dev/null
+++ b/early/.config/eww/modules/workspaces.yuck
@@ -0,0 +1,92 @@
+(defwidget workspaces []
+ (eventbox
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ :onmiddleclick "scripts/toggle-overview.sh &"
+ :onrightclick "scripts/toggle-overview.sh &"
+ (overlay
+ ; Only displays workspace state (has windows or not)
+ (box
+ :class "module workspaces"
+ :spacing 0
+ :space-evenly false
+ (for i in workspace
+ (button
+ :onclick "hyprctl dispatch workspace ${i.num}"
+ :class "ws"
+ (label
+ :valign "center"
+ :class "ws-text"
+ :style "font-size: 13pt; background-color: ${i.clr};"
+ :text "${ws-icons[i.num - 1]}"
+ )
+ ; "●"
+ )
+ )
+ )
+ ; Use a separate indicator for active workspace (animations, yay) (and more performant)
+ (button
+ :class "ws"
+ :style "
+ margin-left: ${31 * (activews - 1)}px;
+ margin-right: ${31 * (10 - activews)}px;
+ "
+ (label
+ :valign "center"
+ :class "ws-text ws-text-active"
+ :style "font-size: 13pt;"
+ :text "${activews}"
+ )
+ ; "●"
+ )
+ )
+ )
+)
+
+(defwidget workspaces_top []
+ (box
+ (eventbox
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ :onmiddleclick "scripts/toggle-overview.sh &"
+ :onrightclick "scripts/toggle-overview.sh &"
+ :halign "center"
+ (box
+ :space-evenly false
+ :orientation "v"
+ ; Only displays workspace state (has windows or not)
+ (box
+ :class "workspaces-top"
+ :spacing 0
+ :space-evenly false
+ (for i in workspace
+ (button
+ :onclick "hyprctl dispatch workspace ${i.num}"
+ :class "ws-top"
+ :valign "end"
+ (label
+ :valign "center"
+ :class "ws-text-top"
+ :style "font-size: 1pt; background-color: ${i.clr};"
+ )
+ )
+ )
+ )
+ ; Use a separate indicator for active workspace (animations, yay) (and more performant)
+ (button
+ :class "ws-active-top"
+ :style "
+ margin-left: ${31 * (activews - 1)}px;
+ margin-right: ${31 * (10 - activews)}px;
+ margin-top: -5px;
+ "
+ (label
+ :valign "center"
+ :class "ws-text-top ws-text-active"
+ :style "font-size: 1pt;"
+ )
+ )
+ )
+ )
+ )
+)
+
+; ①②③④⑤⑥⑦⑧⑨⑩
\ No newline at end of file
diff --git a/early/.config/eww/scripts/activewin b/early/.config/eww/scripts/activewin
new file mode 100755
index 000000000..8019a5188
--- /dev/null
+++ b/early/.config/eww/scripts/activewin
@@ -0,0 +1,12 @@
+#!/usr/bin/bash
+
+hyprctl activewindow -j | gojq -c -M
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ hyprctl activewindow -j | gojq -c -M
+ done
+fi
+
diff --git a/early/.config/eww/scripts/activews b/early/.config/eww/scripts/activews
new file mode 100755
index 000000000..e5264b221
--- /dev/null
+++ b/early/.config/eww/scripts/activews
@@ -0,0 +1,22 @@
+#!/usr/bin/bash
+
+focusedws=$(hyprctl activewindow -j | gojq -c -M '.workspace.id')
+echo $focusedws
+
+if [[ "$focusedws" == 'null' ]]; then
+ echo 1
+fi
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "workspace>>" | while read -r line; do
+ case ${line%>>*} in
+ "workspace")
+ focusedws=${line#*>>}
+ echo $focusedws
+ ;;
+ esac
+ done
+fi
+
diff --git a/early/.config/eww/scripts/airplane b/early/.config/eww/scripts/airplane
new file mode 100755
index 000000000..81c9e0b1c
--- /dev/null
+++ b/early/.config/eww/scripts/airplane
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+STATUS="$(rfkill list | sed -n 2p | awk '{print $3}')"
+
+icon() {
+ if [[ $STATUS == "no" ]]; then
+ echo ""
+ else
+ echo ""
+ fi
+}
+
+toggle() {
+ if [[ $STATUS == "no" ]]; then
+ rfkill block all
+ notify-send --urgency=normal -i airplane-mode-symbolic "Airplane Mode" "Airplane mode has been turned on!"
+ else
+ rfkill unblock all
+ notify-send --urgency=normal -i airplane-mode-disabled-symbolic "Airplane Mode" "Airplane mode has been turned off!"
+ fi
+}
+
+if [[ $1 == "toggle" ]]; then
+ toggle
+else
+ while true; do
+ STATUS="$(rfkill list | sed -n 2p | awk '{print $3}')"
+ icon
+ sleep 3;
+ done
+fi
diff --git a/early/.config/eww/scripts/allappnames.cpp b/early/.config/eww/scripts/allappnames.cpp
new file mode 100755
index 000000000..3a1f54854
--- /dev/null
+++ b/early/.config/eww/scripts/allappnames.cpp
@@ -0,0 +1,137 @@
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+
+#include "nlohmann/json.hpp"
+using namespace std;
+using json = nlohmann::json;
+
+// A simple struct to store the name and exec properties of a desktop entry
+struct DesktopEntry {
+ string name;
+ string exec;
+ string icon;
+ bool show;
+};
+
+string username;
+vector allApps;
+json apps;
+int mode = 0; // 0: Object, 1: Array
+
+// A function that reads a .desktop file and returns a DesktopEntry struct
+DesktopEntry read_desktop_file(const string& filename) {
+ DesktopEntry entry;
+ entry.show = true;
+
+ ifstream file(filename);
+ if (file.is_open()) {
+ string line;
+ while (getline(file, line)) {
+ // Skip comments and empty lines
+ if (line.empty() || line[0] == '#') {
+ continue;
+ }
+ if (line.substr(0, 1) == "[" &&
+ line.substr(0, 15) == "[Desktop Action")
+ break;
+ // Split the line by '=' and store the key-value pair
+ size_t pos = line.find('=');
+ if (pos != string::npos) {
+ string key = line.substr(0, pos);
+ string value = line.substr(pos + 1);
+ // Store the name and exec properties
+ if (key == "Name") {
+ entry.name = value;
+ } else if (key == "Exec") {
+ entry.exec = value;
+ } else if (key == "Icon") {
+ entry.icon = value;
+ } else if (key == "NoDisplay" && value == "true") {
+ entry.show = false;
+ }
+ }
+ }
+ // cout << entry.name << " " << entry.exec << " " << entry.icon << "\n";
+ file.close();
+ }
+ return entry;
+}
+
+bool lf(DesktopEntry a, DesktopEntry b) { return a.name < b.name; }
+
+// A function that prints out all desktop entry names and exec properties in a
+// given directory
+void get_desktop_entries(const string& dirname) {
+ // Check if the directory exists
+ if (!filesystem::exists(dirname) || !filesystem::is_directory(dirname)) {
+ return;
+ }
+ // Iterate over all files in the directory
+ for (const auto& entry : filesystem::directory_iterator(dirname)) {
+ // Check if the file has a .desktop extension
+ if (entry.path().extension() == ".desktop") {
+ DesktopEntry thisEntry = read_desktop_file(entry.path());
+ if (thisEntry.show) allApps.push_back(thisEntry);
+ }
+ }
+}
+
+void to_json() {
+ sort(allApps.begin(), allApps.end(), lf);
+ for (const auto& entry : allApps) {
+ json thisApp;
+ thisApp["name"] = entry.name;
+ thisApp["icon"] = entry.icon;
+ thisApp["exec"] = entry.exec;
+ // Get
+ if (mode == 0)
+ apps[entry.name] = thisApp;
+ else
+ apps.push_back(thisApp);
+ }
+}
+
+string get_username() {
+ uid_t uid = geteuid();
+ struct passwd* pw = getpwuid(uid);
+ return pw->pw_name;
+}
+
+int main(int argc, char* argv[]) {
+ ios::sync_with_stdio(false);
+ cin.tie(nullptr);
+
+ if (argc == 3 && string(argv[1]) == "--mode") {
+ if (string(argv[2]) == "object")
+ mode = 0;
+ else if (string(argv[2]) == "array")
+ mode = 1;
+ else
+ mode = stoi(string(argv[2]));
+ }
+
+ username = get_username();
+ // Print all desktop entries in /usr/share/applications/
+ string entryDirs[3] = {"/usr/share/applications/",
+ "/home/" + username + "/.local/share/applications",
+ "/var/lib/flatpak/exports/share/applications"};
+ for (string directory : entryDirs) {
+ if (filesystem::exists(directory))
+ get_desktop_entries(directory);
+ }
+
+ // Get em in the json object
+ to_json();
+ // Print
+ for (const auto& entry : allApps) {
+ cout << entry.name << '\n';
+ }
+
+ return 0;
+}
\ No newline at end of file
diff --git a/early/.config/eww/scripts/allapps.cpp b/early/.config/eww/scripts/allapps.cpp
new file mode 100755
index 000000000..26813fa03
--- /dev/null
+++ b/early/.config/eww/scripts/allapps.cpp
@@ -0,0 +1,254 @@
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "nlohmann/json.hpp"
+using namespace std;
+using json = nlohmann::json;
+
+// A simple struct to store the name and exec properties of a desktop entry
+struct DesktopEntry {
+ string name;
+ string exec;
+ string icon;
+ string filename;
+ string filepath;
+ bool show;
+};
+
+string username;
+vector allApps;
+json apps;
+int mode = 0; // 0: Object, 1: Array, 2: Start (Contains JSON for letters)
+string iconTheme = "";
+
+// Returns the file name from a path
+std::string getFileName(const std::string& path) {
+ // Find the last position of '/' or '\' in the path
+ size_t pos = path.find_last_of("/\\");
+ // If none is found, return the whole path
+ if (pos == std::string::npos) return path;
+ // Otherwise, return the substring after the last slash
+ return path.substr(pos + 1);
+}
+
+// Returns the file name without extension from a path
+string getFileNameNoExt(const string& path) {
+ string filename = getFileName(path); // Get file name (with extension)
+ size_t pos = filename.find_last_of(".");
+ if (pos == string::npos) return filename; // Name found
+ return filename.substr(0, pos);
+}
+
+// Function to check if file exists, if yes read it
+string readIfExists(const string& name) {
+ ifstream f(name.c_str());
+ stringstream buffer;
+ if (f) { // check if the file was opened successfully
+ buffer << f.rdbuf(); // read the whole file into a string stream
+ f.close(); // close the file when done
+ }
+ return buffer.str(); // return the string stream as a string
+}
+
+void writeToFile(const string& name, const string& content) {
+ ofstream f(name.c_str(), ios::app); // open the file in append mode
+ if (f) { // check if the file was opened successfully
+ f << content << "\n"; // write the content to the file
+ f.close(); // close the file when done
+ } else {
+ cerr << "Error: could not open " << name
+ << "\n"; // print an error message to the standard error
+ }
+}
+
+string exec(const char* cmd) {
+ array buffer;
+ string result;
+ unique_ptr pipe(popen(cmd, "r"), pclose);
+ if (!pipe) {
+ throw runtime_error("popen() failed!");
+ }
+ while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+ result += buffer.data();
+ }
+ return result;
+}
+
+string getIconPath(string iconname) {
+ if (iconTheme == "") {
+ iconTheme =
+ exec(string("gsettings get org.gnome.desktop.interface icon-theme")
+ .c_str());
+ iconTheme.pop_back();
+ // cout << "icon theme: " << iconTheme << '\n';
+ }
+ if (iconname.size() == 0) {
+ return "";
+ } else if (iconname[0] == '/') {
+ return iconname; // Already absolute path
+ } else if (iconname[0] == '\n') {
+ return ""; // wtf
+ }
+ string path = readIfExists("/home/" + username + "/.config/eww/scripts/cache/" + iconname);
+ if (path == "") {
+ path = exec(string("geticons -t " + iconTheme + " " + string(iconname) +
+ " | head -n 1")
+ .c_str());
+ // cout << "path: " << path << '\n';
+ writeToFile("/home/" + username + "/.config/eww/scripts/cache/" + iconname, path);
+ // cout << "icon name: " << iconname << '\n';
+ // cout << "path: " << path << '\n';
+ }
+ while (path.size() > 0 && *path.rbegin() == '\n')
+ path.pop_back(); // Remove '\n'
+ return path;
+}
+
+// A function that reads a .desktop file and returns a DesktopEntry struct
+DesktopEntry readDesktopFile(const string& filename) {
+ DesktopEntry entry;
+ entry.show = true;
+ entry.filename = getFileNameNoExt(filename);
+ entry.filepath = filename;
+
+ ifstream file(filename);
+ if (file.is_open()) {
+ string line;
+ while (getline(file, line)) {
+ // Skip comments and empty lines
+ if (line.empty() || line[0] == '#') {
+ continue;
+ }
+ if (line.substr(0, 1) == "[" &&
+ line.substr(0, 15) == "[Desktop Action")
+ break;
+ // Split the line by '=' and store the key-value pair
+ size_t pos = line.find('=');
+ if (pos != string::npos) {
+ string key = line.substr(0, pos);
+ string value = line.substr(pos + 1);
+ // Store properties
+ if (key == "Name") {
+ entry.name = value;
+ } else if (key == "Exec") {
+ entry.exec = value;
+ } else if (key == "Icon") {
+ entry.icon = getIconPath(value);
+ } else if (key == "NoDisplay" && value == "true") {
+ entry.show = false;
+ }
+ }
+ }
+ file.close();
+ }
+ return entry;
+}
+
+string lowercaseOf(string s) {
+ for (char& c : s) {
+ c = tolower(c);
+ }
+ return s;
+}
+
+bool lf(DesktopEntry a, DesktopEntry b) {
+ if (tolower(a.name[0]) == tolower(b.name[0]))
+ return a.name < b.name;
+ else
+ return tolower(a.name[0]) < tolower(b.name[0]);
+}
+
+// A function that prints out all desktop entry names and exec properties in a
+// given directory
+void getDesktopEntries(const string& dirname) {
+ // Iterate over all files in the directory
+ for (const auto& entry : filesystem::directory_iterator(dirname)) {
+ // Check if the file has a .desktop extension
+ if (entry.path().extension() == ".desktop") {
+ // Read the file and print its name and exec properties
+ DesktopEntry thisEntry = readDesktopFile(entry.path());
+ // cout << thisEntry.name << " [icon: " << thisEntry.icon << "]\n";
+ if (thisEntry.show) allApps.push_back(thisEntry);
+ }
+ }
+}
+
+void toJson() {
+ sort(allApps.begin(), allApps.end(), lf);
+ int i = -1;
+ for (const auto& entry : allApps) {
+ i++;
+ // cout << entry.name << ", ";
+ json thisApp;
+ thisApp["name"] = entry.name;
+ thisApp["icon"] = entry.icon;
+ thisApp["exec"] = entry.exec;
+ if (mode != 2) {
+ thisApp["filename"] = entry.filename;
+ thisApp["filepath"] = entry.filepath;
+ }
+ // Get
+ if (mode == 0)
+ apps[entry.name] = thisApp;
+ else if (mode == 1)
+ apps.push_back(thisApp);
+ else if (mode == 2) {
+ apps.push_back(thisApp);
+ }
+ }
+ cout << apps << '\n';
+}
+
+string getUsername() {
+ uid_t uid = geteuid();
+ struct passwd* pw = getpwuid(uid);
+ return pw->pw_name;
+}
+
+void addLetters() {
+ for (char c = 'A'; c <= 'Z'; c++) {
+ DesktopEntry thisLetter;
+ thisLetter.name = c;
+ thisLetter.exec = "";
+ thisLetter.icon = "_letter";
+ allApps.push_back(thisLetter);
+ }
+}
+
+int main(int argc, char* argv[]) {
+ ios::sync_with_stdio(false);
+ cin.tie(nullptr);
+
+ if (argc == 3 && string(argv[1]) == "--mode") {
+ if (string(argv[2]) == "object")
+ mode = 0;
+ else if (string(argv[2]) == "array")
+ mode = 1;
+ else if (string(argv[2]) == "start")
+ mode = 2;
+ else
+ mode = stoi(string(argv[2]));
+ }
+
+ username = getUsername();
+ // Print all desktop entries in common locations
+ string entryDirs[3] = {"/usr/share/applications/",
+ "/home/" + username + "/.local/share/applications",
+ "/var/lib/flatpak/exports/share/applications"};
+ for (string directory : entryDirs) {
+ if (filesystem::exists(directory))
+ getDesktopEntries(directory);
+ }
+ if (mode == 2) addLetters();
+ // Get a json and print
+ toJson();
+}
\ No newline at end of file
diff --git a/early/.config/eww/scripts/applycolor b/early/.config/eww/scripts/applycolor
new file mode 100755
index 000000000..33a4b2680
--- /dev/null
+++ b/early/.config/eww/scripts/applycolor
@@ -0,0 +1,33 @@
+#!/usr/bin/env bash
+cp -r images/svg/dark/* images/svg/
+
+filelist=$(ls 'images/svg' -p | grep -v /)
+
+IFS=$'\n'
+filearr=($(echo "$filelist"))
+
+c0=$(cat css/_iconcolor.txt | head -1)
+c1=$(cat css/_iconcolor.txt | head -2 | tail -1)
+c2=$(cat css/_iconcolor.txt | head -3 | tail -1)
+c3=$(cat css/_iconcolor.txt | head -2 | tail -1)
+c4=$(cat css/_iconcolor.txt | head -5 | tail -1)
+c5=$(cat css/_iconcolor.txt | head -6 | tail -1)
+
+if [[ "$(cat scripts/workdir/__mode_colors.txt | head -1)" == "one" ]]; then
+ c1=$c0
+ c2=$c0
+ c3=$c0
+ c4=$c0
+ c5=$c0
+fi
+
+sed -i "s/white/$c1/gi" "images/svg/beatmappacks.svg"
+sed -i "s/white/$c2/gi" "images/svg/forum.svg"
+sed -i "s/white/$c3/gi" "images/svg/search.svg"
+sed -i "s/white/$c4/gi" "images/svg/settings.svg"
+sed -i "s/white/$c5/gi" "images/svg/tournaments.svg"
+
+for i in "${!filearr[@]}"; do
+ # echo "images/svg/${filearr[$i]}"
+ sed -i "s/white/$1/gi" "images/svg/${filearr[$i]}"
+done
\ No newline at end of file
diff --git a/early/.config/eww/scripts/appsearch.cpp b/early/.config/eww/scripts/appsearch.cpp
new file mode 100755
index 000000000..61538f7df
--- /dev/null
+++ b/early/.config/eww/scripts/appsearch.cpp
@@ -0,0 +1,203 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "nlohmann/json.hpp"
+using namespace std;
+using json = nlohmann::json;
+
+string searchTerm;
+string results;
+vector entryNames;
+json appEntries;
+
+bool updateInfo = false;
+
+void splitString(const std::string& str, const char delimiter,
+ std::vector& result) {
+ std::string line;
+ std::istringstream stream(str);
+ while (std::getline(stream, line)) {
+ if (!line.empty()) {
+ if (line.back() == delimiter) {
+ line.pop_back();
+ }
+ result.push_back(line);
+ }
+ }
+}
+
+string exec(const char* cmd) {
+ array buffer;
+ string result;
+ unique_ptr pipe(popen(cmd, "r"), pclose);
+ if (!pipe) {
+ throw runtime_error("popen() failed!");
+ }
+ while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+ result += buffer.data();
+ }
+ return result;
+}
+
+bool likelyNotMath(const string& expression) {
+ char firstChar = expression[0];
+ if (firstChar >= '0' && firstChar <= '9') return false;
+ return true;
+}
+
+void calcPrompt() {
+ cout << "[{\"name\":\"Calculator - Type "
+ "something!\",\"icon\":\"images/svg/dark/"
+ "calculator.svg\",\"exec\":\"wl-copy \\\"Clipboard contents "
+ ";)\\\"\"}]";
+ exec(
+ "eww update winsearch_actions='{\"name\":\"Calculator - Type "
+ "something!\",\"icon\":\"images/svg/dark/"
+ "calculator.svg\",\"exec\":\"wl-copy \\\"Clipboard contents "
+ ";)\\\"\"}' &");
+ exec("eww update winsearch_actions_type='Math result' &");
+ exit(0);
+}
+
+void getAppNames() {
+ string searchCommand =
+ "cat 'scripts/cache/entrynames.txt' | fzf --filter=\"" + searchTerm +
+ "\" | head -n 10";
+ string results = exec(&searchCommand[0]);
+ splitString(results, '\n', entryNames);
+}
+
+void getAppJson() {
+ ifstream file("scripts/cache/entries.txt");
+ file >> appEntries;
+}
+
+void tryThemeCmd() {
+ if (searchTerm.size() >= 6)
+ searchTerm = searchTerm.substr(6);
+ else
+ searchTerm = " ";
+ string searchCommand =
+ "ls css/savedcolors/ | grep .txt | sed 's/_iconcolor_//g' | sed "
+ "'s/.txt//g' | fzf --filter='" +
+ searchTerm + "'";
+ string results = exec(&searchCommand[0]);
+ splitString(results, '\n', entryNames);
+ cout << '[';
+ for (int i = 0; i < entryNames.size(); i++) {
+ string entryName = entryNames[i];
+ cout << '{';
+ cout << "\"name\":\"" << entryName << "\",\"exec\":\">load "
+ << entryName << "\"";
+ cout << '}';
+ if (i < entryNames.size() - 1) cout << ',';
+ }
+ cout << ']' << endl;
+ if (updateInfo) {
+ string entryName = entryNames[0];
+ string updateCmd = "eww update winsearch_actions='{\"name\":\"" +
+ entryName + "\",\"exec\":\">load " + entryName +
+ "\"}'";
+ exec(&updateCmd[0]);
+ exec("eww update winsearch_actions_type='Color theme'");
+ }
+ exit(0);
+}
+
+void tryAppSearch() {
+ if (entryNames.size() == 0) return; // No app found, skip it
+ cout << '[';
+ for (int i = 0; i < entryNames.size(); i++) {
+ string entryName = entryNames[i];
+ cout << appEntries[entryName];
+ if (i < entryNames.size() - 1) cout << ',';
+ }
+ cout << ']' << endl;
+ if (updateInfo) {
+ string updateCmd = "eww update winsearch_actions='" +
+ string(appEntries[entryNames[0]].dump()) + "'";
+ exec(&updateCmd[0]);
+ exec("eww update winsearch_actions_type='Application'");
+ }
+ exit(0);
+}
+
+void tryCalculate() {
+ if (likelyNotMath(searchTerm)) return;
+ string calcCommand = "qalc '" + searchTerm + "'";
+ string results = exec(&calcCommand[0]);
+ results = results.substr(results.find_first_of("=") + 2);
+ if(results.back() == '\n') results.pop_back();
+ // cout << results << '\n';
+ cout
+ << "[{\"name\":\"" << results
+ << "\",\"icon\":\"images/svg/dark/calculator.svg\",\"exec\":\"wl-copy '"
+ << results << "'\"}]" << endl;
+ if (updateInfo) {
+ string updateCmd =
+ "eww update "
+ "winsearch_actions='{\"name\":\"'\"" +
+ results +
+ "\"'\",\"icon\":\"images/svg/dark/"
+ "calculator.svg\",\"exec\":\"wl-copy '" +
+ results + "'\"}'";
+ exec(&updateCmd[0]);
+ exec("eww update winsearch_actions_type='Math result'");
+ }
+ exit(0);
+}
+
+void commandOnly() {
+ cout << "[]" << endl;
+ if (updateInfo) {
+ string updateCmd =
+ "eww update "
+ "winsearch_actions='{\"name\":\"'\"" +
+ searchTerm +
+ "\"'\",\"icon\":\"images/svg/dark/"
+ "protocol.svg\",\"exec\":\"" +
+ searchTerm + "\"}'";
+ exec(&updateCmd[0]);
+ exec("eww update winsearch_actions_type='Run command'");
+ }
+ exit(0);
+}
+
+int main(int argc, char* argv[]) {
+ ios::sync_with_stdio(false);
+ cin.tie(nullptr);
+
+ // Arguments
+ if (argc == 1) {
+ cout << "[{\"name\": \"Type something!\"}]";
+ return 0;
+ }
+ if (argc > 2 && string(argv[2]) == "--updateinfo") updateInfo = true;
+ searchTerm = argv[1];
+
+ // Special commands
+ if (searchTerm == "--calculator") calcPrompt();
+ if (searchTerm[0] == '>') {
+ if (searchTerm.find(">load") != string::npos)
+ tryThemeCmd();
+ else {
+ cout << "[]" << endl;
+ exit(0);
+ }
+ }
+ // Get app names and entries
+ getAppNames();
+ getAppJson();
+ // Attempt searches in order. Each search will exit if success
+ tryCalculate();
+ tryAppSearch();
+ commandOnly();
+
+ cout << results;
+}
\ No newline at end of file
diff --git a/early/.config/eww/scripts/appsearch_bash b/early/.config/eww/scripts/appsearch_bash
new file mode 100755
index 000000000..546d751a5
--- /dev/null
+++ b/early/.config/eww/scripts/appsearch_bash
@@ -0,0 +1,146 @@
+#!/usr/bin/bash
+
+IFS=$'\n'
+entrynames=( $(cat 'scripts/cache/entrynames.txt' | fzf --filter="$1" | head -n 10) )
+entries=( $(cat 'scripts/cache/entries.txt') )
+
+addedNewActions=false
+
+geticonof() {
+ clientclass=''
+ clientclass=$1
+ iconpath=''
+ # Get app icon
+ if [ -f "scripts/cache/$clientclass" ]; then
+ iconpath=$(cat scripts/cache/$clientclass)
+ if [ ! -f "${iconpath}" ]; then # Cache refresh if icon doesnt exist
+ iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ else
+ iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ if [[ ${iconpath} == "" ]]; then
+ # Retry with lowercase if icon not found
+ iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" $(echo "$clientclass" | tr '[:upper:]' '[:lower:]' | sed 's/\ /-/g') | head -n 1)
+
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ newname=$(scripts/iconpatch $clientclass)
+ iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" "$newname" | head -n 1)
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ # Fallback app icon, replace the path below to the fallback icon of your choice
+ # iconpath="/usr/share/icons/Win11-dark/mimes/48/application-x-executable.svg"
+ iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" "application-x-executable" | head -n 1)
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ fi
+ fi
+ echo "$iconpath"
+}
+
+quiteSureNotMath() {
+ if [[ ${1:0:1} != "0" \
+ && ${1:0:1} != "1" \
+ && ${1:0:1} != "2" \
+ && ${1:0:1} != "3" \
+ && ${1:0:1} != "4" \
+ && ${1:0:1} != "5" \
+ && ${1:0:1} != "6" \
+ && ${1:0:1} != "7" \
+ && ${1:0:1} != "8" \
+ && ${1:0:1} != "9" \
+ && ${1:0:1} != "(" \
+ && ${1:0:1} != ")" \
+ ]]; then
+ echo 'true'
+ else
+ echo 'false'
+ fi
+}
+
+# Search inits: math
+if [[ "$1" == "--calculator" ]]; then
+ echo -n '[{"name":"Calculator - Type something!","icon":"images/svg/dark/calculator.svg","exec":"wl-copy \"Clipboard contents ;)\""}]'
+ eww update winsearch_actions='{"name":"Calculator - Type something!","icon":"images/svg/dark/calculator.svg","exec":"wl-copy \"Clipboard contents ;)\""}'
+ eww update winsearch_actions_type='Math result'
+ addedNewActions=true
+ exit 0
+fi
+
+# Quick commands
+if [[ "$1" == ">"* ]]; then
+ cd ~/.config/eww
+ if [[ "$1" == ">load"* ]]; then
+ searching=$(echo "$1" | sed 's/>load //g' | sed 's/>load//g')
+ profilenames=( $(ls css/savedcolors/ | grep .txt | sed 's/_iconcolor_//g' | sed 's/.txt//g' | fzf --filter="$searching") )
+ echo -n '['
+ for x in "${!profilenames[@]}"; do
+ if [ "$x" != "0" ]; then
+ printf ','
+ fi
+ profilejson='{"name": "'"${profilenames[x]}"'", "exec": ">load '"${profilenames[x]}"'"}'
+ if (( x == 0 )); then
+ eww update winsearch_actions="$profilejson"
+ eww update winsearch_actions_type='Color theme'
+ addedNewActions=true
+ fi
+
+ echo -n "$profilejson"
+ done
+ echo -n ']'
+ else
+ echo '[]'
+ fi
+ exit 0
+fi
+
+# Do math
+if [[ $(quiteSureNotMath "$1") == "false" ]]; then
+ mathAns=$(qalc $1 | head -n 1)
+ mathAns="${mathAns#*= }"
+ mathAns="${mathAns#*≈ }"
+ if [[ "$mathAns" == *"error"* || "$mathAns" == *"warning"* ]]; then
+ echo '[{"name":"Invalid math","icon":"images/svg/dark/calculator.svg","exec":"wl-copy \"Clipboard contents ;)\""}]'
+ exit 0
+ else
+ ansjson='{"name": "'"$mathAns"'","icon":"images/svg/dark/calculator.svg","exec": "wl-copy \"'"$mathAns"'\""}'
+ eww update winsearch_actions="$ansjson"
+ eww update winsearch_actions_type='Math result'
+ addedNewActions=true
+ echo '['"$ansjson"']'
+ fi
+ exit 0
+fi
+
+# Application search
+printf '['
+
+for x in "${!entrynames[@]}"; do
+ if [ "$x" != "0" ]; then
+ printf ','
+ fi
+ appjson=$(echo $entries | gojq -c -M '."'"${entrynames[x]}"'"')
+ if (( x == 0 )); then
+ eww update winsearch_actions="$appjson"
+ eww update winsearch_actions_type='Application'
+ addedNewActions=true
+ fi
+ # iconname=$(echo "$appjson" | gojq -r -c -M '.icon')
+ # appjson=$(echo "$appjson" | gojq '.icon = "'$(geticonof "$iconname")'"')
+ echo -n "$appjson"
+done
+
+printf ']'
+
+if [[ "$addedNewActions" == "false" ]]; then
+ eww update winsearch_actions='{"name":"'"$1"'","icon":"images/svg/dark/protocol.svg","exec":"wl-copy \"Clipboard contents ;)\""}'
+ eww update winsearch_actions_type='Run command'
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/audioapps.cpp b/early/.config/eww/scripts/audioapps.cpp
new file mode 100755
index 000000000..1a82c968d
--- /dev/null
+++ b/early/.config/eww/scripts/audioapps.cpp
@@ -0,0 +1,133 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "nlohmann/json.hpp"
+using namespace std;
+using json = nlohmann::json;
+
+string clients;
+json clientjson, apps;
+string iconTheme = "";
+
+string exec(const char* cmd) {
+ array buffer;
+ string result;
+ unique_ptr pipe(popen(cmd, "r"), pclose);
+ if (!pipe) {
+ throw runtime_error("popen() failed!");
+ }
+ while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+ result += buffer.data();
+ }
+ return result;
+}
+
+// Function to check if file exists, if yes read it
+string readIfExists(const string& name) {
+ ifstream f(name.c_str());
+ stringstream buffer;
+ if (f) { // check if the file was opened successfully
+ buffer << f.rdbuf(); // read the whole file into a string stream
+ f.close(); // close the file when done
+ }
+ return buffer.str(); // return the string stream as a string
+}
+
+void writeToFile(const string& name, const string& content) {
+ ofstream f(name.c_str(), ios::app); // open the file in append mode
+ if (f) { // check if the file was opened successfully
+ f << content << "\n"; // write the content to the file
+ f.close(); // close the file when done
+ } else {
+ cerr << "Error: could not open " << name
+ << "\n"; // print an error message to the standard error
+ }
+}
+
+string getIconPath(string iconname) {
+ if (iconTheme == "") {
+ iconTheme =
+ exec(string("gsettings get org.gnome.desktop.interface icon-theme")
+ .c_str());
+ iconTheme.pop_back();
+ // cout << "icon theme: " << iconTheme << '\n';
+ }
+ if (iconname.size() == 0) {
+ return "";
+ } else if (iconname[0] == '/') {
+ return iconname; // Already absolute path
+ } else if (iconname[0] == '\n') {
+ return ""; // wtf
+ }
+ string path = readIfExists("scripts/cache/" + iconname);
+ if (path == "") {
+ path = exec(
+ string("geticons -t " + iconTheme + " " + string(iconname) + " | head -n 1").c_str());
+ writeToFile("scripts/cache/" + iconname, path);
+ // cout << "icon name: " << iconname << '\n';
+ // cout << "path: " << path << '\n';
+ }
+ while (path.size() > 0 && *path.rbegin() == '\n')
+ path.pop_back(); // Remove '\n'
+ return path;
+}
+
+void addApp(json& client) {
+ string volumestr = client["volume"]["front-left"]["value_percent"];
+ volumestr.pop_back();
+ int volume = stoi(volumestr);
+ client = client["properties"];
+
+ bool found = false;
+ for (json& obj : apps) {
+ auto it = obj.find("name");
+ if (it != obj.end() && *it == client["application.name"]) {
+ found = true;
+ obj["count"] = int(obj["count"]) + 1;
+ obj["volume"].push_back(
+ json::array({client["object.serial"], volume}));
+ break;
+ }
+ }
+ if (!found) {
+ json newApp =
+ R"({"name": "", "count": 1, "volume": [], "icon": ""})"_json;
+ newApp["name"] = client["application.name"];
+ newApp["volume"].push_back(
+ json::array({client["object.serial"], volume}));
+
+ string iconpath;
+ auto it = client.find("application.icon_name");
+ if (it != client.end())
+ iconpath = getIconPath(client["application.icon_name"]);
+ else {
+ iconpath = getIconPath(client["application.process.binary"]);
+ }
+ newApp["icon"] = iconpath;
+
+ apps.push_back(newApp);
+ }
+}
+
+void getAudioClients() {
+ clients = exec("pactl --format json list sink-inputs");
+ clientjson = json::parse(clients);
+ for (json client : clientjson) {
+ addApp(client);
+ // cout << client << '\n';
+ }
+}
+
+int main() {
+ ios::sync_with_stdio(false);
+ cin.tie(nullptr);
+
+ getAudioClients();
+ cout << apps << '\n';
+}
\ No newline at end of file
diff --git a/early/.config/eww/scripts/audiolevels b/early/.config/eww/scripts/audiolevels
new file mode 100755
index 000000000..ba001d09d
--- /dev/null
+++ b/early/.config/eww/scripts/audiolevels
@@ -0,0 +1,84 @@
+#!/usr/bin/bash
+dostuff(){
+ sinks=$(pactl list sink-inputs \
+ | grep -e "Sink Input" \
+ | sed 's/Sink Input #//')
+ names=$(pactl list sink-inputs \
+ | sed 's/"//g' \
+ | sed 's/application-name://' \
+ | grep -e "application.name" \
+ | sed 's/application.name = //' \
+ | sed 's/\t\t//' )
+ vols=$(pactl list sink-inputs \
+ | grep -e "Volume:" \
+ | sed 's/Volume: front-left: //' \
+ | sed 's/front-right: //' \
+ | sed 's/front-right: //' \
+ | tr " " "\n" \
+ | grep -e % \
+ | sed 's/%//g' )
+ binaries=$(pactl list sink-inputs \
+ | grep -e 'application.process.binary' -e 'application.icon_name' \
+ | sed 's/\t//g' \
+ | sed 's/application.process.binary = //g' \
+ | sed 's/application.icon_name = //g' \
+ | sed 's/"//g' )
+
+ # echo "-=-=-=-=-=-=-=-=- Debug: Raw value -=-=-=-=-=-=-=-=-"
+ # echo "$sinks"
+ # echo "$names"
+ # echo "$vols"
+
+ IFS=$'\n'
+ sinkarr=($(echo "$sinks"))
+ namearr=($(echo "$names"))
+ volarr=($(echo "$vols"))
+ iconarr=($(echo "$binaries"))
+
+ # Get icons
+ for i in "${!iconarr[@]}"; do
+ iconarr[$i]=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" ${iconarr[i]} | head -n 1)
+ done
+
+ # Functions
+ sanitize() {
+ echo "$1" | sed 's/"/\"/g'
+ }
+
+ geticon() {
+ # notify-send "${volarr[$((i*2))]}"
+ if [ "${volarr[$(($1*2))]}" -eq "0" ]; then
+ echo ""
+ else
+ echo ""
+ fi
+ }
+
+ # Print final JSON
+ printf '['
+ for i in "${!sinkarr[@]}"; do
+ if [ $i -ne 0 ]; then
+ printf ', '
+ fi
+ echo -n '{''"sink": "'"${sinkarr[$i]}"'", "name": "'"${namearr[$i]}"'", "volume": "'"${volarr[$((i*2))]}"'"}'
+ # echo -n '{''"sink": "'"${sinkarr[$i]}"'", "icon": "'"${iconarr[$i]}"'", "name": "'"${namearr[$i]}"'", "volume": "'"${volarr[$((i*2))]}"'"}'
+ done
+ printf ']\n'
+
+ # echo "$sinks"
+ # echo "$names"
+ # echo "$vols"
+}
+
+
+cd ~/.config/eww
+# dostuff
+scripts/audioapps
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ pactl subscribe | rg --line-buffered "on sink" | while read -r _; do
+ scripts/audioapps
+ done
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/battery b/early/.config/eww/scripts/battery
new file mode 100755
index 000000000..52b98c297
--- /dev/null
+++ b/early/.config/eww/scripts/battery
@@ -0,0 +1,133 @@
+#!/usr/bin/env bash
+
+icons=("" "" "" "" "" "" "" "")
+
+gettime() {
+ FULL=$(cat /sys/class/power_supply/BATT/charge_full)
+ NOW=$(cat /sys/class/power_supply/BATT/charge_now)
+
+ if [ "$RATE" -gt 0 ]; then
+ if [ "$STATE" = "Discharging" ]; then
+ EX="$NOW / $RATE"
+ else
+ EX="($FULL - $NOW) / $RATE"
+ fi
+ date -u -d@"$(bc -l <<< "$EX * 3600")" +%H:%M
+ fi
+}
+
+geticon() {
+ if [ "$STATE" = "Charging" ]; then
+ level=$(awk -v n="$CAPACITY" 'BEGIN{print int((n-1)/12)}')
+ echo "${icons[$level]}"
+ else
+ level=$(awk -v n="$CAPACITY" 'BEGIN{print int((n-1)/12)}')
+ echo "${icons[$level]}"
+ fi
+}
+
+status() {
+ if [ "$STATE" = "Charging" ]; then
+ echo -n "charging"
+
+ if [ "$RATE" -gt 0 ]; then
+ echo ", $(gettime) left"
+ else
+ echo ""
+ fi
+ elif [ "$STATE" = "Discharging" ]; then
+ echo "$(gettime)h left"
+ else
+ echo "fully charged"
+ fi
+}
+
+statch() {
+ if [ "$STATE" = "Discharging" ]; then #Not charging, below 20%
+ if [ "$CAPACITY" -le 5 ]; then
+ echo 'deadly'
+ elif [ "$CAPACITY" -le 10 ]; then
+ echo 'critical'
+ elif [ "$CAPACITY" -le 30 ]; then
+ echo 'low'
+ else
+ echo 'normal'
+ fi
+ else
+ echo 'charging'
+ fi
+}
+
+chargestatus() {
+ if [ "$STATE" = "Charging" ]; then
+ echo -n ""
+ elif [ "$STATE" = "Discharging" ]; then
+ echo -n ""
+ fi
+}
+
+circolor() {
+ if [[ "$CAPACITY" -le 20 && "$STATE" = "Discharging" ]]; then
+ cat images/svg/color.txt
+ else
+ cat images/svg/color.txt
+ fi
+}
+
+cirbgcolor() {
+ if [[ "$CAPACITY" -le 20 && "$STATE" = "Discharging" ]]; then
+ echo '#EF738A'
+ else
+ echo 'transparent'
+ fi
+}
+
+color() {
+ if [ "$CAPACITY" -le 20 ]; then
+ echo '#EF738A'
+ else
+ echo 'white'
+ fi
+}
+
+bgcolor() {
+ if [ "$CAPACITY" -le 20 ]; then
+ echo '#EF738A'
+ else
+ echo 'transparent'
+ fi
+}
+
+wattage() {
+ echo "$(bc -l <<< "scale=1; $RATE / 1000000") W"
+}
+
+warnedlow=0
+
+while true; do
+ RATE=$(cat /sys/class/power_supply/BATT/voltage_now)
+ CAPACITY=$(cat /sys/class/power_supply/BATT/capacity)
+ STATE=$(cat /sys/class/power_supply/BATT/status)
+
+ if [[ "$CAPACITY" -le 5 && "$STATE" = "Discharging" ]]; then
+ if [ $warnedlow == 0 ]; then
+ warnedlow=1
+ notify-send 'FREAKING PLUG IN THE CHARGER ALREADY' '!!111!!1!123!!!' -u critical -a 'eww'
+ fi
+ elif [[ "$CAPACITY" -le 10 && "$STATE" = "Discharging" ]]; then
+ if [ $warnedlow == 0 ]; then
+ warnedlow=1
+ notify-send 'Battery verrry low' 'Hello?' -u critical -a 'eww'
+ fi
+ elif [[ "$CAPACITY" -le 20 && "$STATE" = "Discharging" ]]; then
+ if [ $warnedlow == 0 ]; then
+ warnedlow=1
+ notify-send 'Battery low' 'Plug in your charger pweeeeaaase :>' -u critical -a 'eww'
+ fi
+ else
+ warnedlow=0
+ fi
+
+ echo '{"quickicon": "'"$(chargestatus)"'", "icon": "'"$(geticon)"'", "percentage": '"$CAPACITY"', "wattage": "'"$(wattage)"'", "status": "'"$(status)"'", "circolor": "'"$(circolor)"'", "cirbgcolor": "'"$(cirbgcolor)"'", "color": "'"$(color)"'", "bgcolor": "'"$(bgcolor)"'" }'
+ sleep 3
+done
\ No newline at end of file
diff --git a/early/.config/eww/scripts/bluetooth b/early/.config/eww/scripts/bluetooth
new file mode 100755
index 000000000..112069540
--- /dev/null
+++ b/early/.config/eww/scripts/bluetooth
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+
+declare -A baticon=([10]="" [20]="" [30]="" [40]="" [50]="" [60]="" [70]="" [80]="" [90]="" [100]="")
+
+toggle() {
+ status=$(rfkill -J | jq -r '.rfkilldevices[] | select(.type == "bluetooth") | .soft' | head -1)
+
+ if [ "$status" = "unblocked" ]; then
+ rfkill block bluetooth
+ else
+ rfkill unblock bluetooth
+ fi
+}
+
+if [ "$1" = "toggle" ]; then
+ toggle
+else
+ while true; do
+ powered=$(bluetoothctl show | rg Powered | cut -f 2- -d ' ')
+ status=$(bluetoothctl info)
+ name=$(echo "$status" | rg Name | cut -f 2- -d ' ')
+ mac=$(echo "$status" | head -1 | awk '{print $2}' | tr ':' '_')
+
+ if [[ "$(echo "$status" | rg Percentage)" != "" ]]; then
+ battery=$(upower -i /org/freedesktop/UPower/devices/headset_dev_"$mac" | rg percentage | awk '{print $2}' | cut -f 1 -d '%')
+ batt_icon=${baticon[$battery]}
+ else
+ batt_icon=""
+ fi
+
+ if [ "$powered" = "yes" ]; then
+ if [ "$status" != "Missing device address argument" ]; then
+ text="$name"
+ icon=""
+ color="#89b4fa"
+ else
+ icon=""
+ text="Disconnected"
+ color="#45475a"
+ fi
+ else
+ icon=""
+ text="Bluetooth off"
+ color="#45475a"
+ fi
+
+ echo '{ "icon": "'"$icon"'", "batt_icon": "'"$batt_icon"'", "text": "'"$text"'", "color": "'"$color"'" }'
+
+ sleep 3
+ done
+fi
diff --git a/early/.config/eww/scripts/brightness b/early/.config/eww/scripts/brightness
new file mode 100755
index 000000000..1f79bec25
--- /dev/null
+++ b/early/.config/eww/scripts/brightness
@@ -0,0 +1,59 @@
+#!/usr/bin/env bash
+cd ~/.config/eww
+
+icons=("" "" "")
+XDG_CACHE_HOME="$HOME/.cache"
+date="$XDG_CACHE_HOME/eww/osd_brightness.date"
+lock=0
+
+showhide() {
+ # get dates
+ rundate=$(cat "$date")
+ currentdate=$(date +%s)
+
+ # handle showing
+ if [ "$rundate" = "$currentdate" ] && [ "$lock" -eq 0 ]; then
+ scripts/toggle-osd-bright.sh --open
+ lock=1
+ elif [ $((currentdate - rundate)) -ge 2 ] && [ "$lock" -eq 1 ]; then
+ scripts/toggle-osd-bright.sh --close > /dev/null
+ lock=0
+ fi
+}
+
+osd() {
+ if [ ! -f "$date" ]; then
+ mkdir -p "$XDG_CACHE_HOME/eww"
+ fi
+ date +%s > "$date"
+ # showhide
+}
+
+osd_handler() {
+ lock=0
+ rundate=0
+ if [ ! -f "$date" ]; then
+ mkdir -p "$XDG_CACHE_HOME/eww"
+ echo 0 > "$date"
+ fi
+
+ while true; do
+ showhide
+ sleep 0.1
+ done
+}
+
+if [ "$1" = "osd" ]; then
+ osd
+else
+ # initial
+ icon=${icons[$(awk -v n="$(light)" 'BEGIN{print int(n/34)}')]}
+ echo '{ "level": '"$(light)"', "icon": "'"$icon"'" }'
+
+ osd_handler &
+ udevadm monitor | rg --line-buffered "backlight" | while read -r _; do
+ icon="${icons[$(awk -v n="$(light)" 'BEGIN{print int(n/34)}')]}"
+
+ echo '{ "level": '"$(light)"', "icon": "'"$icon"'" }'
+ done
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/calendarlayout.cpp b/early/.config/eww/scripts/calendarlayout.cpp
new file mode 100755
index 000000000..cb3100f11
--- /dev/null
+++ b/early/.config/eww/scripts/calendarlayout.cpp
@@ -0,0 +1,138 @@
+#include
+#include
+#include
+#include
+using namespace std;
+
+int year, month, day, weekday, weekdayOfMonthFirst;
+bool leapYear;
+int daysInMonth, daysInLastMonth, daysInNextMonth;
+bool highlight = true;
+
+int calendar[6][7];
+int today[6][7];
+
+void getTime() {
+ // Time
+ time_t now = time(0);
+ tm* ltm = localtime(&now);
+ // To vars
+ year = 1900 + ltm->tm_year;
+ month = 1 + ltm->tm_mon;
+ day = ltm->tm_mday;
+ weekday = ltm->tm_wday - 1;
+ weekdayOfMonthFirst = (weekday + 35 - (day - 1)) % 7;
+ // cout << weekday << ", " << day << '/' << month << '/' << year << '\n';
+}
+
+void setTime(int wd, int d, int m, int y) {
+ wd--;
+ highlight = false;
+ year = y;
+ month = m;
+ day = d;
+ weekday = wd;
+ weekdayOfMonthFirst = (weekday + 35 - (day - 1)) % 7;
+ // cout << weekday << ", " << day << '/' << month << '/' << year << '\n';
+}
+
+void checkLeapYear() {
+ if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
+ leapYear = true;
+ else
+ leapYear = false;
+}
+
+void getMonthDays() {
+ // Days in this month
+ if ((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0))
+ daysInMonth = 31;
+ else if (month == 2 && leapYear)
+ daysInMonth = 29;
+ else if (month == 2 && !leapYear)
+ daysInMonth = 28;
+ else
+ daysInMonth = 30;
+ // Days in next month
+ if (month == 1 && leapYear)
+ daysInNextMonth = 29;
+ else if (month == 1 && !leapYear)
+ daysInNextMonth = 28;
+ else if ((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0))
+ daysInNextMonth = 30;
+ else
+ daysInNextMonth = 31;
+ // Days in last month
+ if (month == 3 && leapYear)
+ daysInLastMonth = 29;
+ else if (month == 3 && !leapYear)
+ daysInLastMonth = 28;
+ else if ((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0))
+ daysInLastMonth = 30;
+ else
+ daysInLastMonth = 31;
+}
+
+void calcCalendar() {
+ int monthDiff = (weekdayOfMonthFirst == 0 ? 0 : -1);
+ int dim = daysInLastMonth;
+ int i = 0, j = 0;
+ int toFill = (weekdayOfMonthFirst == 0
+ ? 1
+ : (daysInLastMonth - (weekdayOfMonthFirst - 1)));
+
+ while (i < 6 && j < 7) {
+ // Fill it
+ calendar[i][j] = toFill;
+ if (toFill == day && monthDiff == 0 && highlight)
+ today[i][j] = 1;
+ else if (monthDiff == 0)
+ today[i][j] = 0;
+ else
+ today[i][j] = -1;
+ // Next day
+ toFill++;
+ if (toFill > dim) {
+ monthDiff++;
+ if (monthDiff == 0)
+ dim = daysInMonth;
+ else if (monthDiff == 1)
+ dim = daysInNextMonth;
+ toFill = 1;
+ }
+ // Next tile
+ j++;
+ if (j == 7) {
+ j = 0;
+ i++;
+ }
+ }
+}
+
+void printCalendar() {
+ cout << '[';
+ for (int i = 0; i < 6; i++) {
+ cout << '[';
+ for (int j = 0; j < 7; j++) {
+ cout << "{\"day\":" << calendar[i][j]
+ << ",\"today\":" << today[i][j] << "}";
+ if (j < 7 - 1) cout << ',';
+ }
+ cout << ']';
+ if (i < 6 - 1) cout << ',';
+ }
+ cout << ']';
+}
+
+int main(int argc, char* argv[]) {
+ if (argc == 1)
+ getTime();
+ else if(argc == 5)
+ setTime(stoi(argv[1]), stoi(argv[2]), stoi(argv[3]), stoi(argv[4]));
+ else
+ cout << " - Run \"calendarlayout\" to get calendar for today\n - Run\"calendarlayout \" to get calendar of the day specified";
+ checkLeapYear();
+ getMonthDays();
+ calcCalendar();
+ printCalendar();
+}
\ No newline at end of file
diff --git a/early/.config/eww/scripts/cavajson.cpp b/early/.config/eww/scripts/cavajson.cpp
new file mode 100755
index 000000000..60b98d84c
--- /dev/null
+++ b/early/.config/eww/scripts/cavajson.cpp
@@ -0,0 +1,30 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+void cavaToJson(std::string& s) {
+ for(int i = 0; i < s.size(); i++){
+ if(s[i] == ';') s[i] = ',';
+ }
+ s.pop_back();
+}
+
+int main()
+{
+ std::unique_ptr pipe(popen("cava -p ~/.config/eww/scripts/custom_configs/cava", "r"), pclose);
+ if (!pipe) {
+ throw std::runtime_error("popen() failed!");
+ }
+ boost::iostreams::file_descriptor_source fd(fileno(pipe.get()), boost::iostreams::never_close_handle);
+ boost::iostreams::stream is(fd);
+ std::string line;
+ while (std::getline(is, line)) {
+ cavaToJson(line);
+ std::cout << '[' << line << ']' << std::endl; // print the output line by line
+ }
+ return 0;
+}
\ No newline at end of file
diff --git a/early/.config/eww/scripts/checkcjk b/early/.config/eww/scripts/checkcjk
new file mode 100755
index 000000000..459e93029
--- /dev/null
+++ b/early/.config/eww/scripts/checkcjk
@@ -0,0 +1,24 @@
+#!/bin/python3
+
+# Import the re module
+import re
+
+# Define a function that takes a string as an argument and returns True if it contains CJK characters, False otherwise
+def check_cjk(string):
+ # Use a regular expression that matches any of these Unicode ranges: U+3040 - U+30FF (hiragana and katakana), U+3400 - U+4DBF (CJK unified ideographs extension A), U+4E00 - U+9FFF (CJK unified ideographs), U+F900 - U+FAFF (CJK compatibility ideographs), U+FF66 - U+FF9F (half-width katakana)
+ pattern = r' [\\u3040-\\u30ff\\u3400-\\u4dbf\\u4e00-\\u9fff\\uf900-\\ufaff\\uff66-\\uff9f]'
+ # Search for the pattern in the string
+ match = re.search(pattern, string)
+ # Return True if there is a match, False otherwise
+ return bool(match)
+
+# Read a string from standard input
+input = input("Enter a string: ")
+
+# Call the function and print the result
+if check_cjk(input):
+ print("The string contains CJK characters.")
+else:
+ print("The string does not contain CJK characters.")
+
+ ・インザナイト
\ No newline at end of file
diff --git a/early/.config/eww/scripts/colorgen b/early/.config/eww/scripts/colorgen
new file mode 100755
index 000000000..2ade8c114
--- /dev/null
+++ b/early/.config/eww/scripts/colorgen
@@ -0,0 +1,95 @@
+#!/usr/bin/bash
+
+OPACITY=0.75
+
+IMGPATH=$1
+coverurl=$2
+
+coverpath="$IMGPATH"
+# Generate colors
+wal -c
+lightdark=$(cat scripts/workdir/__mode_light_dark.txt)
+wal -i "$IMGPATH" -n -t -s -e $lightdark -q
+
+themejson=$(cat ~/.cache/wal/colors.json | gojq -c -M)
+themejson="${themejson::-1}"
+themejson="$themejson"',"source":"'"$3"'"}'
+echo $themejson
+
+maincol="$(printf "$themejson" | gojq -c -M -r '.colors.color4')"
+# scripts/material_colors.py --path "$IMGPATH" $lightdark > tmp/_material.colorpallete
+scripts/material_colors.py --color "$maincol" "$lightdark" > tmp/_material.colorpallete &
+accent=$(scripts/material_colors.py --color "$maincol" "$lightdark" | grep '$onPrimaryContainer: ' | sed 's/$onPrimaryContainer: //g' | sed 's/;//g')
+tertiary=$(scripts/material_colors.py --color "$maincol" "$lightdark" | grep '$tertiary: ' | sed 's/$tertiary: //g' | sed 's/;//g')
+
+printf '{"image": "'"$coverpath"'", "color": '"$themejson"'}\n'
+
+# Get color in rgb
+colorsreg=$(cat ~/.cache/wal/colors-putty.reg)
+rgb_bg=$(echo $colorsreg | tr ' ' '\n' | grep 'Colour3')
+rgb_bg="${rgb_bg#*=}"
+rgb_bg="${rgb_bg#*\"}"
+rgb_bg="${rgb_bg::-1}"
+rgb_bg='rgba('"$rgb_bg"','"$OPACITY"')'
+# echo $rgb_bg
+
+# notify-send 'eww' 'i found a url!'
+
+# Write to scss
+echo '//Auto generated color theme for image at:' "$coverurl" > './tmp/_colorscheme.colorpallete'
+printf '$colorbarbg: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.special.background' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$colorbg: ' >> './tmp/_colorscheme.colorpallete'
+printf "$rgb_bg"';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$colortext: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.special.foreground' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color0: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color1' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color1: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color2' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color2: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color3' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color3: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color4' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color4: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color5' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color5: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color6' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color6: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color7' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color7: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color4' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+
+
+gradient1=$(echo -n "$themejson" | gojq -r '.colors.color1')
+gradient2=$(echo -n "$themejson" | gojq -r '.colors.color2')
+gradient3=$(echo -n "$themejson" | gojq -r '.colors.color4')
+
+# Write hyprland color config
+echo '# Auto generated color theme for image at:' "$coverurl" > './tmp/colors_generated.conf'
+echo 'general {' >> './tmp/colors_generated.conf'
+echo ' col.active_border = rgba('"${gradient1#*#}FF"') rgba('"${gradient2#*#}FF"') rgba('"${gradient3#*#}FF"') 45deg' >> './tmp/colors_generated.conf'
+echo ' col.inactive_border = rgba('"${gradient1#*#}66"')' >> './tmp/colors_generated.conf'
+echo '}' >> './tmp/colors_generated.conf'
+
+# Print json to stdout
+echo "$accent" > 'tmp/_iconcolor.txt'
+echo "$tertiary" >> 'tmp/_iconcolor.txt'
+printf "$themejson" | gojq -r '.colors.color2' >> 'tmp/_iconcolor.txt'
+printf "$themejson" | gojq -r '.colors.color4' >> 'tmp/_iconcolor.txt'
+printf "$themejson" | gojq -r '.colors.color5' >> 'tmp/_iconcolor.txt'
+printf "$themejson" | gojq -r '.colors.color5' >> 'tmp/_iconcolor.txt'
+
+# beatmappacks tertiary, forum color1, search color3, search color4, tournaments color4
+#
diff --git a/early/.config/eww/scripts/colormanage b/early/.config/eww/scripts/colormanage
new file mode 100755
index 000000000..df5f18c59
--- /dev/null
+++ b/early/.config/eww/scripts/colormanage
@@ -0,0 +1,40 @@
+#!/usr/bin/bash
+
+cd ~/.config/eww/ || exit
+
+if [ $1 == "get" ]; then
+ hyprctl keyword misc:disable_autoreload true
+ cp './tmp/_iconcolor.txt' './css/_iconcolor.txt'
+ cp './tmp/_colorscheme.colorpallete' './css/_colorscheme.scss'
+ cp './tmp/_material.colorpallete' './css/_material.scss'
+ cp './tmp/colors_generated.conf' ~/.config/hypr/colors.conf
+ applycolor=$(cat './css/_iconcolor.txt' | head -1)
+ scripts/applycolor "$applycolor"
+elif [ $1 == "default" ]; then
+ hyprctl keyword misc:disable_autoreload true
+ cp './css/_iconcolor_default.txt' './css/_iconcolor.txt'
+ cp css/_colorscheme_default.scss css/_colorscheme.scss
+ cp css/_material_default.scss css/_material.scss
+ cp ~/.config/hypr/colors_default.conf ~/.config/hypr/colors.conf
+ applycolor=$(cat css/_iconcolor.txt | head -1)
+ scripts/applycolor "$applycolor"
+elif [ $1 == "save" ]; then
+ eww close themer 2>/dev/null
+ eww update themer_open=false
+ cp "css/_iconcolor.txt" "css/savedcolors/_iconcolor_$2.txt"
+ cp "css/_colorscheme.scss" "css/savedcolors/_colorscheme_$2.scss"
+ cp "css/_material.scss" "css/savedcolors/_material_$2.scss"
+ cp ~/.config/hypr/colors.conf ~/.config/hypr/savedcolors/colors_$2.conf
+elif [ $1 == "load" ]; then
+ hyprctl keyword misc:disable_autoreload true
+ eww close themer 2>/dev/null
+ eww update themer_open=false
+ cp "css/savedcolors/_iconcolor_$2.txt" "css/_iconcolor.txt"
+ cp "css/savedcolors/_colorscheme_$2.scss" "css/_colorscheme.scss"
+ cp "css/savedcolors/_material_$2.scss" "css/_material.scss"
+ cp ~/.config/hypr/savedcolors/colors_$2.conf ~/.config/hypr/colors.conf
+ applycolor=$(cat css/_iconcolor.txt | head -1)
+ scripts/applycolor "$applycolor"
+fi
+
+hyprctl reload
\ No newline at end of file
diff --git a/early/.config/eww/scripts/custom_configs/cava b/early/.config/eww/scripts/custom_configs/cava
new file mode 100755
index 000000000..215fa126f
--- /dev/null
+++ b/early/.config/eww/scripts/custom_configs/cava
@@ -0,0 +1,30 @@
+[general]
+
+mode = normal
+framerate = 60
+autosens = 1
+bars = 70
+
+[output]
+
+method = raw
+raw_target = /dev/stdout
+data_format = ascii
+
+[color]
+
+gradient = 1
+
+gradient_color_1 = '#99B5DE'
+gradient_color_2 = '#92CBF6'
+gradient_color_3 = '#ACD7F7'
+gradient_color_4 = '#B0E2F7'
+gradient_color_5 = '#DFEDF5'
+gradient_color_6 = '#FDEBD4'
+gradient_color_7 = '#E7D2D7'
+gradient_color_8 = '#C1838E'
+
+[smoothing]
+monstercat = 1
+gravity = 1000000
+noise_reduction = 0.5
\ No newline at end of file
diff --git a/early/.config/eww/scripts/custom_configs/waybar-tray-config/config b/early/.config/eww/scripts/custom_configs/waybar-tray-config/config
new file mode 100755
index 000000000..4b7e7e3cc
--- /dev/null
+++ b/early/.config/eww/scripts/custom_configs/waybar-tray-config/config
@@ -0,0 +1,78 @@
+{
+ "layer": "top",
+ "height": 30,
+ "position": "bottom",
+ "spacing": 0,
+ "exclusive": false,
+ "margin-bottom": 50,
+ "margin-right": 253,
+ "margin-left": 1556,
+ "fixed-center": false,
+
+ "modules-left": [
+
+ ],
+
+ "modules-center": [
+ "tray",
+ ],
+
+ "modules-right": [
+ ],
+
+ "custom/weather": {
+ "exec": "curl 'https://wttr.in/?format=1' | tr -d '+'",
+ "interval": 1800
+ },
+
+ "custom/start": {
+ "format": " ",
+ "on-click": "~/.config/eww/scripts/toggle-overview.sh"
+ },
+
+ "wlr/taskbar": {
+ "format": "{icon}",
+ "icon-size": 24,
+ "tooltip-format": "{title}",
+ "on-click": "activate",
+ "on-click-middle": "close",
+ },
+
+ "clock": {
+ "format": " {:%I:%M %p%n%e/%m/%G}",
+ "tooltip-format": "{:%Y %B}\n{calendar}",
+ "format-alt": " {:%Y-%m-%d}"
+ },
+
+ "tray": {
+ "spacing": 8
+ },
+
+ "pulseaudio": {
+ "format": "{icon}",
+ "format-bluetooth": "{volume}% {icon} {format_source}",
+ "format-bluetooth-muted": " {icon} {format_source}",
+ "format-muted": " {format_source}",
+ "format-source": " {volume}",
+ "format-source-muted": "",
+ "format-icons": {
+ "headphone": "",
+ "hands-free": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", "", ""]
+ },
+ "tooltip-format": "{format_source}%",
+ "on-click": "easyeffects"
+ },
+ "network": {
+ "format-wifi": "",
+ "format-ethernet": "",
+ "tooltip-format": "{ifname} via {gwaddr} ",
+ "format-linked": "{ifname} (No IP) ",
+ "format-disconnected": "Disconnected ⚠",
+ "on-click": "alacritty -e nmtui"
+ },
+}
diff --git a/early/.config/eww/scripts/custom_configs/waybar-tray-config/style.css b/early/.config/eww/scripts/custom_configs/waybar-tray-config/style.css
new file mode 100755
index 000000000..4808df738
--- /dev/null
+++ b/early/.config/eww/scripts/custom_configs/waybar-tray-config/style.css
@@ -0,0 +1,69 @@
+* {
+ color: #f3f9ff;
+ font-size: 11px;
+ font-family: Segoe-Fluent-Icons, Segoe-UI;
+ font-weight: 500;
+}
+
+window#waybar {
+ background: transparent;
+}
+
+tooltip {
+ background: #141414;
+ border-radius: 4px;
+}
+
+#tray {
+ min-width: 20px;
+ min-height: 20px;
+ font-size: 20px;
+ font-weight: 200;
+ padding: 4px;
+ min-width: 100px;
+ min-height: 37px;
+ background: rgba(45, 46, 48, 1);
+ background-image: url('images/textures/acrylic.png');
+ border-radius: 9px;
+ border: 1px solid rgba(34, 35, 38, 0.5);
+ margin: 14px;
+ box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.65);
+}
+
+#window,
+#pulseaudio,
+#network,
+#bluetooth {
+ font-size: 14px;
+ font-weight: 200;
+ padding: 4px;
+}
+
+#custom-weather {
+ padding-left: 12px;
+ font-size: 11px;
+}
+
+#custom-start {
+ background-image: url("./win.png");
+ background-size: 24px 24px;
+ background-position: center;
+ background-repeat: no-repeat;
+}
+
+#taskbar {
+ border-radius: 6px;
+ min-width: 45px;
+ min-height: 45px;
+ /* border-top: 1px solid rgba(64, 64, 64, 0.8); */
+}
+
+#tray,
+#pulseaudio {
+ padding-right: 12px;
+}
+
+#clock {
+ padding-left: 3px;
+ padding-right: 18px;
+}
\ No newline at end of file
diff --git a/early/.config/eww/scripts/dashactivate b/early/.config/eww/scripts/dashactivate
new file mode 100755
index 000000000..452da2256
--- /dev/null
+++ b/early/.config/eww/scripts/dashactivate
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+
+cd ~
+eww close dashboard 2>/dev/null
+
+if [[ "$1" == "--web" ]]; then
+ app=$2
+ eval "${app%\%*}" &
+else
+ app=$1
+ eval "${app%\%*}" &
+ pkill dashactivate
+fi
+
diff --git a/early/.config/eww/scripts/editmode.sh b/early/.config/eww/scripts/editmode.sh
new file mode 100755
index 000000000..c14b92876
--- /dev/null
+++ b/early/.config/eww/scripts/editmode.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+if [ "$1" == "enable" ]; then
+ hyprctl keyword bindm ,mouse:273,resizewindow
+ hyprctl keyword bindm ,mouse:274,movewindow
+ hyprctl keyword bind ,mouse_up,workspace,+1
+ hyprctl keyword bind ,mouse_down,workspace,-1
+ eww update editing=true
+elif [ "$1" == "disable" ]; then
+ hyprctl keyword unbind ,mouse:273
+ hyprctl keyword unbind ,mouse:274
+ hyprctl keyword unbind ,mouse_up
+ hyprctl keyword unbind ,mouse_down
+ eww update editing=false
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/focuswindow b/early/.config/eww/scripts/focuswindow
new file mode 100755
index 000000000..9cc77c6bf
--- /dev/null
+++ b/early/.config/eww/scripts/focuswindow
@@ -0,0 +1,6 @@
+#!/usr/bin/bash
+if [[ $1 == '_none' ]]; then
+ hyprctl dispatch workspace $2
+else
+ hyprctl dispatch focuswindow address:$1
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/get_open_icons b/early/.config/eww/scripts/get_open_icons
new file mode 100755
index 000000000..d7d73383e
--- /dev/null
+++ b/early/.config/eww/scripts/get_open_icons
@@ -0,0 +1,77 @@
+#!/usr/bin/bash
+
+cd ~/.config/eww
+
+getwins() {
+ hyprctlclients=$(hyprctl clients -j \
+ | grep -v '"mapped": ' \
+ | grep -v '"hidden": ' \
+ | grep -v '"floating": ' \
+ | grep -v '"monitor": ' \
+ | grep -v '"pid": ' \
+ | grep -v '"xwayland": ' \
+ | grep -v '"pinned":' \
+ | grep -v '"fullscreen": ' \
+ | grep -v '"fullscreenMode": ' \
+ | grep -v '"fakeFullscreen": ' \
+ | grep -v '"grouped": ')
+
+ # echo $hyprctlclients | gojq -c '.[]'
+
+ IFS=$'\n'
+ clientsarr=( $(echo $hyprctlclients | gojq -c -M '.[]') )
+
+ #For every window
+ for client in "${clientsarr[@]}"; do
+ iconpath=''
+ clientclass=$(echo "$client" | gojq -r '.class')
+ if [[ "$clientclass" == "" ]]; then
+ continue
+ fi
+
+ # Get app icon
+ if [ -f "scripts/cache/$clientclass" ]; then
+ iconpath=$(cat scripts/cache/$clientclass)
+ if [ ! -f "${iconpath}" ]; then # Cache refresh if icon doesnt exist
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ else
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ if [[ ${iconpath} == "" ]]; then
+ # Retry with lowercase if icon not found
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") $(echo "$clientclass" | tr '[:upper:]' '[:lower:]' | sed 's/\ /-/g') | head -n 1)
+
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ newname=$(scripts/iconpatch $clientclass)
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$newname" | head -n 1)
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ # Fallback app icon, replace the path below to the fallback icon of your choice
+ # iconpath="/usr/share/icons/Win11-dark/mimes/48/application-x-executable.svg"
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "application-x-executable" | head -n 1)
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ fi
+ fi
+ done
+}
+
+# Do stuff here
+getwins
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ getwins
+ done
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/getfirstdayofmonth b/early/.config/eww/scripts/getfirstdayofmonth
new file mode 100755
index 000000000..e75171fe4
--- /dev/null
+++ b/early/.config/eww/scripts/getfirstdayofmonth
@@ -0,0 +1,39 @@
+#!/bin/bash
+# Thanks Bing!
+
+# Check if the argument is a valid number
+if [[ ! $1 =~ ^-?[0-9]+$ ]]; then
+ echo "Invalid argument: $1"
+ echo "Usage: getfirstdayofmonth [NUMBER]"
+ exit 1
+fi
+
+# Get the current month and year
+current_month=$(date +%m)
+current_year=$(date +%Y)
+
+# Add the argument to the current month and adjust the year if needed
+if [[ $1 -gt 0 ]]; then
+ next_month=$((current_month + $1))
+ next_year=$((current_year + ((next_month-1) / 12)))
+ next_month=$((current_month + ($1 % 12)))
+else
+ next_month=$((current_month + $1))
+ next_year=$((current_year + ((next_month-12) / 12)))
+ next_month=$((current_month + ($1 % 12)))
+fi
+
+if ((next_month > 12)); then
+ next_month=$((next_month % 12))
+elif ((next_month == 0)); then
+ next_month=12
+ # next_year=$((next_year - 1))
+elif ((next_month < 1)); then
+ next_month=$(( (next_month + 12) % 12 ))
+fi
+
+# Get the weekday name (%A), day number (%d), month name (%B) and year (%Y) of the first day of the next month
+first_day=$(date -d "$next_year-$next_month-01" '+%u %d %m %Y')
+
+# Print the result
+echo $first_day
\ No newline at end of file
diff --git a/early/.config/eww/scripts/hyprsettings b/early/.config/eww/scripts/hyprsettings
new file mode 100755
index 000000000..d1f482cd5
--- /dev/null
+++ b/early/.config/eww/scripts/hyprsettings
@@ -0,0 +1,51 @@
+#!/usr/bin/bash
+getoptions(){
+ rounding=$(hyprctl getoption decoration:rounding -j | gojq -r -c '.int')
+ gaps_in=$(hyprctl getoption general:gaps_in -j | gojq -r -c '.int')
+ gaps_out=$(hyprctl getoption general:gaps_out -j | gojq -r -c '.int')
+ border_size=$(hyprctl getoption general:border_size -j | gojq -r -c '.int')
+ force_no_accel=$(hyprctl getoption input:force_no_accel -j | gojq -r -c '.int')
+ input_sensitivity=$(hyprctl getoption input:sensitivity -j | gojq -r -c '.float')
+ touchpad_disable_while_typing=$(hyprctl getoption input:touchpad:disable_while_typing -j | gojq -r -c '.int')
+ touchpad_clickfinger_behavior=$(hyprctl getoption input:touchpad:clickfinger_behavior -j | gojq -r -c '.int')
+ blur=$(hyprctl getoption decoration:blur -j | gojq -r -c '.int')
+ blur_size=$(hyprctl getoption decoration:blur_size -j | gojq -r -c '.int')
+ blur_passes=$(hyprctl getoption decoration:blur_passes -j | gojq -r -c '.int')
+ blur_xray=$(hyprctl getoption decoration:blur_xray -j | gojq -r -c '.int')
+ nightlight=$(hyprctl getoption decoration:screen_shader -j | gojq -r -c '.str')
+ if [[ "$nightlight" == *"nothing.frag" || "$nightlight" == "[[EMPTY]]" || "$nightlight" == "" ]]; then
+ nightlight='false'
+ else
+ nightlight='true'
+ fi
+
+ echo -n '{'
+ echo -n "\"rounding\":$rounding,"
+ echo -n "\"gaps_in\":$gaps_in,"
+ echo -n "\"gaps_out\":$gaps_out,"
+ echo -n "\"border_size\":$border_size,"
+ echo -n "\"force_no_accel\":$force_no_accel,"
+ echo -n "\"input_sensitivity\":$input_sensitivity,"
+ echo -n "\"touchpad_disable_while_typing\":$touchpad_disable_while_typing,"
+ echo -n "\"touchpad_clickfinger_behavior\":$touchpad_clickfinger_behavior,"
+ echo -n "\"blur\":$blur,"
+ echo -n "\"blur_size\":$blur_size,"
+ echo -n "\"blur_passes\":$blur_passes,"
+ echo -n "\"blur_xray\":$blur_xray,"
+ echo -n "\"nightlight\":$nightlight,"
+
+ echo '"dummy":0}'
+}
+
+getoptions
+
+if [ "$1" == "--once" ]; then
+ exit 0
+elif [ "$1" == "tickle" ]; then
+ hyprctl keyword input:force_no_accel $(hyprctl getoption input:force_no_accel -j | gojq -r -c '.int')
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "activelayout>>" | while read -r line; do
+ # echo $line
+ getoptions
+ done
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/hyprtest b/early/.config/eww/scripts/hyprtest
new file mode 100755
index 000000000..593c665f6
--- /dev/null
+++ b/early/.config/eww/scripts/hyprtest
@@ -0,0 +1,10 @@
+#!/usr/bin/bash
+
+geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "firefox" | head -n 1
+
+socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r line; do
+ echo "$line"
+done
+
+
+
diff --git a/early/.config/eww/scripts/hyprview.sh b/early/.config/eww/scripts/hyprview.sh
new file mode 100755
index 000000000..d28d2b059
--- /dev/null
+++ b/early/.config/eww/scripts/hyprview.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/bash
+
+if [[ "$1" == "--close" ]]; then
+ hyprctl keyword monitor eDP-1,1920x1080@60,0x0,1
+ hyprctl keyword monitor eDP-1,addreserved,61,0,0,0
+else
+ hyprctl keyword monitor eDP-1,1920x1080@60,0x0,0.5
+ hyprctl keyword monitor eDP-1,addreserved,533,600,960,960
+fi
diff --git a/early/.config/eww/scripts/iconpatch b/early/.config/eww/scripts/iconpatch
new file mode 100755
index 000000000..542f4c164
--- /dev/null
+++ b/early/.config/eww/scripts/iconpatch
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+
+appname=$1
+
+if [[ "$1" == "code-url-handler" ]];then
+ echo 'code'
+elif [[ "$1" == "gnome-tweaks" ]];then
+ echo 'org.gnome.tweaks'
+elif [[ "$1" == "org."* ]];then
+ appname="${appname#*.}"
+ appname="${appname#*.}"
+ echo $appname
+fi
+
diff --git a/early/.config/eww/scripts/isopen.sh b/early/.config/eww/scripts/isopen.sh
new file mode 100755
index 000000000..03075a619
--- /dev/null
+++ b/early/.config/eww/scripts/isopen.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+getopen(){
+ ans=$(eww windows | grep -e "$1")
+ if [ "${ans:0:1}" == "*" ]; then
+ echo "true"
+ else
+ echo "false"
+ fi
+}
+
+getopen $1
\ No newline at end of file
diff --git a/early/.config/eww/scripts/language.cpp b/early/.config/eww/scripts/language.cpp
new file mode 100755
index 000000000..afb741f92
--- /dev/null
+++ b/early/.config/eww/scripts/language.cpp
@@ -0,0 +1,99 @@
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "nlohmann/json.hpp"
+
+#define SLEEP_SECONDS 5
+
+using namespace std;
+using json = nlohmann::json;
+
+string fileContents, currentLang;
+json languages;
+
+string readIfExists(const string& name) {
+ ifstream f(name.c_str());
+ stringstream buffer;
+ if (f) { // check if the file was opened successfully
+ buffer << f.rdbuf(); // read the whole file into a string stream
+ f.close(); // close the file when done
+ }
+ return buffer.str(); // return the string stream as a string
+}
+
+string exec(const char* cmd) {
+ array buffer;
+ string result;
+ unique_ptr pipe(popen(cmd, "r"), pclose);
+ if (!pipe) {
+ throw runtime_error("popen() failed!");
+ }
+ while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+ result += buffer.data();
+ }
+ return result;
+}
+
+void switchLang(const json& langJson) {
+ string cmd;
+ cmd = "ibus engine " + string(langJson["name_ibus"]);
+ exec(&cmd[0]);
+ cmd = "eww update lang_ibus='" + string(langJson.dump()) + "'";
+ exec(&cmd[0]);
+}
+
+void cycleLang() {
+ for (int i = 0; i < languages.size(); i++) {
+ json lang = languages[i];
+ if (string(lang["name_ibus"]) == currentLang) {
+ json toSwitchTo = languages[(i + 1) % int(languages.size())];
+ switchLang(toSwitchTo);
+ }
+ }
+}
+
+void getCurrentLang() {
+ for (json lang : languages) {
+ if (string(lang["name_ibus"]) == currentLang) {
+ cout << lang << '\n';
+ break;
+ }
+ }
+}
+
+int main(int argc, char* argv[]) {
+ // Change workdir
+ string workdir = string(getenv("HOME")) + "/.config/eww";
+ chdir(&workdir[0]);
+ // Get lang list, current lang
+ fileContents = readIfExists("modules/langs.json");
+ languages = json::parse(fileContents);
+ currentLang = exec("ibus engine");
+ currentLang.pop_back(); // Remove trailing newline
+ // Cycle?
+ if (argc > 1 && string(argv[1]) == "--cycle") {
+ cycleLang();
+ return 0;
+ }
+ if (argc > 2 && string(argv[1]) == "--switch") {
+ switchLang(json::parse(string(argv[2])));
+ return 0;
+ }
+
+ cout << "{\"name\":\"English (United "
+ "States)\",\"name_abbr\":\"ENG\",\"name_ibus\":\"xkb:us::eng\"}\n";
+ while (true) {
+ getCurrentLang();
+ sleep(5);
+ }
+}
\ No newline at end of file
diff --git a/early/.config/eww/scripts/launchapp b/early/.config/eww/scripts/launchapp
new file mode 100755
index 000000000..22a6ecc1e
--- /dev/null
+++ b/early/.config/eww/scripts/launchapp
@@ -0,0 +1,42 @@
+#!/usr/bin/bash
+
+~/.config/eww/scripts/toggle-overview.sh --close &
+~/.config/eww/scripts/toggle-winstart.sh --close &
+
+if [[ "$1" == ">"* ]]; then
+ args=( $1 )
+ if [[ "${args[0]}" == ">music" ]]; then
+ scripts/colormanage get
+ elif [[ "${args[0]}" == ">load" ]]; then
+ scripts/colormanage load "${args[1]}"
+ elif [[ "${args[0]}" == ">save" ]]; then
+ scripts/colormanage save "${args[1]}"
+ elif [[ "${args[0]}" == ">light" ]]; then
+ scripts/togglelight light
+ elif [[ "${args[0]}" == ">dark" ]]; then
+ scripts/togglelight dark
+ elif [[ "${args[0]}" == ">multi" ]]; then
+ echo -n 'multi' > 'scripts/workdir/__mode_colors.txt'
+ elif [[ "${args[0]}" == ">one" ]]; then
+ echo -n 'one' > 'scripts/workdir/__mode_colors.txt'
+ elif [[ "${args[0]}" == ">wall" ]]; then
+ scripts/colorgen 'images/wallpaper/wallpaper' '[Local wallpaper]' ''
+ scripts/colormanage get
+ elif [[ "${args[0]}" == ">segs" ]]; then
+ python3 scripts/waifupics.py --segs
+ elif [[ "${args[0]}" == ">uwu" ]]; then
+ python3 scripts/waifupics.py
+ elif [[ "${args[0]}" == ">r" ]]; then
+ pkill eww && eww daemon && eww open bar && eww open bottomline
+ else
+ # notify-send 'eww' 'Invalid command!'
+ false
+ fi
+else
+ cd ~
+ app=$1
+ eval "${app%\%*}" &
+ pkill launchapp
+fi
+
+
diff --git a/early/.config/eww/scripts/limitlen.py b/early/.config/eww/scripts/limitlen.py
new file mode 100755
index 000000000..20ed07a8d
--- /dev/null
+++ b/early/.config/eww/scripts/limitlen.py
@@ -0,0 +1,26 @@
+#!/bin/python3
+import sys
+
+def limit_length(s, newlength):
+ # Use len() function to get number of characters in s
+ char_count = 0
+ newstr = ''
+ # Use unicodedata.east_asian_width() function to check for double-width characters
+ import unicodedata
+ for c in s:
+ char_count += 1
+ if unicodedata.east_asian_width(c) == 'W':
+ char_count += 1
+ if char_count <= newlength:
+ newstr += c
+ else:
+ newstr = newstr + '...'
+ break
+ # Add double-width count to character count to get display length
+ return newstr
+
+original = sys.argv[1]
+newlen = int(sys.argv[2])
+newstr = limit_length(original, newlen)
+
+print(newstr)
diff --git a/early/.config/eww/scripts/listentries.py b/early/.config/eww/scripts/listentries.py
new file mode 100755
index 000000000..2e69e917b
--- /dev/null
+++ b/early/.config/eww/scripts/listentries.py
@@ -0,0 +1,71 @@
+#!/usr/bin/python3
+
+import desktop_entry_lib
+import os
+import json
+import subprocess
+
+full_output = {}
+
+def read(target_file) -> None:
+ entry = desktop_entry_lib.DesktopEntry.from_file(target_file)
+
+ print("Name: " + str(entry.Name.default_text))
+ print("Comment: " + str(entry.Comment.default_text))
+ print("Exec: " + str(entry.Exec))
+
+
+def getProperties(target_file) -> None:
+ entry = desktop_entry_lib.DesktopEntry.from_file(target_file)
+
+ # iconcmd = "/usr/bin/geticons " + str(entry.Icon)
+ # iconcmd = "/usr/bin/geticons"
+ # iconpath = str(subprocess.check_output(str(iconcmd), shell=True))
+ dirs = target_file.split('/')
+ entryname = dirs[-1]
+
+ # return
+ props = {
+ "name": str(entry.Name.default_text),
+ # "icon": str(entry.Icon),
+ "exec": str('gtk-launch ' + entryname)
+ }
+ return props
+
+
+if __name__ == "__main__":
+ entryFile = open("scripts/cache/entries.txt", "w")
+ # Get files
+ entries = list(str(s) for s in os.listdir("/usr/share/applications"))
+ entries_flatpak = list(str(s) for s in os.listdir("/var/lib/flatpak/exports/share/applications"))
+ entries_local = list(str('../../.local/share/applications/' + s) for s in os.listdir("../../.local/share/applications/"))
+
+ for app in entries:
+ alreadythere = False
+ for localized in entries_local:
+ if app in localized:
+ alreadythere = True
+
+ if not(alreadythere):
+ entries_local.append(str('/usr/share/applications/'+app))
+
+ for app in entries_flatpak:
+ alreadythere = False
+ for localized in entries_local:
+ if app in localized:
+ alreadythere = True
+
+ if not(alreadythere):
+ entries_local.append(str('/var/lib/flatpak/exports/share/applications/'+app))
+
+ # Get properties
+ for app in entries_local:
+ if app.find('.desktop') == -1: # Skip files that aren't desktop entries
+ continue
+ this_entry = getProperties(app)
+
+ full_output[this_entry['name']] = (this_entry)
+
+ # output=json.dumps(this_entry)
+ # print(output)
+ entryFile.write(json.dumps(full_output))
\ No newline at end of file
diff --git a/early/.config/eww/scripts/listentrynames.py b/early/.config/eww/scripts/listentrynames.py
new file mode 100755
index 000000000..99ae84a22
--- /dev/null
+++ b/early/.config/eww/scripts/listentrynames.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python3
+
+import desktop_entry_lib
+import os
+import json
+# from fuzzysearch import find_near_matches
+
+def read(target_file) -> None:
+ entry = desktop_entry_lib.DesktopEntry.from_file(target_file)
+
+ print("Name: " + str(entry.Name.default_text))
+ print("Comment: " + str(entry.Comment.default_text))
+ print("Exec: " + str(entry.Exec))
+
+
+def getProperties(target_file) -> None:
+ entry = desktop_entry_lib.DesktopEntry.from_file(target_file)
+
+ # return
+ props = {
+ "name": str(entry.Name.default_text),
+ "comment": str(entry.Comment.default_text),
+ "exec": str(entry.Exec),
+ "icon": str(entry.Icon)
+ }
+ return props
+
+
+if __name__ == "__main__":
+ entryFile = open("scripts/cache/entrynames.txt", "w")
+ # Get files
+ entries = list(str(s) for s in os.listdir("/usr/share/applications"))
+ entries_flatpak = list(str(s) for s in os.listdir("/var/lib/flatpak/exports/share/applications"))
+ entries_local = list(str('../../.local/share/applications/' + s) for s in os.listdir("../../.local/share/applications/"))
+
+ for app in entries:
+ alreadythere = False
+ for localized in entries_local:
+ if app in localized:
+ alreadythere = True
+
+ if not(alreadythere):
+ entries_local.append(str('/usr/share/applications/'+app))
+
+ for app in entries_flatpak:
+ alreadythere = False
+ for localized in entries_local:
+ if app in localized:
+ alreadythere = True
+
+ if not(alreadythere):
+ entries_local.append(str('/var/lib/flatpak/exports/share/applications/'+app))
+
+ # Get properties
+ for app in entries_local:
+ if app.find('.desktop') == -1: # Skip files that aren't desktop entries
+ continue
+
+ thisEntry = getProperties(app)
+
+ entryFile.write(thisEntry['name'])
+ entryFile.write('\n')
+
diff --git a/early/.config/eww/scripts/material_colors.py b/early/.config/eww/scripts/material_colors.py
new file mode 100755
index 000000000..6823412ce
--- /dev/null
+++ b/early/.config/eww/scripts/material_colors.py
@@ -0,0 +1,87 @@
+#!/bin/python3
+from material_color_utilities_python import *
+from pathlib import Path
+import sys
+
+img = 0
+newtheme=0
+if len(sys.argv) > 1 and sys.argv[1] == '--path':
+ img = Image.open(sys.argv[2])
+ basewidth = 64
+ wpercent = (basewidth/float(img.size[0]))
+ hsize = int((float(img.size[1])*float(wpercent)))
+ img = img.resize((basewidth,hsize),Image.Resampling.LANCZOS)
+ newtheme = themeFromImage(img)
+elif len(sys.argv) > 1 and sys.argv[1] == '--color':
+ colorstr = sys.argv[2]
+ newtheme = themeFromSourceColor(argbFromHex(colorstr))
+else:
+ img = Image.open(str(Path.home())+'/.config/eww/images/wallpaper/wallpaper')
+ basewidth = 64
+ wpercent = (basewidth/float(img.size[0]))
+ hsize = int((float(img.size[1])*float(wpercent)))
+ img = img.resize((basewidth,hsize),Image.Resampling.LANCZOS)
+ newtheme = themeFromImage(img)
+
+colorscheme=0
+if("-l" in sys.argv):
+ colorscheme = newtheme.get('schemes').get('light')
+else:
+ colorscheme = newtheme.get('schemes').get('dark')
+
+primary = colorscheme.get_primary()
+onPrimary = colorscheme.get_onPrimary()
+primaryContainer = colorscheme.get_primaryContainer()
+onPrimaryContainer = colorscheme.get_onPrimaryContainer()
+secondary = colorscheme.get_secondary()
+onSecondary = colorscheme.get_onSecondary()
+secondaryContainer = colorscheme.get_secondaryContainer()
+onSecondaryContainer = colorscheme.get_onSecondaryContainer()
+tertiary = colorscheme.get_tertiary()
+onTertiary = colorscheme.get_onTertiary()
+tertiaryContainer = colorscheme.get_tertiaryContainer()
+onTertiaryContainer = colorscheme.get_onTertiaryContainer()
+error = colorscheme.get_error()
+onError = colorscheme.get_onError()
+errorContainer = colorscheme.get_errorContainer()
+onErrorContainer = colorscheme.get_onErrorContainer()
+background = colorscheme.get_background()
+onBackground = colorscheme.get_onBackground()
+surface = colorscheme.get_surface()
+onSurface = colorscheme.get_onSurface()
+surfaceVariant = colorscheme.get_surfaceVariant()
+onSurfaceVariant = colorscheme.get_onSurfaceVariant()
+outline = colorscheme.get_outline()
+shadow = colorscheme.get_shadow()
+inverseSurface = colorscheme.get_inverseSurface()
+inverseOnSurface = colorscheme.get_inverseOnSurface()
+inversePrimary = colorscheme.get_inversePrimary()
+
+
+print('$primary: ' + hexFromArgb(primary) + ';')
+print('$onPrimary: ' + hexFromArgb(onPrimary) + ';')
+print('$primaryContainer: ' + hexFromArgb(primaryContainer) + ';')
+print('$onPrimaryContainer: ' + hexFromArgb(onPrimaryContainer) + ';')
+print('$secondary: ' + hexFromArgb(secondary) + ';')
+print('$onSecondary: ' + hexFromArgb(onSecondary) + ';')
+print('$secondaryContainer: ' + hexFromArgb(secondaryContainer) + ';')
+print('$onSecondaryContainer: ' + hexFromArgb(onSecondaryContainer) + ';')
+print('$tertiary: ' + hexFromArgb(tertiary) + ';')
+print('$onTertiary: ' + hexFromArgb(onTertiary) + ';')
+print('$tertiaryContainer: ' + hexFromArgb(tertiaryContainer) + ';')
+print('$onTertiaryContainer: ' + hexFromArgb(onTertiaryContainer) + ';')
+print('$error: ' + hexFromArgb(error) + ';')
+print('$onError: ' + hexFromArgb(onError) + ';')
+print('$errorContainer: ' + hexFromArgb(errorContainer) + ';')
+print('$onErrorContainer: ' + hexFromArgb(onErrorContainer) + ';')
+print('$colorbarbg: ' + hexFromArgb(background) + ';')
+print('$onBackground: ' + hexFromArgb(onBackground) + ';')
+print('$surface: ' + hexFromArgb(surface) + ';')
+print('$onSurface: ' + hexFromArgb(onSurface) + ';')
+print('$surfaceVariant: ' + hexFromArgb(surfaceVariant) + ';')
+print('$onSurfaceVariant: ' + hexFromArgb(onSurfaceVariant) + ';')
+print('$outline: ' + hexFromArgb(outline) + ';')
+print('$shadow: ' + hexFromArgb(shadow) + ';')
+print('$inverseSurface: ' + hexFromArgb(inverseSurface) + ';')
+print('$inverseOnSurface: ' + hexFromArgb(inverseOnSurface) + ';')
+print('$inversePrimary: ' + hexFromArgb(inversePrimary) + ';')
\ No newline at end of file
diff --git a/early/.config/eww/scripts/memory b/early/.config/eww/scripts/memory
new file mode 100755
index 000000000..d2856d98a
--- /dev/null
+++ b/early/.config/eww/scripts/memory
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+
+while true; do
+ # human-readable
+ freeH=$(free -h --si | rg "Mem:")
+ swapfreeH=$(free -h --si | rg "Swap:")
+ # non-human-readable
+ freeN=$(free --mega | rg "Mem:")
+ swapfreeN=$(free --mega | rg "Swap:")
+
+ total="$(echo "$freeH" | awk '{ print $2 }')"
+ used="$(echo "$freeH" | awk '{ print $3 }')"
+ t="$(echo "$freeN" | awk '{ print $2 }')"
+ u="$(echo "$freeN" | awk '{ print $3 }')"
+
+ swaptotal="$(echo "$swapfreeH" | awk '{ print $2 }')"
+ swapused="$(echo "$swapfreeH" | awk '{ print $3 }')"
+ swapt="$(echo "$swapfreeN" | awk '{ print $2 }')"
+ swapu="$(echo "$swapfreeN" | awk '{ print $3 }')"
+
+ free=$(printf '%.1fG' "$(bc -l <<< "($t - $u) / 1000")")
+ perc=$(printf '%.1f' "$(free -m | rg Mem | awk '{print ($3/$2)*100}')")
+
+ swapfree=$(printf '%.1fG' "$(bc -l <<< "($swapt - $swapu) / 1000")")
+ swapperc=$(printf '%.1f' "$(free -m | rg Swap | awk '{print ($3/$2)*100}')")
+
+ echo '{ "total": "'"$total"'", "used": "'"$used"'", "free": "'"$free"'", "swaptotal": "'"$swaptotal"'", "swapused": "'"$swapused"'", "swappercentage": '"$swapperc"', "swapfree": "'"$swapfree"'", "percentage": '"$perc"' }'
+
+ sleep 3
+done
diff --git a/early/.config/eww/scripts/mousetrack.cpp b/early/.config/eww/scripts/mousetrack.cpp
new file mode 100755
index 000000000..f8c5df702
--- /dev/null
+++ b/early/.config/eww/scripts/mousetrack.cpp
@@ -0,0 +1,52 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+using namespace std;
+
+void cavaToJson(std::string& s) {
+ for(int i = 0; i < s.size(); i++){
+ if(s[i] == ';') s[i] = ',';
+ }
+ s.pop_back();
+}
+
+void cursorPosToJson(std::string& s) {
+ for(int i = 0; i < s.size(); i++){
+ if(s[i] == ';') s[i] = ',';
+ }
+ s.pop_back();
+}
+
+string exec(const char* cmd) {
+ array buffer;
+ string result;
+ unique_ptr pipe(popen(cmd, "r"), pclose);
+ if (!pipe) {
+ throw runtime_error("popen() failed!");
+ }
+ while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+ result += buffer.data();
+ }
+ return result;
+}
+
+int main()
+{
+ std::unique_ptr pipe(popen("cava -p ~/.config/eww/scripts/custom_configs/cava", "r"), pclose);
+ if (!pipe) {
+ throw std::runtime_error("popen() failed!");
+ }
+ boost::iostreams::file_descriptor_source fd(fileno(pipe.get()), boost::iostreams::never_close_handle);
+ boost::iostreams::stream is(fd);
+ std::string line;
+ while (std::getline(is, line)) {
+ string st = exec("hyprctl cursorpos");
+ st.pop_back();
+ cout << '[' << st << ']' << endl;
+ }
+ return 0;
+}
\ No newline at end of file
diff --git a/early/.config/eww/scripts/music b/early/.config/eww/scripts/music
new file mode 100755
index 000000000..7d11d9b96
--- /dev/null
+++ b/early/.config/eww/scripts/music
@@ -0,0 +1,168 @@
+#!/usr/bin/env bash
+
+prevtitle=''
+prevartist=''
+
+get_status() {
+ s=$1
+ if [ "$s" = "Playing" ]; then
+ echo ""
+ else
+ echo ""
+ fi
+}
+
+get_length_sec() {
+ len=$1
+ if [ -z "$len" ]; then
+ echo 0
+ else
+ bc <<< "$len / 1000000"
+ fi
+}
+
+get_length_time() {
+ len=$1
+ if [ -n "$len" ]; then
+ len=$(bc <<< "$len / 1000000 + 1")
+ date -d@"$len" +%M:%S
+ else
+ echo ""
+ fi
+}
+
+get_position() {
+ pos=$1
+ len=$2
+ if [ -n "$pos" ]; then
+ bc -l <<< "$pos / $len * 100"
+ else
+ echo 0
+ fi
+}
+
+get_position_time() {
+ pos=$1
+ if [ -n "$pos" ]; then
+ date -d@"$(bc <<< "$pos / 1000000")" +%M:%S
+ else
+ echo ""
+ fi
+}
+
+get_cover() {
+ # COVER_URL=$1
+ mkdir -p "eww_covers"
+ cd "eww_covers" || exit
+
+ IMGPATH="cover_art"
+ echo '{"image": "eww_covers/cover_art_default", "color": {"alpha":"100","colors":{"color0":"#111215","color1":"#2B698F","color10":"#597591","color11":"#447CC0","color12":"#3A9FB7","color13":"#6192A6","color14":"#60ABCC","color15":"#c4c6ca","color2":"#597591","color3":"#447CC0","color4":"#3A9FB7","color5":"#6192A6","color6":"#60ABCC","color7":"#c4c6ca","color8":"#898a8d","color9":"#2B698F"},"special":{"background":"#111215","cursor":"#c4c6ca","foreground":"#c4c6ca"},"wallpaper":"~/.config/eww/eww_covers/cover_art","source":""}}'
+
+ playerctl -F metadata mpris:artUrl 2>/dev/null | while read -r COVER_URL; do
+ music_source=''
+ if [[ "$COVER_URL" = https* ]]; then
+ music_source=''
+ coverurl="$(playerctl metadata mpris:artUrl)"
+ coverurl_highres_yt="$(echo $coverurl | sed 's/hqdefault/maxresdefault/g')"
+ coverurl_highres_soundcloud="$(echo $coverurl | sed 's/80x80/500x500/g')"
+
+ # SoundCloud
+ if [[ "$coverurl" == *"sndcdn"* ]]; then
+ music_source=''
+ curl --silent --output "$IMGPATH""_soundcloud" "$coverurl_highres_soundcloud" -q –read-timeout=0.1
+ cp "$IMGPATH""_soundcloud" "$IMGPATH"
+ imgsize=$(echo $(du -b ~/.config/eww/eww_covers/cover_art | tr '\t' '\n' | grep -v 'cover_art'))
+ # Youtube
+ elif [[ "$coverurl" == *"ytimg"* ]]; then
+ music_source=''
+ curl --silent --output "$IMGPATH""_yt" "$coverurl_highres_yt" -q –read-timeout=0.1
+ cp "$IMGPATH""_yt" "$IMGPATH"
+ imgsize=$(echo $(du -b ~/.config/eww/eww_covers/cover_art | tr '\t' '\n' | grep -v 'cover_art'))
+ # Likely YT Music
+ elif [[ "$coverurl" == *"googleusercontent"* ]]; then
+ music_source=''
+ curl --silent --output "$IMGPATH""_other" "$coverurl" -q –read-timeout=0.1
+ cp "$IMGPATH""_other" "$IMGPATH"
+ imgsize=$(echo $(du -b ~/.config/eww/eww_covers/cover_art | tr '\t' '\n' | grep -v 'cover_art'))
+ # Any other
+ else
+ curl --silent --output "$IMGPATH""_other" "$coverurl" -q –read-timeout=0.1
+ cp "$IMGPATH""_other" "$IMGPATH"
+ imgsize=$(echo $(du -b ~/.config/eww/eww_covers/cover_art | tr '\t' '\n' | grep -v 'cover_art'))
+ fi
+ # Fallback
+ if [ "$imgsize" == "0" ] || [ ! "$(diff ~/.config/eww/eww_covers/cover_art ~/.config/eww/eww_covers/cover_art_error)" ]; then
+ curl --silent --output "$IMGPATH""_lowres" "$coverurl" -q –read-timeout=0.1
+ cp "$IMGPATH""_lowres" "$IMGPATH"
+ fi
+
+ #Generate colors
+ cd ..
+ scripts/colorgen 'eww_covers/'$IMGPATH $coverurl "$music_source"
+ cd "eww_covers"
+ elif [ "$COVER_URL" = "" ]; then
+ echo '{"image": "", "color": "$bg"}'
+ else
+ COVER_URL="${COVER_URL:7}"
+ cp "$COVER_URL" "$IMGPATH"
+
+ cd ..
+ scripts/colorgen '"eww_covers/'$IMGPATH'"' $coverurl "$music_source"
+ cd "eww_covers"
+ fi
+ done
+}
+
+# SANITIZE FIX
+sanitize() {
+ echo "$1" | sed 's/"/\"/g'
+}
+
+if [ "$1" = "cover" ]; then
+ get_cover
+elif [ "$1" == "name" ]; then
+ lentolimit=41
+ if [ "$2" != "" ]; then
+ lentolimit=$2
+ fi
+ echo '{"artist": "", "title": ""}'
+ playerctl -F metadata -f '{{title}}\{{artist}}\' 2>/dev/null | while IFS="$(printf '\\')" read -r title artist; do
+
+ if [[ "$title" == *" - YouTube"* && "$artist" == "" ]]; then
+ continue
+ elif [[ "$title" == *"YouTube Music" && "$artist" == "" ]]; then
+ continue
+ fi
+ title=$(scripts/limitlen.py "$title" "$lentolimit")
+ artist=$(scripts/limitlen.py "$artist" "$lentolimit")
+
+ gojq --null-input -r -c \
+ --arg artist "$(sanitize "$artist")" \
+ --arg title "$(sanitize "$title")" \
+ '{"artist": $artist, "title": $title}'
+
+ done
+else
+ echo '{"artist": "", "title": "", "status": "", "position": "", "position_time": "", "length": ""}'
+ playerctl -F metadata -f '{{title}}\{{artist}}\{{status}}\{{position}}\' 2>/dev/null | while IFS="$(printf '\\')" read -r title artist status position; do
+
+ if [[ "$title" == *" - YouTube" && "$artist" == "" ]]; then
+ continue
+ elif [[ "$title" == *"YouTube Music" && "$artist" == "" ]]; then
+ continue
+ fi
+ len=$(playerctl metadata mpris:length)
+ title=$(scripts/limitlen.py "$title" 40)
+ artist=$(scripts/limitlen.py "$artist" 40)
+
+ gojq --null-input -r -c \
+ --arg artist "$(sanitize "$artist")" \
+ --arg title "$(sanitize "$title")" \
+ --arg status "$(get_status "$status")" \
+ --arg pos "$(get_position "$position" "$len")" \
+ --arg pos_time "$(get_position_time "$position")" \
+ --arg length "$(get_length_time "$len")" \
+ '{"artist": $artist, "title": $title, "status": $status, "position": $pos, "position_time": $pos_time, "length": $length}'
+
+ done
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/net b/early/.config/eww/scripts/net
new file mode 100755
index 000000000..fc1d97df7
--- /dev/null
+++ b/early/.config/eww/scripts/net
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+
+toggle() {
+ status=$(rfkill -J | jaq -r '.rfkilldevices[] | select(.type == "wlan") | .soft' | head -1)
+
+ if [ "$status" = "unblocked" ]; then
+ rfkill block wlan
+ else
+ rfkill unblock wlan
+ fi
+}
+
+if [ "$1" = "toggle" ]; then
+ toggle
+else
+ while true; do
+ status=$(nmcli g | tail -n 1 | awk '{print $1}')
+ signal=$(nmcli -f in-use,signal dev wifi | rg "\*" | awk '{ print $2 }')
+ essid=$(nmcli -t -f NAME connection show --active | head -n1 | sed 's/\"/\\"/g')
+
+ icons=("" "" "" "" "")
+
+ if [ "$status" = "disconnected" ] ; then
+ icon=""
+ color="#988ba2"
+ else
+ level=$(awk -v n="$signal" 'BEGIN{print int((n-1)/20)}')
+ if [ "$level" -gt 4 ]; then
+ level=4
+ fi
+
+ icon=${icons[$level]}
+ color="#cba6f7"
+ fi
+
+ echo '{ "essid": "'"$essid"'", "icon": "'"$icon"'", "color": "'"$color"'", "level": "'"$level"'" }'
+
+ sleep 4
+ done
+fi
diff --git a/early/.config/eww/scripts/notifications b/early/.config/eww/scripts/notifications
new file mode 100755
index 000000000..d8680f279
--- /dev/null
+++ b/early/.config/eww/scripts/notifications
@@ -0,0 +1,95 @@
+#!/usr/bin/env bash
+
+tmp=scripts/cache/dunst-history.json
+lock="scripts/cache/dunst-toggle.lock"
+lockinfo="scripts/cache/dunst-lock-info"
+cd ~/.config/eww
+
+touch $lockinfo
+
+declare ids
+export toggle_icon=""
+
+sanitize() {
+ retstr=$(echo $1 | sed 's/\\\\/\\\\\\\\/g' | sed 's/"/\\"/g')
+
+ # echo "original: $1"
+ echo "$retstr"
+ # echo 'sanitized'
+}
+
+get_ids() {
+ mapfile -t ids < <(dunstctl history | gojq -r ".data[] | .[] | select(.appname.data != \"Spotify\") | .id.data")
+}
+
+get_notif() {
+ echo -n '['
+
+ for id in "${ids[@]}"; do
+ mapfile -t n < <(gojq -r ".data[] | .[] | select(.id.data == $id) | .appname.data, .summary.data, .body.data" "$tmp" | sed -r '/^\s*$/d' | sed -e 's/\%/ percent/g')
+ ohkay=$(sanitize "${n[1]}")
+ # echo $ohkay
+ echo -n ''$([ $id -eq ${ids[0]} ] || echo ,)' { '
+ echo -n '"id": "'"$id"'", "appname": "'"${n[0]}"'", "summary": "'"$ohkay"'", "body": "'"${n[2]}"'"'
+ echo -n '}'
+ done
+
+ echo ']'
+}
+
+toggle() {
+ dunstctl set-paused toggle
+
+ if [ ! -f "$lock" ]; then
+ export toggle_icon=""
+ touch "$lock"
+ else
+ export toggle_icon=""
+ rm "$lock"
+ fi
+
+ echo "icon_change" > $lockinfo
+}
+
+clear() {
+ dunstctl history-clear
+ echo "icon_change" > $lockinfo
+}
+
+get_icon() {
+ if [ ${#ids[@]} -eq 0 ]; then
+ echo ""
+ else
+ echo ""
+ fi
+}
+
+if [ "$1" == "--once" ]; then
+ dunstctl history > "$tmp"
+ get_ids
+ get_notif
+elif [ "$1" == "toggle" ]; then
+ toggle
+ dunstctl history > "$tmp"
+elif [ "$1" == "clear" ]; then
+ clear
+ dunstctl history > "$tmp"
+elif [ "$1" == "icons" ]; then
+ dunstctl history > "$tmp"
+ get_ids
+ is_paused=$(dunstctl is-paused)
+ echo '{"toggle_icon": "'"$toggle_icon"'", "paused": '"$is_paused"', "icon": "'"$(get_icon)"'"}'
+ tail -f "$lockinfo" | while read -r; do
+ get_ids
+ is_paused=$(dunstctl is-paused)
+ echo '{"toggle_icon": "'"$toggle_icon"'", "paused": '"$is_paused"', "icon": "'"$(get_icon)"'"}'
+ done
+else
+ dunstctl history > "$tmp"
+ get_ids
+ get_notif
+ tail -f "$tmp" 2>/dev/null | rg --line-buffered "aa\{sv\}" | while read -r; do
+ get_ids
+ get_notif
+ done
+fi
diff --git a/early/.config/eww/scripts/overview-thumbnails b/early/.config/eww/scripts/overview-thumbnails
new file mode 100755
index 000000000..cfe8e7967
--- /dev/null
+++ b/early/.config/eww/scripts/overview-thumbnails
@@ -0,0 +1,94 @@
+#!/usr/bin/bash
+dummy='{"thumbnail": null}'
+
+getwins() {
+ overviewopen=$(scripts/isopen.sh overview)
+ if [ "$overviewopen" == "true" ]; then
+ return
+ fi
+
+ focusedws=$(hyprctl -j monitors | gojq -r '.[] | select(.focused == true) | .activeWorkspace.id')
+ hyprctlclients=$(hyprctl clients -j \
+ | grep -v '"xwayland": ' \
+ | grep -v '"grouped": ' \
+ | grep -v '"pid": ' \
+ | grep -v '"fullscreenMode": ' \
+ | grep -v '"monitor": ' \
+ | grep -v '"floating": ' \
+ | grep -v '"fullscreen": ' \
+ | grep -v '"pinned":') # | grep -v ""name":")
+ # echo '-=-=-=- final output -=-=-=-'
+ # echo "$toprint"
+ # echo $(echo "$hyprctlclients") # Print on one line only
+
+ workspace=('[' '[' '[' '[' '[' '[' '[' '[' '[' '[')
+ workspacecnt=(1 1 1 1 1 1 1 1 1 1)
+ outputstring='{'
+
+ wsid=0
+
+ # echo $hyprctlclients | gojq -c '.[]'
+
+ IFS=$'\n'
+ clientsarr=( $(echo $hyprctlclients | gojq -c -M '.[]') )
+
+ #For every window
+ for client in "${clientsarr[@]}"; do
+ wsid=$(echo $client | gojq -c -M '.workspace.id')
+ ((wsid-=1))
+ if [[ "$wsid" == "-100" ]]; then
+ continue
+ fi
+ if [[ "${workspacecnt[wsid]}" != "0" ]]; then
+ workspace[wsid]+=","
+ fi
+
+ clientclass=$(echo $client | gojq -r '.class')
+ iconpath=''
+ thumbnailpath=''
+
+ # Get thumbnail
+ clientaddress=$(echo $client | gojq -r '.address')
+ atx=$(echo $client | gojq -c '.at[0]')
+ aty=$(echo $client | gojq -c '.at[1]')
+ sizex=$(echo $client | gojq -c '.size[0]')
+ sizey=$(echo $client | gojq -c '.size[1]')
+ if [ "$(( wsid + 1 ))" == "$focusedws" ]; then
+ grim -g "$atx,$aty ""$sizex"'x'"$sizey" "scripts/cache/thumbnails/$clientaddress.png" -q 1 -t png -l 9
+ fi
+
+ # If thumbnail available
+ if [ -f "scripts/cache/thumbnails/$clientaddress.png" ]; then
+ thumbnailpath="scripts/cache/thumbnails/$clientaddress.png"
+ fi
+
+ client="\"$clientaddress\": \"$thumbnailpath\","
+ outputstring+="$client"
+
+ # echo -n "Window: $clientclass"
+ # echo '; icon path: '"$iconpath"
+
+
+ # echo "Count: ${workspacecnt[wsid]}"
+ # echo 'ADDED TO: workspace '"$wsid"
+ # echo ' --> '"${workspace[wsid]}"
+ ((workspacecnt[wsid]+=1))
+ done
+
+ outputstring=${outputstring::-1}
+ outputstring+='}'
+
+ # echo $outputstring
+}
+
+# Do stuff here
+getwins
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ while true; do
+ getwins
+ sleep 0.8
+ done
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/overview-wrapper b/early/.config/eww/scripts/overview-wrapper
new file mode 100755
index 000000000..b48d0769a
--- /dev/null
+++ b/early/.config/eww/scripts/overview-wrapper
@@ -0,0 +1,11 @@
+#!/usr/bin/bash
+
+scripts/overview "$1"
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r line; do
+ scripts/overview "$1"
+ done
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/overview-wrapper1 b/early/.config/eww/scripts/overview-wrapper1
new file mode 100755
index 000000000..42cb0deab
--- /dev/null
+++ b/early/.config/eww/scripts/overview-wrapper1
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+
+scripts/overview --row 1
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ # This sleep is necessary
+ # It prevents the script from being faster than hyprctl
+ sleep 0.025
+ scripts/overview --row 1
+ done
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/overview-wrapper2 b/early/.config/eww/scripts/overview-wrapper2
new file mode 100755
index 000000000..22c648bd7
--- /dev/null
+++ b/early/.config/eww/scripts/overview-wrapper2
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+
+scripts/overview --row 2
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ # This sleep is necessary
+ # It prevents the script from being faster than hyprctl
+ sleep 0.025
+ scripts/overview --row 2
+ done
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/overview.cpp b/early/.config/eww/scripts/overview.cpp
new file mode 100755
index 000000000..e2f671931
--- /dev/null
+++ b/early/.config/eww/scripts/overview.cpp
@@ -0,0 +1,104 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "nlohmann/json.hpp"
+using namespace std;
+using json = nlohmann::json;
+
+#define ROWS 2
+#define COLS 5
+
+string clients;
+json clientjson, apps;
+json workspaces;
+string workspaceInitTemplate =
+ "[{\"address\":\"_none\",\"at\":[0,0],\"class\":\"workspace\",\"size\":["
+ "1920,1080],\"title\":\"__WORKSPACE_ID\",\"workspace\":{\"id\":__WORKSPACE_"
+ "ID,\"name\":\"__WORKSPACE_ID\"}}]";
+vector appnames;
+
+string exec(const char* cmd) {
+ array buffer;
+ string result;
+ unique_ptr pipe(popen(cmd, "r"), pclose);
+ if (!pipe) {
+ throw runtime_error("popen() failed!");
+ }
+ while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+ result += buffer.data();
+ }
+ return result;
+}
+
+void initWorkspaces() {
+ for (int i = 0; i < ROWS; i++) {
+ workspaces.push_back(json::array({})); // []
+ for (int j = 0; j < COLS; j++) {
+ int workspaceNum = i * COLS + j + 1; // Note: Workspaces are 1-base
+ string workspaceInitString =
+ regex_replace(workspaceInitTemplate, regex("__WORKSPACE_ID"),
+ to_string(workspaceNum));
+ json thisWorkspaceInit = json::parse(workspaceInitString);
+ workspaces[i].push_back(thisWorkspaceInit);
+ }
+ }
+}
+
+void addApp(json& client) {
+ if(string(client["class"]).size() == 0) return;
+
+ // Calculate position in overview tile
+ int workspaceNum = int(client["workspace"]["id"]) - 1; // 1-base to 0-base
+ if(workspaceNum < 0) return; //Skip scratchpads/specials, as they have negative ids
+ int i = workspaceNum / COLS, j = workspaceNum % COLS;
+
+ // New JSON for app
+ json newApp =
+ R"({"class": "", "workspace": {"id": 8, "name": "8"}, "title": "", "at": [0, 0], "size": [0, 0], "address": [], "icon": ""})"_json;
+ // Add normal stuff
+ newApp["class"] = client["class"];
+ newApp["address"] = client["address"];
+ newApp["workspace"] = client["workspace"];
+ newApp["title"] = client["title"];
+ newApp["at"] = client["at"];
+ newApp["size"] = client["size"];
+ // Icon path
+ string filename = string("./scripts/cache/" + string(client["class"]));
+ std::ifstream ifs(filename);
+ std::string iconpath((std::istreambuf_iterator(ifs)),
+ (std::istreambuf_iterator()));
+ while (iconpath.size() > 0 && *iconpath.rbegin() == '\n') iconpath.pop_back(); // Remove '\n'
+ newApp["icon"] = iconpath;
+
+ workspaces[i][j].push_back(newApp);
+}
+
+void getApps() {
+ // Get clients
+ clients = exec("hyprctl clients -j | gojq -c -M");
+ clientjson = json::parse(clients);
+
+ // Access the values
+ for (json client : clientjson) {
+ addApp(client);
+ }
+}
+
+int main(int argc, char* argv[]) {
+ ios::sync_with_stdio(false);
+ cin.tie(nullptr);
+
+ initWorkspaces();
+ getApps();
+ if (argc == 2) cout << workspaces[0][stoi(argv[1]) - 1] << '\n';
+ if (argc == 3 && string(argv[1]) == "--row" && stoi(argv[2]) >= 1 && stoi(argv[2]) <= ROWS) {
+ cout << workspaces[stoi(argv[2]) - 1] << '\n';
+ } else
+ cout << workspaces << '\n';
+}
\ No newline at end of file
diff --git a/early/.config/eww/scripts/overview1 b/early/.config/eww/scripts/overview1
new file mode 100755
index 000000000..8c1e4f34a
--- /dev/null
+++ b/early/.config/eww/scripts/overview1
@@ -0,0 +1,129 @@
+#!/usr/bin/bash
+dummy='{"address":"_none","at":[0,0],"class":"workspace","size":[1920,1080],"title":"<___overview_workspace>","workspace":{"id":<___overview_workspace>, "name": "<___overview_workspace>"}}'
+
+getwins() {
+ hyprctlclients=$(hyprctl clients -j \
+ | grep -v '"mapped": ' \
+ | grep -v '"hidden": ' \
+ | grep -v '"floating": ' \
+ | grep -v '"monitor": ' \
+ | grep -v '"pid": ' \
+ | grep -v '"xwayland": ' \
+ | grep -v '"pinned":' \
+ | grep -v '"fullscreen": ' \
+ | grep -v '"fullscreenMode": ' \
+ | grep -v '"fakeFullscreen": ' \
+ | grep -v '"grouped": ')
+
+ workspace=('[' '[' '[' '[' '[' '[' '[' '[' '[' '[')
+ workspacecnt=(1 1 1 1 1 1 1 1 1 1)
+
+ wsid=0
+ for i in 0 1 2 3 4; do
+ workspace[i]+=$(echo $dummy | sed "s/<___overview_workspace>/$((i+1))/g")
+ done
+
+ # echo $hyprctlclients | gojq -c '.[]'
+
+ IFS=$'\n'
+ clientsarr=( $(echo $hyprctlclients | gojq -c -M '.[]') )
+
+ #For every window
+ for client in "${clientsarr[@]}"; do
+ wsid=$(echo $client | gojq -c -M '.workspace.id')
+ if [[ $wsid -gt 5 ]]; then
+ continue
+ fi
+ ((wsid-=1))
+ iconpath=''
+ clientclass=$(echo "$client" | gojq -r '.class')
+ if [[ "$clientclass" == "" ]]; then
+ continue
+ fi
+ if [[ "$wsid" == "-100" ]]; then
+ continue
+ fi
+ if [[ "${workspacecnt[wsid]}" != "0" ]]; then
+ workspace[wsid]+=","
+ fi
+
+ # If thumbnail available
+ # if [ -f "scripts/cache/thumbnails/$clientaddress.png" ]; then
+ # thumbnailpath="scripts/cache/thumbnails/$clientaddress.png"
+ # fi
+
+ # Get app icon
+ if [ -f "scripts/cache/$clientclass" ]; then
+ iconpath=$(cat scripts/cache/$clientclass)
+ if [ ! -f "${iconpath}" ]; then # Cache refresh if icon doesnt exist
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ else
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ if [[ ${iconpath} == "" ]]; then
+ # Retry with lowercase if icon not found
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") $(echo "$clientclass" | tr '[:upper:]' '[:lower:]' | sed 's/\ /-/g') | head -n 1)
+
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ newname=$(scripts/iconpatch $clientclass)
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$newname" | head -n 1)
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ # Fallback app icon, replace the path below to the fallback icon of your choice
+ # iconpath="/usr/share/icons/Win11-dark/mimes/48/application-x-executable.svg"
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "application-x-executable" | head -n 1)
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ fi
+ fi
+
+ client=${client::-1}
+ client+=",\"icon\": \"$iconpath\"}"
+ workspace[wsid]+="$client" # Add window to workspace JSON
+
+ # echo -n "Window: $clientclass"
+ # echo '; icon path: '"$iconpath"
+
+
+ # echo "Count: ${workspacecnt[wsid]}"
+ # echo 'ADDED TO: workspace '"$wsid"
+ # echo ' --> '"${workspace[wsid]}"
+ ((workspacecnt[wsid]+=1))
+ done
+
+ for i in 0 1 2 3 4; do
+ workspace[i]+=']'
+ done
+
+ # echo '-=-=-=-=-=- Summary -=-=-=-=-=-'
+
+ # -=-=-=-=-=-=-=-=-=-=-=-=-=-=- PRINT STUFF HERE -=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ echo -n '['
+ for i in 0 1 2 3 4; do
+ if [[ $i != 0 ]]; then
+ echo -n ','
+ fi
+ echo -n "${workspace[i]}"
+ done
+ echo ']'
+}
+
+# Do stuff here
+getwins
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ getwins
+ done
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/overview2 b/early/.config/eww/scripts/overview2
new file mode 100755
index 000000000..97aa1c15b
--- /dev/null
+++ b/early/.config/eww/scripts/overview2
@@ -0,0 +1,123 @@
+#!/usr/bin/bash
+dummy='{"address":"_none","at":[0,0],"class":"workspace","size":[1920,1080],"title":"<___overview_workspace>","workspace":{"id":<___overview_workspace>, "name": "<___overview_workspace>"}}'
+
+getwins() {
+ hyprctlclients=$(hyprctl clients -j \
+ | grep -v '"mapped": ' \
+ | grep -v '"hidden": ' \
+ | grep -v '"floating": ' \
+ | grep -v '"monitor": ' \
+ | grep -v '"pid": ' \
+ | grep -v '"xwayland": ' \
+ | grep -v '"pinned":' \
+ | grep -v '"fullscreen": ' \
+ | grep -v '"fullscreenMode": ' \
+ | grep -v '"fakeFullscreen": ' \
+ | grep -v '"grouped": ')
+
+
+
+ workspace=('[' '[' '[' '[' '[' '[' '[' '[' '[' '[')
+ workspacecnt=(1 1 1 1 1 1 1 1 1 1)
+
+ wsid=0
+ for i in 5 6 7 8 9; do
+ workspace[i]+=$(echo $dummy | sed "s/<___overview_workspace>/$((i+1))/g")
+ done
+
+ # echo $hyprctlclients | gojq -c '.[]'
+
+ IFS=$'\n'
+ clientsarr=( $(echo $hyprctlclients | gojq -c -M '.[]') )
+ for client in "${clientsarr[@]}"; do
+ wsid=$(echo $client | gojq -c -M '.workspace.id')
+ if [[ $wsid -lt 6 ]]; then
+ continue
+ fi
+ ((wsid-=1))
+ iconpath=''
+ clientclass=$(echo $client | gojq -r '.class')
+ if [[ "$clientclass" == "" ]]; then
+ continue
+ fi
+ if [[ "$wsid" == "-100" ]]; then
+ continue
+ fi
+ if [[ "${workspacecnt[wsid]}" != "0" ]]; then
+ workspace[wsid]+=","
+ fi
+
+ # Get app icon
+ if [ -f "scripts/cache/$clientclass" ]; then
+ iconpath=$(cat scripts/cache/$clientclass)
+ if [ ! -f "${iconpath}" ]; then # Cache refresh if icon doesnt exist
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ else
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ if [[ ${iconpath} == "" ]]; then
+ # Retry with lowercase if icon not found
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") $(echo "$clientclass" | tr '[:upper:]' '[:lower:]' | sed 's/\ /-/g') | head -n 1)
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ newname=$(scripts/iconpatch $clientclass)
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$newname" | head -n 1)
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ # Fallback app icon, replace the path below to the fallback icon of your choice
+ # iconpath="/usr/share/icons/Win11-dark/mimes/48/application-x-executable.svg"
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "application-x-executable" | head -n 1)
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ fi
+ fi
+
+ client=${client::-1}
+ client+=",\"icon\": \"$iconpath\"}"
+ workspace[wsid]+="$client" # Add window to workspace JSON
+
+ # echo -n "Window: $clientclass"
+ # echo '; icon path: '"$iconpath"
+
+
+ # echo "Count: ${workspacecnt[wsid]}"
+ # echo 'ADDED TO: workspace '"$wsid"
+ # echo ' --> '"${workspace[wsid]}"
+ ((workspacecnt[wsid]+=1))
+ done
+
+ for i in 5 6 7 8 9; do
+ workspace[i]+=']'
+ done
+
+ # echo '-=-=-=-=-=- Summary -=-=-=-=-=-'
+
+ # -=-=-=-=-=-=-=-=-=-=-=-=-=-=- PRINT STUFF HERE -=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ echo -n '['
+ for i in 5 6 7 8 9; do
+ if [[ $i != 5 ]]; then
+ echo -n ','
+ fi
+ echo -n "${workspace[i]}"
+ done
+ echo ']'
+}
+
+# Do stuff here
+getwins
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ getwins
+ done
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/scrollmonth b/early/.config/eww/scripts/scrollmonth
new file mode 100755
index 000000000..52e23fece
--- /dev/null
+++ b/early/.config/eww/scripts/scrollmonth
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+
+# Get month diff
+diffmonth=$(eww get monthshift)
+if [[ "$1" == "up" ]]; then
+ diffmonth=$(( $diffmonth - 1 ))
+else
+ diffmonth=$(( $diffmonth + 1 ))
+fi
+eww update monthshift="$diffmonth" &
+
+# Get dates
+dates=$(scripts/getfirstdayofmonth "$diffmonth")
+dateSplitted=( $dates )
+newTitle=$(date -d "${dateSplitted[3]}-${dateSplitted[2]}-${dateSplitted[1]}" "+%B %Y")
+
+if [[ "$diffmonth" == "0" ]]; then
+ dates=''
+fi
+eww update calendartitle="$newTitle" &
+eww update calendar="$(scripts/calendarlayout $dates)"
\ No newline at end of file
diff --git a/early/.config/eww/scripts/selectwindow b/early/.config/eww/scripts/selectwindow
new file mode 100755
index 000000000..2f88d9099
--- /dev/null
+++ b/early/.config/eww/scripts/selectwindow
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+
+selected=$(eval $2 get selected)
+
+
+if [[ $selected == "_none" ]] || [[ $selected == "" ]]; then
+ eval "$2 update selected=$1"
+ selected=$(eval $2 get selected)
+else
+ hyprctl dispatch movetoworkspacesilent $3,address:$selected
+
+ eval "$2 update selected=_none"
+ selected=$(eval $2 get selected)
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/supersecretsettings/culture b/early/.config/eww/scripts/supersecretsettings/culture
new file mode 100755
index 000000000..28c5c0abf
--- /dev/null
+++ b/early/.config/eww/scripts/supersecretsettings/culture
@@ -0,0 +1,18 @@
+#!/usr/bin/env bash
+plugged=0
+
+swaybg -i images/wallpaper/wallpaper-cultured &
+
+while true; do
+ STATE=$(cat /sys/class/power_supply/BATT/status)
+ if [[ "$STATE" = "Charging" ]]; then
+ if [ "$plugged" -eq "0" ]; then
+ plugged=1
+ notify-send 'Aghh~~~~'
+ play scripts/supersecretsettings/culture.mp3
+ fi
+ else
+ plugged=0
+ fi
+ sleep 1
+done
\ No newline at end of file
diff --git a/early/.config/eww/scripts/supersecretsettings/doreload b/early/.config/eww/scripts/supersecretsettings/doreload
new file mode 100755
index 000000000..363dbedbc
--- /dev/null
+++ b/early/.config/eww/scripts/supersecretsettings/doreload
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+
+cp ~/.config/hypr/hyprland.conf temporary_config.conf && cp temporary_config.conf ~/.config/hypr/hyprland.conf
+rm temporary_config.conf
+
+pkill swaybg
+swaybg -i images/wallpaper/wallpaper-normal
+
+kill $(pidof eww) && eww open bar && eww open bg-decor
diff --git a/early/.config/eww/scripts/swapws.cpp b/early/.config/eww/scripts/swapws.cpp
new file mode 100755
index 000000000..ead7b34e5
--- /dev/null
+++ b/early/.config/eww/scripts/swapws.cpp
@@ -0,0 +1,85 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "nlohmann/json.hpp"
+using namespace std;
+using json = nlohmann::json;
+
+int workspace_a, workspace_b;
+string clients;
+json clientjson;
+vector windows_a, windows_b;
+bool output = false;
+
+string exec(const char* cmd) {
+ array buffer;
+ string result;
+ unique_ptr pipe(popen(cmd, "r"), pclose);
+ if (!pipe) {
+ throw runtime_error("popen() failed!");
+ }
+ while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+ result += buffer.data();
+ }
+ return result;
+}
+
+void tryAddApp(const json& client) {
+ if (int(client["workspace"]["id"]) == workspace_a)
+ windows_a.push_back(client["address"]);
+ else if (int(client["workspace"]["id"]) == workspace_b)
+ windows_b.push_back(client["address"]);
+}
+
+void getApps() {
+ // Get clients
+ clients = exec("hyprctl clients -j | gojq -c -M");
+ clientjson = json::parse(clients);
+
+ // Access the values
+ for (json client : clientjson) {
+ tryAddApp(client);
+ }
+}
+
+void swapWorkspaces() {
+ for (string address : windows_a) {
+ string cmd = "hyprctl dispatch movetoworkspacesilent " +
+ to_string(workspace_b) + ",address:" + address;
+ if (output) cout << cmd << '\n';
+ exec(&cmd[0]);
+ }
+ for (string address : windows_b) {
+ string cmd = "hyprctl dispatch movetoworkspacesilent " +
+ to_string(workspace_a) + ",address:" + address;
+ if (output) cout << cmd << '\n';
+ exec(&cmd[0]);
+ }
+}
+
+int main(int argc, char* argv[]) {
+ ios::sync_with_stdio(false);
+
+ if (argc < 3) {
+ cout << "Usage: swapws [WORKSPACE_NUMBER_1] [WORKSPACE_NUMBER_2]"
+ << endl;
+ return 0;
+ }
+ if (argc == 4 && string(argv[3]) == "--output") output = true;
+
+ workspace_a = stoi(string(argv[1]));
+ workspace_b = stoi(string(argv[2]));
+ if (workspace_a <= 0 || workspace_b <= 0 || workspace_a == workspace_b) {
+ cout << "Nahhh that's stupid" << endl;
+ return 0;
+ }
+
+ getApps();
+ swapWorkspaces();
+}
\ No newline at end of file
diff --git a/early/.config/eww/scripts/taskbar.cpp b/early/.config/eww/scripts/taskbar.cpp
new file mode 100755
index 000000000..ea1980006
--- /dev/null
+++ b/early/.config/eww/scripts/taskbar.cpp
@@ -0,0 +1,86 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "nlohmann/json.hpp"
+using namespace std;
+using json = nlohmann::json;
+
+string clients, pinned;
+json clientjson, apps;
+vector appnames;
+
+string exec(const char* cmd) {
+ array buffer;
+ string result;
+ unique_ptr pipe(popen(cmd, "r"), pclose);
+ if (!pipe) {
+ throw runtime_error("popen() failed!");
+ }
+ while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+ result += buffer.data();
+ }
+ return result;
+}
+
+void addApp(json& client) {
+ if(string(client["class"]).size() == 0) return;
+
+ bool found = false;
+ for (json& obj : apps) {
+ auto it = obj.find("class");
+ if (it != obj.end() && *it == client["class"]) {
+ found = true;
+ obj["count"] = int(obj["count"]) + 1;
+ obj["address"].push_back(client["address"]);
+ obj["workspace"].push_back(client["workspace"]["id"]);
+ break;
+ }
+ }
+ if (!found) {
+ json newApp =
+ R"({"class": "", "count": 1, "workspace": [], "address": [], "icon": ""})"_json;
+ newApp["class"] = client["class"];
+ newApp["address"].push_back(client["address"]);
+ newApp["workspace"].push_back(client["workspace"]["id"]);
+ string filename = string("./scripts/cache/" + string(client["class"]));
+ std::ifstream ifs(filename);
+ std::string iconpath((std::istreambuf_iterator(ifs)),
+ (std::istreambuf_iterator()));
+ // cout << "PATH: " << filename << " | ICON PATH: " << iconpath << '\n';
+ while (iconpath.size() > 0 && *iconpath.rbegin() == '\n') iconpath.pop_back(); // Remove '\n'
+ newApp["icon"] = iconpath;
+
+ apps.push_back(newApp);
+ }
+}
+
+void getAppNameAndCount() {
+ // Get clients
+ clients = exec("hyprctl clients -j | gojq -c -M");
+ pinned = exec("cat modules/taskbar.json | gojq -c -M");
+ clientjson = json::parse(clients);
+ apps = json::parse(pinned);
+
+ // Access the values
+ for (json client : clientjson) {
+ addApp(client);
+ // cout << client << '\n';
+ }
+}
+
+void getAppIcon() {}
+
+int main() {
+ ios::sync_with_stdio(false);
+ cin.tie(nullptr);
+
+ getAppNameAndCount();
+ getAppIcon();
+ cout << apps << '\n';
+}
\ No newline at end of file
diff --git a/early/.config/eww/scripts/taskbarloop b/early/.config/eww/scripts/taskbarloop
new file mode 100755
index 000000000..edec3a371
--- /dev/null
+++ b/early/.config/eww/scripts/taskbarloop
@@ -0,0 +1,13 @@
+#!/usr/bin/bash
+
+scripts/taskbar
+
+if [ "$1" == "--once" ]; then
+ scripts/taskbar
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ scripts/taskbar
+ echo
+ done
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/taskviewlayout-wrapper b/early/.config/eww/scripts/taskviewlayout-wrapper
new file mode 100755
index 000000000..bf3e5b967
--- /dev/null
+++ b/early/.config/eww/scripts/taskviewlayout-wrapper
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+
+scripts/taskviewlayout
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ # This sleep is necessary
+ # It prevents the script from being faster than hyprctl
+ sleep 0.025
+ scripts/taskviewlayout
+ done
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/taskviewlayout.cpp b/early/.config/eww/scripts/taskviewlayout.cpp
new file mode 100755
index 000000000..465cfb177
--- /dev/null
+++ b/early/.config/eww/scripts/taskviewlayout.cpp
@@ -0,0 +1,187 @@
+#include // This script tries to show windows of workspaces
+#include // in a reasonable way in Task View
+#include //
+#include // Goal: all windows on the same row have equal height
+#include //
+#include //
+#include // binary search -> ok scale
+#include // -> sort small-wide windows -> match pairs -> rows
+#include
+
+#include "nlohmann/json.hpp"
+
+using namespace std;
+using json = nlohmann::json;
+
+#define COLS 10
+#define RES_WIDTH 1920
+#define RES_HEIGHT 1080
+#define RESERVED_BOTTOM 250
+#define SPACING 30
+#define TITLEBAR_AND_BORDER_HEIGHT 51
+#define MIN_ROW_HEIGHT 186 // 100px (else scroll down)
+#define MAX_ROW_HEIGHT 300 // 100px (else scroll down)
+const json EMPTY_JSON = R"([])"_json;
+const string workspaceInitTemplate = "[]";
+
+int numOfApps[COLS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+string clients;
+json clientjson, workspaces;
+json workspacesArranged;
+
+string exec(const char* cmd) {
+ array buffer;
+ string result;
+ unique_ptr pipe(popen(cmd, "r"), pclose);
+ if (!pipe) {
+ throw runtime_error("popen() failed!");
+ }
+ while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+ result += buffer.data();
+ }
+ return result;
+}
+
+void initWorkspaces() {
+ int i = 0;
+ for (int j = 0; j < COLS; j++) {
+ int workspaceNum = i * COLS + j + 1; // Note: Workspaces are 1-base
+ string workspaceInitString =
+ regex_replace(workspaceInitTemplate, regex("__WORKSPACE_ID"),
+ to_string(workspaceNum));
+ json thisWorkspaceInit = json::parse(workspaceInitString);
+ workspaces.push_back(thisWorkspaceInit);
+ }
+}
+
+void addApp(json& client) {
+ if(string(client["class"]).size() == 0) return;
+ // Calculate position in overview tile
+ int workspaceNum = int(client["workspace"]["id"]) - 1; // 1-base to 0-base
+ if (workspaceNum < 0)
+ return; // Skip scratchpads/specials, as they have negative ids
+ int i = workspaceNum / COLS, j = workspaceNum % COLS;
+
+ // New JSON for app
+ json newApp =
+ R"({"class": "", "workspace": {"id": 8, "name": "8"}, "title": "", "at": [0, 0], "size": [0, 0], "address": [], "icon": ""})"_json;
+
+ // Add normal stuff
+ newApp["class"] = client["class"];
+ newApp["address"] = client["address"];
+ newApp["workspace"] = client["workspace"];
+ newApp["title"] = client["title"];
+ newApp["size"] = client["size"];
+
+ // Icon path
+ string filename = string("./scripts/cache/" + string(client["class"]));
+ std::ifstream ifs(filename);
+ std::string iconpath((std::istreambuf_iterator(ifs)),
+ (std::istreambuf_iterator()));
+ while (iconpath.size() > 0 && *iconpath.rbegin() == '\n')
+ iconpath.pop_back(); // Remove '\n'
+ newApp["icon"] = iconpath;
+
+ // Counting
+ int size_x = int(newApp["size"][0]);
+ int size_y = int(newApp["size"][1]);
+ if (size_x <= size_y * 2) { // Normal
+ newApp["countAs"] = 1; // count as 1 window
+ } else { // Very wide
+ newApp["countAs"] = 2; // count as 2 windows
+ }
+ numOfApps[int(newApp["workspace"]["id"]) - 1] += int(newApp["countAs"]);
+
+ // Push
+ workspaces[j].push_back(newApp);
+}
+
+void getApps() {
+ // Get clients
+ clients = exec("hyprctl clients -j | gojq -c -M");
+ clientjson = json::parse(clients);
+
+ // Access the values
+ for (json client : clientjson) {
+ addApp(client);
+ }
+}
+
+void scaleWindows() {
+ for (int i = 0; i < workspaces.size(); i++) {
+ if (workspaces[i].size() == 0) {
+ workspacesArranged.push_back(EMPTY_JSON);
+ continue;
+ }
+ // Declare
+ int numOfRows = numOfApps[i] > 3 ? int(ceil(sqrt(numOfApps[i]))) : 1;
+ int winsPerRow = (numOfApps[i] + (numOfRows - 1)) / numOfRows; // ceil
+ json thisWorkspace = EMPTY_JSON;
+ for (int i = 0; i < numOfRows; i++) thisWorkspace.push_back(EMPTY_JSON);
+ int rowHeight =
+ min(max(MIN_ROW_HEIGHT,
+ (RES_HEIGHT - RESERVED_BOTTOM - SPACING) / numOfRows -
+ TITLEBAR_AND_BORDER_HEIGHT - SPACING),
+ MAX_ROW_HEIGHT);
+ int thisRowCnt = 0, rowsDone = 0;
+
+ // cout << "Workspace " << i + 1 << " | Rows: " << numOfRows
+ // << " | Per row: " << winsPerRow << '\n';
+
+ // Scale
+ for (json& window : workspaces[i]) {
+ int cntAs = int(window["countAs"]);
+ if (cntAs == 1) {
+ window["size"][0] = int(window["size"][0]) /
+ (float(window["size"][1]) / rowHeight);
+ window["size"][1] = rowHeight;
+ } else { // cntAs == 2
+ window["size"][1] =
+ int(float(window["size"][1]) /
+ (float(window["size"][0]) / (rowHeight * 2)));
+ window["size"][0] = rowHeight * 2;
+ }
+
+ // int minWidth = string(window["title"]).size() * 9;
+ // cout << "Window: " << string(window["title"])
+ // << ", min width: " << minWidth << '\n';
+ // if (window["size"][0] < minWidth) {
+ // window["size"][1] = int(window["size"][1]) *
+ // (float(minWidth) /
+ // int(window["size"][0]));
+ // window["size"][0] = minWidth;
+ // }
+ // cout << " --> " << window["size"][0] << "x" << window["size"][1]
+ // << '\n';
+
+ thisWorkspace[rowsDone].push_back(window);
+ thisRowCnt += int(window["countAs"]);
+ if (thisRowCnt >= winsPerRow) {
+ rowsDone++;
+ thisRowCnt = 0;
+ }
+ }
+
+ workspacesArranged.push_back(thisWorkspace);
+ }
+}
+
+int main(int argc, char* argv[]) {
+ ios::sync_with_stdio(false);
+
+ // Get windows in workspaces, counting
+ initWorkspaces();
+ getApps();
+
+ // cout << ">>>>>>>> [DEBUG INGO START] >>>>>>>>" << '\n';
+ // cout << workspaces << '\n';
+ // cout << "<<<<<<<< [DEBUG INGO END] <<<<<<<<" << '\n' << '\n';
+
+ // cout << "# of apps: ";
+ // for (int i = 0; i < COLS; i++) cout << numOfApps[i] << ' ';
+ // cout << '\n';
+ // Scaling, arranging
+ scaleWindows();
+
+ cout << workspacesArranged << '\n';
+}
\ No newline at end of file
diff --git a/early/.config/eww/scripts/toggle-allapps.sh b/early/.config/eww/scripts/toggle-allapps.sh
new file mode 100755
index 000000000..d41f83695
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-allapps.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/bash
+state=$(eww get winstart_allapps)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update winstart_allapps=false
+else
+ eww update winstart_allapps=true
+ # This sleep is necessary for it to animate smoothly!
+ sleep 0.2
+ eww update allapps="$(eww get allapps_get)"
+fi
diff --git a/early/.config/eww/scripts/toggle-bottombar.sh b/early/.config/eww/scripts/toggle-bottombar.sh
new file mode 100755
index 000000000..f6fd9561d
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-bottombar.sh
@@ -0,0 +1,18 @@
+#!/usr/bin/bash
+state=$(eww get rev_bottombar)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update anim_open_bottombar=false
+ eww update rev_bottombar=false
+ # eww update force_sys_rev=false
+ sleep 0.15
+ eww close bottombar 2>/dev/null
+ eww close bottombar-back 2>/dev/null
+ eww update cavajson=''
+else
+ eww update anim_open_bottombar=true
+ eww open bottombar-back
+ eww open bottombar
+ eww update rev_bottombar=true
+ # eww update force_sys_rev=true &
+fi
diff --git a/early/.config/eww/scripts/toggle-calendar.sh b/early/.config/eww/scripts/toggle-calendar.sh
new file mode 100755
index 000000000..bf4cfb736
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-calendar.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/bash
+state=$(eww get rev_calendar)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update anim_open_calendar=false
+ eww update rev_calendar=false
+ sleep 0.15
+ eww close calendar 2>/dev/null
+else
+ eww update anim_open_calendar=true
+ eww open calendar
+ eww update rev_calendar=true
+fi
diff --git a/early/.config/eww/scripts/toggle-compactmode.sh b/early/.config/eww/scripts/toggle-compactmode.sh
new file mode 100755
index 000000000..fc8d65195
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-compactmode.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+state=$(hyprctl getoption decoration:rounding -j | gojq '.int')
+
+if [[ "$state" != "0" || "$1" == "--enable" ]]; then
+ eww update compact=true &
+ hyprctl keyword decoration:rounding 0
+ hyprctl keyword general:gaps_in 0
+ hyprctl keyword general:gaps_out 0
+ hyprctl keyword monitor eDP-1,addreserved,69,0,0,0
+ if [[ "$2" == "--border" ]]; then
+ hyprctl keyword general:border_size "$3"
+ else
+ hyprctl keyword general:border_size 1
+ fi
+else
+ eww update compact=false &
+ hyprctl reload
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/toggle-dash.sh b/early/.config/eww/scripts/toggle-dash.sh
new file mode 100755
index 000000000..de17b1011
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-dash.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/bash
+cd ~/.config/eww || exit
+
+reserves=$(hyprctl monitors -j | gojq -r -c '.[0]["reserved"]')
+if [[ "$1" == "--keypress" && "$reserves" == "[0,0,0,50]" ]]; then
+ scripts/toggle-winactions.sh
+ exit
+fi
+
+state=$(eww get rev_dash)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update anim_open_dash=false
+ eww update rev_dash=false
+ sleep 0.08
+ eww close dashboard 2>/dev/null
+else
+ scripts/toggle-overview.sh --close &
+ scripts/toggle-osettings.sh --close &
+ scripts/toggle-onotify.sh --close &
+ eww update anim_open_dash=true
+ eww open dashboard
+ eww update rev_dash=true
+fi
diff --git a/early/.config/eww/scripts/toggle-dashfs.sh b/early/.config/eww/scripts/toggle-dashfs.sh
new file mode 100755
index 000000000..978b729f4
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-dashfs.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/bash
+cd ~/.config/eww || exit
+
+reserves=$(hyprctl monitors -j | gojq -r -c '.[0]["reserved"]')
+if [[ "$1" == "--keypress" && "$reserves" == "[0,0,0,50]" ]]; then
+ scripts/toggle-winactions.sh
+ exit
+fi
+
+state=$(eww get rev_dashfs)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update anim_open_dashfs=false
+ eww update rev_dashfs=false
+ sleep 0.15
+ eww close dashfs 2>/dev/null
+ eww update cavajson=''
+else
+ eww update anim_open_dashfs=true
+ eww open dashfs
+ eww update rev_dashfs=true
+fi
diff --git a/early/.config/eww/scripts/toggle-music.sh b/early/.config/eww/scripts/toggle-music.sh
new file mode 100755
index 000000000..8b0b7cd7e
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-music.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+state=$(eww get music_open)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update anim_open_music=false
+ eww update music_open=false
+ sleep 0.2
+ eww close music 2>/dev/null
+ eww update cavajson=''
+else
+ eww update anim_open_music=true
+ eww open music
+ eww update music_open=true
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/toggle-nightlight.sh b/early/.config/eww/scripts/toggle-nightlight.sh
new file mode 100755
index 000000000..3845d741c
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-nightlight.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/bash
+currentshader=$(hyprctl getoption decoration:screen_shader -j | gojq -r '.str')
+
+if [[ "$currentshader" != *"extradark.frag" ]]; then
+ hyprctl keyword decoration:screen_shader '~/.config/hypr/shaders/extradark.frag'
+else
+ hyprctl keyword decoration:screen_shader ''
+ hyprctl reload
+fi
+
+scripts/hyprsettings tickle
\ No newline at end of file
diff --git a/early/.config/eww/scripts/toggle-onotify.sh b/early/.config/eww/scripts/toggle-onotify.sh
new file mode 100755
index 000000000..d49c09424
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-onotify.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/bash
+cd ~/.config/eww || exit
+
+reserves=$(hyprctl monitors -j | gojq -r -c '.[0]["reserved"]')
+if [[ "$1" == "--keypress" && "$reserves" == "[0,0,0,50]" ]]; then
+ scripts/toggle-winnotif.sh
+ exit
+fi
+
+state=$(eww get rev_ontf)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update anim_open_ontf=false
+ eww update rev_ontf=false
+ # eww update force_sys_rev=false
+ sleep 0.15
+ eww close onotify 2>/dev/null
+else
+ eww update anim_open_ontf=true
+ eww open onotify
+ eww update rev_ontf=true &
+ # eww update force_sys_rev=true &
+fi
diff --git a/early/.config/eww/scripts/toggle-osd-bright.sh b/early/.config/eww/scripts/toggle-osd-bright.sh
new file mode 100755
index 000000000..b0733e5b2
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-osd-bright.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/bash
+cd ~/.config/eww
+reserves=$(hyprctl monitors -j | gojq -r -c '.[0]["reserved"]')
+state=$(eww get osd_vol)
+
+closewinvol() {
+ eww update osd_vol=false
+ sleep 0.2
+ eww close winosd_vol 2>/dev/null
+}
+closewinosd() {
+ eww update osd_bright=false
+ sleep 0.2
+ eww close winosd_bright 2>/dev/null
+}
+openwinosd() {
+ if [ "$state" = "true" ]; then
+ closewinvol
+ fi
+ eww open winosd_bright
+ eww update osd_bright=true
+}
+closeosd() {
+ eww update osd_bright=false
+ sleep 0.2
+ eww close osd 2>/dev/null
+}
+openosd() {
+ eww open osd
+ eww update osd_bright=true
+}
+
+if [ "$reserves" = "[0,0,0,50]" ]; then # windoes mode active
+ eww close osd 2>/dev/null &
+ if [[ "$1" == "--open" ]]; then
+ openwinosd
+ else
+ closewinosd
+ fi
+ exit 0
+fi
+
+eww close winosd_vol 2>/dev/null &
+eww close winosd_bright 2>/dev/null &
+if [[ "$1" == "--open" ]]; then
+ openosd
+elif [[ "$1" == "--close" ]]; then
+ closeosd
+else
+ closeosd
+fi
diff --git a/early/.config/eww/scripts/toggle-osd-vol.sh b/early/.config/eww/scripts/toggle-osd-vol.sh
new file mode 100755
index 000000000..105cf6ca7
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-osd-vol.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/bash
+cd ~/.config/eww || exit
+reserves=$(hyprctl monitors -j | gojq -r -c '.[0]["reserved"]')
+state=$(eww get osd_bright)
+
+closewinbright() {
+ eww update osd_bright=false
+ sleep 0.2
+ eww close winosd_bright 2>/dev/null
+}
+closewinosd() {
+ eww update osd_vol=false
+ sleep 0.2
+ eww close winosd_vol 2>/dev/null
+}
+openwinosd() {
+ if [ "$state" = "true" ]; then
+ closewinbright
+ fi
+ eww open winosd_vol
+ eww update osd_vol=true
+}
+closeosd() {
+ eww update osd_vol=false
+ sleep 0.2
+ eww close osd 2>/dev/null
+}
+openosd() {
+ eww open osd
+ eww update osd_vol=true
+}
+
+if [ "$reserves" = "[0,0,0,50]" ]; then # windoes mode active
+ eww close osd &
+ if [[ "$1" == "--open" ]]; then
+ openwinosd
+ else
+ closewinosd
+ fi
+ exit 0
+fi
+
+eww close winosd_vol 2>/dev/null &
+eww close winosd_bright 2>/dev/null &
+if [[ "$1" == "--open" ]]; then
+ openosd
+elif [[ "$1" == "--close" ]]; then
+ closeosd
+else
+ closeosd
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/toggle-osettings.sh b/early/.config/eww/scripts/toggle-osettings.sh
new file mode 100755
index 000000000..256abc001
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-osettings.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/bash
+cd ~/.config/eww || exit
+
+reserves=$(hyprctl monitors -j | gojq -r -c '.[0]["reserved"]')
+if [[ "$1" == "--keypress" && "$reserves" == "[0,0,0,50]" ]]; then
+ scripts/toggle-winnews.sh
+ exit
+fi
+
+
+state=$(eww get rev_ostg)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update anim_open_ostg=false
+ eww update rev_ostg=false
+ sleep 0.15
+ eww close osettings 2>/dev/null
+ eww update oquery=''
+else # state = false
+ eww update anim_open_ostg=true
+ eww update oquery='' &
+ eww open osettings
+ eww update rev_ostg=true &
+fi
diff --git a/early/.config/eww/scripts/toggle-overview.sh b/early/.config/eww/scripts/toggle-overview.sh
new file mode 100755
index 000000000..eba150db3
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-overview.sh
@@ -0,0 +1,29 @@
+#!/usr/bin/bash
+cd ~/.config/eww || exit
+mkdir -p ~/.config/eww/scripts/cache/
+
+reserves=$(hyprctl monitors -j | gojq -r -c '.[0]["reserved"]')
+if [[ "$reserves" == "[0,0,0,50]" ]]; then
+ if [[ "$1" == "--keypress" ]]; then
+ scripts/toggle-winstart.sh
+ exit
+ elif [[ "$1" == "--overview" && "$reserves" == "[0,0,0,50]" ]]; then
+ scripts/toggle-wintaskview.sh
+ exit
+ fi
+fi
+
+state=$(eww get open_overview)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww close overview 2>/dev/null &
+ eww update overview_query='' &
+ eww update open_overview=false &
+else
+ scripts/allapps > scripts/cache/entries.txt &
+ scripts/allappnames > scripts/cache/entrynames.txt &
+ eww update overview_query='' &
+ eww update overview_hover_name='{"class":"LMB: Focus | MMB: Close | RMB: Select/Move","title":"Activities Overview","workspace":{"id":5,"name":"5"},"icon": "/usr/share/icons/breeze-dark/actions/16/window.svg"}' &
+ eww open overview
+ eww update open_overview=true
+fi
diff --git a/early/.config/eww/scripts/toggle-supercontext.sh b/early/.config/eww/scripts/toggle-supercontext.sh
new file mode 100755
index 000000000..42850a000
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-supercontext.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/bash
+state=$(eww get rev_supercontext)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update anim_open_supercontext=false
+ eww update rev_supercontext=false
+ sleep 0.1
+ eww close supercontext 2>/dev/null
+else
+ eww update supercontext_pos_x="$(hyprctl cursorpos -j | gojq '.x')"
+ eww update supercontext_pos_y="$(hyprctl cursorpos -j | gojq '.y')" &
+ eww update anim_open_supercontext=true &
+ eww open supercontext
+ eww update rev_supercontext=true
+ eww update ws_to_swap=0
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/toggle-themer.sh b/early/.config/eww/scripts/toggle-themer.sh
new file mode 100755
index 000000000..4b5ea1a17
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-themer.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/bash
+state=$(eww get rev_themer)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update anim_open_themer=false
+ eww update rev_themer=false
+ sleep 0.25
+ eww close themer 2>/dev/null
+else
+ eww update anim_open_themer=true
+ eww open themer
+ eww update rev_themer=true
+fi
diff --git a/early/.config/eww/scripts/toggle-winactions.sh b/early/.config/eww/scripts/toggle-winactions.sh
new file mode 100755
index 000000000..d8e4908f5
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-winactions.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/bash
+state=$(eww get rev_winactions)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ if [[ "$2" == "settings" ]]; then
+ gnome-control-center &
+ fi
+ if [[ "$2" == "power" ]]; then
+ gnome-control-center power &
+ fi
+ eww update anim_open_winactions=false
+ eww update rev_winactions=false
+ sleep 0.1
+ eww close winactions 2>/dev/null
+else
+ eww update anim_open_winactions=true
+ eww open winactions
+ eww update rev_winactions=true
+fi
diff --git a/early/.config/eww/scripts/toggle-wingamebar.sh b/early/.config/eww/scripts/toggle-wingamebar.sh
new file mode 100755
index 000000000..bfc5ca163
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-wingamebar.sh
@@ -0,0 +1,12 @@
+#!/usr/bin/bash
+state=$(eww get rev_wingamebar)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww close wingamebar 2>/dev/null
+ eww update anim_open_wingamebar=false
+ eww update rev_wingamebar=false
+else
+ eww update anim_open_wingamebar=true
+ eww open wingamebar
+ eww update rev_wingamebar=true
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/toggle-winlang.sh b/early/.config/eww/scripts/toggle-winlang.sh
new file mode 100755
index 000000000..16420ffec
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-winlang.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/bash
+state=$(eww get rev_winlang)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update anim_open_winlang=false
+ eww update rev_winlang=false
+ sleep 0.1
+ eww close winlang 2>/dev/null
+else
+ eww update anim_open_winlang=true
+ eww open winlang
+ eww update rev_winlang=true
+fi
diff --git a/early/.config/eww/scripts/toggle-winmode.sh b/early/.config/eww/scripts/toggle-winmode.sh
new file mode 100755
index 000000000..3f9809f43
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-winmode.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/bash
+reserves=$(hyprctl monitors -j | gojq -r -c '.[0]["reserved"]')
+
+if [[ "$reserves" == "[0,61,0,0]" ]]; then
+ eww close bottomline 2>/dev/null
+ eww open winbar
+ eww close bar 2>/dev/null
+ hyprctl keyword monitor eDP-1,addreserved,0,50,0,0
+
+ hyprctl keyword decoration:rounding 8
+ hyprctl keyword general:border_size 1
+ hyprctl keyword decoration:drop_shadow true
+
+ hyprctl keyword general:col.active_border 'rgba(494949dd)'
+ hyprctl keyword general:col.inactive_border 'rgba(494949aa)'
+else
+ eww close winbar 2>/dev/null
+ eww open bar
+ eww open bottomline
+ hyprctl keyword monitor eDP-1,addreserved,61,0,0,0
+
+ hyprctl reload
+fi
diff --git a/early/.config/eww/scripts/toggle-winnews.sh b/early/.config/eww/scripts/toggle-winnews.sh
new file mode 100755
index 000000000..c29d319c4
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-winnews.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/bash
+state=$(eww get rev_winnews)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update anim_open_winnews=false
+ eww update rev_winnews=false
+ sleep 0.15
+ eww close winnews 2>/dev/null
+ eww update oquery=''
+else
+ eww update anim_open_winnews=true
+ eww update oquery='' &
+ eww open winnews
+ eww update rev_winnews=true
+fi
diff --git a/early/.config/eww/scripts/toggle-winnotif.sh b/early/.config/eww/scripts/toggle-winnotif.sh
new file mode 100755
index 000000000..4fdcf1a81
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-winnotif.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/bash
+state=$(eww get rev_winnotif)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update anim_open_winnotif=false
+ eww update rev_winnotif=false
+ sleep 0.2
+ eww close winnotif 2>/dev/null
+else
+ eww update anim_open_winnotif=true
+ eww open winnotif
+ eww update rev_winnotif=true
+fi
diff --git a/early/.config/eww/scripts/toggle-winpowermenu.sh b/early/.config/eww/scripts/toggle-winpowermenu.sh
new file mode 100755
index 000000000..9388cfb28
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-winpowermenu.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+state=$(eww get rev_winpowermenu)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update anim_open_winpowermenu=false
+ eww update rev_winpowermenu=false
+ eww update winsearch='' &
+ sleep 0.15
+ eww close winpowermenu 2>/dev/null
+else
+ eww update anim_open_winpowermenu=true
+ eww open winpowermenu
+ eww update rev_winpowermenu=true
+fi
diff --git a/early/.config/eww/scripts/toggle-winstart.sh b/early/.config/eww/scripts/toggle-winstart.sh
new file mode 100755
index 000000000..46e43c2bc
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-winstart.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/bash
+cd ~/.config/eww || exit
+state=$(eww get rev_winstart)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ scripts/toggle-winpowermenu.sh --close &
+ eww update anim_open_winstart=false
+ eww update rev_winstart=false
+ sleep 0.1
+ eww close winstart 2>/dev/null
+ eww update winsearch=''
+ eww update winsearch_prefix=''
+ eww update winstart_allapps=false
+ eww update allapps=''
+else
+ scripts/allapps > scripts/cache/entries.txt &
+ scripts/allappnames > scripts/cache/entrynames.txt &
+ eww update anim_open_winstart=true
+ eww open winstart
+ eww update rev_winstart=true
+ eww update allapps_get="$(scripts/allapps --mode 2)" &
+fi
diff --git a/early/.config/eww/scripts/toggle-wintaskview.sh b/early/.config/eww/scripts/toggle-wintaskview.sh
new file mode 100755
index 000000000..66d0a7433
--- /dev/null
+++ b/early/.config/eww/scripts/toggle-wintaskview.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/bash
+cd ~/.config/eww || exit
+
+state=$(eww get rev_wintaskview)
+
+if [[ "$state" == "true" || "$1" == "--close" ]]; then
+ eww update anim_open_wintaskview=false
+ eww update rev_wintaskview=false
+ sleep 0.1
+ eww close wintaskview 2>/dev/null
+else
+ eww update anim_open_wintaskview=true
+ eww open wintaskview
+ eww update rev_wintaskview=true
+fi
diff --git a/early/.config/eww/scripts/togglelight b/early/.config/eww/scripts/togglelight
new file mode 100755
index 000000000..96dd9b58f
--- /dev/null
+++ b/early/.config/eww/scripts/togglelight
@@ -0,0 +1,9 @@
+#!/usr/bin/bash
+
+if [ "$1" == "light" ]; then
+ echo -n '-l' > 'scripts/workdir/__mode_light_dark.txt'
+ cp css/savedcolors/_iconcolor_default.txt css/_iconcolor_default.txt
+else
+ echo -n '' > 'scripts/workdir/__mode_light_dark.txt'
+ cp css/savedcolors/_iconcolor_default.txt css/_iconcolor_default.txt
+fi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/update-tray.sh b/early/.config/eww/scripts/update-tray.sh
new file mode 100755
index 000000000..20d579824
--- /dev/null
+++ b/early/.config/eww/scripts/update-tray.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/bash
+
+if [[ "$(pidof waybar)" == "" ]]; then
+ eww update tray_is_open=false
+else
+ eww update tray_is_open=true
+fi
diff --git a/early/.config/eww/scripts/volume b/early/.config/eww/scripts/volume
new file mode 100755
index 000000000..b4f2821f6
--- /dev/null
+++ b/early/.config/eww/scripts/volume
@@ -0,0 +1,133 @@
+#!/usr/bin/env bash
+cd ~/.config/eww
+
+volicons=("" "" "")
+XDG_CACHE_HOME="$HOME/.cache"
+date="$XDG_CACHE_HOME/eww/osd_vol.date"
+lock=0
+
+showhide() {
+ # get dates
+ rundate=$(cat "$date")
+ currentdate=$(date +%s)
+
+ # handle showing
+ if [ "$rundate" = "$currentdate" ] && [ "$lock" -eq 0 ]; then
+ scripts/toggle-osd-vol.sh --open
+ lock=1
+ elif [ $((currentdate - rundate)) -ge 2 ] && [ "$lock" -eq 1 ]; then
+ scripts/toggle-osd-vol.sh --close > /dev/null
+ lock=0
+ fi
+}
+
+osd() {
+ if [ ! -f "$date" ]; then
+ mkdir -p "$XDG_CACHE_HOME/eww"
+ fi
+ date +%s > "$date"
+ showhide
+}
+
+osd_handler() {
+ lock=0
+ rundate=0
+ if [ ! -f "$date" ]; then
+ mkdir -p "$XDG_CACHE_HOME/eww"
+ echo 0 > "$date"
+ fi
+
+ while true; do
+ showhide
+ sleep 0.1
+ done
+}
+
+vol() {
+ wpctl get-volume @DEFAULT_AUDIO_$1@ | awk '{print int($2*100)}'
+}
+ismuted() {
+ wpctl get-volume @DEFAULT_AUDIO_"$1"@ | rg -i muted
+ echo $?
+}
+setvol() {
+ wpctl set-volume @DEFAULT_AUDIO_"$1"@ "$(awk -v n="$2" 'BEGIN{print (n / 100)}')"
+}
+setmute() {
+ wpctl set-mute @DEFAULT_AUDIO_"$1"@ toggle
+}
+
+if [ "$1" = "--once" ]; then
+ lvl=$(awk -v n="$(vol "SINK")" 'BEGIN{print int(n/34)}')
+ ismuted=$(ismuted "SINK")
+
+ if [ "$ismuted" = 1 ]; then
+ icon="${volicons[$lvl]}"
+ else
+ icon=""
+ fi
+ audio=1
+ if [ "$(wpctl status | grep 'MUTED')" == "" ]; then
+ audio=1
+ else
+ audio=0
+ fi
+
+ echo '{"icon":"'"$icon"'","audio":"'"$audio"'","percent":"'"$(vol "SINK")"'","microphone":"'"$(vol "SOURCE")"'"}'
+ exit 0
+fi
+
+if [ "$1" = "mute" ]; then
+ if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
+ echo "Can only mute SINK or SOURCE"; exit 1
+ fi
+ setmute "$2"
+elif [ "$1" = "setvol" ]; then
+ if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
+ echo "Can only set volume for SINK or SOURCE"; exit 1
+ elif [ "$3" -lt 1 ] || [ "$3" -gt 100 ]; then
+ echo "Volume must be between 1 and 100"; exit 1
+ fi
+ setvol "$2" "$3"
+elif [ "$1" = "osd" ]; then
+ osd
+else
+ # initial values
+ lvl=$(awk -v n="$(vol "SINK")" 'BEGIN{print int(n/34)}')
+ ismuted=$(ismuted "SINK")
+
+ if [ "$ismuted" = 1 ]; then
+ icon="${volicons[$lvl]}"
+ else
+ icon=""
+ fi
+ audio=1
+ if [ "$(wpctl status | grep 'MUTED')" == "" ]; then
+ audio=1
+ else
+ audio=0
+ fi
+
+ echo '{"icon":"'"$icon"'","audio":"'"$audio"'","percent":"'"$(vol "SINK")"'","microphone":"'"$(vol "SOURCE")"'"}'
+
+ osd_handler &
+ # event loop
+ pactl subscribe | rg --line-buffered "on sink" | while read -r _; do
+ lvl=$(awk -v n="$(vol "SINK")" 'BEGIN{print int(n/34)}')
+ ismuted=$(ismuted "SINK")
+
+ if [ "$ismuted" = 1 ]; then
+ icon="${volicons[$lvl]}"
+ else
+ icon=""
+ fi
+ audio=1
+ if [ "$(wpctl status | grep 'MUTED')" == "" ]; then
+ audio=1
+ else
+ audio=0
+ fi
+
+ echo '{"icon":"'"$icon"'","audio":"'"$audio"'","percent":"'"$(vol "SINK")"'","microphone":"'"$(vol "SOURCE")"'"}'
+ done
+fi
diff --git a/early/.config/eww/scripts/waifupics.py b/early/.config/eww/scripts/waifupics.py
new file mode 100755
index 000000000..25ca8b5fb
--- /dev/null
+++ b/early/.config/eww/scripts/waifupics.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python3
+# Import the requests module
+import requests
+import json
+import os
+import sys
+
+# Define the URL to send the GET request
+url = "https://api.waifu.pics/sfw/waifu"
+if len(sys.argv) > 1 and sys.argv[1] == '--segs':
+ url = "https://api.waifu.pics/nsfw/"
+ if len(sys.argv) > 2:
+ url += sys.argv[2]
+ else:
+ url += "waifu"
+else:
+ url = "https://api.waifu.pics/sfw/"
+ if len(sys.argv) > 1:
+ url += sys.argv[1]
+ else:
+ url += "waifu"
+
+# Send the GET request and store the response object
+response = requests.get(url)
+
+# Check if the request was successful
+if response.status_code == 200:
+ # Print the received data as JSON
+ results = response.json()
+ link=results['url']
+ os.system('wget -O "{0}" "{1}" -q –read-timeout=0.1'.format('eww_covers/waifu_tmp', link))
+ os.system('mv ./eww_covers/waifu_tmp ./eww_covers/waifu')
+ print('eww_covers/waifu')
+else:
+ # Print an error message
+ print("Something went wrong. Status code:", response.status_code)
\ No newline at end of file
diff --git a/early/.config/eww/scripts/winnumbers b/early/.config/eww/scripts/winnumbers
new file mode 100755
index 000000000..079870c4e
--- /dev/null
+++ b/early/.config/eww/scripts/winnumbers
@@ -0,0 +1,29 @@
+#!/usr/bin/bash
+
+geticonlist() {
+ classes=$(hyprctl clients | grep -e 'class: ' | sed 's/class: Code/class: code/' | sed 's/\tclass: //')
+ addresses=$(hyprctl clients | grep -e ' -> ')
+ # echo "$classes"
+ IFS=$'\n'
+ classarr=($(echo "$classes"))
+
+ printf '['
+ for i in "${!classarr[@]}"; do
+ if [ $i -ne 0 ]; then
+ printf ', '
+ fi
+ printf "$i"
+ done
+ echo ']'
+}
+
+geticonlist
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ geticonlist
+ done
+fi
+
diff --git a/early/.config/eww/scripts/workdir/__mode_colors.txt b/early/.config/eww/scripts/workdir/__mode_colors.txt
new file mode 100755
index 000000000..5914448da
--- /dev/null
+++ b/early/.config/eww/scripts/workdir/__mode_colors.txt
@@ -0,0 +1 @@
+multi
\ No newline at end of file
diff --git a/early/.config/eww/scripts/workdir/__mode_light_dark.txt b/early/.config/eww/scripts/workdir/__mode_light_dark.txt
new file mode 100755
index 000000000..e69de29bb
diff --git a/early/.config/eww/scripts/workspaces b/early/.config/eww/scripts/workspaces
new file mode 100755
index 000000000..bb41b2003
--- /dev/null
+++ b/early/.config/eww/scripts/workspaces
@@ -0,0 +1,153 @@
+#!/usr/bin/env bash
+
+# define colors
+colors=("#FFFFFF" "#fab387" "#a6e3a1" "#89b4fa") # Active Workspaces
+dimmed=("rgba(174,172,182,0.7)" "#f9e2af" "#94e2d5" "#b4befe") # Inactive workspaces
+empty='rgba(146,145,145,0.5)' # Empty workspaces
+
+# get initial focused workspace
+focusedws=$(hyprctl -j monitors | gojq -r '.[] | select(.focused == true) | .activeWorkspace.id')
+
+declare -A o=([1]=0 [2]=0 [3]=0 [4]=0 [5]=0 [6]=0 [7]=0 [8]=0 [9]=0 [10]=0)
+declare -A monitormap
+declare -A workspaces
+
+# set color for each workspace
+status() {
+ if [ "${o[$1]}" -eq 1 ]; then
+ mon=${monitormap[${workspaces[$1]}]}
+ echo -n "${dimmed[$mon]}"
+ else
+ echo -n "$empty"
+ fi
+}
+
+status_activity() {
+ if [ "${o[$1]}" -eq 1 ]; then
+ mon=${monitormap[${workspaces[$1]}]}
+
+ if [ $focusedws -eq "$1" ]; then
+ echo -n "active"
+ else
+ echo -n "inactive"
+ fi
+ else
+ echo -n "empty"
+ fi
+}
+
+# handle workspace create/destroy
+workspace_event() {
+ if (( $1 <= 10 )); then
+ o[$1]=$2
+ while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | gojq -r '.[]|"\(.id) \(.monitor)"')
+ fi
+ if [ "$2" == "0" ]; then
+ unset "workspaces[$1]"
+ fi
+}
+# handle monitor (dis)connects
+monitor_event() {
+ while read -r k v; do monitormap["$k"]=$v; done < <(hyprctl -j monitors | gojq -r '.[]|"\(.name) \(.id) "')
+}
+
+# generate the json for eww
+generate() {
+ echo -n '['
+
+ for i in {1..10}; do
+ echo -n ''$([ $i -eq 1 ] || echo ,)'{"num":"'$i'","clr":"'$(status "$i")'"}'
+ # echo -n ''$([ $i -eq 1 ] || echo ,) '{ "number": "'"$i"'", "activity": "'"$(status_activity $i)"'", "color": "'$(status "$i")'" }'
+ done
+
+ # echo -n ',{"num":"'$focusedws'","clr":"'$(status "$focusedws")'"}'
+
+ echo ']'
+}
+
+# setup
+
+# add monitors
+monitor_event
+
+# add workspaces
+while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | gojq -r '.[]|"\(.id) \(.monitor)"')
+
+# check occupied workspaces
+for num in "${!workspaces[@]}"; do
+ o[$num]=1
+done
+# generate initial widget
+generate
+
+socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r line; do
+ # echo "${#workspaces[@]} ${#o[@]}"
+ # echo $line
+ case ${line%>>*} in
+ "focusedmon")
+ focusedws=${line#*,}
+ generate
+ ;;
+ "createworkspace")
+ # workspace_event "${line#*>>}" 1
+ o=([1]=0 [2]=0 [3]=0 [4]=0 [5]=0 [6]=0 [7]=0 [8]=0 [9]=0 [10]=0)
+ workspaces=()
+ # add workspaces
+ while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | gojq -r '.[]|"\(.id) \(.monitor)"')
+ # check occupied workspaces
+ for num in "${!workspaces[@]}"; do
+ o[$num]=1
+ done
+ # focusedws=${line#*>>}
+ generate
+ ;;
+ "movewindow")
+ generate
+ ;;
+ "destroyworkspace")
+ # workspace_event "${line#*>>}" 0
+ o=([1]=0 [2]=0 [3]=0 [4]=0 [5]=0 [6]=0 [7]=0 [8]=0 [9]=0 [10]=0)
+ workspaces=()
+ # add workspaces
+ while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | gojq -r '.[]|"\(.id) \(.monitor)"')
+ # check occupied workspaces
+ for num in "${!workspaces[@]}"; do
+ o[$num]=1
+ done
+ generate
+ ;;
+ "monitor"*)
+ monitor_event
+ generate
+ ;;
+ esac
+ # echo $line
+ # generate
+done
+
+# main loop
+# socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "workspace|mon(itor)?" | while read -r line; do
+# case ${line%>>*} in
+# "workspace")
+# focusedws=${line#*>>}
+# generate
+# ;;
+# "focusedmon")
+# focusedws=${line#*,}
+# generate
+# ;;
+# "createworkspace")
+# workspace_event "${line#*>>}" 1
+# focusedws=${line#*>>}
+# # generate
+# ;;
+# "destroyworkspace")
+# workspace_event "${line#*>>}" 0
+# generate
+# ;;
+# "monitor"*)
+# monitor_event
+# generate
+# ;;
+# esac
+# done
\ No newline at end of file
diff --git a/early/.config/eww/variables.yuck b/early/.config/eww/variables.yuck
new file mode 100755
index 000000000..8757c27f0
--- /dev/null
+++ b/early/.config/eww/variables.yuck
@@ -0,0 +1,170 @@
+; Const vars
+(defvar FILE_BROWSER "nautilus")
+(defvar RES_WIDTH 1920)
+(defvar RES_HEIGHT 1080)
+(defvar BG_ZOOM 1.2)
+(defvar OVERVIEW_SCALE 0.18)
+(defvar TASKVIEW_SCALE 0.12)
+(defvar weekdays '[{"day":"Mo","today":"0"},{"day":"Tu","today":"0"},{"day":"We","today":"0"},{"day":"Th","today":"0"},{"day":"Fr","today":"0"},{"day":"Sa","today":"0"},{"day":"Su","today":"0"}]')
+(defvar wsnums `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`)
+(defvar ws-icons '["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]')
+(deflisten ICON_GET `scripts/get_open_icons`)
+(defvar SUPERCONTEXT_WIDTH 300)
+(defvar SUPERCONTEXT_HEIGHT 300)
+(defvar SUPERCONTEXT_OFFSET_X "[75, 23.1, -60.6, -60.6, 23.1]")
+(defvar SUPERCONTEXT_OFFSET_Y "[0, 67.6, 41.8, -41.8, -67.6]")
+(defvar SUPERCONTEXT_BUTTON_RADIUS 30)
+(defvar TASKVIEW_WORKSPACE_NAMES '["Desktop 1", "Desktop 2", "Desktop 3", "Desktop 4", "Desktop 5", "Desktop 6", "Desktop 7", "Desktop 8", "Desktop 9", "Desktop 10", ]')
+(defvar WINTASKVIEW_RESERVED_BOTTOM 250)
+(defvar WINTASKVIEW_SPACING 30)
+(defvar MIN_ROW_HEIGHT 100)
+(defvar WAIFU_TAG_ID `[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,29,30,31,32]`)
+(defvar WAIFU_CATEGORIES `["waifu","waifu segs","neko","neko segs","megumin","shinobu","bully","cuddle","cry","hug","awoo","kiss","lick","pat","smug","bonk","yeet","blush","smile","wave","highfive","handhold","nom","bite","glomp","slap","kill","kick","happy","wink","poke","dance","cringe"]`)
+(defvar WAIFU_CATEGORIES_ARGS `["waifu","--segs waifu","neko","--segs neko","megumin","shinobu","bully","cuddle","cry","hug","awoo","kiss","lick","pat","smug","bonk","yeet","blush","smile","wave","highfive","handhold","nom","bite","glomp","slap","kill","kick","happy","wink","poke","dance","cringe"]`)
+(defvar username_default "username")
+(defvar quote_content `["haha pointers hee hee i love pointe-\\\nProcess Vaxry exited with signal SIGSEGV", "I have a hentai anal gif playing in my base", "Amazing XXXmas. Cute femboy was fucked\\\nin the ass under the Christmas tree", "baaaaaaaaaaaa", "...so Nvidia, fuck you"]`)
+(defvar quote_author `["- vaxry", "- vaxry", "- Hyprland community, 2022", "-vaxer", "- Linus Torvalds"]`)
+
+; Vars
+(defvar music_reveal false)
+(defvar oquery "")
+(defvar sys_menu_open true)
+(defvar date_rev false)
+(defvar sys_rev false)
+(defvar force_sys_rev true)
+(defvar editing false)
+(defvar osd_track false)
+(defvar osd_vol false)
+(defvar osd_bright false)
+(defvar selected '')
+(defvar overview_hover_name "Activities Overview")
+(defvar overview_query "")
+(defvar overview_results "")
+(defvar open_overview false)
+(defvar popup "none")
+(defvar right_hover false)
+(defvar ontf_hover false)
+(defvar music_hover false)
+(defvar edit_hover false)
+(defvar themer_hover false)
+(defvar calendar_hover false)
+(defvar rev_center_ws true)
+(defvar music_open false)
+(defvar themer_open false)
+(defvar focus false)
+(defvar win_hover false)
+(defvar winnotif_hover false)
+(defvar winactions_hover false)
+(defvar winstart_allapps false)
+(defvar monthshift 0)
+(defvar calendartitle '')
+(defvar winsearch '')
+(defvar winsearch_results "")
+(defvar winsearch_actions "")
+(defvar winsearch_actions_type "")
+(defvar winsearch_prefix "")
+(defvar allapps '')
+(defvar allapps_get '')
+(defvar compact false)
+(defvar resource_metric "cpu")
+(defvar record_sound false)
+(defvar supercontext_pos_x 960)
+(defvar supercontext_pos_y 540)
+(defvar ws_to_swap 0)
+(defvar tray_is_open false)
+
+; Dynamic animation: different for open and close
+(defvar rev_wincalendar true)
+(defvar rev_winactions false)
+(defvar rev_winnotif false)
+(defvar rev_winstart false)
+(defvar rev_winpowermenu false)
+(defvar rev_ostg false)
+(defvar rev_ontf false)
+(defvar rev_themer false)
+(defvar rev_dash false)
+(defvar rev_calendar false)
+(defvar rev_wingamebar false)
+(defvar rev_winnews false)
+(defvar rev_dashfs false)
+(defvar rev_bottombar false)
+(defvar rev_supercontext false)
+(defvar rev_wintaskview false)
+(defvar rev_winlang false)
+
+(defvar anim_open_ostg true)
+(defvar anim_open_ontf true)
+(defvar anim_open_search true)
+(defvar anim_open_themer true)
+(defvar anim_open_music true)
+(defvar anim_open_dash true)
+(defvar anim_open_calendar true)
+(defvar anim_open_winactions true)
+(defvar anim_open_winnotif true)
+(defvar anim_open_winstart true)
+(defvar anim_open_winpowermenu true)
+(defvar anim_open_wingamebar true)
+(defvar anim_open_winnews true)
+(defvar anim_open_dashfs true)
+(defvar anim_open_bottombar true)
+(defvar anim_open_supercontext true)
+(defvar anim_open_wintaskview true)
+(defvar anim_open_winlang true)
+
+; Time
+(defpoll time :interval "5s" `date +'{"date": "%d/%m", "hour": "%H", "minute": "%M", "monthname": "%B", "day": "%A", "year": "%Y"}'`)
+(defpoll day_only :interval "5s" "date '+%e' | sed 's/ //g'")
+(defpoll time12 :interval "10s" `date '+%l:%M %^P' | sed 's/am/AM/g' | sed 's/pm/PM/g'`)
+
+; Listeners
+(deflisten airplane "scripts/airplane")
+(deflisten battery "scripts/battery")
+(deflisten bluetooth "scripts/bluetooth")
+(deflisten brightness "scripts/brightness")
+(deflisten memory "scripts/memory")
+(deflisten music "scripts/music")
+(deflisten music_cover "scripts/music cover")
+(deflisten notifications "scripts/notifications")
+(deflisten notif_icons :initial `{"icon": "", "paused": false, "toggle_icon": ""}` "scripts/notifications icons")
+(deflisten net "scripts/net")
+(deflisten volume "scripts/volume")
+(deflisten workspace "scripts/workspaces")
+(deflisten winnums "scripts/winnumbers")
+(deflisten hyprjson "scripts/hyprsettings")
+(deflisten awin "scripts/activewin")
+(deflisten audiojson "scripts/audiolevels")
+(deflisten mcover "scripts/music cover")
+(deflisten mname "scripts/music name 41")
+(deflisten mname_win "scripts/music name 32")
+(deflisten mplay "playerctl -F metadata -f '{{status}}'")
+(deflisten wsjsona "scripts/overview-wrapper1")
+(deflisten wsjsonb "scripts/overview-wrapper2")
+(deflisten activews :initial 1 "scripts/activews")
+(deflisten tasks "scripts/taskbarloop")
+(deflisten pinnedapps "cat modules/pinned-apps.json | gojq -c -M")
+(deflisten recommended "cat modules/recommended.json | gojq -c -M")
+(deflisten gamebarwidgets "cat modules/gamebar.json | gojq -c -M")
+(deflisten audiodevice `pactl --format=json list sinks | gojq -c -r '.[0]["description"]'`)
+(deflisten cavajson `scripts/cavajson`)
+(deflisten mousepos `scripts/mousetrack`)
+(deflisten taskviewlayout `scripts/taskviewlayout-wrapper`)
+(deflisten lang_ibus :initial "{\"name\":\"English (xkb)\",\"name_abbr\":\"ENG\",\"name_ibus\":\"xkb:us::eng\"}" `scripts/language`)
+(defpoll langs :interval "5m" `cat modules/langs.json | gojq -c -M`)
+(defpoll colormode :interval "5m" "cat scripts/workdir/__mode_colors.txt")
+(defpoll coloraccent :interval "5m" "cat css/_iconcolor.txt | head -1")
+
+; Fetch stuff
+(defpoll uptime :interval "1m" "uptime -p | sed -e 's/up //;s/ hours,/h/;s/ minutes/m/'")
+(defpoll packages :interval "5m" `pacman -Q | wc -l`)
+(defpoll kernel :interval "5m" `uname -r`)
+(defpoll username :interval "5m" :initial "username" `whoami`)
+(defpoll realname :interval "5m" :initial "realname" `getent passwd "$USER" | cut -d ':' -f 5 | cut -d ',' -f 1`)
+(defpoll hostname :interval "5m" :initial "distro" `uname -n`)
+(defpoll wm :interval "5m" :initial "Hyprland" `echo $XDG_CURRENT_DESKTOP`)
+(defpoll diskfreepercent :interval "5m" `echo $(df --output=pcent / | tr -dc '0-9')`)
+(defpoll diskused :interval "5m" `df -h --output=used / | awk 'NR==2{print $1}'`)
+(defpoll diskfree :interval "5m" `df -h --output=avail / | awk 'NR==2{print $1}'`)
+(defpoll disksize :interval "5m" `df -h --output=size / | awk 'NR==2{print $1}'`)
+(deflisten cpuname `cat /proc/cpuinfo | grep 'model name' | awk -F: '{print $2}' | head -n 1`)
+(defpoll waifu_get :interval "5m" `python3 scripts/waifupics.py`)
+(defpoll calendar :interval "15m" `eww update monthshift=0 && eww update calendartitle="$(date '+%B %Y')" && scripts/calendarlayout`)
diff --git a/early/.config/eww/windows/bg-decor.yuck b/early/.config/eww/windows/bg-decor.yuck
new file mode 100755
index 000000000..4dfa01022
--- /dev/null
+++ b/early/.config/eww/windows/bg-decor.yuck
@@ -0,0 +1,313 @@
+(defwidget mycpu [coreid]
+ (box
+ :space-evenly false
+ :orientation "v"
+ (label
+ :class "bg-cool-text"
+ :text "Core ${coreid}"
+ )
+ (box
+ :class "bg-graph-container"
+ (graph
+ :class "bg-graph"
+ :width 100
+ :height 50
+ :thickness 3
+ :min 0
+ :max 100
+ :value {EWW_CPU.cores[coreid].usage}
+ :time-range "30s"
+ :line-style "round"
+ )
+ )
+ )
+)
+
+(defwidget bgdecors []
+ (centerbox
+ :space-evenly false
+ :orientation "h"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :valign "center"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :halign "start"
+ :class "bg-module"
+ (centerbox
+ (box
+ :orientation "h"
+ :space-evenly false
+ (label :xalign 0.5 :class "bg-icon" :text "")
+ (label :xalign 0 :class "bg-text bg-title" :text "CPU x${arraylength(EWW_CPU.cores)}")
+ )
+ (box)
+ (box
+ :orientation "h"
+ :space-evenly false
+ (label :xalign 1 :class "bg-text" :text "${cpuname}")
+ )
+ )
+ (box
+ :space-evenly false
+ :orientation "v"
+ ; :valign "center"
+ :width 150
+ :height 30
+ (box
+ :space-evenly false
+ :orientation "h"
+ (mycpu :coreid 0)
+ (mycpu :coreid 1)
+ (mycpu :coreid 2)
+ )
+ (box
+ :space-evenly false
+ :orientation "h"
+ (mycpu :coreid 3)
+ (mycpu :coreid 4)
+ (mycpu :coreid 5)
+ )
+ (box
+ :space-evenly false
+ :orientation "h"
+ (mycpu :coreid 6)
+ (mycpu :coreid 7)
+ (mycpu :coreid 8)
+ )
+ (box
+ :space-evenly false
+ :orientation "h"
+ (mycpu :coreid 9)
+ (mycpu :coreid 10)
+ (mycpu :coreid 11)
+ )
+ )
+ )
+ (box
+ :space-evenly false
+ :orientation "v"
+ :valign "end"
+ (box
+ :class "bg-module bg-date"
+ :space-evenly false
+ :orientation "v"
+ :halign "start"
+ :valign "end"
+ (label
+ :xalign 0
+ :class "bg-decor-dow" ; Hyperland maybe?
+ :text "${time.day}"
+ )
+ (label
+ :xalign 0
+ :class "bg-decor-date"
+ :text "${time.date}"
+ )
+ )
+ )
+ )
+ (box
+ :space-evenly false
+ :orientation "v"
+ :valign "center"
+ :width 150
+ :height 30
+ ; (graph
+ ; :class "bg-graph"
+ ; :width 155
+ ; :height 25
+ ; :thickness 3
+ ; :value {EWW_CPU.cores[0].usage}
+ ; :time-range "30s"
+ ; ; :line-style "round"
+ ; )
+ )
+ (box
+ :space-evenly false
+ :orientation "v"
+ :halign "end"
+ :valign "center"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "bg-module"
+ :valign "end"
+ (centerbox
+ (box
+ :orientation "h"
+ :space-evenly false
+ (label :xalign 0.5 :class "bg-icon" :text "")
+ (label :xalign 0 :class "bg-text bg-title" :text "Network")
+ )
+ (box)
+ (box)
+ )
+ (box
+ :orientation "h"
+ (label :halign "start" :xalign 0 :class "bg-cool-text" :text "Up: ${EWW_NET["wlan0"].NET_UP} bytes")
+ )
+ (button ; Button to make this not draggable
+ (box
+ :class "bg-graph-container"
+ (graph
+ :class "bg-graph"
+ :width 100
+ :height 50
+ :thickness 3
+ :dynamic true
+ :value {EWW_NET["wlan0"].NET_UP}
+ :time-range "30s"
+ :line-style "round"
+ )
+ )
+ )
+ (box
+ :orientation "h"
+ (label :halign "start" :xalign 0 :class "bg-cool-text" :text "Down: ${EWW_NET["wlan0"].NET_DOWN} bytes")
+ )
+ (button ; Button to make this not draggable
+ (box
+ :class "bg-graph-container"
+ (graph
+ :class "bg-graph"
+ :width 100
+ :height 50
+ :thickness 3
+ :dynamic true
+ :value {EWW_NET["wlan0"].NET_DOWN}
+ :time-range "30s"
+ :line-style "round"
+ )
+ )
+ )
+ )
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "bg-module"
+ :valign "end"
+ (centerbox
+ (box
+ :orientation "h"
+ :space-evenly false
+ (label :xalign 0.5 :class "bg-icon" :text "")
+ (label :xalign 0 :class "bg-text bg-title" :text "Memory")
+ )
+ (box)
+ (box
+ :orientation "h"
+ (label :xalign 1 :class "bg-text bg-title" :text "(${memory.total})")
+ )
+ )
+ (box
+ :orientation "h"
+ (label :halign "start" :xalign 0 :class "bg-cool-text" :text "+${memory.used}")
+ (label :halign "end" :xalign 1 :class "bg-cool-text" :text "-${memory.free}")
+ )
+ (button ; Button to make this not draggable
+ (box
+ :class "bg-graph-container"
+ (graph
+ :class "bg-graph"
+ :width 100
+ :height 50
+ :thickness 3
+ :min 0
+ :max 100
+ :value {memory.percentage}
+ :time-range "30s"
+ :line-style "round"
+ )
+ )
+ )
+ (centerbox
+ (box
+ :orientation "h"
+ :space-evenly false
+ (label :xalign 0.5 :class "bg-icon" :text "")
+ (label :xalign 0 :class "bg-text bg-title" :text "Swap")
+ )
+ (box)
+ (box
+ :orientation "h"
+ (label :xalign 1 :class "bg-text bg-title" :text "(${memory.swaptotal})")
+ )
+ )
+ (box
+ :orientation "h"
+ (label :halign "start" :xalign 0 :class "bg-cool-text" :text "+${memory.swapused}")
+ (label :halign "end" :xalign 1 :class "bg-cool-text" :text "-${memory.swapfree}")
+ )
+ (button ; Button to make this not draggable
+ ; (scale
+ ; :class "bg-progress"
+ ; :value {memory.swappercentage}
+ ; )
+ (box
+ :class "bg-graph-container"
+ (graph
+ :class "bg-graph"
+ :width 100
+ :height 50
+ :thickness 3
+ :min 0
+ :max 100
+ :value {memory.swappercentage}
+ :time-range "30s"
+ :line-style "round"
+ )
+ )
+ )
+ )
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "bg-module"
+ :valign "end"
+ (centerbox
+ (box
+ :orientation "h"
+ :space-evenly false
+ (label :xalign 0.5 :class "bg-icon" :text "")
+ (label :xalign 0 :class "bg-text bg-title" :text "Disk usage")
+ )
+ (box)
+ (box
+ :orientation "h"
+ (label :xalign 1 :class "bg-text bg-title" :text "(${disksize})")
+ )
+ )
+ (box
+ :orientation "h"
+ (label :halign "start" :xalign 0 :class "bg-cool-text" :text "+${diskused}")
+ (label :halign "end" :xalign 1 :class "bg-cool-text" :text "-${diskfree}")
+ )
+ (button ; Button to make this not draggable
+ (scale
+ :class "bg-progress"
+ :value {diskfreepercent}
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow bg-decor
+ :focusable false
+ :stacking "bottom"
+ :windowtype "normal"
+ :wm-ignore true
+ :geometry (geometry
+ :x 0
+ :y 0
+ :width "100%"
+ :height "100%"
+ :anchor "left center"
+ )
+ :monitor 0
+ (bgdecors)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/bottombar.yuck b/early/.config/eww/windows/bottombar.yuck
new file mode 100755
index 000000000..7bfb0a512
--- /dev/null
+++ b/early/.config/eww/windows/bottombar.yuck
@@ -0,0 +1,380 @@
+(defwidget mycpu_bottombar [coreid]
+ (box
+ :space-evenly false
+ :orientation "v"
+ (label
+ :class "bg-cool-text"
+ :text "Core ${coreid}"
+ )
+ (box
+ :class "bg-graph-container"
+ (graph
+ :class "bg-graph"
+ :width 100
+ :height 50
+ :thickness 3
+ :min 0
+ :max 100
+ :value {EWW_CPU.cores[coreid].usage}
+ :time-range "30s"
+ :line-style "round"
+ )
+ )
+ )
+)
+
+(defwidget cavacol [nth dir]
+ (box
+ :valign "${dir == 'up' ? 'end' : (
+ dir == 'down' ? 'start' : 'fill'
+ )}"
+ :halign "${dir == 'right' ? 'start' : (
+ dir == 'left' ? 'end' : 'fill'
+ )}"
+ :class "cava-column"
+ ; background-color: mix(
+ ; ${mcover.color.colors.color4 == 'null' ? 'white' : mcover.color.colors.color4},
+ ; rgba(40, 40, 40, 0.7),
+ ; {(((nth / 90 * RES_WIDTH) > mousepos[0] ? ((nth / 90 * RES_WIDTH) - mousepos[0]) : (mousepos[0] - (nth / 90 * RES_WIDTH))) / RES_WIDTH)}
+ ; );
+ :style "
+ background-color: ${mcover.color.colors.color4 == 'null' ? 'white' : mcover.color.colors.color4};
+ transition: 0ms;
+ min-${dir == 'up' || dir == 'down' ? 'height' : 'width'}: ${cavajson[nth] / 4}px;
+ "
+ )
+)
+
+(defwidget bottomline_widget []
+ (eventbox
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ :onclick "scripts/toggle-bottombar.sh &"
+ (box
+ :class "bottombar-closed-hitbox"
+ :width {RES_WIDTH} :height 1
+ (revealer :reveal false
+ :transition "slideup"
+ ; (label :text "${cavajson[0]}")
+ )
+ )
+ )
+)
+
+(defwidget bottombar_widget []
+ (box
+ :orientation "v"
+ :space-evenly false
+ :style "
+ transition: ${anim_open_bottombar ? MD3_DECEL : MD3_ACCEL};
+ ${rev_bottombar ? '' : 'margin-bottom: -500px; margin-top: 500px;'}
+ "
+ (eventbox
+ :onclick "scripts/toggle-bottombar.sh --close &"
+ :onmiddleclick "scripts/toggle-bottombar.sh --close &"
+ :onrightclick "scripts/toggle-bottombar.sh --close &"
+ (box
+ :class "box-that-is-there" :style "min-height: 1px;"
+ )
+ )
+ (overlay
+ ; Background
+ (box
+ :class "bottombar-bg-front"
+ ; (label
+ ; :text {(((40 / 90 * RES_WIDTH) > mousepos[0] ? ((40 / 90 * RES_WIDTH) - mousepos[0]) : (mousepos[0] - (40 / 90 * RES_WIDTH))) / RES_WIDTH)}
+ ; )
+ )
+ ; Cava
+ (box
+ ; :class "bottombar-bg"
+ (box :orientation "h"
+ ; it IS necessary NOT to use a for loop
+ (cavacol :dir "up" :nth 0)
+ (cavacol :dir "up" :nth 1)
+ (cavacol :dir "up" :nth 2)
+ (cavacol :dir "up" :nth 3)
+ (cavacol :dir "up" :nth 4)
+ (cavacol :dir "up" :nth 5)
+ (cavacol :dir "up" :nth 6)
+ (cavacol :dir "up" :nth 7)
+ (cavacol :dir "up" :nth 8)
+ (cavacol :dir "up" :nth 9)
+ (cavacol :dir "up" :nth 10)
+ (cavacol :dir "up" :nth 11)
+ (cavacol :dir "up" :nth 12)
+ (cavacol :dir "up" :nth 13)
+ (cavacol :dir "up" :nth 14)
+ (cavacol :dir "up" :nth 15)
+ (cavacol :dir "up" :nth 16)
+ (cavacol :dir "up" :nth 17)
+ (cavacol :dir "up" :nth 18)
+ (cavacol :dir "up" :nth 19)
+ (cavacol :dir "up" :nth 20)
+ (cavacol :dir "up" :nth 21)
+ (cavacol :dir "up" :nth 22)
+ (cavacol :dir "up" :nth 23)
+ (cavacol :dir "up" :nth 24)
+ (cavacol :dir "up" :nth 25)
+ (cavacol :dir "up" :nth 26)
+ (cavacol :dir "up" :nth 27)
+ (cavacol :dir "up" :nth 28)
+ (cavacol :dir "up" :nth 29)
+ (cavacol :dir "up" :nth 30)
+ (cavacol :dir "up" :nth 31)
+ (cavacol :dir "up" :nth 32)
+ (cavacol :dir "up" :nth 33)
+ (cavacol :dir "up" :nth 34)
+ (cavacol :dir "up" :nth 35)
+ (cavacol :dir "up" :nth 36)
+ (cavacol :dir "up" :nth 37)
+ (cavacol :dir "up" :nth 38)
+ (cavacol :dir "up" :nth 39)
+ (cavacol :dir "up" :nth 40)
+ (cavacol :dir "up" :nth 41)
+ (cavacol :dir "up" :nth 42)
+ (cavacol :dir "up" :nth 43)
+ (cavacol :dir "up" :nth 44)
+ (cavacol :dir "up" :nth 45)
+ (cavacol :dir "up" :nth 46)
+ (cavacol :dir "up" :nth 47)
+ (cavacol :dir "up" :nth 48)
+ (cavacol :dir "up" :nth 49)
+ (cavacol :dir "up" :nth 50)
+ (cavacol :dir "up" :nth 51)
+ (cavacol :dir "up" :nth 52)
+ (cavacol :dir "up" :nth 53)
+ (cavacol :dir "up" :nth 54)
+ (cavacol :dir "up" :nth 55)
+ (cavacol :dir "up" :nth 56)
+ (cavacol :dir "up" :nth 57)
+ (cavacol :dir "up" :nth 58)
+ (cavacol :dir "up" :nth 59)
+ (cavacol :dir "up" :nth 60)
+ (cavacol :dir "up" :nth 61)
+ (cavacol :dir "up" :nth 62)
+ (cavacol :dir "up" :nth 63)
+ (cavacol :dir "up" :nth 64)
+ (cavacol :dir "up" :nth 65)
+ (cavacol :dir "up" :nth 66)
+ (cavacol :dir "up" :nth 67)
+ (cavacol :dir "up" :nth 68)
+ (cavacol :dir "up" :nth 69)
+ )
+ )
+ ; Track time
+ (box
+ :space-evenly false :orientation "h"
+ :halign "center" :valign "end"
+ :style "margin-bottom: 5px;"
+ (label
+ :halign "start" :valign "center"
+ :class "music-time-label"
+ :style "
+ margin-top: 5px;
+ color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};
+ "
+ :text "${music.position_time} / ${music.length}"
+ )
+ )
+ ; Track name
+ (box
+ :space-evenly false :orientation "h" :spacing 20
+ :halign "start" :valign "start"
+ :class "bottombar-musicinfo-box"
+ (box
+ :valign "center"
+ :class "bottombar-music-cover"
+ :style "background-image: url('${mcover.image}')"
+ )
+ (box
+ :space-evenly false :orientation "v"
+ :spacing 5
+ (label :xalign 0
+ :class "bottombar-title"
+ :style "color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};"
+ :text {mname.title == '' ? 'Media controls' : mname.title}
+ )
+ (label
+ :halign "start" :valign "end"
+ :xalign 0
+ :class "bottombar-artist"
+ :style "color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};"
+ :text {mname.title == '' ? 'Nothing...' : mname.artist}
+ )
+ (centerbox
+ :halign "start"
+ :class "music-button-box"
+ ; :style "margin-top: 5px;"
+ (button
+ :class "song-button"
+ :style "color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};"
+ :onclick "playerctl previous" ""
+ )
+ (button
+ :class "song-button"
+ :style "color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};"
+ :onclick "playerctl play-pause"
+ "${music.status != '' ? music.status : ''}"
+ )
+ (button
+ :class "song-button"
+ :style "color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};"
+ :onclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
+ ""
+ )
+ )
+ )
+ )
+ )
+ (box
+ :class "bottombar-mixer-bg"
+ :halign "end"
+ :width 650
+ :style "
+ margin-top: -300px;
+ margin-right: 10px;
+ "
+ (scroll
+ :width 650
+ :hscroll true
+ :vscroll false
+ (box
+ :space-evenly false
+ :orientation "h"
+ :halign "end"
+ ; :class "sliders"
+ (for app in audiojson
+ (box
+ :orientation "v" :space-evenly false
+ (image
+ :class "onotify-app-icon"
+ :path {app.icon}
+ :image-width 25
+ :image-height 25
+ )
+ (box
+ :orientation "v"
+ :space-evenly false
+ (scroll
+ :vscroll false
+ :hscroll true
+ :style "min-width: 150px;"
+ (box
+ :orientation "v"
+ ; :space-evenly false
+ (for ser in {app["volume"]}
+ (eventbox
+ :onscroll "pactl set-sink-input-volume ${ser[0]} $(echo {} | sed -e \"s/up/+5/g\" -e \"s/down/-5/g\")%"
+ :onrightclick "pactl set-sink-input-volume ${ser[0]} 100%"
+ :onclick "pactl set-sink-input-volume ${ser[0]} 0%"
+ (centerbox
+ :space-evenly false
+ :orientation "h"
+ :class "onotify-app-volbox"
+ :style "min-width: 69px;"
+ (label
+ :xalign "${app.count > 3 ? '0.5' : '0'}"
+ :class "onotify-app-ser"
+ :style "
+ ${app.count > 3 ? 'margin-bottom: 5px;' : 'padding: 0 5px;'}
+ "
+ :text "#${ser[0]}"
+ )
+ (box)
+ (circular-progress
+ :halign "${app.count > 3 ? 'center' : 'end'}"
+ :value {ser[1] <= 100 ? ser[1] : 100}
+ :class "onotify-app-vol-circle"
+ :thickness 4
+ :start-at 75
+ :width 45
+ :height 45
+ (label :class "onotify-app-text" :text "${ser[1]}")
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwidget bottombar_bg_widget []
+ (box
+ :orientation "v"
+ :space-evenly false
+ :style "
+ transition: ${anim_open_bottombar ? MD3_DECEL : MD3_ACCEL};
+ ${rev_bottombar ? '' : 'margin-bottom: -500px; margin-top: 500px;'}
+ "
+ (box
+ :class "bottombar-bg"
+ :style "
+ background-image: url('${mcover.image}');
+ "
+ (box :space-evenly false :orientation "v"
+ :halign "start" :valign "start"
+ :class "bottombar-musicinfo-box"
+ (label :xalign 0
+ :class "bottombar-title"
+ :style "color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};"
+ :text {mname.title}
+ )
+ (label :xalign 0
+ :class "bottombar-artist"
+ :style "color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};"
+ :text "${mname.artist}"
+ )
+ )
+ )
+ )
+)
+
+(defwindow bottombar
+ :stacking "fg"
+ :windowtype "normal"
+ :wm-ignore true
+ :geometry (geometry
+ :x 0
+ :y 0
+ :width "100%"
+ :anchor "center bottom"
+ )
+ :monitor 0
+ (bottombar_widget)
+)
+
+(defwindow bottombar-back
+ :stacking "fg"
+ :windowtype "normal"
+ :wm-ignore true
+ :namespace "bottombar-back"
+ :geometry (geometry
+ :x 0
+ :y 0
+ :width "100%"
+ :anchor "center bottom"
+ )
+ :monitor 0
+ (bottombar_bg_widget)
+)
+
+(defwindow bottomline
+ :stacking "overlay"
+ :windowtype "normal"
+ :wm-ignore true
+ :geometry (geometry
+ :x 0
+ :y 0
+ :width "100%"
+ :anchor "center bottom"
+ )
+ :monitor 0
+ (bottomline_widget)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/calendar.yuck b/early/.config/eww/windows/calendar.yuck
new file mode 100755
index 000000000..d8a084367
--- /dev/null
+++ b/early/.config/eww/windows/calendar.yuck
@@ -0,0 +1,93 @@
+(defwidget calendar-win []
+ (eventbox
+ :onclick "scripts/toggle-calendar.sh --close &"
+ (box
+ :class "calendar-win"
+ :style "
+ ${rev_calendar ? '' : 'margin-top: -900px; margin-bottom: 900px;'}
+ ${anim_open_calendar ? 'transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ min-height: 1px;
+ "
+ ; (calendar)
+ ; Calendar
+ (box
+ :space-evenly false :orientation "v"
+ :halign "end" :valign "center"
+ (box
+ :space-evenly false :orientation "v"
+ (eventbox
+ :onscroll "scripts/scrollmonth {} &"
+ (box
+ :orientation "v"
+ :space-evenly false
+ (centerbox
+ :style "padding: 0 12px;"
+ (label :xalign 0 :class "calendarwin-title" :text "${calendartitle}")
+ (box)
+ (box
+ :halign "end" :valign "center"
+ (box
+ :halign "end" :valign "center"
+ (button
+ :onclick "scripts/scrollmonth up &"
+ :halign "end" :valign "center"
+ :class "winicon dashfs-monthbutton"
+ (image
+ :valign "center"
+ :path "images/svg/dark/caretup.svg"
+ )
+ )
+ (button
+ :onclick "scripts/scrollmonth down &"
+ :halign "end" :valign "center"
+ :class "winicon dashfs-monthbutton"
+ (image
+ :valign "center"
+ :path "images/svg/dark/caretdown.svg"
+ )
+ )
+ )
+ )
+ )
+ (box :space-evenly false :orientation "v"
+ ; :class "dashfs-section-nopad"
+ (box
+ (for day in weekdays
+ (box
+ :class "calendarwin-button day${day.today}"
+ (label :class "calendarwin-text" :text "${day.day}")
+ )
+ )
+ )
+ (for week in calendar
+ (box
+ (for day in week
+ (button
+ :class "calendarwin-button calendarwin-day${day.today}"
+ (label :class "calendarwin-text" :text "${day.day}")
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow calendar
+ :wm-ignore true
+ :monitor 0
+ :focusable true
+ :geometry (geometry
+ :x "350px"
+ :y "61px"
+ :anchor "top right"
+ :width "0px"
+ :height "0px"
+ )
+ (calendar-win)
+)
diff --git a/early/.config/eww/windows/dashboard.yuck b/early/.config/eww/windows/dashboard.yuck
new file mode 100755
index 000000000..84baf2e7f
--- /dev/null
+++ b/early/.config/eww/windows/dashboard.yuck
@@ -0,0 +1,319 @@
+(defvar dash_curve_in "transition: 150ms cubic-bezier(0.05, 0.9, 0.1, 1.0);")
+(defvar dash_curve_out "transition: 80ms cubic-bezier(0.3, 0, 0.8, 0.15);")
+
+(defwidget dashboard-contents []
+ (box
+ :class "dash-window"
+ :orientation "v"
+ :space-evenly false
+ (eventbox ; Close when clicking outside
+ :onclick "scripts/toggle-dash.sh &"
+ :onmiddleclick "scripts/toggle-dash.sh &"
+ :onrightclick "scripts/toggle-dash.sh &"
+ )
+ (box ; All the stuff go here
+ :orientation "v"
+ :space-evenly false
+ (box ; Description
+ :orientation "v"
+ :space-evenly false
+ :class "dash"
+ :halign "start"
+ :style "
+ ${anim_open_dash ? dash_curve_in : dash_curve_out}
+ ${rev_dash ? '' : 'margin-left: -1100px; margin-right: 1100px;'}
+ "
+ (label :angle 0 :xalign 0 :class "dash-title" :text "Classic dashboard")
+ (label :angle 0 :xalign 0 :class "dash-subtitle" :text "That kinda useless random widget porn.")
+ )
+ (box
+ :orientation "h"
+ :space-evenly false
+ (box
+ :orientation "v"
+ :space-evenly false
+ (box
+ :orientation "h"
+ :space-evenly false
+ :class "dash dash-tile"
+ :style "
+ ${anim_open_dash ? dash_curve_in : dash_curve_out}
+ ${rev_dash ? '' : 'margin-left: -1010px; margin-right: 1010px;'}
+ "
+ (input
+ :class "dash-input"
+ :onaccept "scripts/dashactivate --web 'firefox \"https://www.google.com/search?q={}\"' && hyprctl dispatch focuswindow firefox &"
+ )
+ (button
+ :class "dash-input-icon dash-button"
+ :onclick "scripts/dashactivate --web 'firefox \"https://www.google.com/search?q=\"' && hyprctl dispatch focuswindow firefox &"
+ ""
+ )
+ )
+ (box ; Row 1
+ :orientation "h"
+ :space-evenly false
+ (box ; Col 1
+ :orientation "v"
+ :space-evenly false
+ (box ; User
+ :orientation "h"
+ :space-evenly false
+ :class "dash dash-profile"
+ :style "
+ ${anim_open_dash ? dash_curve_in : dash_curve_out}
+ ${rev_dash ? '' : 'margin-left: -500px; margin-right: 500px;'}
+ "
+ (box
+ :valign "center"
+ :class "dash-user-pic"
+ :style "background-image: url('/var/lib/AccountsService/icons/${username == "" ? username_default : username}');"
+ ; :style "background-image: url('${waifu}');"
+ )
+ (box
+ :orientation "v" :space-evenly false :valign "center"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dash-fetch-icon" :text "")
+ (label :class "dash-fetch" :text "${username + '@' + hostname}")
+ )
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dash-fetch-icon" :text "")
+ (label :class "dash-fetch" :text "${kernel}")
+ )
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dash-fetch-icon" :text "")
+ (label :class "dash-fetch" :text "${uptime}")
+ )
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dash-fetch-icon" :text "")
+ (label :class "dash-fetch" :text "${wm}")
+ )
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dash-fetch-icon" :text "")
+ (label :class "dash-fetch" :text "${packages}")
+ )
+ )
+ )
+ (box
+ :orientation "v"
+ :space-evenly false
+ :class "dash"
+ :height 124
+ :style "
+ ${anim_open_dash ? dash_curve_in : dash_curve_out}
+ ${rev_dash ? '' : 'margin-bottom: -1000px; margin-top: 1000px;'}
+ "
+ (label :xalign 0 :class "dash-quote-content clr3" :text "${quote_content[3]}")
+ (label :xalign 1 :class "dash-quote-author clr4" :text "${quote_author[3]}")
+ )
+ )
+ (box ; Col 2
+ :orientation "v"
+ :space-evenly false
+ (box ; Clock
+ :orientation "h"
+ :space-evenly false
+ :class "dash"
+ :style "
+ ${anim_open_dash ? dash_curve_in : dash_curve_out}
+ ${rev_dash ? '' : 'margin-top: -500px; margin-bottom: 500px;'}
+ "
+ (box ; Clock numbers
+ :orientation "v"
+ :space-evenly false
+ :class "dash-clock-text-area"
+ (box ; Clock time
+ :orientation "h"
+ :space-evenly false
+ :halign "center"
+ (label :xalign 0.5 :class "dash-time clr1" :text "${time.hour}")
+ (label :xalign 0.5 :class "dash-time clrt" :text ":")
+ (label :xalign 0.5 :class "dash-time clr3" :text "${time.minute}")
+ )
+ (box ; Clock date
+ :orientation "h"
+ :space-evenly false
+ :halign "center"
+ (label :xalign 0.5 :class "dash-date clr6" :text "${time.day}, ${time.date}")
+ )
+ )
+ (box
+ :class "dash-clock-circle-area"
+ (circular-progress
+ :value "${time.minute / 60 * 100}"
+ :thickness 7
+ :start-at 75
+ :class "clr3 dash-clock-circle"
+ (circular-progress
+ :value "${time.hour % 12 / 12 * 100}"
+ :thickness 7
+ :start-at 75
+ :class "clr1 dash-clock-circle dash-clock-circle-minute"
+ (label
+ :text ""
+ :class "dash-clock-inner")
+ )
+ )
+ )
+ )
+ (box ; Calendar
+ :orientation "v"
+ :space-evenly false
+ :class "dash"
+ :style "
+ ${anim_open_dash ? dash_curve_in : dash_curve_out}
+ ${rev_dash ? '' : 'margin-bottom: -500px; margin-top: 500px;'}
+ "
+ (calendar
+ :height 210
+ :ihatethiswidget true
+ :style "
+ padding-top: 2px;
+ font-family: Rubik;
+
+ "
+ )
+ )
+ )
+ (box ; Col 3
+ :orientation "v"
+ :space-evenly false
+ (box ; Calendar
+ :orientation "v"
+ :space-evenly false
+ :class "dash dash-dir-area"
+ :style "
+ ${anim_open_dash ? dash_curve_in : dash_curve_out}
+ ${rev_dash ? '' : 'margin-right: -500px; margin-left: 500px;'}
+ "
+ (button
+ :class "dash-dir dash-button"
+ :onclick "scripts/dashactivate '${FILE_BROWSER} ~/Documents' &"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :class "clrt"
+ (label :xalign 0 :text " " :class "icon")
+ (label :xalign 0 :text "documents")
+ )
+ )
+ (button
+ :class "dash-dir dash-button"
+ :onclick "scripts/dashactivate '${FILE_BROWSER} ~/Downloads' &"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :class "clrt"
+ (label :xalign 0 :text " " :class "icon")
+ (label :xalign 0 :text "downloads")
+ )
+ )
+ (button
+ :class "dash-dir dash-button"
+ :onclick "scripts/dashactivate '${FILE_BROWSER} ~/Pictures' &"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :class "clrt"
+ (label :xalign 0 :text " " :class "icon")
+ (label :xalign 0 :text "pictures")
+ )
+ )
+ (button
+ :class "dash-dir dash-button"
+ :onclick "scripts/dashactivate '${FILE_BROWSER} ~/Videos' &"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :class "clrt"
+ (label :xalign 0 :text " " :class "icon")
+ (label :xalign 0 :text "videos")
+ )
+ )
+ )
+
+
+ (box ; Resources
+ :orientation "v"
+ :space-evenly false
+ :class "dash dash-resources"
+ :style "
+ ${anim_open_dash ? dash_curve_in : dash_curve_out}
+ ${rev_dash ? '' : 'margin-top: -700px; margin-bottom: 700px;'}
+ "
+ (label :text "Memory" :class "dash-resource-title clr3")
+ (box
+ :orientation "h"
+ :space-evenly false
+ ; :style "background-color: red;"
+ (box ; RAM
+ :orientation "v"
+ :space-evenly false
+ :class "dash-resource-tile"
+ (circular-progress
+ :value "${memory.percentage}"
+ :thickness 7
+ :start-at 75
+ :class "clr3 dash-clock-circle"
+ (box :class "dash-resource-inner")
+ )
+ (label :class "dash-resource-text" :text "${memory.used}")
+ )
+ (label :yalign 0.34 :class "dash-resource-icon" :style "font-size: 20pt;" :text "")
+ (box ; Swap
+ :orientation "v"
+ :space-evenly false
+ :class "dash-resource-tile"
+ (circular-progress
+ :value "${memory.swappercentage}"
+ :thickness 7
+ :start-at 75
+ :class "clr3 dash-clock-circle"
+ (box :class "dash-resource-inner")
+ )
+ (label :class "dash-resource-text" :text "${memory.swapused}")
+ )
+ )
+ )
+ )
+ )
+ )
+ (box ;Actinos
+ :orientation "v"
+ :space-evenly false
+ (box
+ :orientation "v"
+ :space-evenly false
+ :style "
+ ${anim_open_dash ? dash_curve_in : dash_curve_out}
+ ${rev_dash ? '' : 'margin-right: -100px; margin-left: 100px;'}
+ "
+ (button :onclick "scripts/dashactivate '~/.local/bin/lock.sh' &" :class "dash clr4 dash-icon dash-button" (label :class "icon" :text "") )
+ (button :onclick "scripts/dashactivate 'systemctl suspend' &" :class "dash clr3 dash-icon dash-button" (label :class "icon" :text "") )
+ (button :onclick "scripts/dashactivate 'loginctl terminate-user $USER' &" :class "dash clr2 dash-icon dash-button" (label :class "icon" :text "") )
+ (button :onclick "scripts/dashactivate 'systemctl reboot' &" :class "dash clr1 dash-icon dash-button" (label :class "icon" :text "") )
+ (button :onclick "scripts/dashactivate 'systemctl poweroff' &" :class "dash clr0 dash-icon dash-button" (label :class "icon" :text "") )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow dashboard
+ :focusable true
+ :windowtype "normal"
+ :wm-ignore true
+ :geometry (geometry
+ :x 0
+ :y 0
+ :anchor "center center"
+ )
+ :monitor 0
+ (dashboard-contents)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/dashfs.yuck b/early/.config/eww/windows/dashfs.yuck
new file mode 100755
index 000000000..e7c280e7f
--- /dev/null
+++ b/early/.config/eww/windows/dashfs.yuck
@@ -0,0 +1,604 @@
+(defvar MD3_DECEL "400ms cubic-bezier(0.05, 0.7, 0.1, 1)")
+(defvar MD3_ACCEL "150ms cubic-bezier(0.3, 0, 0.8, 0.15)")
+
+(defwidget dashfs_resource [value unit icon name]
+ (box
+ :space-evenly false :orientation "v"
+ (label :class "dashfs-resource-title" :text {name})
+ (box
+ :space-evenly false :orientation "v"
+ :class "dashfs-resource-box"
+ :spacing 10
+ (circular-progress
+ :width 80 :height 80
+ :start-at 75
+ :class "dashfs-resource-circle"
+ :value {value}
+ :thickness 4
+ (label :class "dashfs-resource-icon" :text {icon})
+ )
+ (label
+ :halign "center"
+ :class "dashfs-resource-label"
+ :text "${value}${unit}"
+ )
+ )
+ )
+)
+
+(defwidget cavacol_dashfs [nth dir]
+ (box
+ :valign "${dir == 'up' ? 'end' : (
+ dir == 'down' ? 'start' : 'fill'
+ )}"
+ :halign "${dir == 'right' ? 'start' : (
+ dir == 'left' ? 'end' : 'fill'
+ )}"
+ ; :width 20
+ :height 24
+ :class "dashfs-cava-column"
+ :style "
+ transition: 0ms;
+ min-${dir == 'up' || dir == 'down' ? 'height' : 'width'}: ${cavajson[nth] / 3}px;
+ "
+ )
+)
+
+(defwidget dashfs_widget []
+ (eventbox
+ :onclick "scripts/toggle-dashfs.sh --close &"
+ (box :width {RES_WIDTH} :height {RES_HEIGHT}
+ :class "dashfs-bg"
+ (overlay
+ (box :space-evenly false :orientation "v"
+ :width {RES_WIDTH} :height {RES_HEIGHT}
+ :class "dashfs-graph"
+ :style "
+ transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ${rev_dashfs ? '' : 'margin-left: -${RES_WIDTH}px; margin-right: ${RES_WIDTH}px;'}
+ "
+ )
+ ; Cava (left)
+ (box
+ :orientation "v"
+ :halign "start" :valign "center"
+ :height {RES_HEIGHT}
+ :style "
+ transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ${rev_dashfs ? 'margin-left: -24px' : 'margin-right: 400px; margin-left: -400px;'}
+ "
+ (cavacol_dashfs :dir "right" :nth 0)
+ (cavacol_dashfs :dir "right" :nth 1)
+ (cavacol_dashfs :dir "right" :nth 2)
+ (cavacol_dashfs :dir "right" :nth 3)
+ (cavacol_dashfs :dir "right" :nth 4)
+ (cavacol_dashfs :dir "right" :nth 5)
+ (cavacol_dashfs :dir "right" :nth 6)
+ (cavacol_dashfs :dir "right" :nth 7)
+ (cavacol_dashfs :dir "right" :nth 8)
+ (cavacol_dashfs :dir "right" :nth 9)
+ (cavacol_dashfs :dir "right" :nth 10)
+ (cavacol_dashfs :dir "right" :nth 11)
+ (cavacol_dashfs :dir "right" :nth 12)
+ (cavacol_dashfs :dir "right" :nth 13)
+ (cavacol_dashfs :dir "right" :nth 14)
+ (cavacol_dashfs :dir "right" :nth 15)
+ (cavacol_dashfs :dir "right" :nth 16)
+ (cavacol_dashfs :dir "right" :nth 17)
+ (cavacol_dashfs :dir "right" :nth 18)
+ (cavacol_dashfs :dir "right" :nth 19)
+ (cavacol_dashfs :dir "right" :nth 20)
+ (cavacol_dashfs :dir "right" :nth 21)
+ (cavacol_dashfs :dir "right" :nth 22)
+ (cavacol_dashfs :dir "right" :nth 23)
+ (cavacol_dashfs :dir "right" :nth 24)
+ (cavacol_dashfs :dir "right" :nth 25)
+ (cavacol_dashfs :dir "right" :nth 26)
+ (cavacol_dashfs :dir "right" :nth 27)
+ (cavacol_dashfs :dir "right" :nth 28)
+ (cavacol_dashfs :dir "right" :nth 29)
+ (cavacol_dashfs :dir "right" :nth 30)
+ (cavacol_dashfs :dir "right" :nth 31)
+ (cavacol_dashfs :dir "right" :nth 32)
+ (cavacol_dashfs :dir "right" :nth 33)
+ (cavacol_dashfs :dir "right" :nth 34)
+ (cavacol_dashfs :dir "right" :nth 35)
+ (cavacol_dashfs :dir "right" :nth 36)
+ (cavacol_dashfs :dir "right" :nth 37)
+ (cavacol_dashfs :dir "right" :nth 38)
+ (cavacol_dashfs :dir "right" :nth 39)
+ (cavacol_dashfs :dir "right" :nth 40)
+ (cavacol_dashfs :dir "right" :nth 41)
+ (cavacol_dashfs :dir "right" :nth 42)
+ (cavacol_dashfs :dir "right" :nth 43)
+ (cavacol_dashfs :dir "right" :nth 44)
+ )
+ ; Cava (right)
+ (box
+ :orientation "v" :space-evenly false
+ :halign "end" :valign "center"
+ :height {RES_HEIGHT}
+ :style "
+ transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ${rev_dashfs ? 'margin-right: -24px;' : 'margin-left: 400px; margin-right: -400px;'}
+ "
+ (cavacol_dashfs :dir "left" :nth 49)
+ (cavacol_dashfs :dir "left" :nth 48)
+ (cavacol_dashfs :dir "left" :nth 47)
+ (cavacol_dashfs :dir "left" :nth 46)
+ (cavacol_dashfs :dir "left" :nth 45)
+ (cavacol_dashfs :dir "left" :nth 44)
+ (cavacol_dashfs :dir "left" :nth 43)
+ (cavacol_dashfs :dir "left" :nth 42)
+ (cavacol_dashfs :dir "left" :nth 41)
+ (cavacol_dashfs :dir "left" :nth 40)
+ (cavacol_dashfs :dir "left" :nth 39)
+ (cavacol_dashfs :dir "left" :nth 38)
+ (cavacol_dashfs :dir "left" :nth 37)
+ (cavacol_dashfs :dir "left" :nth 36)
+ (cavacol_dashfs :dir "left" :nth 35)
+ (cavacol_dashfs :dir "left" :nth 34)
+ (cavacol_dashfs :dir "left" :nth 33)
+ (cavacol_dashfs :dir "left" :nth 32)
+ (cavacol_dashfs :dir "left" :nth 31)
+ (cavacol_dashfs :dir "left" :nth 30)
+ (cavacol_dashfs :dir "left" :nth 29)
+ (cavacol_dashfs :dir "left" :nth 28)
+ (cavacol_dashfs :dir "left" :nth 27)
+ (cavacol_dashfs :dir "left" :nth 26)
+ (cavacol_dashfs :dir "left" :nth 25)
+ (cavacol_dashfs :dir "left" :nth 24)
+ (cavacol_dashfs :dir "left" :nth 23)
+ (cavacol_dashfs :dir "left" :nth 22)
+ (cavacol_dashfs :dir "left" :nth 21)
+ (cavacol_dashfs :dir "left" :nth 20)
+ (cavacol_dashfs :dir "left" :nth 19)
+ (cavacol_dashfs :dir "left" :nth 18)
+ (cavacol_dashfs :dir "left" :nth 17)
+ (cavacol_dashfs :dir "left" :nth 16)
+ (cavacol_dashfs :dir "left" :nth 15)
+ (cavacol_dashfs :dir "left" :nth 14)
+ (cavacol_dashfs :dir "left" :nth 13)
+ (cavacol_dashfs :dir "left" :nth 12)
+ (cavacol_dashfs :dir "left" :nth 11)
+ (cavacol_dashfs :dir "left" :nth 10)
+ (cavacol_dashfs :dir "left" :nth 9)
+ (cavacol_dashfs :dir "left" :nth 8)
+ (cavacol_dashfs :dir "left" :nth 7)
+ (cavacol_dashfs :dir "left" :nth 6)
+ (cavacol_dashfs :dir "left" :nth 5)
+ (cavacol_dashfs :dir "left" :nth 4)
+ (cavacol_dashfs :dir "left" :nth 3)
+ (cavacol_dashfs :dir "left" :nth 2)
+ (cavacol_dashfs :dir "left" :nth 1)
+ (cavacol_dashfs :dir "left" :nth 0)
+ )
+ ; Greet
+ (box :space-evenly false :orientation "v"
+ :halign "start" :valign "start"
+ :class "dashfs-greet"
+ :style "
+ transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ${rev_dashfs ? '' : 'margin-left: -533px;'}
+ "
+ (label :xalign 0 :class "dashfs-greet-text"
+ :text "${time.hour >= 21 ? 'Good night' : (
+ time.hour >= 18 ? 'Good evening' : (
+ time.hour >= 12 ? 'Good afternoon' : (
+ time.hour >= 5 ? 'Good morning' : 'Go to sleep'
+ )
+ )
+ )
+ } ${realname}!"
+ )
+ (label :xalign 0 :class "dashfs-greet-subtext"
+ :text "It's not awesome, it's Hyprland!"
+ )
+ )
+ ; Time
+ (box :space-evenly false :orientation "v"
+ :halign "end" :valign "start"
+ :class "dashfs-clock"
+ :style "
+ transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ${rev_dashfs ? '' : 'margin-right: -533px;'}
+ "
+ (label :xalign 1 :class "dashfs-clock-time" :text "${time.hour}:${time.minute}")
+ (label :xalign 1 :class "dashfs-clock-date" :text "${time.day}, ${time.date}")
+ )
+ ; Calendar
+ (box
+ :space-evenly false :orientation "v"
+ :halign "end" :valign "center"
+ :style "
+ transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ${rev_dashfs ? 'margin-right: 40px;' : 'margin-right: -533px;'}
+ margin-bottom: 200px;
+ "
+ (box
+ :space-evenly false :orientation "v"
+ (eventbox
+ :onscroll "scripts/scrollmonth {} &"
+ (box
+ :orientation "v"
+ :space-evenly false
+ (centerbox
+ :style "padding: 0 12px;"
+ (label :xalign 0 :class "dashfs-calendar-title" :text "${calendartitle}")
+ (box)
+ (box
+ :halign "end" :valign "center"
+ (box
+ :halign "end" :valign "center"
+ (button
+ :onclick "scripts/scrollmonth up &"
+ :halign "end" :valign "center"
+ :class "winicon dashfs-monthbutton"
+ (image
+ :valign "center"
+ :path "images/svg/dark/caretup.svg"
+ )
+ )
+ (button
+ :onclick "scripts/scrollmonth down &"
+ :halign "end" :valign "center"
+ :class "winicon dashfs-monthbutton"
+ (image
+ :valign "center"
+ :path "images/svg/dark/caretdown.svg"
+ )
+ )
+ )
+ )
+ )
+ (box :space-evenly false :orientation "v"
+ :class "dashfs-section-nopad"
+ (box
+ (for day in weekdays
+ (box
+ :class "dashfs-calendar-button day${day.today}"
+ (label :class "dashfs-calendar-text" :text "${day.day}")
+ )
+ )
+ )
+ (for week in calendar
+ (box
+ (for day in week
+ (button
+ :class "dashfs-calendar-button dashfs-day${day.today}"
+ (label :class "dashfs-calendar-text" :text "${day.day}")
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ ; Fetch
+ (box
+ :orientation "v" :space-evenly false
+ :halign "start" :valign "start"
+ :style "
+ transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ${rev_dashfs ? 'margin-left: 100px;' : 'margin-left: -533px;'}
+ margin-top: 450px;
+ "
+ (label :class "dashfs-section-title" :text "# System")
+ (box :space-evenly false :orientation "v"
+ :class "dashfs-section"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "${username + '@' + hostname}")
+ )
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "${kernel}")
+ )
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "${uptime}")
+ )
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "${wm}")
+ )
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "${packages}")
+ )
+ )
+ )
+ ; Session
+ (box
+ :orientation "v" :space-evenly false
+ :halign "start" :valign "start"
+ :style "
+ transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ${rev_dashfs ? 'margin-left: 400px;' : 'margin-left: -533px;'}
+ margin-top: 350px;
+ "
+ (label :class "dashfs-section-title" :text "# Session")
+ (box :space-evenly false :orientation "v"
+ :class "dashfs-section"
+ (button :class "dashfs-section-button"
+ :onclick "scripts/dashactivate '~/.local/bin/lock.sh' &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "Lock")
+ )
+ )
+ (button :class "dashfs-section-button"
+ :onclick "scripts/dashactivate 'systemctl suspend' &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "Sleep")
+ )
+ )
+ (button :class "dashfs-section-button"
+ :onclick "scripts/dashactivate 'loginctl terminate-user $USER' &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "Logout")
+ )
+ )
+ (button :class "dashfs-section-button"
+ :onclick "scripts/dashactivate 'systemctl reboot' &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "Reboot")
+ )
+ )
+ (button :class "dashfs-section-button"
+ :onclick "scripts/dashactivate 'systemctl poweroff' &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "Shutdown")
+ )
+ )
+ )
+ )
+ ; Quick dirs
+ (box
+ :orientation "v" :space-evenly false
+ :halign "start" :valign "start"
+ :style "
+ transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ${rev_dashfs ? 'margin-left: 700px;' : 'margin-left: -533px;'}
+ margin-top: 450px;
+ "
+ (label :class "dashfs-section-title" :text "# Quick dirs")
+ (box :space-evenly false :orientation "v"
+ :class "dashfs-section"
+ (button :class "dashfs-section-button"
+ :onclick "scripts/toggle-dashfs.sh --close && xdg-open ~/Documents &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "Documents")
+ )
+ )
+ (button :class "dashfs-section-button"
+ :onclick "scripts/toggle-dashfs.sh --close && xdg-open ~/Downloads &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "Downloads")
+ )
+ )
+ (button :class "dashfs-section-button"
+ :onclick "scripts/toggle-dashfs.sh --close && xdg-open ~/Music &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "Music")
+ )
+ )
+ (button :class "dashfs-section-button"
+ :onclick "scripts/toggle-dashfs.sh --close && xdg-open ~/Pictures &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "Pictures")
+ )
+ )
+ (button :class "dashfs-section-button"
+ :onclick "scripts/toggle-dashfs.sh --close && xdg-open ~/Videos &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-fetch-icon" :text "")
+ (label :class "dashfs-fetch" :text "Videos")
+ )
+ )
+ )
+ )
+ ; Quick links
+ (box
+ :orientation "v" :space-evenly false
+ :halign "start" :valign "start"
+ :style "
+ transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ${rev_dashfs ? 'margin-left: 1000px;' : 'margin-left: -533px;'}
+ margin-top: 350px;
+ "
+ (label :class "dashfs-section-title" :text "# Quick links")
+ (box :space-evenly false :orientation "v"
+ :class "dashfs-section"
+ (button :class "dashfs-section-button"
+ :onclick "scripts/toggle-dashfs.sh --close && xdg-open 'https://discord.com/app' &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-nerd-icon" :text " ")
+ (label :class "dashfs-fetch" :text "Discord")
+ )
+ )
+ (button :class "dashfs-section-button"
+ :onclick "scripts/toggle-dashfs.sh --close && xdg-open 'https://reddit.com' &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-nerd-icon" :text " ")
+ (label :class "dashfs-fetch" :text "Reddit")
+ )
+ )
+ (button :class "dashfs-section-button"
+ :onclick "scripts/toggle-dashfs.sh --close && xdg-open 'https://github.com' &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-nerd-icon" :text " ")
+ (label :class "dashfs-fetch" :text "GitHub")
+ )
+ )
+ (button :class "dashfs-section-button"
+ :onclick "scripts/toggle-dashfs.sh --close && xdg-open 'https://youtube.com' &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-nerd-icon" :text " ")
+ (label :class "dashfs-fetch" :text "Youtube")
+ )
+ )
+ (button :class "dashfs-section-button"
+ :onclick "scripts/toggle-dashfs.sh --close && xdg-open 'https://soundcloud.com' &"
+ (box
+ :orientation "h" :space-evenly false
+ (label :class "dashfs-nerd-icon" :text " ")
+ (label :class "dashfs-fetch" :text "SoundCloud")
+ )
+ )
+ )
+ )
+ ; Taskbar
+ ; (box :orientation "h" :space-evenly false
+ ; :halign "center" :valign "end"
+ ; :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ ; :style "
+ ; transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ; ${rev_dashfs ? '' : 'margin-bottom: -70px;'}
+ ; "
+ ; (for app in tasks
+ ; (overlay
+ ; (eventbox
+ ; :class "dashfs-button-only"
+ ; :onclick "${app.count > 0 ? ('hyprctl dispatch workspace ' + app.workspace[0] + ' &') : (app.exec)}& scripts/toggle-dashfs.sh --close &"
+ ; (box
+ ; :class "dashfs-button-pad"
+ ; (box
+ ; :class "dashfs-taskbaricon"
+ ; :style "
+ ; background-image: url('${app.icon}');
+ ; ${app.class == awin.class ? 'background-color: rgba(108, 112, 134, 0.4); border: 1px solid rgba(108, 112, 134, 0.15); border-top: 1px solid rgba(108, 112, 134, 0.15);' : ''}
+ ; "
+ ; )
+ ; )
+ ; )
+ ; (box :class "dashfs-taskbar-indicator-${app.class == awin.class ? 'true' : (app.count > 0 ? 'false' : 'none')}")
+ ; )
+ ; )
+ ; ; Dummy keep alive
+ ; (revealer :transition "slideright" :reveal false (label :text {awin.class}))
+ ; )
+ ; Music
+ (box
+ :space-evenly false :orientation "h"
+ :halign "center" :valign "start"
+ :class "dashfs-music"
+ :style "
+ transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ${rev_dashfs ? 'margin-top: 40px;' : 'margin-top: -200px; margin-bottom: 200px;'}
+ "
+ (box
+ :class "dashfs-music-cover"
+ :style "background-image: url('${mcover.image}')"
+ )
+ (eventbox
+ :class "music-ctl-revealer"
+ :onscroll "echo $(echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%) && scripts/volume osd"
+ (box
+ :space-evenly false
+ :class "music-ctl-revealer"
+ :orientation "v"
+ :valign "center"
+ (label
+ :class "music-title-bar"
+ :limit-width 50
+ :xalign 0
+ :style "font-size: 15pt; font-family: 'Rubik';" ;color: ${mcover.color.colors.color7};
+ :text "${mname.title == '' ? 'Not playing' : mname.title}"
+ )
+ (revealer
+ :transition "slidedown"
+ :reveal "${mname.artist != ''}"
+ :duration "20ms"
+ (label
+ :class "music-artist-bar"
+ :limit-width 50
+ :xalign 0
+ :style "font-size: 11pt; font-family: 'Rubik';"
+ :text "${mname.artist}"
+ )
+ )
+ )
+ )
+ )
+ ; Resources
+ (box :orientation "h" :space-evenly false :spacing 30
+ :halign "center" :valign "end"
+ :style "
+ transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ${rev_dashfs ? 'margin-bottom: 100px;' : 'margin-bottom: -500px;'}
+ "
+ (dashfs_resource :value {round(EWW_CPU.avg, 0)} :unit "%" :icon "" :name "CPU")
+ (dashfs_resource :value {round(memory.percentage, 0)} :unit "% (${memory.used})" :icon "" :name "RAM")
+ (dashfs_resource :value {round(memory.swappercentage, 0)} :unit "% (${memory.swapused})" :icon "" :name "Swap")
+ (dashfs_resource :value {battery.percentage} :unit "%" :icon "" :name "Battery")
+ (dashfs_resource :value {diskfreepercent} :unit "%" :icon "" :name "Free space")
+ )
+ ; Icosahedron
+ (image :orientation "h" :space-evenly false :spacing 30
+ :halign "end" :valign "end"
+ :style "
+ transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ${rev_dashfs ? 'margin-bottom: -250px; margin-right: -150px;' : 'margin-bottom: -900px; margin-top: 900px; margin-right: -900px; margin-left: 900px;'}
+ "
+ :path "images/svg/icosahedron.svg"
+ :image-height 600
+ :image-width 600
+ )
+ ; Music
+ (box
+ :space-evenly false :orientation "v"
+ :halign "start" :valign "end"
+ :style "
+ transition: ${anim_open_dashfs ? MD3_DECEL : MD3_ACCEL};
+ ${rev_dashfs ? 'margin-left: 40px; margin-bottom: 40px;' : 'margin-bottom: -200px; margin-top: 200px;'}
+ "
+ (label :xalign 0 :class "dashfs-quote-content" :text "${quote_content[3]}")
+ (label :xalign 1 :class "dashfs-quote-author" :text "${quote_author[3]}")
+ )
+ )
+ )
+ )
+)
+
+(defwindow dashfs
+ :focusable true
+ :windowtype "normal"
+ :wm-ignore true
+ :geometry (geometry
+ :width 1920
+ :height 1080
+ :anchor "center center"
+ )
+ :monitor 0
+ (dashfs_widget)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/dynamic-bg.yuck b/early/.config/eww/windows/dynamic-bg.yuck
new file mode 100755
index 000000000..6ba9a082b
--- /dev/null
+++ b/early/.config/eww/windows/dynamic-bg.yuck
@@ -0,0 +1,32 @@
+(defvar MOVEMULTIPLIER 30)
+(defvar morebgoffset 4)
+
+(defwidget dynbg []
+ (image
+ :class "dynbg-image"
+ ; :style "background-position: ${(activews - 5)*MOVEMULTIPLIER > 50 ? 100 : 50+(activews - 5)*MOVEMULTIPLIER}% 20%"
+ :style "
+ margin-left: ${(5 - (activews > 10 ? 10 : activews))*MOVEMULTIPLIER}px;
+ margin-right: ${((activews > 10 ? 10 : activews) - 5)*MOVEMULTIPLIER}px;
+ "
+ :path "images/wallpaper/wallpaper"
+ :image-width {RES_WIDTH*BG_ZOOM}
+ :image-height {RES_HEIGHT*BG_ZOOM}
+ )
+)
+
+(defwindow dynamic-bg
+ :focusable false
+ :stacking "bg"
+ :windowtype "normal"
+ :wm-ignore true
+ :geometry (geometry
+ :x 0
+ :y 0
+ :width "100%"
+ :height "100%"
+ :anchor "center center"
+ )
+ :monitor 0
+ (dynbg)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/music.yuck b/early/.config/eww/windows/music.yuck
new file mode 100755
index 000000000..5ed41ee7f
--- /dev/null
+++ b/early/.config/eww/windows/music.yuck
@@ -0,0 +1,163 @@
+(defwidget cavacol_musicwin [nth dir]
+ (box
+ :valign "${dir == 'up' ? 'end' : (
+ dir == 'down' ? 'start' : (
+ dir == 'virt' ? 'center' : 'fill'
+ )
+ )}"
+ :halign "${dir == 'right' ? 'start' : (
+ dir == 'left' ? 'end' : (
+ dir == 'hori' ? 'center' : 'fill'
+ )
+ )}"
+ :width 15
+ :class "music-cava-column"
+ :style "
+ background-color: ${mcover.color.colors.color4 == 'null' ? 'white' : mcover.color.colors.color4};
+ transition: 0ms;
+ min-${dir == 'up' || dir == 'down' ? 'height' : 'width'}: ${cavajson[nth] / 7}px;
+ "
+ )
+)
+
+(defwidget music []
+ (eventbox
+ :onhoverlost "scripts/toggle-music.sh --close &"
+ (box
+ :class "music-area"
+ :style "
+ ${music_open ? '' : 'margin-top: -233px; margin-bottom: 233px;'}
+ ${anim_open_music ? 'transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ "
+ (overlay
+ (box ; Fallback
+ :class "music-cover-art"
+ )
+ (box ; Cover art
+ :class "music-cover-art"
+ :style "background-image: url('${mcover.image}');"
+ )
+ (box :space-evenly true :orientation "h"
+ (cavacol_musicwin :dir "up" :nth 0)
+ (cavacol_musicwin :dir "up" :nth 1)
+ (cavacol_musicwin :dir "up" :nth 2)
+ (cavacol_musicwin :dir "up" :nth 3)
+ (cavacol_musicwin :dir "up" :nth 4)
+ (cavacol_musicwin :dir "up" :nth 5)
+ (cavacol_musicwin :dir "up" :nth 6)
+ (cavacol_musicwin :dir "up" :nth 7)
+ (cavacol_musicwin :dir "up" :nth 8)
+ (cavacol_musicwin :dir "up" :nth 9)
+ (cavacol_musicwin :dir "up" :nth 10)
+ (cavacol_musicwin :dir "up" :nth 11)
+ (cavacol_musicwin :dir "up" :nth 12)
+ (cavacol_musicwin :dir "up" :nth 13)
+ (cavacol_musicwin :dir "up" :nth 14)
+ (cavacol_musicwin :dir "up" :nth 15)
+ (cavacol_musicwin :dir "up" :nth 16)
+ (cavacol_musicwin :dir "up" :nth 17)
+ (cavacol_musicwin :dir "up" :nth 18)
+ (cavacol_musicwin :dir "up" :nth 19)
+ (cavacol_musicwin :dir "up" :nth 20)
+ (cavacol_musicwin :dir "up" :nth 21)
+ (cavacol_musicwin :dir "up" :nth 22)
+ (cavacol_musicwin :dir "up" :nth 23)
+ (cavacol_musicwin :dir "up" :nth 24)
+ (cavacol_musicwin :dir "up" :nth 25)
+ (cavacol_musicwin :dir "up" :nth 26)
+ (cavacol_musicwin :dir "up" :nth 27)
+ (cavacol_musicwin :dir "up" :nth 28)
+ (cavacol_musicwin :dir "up" :nth 29)
+ (cavacol_musicwin :dir "up" :nth 30)
+ (cavacol_musicwin :dir "up" :nth 31)
+ (cavacol_musicwin :dir "up" :nth 32)
+ (cavacol_musicwin :dir "up" :nth 33)
+ (cavacol_musicwin :dir "up" :nth 34)
+ )
+ (box ;
+ :orientation "v"
+ :class "music-box"
+ :space-evenly false
+ (label
+ :class "music-title"
+ :wrap false
+ :text "${music.title == '' ? 'Not playing' : music.title}"
+ :style "color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};"
+ :limit-width 35
+ )
+ (label
+ :class "music-artist"
+ :wrap true
+ :text "${music.artist}"
+ :style "color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};"
+ )
+ (centerbox
+ (box
+ (label
+ :halign "center" :valign "center"
+ :class "music-time-label"
+ :style "color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};"
+ :text {music.position_time}
+ )
+ )
+ (centerbox
+ :class "music-button-box"
+ (button
+ :class "song-button"
+ :style "color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};"
+ :onclick "playerctl previous" ""
+ )
+ (button
+ :class "song-button"
+ :style "color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};"
+ :onclick "playerctl play-pause"
+ "${music.status != '' ? music.status : ''}"
+ )
+ (button
+ :class "song-button"
+ :style "color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};"
+ :onclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
+ ""
+ )
+ )
+ (box
+ (label
+ :halign "center" :valign "center"
+ :class "music-time-label"
+ :style "color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};"
+ :text {music.length}
+ )
+ )
+ )
+ (scale
+ :valign "end"
+ :class "track-scale"
+ :value {music.position}
+ :onchange "playerctl position `bc <<< \"{} * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
+ :style "highlight {background-color: ${mcover.color.colors.color4};}"
+ )
+ )
+ (box
+ :class "music-media-source"
+ :halign "start"
+ :valign "start"
+ :orientation "h"
+ (label :class "music-source-icon" :text "${mcover.color.source}" :style "color: ${mcover.color.colors.color4};")
+ )
+ )
+ )
+ )
+)
+
+(defwindow music
+ :wm-ignore true
+ :stacking "overlay"
+ :monitor 0
+ :geometry (geometry
+ :x "15px"
+ :y "61px"
+ :width "558px"
+ :height "191px"
+ :anchor "top left")
+ (music)
+)
diff --git a/early/.config/eww/windows/onotify.yuck b/early/.config/eww/windows/onotify.yuck
new file mode 100755
index 000000000..a9ddf7676
--- /dev/null
+++ b/early/.config/eww/windows/onotify.yuck
@@ -0,0 +1,516 @@
+(defwidget volume_mixer []
+ (box
+ :space-evenly false
+ :orientation "v"
+ ; :class "sliders"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :halign "start"
+ :class "osettings-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-section"
+ :text "Volume mixer"
+ )
+ )
+ (for app in audiojson
+ (box
+ :orientation "v" :space-evenly false
+ (box
+ :orientation "h" :space-evenly false
+ :spacing 10
+ (image
+ :class "onotify-app-icon"
+ :path {app.icon}
+ :image-width 25
+ :image-height 25
+ )
+ (label
+ :xalign 0
+ :valign "center"
+ :class "onotify-app-name"
+ :limit-width 42
+ :text {app.name}
+ )
+ )
+ (box
+ :orientation "v"
+ :space-evenly false
+ (scroll
+ :vscroll false
+ :hscroll true
+ (box
+ :orientation "h"
+ ; :space-evenly false
+ (for ser in {app["volume"]}
+ (eventbox
+ :onscroll "pactl set-sink-input-volume ${ser[0]} $(echo {} | sed -e \"s/up/+5/g\" -e \"s/down/-5/g\")%"
+ :onrightclick "pactl set-sink-input-volume ${ser[0]} 100%"
+ :onclick "pactl set-sink-input-volume ${ser[0]} 0%"
+ (centerbox
+ :space-evenly false
+ :orientation "${app.count > 3 ? 'v' : 'h'}"
+ :class "onotify-app-volbox"
+ (label
+ :xalign "${app.count > 3 ? '0.5' : '0'}"
+ :class "onotify-app-ser"
+ :style "
+ ${app.count > 3 ? 'margin-bottom: 5px;' : 'padding: 0 5px;'}
+ "
+ :text "#${ser[0]}"
+ )
+ (box)
+ (circular-progress
+ :halign "${app.count > 3 ? 'center' : 'end'}"
+ :value {ser[1] <= 100 ? ser[1] : 100}
+ :class "onotify-app-vol-circle"
+ :thickness 4
+ :start-at 75
+ :width 45
+ :height 45
+ (label :class "onotify-app-text" :text "${ser[1]}")
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwidget onotify []
+ (box
+ :orientation "v"
+ :space-evenly false
+ :style "
+ ${anim_open_ontf ? 'transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ ${rev_ontf ? '' : 'margin-right: -533px;'}
+ "
+ (eventbox
+ :onclick "scripts/toggle-onotify.sh --close &"
+ :onmiddleclick "scripts/toggle-onotify.sh --close &"
+ :onrightclick "scripts/toggle-onotify.sh --close &"
+ (box
+ :class "box-that-is-there" :style "min-height: 1px;"
+ )
+ )
+ (eventbox
+ ; :onhoverlost "scripts/toggle-onotify.sh --close &"
+ (box
+ :orientation "v"
+ :space-evenly false
+ :class "onotify-window"
+ (box
+ :class "system-row"
+ :space-evenly false
+ :halign "center"
+ (box
+ :class "wifi-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element"
+ :space-evenly false
+ (button
+ ; :class "wifi-button"
+ :onclick "scripts/net toggle"
+ :style "font-family: Material Symbols Rounded;"
+ {net.icon}
+ )
+ (label :class "separator" :text "|")
+ (button
+ :class "wifi-arrow-btn"
+ :style "font-family: Material Symbols Rounded;"
+ :onclick "foot sh -c 'sleep 0.01 ; nmtui' &"
+ ""
+ )
+ )
+ (label :style "font-size: 12pt;" :class "sys-toggle" :text {net.essid} :xalign 0.5 :limit-width 15)
+ )
+
+ (box
+ :class "bluetooth-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element icon"
+ :space-evenly false
+ (button
+ :class "bluetooth-button"
+ :onclick "scripts/bluetooth toggle &"
+ :style "font-family: 'Material Symbols Rounded';"
+ {bluetooth.icon}
+ )
+ (label :class "separator" :text "|")
+ (button
+ :class "bluetooth-arrow-btn"
+ :onclick "blueberry &"
+ ""
+ )
+ )
+ (label
+ :style "font-size: 12pt;"
+ :text {bluetooth.text}
+ :xalign 0.5
+ :class "sys-toggle"
+ :tooltip "${bluetooth.text} ${bluetooth.batt_icon}"
+ :limit-width 15
+ )
+ )
+ (box
+ :class "airplane-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element icon"
+ (button
+ :class "airplane-button"
+ :onclick "scripts/airplane toggle &"
+ airplane
+ )
+ )
+ (label :style "font-size: 12pt;" :text "Airplane Mode" :xalign 0.5 :limit-width 16)
+ )
+ (box
+ :class "power-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element icon"
+ (button
+ :halign "end"
+ ; :onclick "wlogout &"
+ :onclick "wlogout -p layer-shell &"
+ ""
+ )
+ )
+ (label
+ :style "font-size: 12pt;"
+ :text "Power"
+ :class "sys-toggle"
+ :xalign 0.5
+ :limit-width 16
+ )
+ )
+ )
+ (scroll
+ ; :vscroll true
+ ; :hscroll false
+ ; :halign "fill"
+ :class "onotify-content"
+ :valign "fill"
+ :style "min-height: 317px;"
+ (box
+ :halign "fill"
+ :class "osettings-scroll-bg"
+ :space-evenly false
+ :spacing 20
+ :orientation "v"
+ ; Volume mixer
+ ; (volume_mixer)
+ ; Notifications
+ (box
+ :space-evenly false :orientation "v"
+ (centerbox
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :halign "start"
+ :class "osettings-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :class "osettings-section"
+ :text "Notifications"
+ )
+ )
+ (box)
+ ; (box
+ ; :class "icon"
+ ; :halign "end" :valign "center"
+ ; :space-evenly false
+ ; :spacing 10
+ ; (button
+ ; :class "notification-action"
+ ; :tooltip "Refresh"
+ ; :onclick "dunstctl history > $XDG_CACHE_HOME/dunst-history.json &"
+ ; ""
+ ; )
+ ; (button
+ ; :class "notification-action"
+ ; :tooltip "Pause/Resume Notifications"
+ ; :onclick "scripts/notifications toggle &"
+ ; {notif_icons.toggle_icon}
+ ; )
+ ; (button
+ ; :class "notification-action"
+ ; :tooltip "Clear Notifications"
+ ; :onclick "scripts/notifications clear &"
+ ; ""
+ ; )
+ ; )
+ (box
+ :orientation "h" :space-evenly false
+ :halign "end" :spacing 4
+ :style "margin-left: 9px;"
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag-material"
+ :tooltip "Refresh"
+ :onclick "dunstctl history > $XDG_CACHE_HOME/dunst-history.json &"
+ "Refresh"
+ )
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag-material"
+ :tooltip "Pause/Resume Notifications"
+ :onclick "scripts/notifications toggle && eww update notifications='$(scripts/notifications --once)' &"
+ {notif_icons.paused ? "" : "Pause"}
+ )
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag-material"
+ :tooltip "Clear Notifications"
+ :onclick "scripts/notifications clear &"
+ "Clear"
+ )
+ )
+ )
+ (box
+ :class "container"
+ :orientation "v"
+ :space-evenly false
+ (for i in notifications
+ (eventbox
+ :onclick "dunstctl history-pop ${i.id} && dunstctl action 0 && dunstctl close"
+ (box
+ :class "notification"
+ :orientation "v" :space-evenly false
+ :width 300
+ (centerbox
+ :space-evenly false
+ (label
+ :xalign 0
+ :wrap true
+ :class "summary"
+ :text {i.summary}
+ )
+ (label)
+ (label
+ :xalign 1
+ :wrap true
+ :class "appname"
+ :text {i.appname}
+ )
+ )
+ (label
+ :xalign 0
+ :wrap true
+ :class "body"
+ :text {i.body}
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ ; Calendar
+ (box
+ :space-evenly false :orientation "v"
+ :class "osettings-scroll-bg-colored"
+ (box :space-evenly false
+ (box
+ :orientation "h" :space-evenly false :spacing 10
+ :hexpand true
+ (label
+ :halign "start"
+ :class "osettings-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-section"
+ :text "${calendartitle}"
+ )
+ )
+ (box
+ :orientation "h" :space-evenly false
+ :halign "end" :spacing 4
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag-material"
+ :tooltip "Refresh"
+ :onclick "scripts/scrollmonth up &"
+ "Remove"
+ )
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag-material"
+ :tooltip "Pause/Resume Notifications"
+ :onclick "scripts/scrollmonth down &"
+ "Add"
+ )
+ )
+ )
+ (box
+ :space-evenly false :orientation "v"
+ (eventbox
+ :onscroll "scripts/scrollmonth {} &"
+ (box
+ :orientation "v"
+ :space-evenly false
+ (box
+ :space-evenly false :orientation "v"
+ :halign "center"
+ (box
+ (for day in weekdays
+ (box
+ :class "calendarwin-button day${day.today}"
+ (label :class "calendarwin-text" :text "${day.day}")
+ )
+ )
+ )
+ (for week in calendar
+ (box
+ (for day in week
+ (button
+ :class "calendarwin-button calendarwin-day${day.today}"
+ (label :class "calendarwin-text" :text "${day.day}")
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow onotify
+ :wm-ignore true
+ :monitor 0
+ :focusable true
+ :namespace "onotify"
+ :geometry (geometry
+ :x "0px"
+ :y "61px"
+ :width "0px"
+ :height "1019px"
+ :anchor "top right"
+ )
+ (onotify)
+)
+
+(defwidget onotify-button []
+ (eventbox
+ :halign "end"
+ (box
+ :space-evenly false
+ :halign "end"
+ (eventbox
+ :onmiddleclick "scripts/toggle-dashfs.sh &"
+ :onrightclick "scripts/toggle-dashfs.sh &"
+ :onscroll "echo $(echo {} | sed -e 's/down/-U 3/g' -e 's/up/-A 3/g' | xargs light) && scripts/brightness osd"
+ :onclick "scripts/toggle-onotify.sh &"
+ :onhover "${EWW_CMD} update calendar_hover=true"
+ :onhoverlost "${EWW_CMD} update calendar_hover=false"
+ (box
+ :class "module-button-pad-center"
+ ; Time and date
+ (box
+ :orientation "v" :space-evenly false
+ :valign "center"
+ :class "module-timedate module module-button${rev_calendar ? '-true' : (calendar_hover ? '-hover' : '')}"
+ :style "padding: 0 10px;"
+ (box
+ :space-evenly false
+ :halign "end"
+ :class "timedate-time"
+ (label :text "${time.hour}" :class "clock hour"
+ :style "${colormode == 'one' ? ('color: ' + coloraccent + ';') : ''}"
+ )
+ ; (label :text "${time.hour % 12}" :class "clock hour")
+ (label :text ":" :class "clock"
+ :style "${colormode == 'one' ? ('color: ' + coloraccent + ';') : ''}"
+ )
+ (label :text {time.minute} :class "clock minute"
+ :style "${colormode == 'one' ? ('color: ' + coloraccent + ';') : ''}"
+ )
+ ; (label :text "${time.hour >= 12 ? 'pm' : 'am'}" :class "clock minute")
+ )
+ (box
+ :class "date"
+ :onclick "${EWW_CMD} update popup='calendar'"
+ :style "${colormode == 'one' ? ('color: ' + coloraccent + ';') : ''}"
+ "${time.day}, ${time.date}"
+ )
+ )
+ )
+ )
+ (eventbox
+ :onscroll "echo $(echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%) && scripts/volume osd &"
+ :onclick "scripts/toggle-onotify.sh &"
+ :onmiddleclick "scripts/toggle-dashfs.sh &"
+ :onrightclick "scripts/toggle-dashfs.sh &"
+ :onhover "${EWW_CMD} update ontf_hover=true"
+ :onhoverlost "${EWW_CMD} update ontf_hover=false"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :class "module-button${rev_ontf ? '-true' : (ontf_hover ? '-hover' : '')}"
+ :style "padding-left: 10px; padding-right: 10px; margin: 8px 0; margin-right: 8px;"
+ (box
+ ; :class "module"
+ :space-evenly false
+ :spacing 5
+ :halign "end"
+ (syscpu)
+ (sysmem)
+ (sysbatt)
+ )
+ (overlay
+ (image
+ :class "real-onotify-toggle-button module-button-pad-right-nomargin"
+ ; :class "real-onotify-toggle-button"
+ :path "images/svg/forum.svg"
+ :image-height 33
+ :image-width 33
+ )
+ (revealer
+ :reveal {arraylength(notifications) > 0}
+ :transition "slideleft"
+ :duration "200ms"
+ :class "dummy${notifications[0].id}"
+ (box
+ :halign "end" :valign "end"
+ :class "notif-badge"
+ (label :class "notif-indicator"
+ :style "
+ font-size: 11pt;
+ border-radius: 99px;
+ ${colormode == 'one' ? ('background-color: ' + coloraccent + ';') : ''}
+ "
+ :text "${arraylength(notifications)}"
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
diff --git a/early/.config/eww/windows/osd.yuck b/early/.config/eww/windows/osd.yuck
new file mode 100755
index 000000000..010c717e3
--- /dev/null
+++ b/early/.config/eww/windows/osd.yuck
@@ -0,0 +1,69 @@
+(defwidget osdwidget []
+ (box
+ :class "osd-window"
+ :orientation "h"
+ :space-evenly false
+ (revealer
+ :reveal {osd_vol}
+ :transition "slideright"
+ :duration "80ms"
+ (centerbox
+ :class "osd-var"
+ :orientation "h"
+ :space-evenly false
+ (circular-progress
+ :value {volume.percent}
+ :class "osd-circle"
+ :thickness 4
+ :start-at 75
+ :halign "start"
+ (button
+ :class "inside-circle"
+ (label :xalign "0.5" :yalign "0.5" :halign "center" :valign "center" :class "osd-incircle" :text "${volume.icon}")
+ )
+ )
+ (box)
+ (label :xalign 0.5 :halign "end" :class "osd-text" :text "${volume.percent}")
+ )
+ )
+ (revealer
+ :reveal {osd_bright}
+ :transition "slideright"
+ :duration "80ms"
+ (centerbox
+ :class "osd-var"
+ :orientation "h"
+ :space-evenly false
+ (circular-progress
+ :value {round(brightness.level, 0)}
+ :class "osd-circle"
+ :thickness 4
+ :start-at 75
+ :halign "start"
+ (button
+ :class "inside-circle"
+ (label :xalign "0.5" :yalign "0.5" :halign "center" :valign "center" :class "osd-incircle-bright" :text "${brightness.icon}")
+ )
+ )
+ (box)
+ (label :xalign 0.5 :class "osd-text" :text {round(brightness.level, 0)})
+ )
+ )
+ )
+)
+
+(defwindow osd
+ :stacking "overlay"
+ :wm-ignore true
+ :monitor 0
+ :namespace "osd"
+ :geometry (geometry
+ :y "69px"
+ :width "100px"
+ :height "53px"
+ :anchor "top center"
+ )
+ :stacking "fg"
+ :exclusive false
+ (osdwidget)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/osettings.yuck b/early/.config/eww/windows/osettings.yuck
new file mode 100755
index 000000000..fca5a459f
--- /dev/null
+++ b/early/.config/eww/windows/osettings.yuck
@@ -0,0 +1,1007 @@
+(defwidget checkboxhyprctl [value changevalue]
+ (eventbox
+ :cursor "pointer"
+ :onclick "hyprctl keyword ${changevalue} ${1 - value} && scripts/hyprsettings tickle &"
+ (box
+ :class "osettings-checkbox-${value}"
+ :halign "end"
+ )
+ )
+)
+
+(defwidget checkboxcmd [value changecmd]
+ (eventbox
+ :onclick "${changecmd}"
+ (box
+ :class "osettings-checkbox-${value}"
+ :halign "end"
+ )
+ )
+)
+
+(defwidget osettings []
+ (box
+ :orientation "v"
+ :space-evenly false
+ :style "
+ ${anim_open_ostg ? 'transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ ${rev_ostg ? '' : 'margin-left: -533px; margin-right: 533px;'}
+ "
+ (eventbox
+ :onclick "scripts/toggle-osettings.sh --close &"
+ :onmiddleclick "scripts/toggle-osettings.sh --close &"
+ :onrightclick "scripts/toggle-osettings.sh --close &"
+ (box
+ :class "box-that-is-there" :style "min-height: 1px;"
+ )
+ )
+ (eventbox
+ ; :onhoverlost "scripts/toggle-osettings.sh --close &"
+ (box
+ :orientation "v"
+ :space-evenly false
+ :class "osettings-window"
+ (box
+ :orientation "v"
+ :space-evenly false
+ (box
+ :class "osettings-heading"
+ :orientation "v"
+ :space-evenly false
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-title"
+ :text "# settings"
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-subtitle"
+ :text "Tweak your experience"
+ )
+ )
+ (box
+ :spacing 0
+ :space-evenly false
+ :class "osettings-search"
+ :orientation "h"
+ (input
+ :halign "start"
+ :class "osettings-search-text"
+ :onchange "${EWW_CMD} update oquery=\"$(echo {} | tr [:upper:] [:lower:])\""
+ )
+ (box)
+ (button
+ :halign "end"
+ :class "osettings-search-icon"
+ :style "font-weight: bolder;"
+ ""
+ )
+ )
+ )
+ (scroll
+ ; :vscroll true
+ ; :hscroll false
+ ; :halign "fill"
+ :class "osettings-content"
+ :style "min-height: 792px;"
+ (box
+ :halign "fill"
+ :class "osettings-scroll-bg"
+ :space-evenly false
+ :spacing 20
+ :orientation "v"
+ (box
+ :class "osettings-settings"
+ :orientation "v"
+ :space-evenly false
+ ; Quick settings
+ (revealer
+ :reveal "${matches('quick settings volume audio brightness',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :orientation "v"
+ :space-evenly false
+ (centerbox
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :halign "start"
+ :class "osettings-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-section"
+ :text "Quick values"
+ )
+ )
+ (box)
+ (box
+ :orientation "h" :space-evenly false
+ :halign "end" :spacing 4
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag"
+ :onclick "wpctl set-volume @DEFAULT_AUDIO_SINK@ 23% &"
+ " music"
+ )
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag"
+ :onclick "wpctl set-volume @DEFAULT_AUDIO_SINK@ 50% &"
+ " asmr"
+ )
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag-material"
+ :onclick "light -S 40 &"
+ ""
+ )
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag-material"
+ :onclick "light -S 5 &"
+ ""
+ )
+ )
+ ; (button :valign "center" :yalign 0.5
+ ; :class "osettings-tag"
+ ; :onclick "wpctl set-volume @DEFAULT_AUDIO_SINK@ 50% &"
+ ; "night"
+ ; )
+ )
+ (revealer
+ :reveal "${matches('quick settings volume audio',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (eventbox
+ :onscroll "echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :wrap true
+ :class "osettings-text-icon"
+ :text ""
+ )
+ (box
+ :orientation "v"
+ :space-evenly false
+ (centerbox
+ :orientation "h"
+ :space-evenly false
+ :style "min-width: 417px;"
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-text"
+ :text "Volume"
+ )
+ (box)
+ ; (checkbox
+ ; :halign "end"
+ ; :class "osettings-checkbox"
+ ; :onchecked "scripts/volume mute SINK"
+ ; :onunchecked "scripts/volume mute SINK"
+ ; )
+ (checkboxcmd
+ :value "${volume.audio}"
+ :changecmd "scripts/volume mute SINK"
+ )
+ )
+ (scale
+ :halign "fill"
+ :class "osettings-slider"
+ :value "${volume.percent}"
+ :tooltip "volume on ${volume.percent}%"
+ :onchange "scripts/volume setvol SINK {}"
+ )
+ )
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('quick settings brightness',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :wrap true
+ :class "osettings-text-icon"
+ :text ""
+ )
+ (box
+ :orientation "v"
+ :space-evenly false
+ :style "min-width: 417px;"
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-text"
+ :text "Brightness"
+ )
+ (scale
+ :class "osettings-slider"
+ :value "${brightness.level}"
+ :onchange "light -S {}"
+ )
+ )
+ )
+ )
+ )
+ )
+ ; Mouse
+ (revealer
+ :reveal "${matches('mouse and touchpad touch pad mouse speed mouse acceleration osu raw input sensitivity disable while typing disable_while_typing tap to click clickfinger_behavior',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :halign "start"
+ :class "osettings-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-section"
+ :text "Mouse/Touchpad"
+ )
+ (box
+ :orientation "h" :space-evenly false
+ :halign "end" :spacing 4
+ :style "margin-left: 16px;"
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag"
+ :onclick "hyprctl keyword input:force_no_accel true &"
+ " osu"
+ )
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag"
+ :onclick "hyprctl keyword input:touchpad:disable_while_typing false &"
+ " minecraft"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('mouse and touchpad touch pad speed mouse acceleration osu raw input sensitivity',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (centerbox
+ :orientation "h"
+ :space-evenly false
+ :halign "fill"
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-text"
+ :text "Raw input"
+ )
+ (box)
+ (checkboxhyprctl
+ :value "${hyprjson.force_no_accel}"
+ :changevalue "input:force_no_accel"
+ :halign "end"
+ :class "osettings-checkbox"
+ )
+ )
+ (eventbox
+ :onrightclick "hyprctl keyword input:sensitivity 0"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-text"
+ :text "Sensitivity"
+ )
+ (scale
+ :class "osettings-slider"
+ :value "${hyprjson.input_sensitivity * 50 + 50}"
+ :onchange "hyprctl keyword input:sensitivity $(echo - | awk '{print {} / 50 - 1}') && scripts/hyprsettings tickle"
+ )
+ )
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('mouse and touch pad touchpad disable while typing disable_while_typing',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (centerbox
+ :orientation "h"
+ :space-evenly false
+ :halign "fill"
+ (label
+ :halign "start"
+ :class "osettings-text"
+ :text "Disable touchpad while typing"
+ )
+ (box)
+ (checkboxhyprctl
+ :value "${hyprjson.touchpad_disable_while_typing}"
+ :changevalue "input:touchpad:disable_while_typing"
+ :class "osettings-checkbox"
+ )
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('mouse and touchpad touch pad tap to click clickfinger_behavior',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (centerbox
+ :orientation "h"
+ :space-evenly false
+ :halign "fill"
+ (label
+ :halign "start"
+ :class "osettings-text"
+ :text "Tap to click"
+ )
+ (box)
+ (checkboxhyprctl
+ :value "${hyprjson.touchpad_clickfinger_behavior}"
+ :changevalue "input:touchpad:clickfinger_behavior"
+ )
+ )
+ )
+ )
+ )
+ )
+ ; Appearance
+ (revealer
+ :reveal "${matches('appearance looks customization blur size blur passes blur strength blur xray',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (centerbox
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :halign "start"
+ :class "osettings-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-section"
+ :text "Blur"
+ )
+ )
+ (box)
+ (box
+ :orientation "h" :space-evenly false
+ :halign "end" :spacing 4
+ :style "margin-left: 9px;"
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag"
+ :onclick "hyprctl keyword decoration:blur false && scripts/hyprsettings tickle &"
+ "no blur"
+ )
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag"
+ :onclick "hyprctl keyword decoration:blur true && \
+ hyprctl keyword decoration:blur_size 7 && \
+ hyprctl keyword decoration:blur_passes 4 && \
+ scripts/hyprsettings tickle &"
+ "intense"
+ )
+ )
+ )
+ (centerbox
+ :orientation "h"
+ :space-evenly false
+ :halign "fill"
+ (label
+ :halign "start"
+ :class "osettings-text"
+ :text "Enable blur"
+ )
+ (box)
+ (checkboxhyprctl
+ :value "${hyprjson.blur}"
+ :changevalue "decoration:blur"
+ )
+ )
+ (revealer
+ :reveal "${matches('appearance looks customization blur size blur strength',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-text"
+ :text "Blur size"
+ )
+ (scale
+ :class "osettings-slider"
+ :value "${hyprjson.blur_size}"
+ :tooltip "Blur size: ${hyprjson.blur_size}"
+ :onchange "hyprctl keyword decoration:blur_size {} && scripts/hyprsettings tickle"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('appearance looks customization blur passes blur strength',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-text"
+ :text "Blur passes"
+ )
+ (scale
+ :class "osettings-slider"
+ :value "${hyprjson.blur_passes * 10}"
+ :tooltip "Blur passes: ${hyprjson.blur_passes}"
+ :onchange "hyprctl keyword decoration:blur_passes $(({} / 10)) && scripts/hyprsettings tickle"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('appearance looks customization blur xray',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (centerbox
+ :orientation "h"
+ :space-evenly false
+ :halign "fill"
+ (label
+ :halign "start"
+ :class "osettings-text"
+ :text "Blur xray"
+ )
+ (box)
+ (checkboxhyprctl
+ :value "${hyprjson.blur_xray}"
+ :changevalue "decoration:blur_xray"
+ )
+ )
+ )
+ )
+ )
+ )
+ ; Gaps and borders
+ (revealer
+ :reveal "${matches('appearance looks customization gaps gaps_in inner gaps: inner gaps_out outer gaps: outer space border_size border size border thickness',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (centerbox
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :halign "start"
+ :class "osettings-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-section"
+ :text "Gaps/Borders"
+ )
+ )
+ (box)
+ (box
+ :orientation "h" :space-evenly false
+ :halign "end" :spacing 4
+ :style "margin-left: 9px;"
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag"
+ :onclick "hyprctl keyword general:gaps_in 0 && \
+ hyprctl keyword general:gaps_out 0 && \
+ hyprctl keyword general:border_size 0 && \
+ hyprctl keyword decoration:rounding 0 && \
+ hyprctl keyword monitor eDP-1,addreserved,69,0,0,0 && \
+ eww update compact=true && \
+ scripts/hyprsettings tickle &"
+ "none"
+ )
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag"
+ :onclick "hyprctl keyword general:gaps_in 0 && \
+ hyprctl keyword general:gaps_out 0 && \
+ hyprctl keyword general:border_size 1 && \
+ hyprctl keyword decoration:rounding 0 && \
+ hyprctl keyword monitor eDP-1,addreserved,69,0,0,0 && \
+ eww update compact=true && \
+ scripts/hyprsettings tickle &"
+ "borders"
+ )
+ (button :valign "center" :yalign 0.5
+ :class "osettings-tag"
+ :onclick "hyprctl keyword general:gaps_in 4 && \
+ hyprctl keyword general:gaps_out 8 && \
+ hyprctl keyword general:border_size 1 && \
+ hyprctl keyword decoration:rounding 17 && \
+ hyprctl keyword monitor eDP-1,addreserved,61,0,0,0 && \
+ eww update compact=false && \
+ scripts/hyprsettings tickle &"
+ "comfy"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('appearance looks customization gaps_in inner gaps: inner space',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-text"
+ :text "Gaps: Inner"
+ )
+ (scale
+ :class "osettings-slider"
+ :value "${hyprjson.gaps_in}"
+ :tooltip "Inner gaps: ${hyprjson.gaps_in}"
+ :onchange "hyprctl keyword general:gaps_in {} && scripts/hyprsettings tickle"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('appearance looks customization gaps_out outer gaps: outer space',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-text"
+ :text "Gaps: Outer"
+ )
+ (scale
+ :class "osettings-slider"
+ :value "${hyprjson.gaps_out}"
+ :tooltip "Outer gaps: ${hyprjson.gaps_out}"
+ :onchange "hyprctl keyword general:gaps_out {} && scripts/hyprsettings tickle"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('appearance looks customization border_size border size border thickness',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-text"
+ :text "Border size"
+ )
+ (scale
+ :class "osettings-slider"
+ :value "${hyprjson.border_size}"
+ :tooltip "Border size: ${hyprjson.border_size}"
+ :onchange "hyprctl keyword general:border_size {} && scripts/hyprsettings tickle"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('appearance looks customization rounding corner',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-text"
+ :text "Rounding"
+ )
+ (scale
+ :class "osettings-slider"
+ :value "${hyprjson.rounding}"
+ :tooltip "Border size: ${hyprjson.rounding}"
+ :onchange "hyprctl keyword decoration:rounding {} && scripts/hyprsettings tickle"
+ )
+ )
+ )
+ )
+ )
+ ; Hyperland
+ (revealer
+ :reveal "${matches(oquery, 'hyperland')}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :halign "start"
+ :class "osettings-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-section"
+ :text "Hyperland"
+ )
+ )
+ (revealer
+ :reveal "${matches(oquery, 'hyperland')}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (button
+ :halign "fill"
+ :wrap true
+ :class "osettings-btn osettings-btn-neutral"
+ :onclick "notify-send whyyyyyyy 😭"
+ "Check the spelling and try again"
+ )
+ )
+ )
+ )
+ )
+ ; Session control
+ (revealer
+ :reveal "${matches('session lock logout suspend log out shutdown shut down poweroff power off',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :halign "start"
+ :class "osettings-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-section"
+ :text "Session"
+ )
+ )
+ (revealer
+ :reveal "${matches('session lock',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :orientation "v"
+ :space-evenly false
+ (button
+ :halign "fill"
+ :wrap true
+ :class "osettings-btn osettings-btn-neutral"
+ :onclick "pidof gtklock || gtklock &"
+ "Lock"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('session suspend',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :orientation "v"
+ :space-evenly false
+ (button
+ :halign "fill"
+ :wrap true
+ :class "osettings-btn osettings-btn-neutral"
+ :onclick "systemctl suspend &"
+ "Suspend"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('session logout log out',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :orientation "v"
+ :space-evenly false
+ (button
+ :halign "fill"
+ :wrap true
+ :class "osettings-btn osettings-btn-destructive"
+ :onclick "pkill Hyprland &"
+ "Logout"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('session shutdown shut down poweroff power off',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :orientation "v"
+ :space-evenly false
+ (button
+ :halign "fill"
+ :wrap true
+ :class "osettings-btn osettings-btn-destructive"
+ :onclick "systemctl poweroff &"
+ "Shutdown"
+ )
+ )
+ )
+ )
+ )
+ ; Hyprland
+ (revealer
+ :reveal "${matches('hyprland options open the wiki guide help social hypr development discord reload config configuration',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :halign "start"
+ :class "osettings-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-section"
+ :text "Hyprland"
+ )
+ )
+ (revealer
+ :reveal "${matches('hyprland options reload config configuration',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (button
+ :halign "fill"
+ :wrap true
+ :class "osettings-btn osettings-btn-neutral"
+ :onclick "cp ~/.config/hypr/hyprland.conf temporary_config.conf && cp temporary_config.conf ~/.config/hypr/hyprland.conf && rm temporary_config.conf &"
+ "Reload config"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('hyprland open the wiki guide help',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (button
+ :halign "fill"
+ :wrap true
+ :class "osettings-btn osettings-btn-informative"
+ :onclick "scripts/toggle-osettings.sh && xdg-open https://wiki.hyprland.org &"
+ "Open the wiki"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('hyprland help social hypr development discord',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (button
+ :halign "fill"
+ :wrap true
+ :class "osettings-btn osettings-btn-informative"
+ :onclick "scripts/toggle-osettings.sh && xdg-open https://discord.com/invite/hQ9XvMUjjr &"
+ "Hypr Development Discord"
+ )
+ )
+ )
+ )
+ )
+ ; Calendar
+ (revealer
+ :reveal "${'calendar' == oquery}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :orientation "v"
+ :space-evenly false
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :halign "start"
+ :class "osettings-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-section"
+ :text "Calendar"
+ )
+ )
+ (calendar)
+ )
+ )
+ ; Super secret settings
+ (revealer
+ :reveal "${oquery == '!secret' || oquery == '!sekret'}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :orientation "v"
+ :space-evenly false
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :halign "start"
+ :class "osettings-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "osettings-section"
+ :text "Super secret settings"
+ )
+ )
+ (button
+ :halign "fill"
+ :wrap true
+ :class "osettings-btn osettings-btn-informative"
+ :onclick "scripts/supersecretsettings/culture &"
+ "Activate culture mode"
+ )
+ (button
+ :halign "fill"
+ :wrap true
+ :class "osettings-btn osettings-btn-informative"
+ :onclick "scripts/supersecretsettings/doreload &"
+ "Reset these stuff"
+ )
+ (button
+ :halign "fill"
+ :wrap true
+ :class "osettings-btn osettings-btn-destructive"
+ :onclick "hyprctl keyword bind ,c,exec,wtype k"
+ "Bekome a KDE developer"
+ )
+ (button
+ :halign "fill"
+ :wrap true
+ :class "osettings-btn osettings-btn-destructive"
+ :onclick "hyprctl keyword unbind ,c"
+ "Un-become a KDE developer"
+ )
+ )
+ )
+ ; Waifu
+ ; (revealer
+ ; :reveal "${oquery == 'uwu' || oquery == 'sex'}"
+ ; :transition "slidedown"
+ ; :duration "200ms"
+ ; (box
+ ; :space-evenly false
+ ; :orientation "v"
+ ; (input
+ ; :wrap true
+ ; :class "osettings-btn osettings-btn-neutral"
+ ; :style "padding: 0 20px;"
+ ; :onaccept "python3 scripts/waifupics.py &"
+ ; "segs"
+ ; )
+ ; (box
+ ; :valign "center"
+ ; :width 400
+ ; :height 400
+ ; :class "osettings-waifu"
+ ; :style "
+ ; background-image: url('eww_covers/waifu');
+ ; "
+ ; )
+ ; )
+ ; )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+
+(defwindow osettings
+ :wm-ignore true
+ :monitor 0
+ :focusable true
+ :exclusive true
+ :namespace "osettings"
+ :geometry (geometry
+ :x "0px"
+ :y "61px"
+ :height "1019px"
+ :anchor "top left"
+ )
+ (osettings)
+)
+
+(defwidget osettings-button []
+ (eventbox
+ :class "osettings-toggle-button-${rev_ostg}"
+ :onmiddleclick "playerctl play-pause"
+ :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
+ :onclick "scripts/toggle-osettings.sh &"
+ :onscroll "echo $(echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%) && scripts/volume osd"
+ (box
+ :class "module-button-pad-left"
+ (image
+ :path "images/svg/settings.svg"
+ :image-height 33
+ :image-width 33
+ )
+ )
+ )
+)
+
diff --git a/early/.config/eww/windows/overview.yuck b/early/.config/eww/windows/overview.yuck
new file mode 100755
index 000000000..092decd2d
--- /dev/null
+++ b/early/.config/eww/windows/overview.yuck
@@ -0,0 +1,246 @@
+(defwidget workspacebox [wspace]
+ (box ; Note: height 100px width 356px
+ :class "overview-ws overview-ws-${wspace[0].workspace.id == activews}"
+ (box
+ :space-evenly false
+ :orientation "h"
+ :style "
+ min-width: ${RES_WIDTH * OVERVIEW_SCALE}px;
+ min-height: ${RES_HEIGHT * OVERVIEW_SCALE}px;
+ "
+ (for ws-window in wspace
+ (box
+ :class "${ws-window.class == 'workspace' ? '' : 'overview-ws-window'}"
+ :style "
+ ${ws-window.address == selected ? 'border: 1px solid #FFFFFF' : ''};
+ ${ws-window.address == '_none' ? 'border: none' : ''};
+ margin-left: ${ws-window.at[0] * OVERVIEW_SCALE}px;
+ margin-top: ${ws-window.at[1] * OVERVIEW_SCALE}px;
+ margin-right: -${(ws-window.at[0] + ws-window.size[0]) * OVERVIEW_SCALE}px;
+ margin-bottom: ${RES_HEIGHT * OVERVIEW_SCALE - ((ws-window.at[1] + ws-window.size[1]) * OVERVIEW_SCALE)};
+ "
+ (eventbox
+ :onrightclick "scripts/selectwindow ${ws-window.address} '${EWW_CMD}' ${ws-window.workspace.id}"
+ :onmiddleclick "hyprctl dispatch closewindow address:${ws-window.address}"
+ :onclick "scripts/focuswindow ${ws-window.address} ${ws-window.workspace.id} && scripts/toggle-overview.sh --close &"
+ :onhover "${ws-window.class == 'workspace' ? '' : (EWW_CMD + ' update overview_hover_name=\'' + ws-window + '\'')}"
+ (box
+ :class "overview-background"
+ ; Uncomment below to enable thumbnail previews (VERY SLOW)
+ ; :style "
+ ; background-image: url('scripts/cache/thumbnails/${ws-window.address }.png');
+ ; "
+ (image
+ :class "overview-icon"
+ :path {ws-window.icon}
+ ; :image-width {round(ws-window.size[0] > ws-window.size[1] ? (ws-window.size[1] * 45 / 100 * OVERVIEW_SCALE) : (ws-window.size[0] * 45 / 100 * OVERVIEW_SCALE))}
+ ; :image-height {round(ws-window.size[0] > ws-window.size[1] ? (ws-window.size[1] * 45 / 100 * OVERVIEW_SCALE) : (ws-window.size[0] * 45 / 100 * OVERVIEW_SCALE))}
+ :image-width {round(ws-window.size[0] * OVERVIEW_SCALE * 45 / 100, 0)}
+ :image-height {round(ws-window.size[1] * OVERVIEW_SCALE * 45 / 100, 0)}
+
+ ; :style "
+ ; background-size: ${ws-window.size[0] > ws-window.size[1] ? 'auto 45%' : '45% auto'};
+ ; background-image: url('${ws-window.icon}')
+ ; ;
+ ; "
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwidget overview []
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "thewholething"
+ (eventbox
+ :onclick "scripts/toggle-overview.sh --close &"
+ :onmiddleclick "scripts/toggle-overview.sh --close &"
+ :onrightclick "scripts/toggle-overview.sh --close &"
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ )
+ ; Search bar
+ (overlay
+ (box
+ :class "overview-search-area"
+ :space-evenly false
+ :halign "center"
+ :orientation "v"
+ (input
+ :class "overview-search-box"
+ :onchange "${EWW_CMD} update overview_query=\"{}\" && ${EWW_CMD} update overview_results=\"$(scripts/appsearch '{}')\" &"
+ :onaccept "scripts/launchapp '${overview_results == '[]' ? {} : overview_results[0].exec}' &"
+ :style "
+ border-radius: ${overview_query == '' ? 99 : 20}px;
+ min-width: ${overview_query == '' ? 130 : 445}px;
+ "
+ )
+ (revealer
+ :reveal false
+ :transition "slidedown"
+ (label
+ :text {ICON_GET} ; Dummy to keep listeners active
+ )
+ )
+ )
+ (box
+ :class "overview-search-typetosearch-pad"
+ :space-evenly false
+ :halign "center"
+ :orientation "v"
+ (revealer
+ :reveal "${overview_query == ''}"
+ :duration "100ms"
+ (label
+ :class "overview-search-typetosearch-text"
+ :xalign 0
+ :text "Type to search"
+ )
+ )
+ )
+ )
+ ; The overview
+ (eventbox
+ :onhoverlost `eww update overview_hover_name='{"class":"LMB: Focus | MMB: Close | RMB: Select/Move","title":"Activities Overview","workspace":{"id":5,"name":"5"},"icon": "/usr/share/icons/breeze-dark/actions/16/window.svg"}' &`
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ (revealer
+ :reveal "${overview_query == ''}"
+ :transition "slidedown"
+ :duration "${overview_query == '' ? '200ms cubic-bezier(0.05, 0.7, 0.1, 1)' : '100ms cubic-bezier(0.3, 0, 0.8, 0.15)'}"
+ :style "
+ transition: ${overview_query == '' ? '200ms cubic-bezier(0.05, 0.7, 0.1, 1)' : '100ms cubic-bezier(0.3, 0, 0.8, 0.15)'};
+ "
+ (revealer
+ :reveal "${overview_query == ''}"
+ :transition "crossfade"
+ :duration "${overview_query == '' ? '200ms cubic-bezier(0.05, 0.7, 0.1, 1)' : '100ms cubic-bezier(0.3, 0, 0.8, 0.15)'}"
+ :style "
+ transition: ${overview_query == '' ? '200ms cubic-bezier(0.05, 0.7, 0.1, 1)' : '100ms cubic-bezier(0.3, 0, 0.8, 0.15)'};
+ "
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "overview-window"
+ ; :space-evenly false
+ ; (label :text "${wsjsona}")
+ ; (label :text "${selected}")
+ (centerbox
+ :class "overview-window-title"
+ (label :halign "start" :style "margin: 5px;" :text "${overview_hover_name.class}")
+ (box
+ :space-evenly false
+ :orientation "h"
+ (image
+ :class "overview-topbar-icon overview-icon"
+ :path {overview_hover_name.icon}
+ :image-height 30
+ :image-width 30
+ ; :style "
+ ; background-image: url('${overview_hover_name.icon}');
+ ; "
+ )
+ (label :text "${overview_hover_name.title}")
+ )
+ (button
+ :halign "end"
+ :class "overview-topbar-button"
+ :onclick "scripts/toggle-overview.sh --close"
+ (label :text "")
+ )
+ )
+ (box
+ :orientation "h"
+ (for wspace in wsjsona
+ (workspacebox
+ :wspace {wspace}
+ )
+ )
+ )
+ (box
+ :orientation "h"
+ (for wspace in wsjsonb
+ (workspacebox
+ :wspace {wspace}
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ ; Search Results
+ (box
+ :class "overview-search-area"
+ :space-evenly false
+ :halign "center"
+ :orientation "v"
+ (revealer
+ :reveal "${overview_query != ''}"
+ :transition "slidedown"
+ :duration "${overview_query == '' ? '100ms cubic-bezier(0.3, 0, 0.8, 0.15)' : '200ms cubic-bezier(0.05, 0.7, 0.1, 1)'}"
+ :style "
+ transition: ${overview_query == '' ? '100ms cubic-bezier(0.3, 0, 0.8, 0.15)' : '200ms cubic-bezier(0.05, 0.7, 0.1, 1)'};
+ "
+ (revealer
+ :reveal "${overview_query != ''}"
+ :transition "crossfade"
+ :duration "${overview_query == '' ? '100ms cubic-bezier(0.3, 0, 0.8, 0.15)' : '200ms cubic-bezier(0.05, 0.7, 0.1, 1)'}"
+ :style "
+ transition: ${overview_query == '' ? '100ms cubic-bezier(0.3, 0, 0.8, 0.15)' : '200ms cubic-bezier(0.05, 0.7, 0.1, 1)'};
+ "
+ (scroll
+ :width 502
+ :height 547
+ (box
+ :halign "center"
+ :orientation "v"
+ :class "overview-results"
+ :spacing 2
+ :space-evenly false
+ (for entry in overview_results
+ (overlay
+ :orientation "h"
+ :space-evenly false
+ (input
+ :value "${entry.name}"
+ :class "overview-search-result"
+ :onaccept "scripts/launchapp '${entry.exec}' &"
+ )
+ (image
+ :halign "start"
+ :class "overview-search-result-icon"
+ :path {(entry.icon != '_letter' && entry.icon != '') ? entry.icon : 'images/svg/dark/app.svg'}
+ :image-width 33
+ :image-height 33
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow overview
+ :stacking "overlay"
+ :focusable true
+ :wm-ignore true
+ :monitor 0
+ :geometry (geometry
+ ; :height 1080
+ ; :width 1920
+ :y "153px"
+ :anchor "top center"
+ ; :y "0px"
+ ; :anchor "center center"
+ )
+ ; (testing)
+ (overview)
+)
+
diff --git a/early/.config/eww/windows/supercontext.yuck b/early/.config/eww/windows/supercontext.yuck
new file mode 100755
index 000000000..8adfb5ffc
--- /dev/null
+++ b/early/.config/eww/windows/supercontext.yuck
@@ -0,0 +1,86 @@
+; (defvar dash_curve_in "transition: 150ms cubic-bezier(0.05, 0.9, 0.1, 1.0);")
+; (defvar dash_curve_out "transition: 80ms cubic-bezier(0.3, 0, 0.8, 0.15);")
+
+(defwidget supercontext_widget []
+ (box :width RES_WIDTH :height RES_HEIGHT
+ (overlay
+ ; Fullscreen box
+ (box
+ :width RES_WIDTH :height RES_HEIGHT
+ (eventbox
+ :onclick "scripts/toggle-supercontext.sh --close &"
+ :onmiddleclick "scripts/toggle-supercontext.sh --close &"
+ :onrightclick "scripts/toggle-supercontext.sh --close &"
+ )
+ )
+ (button ; Brutally kill button
+ :class "supercontext-button"
+ :tooltip "Brutally kill the active window"
+ :style "
+ margin-left: ${rev_supercontext ? (supercontext_pos_x + SUPERCONTEXT_OFFSET_X[0] - SUPERCONTEXT_BUTTON_RADIUS) : (supercontext_pos_x - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-right: ${rev_supercontext ? (RES_WIDTH - supercontext_pos_x - SUPERCONTEXT_OFFSET_X[0] - SUPERCONTEXT_BUTTON_RADIUS) : (RES_WIDTH - supercontext_pos_x - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-top: ${rev_supercontext ? (supercontext_pos_y + SUPERCONTEXT_OFFSET_Y[0] - SUPERCONTEXT_BUTTON_RADIUS) : (supercontext_pos_y - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-bottom: ${rev_supercontext ? (RES_HEIGHT - supercontext_pos_y - SUPERCONTEXT_OFFSET_Y[0] - SUPERCONTEXT_BUTTON_RADIUS) : (RES_HEIGHT - supercontext_pos_y - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ "
+ :onclick "scripts/toggle-supercontext.sh --close && pkill $(hyprctl activewindow -j | gojq -r '.class') &"
+ (label :text "Dangerous")
+ )
+ (box ; Workspace swap button
+ :style "
+ margin-left: ${rev_supercontext ? (supercontext_pos_x + SUPERCONTEXT_OFFSET_X[1] - SUPERCONTEXT_BUTTON_RADIUS) : (supercontext_pos_x - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-right: ${rev_supercontext ? (RES_WIDTH - supercontext_pos_x - SUPERCONTEXT_OFFSET_X[1] - SUPERCONTEXT_BUTTON_RADIUS) : (RES_WIDTH - supercontext_pos_x - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-top: ${rev_supercontext ? (supercontext_pos_y + SUPERCONTEXT_OFFSET_Y[1] - SUPERCONTEXT_BUTTON_RADIUS) : (supercontext_pos_y - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-bottom: ${rev_supercontext ? (RES_HEIGHT - supercontext_pos_y - SUPERCONTEXT_OFFSET_Y[1] - SUPERCONTEXT_BUTTON_RADIUS) : (RES_HEIGHT - supercontext_pos_y - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ "
+ (eventbox
+ :class "supercontext-button-number-child"
+ :tooltip "Swap workspace windows with..."
+ :onscroll "eww update ws_to_swap=$(( ${ws_to_swap == 0 ? activews : ws_to_swap} + $(echo {} | sed -e 's/down/-1/g' -e 's/up/+1/g') ))"
+ :onclick "scripts/toggle-supercontext.sh --close && scripts/swapws ${activews} ${ws_to_swap} &"
+ (label :text {ws_to_swap == 0 ? '' : ws_to_swap})
+ )
+ )
+ (button
+ :class "supercontext-button"
+ :style "
+ margin-left: ${rev_supercontext ? (supercontext_pos_x + SUPERCONTEXT_OFFSET_X[2] - SUPERCONTEXT_BUTTON_RADIUS) : (supercontext_pos_x - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-right: ${rev_supercontext ? (RES_WIDTH - supercontext_pos_x - SUPERCONTEXT_OFFSET_X[2] - SUPERCONTEXT_BUTTON_RADIUS) : (RES_WIDTH - supercontext_pos_x - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-top: ${rev_supercontext ? (supercontext_pos_y + SUPERCONTEXT_OFFSET_Y[2] - SUPERCONTEXT_BUTTON_RADIUS) : (supercontext_pos_y - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-bottom: ${rev_supercontext ? (RES_HEIGHT - supercontext_pos_y - SUPERCONTEXT_OFFSET_Y[2] - SUPERCONTEXT_BUTTON_RADIUS) : (RES_HEIGHT - supercontext_pos_y - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ "
+ )
+ (button
+ :class "supercontext-button"
+ :style "
+ margin-left: ${rev_supercontext ? (supercontext_pos_x + SUPERCONTEXT_OFFSET_X[3] - SUPERCONTEXT_BUTTON_RADIUS) : (supercontext_pos_x - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-right: ${rev_supercontext ? (RES_WIDTH - supercontext_pos_x - SUPERCONTEXT_OFFSET_X[3] - SUPERCONTEXT_BUTTON_RADIUS) : (RES_WIDTH - supercontext_pos_x - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-top: ${rev_supercontext ? (supercontext_pos_y + SUPERCONTEXT_OFFSET_Y[3] - SUPERCONTEXT_BUTTON_RADIUS) : (supercontext_pos_y - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-bottom: ${rev_supercontext ? (RES_HEIGHT - supercontext_pos_y - SUPERCONTEXT_OFFSET_Y[3] - SUPERCONTEXT_BUTTON_RADIUS) : (RES_HEIGHT - supercontext_pos_y - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ "
+ )
+ (button
+ :class "supercontext-button"
+ :style "
+ margin-left: ${rev_supercontext ? (supercontext_pos_x + SUPERCONTEXT_OFFSET_X[4] - SUPERCONTEXT_BUTTON_RADIUS) : (supercontext_pos_x - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-right: ${rev_supercontext ? (RES_WIDTH - supercontext_pos_x - SUPERCONTEXT_OFFSET_X[4] - SUPERCONTEXT_BUTTON_RADIUS) : (RES_WIDTH - supercontext_pos_x - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-top: ${rev_supercontext ? (supercontext_pos_y + SUPERCONTEXT_OFFSET_Y[4] - SUPERCONTEXT_BUTTON_RADIUS) : (supercontext_pos_y - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ margin-bottom: ${rev_supercontext ? (RES_HEIGHT - supercontext_pos_y - SUPERCONTEXT_OFFSET_Y[4] - SUPERCONTEXT_BUTTON_RADIUS) : (RES_HEIGHT - supercontext_pos_y - SUPERCONTEXT_BUTTON_RADIUS)}px;
+ "
+ )
+ )
+ )
+)
+
+(defwindow supercontext
+ :focusable true
+ :geometry (geometry
+ :x 0
+ :y 0
+ :width "100%"
+ :height "100%"
+ :anchor "center center"
+ )
+ :monitor 0
+ (supercontext_widget)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/system-menu.yuck b/early/.config/eww/windows/system-menu.yuck
new file mode 100755
index 000000000..575e29f30
--- /dev/null
+++ b/early/.config/eww/windows/system-menu.yuck
@@ -0,0 +1,187 @@
+(defwidget system-menu []
+ (eventbox
+ :onhoverlost "${EWW_CMD} close system-menu"
+ (box
+ :class "system-menu-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "module"
+ :space-evenly false
+ :spacing 5
+ :halign "end"
+ (syscpu)
+ (sysmem)
+ (sysbatt)
+ (settingscog)
+ )
+ (box
+ :class "top-row"
+ :space-evenly false
+ (label :class "time" :text "${time.hour}:${time.minute}")
+ (box
+ :class "date-box"
+ :space-evenly false
+ (label :class "date" :text "${time.day},")
+ (label :class "date" :text "${time.date}")
+ )
+ )
+
+ (box
+ :class "system-row"
+ :space-evenly false
+ (box
+ :class "wifi-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element icon"
+ :space-evenly false
+ (button
+ :class "wifi-button"
+ :onclick "scripts/net toggle"
+ {net.icon}
+ )
+ (label :class "separator" :text "|")
+ (button
+ :class "wifi-arrow-btn"
+ :onclick "eww close system-menu && nm-connection-editor &"
+ ""
+ )
+ )
+ (label :text {net.essid} :xalign 0.5 :limit-width 15)
+ )
+
+ (box
+ :class "bluetooth-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element icon"
+ :space-evenly false
+ (button
+ :class "bluetooth-button"
+ :onclick "scripts/bluetooth toggle"
+ {bluetooth.icon}
+ )
+ (label :class "separator" :text "|")
+ (button
+ :class "bluetooth-arrow-btn"
+ :onclick "eww close system-menu && blueberry"
+ ""
+ )
+ )
+ (label
+ :text {bluetooth.text}
+ :xalign 0.5
+ :tooltip "${bluetooth.text} ${bluetooth.batt_icon}"
+ :limit-width 15
+ )
+ )
+
+ (box
+ :class "airplane-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element"
+ (button
+ :class "airplane-button"
+ :onclick "scripts/airplane toggle"
+ airplane
+ )
+ )
+ (label :text "Airplane Mode" :xalign 0.5 :limit-width 16)
+ )
+
+ (box
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element"
+ (button
+ :halign "end"
+ ; :onclick "wlogout -p layer-shell &"
+ :onclick "wlogout"
+ ""
+ )
+ )
+ (label
+ :text "Power"
+ :xalign 0.5
+ :limit-width 16
+ )
+ )
+ )
+ (audiolevels)
+ (box
+ :class "system-info-box"
+
+ ; cpu
+ (box
+ :class "sys-box"
+ :space-evenly false
+ :halign "start"
+ (circular-progress
+ :value "${EWW_CPU.avg}"
+ :class "sys-cpu"
+ :thickness 3
+ (label
+ :text ""
+ :class "sys-icon-cpu icon"))
+ (box
+ :orientation "v"
+ :vexpand false
+ (label
+ :text "CPU"
+ :halign "start"
+ :class "sys-text-cpu")
+ (label
+ :text "${round(EWW_CPU.avg,2)}%"
+ :halign "start"
+ :class "sys-text-sub")
+ (label
+ :text "${EWW_CPU.cores[0].freq} MHz"
+ :halign "start"
+ :class "sys-text-sub")))
+
+ ; memory
+ (box
+ :class "sys-box"
+ :space-evenly false
+ :halign "end"
+ (circular-progress
+ :value {memory.percentage}
+ :class "sys-mem"
+ :thickness 3
+ (label
+ :text ""
+ :class "sys-icon-mem icon"
+ )
+ )
+ (box
+ :orientation "v"
+ (label :text "Memory" :halign "start" :class "sys-text-mem")
+ (label :text "${memory.used} / ${memory.total}" :halign "start" :class "sys-text-sub")
+ (label :text "Swap ${memory.swapused} / ${memory.swaptotal}" :halign "start" :class "sys-text-sub")
+ )
+ )
+ )
+ )
+ )
+)
+
+;; windows
+(defwindow system-menu
+ :wm-ignore true
+ :monitor 0
+ ; :focusable true
+ :geometry (geometry
+ :x "0"
+ :y "0"
+ :width "0%"
+ :height "0%"
+ :anchor "right top")
+ (system-menu)
+)
+
diff --git a/early/.config/eww/windows/themer.yuck b/early/.config/eww/windows/themer.yuck
new file mode 100755
index 000000000..e76922ae8
--- /dev/null
+++ b/early/.config/eww/windows/themer.yuck
@@ -0,0 +1,186 @@
+(defwidget themer_widget []
+ (box
+ :orientation "v"
+ :space-evenly false
+ :halign "fill"
+ :valign "fill"
+ (eventbox
+ :onclick "scripts/toggle-themer.sh --close &"
+ (box
+ :style "
+ ${rev_themer ? '' : 'margin-top: -600px;'}
+ ${anim_open_themer ? 'transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ min-height: 1px;
+ "
+ )
+ )
+ (eventbox
+ ; :onhoverlost "${EWW_CMD} close themer && ${EWW_CMD} update themer_open=false"
+ (box
+ :space-evenly false
+ :orientation "h"
+ :class "themer-menu-box"
+ :style "
+ ${rev_themer ? '' : 'margin-top: -600px;'}
+ ${anim_open_themer ? 'transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ "
+ (box
+ :space-evenly false :orientation "v"
+ (box
+ :style "padding-left: 10px; padding-right: 10px; padding-top: 10px; font-size: 15pt;"
+ :valign "start"
+ :space-evenly false
+ :spacing 4
+ (button
+ :class "themer-action-button themer-get"
+ :onclick "scripts/toggle-themer.sh --close && scripts/colormanage get &"
+ ""
+ )
+ (button
+ :class "themer-action-button themer-restore"
+ :onclick "scripts/toggle-themer.sh --close && scripts/colormanage default &"
+ ""
+ )
+ (button
+ :class "themer-action-button"
+ :onclick "scripts/toggle-themer.sh --close && scripts/togglelight light &"
+ :tooltip "Light mode (for generating new themes)"
+ ""
+ )
+ (button
+ :class "themer-action-button"
+ :onclick "scripts/toggle-themer.sh --close && scripts/togglelight dark &"
+ :tooltip "Dark mode (for generating new themes)"
+ ""
+ )
+ )
+ (label
+ :class "themer-title"
+ :text "Color profiles"
+ :xalign 0
+ )
+ (box
+ :space-evenly false
+ :orientation "h"
+ :halign "center"
+ (label
+ :hexpand true
+ :class "themer-prompt"
+ :text "Save "
+ )
+ (input
+ :class "themer-input"
+ :onaccept "scripts/colormanage save {}"
+ )
+ )
+ (box
+ :halign "center"
+ :space-evenly false
+ :orientation "h"
+ (label
+ :hexpand true
+ :class "themer-prompt"
+ :text "Load "
+ )
+ (input
+ :class "themer-input"
+ :onaccept "scripts/colormanage load {}"
+ )
+ )
+ )
+ ; colors
+ (box
+ :space-evenly false :orientation "v"
+ (label
+ :class "themer-title"
+ :text "Pywal Colors"
+ :xalign 0
+ )
+ (box
+ :spacing 3
+ :orientation "h"
+ :style "padding: 7px;"
+ (box :class "themer-color-preview preview-0" )
+ (box :class "themer-color-preview preview-1" )
+ (box :class "themer-color-preview preview-2" )
+ (box :class "themer-color-preview preview-3" )
+ (box :class "themer-color-preview preview-4" )
+ (box :class "themer-color-preview preview-5" )
+ (box :class "themer-color-preview preview-6" )
+ (box :class "themer-color-preview preview-7" )
+ )
+ (label
+ :class "themer-title"
+ :text "Primary, secondary"
+ :xalign 0
+ )
+ (box
+ :spacing 3
+ :orientation "h"
+ :style "padding: 7px;"
+ (box :class "themer-color-preview preview-primary" )
+ (box :class "themer-color-preview preview-onPrimary" )
+ (box :class "themer-color-preview preview-primaryContainer" )
+ (box :class "themer-color-preview preview-onPrimaryContainer" )
+ (box :class "themer-color-preview preview-secondary" )
+ (box :class "themer-color-preview preview-onSecondary" )
+ (box :class "themer-color-preview preview-secondaryContainer" )
+ (box :class "themer-color-preview preview-onSecondaryContainer" )
+ )
+ (label
+ :class "themer-title"
+ :text "Tertiary, bg, surface"
+ :xalign 0
+ )
+ (box
+ :spacing 3
+ :orientation "h"
+ :style "padding: 7px;"
+ (box :class "themer-color-preview preview-tertiary" )
+ (box :class "themer-color-preview preview-onTertiary" )
+ (box :class "themer-color-preview preview-tertiaryContainer" )
+ (box :class "themer-color-preview preview-onTertiaryContainer" )
+ (box :class "themer-color-preview preview-background" )
+ (box :class "themer-color-preview preview-onBackground" )
+ (box :class "themer-color-preview preview-surface" )
+ (box :class "themer-color-preview preview-onSurface" )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow themer
+ :wm-ignore true
+ :stacking "overlay"
+ :monitor 0
+ :geometry (geometry
+ :x "400px"
+ :y "61px"
+ :anchor "top right"
+ ; :width "0px"
+ ; :height "0px"
+ )
+ :focusable true
+ (themer_widget)
+)
+
+(defwidget themer []
+ (eventbox
+ :onscroll "hyprctl dispatch splitratio $(echo {} | sed -e \"s/up/-0.1/g\" -e \"s/down/+0.1/g\")"
+ :onhover "${EWW_CMD} update themer_hover=true"
+ :onhoverlost "${EWW_CMD} update themer_hover=false"
+ :class "osettings-toggle-button-${rev_themer}"
+ :onclick "scripts/toggle-themer.sh &"
+ (box
+ :class "module-button-pad-center"
+ :style "min-width: 53px;"
+ (image
+ :path "images/svg/beatmappacks.svg"
+ :image-width 33
+ :image-height 33
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/winactions.yuck b/early/.config/eww/windows/winactions.yuck
new file mode 100755
index 000000000..004990051
--- /dev/null
+++ b/early/.config/eww/windows/winactions.yuck
@@ -0,0 +1,205 @@
+(defwidget winactions_widget []
+ (box
+ :space-evenly false
+ :orientation "v"
+ :style "
+ ${anim_open_winactions ? 'transition: 150ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 100ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ ${rev_winactions ? '' : 'margin-bottom: -700px;'}
+ "
+ (eventbox
+ :onclick "scripts/toggle-winactions.sh --close &"
+ :onmiddleclick "scripts/toggle-winactions.sh --close &"
+ :onrightclick "scripts/toggle-winactions.sh --close &"
+ (box
+ :class "box-that-is-there" :style "min-height: 1px;"
+ )
+ )
+ ; Media controls
+ (revealer
+ :reveal {mname_win.title != ''}
+ :transition "slideup"
+ :duration "200ms"
+ (box
+ :class "winwin winactions-media-pad"
+ :space-evenly false :orientation "v"
+ :style "margin-bottom: 0px;"
+ :spacing 29
+ (box
+ :halign "start" :space-evenly false :orientation "h" :spacing 8
+ (label :class "win-segoeicon" :text "")
+ (label :class "win-segoeicon" :text "Media")
+ )
+ (box
+ :space-evenly false :orientation "h" :spacing 8
+ :width 346
+ (box
+ :space-evenly false :orientation "v" :hexpand true
+ (label :xalign 0 :limit-width 36 :class "winactions-media-title" :text {mname_win.title})
+ (label :xalign 0 :limit-width 36 :class "winactions-media-artist" :text {mname_win.artist})
+ )
+ (box
+ :halign "end"
+ :class "winactions-media-cover"
+ :style "background-image: url('${mcover.image}')"
+ )
+ )
+ (box
+ :halign "center"
+ :class "music-button-box-bar"
+ :spacing 42
+ (button
+ :class "winactions-media-button win-segoeicon"
+ :onclick "playerctl previous"
+ ""
+ )
+ (button
+ :class "winactions-media-button win-segoeicon"
+ :onclick "playerctl play-pause"
+ "${music.status != '' ? (music.status == '' ? '' : '') : ''}"
+ )
+ (button
+ :class "winactions-media-button win-segoeicon"
+ :onclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
+ ""
+ )
+ )
+ )
+ )
+ (box
+ :class "winwin-top"
+ :space-evenly false
+ :orientation "v"
+ ; Row 1: Network, Bluetooth, Airplane
+ (box
+ :class "winactions-togglerow"
+ :space-evenly false
+ (box :orientation "v" :space-evenly false
+ (box
+ :class "winactions-toggle winactions-toggle-${net.level != '0' && net.essid != 'lo'}"
+ :orientation "h"
+ (button
+ :onclick "scripts/net toggle"
+ :class "winactions-toggle-icon winactions-toggle-icon-left winwifi${net.level}${net.essid != 'lo' ? '-activated' : ''}"
+ )
+ (button
+ :onclick "gnome-control-center wifi &"
+ :class "winactions-toggle-icon winactions-toggle-arrow${(net.essid != 'lo') ? '-activated' : ''}"
+ )
+ )
+ (label :class "wintoggle-text" :text "${net.essid}")
+ )
+ (box :orientation "v" :space-evenly false
+ (box
+ :class "winactions-toggle winactions-toggle${bluetooth.text == 'Bluetooth off' ? '' : '-true'}"
+ :orientation "h"
+ (button
+ :onclick "scripts/bluetooth toggle &"
+ :class "winactions winactions-toggle-icon-left winbluetooth${bluetooth.text == 'Disconnected' ? '' : (bluetooth.text == 'Bluetooth off' ? '-false' : '-true')}"
+ )
+ (button
+ :onclick "blueberry &"
+ :class "winactions-toggle-icon-right winactions-toggle-arrow${bluetooth.text == 'Bluetooth off' ? '' : '-activated'}"
+ )
+ )
+ (label :class "wintoggle-text" :text "${bluetooth.text}")
+ )
+ (box :orientation "v" :space-evenly false
+ (box
+ :class "winactions-toggle winactions-toggle-center"
+ (button
+ :onclick "scripts/airplane toggle &"
+ :class "winactions-toggle-icon winactions-toggle-icon-center winactions-airplane"
+ )
+ )
+ (label :class "wintoggle-text" :text "Flight Mode")
+ )
+ )
+ ; Row 2: Night light
+ (box
+ :class "winactions-togglerow"
+ :space-evenly false
+ (box
+ :orientation "v" :space-evenly false
+ (box
+ :class "winactions-toggle winactions-toggle-center winactions-toggle-${hyprjson.nightlight}"
+ (button
+ :onclick "scripts/toggle-nightlight.sh &"
+ :class "winactions-toggle-icon winactions-toggle-icon-center winactions-nightlight${hyprjson.nightlight ? '-activated' : ''}"
+ )
+ )
+ (label :class "wintoggle-text" :text "Night Light")
+ )
+ )
+ (box :height 30)
+ ; Slider 1: brightness
+ (box
+ :space-evenly false
+ :orientation "h"
+ :class "winactions-sliderrow "
+ (box :class "winicon winbrightness winactions-element")
+ (scale
+ :value "${brightness.level}"
+ :onchange "light -S {}"
+ :class "winslider winslider-winactions"
+ )
+ )
+ ; Slider 1: Volume
+ (box
+ :space-evenly false
+ :orientation "h"
+ :class "winactions-sliderrow"
+ (button
+ :class "winicon winvol${volume.audio == 1 ? round(volume.percent / 33, 0) : 'mute'} winactions-element"
+ :onclick "scripts/volume mute SINK &"
+ )
+ (scale
+ :value "${volume.percent}"
+ :onchange "scripts/volume setvol SINK {}"
+ :class "winslider winslider-winactions"
+ )
+ )
+ )
+ (box
+ :class "winwin-bottom"
+ :space-evenly false
+ :orientation "v"
+ (centerbox
+ :space-evenly false
+ :orientation "h"
+ :class "winwin-bottom-pad"
+ (button
+ :class "winactions-bottom-button"
+ :halign "start"
+ :style "padding: 0 13px;"
+ :onclick "scripts/toggle-winactions.sh --close power &"
+ (box
+ :space-evenly false
+ :orientation "h"
+ (box :class "winicon winbat${round(battery.percentage / 10, 0)}")
+ (label :class "wintoggle winbartext" :text "${battery.percentage}%")
+ )
+ )
+ (box)
+ (box
+ (button
+ :halign "end"
+ :onclick "scripts/toggle-winactions.sh --close settings &"
+ :class "winactions-bottom-button wincog winicon"
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow winactions
+ :wm-ignore true
+ :monitor 0
+ :focusable true
+ :geometry (geometry
+ :x "0px"
+ :y "50px"
+ :anchor "bottom right"
+ )
+ (winactions_widget)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/winbsod.yuck b/early/.config/eww/windows/winbsod.yuck
new file mode 100755
index 000000000..37a9862b3
--- /dev/null
+++ b/early/.config/eww/windows/winbsod.yuck
@@ -0,0 +1,78 @@
+(defwidget winbsod_widget []
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "thewholething"
+ :height 1080
+ :width 1920
+ (box
+ :height 1080
+ :width 1920
+ :class "winbsod-background"
+ (box
+ :orientation "v"
+ :space-evenly false :spacing 10
+ :halign "start" :valign "start"
+ :style "
+ margin-left: 200px;
+ margin-top: 115px;
+ "
+ (label :xalign 0
+ :class "winbsod-text winbsod-face"
+ :text ":(" ;) <-- closing bracket so that the formatter wont mess up lmao
+ )
+ (label :xalign 0
+ :class "winbsod-text winbsod-desc"
+ :halign "start" :valign "start"
+ :text "Your PC ran into a problem and needs to restart. We're \\\njust collecting some error info, and then we'll restart for \\\nyou." ;) <-- closing bracket so that the formatter wont mess up lmao
+ )
+ (label :xalign 0
+ :class "winbsod-text winbsod-desc"
+ :style "margin-top: 35px;"
+ :text "69% complete"
+ )
+ (box
+ :orientation "h"
+ :space-evenly false :spacing 20
+ :style "margin-top: 35px;"
+ (image
+ :path "images/pictures/qr_aur.png"
+ :image-width 115
+ :image-height 115
+ )
+ (box
+ :orientation "v"
+ :space-evenly false
+ (label :xalign 0 :yalign 0 :valign "start"
+ :class "winbsod-text winbsod-technicalinfo"
+ :text "Thanks for watching guys, stay safe"
+ )
+ (label :xalign 0 :yalign 0 :valign "start"
+ :class "winbsod-text winbsod-technicalinfo"
+ :style "margin-top: 35px;"
+ :text "If you're wondering, this QR code takes you to AUR homepage."
+ )
+ (label :xalign 0 :yalign 0 :valign "start"
+ :class "winbsod-text winbsod-technicalinfo"
+ :text "Stop code: ERRRRMMM"
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow winbsod
+ :stacking "fg"
+ :focusable true
+ :wm-ignore true
+ :monitor 0
+ :namespace "gamebar"
+ :geometry (geometry
+ :height "100%"
+ :width "100%"
+ :anchor "center center"
+ )
+ (winbsod_widget)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/wingamebar.yuck b/early/.config/eww/windows/wingamebar.yuck
new file mode 100755
index 000000000..01c743fb1
--- /dev/null
+++ b/early/.config/eww/windows/wingamebar.yuck
@@ -0,0 +1,390 @@
+(defwidget wingamebarwidget []
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "thewholething"
+ :height 1080
+ :width 1920
+ (overlay
+ (box
+ :height 1080
+ :width 1920
+ :class "wingamebar-overlay"
+ )
+ ; Controls
+ (eventbox
+ :onclick "scripts/toggle-wingamebar.sh --close"
+ :onrightclick "scripts/toggle-wingamebar.sh --close"
+ :onmiddleclick "scripts/toggle-wingamebar.sh --close"
+ (box :space-evenly false
+ :style "
+ margin-left: ${RES_WIDTH / 2 + ((gamebarwidgets.controls.at[0] - (RES_WIDTH / 2)) * (rev_wingamebar ? 1 : 1.03)) - (gamebarwidgets.controls.size[0] / 2)};
+ margin-top: ${RES_HEIGHT / 2 + ((gamebarwidgets.controls.at[1] - (RES_HEIGHT / 2)) * (rev_wingamebar ? 1 : 1.03)) - (gamebarwidgets.controls.size[1] / 2)};
+ margin-right: ${RES_WIDTH - (RES_WIDTH / 2 + ((gamebarwidgets.controls.at[0] - (RES_WIDTH / 2)) * (rev_wingamebar ? 1 : 1.03)) + (gamebarwidgets.controls.size[0] / 2))};
+ margin-bottom: ${RES_HEIGHT - (RES_HEIGHT / 2 + ((gamebarwidgets.controls.at[1] - (RES_HEIGHT / 2)) * (rev_wingamebar ? 1 : 1.03)) + (gamebarwidgets.controls.size[1] / 2))};
+ "
+ :class "wingamebar-window"
+ :halign "center"
+ (box :space-evenly false :orientation "h"
+ :class "wingamebar-control-sidesection-left"
+ (button
+ :class "wingamebar-control-button"
+ (label :class "win-segoeicon wingamebar-control-button" :text "")
+ )
+ )
+ (box
+ :class "wingamebar-control-appsection"
+ (button
+ :class "wingamebar-control-button-active"
+ (label :class "win-segoeicon wingamebar-control-button" :text "")
+ )
+ (button
+ :class "wingamebar-control-button-active"
+ (label :class "win-segoeicon wingamebar-control-button" :text "")
+ )
+ (button
+ :class "wingamebar-control-button-active"
+ (label :class "win-segoeicon wingamebar-control-button" :text "")
+ )
+ )
+ (box :space-evenly false :orientation "h"
+ :class "wingamebar-control-sidesection-right"
+ (label :class "wingamebar-text wingamebar-text-clock" :text {time12})
+ )
+ )
+ )
+ ; Capture
+ (box
+ :style "
+ margin-left: ${RES_WIDTH / 2 + ((gamebarwidgets.capture.at[0] - (RES_WIDTH / 2)) * (rev_wingamebar ? 1 : 1.03)) - (gamebarwidgets.capture.size[0] / 2)};
+ margin-top: ${RES_HEIGHT / 2 + ((gamebarwidgets.capture.at[1] - (RES_HEIGHT / 2)) * (rev_wingamebar ? 1 : 1.03)) - (gamebarwidgets.capture.size[1] / 2)};
+ margin-right: ${RES_WIDTH - (RES_WIDTH / 2 + ((gamebarwidgets.capture.at[0] - (RES_WIDTH / 2)) * (rev_wingamebar ? 1 : 1.03)) + (gamebarwidgets.capture.size[0] / 2))};
+ margin-bottom: ${RES_HEIGHT - (RES_HEIGHT / 2 + ((gamebarwidgets.capture.at[1] - (RES_HEIGHT / 2)) * (rev_wingamebar ? 1 : 1.03)) + (gamebarwidgets.capture.size[1] / 2))};
+ "
+ :class "wingamebar-window"
+ :orientation "v" :space-evenly false
+ (centerbox
+ :class "wingamebar-titlebar"
+ :valign "start" :height 33
+ (box
+ :space-evenly false :spacing 10
+ (label :xalign 0 :class "wingamebar-icon" :text "")
+ (label :xalign 0 :class "wingamebar-text" :text "Capture")
+ )
+ (box)
+ (label :halign "end" :xalign 1 :class "wingamebar-title" :text "")
+ )
+ (box
+ :class "wingamebar-capture"
+ :space-evenly false :spacing 21
+ (button
+ :valign "start"
+ :class "wingamebar-capture-button wingamebar-button"
+ :onclick "scripts/toggle-wingamebar.sh --close && grim ~/Pictures/Screenshots/screenshot_$(date '+%Y_%m_%_d..%H.%M').png &"
+ (label :class "win-segoeicon" :text "")
+ )
+ (button
+ :valign "start"
+ :class "wingamebar-capture-button-unavailable"
+ (label :class "win-segoeicon" :text "")
+ )
+ (button
+ :valign "start"
+ :class "wingamebar-capture-button wingamebar-button"
+ :onclick "scripts/toggle-wingamebar.sh --close && ~/.local/bin/record-script.sh ${record_sound ? '--sound ' : ''}&"
+ (label :class "win-segoeicon" :text "")
+ )
+ (button
+ :valign "start"
+ :class "wingamebar-capture-button wingamebar-button"
+ :onclick "${EWW_CMD} update record_sound='${!record_sound}'"
+ (label :class "win-segoeicon" :text "${record_sound ? '' : ''}")
+ )
+ )
+ (label :xalign 0 :class "wingamebar-content wingamebar-text wingamebar-subtext" :text {awin.title} :limit-width 38)
+ (eventbox
+ :class "wingamebar-button-pad"
+ :onclick "scripts/toggle-wingamebar.sh --close && xdg-open ~/Videos &"
+ (box
+ :class "wingamebar-content wingamebar-capture-bottom"
+ :space-evenly false :spacing 8
+ (label :class "win-segoeicon" :text "")
+ (label :class "wingamebar-text" :text "See my captures")
+ )
+ )
+ )
+ ; Autio
+ (box
+ :style "
+ margin-left: ${RES_WIDTH / 2 + ((gamebarwidgets.audio.at[0] - (RES_WIDTH / 2)) * (rev_wingamebar ? 1 : 1.03)) - (gamebarwidgets.audio.size[0] / 2)};
+ margin-top: ${RES_HEIGHT / 2 + ((gamebarwidgets.audio.at[1] - (RES_HEIGHT / 2)) * (rev_wingamebar ? 1 : 1.03)) - (gamebarwidgets.audio.size[1] / 2)};
+ margin-right: ${RES_WIDTH - (RES_WIDTH / 2 + ((gamebarwidgets.audio.at[0] - (RES_WIDTH / 2)) * (rev_wingamebar ? 1 : 1.03)) + (gamebarwidgets.audio.size[0] / 2))};
+ margin-bottom: ${RES_HEIGHT - (RES_HEIGHT / 2 + ((gamebarwidgets.audio.at[1] - (RES_HEIGHT / 2)) * (rev_wingamebar ? 1 : 1.03)) + (gamebarwidgets.audio.size[1] / 2))};
+ "
+ :orientation "v" :space-evenly false
+ :class "wingamebar-window"
+ (centerbox
+ :class "wingamebar-titlebar"
+ :valign "start" :height 33
+ (box
+ :space-evenly false :spacing 10
+ (label :xalign 0 :class "wingamebar-icon" :text "")
+ (label :xalign 0 :class "wingamebar-text" :text "Audio")
+ )
+ (box)
+ (label :halign "end" :xalign 1 :class "wingamebar-title" :text "")
+ )
+ ; Select audio/mic
+ (box
+ :space-evenly false :orientation "h"
+ :class "wingamebar-navbar"
+ (button
+ :class "wingamebar-navbar-button"
+ (label :class "wingamebar-text" :text "MIX")
+ )
+ )
+ ; System volume
+ (box
+ :space-evenly false :orientation "v"
+ :class "wingamebar-audio-sys"
+ (label :xalign 0 :class "wingamebar-text wingamebar-text-small wingamebar-subtext"
+ :text "DEFAULT OUTPUT"
+ )
+ (label :xalign 0 :class "wingamebar-text" :style "padding-top: 21px; padding-bottom: 7px;"
+ :text {audiodevice} :limit-width 37
+ )
+ (box
+ :space-evenly false :orientation "h"
+ (button
+ :class "winicon winvol${volume.audio == 1 ? round(volume.percent / 33, 0) : 'mute'}"
+ :onclick "scripts/volume mute SINK &"
+ )
+ (scale
+ :value "${volume.percent}"
+ :onchange "scripts/volume setvol SINK {}"
+ :class "winslider winslider-gamebar-sys"
+ )
+ )
+ )
+ ; (scroll
+ ; :height 576
+ (box
+ :space-evenly false :orientation "v"
+ (for app in audiojson
+ (box
+ :orientation "v" :space-evenly false :spacing 17
+ :style "margin-top: 17px;"
+ (for ser in {app["volume"]}
+ (eventbox
+ :onscroll "pactl set-sink-input-volume ${ser[0]} $(echo {} | sed -e \"s/up/+5/g\" -e \"s/down/-5/g\")%"
+ :onrightclick "pactl set-sink-input-volume ${ser[0]} 100%"
+ :onclick "pactl set-sink-input-volume ${ser[0]} 0%"
+ (box :orientation "h" :space-evenly false :spacing 17
+ (image :class "wingamebar-audio-appicon" :image-width 37 :image-height 37
+ :path {app.icon}
+ )
+ (box :space-evenly false :orientation "v"
+ (label :xalign 0 :class "wingamebar-text" :text "${app.name} #${ser[0]}")
+ (box
+ :space-evenly false :orientation "h"
+ (button
+ :class "winicon winvol${round((ser[1] < 100 ? ser[1] : 100) / 33, 0)}"
+ :style "margin-right: 2px;"
+ )
+ (scale
+ :value {ser[1] <= 100 ? ser[1] : 100}
+ :onchange "pactl set-sink-input-volume ${ser[0]} {}%"
+ :class "winslider winslider-gamebar-app"
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ ; )
+ )
+ )
+ ; Performancee
+ (box :orientation "v" :space-evenly false
+ :style "
+ margin-left: ${RES_WIDTH / 2 + ((gamebarwidgets.performance.at[0] - (RES_WIDTH / 2)) * (rev_wingamebar ? 1 : 1.03)) - (gamebarwidgets.performance.size[0] / 2)};
+ margin-top: ${RES_HEIGHT / 2 + ((gamebarwidgets.performance.at[1] - (RES_HEIGHT / 2)) * (rev_wingamebar ? 1 : 1.03)) - (gamebarwidgets.performance.size[1] / 2)};
+ margin-right: ${RES_WIDTH - (RES_WIDTH / 2 + ((gamebarwidgets.performance.at[0] - (RES_WIDTH / 2)) * (rev_wingamebar ? 1 : 1.03)) + (gamebarwidgets.performance.size[0] / 2))};
+ margin-bottom: ${RES_HEIGHT - (RES_HEIGHT / 2 + ((gamebarwidgets.performance.at[1] - (RES_HEIGHT / 2)) * (rev_wingamebar ? 1 : 1.03)) + (gamebarwidgets.performance.size[1] / 2))};
+ "
+ :class "wingamebar-window"
+ (centerbox
+ :class "wingamebar-titlebar"
+ :valign "start" :height 33
+ (box
+ :space-evenly false :spacing 10
+ (label :xalign 0 :class "wingamebar-icon" :text "")
+ (label :xalign 0 :class "wingamebar-text" :text "Performance")
+ )
+ (box)
+ (label :halign "end" :xalign 1 :class "wingamebar-title" :text "")
+ )
+ (box :orientation "h" :space-evenly false
+ (box :orientation "v" :space-evenly false
+ :class "wingamebar-performance-metricscolumn"
+ (button
+ :class "wingamebar-performance-metric-${resource_metric == 'cpu'}"
+ :onclick "${EWW_CMD} update resource_metric='cpu' &"
+ (label :xalign 0 :class "wingamebar-text"
+ :text "CPU ${round(EWW_CPU.avg, 0)}%"
+ )
+ )
+ (button
+ :class "wingamebar-performance-metric-${resource_metric == 'ram'}"
+ :onclick "${EWW_CMD} update resource_metric='ram' &"
+ (label :xalign 0 :class "wingamebar-text"
+ :text "RAM ${round(memory.percentage, 0)}%"
+ )
+ )
+ (button
+ :class "wingamebar-performance-metric-${resource_metric == 'swap'}"
+ :onclick "${EWW_CMD} update resource_metric='swap' &"
+ (label :xalign 0 :class "wingamebar-text"
+ :text "SWAP ${round(memory.swappercentage, 0)}%"
+ )
+ )
+ )
+ ; Graph
+ (box :width 236 :height 191 :space-evenly false
+ :class "wingamebar-performance-grapharea"
+ (revealer :reveal {resource_metric == 'cpu'}
+ :transition "slideright" :duration "0ms"
+ (overlay
+ (box
+ :width 236 :height 191
+ :orientation "v" :space-evenly false
+ :class "wingamebar-performance-graph-graphpad"
+ (graph
+ :width 202 :height 117
+ :class "wingamebar-graph"
+ :value {round(EWW_CPU.avg, 0)}
+ :thickness 3
+ :time-range "30s"
+ :line-style "round"
+ )
+ )
+ (centerbox
+ :width 236 :height 191
+ :orientation "v" :space-evenly false
+ :class "wingamebar-performance-graphpad"
+ (box :space-evenly false :orientation "v"
+ (centerbox
+ (label :xalign 0 :class "wingamebar-text wingamebar-text-bigmetric" :text "${round(EWW_CPU.avg, 0)}%")
+ (box)
+ (label :xalign 1 :yalign 0 :class "wingamebar-text wingamebar-text-small" :text "100")
+ )
+ (label :xalign 0 :class "wingamebar-text wingamebar-subtext wingamebar-text-small" :text "${EWW_CPU['cores'][0]['freq']} MHz")
+ )
+ (box)
+ (centerbox
+ :valign "end"
+ (label :xalign 0 :class "wingamebar-text wingamebar-subtext wingamebar-text-small" :text "30 SECONDS")
+ (box)
+ (label :xalign 1 :yalign 1 :class "wingamebar-text wingamebar-text-small" :text "0")
+ )
+ )
+ )
+ )
+ (revealer :reveal {resource_metric == 'ram'}
+ :transition "slideright" :duration "0ms"
+ (overlay
+ (box
+ :width 236 :height 191
+ :orientation "v" :space-evenly false
+ :class "wingamebar-performance-graph-graphpad"
+ (graph
+ :width 202 :height 117
+ :class "wingamebar-graph"
+ :value {round(memory.percentage, 0)}
+ :thickness 3
+ :time-range "30s"
+ :line-style "round"
+ )
+ )
+ (centerbox
+ :width 236 :height 191
+ :orientation "v" :space-evenly false
+ :class "wingamebar-performance-graphpad"
+ (box :space-evenly false :orientation "v"
+ (centerbox
+ (label :xalign 0 :class "wingamebar-text wingamebar-text-bigmetric" :text "${round(memory.percentage, 0)}%")
+ (box)
+ (label :xalign 1 :yalign 0 :class "wingamebar-text wingamebar-text-small" :text "100")
+ )
+ (label :xalign 0 :class "wingamebar-text wingamebar-subtext wingamebar-text-small" :text "${memory.used}b")
+ )
+ (box)
+ (centerbox
+ :valign "end"
+ (label :xalign 0 :class "wingamebar-text wingamebar-subtext wingamebar-text-small" :text "30 SECONDS")
+ (box)
+ (label :xalign 1 :yalign 1 :class "wingamebar-text wingamebar-text-small" :text "0")
+ )
+ )
+ )
+ )
+ (revealer :reveal {resource_metric == 'swap'}
+ :transition "slideright" :duration "0ms"
+ (overlay
+ (box
+ :width 236 :height 191
+ :orientation "v" :space-evenly false
+ :class "wingamebar-performance-graph-graphpad"
+ (graph
+ :width 202 :height 117
+ :class "wingamebar-graph"
+ :value {round(memory.swappercentage, 0)}
+ :thickness 3
+ :time-range "30s"
+ :line-style "round"
+ )
+ )
+ (centerbox
+ :width 236 :height 191
+ :orientation "v" :space-evenly false
+ :class "wingamebar-performance-graphpad"
+ (box :space-evenly false :orientation "v"
+ (centerbox
+ (label :xalign 0 :class "wingamebar-text wingamebar-text-bigmetric" :text "${round(memory.swappercentage, 0)}%")
+ (box)
+ (label :xalign 1 :yalign 0 :class "wingamebar-text wingamebar-text-small" :text "100")
+ )
+ (label :xalign 0 :class "wingamebar-text wingamebar-subtext wingamebar-text-small" :text "${memory.swapused}b")
+ )
+ (box)
+ (centerbox
+ :valign "end"
+ (label :xalign 0 :class "wingamebar-text wingamebar-subtext wingamebar-text-small" :text "30 SECONDS")
+ (box)
+ (label :xalign 1 :yalign 1 :class "wingamebar-text wingamebar-text-small" :text "0")
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow wingamebar
+ :stacking "overlay"
+ :focusable true
+ :wm-ignore true
+ :monitor 0
+ :namespace "gamebar"
+ :geometry (geometry
+ :height "100%"
+ :width "100%"
+ :anchor "center center"
+ )
+ (wingamebarwidget)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/winlang.yuck b/early/.config/eww/windows/winlang.yuck
new file mode 100755
index 000000000..18ba97a8c
--- /dev/null
+++ b/early/.config/eww/windows/winlang.yuck
@@ -0,0 +1,91 @@
+(defwidget winlang_widget []
+ (box
+ :space-evenly false
+ :orientation "v"
+ :style "
+ ${anim_open_winlang ? 'transition: 150ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 100ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ ${rev_winlang ? '' : 'margin-bottom: -700px;'}
+ "
+ (eventbox
+ :onclick "scripts/toggle-winlang.sh --close &"
+ :onmiddleclick "scripts/toggle-winlang.sh --close &"
+ :onrightclick "scripts/toggle-winlang.sh --close &"
+ (box
+ :class "box-that-is-there" :style "min-height: 1px;"
+ )
+ )
+ (box
+ :space-evenly false :orientation "v"
+ :class "winwin-top"
+ :width 378
+ (box
+ :space-evenly false :spacing 10
+ :style "padding: 15px;"
+ (label :xalign 0
+ :class "winlang-text"
+ :text "Keyboard layout"
+ )
+ ; (label :xalign 0
+ ; :class "winlang-subtext"
+ ; :text "Win + Space"
+ ; )
+ )
+ (box
+ :space-evenly false :orientation "v"
+ (for language in langs
+ (button
+ :class "winlang-lang${language.name_ibus == lang_ibus.name_ibus ? '-true' : '-false'}"
+ :onclick "ibus engine ${language.name_ibus} && eww update lang_ibus='${language}' &"
+ :height 76
+ (box
+ :orientation "h" :space-evenly false :spacing 10
+ ; :class "winlang-lang-true"
+ (label :xalign 0
+ :width 35
+ :text {language.name_abbr}
+ )
+ (box
+ :space-evenly false :orientation "v"
+ (label :xalign 0
+ :text {language.name}
+ )
+ (label :xalign 0
+ :text {language.name_method}
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (box
+ :space-evenly false :orientation "v"
+ :class "winwin-bottom"
+ :width 420
+ (box
+ :class "winwin-bottom-pad"
+ (button
+ :class "winlang-bottom-button"
+ :onclick "scripts/toggle-winlang.sh --close && gnome-control-center keyboard &"
+ (label :xalign 0
+ :class "winlang-text"
+ :style "padding: 0 5px;"
+ :text "More keyboard settings"
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow winlang
+ :wm-ignore true
+ :monitor 0
+ :focusable true
+ :geometry (geometry
+ :x "0px"
+ :y "50px"
+ :anchor "bottom right"
+ )
+ (winlang_widget)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/winnews.yuck b/early/.config/eww/windows/winnews.yuck
new file mode 100755
index 000000000..b9b393ee9
--- /dev/null
+++ b/early/.config/eww/windows/winnews.yuck
@@ -0,0 +1,718 @@
+(defwidget cavacol_winnews [nth dir]
+ (box
+ :valign "${dir == 'up' ? 'end' : (
+ dir == 'down' ? 'start' : (
+ dir == 'virt' ? 'center' : 'fill'
+ )
+ )}"
+ :halign "${dir == 'right' ? 'start' : (
+ dir == 'left' ? 'end' : (
+ dir == 'hori' ? 'center' : 'fill'
+ )
+ )}"
+ :width 15
+ :class "winnews-cava-column"
+ :style "
+ transition: 0ms;
+ min-${dir == 'up' || dir == 'down' ? 'height' : 'width'}: ${cavajson[nth] / 8}px;
+ "
+ )
+)
+
+(defwidget checkboxhyprctl-win [value changevalue]
+ (eventbox
+ :cursor "pointer"
+ :onclick "hyprctl keyword ${changevalue} ${1 - value} && scripts/hyprsettings tickle"
+ (box
+ :class "win-checkbox-${value}"
+ :halign "end"
+ )
+ )
+)
+
+(defwidget winnews_widget []
+ (box
+ :orientation "v" :space-evenly false
+ :width {RES_WIDTH / 2}
+ :height {RES_HEIGHT - 51}
+ :style "
+ ${anim_open_winnews ? 'transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ ${rev_winnews ? '' : 'margin-left: -960px; margin-right: 960px;'}
+ "
+ (eventbox
+ :onclick "scripts/toggle-winnews.sh --close &"
+ :onmiddleclick "scripts/toggle-winnews.sh --close &"
+ :onrightclick "scripts/toggle-winnews.sh --close &"
+ (box
+ :class "box-that-is-there" :style "min-height: 0px;"
+ )
+ )
+ (box :space-evenly false :orientation "v"
+ :width {RES_WIDTH / 2 - 24}
+ :height {RES_HEIGHT - 51}
+ :class "winwin"
+ (centerbox
+ :class "winnews-topbar"
+ :height 35
+ (box :space-evenly false :height 35
+ (label :class "winnews-clock" :text "Widgets")
+ )
+ (box :space-evenly false :height 35
+ (overlay
+ (box :space-evenly false
+ :class "winnews-search-prompt"
+ :height 33 :width 500
+ (box
+ :halign "start"
+ :class "winsearch-icon winstart-search-searchbox-icon"
+ :style "margin-left: 5px;"
+ )
+ (revealer
+ :reveal {oquery == ''}
+ :halign "start"
+ :duration "100ms"
+ (label :class "winnews-search-prompt-text" :xalign 0 :text "Search Widgets")
+ )
+ )
+ (input
+ :class "winnews-search-contents"
+ :onchange "${EWW_CMD} update oquery='{}' &"
+ )
+ )
+ )
+ (box :space-evenly false :height 35
+ :halign "end"
+ (label :class "winnews-clock" :text {time12})
+ (button
+ :halign "end"
+ :class "winnews-user"
+ :onclick "scripts/toggle-winnews.sh --close && gnome-control-center user-accounts &"
+ (box :height 35 :width 35
+ :class "winstart-user-icon"
+ )
+ )
+ )
+ )
+ (scroll
+ :height 930
+ (box :orientation "h" :spacing 12
+ :class "winnews-widgets"
+ (box :orientation "v" :spacing 12 :space-evenly false
+ ; System info
+ (revealer
+ :reveal "${matches('fetch system information user distro kernel uptime de desktop packages',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (revealer
+ :reveal "${matches('fetch system information user distro kernel uptime de desktop packages',oquery)}"
+ :transition "fade"
+ :duration "200ms"
+ (box :orientation "v" :space-evenly false
+ :class "winnews-widget"
+ (box
+ :orientation "h"
+ :space-evenly false
+ (label
+ :halign "start"
+ :class "winnews-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "winnews-section"
+ :text "System info"
+ )
+ )
+ (box
+ :orientation "v" :space-evenly false :valign "center"
+ :class "winnews-fetch-pad"
+ (box
+ :orientation "h" :space-evenly false :spacing 20
+ (label :class "winnews-fetch-icon" :text "")
+ (label :class "winnews-text" :text "${username + '@' + hostname}")
+ )
+ (box
+ :orientation "h" :space-evenly false :spacing 20
+ (label :class "winnews-fetch-icon" :text "")
+ (label :class "winnews-text" :text "${kernel}")
+ )
+ (box
+ :orientation "h" :space-evenly false :spacing 20
+ (label :class "winnews-fetch-icon" :text "")
+ (label :class "winnews-text" :text "${uptime}")
+ )
+ (box
+ :orientation "h" :space-evenly false :spacing 20
+ (label :class "winnews-fetch-icon" :text "")
+ (label :class "winnews-text" :text "${wm}")
+ )
+ (box
+ :orientation "h" :space-evenly false :spacing 20
+ (label :class "winnews-fetch-icon" :text "")
+ (label :class "winnews-text" :text "${packages}")
+ )
+ )
+ )
+ )
+ )
+ ; Mouse and touchpad
+ (revealer
+ :reveal "${matches('mouse and touchpad touch pad mouse speed mouse acceleration osu raw input sensitivity disable while typing disable_while_typing tap to click clickfinger_behavior',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box :orientation "v" :space-evenly false
+ :class "winnews-widget"
+ (box
+ :orientation "h" :space-evenly false
+ (label
+ :halign "start"
+ :class "winnews-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "winnews-section"
+ :text "Mouse & Touchpad"
+ )
+ )
+ (revealer
+ :reveal "${matches('mouse and touchpad touch pad speed mouse acceleration osu raw input sensitivity',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (eventbox
+ :onrightclick "hyprctl keyword input:sensitivity 0"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "winnews-option"
+ (label
+ :halign "start"
+ :wrap true
+ :class "winnews-text"
+ :text "Sensitivity"
+ )
+ (scale
+ :class "winslider winslider-winnews"
+ :value "${hyprjson.input_sensitivity * 50 + 50}"
+ :onchange "hyprctl keyword input:sensitivity $(echo - | awk '{print {} / 50 - 1}') && scripts/hyprsettings tickle"
+ )
+ )
+ )
+ (centerbox :orientation "h"
+ :halign "fill"
+ :class "winnews-option"
+ (label
+ :xalign 0
+ :wrap true
+ :class "winnews-text"
+ :text "Raw input"
+ )
+ (box)
+ (checkboxhyprctl-win
+ :value "${hyprjson.force_no_accel}"
+ :changevalue "input:force_no_accel"
+ :halign "end"
+ :class "win-checkbox"
+ )
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('mouse and touch pad touchpad disable while typing disable_while_typing',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (centerbox
+ :class "winnews-option"
+ :orientation "h"
+ :halign "fill"
+ (label
+ :halign "start"
+ :class "winnews-text"
+ :text "Disable touchpad while typing"
+ )
+ (box)
+ (checkboxhyprctl-win
+ :value "${hyprjson.touchpad_disable_while_typing}"
+ :changevalue "input:touchpad:disable_while_typing"
+ :class "win-checkbox"
+ )
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('mouse and touchpad touch pad tap to click clickfinger_behavior',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (centerbox :orientation "h"
+ :halign "fill"
+ :class "winnews-option"
+ (label
+ :halign "start"
+ :class "winnews-text"
+ :text "Tap to click"
+ )
+ (box)
+ (checkboxhyprctl-win
+ :value "${hyprjson.touchpad_clickfinger_behavior}"
+ :changevalue "input:touchpad:clickfinger_behavior"
+ )
+ )
+ )
+ )
+ )
+ )
+ ; Appearance
+ (revealer
+ :reveal "${matches('appearance looks customization blur size blur passes blur strength blur xray',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (revealer
+ :reveal "${matches('appearance looks customization blur size blur passes blur strength blur xray',oquery)}"
+ :transition "fade"
+ :duration "200ms"
+ (box
+ :space-evenly false :orientation "v"
+ :class "winnews-widget"
+ (box
+ :orientation "h" :space-evenly false
+ (label
+ :halign "start"
+ :class "winnews-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "winnews-section"
+ :text "Blur"
+ )
+ )
+ (centerbox
+ :orientation "h"
+ :halign "fill"
+ :class "winnews-option"
+ (label
+ :halign "start"
+ :class "winnews-text"
+ :text "Enable blur"
+ )
+ (box)
+ (checkboxhyprctl-win
+ :value "${hyprjson.blur}"
+ :changevalue "decoration:blur"
+ )
+ )
+ (revealer
+ :reveal "${matches('appearance looks customization blur size blur strength',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "winnews-option"
+ (label
+ :halign "start"
+ :wrap true
+ :class "winnews-text"
+ :text "Blur size"
+ )
+ (scale
+ :class "winslider winslider-winnews"
+ :value "${hyprjson.blur_size}"
+ :tooltip "Blur size: ${hyprjson.blur_size}"
+ :onchange "hyprctl keyword decoration:blur_size {} && scripts/hyprsettings tickle"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('appearance looks customization blur passes blur strength',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false :orientation "v"
+ :class "winnews-option"
+ (label
+ :halign "start"
+ :wrap true
+ :class "winnews-text"
+ :text "Blur passes"
+ )
+ (scale
+ :class "winslider winslider-winnews"
+ :value "${hyprjson.blur_passes * 10}"
+ :tooltip "Blur passes: ${hyprjson.blur_passes}"
+ :onchange "hyprctl keyword decoration:blur_passes $(({} / 10)) && scripts/hyprsettings tickle"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('appearance looks customization blur xray',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false :orientation "v"
+ :class "winnews-option"
+ (centerbox
+ :orientation "h"
+ :halign "fill"
+ (label
+ :halign "start"
+ :class "winnews-text"
+ :text "Blur xray"
+ )
+ (box)
+ (checkboxhyprctl-win
+ :value "${hyprjson.blur_xray}"
+ :changevalue "decoration:blur_xray"
+ )
+ )
+ )
+ )
+ )
+ )
+ ) ; Revealer
+ (revealer
+ :reveal "${matches('appearance looks customization gaps gaps_in inner gaps: inner gaps_out outer gaps: outer space border_size border size border thickness rounding corner',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (revealer
+ :reveal "${matches('appearance looks customization gaps gaps_in inner gaps: inner gaps_out outer gaps: outer space border_size border size border thickness rounding corner',oquery)}"
+ :transition "fade"
+ :duration "200ms"
+ (box
+ :space-evenly false :orientation "v"
+ :class "winnews-widget"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :halign "start"
+ :class "winnews-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "winnews-section"
+ :text "Gaps/Borders"
+ )
+ )
+ (revealer
+ :reveal "${matches('appearance looks customization gaps_in inner gaps: inner space',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false :orientation "v"
+ :class "winnews-option"
+ (label
+ :halign "start"
+ :wrap true
+ :class "winnews-text"
+ :text "Gaps: Inner"
+ )
+ (scale
+ :class "winslider winslider-winnews"
+ :value "${hyprjson.gaps_in}"
+ :tooltip "Inner gaps: ${hyprjson.gaps_in}"
+ :onchange "hyprctl keyword general:gaps_in {} && scripts/hyprsettings tickle"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('appearance looks customization gaps_out outer gaps: outer space',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false :orientation "v"
+ :class "winnews-option"
+ (label
+ :halign "start"
+ :wrap true
+ :class "winnews-text"
+ :text "Gaps: Outer"
+ )
+ (scale
+ :class "winslider winslider-winnews"
+ :value "${hyprjson.gaps_out}"
+ :tooltip "Outer gaps: ${hyprjson.gaps_out}"
+ :onchange "hyprctl keyword general:gaps_out {} && scripts/hyprsettings tickle"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('appearance looks customization border_size border size border thickness',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false :orientation "v"
+ :class "winnews-option"
+ (label
+ :halign "start"
+ :wrap true
+ :class "winnews-text"
+ :text "Border size"
+ )
+ (scale
+ :class "winslider winslider-winnews"
+ :value "${hyprjson.border_size}"
+ :tooltip "Border size: ${hyprjson.border_size}"
+ :onchange "hyprctl keyword general:border_size {} && scripts/hyprsettings tickle"
+ )
+ )
+ )
+ (revealer
+ :reveal "${matches('appearance looks customization rounding corner',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (box
+ :space-evenly false :orientation "v"
+ :class "winnews-option"
+ (label
+ :halign "start"
+ :wrap true
+ :class "winnews-text"
+ :text "Rounding"
+ )
+ (scale
+ :class "winslider winslider-winnews"
+ :value "${hyprjson.rounding}"
+ :tooltip "Border size: ${hyprjson.rounding}"
+ :onchange "hyprctl keyword decoration:rounding {} && scripts/hyprsettings tickle"
+ )
+ )
+ )
+ )
+ )
+ ) ; Revealer
+ )
+ ; 2nd column
+ (box :orientation "v" :spacing 12 :space-evenly false
+ (revealer ; Quote
+ :reveal "${matches('quote speech vaxry linus torvalds hyprland',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (revealer
+ :reveal "${matches('quote speech vaxry linus torvalds hyprland',oquery)}"
+ :transition "fade"
+ :duration "200ms"
+ (box :orientation "v" :space-evenly false
+ :class "winnews-widget"
+ (box
+ :orientation "h"
+ :space-evenly false
+ (label
+ :halign "start"
+ :class "winnews-section-icon"
+ :text "Assistant"
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "winnews-section"
+ :text "Quote"
+ )
+ )
+ (box
+ :orientation "v" :space-evenly false :valign "center"
+ :class "winnews-fetch-pad"
+ (box
+ :orientation "h" :space-evenly false :spacing 20
+ (label :class "winnews-fetch-icon" :text "Chat")
+ (label :class "winnews-text" :text {quote_content[4]})
+ )
+ (box
+ :orientation "h" :space-evenly false :spacing 10
+ :halign "end"
+ :style "margin-right: 20px;"
+ (label :class "winnews-fetch-icon" :text "Person")
+ (label :class "winnews-text" :text {quote_author[4]})
+ )
+ )
+ )
+ )
+ )
+ (revealer ; Waifu
+ :reveal "${matches('waifu anime cute sex segs ecchi hentai',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (revealer
+ :reveal "${matches('waifu anime cute sex segs ecchi hentai',oquery)}"
+ :transition "fade"
+ :duration "200ms"
+ (box :orientation "v" :space-evenly false
+ :class "winnews-widget-nopad"
+ (box
+ :orientation "h"
+ :space-evenly false
+ (label
+ :halign "start"
+ :class "winnews-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :hexpand true
+ :class "winnews-section"
+ :text "Random waifu"
+ )
+ (eventbox
+ :onclick "scripts/toggle-winnews.sh --close && xdg-open 'https://waifu.pics/' &"
+ :cursor "pointer"
+ (label
+ :halign "end"
+ :wrap true
+ :class "winnews-link winnews-title-right"
+ :text "(https://waifu.pics/)"
+ )
+ )
+ )
+ ; Tag strip
+ (scroll
+ :halign "fill"
+ :hscroll true :vscroll false
+ (box
+ :class "winnews-tag-strip"
+ :space-evenly false
+ (for id in WAIFU_TAG_ID
+ (button
+ :class "winnews-tag"
+ :onclick "eww update waifu_get=$(scripts/waifupics.py ${WAIFU_CATEGORIES_ARGS[id]}) &"
+ (label :class "wintoggle-text" :text {WAIFU_CATEGORIES[id]})
+ )
+ )
+ )
+ )
+ ; Totally necessary bunny ears
+ (label
+ :halign "start"
+ :wrap true
+ :hexpand true
+ :halign "center"
+ :text "
+ ⠀⠀⢀⡤⣄⡀
+ ⠀⢠⡏⠀⠀⠳⡄⠀⠀⠀⠀⠀ ⣀⣀⣀
+ ⠀⢸⠃⠀⠀⠀⢿⠀⠀⠀⠀ ⣼⠃⠀⠘⢧
+ ⠀⢸⡆⠀⠀⠀⠸⡆⠀⠀ ⣸⠃⠀⠀⠀⠈⢧
+ ⠀⠈⣇⠀⠀⠀ ⣧⠀ ⠀ ⡏⠀⢦⠀⠀⠀⠸⡆
+ ⠀ ⢹⡀⠀⠀⠀⢸⠀ ⢸⠇⠀⠘⢧⡀⣸⠃
+ ⠀ ⠀⢳⠀⠀⠀⢸⡆ ⢸⠀ ⠀⣼⠙
+ "
+ :style "margin-bottom: -20px;"
+ )
+ ; The image
+ (box
+ :orientation "v" :space-evenly false :valign "center"
+ (box
+ :class "winnews-waifu"
+ :style "
+ background-image: url('${(waifu_get == 'null' || waifu_get == '') ? 'eww_covers/waifu' : waifu_get}');
+ "
+ )
+ )
+ )
+ )
+ ) ; Waifu: end
+ (revealer ; Cava
+ :reveal "${matches('cava music audio visualizer sound volume beats',oquery)}"
+ :transition "slidedown"
+ :duration "200ms"
+ (revealer
+ :reveal "${matches('cava music audio visualizer sound volume beats',oquery)}"
+ :transition "fade"
+ :duration "200ms"
+ (overlay
+ (box :orientation "h"
+ :height 150
+ :class "winnews-widget-nopad-cava"
+ (cavacol_winnews :dir "up" :nth 0)
+ (cavacol_winnews :dir "up" :nth 1)
+ (cavacol_winnews :dir "up" :nth 2)
+ (cavacol_winnews :dir "up" :nth 3)
+ (cavacol_winnews :dir "up" :nth 4)
+ (cavacol_winnews :dir "up" :nth 5)
+ (cavacol_winnews :dir "up" :nth 6)
+ (cavacol_winnews :dir "up" :nth 7)
+ (cavacol_winnews :dir "up" :nth 8)
+ (cavacol_winnews :dir "up" :nth 9)
+ (cavacol_winnews :dir "up" :nth 10)
+ (cavacol_winnews :dir "up" :nth 10)
+ (cavacol_winnews :dir "up" :nth 10)
+ (cavacol_winnews :dir "up" :nth 12)
+ (cavacol_winnews :dir "up" :nth 14)
+ (cavacol_winnews :dir "up" :nth 16)
+ (cavacol_winnews :dir "up" :nth 18)
+ (cavacol_winnews :dir "up" :nth 20)
+ (cavacol_winnews :dir "up" :nth 22)
+ (cavacol_winnews :dir "up" :nth 24)
+ (cavacol_winnews :dir "up" :nth 26)
+ (cavacol_winnews :dir "up" :nth 28)
+ (cavacol_winnews :dir "up" :nth 30)
+ (cavacol_winnews :dir "up" :nth 32)
+ (cavacol_winnews :dir "up" :nth 34)
+ )
+ (box
+ :orientation "h"
+ :space-evenly false
+ :valign "start"
+ (label
+ :halign "start"
+ :class "winnews-section-icon"
+ :text ""
+ )
+ (label
+ :halign "start"
+ :wrap true
+ :class "winnews-section"
+ :text "Cava"
+ )
+ )
+ )
+ )
+ ) ; Cava: end
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow winnews
+ :wm-ignore true
+ :focusable true
+ :monitor 0
+ :geometry (geometry
+ :width "50%"
+ ; :height "0%"
+ :anchor "top left"
+ )
+ (winnews_widget)
+)
+
+(defwidget winnews-button []
+ (eventbox
+ :class "winbarbutton-h winnewsicon-interaction"
+ :onclick "scripts/toggle-winnews.sh &"
+ :onmiddleclick "playerctl play-pause"
+ :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
+ :onscroll "echo $(echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%) && scripts/volume osd"
+ (box
+ :class "winbutton-pad"
+ (box
+ :class "winnewsicon winbutton-${rev_winnews}"
+ )
+ )
+ )
+)
diff --git a/early/.config/eww/windows/winnotif.yuck b/early/.config/eww/windows/winnotif.yuck
new file mode 100755
index 000000000..2fe910a42
--- /dev/null
+++ b/early/.config/eww/windows/winnotif.yuck
@@ -0,0 +1,229 @@
+(defwidget winnotifs []
+ (centerbox
+ :orientation "v"
+ :style "
+ ${anim_open_winnotif ? 'transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ ${rev_winnotif ? '' : 'margin-right: -700px;'}
+ min-height: 1033px;
+ "
+ (box
+ :space-evenly false
+ :orientation "v"
+ :halign "start"
+ (eventbox
+ :valign "start"
+ :onclick "scripts/toggle-winnotif.sh --close &"
+ :onmiddleclick "scripts/toggle-winnotif.sh --close &"
+ :onrightclick "scripts/toggle-winnotif.sh --close &"
+ (box
+ :class "box-that-is-there" :style "min-height: 1px;"
+ )
+ )
+ (box
+ :class "winwin"
+ :space-evenly false
+ :orientation "v"
+ :style "margin-bottom:6px;"
+ (centerbox
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 10
+ (label
+ :halign "start"
+ :class "winnotif-text winnotif-title"
+ :text "Notifications"
+ )
+ )
+ (box)
+ (box
+ :class "icon"
+ :halign "end"
+ :space-evenly false
+ :style "margin-right: 12px;"
+ (button
+ :class "winnotif-button"
+ :tooltip "Refresh"
+ :onclick "dunstctl history > $XDG_CACHE_HOME/dunst-history.json &"
+ (image
+ :path "images/svg/dark/reset.svg"
+ :image-width 19
+ :image-height 19
+ )
+ )
+ (button
+ :class "winnotif-button"
+ :tooltip "Pause/Resume Notifications"
+ :onclick "scripts/notifications toggle &"
+ {notif_icons.toggle_icon}
+ )
+ (button
+ :class "wintoggle-text winnotif-button"
+ :tooltip "Clear Notifications"
+ :onclick "scripts/notifications clear &"
+ "Clear all"
+ )
+ )
+ )
+ (scroll
+ :width 400
+ :valign "start"
+ :style "
+ min-height: ${rev_wincalendar ? 357 : 811}px;
+ transition: 150ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ "
+ (box
+ :space-evenly false
+ :orientation "v"
+ (for i in notifications
+ (eventbox
+ :onclick "dunstctl history-pop ${i.id} && dunstctl action 0 && dunstctl close"
+ (box
+ :orientation "v"
+ :width 400
+ :space-evenly false
+ (box
+ :orientation "h"
+ :space-evenly false
+ :class "winwin-bottom-pad"
+ (image :class "winapp winnotif-notif-icon" :path "images/svg/dark/app.svg")
+ (label :class "winnotif-appname" :text {i.appname})
+ )
+ (box
+ :orientation "v"
+ :space-evenly false
+ :class "winnotif-notif"
+ (label
+ :xalign 0
+ :wrap true
+ :class "winnotif-text"
+ :text {i.summary}
+ )
+ (label
+ :xalign 0
+ :wrap true
+ :class "winnotif-text winnotif-bodytext"
+ :text {i.body}
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (box :valign "center")
+ ; Calendar
+ (box
+ :space-evenly false
+ :orientation "v"
+ :valign "end"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "winwin-topbar"
+ :style "margin-top: 6px;"
+ (centerbox
+ :orientation "h"
+ :style "padding: 0 12px;"
+ (label :xalign 0 :class "wincalendar-title" :text "${time.day}, ${time.monthname} ${day_only}")
+ (box)
+ (button
+ :halign "end"
+ :class "winnotif-button winarrow-${rev_wincalendar ? 'down' : 'up'}"
+ :tooltip "Show/Hide Calendar"
+ :onclick "${EWW_CMD} update rev_wincalendar=${!rev_wincalendar}"
+ )
+ )
+ )
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "winnotif-calendar"
+ :style "
+ min-height: ${rev_wincalendar ? 408 : 0}px;
+ transition: ${rev_wincalendar ? '152ms' : '149ms'} cubic-bezier(0.05, 0.7, 0.1, 1);
+ "
+ (revealer
+ :reveal {rev_wincalendar}
+ :transition "slideup"
+ :duration "${rev_wincalendar ? '0ms' : '149ms'}"
+ (eventbox
+ :onscroll "scripts/scrollmonth {} &"
+ (box
+ :orientation "v"
+ :space-evenly false
+ (centerbox
+ :style "padding: 0 12px;"
+ (label :xalign 0 :class "wincalendar-title" :text "${calendartitle}")
+ (box)
+ (box
+ :halign "end"
+ (button
+ :onclick "scripts/scrollmonth up &"
+ :halign "end"
+ :class "winicon winnotif-monthbutton"
+ (image
+ :path "images/svg/dark/caretup.svg"
+ )
+ )
+ (button
+ :onclick "scripts/scrollmonth down &"
+ :halign "end"
+ :class "winicon winnotif-monthbutton"
+ (image
+ :path "images/svg/dark/caretdown.svg"
+ )
+ )
+ )
+ )
+ (box
+ (for day in weekdays
+ (box
+ :class "wincalendar-button day${day.today}"
+ (label :class "wincalendar-text" :text "${day.day}")
+ )
+ )
+ )
+ (for week in calendar
+ (box
+ (for day in week
+ (button
+ :class "wincalendar-button day${day.today}"
+ (label :class "wincalendar-text" :text "${day.day}")
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "winwin-bottom"
+ (box
+ :space-evenly false
+ :orientation "h"
+ :class "winwin-bottom-pad"
+ (label :xalign 0 :class "wincalendar-title" :text "Calendar")
+ )
+ )
+ )
+ )
+)
+
+(defwindow winnotif
+ :wm-ignore true
+ :monitor 0
+ :focusable true
+ :geometry (geometry
+ :x "0px"
+ :y "51px"
+ :height 1029
+ :anchor "bottom right"
+ )
+ (winnotifs)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/winosd.yuck b/early/.config/eww/windows/winosd.yuck
new file mode 100755
index 000000000..064c3be85
--- /dev/null
+++ b/early/.config/eww/windows/winosd.yuck
@@ -0,0 +1,77 @@
+(defwidget winosdwidget_vol []
+ (box
+ :class "winosd-var"
+ :orientation "h"
+ :space-evenly false
+ :style "
+ ${osd_vol ? '' : 'margin-bottom: -90px; margin-top: 90px;'}
+ ${osd_vol ? 'transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ "
+ (box
+ :orientation "h" :space-evenly false :spacing 5
+ :class "winactions-sliderrow"
+ (image :class "winicon" :path "images/svg/dark/vol${volume.audio == 1 ? round(volume.percent / 33, 0) : 'mute'}.svg")
+ (scale
+ :value {volume.percent}
+ :onchange "scripts/volume setvol SINK {} &"
+ :class "winslider-osd"
+ )
+ (label :class "winnotif-text" :text {volume.percent})
+ )
+ )
+)
+
+(defwidget winosdwidget_bright []
+ (box
+ :class "winosd-var"
+ :orientation "h"
+ :space-evenly false
+ :style "
+ ${osd_bright ? '' : 'margin-bottom: -90px; margin-top: 90px;'}
+ ${osd_bright ? 'transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ "
+ (box
+ :orientation "h" :space-evenly false :spacing 5
+ :class "winactions-sliderrow"
+ (image :class "winicon" :path "images/svg/dark/brightness.svg")
+ (scale
+ :value {round(brightness.level, 0)}
+ :onchange "light -S {} && scripts/brightness osd &"
+ :class "winslider-osd"
+ )
+ (label :class "winnotif-text" :text {round(brightness.level, 0)})
+ )
+ )
+)
+
+(defwindow winosd_vol
+ :stacking "overlay"
+ :wm-ignore true
+ :monitor 0
+ :geometry (geometry
+ :x "0%"
+ :y "50px"
+ :width "100px"
+ :height "53px"
+ :anchor "bottom center"
+ )
+ :stacking "fg"
+ :exclusive false
+ (winosdwidget_vol)
+)
+
+(defwindow winosd_bright
+ :stacking "overlay"
+ :wm-ignore true
+ :monitor 0
+ :geometry (geometry
+ :x "0%"
+ :y "50px"
+ :width "100px"
+ :height "53px"
+ :anchor "bottom center"
+ )
+ :stacking "fg"
+ :exclusive false
+ (winosdwidget_bright)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/winoverview.yuck b/early/.config/eww/windows/winoverview.yuck
new file mode 100755
index 000000000..76ed78a11
--- /dev/null
+++ b/early/.config/eww/windows/winoverview.yuck
@@ -0,0 +1,137 @@
+(defwidget workspacebox [wspace]
+ (box ; Note: height 100px width 356px
+ :class "overview-ws overview-ws-${wspace[0].workspace.id == activews}"
+ (box
+ :space-evenly false
+ :orientation "h"
+ :style "
+ min-width: ${RES_WIDTH * OVERVIEW_SCALE}px;
+ min-height: ${RES_HEIGHT * OVERVIEW_SCALE}px;
+ "
+ (for ws-window in wspace
+ (box
+ :class "${ws-window.class == 'workspace' ? '' : 'overview-ws-window'}"
+ :style "
+ ${ws-window.address == selected ? 'border: 1px solid #FFFFFF' : ''};
+ ${ws-window.address == '_none' ? 'border: none' : ''};
+ margin-left: ${ws-window.at[0] * OVERVIEW_SCALE}px;
+ margin-top: ${ws-window.at[1] * OVERVIEW_SCALE}px;
+ margin-right: -${(ws-window.at[0] + ws-window.size[0]) * OVERVIEW_SCALE}px;
+ margin-bottom: ${RES_HEIGHT * OVERVIEW_SCALE - ((ws-window.at[1] + ws-window.size[1]) * OVERVIEW_SCALE)};
+ "
+ (eventbox
+ :onrightclick "scripts/selectwindow ${ws-window.address} '${EWW_CMD}' ${ws-window.workspace.id}"
+ :onmiddleclick "hyprctl dispatch closewindow address:${ws-window.address}"
+ :onclick "scripts/focuswindow ${ws-window.address} ${ws-window.workspace.id} && scripts/toggle-overview.sh --close &"
+ :onhover "${ws-window.class == 'workspace' ? '' : (EWW_CMD + ' update overview_hover_name=\'' + ws-window + '\'')}"
+ (box
+ :class "overview-background"
+ ; Uncomment below to enable thumbnail previews (VERY SLOW)
+ ; :style "
+ ; background-image: url('scripts/cache/thumbnails/${ws-window.address }.png');
+ ; "
+ (image
+ :class "overview-icon"
+ :path {ws-window.icon}
+ ; :image-width {round(ws-window.size[0] > ws-window.size[1] ? (ws-window.size[1] * 45 / 100 * OVERVIEW_SCALE) : (ws-window.size[0] * 45 / 100 * OVERVIEW_SCALE))}
+ ; :image-height {round(ws-window.size[0] > ws-window.size[1] ? (ws-window.size[1] * 45 / 100 * OVERVIEW_SCALE) : (ws-window.size[0] * 45 / 100 * OVERVIEW_SCALE))}
+ :image-width {round(ws-window.size[0] * OVERVIEW_SCALE * 45 / 100, 0)}
+ :image-height {round(ws-window.size[1] * OVERVIEW_SCALE * 45 / 100, 0)}
+
+ ; :style "
+ ; background-size: ${ws-window.size[0] > ws-window.size[1] ? 'auto 45%' : '45% auto'};
+ ; background-image: url('${ws-window.icon}')
+ ; ;
+ ; "
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwidget winoverview_widget []
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "thewholething"
+ (eventbox
+ :onclick "scripts/toggle-overview.sh --close &"
+ :onmiddleclick "scripts/toggle-overview.sh --close &"
+ :onrightclick "scripts/toggle-overview.sh --close &"
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ )
+ (eventbox
+ :onhoverlost `eww update overview_hover_name='{"class":"LMB: Focus | MMB: Close | RMB: Select/Move","title":"Activities Overview","workspace":{"id":5,"name":"5"},"icon": "/usr/share/icons/breeze-dark/actions/16/window.svg"}' &`
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "overview-window"
+ ; :space-evenly false
+ ; (label :text "${wsjsona}")
+ ; (label :text "${selected}")
+ (centerbox
+ :class "overview-window-title"
+ (label :halign "start" :style "margin: 5px;" :text "${overview_hover_name.class}")
+ (box
+ :space-evenly false
+ :orientation "h"
+ (image
+ :class "overview-topbar-icon overview-icon"
+ :path {overview_hover_name.icon}
+ :image-height 30
+ :image-width 30
+ ; :style "
+ ; background-image: url('${overview_hover_name.icon}');
+ ; "
+ )
+ (label :text "${overview_hover_name.title}")
+ )
+ (button
+ :halign "end"
+ :class "overview-topbar-button"
+ :onclick "scripts/toggle-overview.sh --close"
+ (label :text "")
+ )
+ )
+ (box
+ :orientation "h"
+ (for wspace in wsjsona
+ (workspacebox
+ :wspace {wspace}
+ )
+ )
+ )
+ (box
+ :orientation "h"
+ (for wspace in wsjsonb
+ (workspacebox
+ :wspace {wspace}
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow winoverview
+ :stacking "overlay"
+ :focusable true
+ :wm-ignore true
+ :monitor 0
+ :geometry (geometry
+ ; :height 1080
+ ; :width 1920
+ ; :y "103px"
+ :anchor "bottom center"
+ ; :y "0px"
+ ; :anchor "center center"
+ )
+ ; (testing)
+ (winoverview_widget)
+)
+
diff --git a/early/.config/eww/windows/winpowermenu.yuck b/early/.config/eww/windows/winpowermenu.yuck
new file mode 100755
index 000000000..3e5194950
--- /dev/null
+++ b/early/.config/eww/windows/winpowermenu.yuck
@@ -0,0 +1,70 @@
+(defwidget winpower []
+ (box
+ :space-evenly false
+ :orientation "v"
+ :style "
+ ${anim_open_winpowermenu ? 'transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ ${rev_winpowermenu ? '' : 'margin-bottom: -700px; margin-top: 700px;'}
+ "
+ (eventbox
+ :valign "start"
+ :onclick "scripts/toggle-winpowermenu.sh --close &"
+ :onmiddleclick "scripts/toggle-winpowermenu.sh --close &"
+ :onrightclick "scripts/toggle-winpowermenu.sh --close &"
+ (box
+ :class "box-that-is-there" :style "min-height: 1px;"
+ )
+ )
+ (box
+ :class "winpower-window"
+ :orientation "v"
+ :width 161
+ :space-evenly false
+ (button
+ :onclick "systemctl suspend &"
+ :class "winpower-button"
+ (box
+ :space-evenly false
+ (image :class "win-segoeicon"
+ :class "winpower-buttonicon"
+ :path "images/svg/dark/moon.svg"
+ :image-width 20 :image-height 20
+ )
+ (label :class "winbartext" :text "Sleep")
+ )
+ )
+ (button
+ :onclick "systemctl poweroff &"
+ :class "winpower-button"
+ (box
+ :space-evenly false
+ (label :xalign 0 :class "winpower-buttonicon win-segoeicon" :text "")
+ (label :xalign 0 :class "winbartext" :text "Shut down")
+ )
+ )
+ (button
+ :onclick "systemctl reboot &"
+ :class "winpower-button"
+ (box
+ :space-evenly false
+ (label :xalign 0 :class "winpower-buttonicon win-segoeicon" :text "")
+ (label :xalign 0 :class "winbartext" :text "Restart")
+ )
+ )
+ )
+ )
+)
+
+(defwindow winpowermenu
+ :wm-ignore true
+ :monitor 0
+ :focusable true
+ :namespace "noblur"
+ :geometry (geometry
+ :x "1140px"
+ :y "126px"
+ :width 161
+ :anchor "bottom left"
+ )
+ (winpower)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/winshadows.yuck b/early/.config/eww/windows/winshadows.yuck
new file mode 100755
index 000000000..1a75c752b
--- /dev/null
+++ b/early/.config/eww/windows/winshadows.yuck
@@ -0,0 +1,469 @@
+(defwidget winnotif_shadows_widget []
+ (centerbox
+ :space-evenly false
+ :orientation "v"
+ :style "
+ ${anim_open_winnotif ? 'transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ ${rev_winnotif ? '' : 'margin-right: -700px;'}
+ min-height: 1033px;
+ "
+ (box
+ :space-evenly false
+ :orientation "v"
+ :halign "start"
+ (eventbox
+ :valign "start"
+ :onclick "scripts/toggle-winnotif.sh --close &"
+ :onmiddleclick "scripts/toggle-winnotif.sh --close &"
+ :onrightclick "scripts/toggle-winnotif.sh --close &"
+ (box
+ :class "box-that-is-there" :style "min-height: 1px;"
+ )
+ )
+ (box
+ :class "winwin-shadow"
+ :space-evenly false
+ :orientation "v"
+ :style "margin-bottom:6px;"
+ (centerbox
+ (box)
+ (box)
+ (box
+ :class "icon"
+ :halign "end"
+ :space-evenly false
+ :style "margin: 19px; min-height: 21px;"
+ )
+ )
+ (box
+ :width 400
+ :valign "start"
+ :style "
+ min-height: ${rev_wincalendar ? 357 : 811}px;
+ transition: 150ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ "
+ (box
+ :space-evenly false
+ :orientation "v"
+ )
+ )
+ )
+ )
+ (box :valign "center")
+ ; Calendar
+ (box
+ :space-evenly false
+ :orientation "v"
+ :valign "end"
+ :height {rev_wincalendar ? 601 : 149}
+ :class "winwin-shadow"
+ :style "margin-bottom: 12px;"
+ )
+ )
+)
+
+(defwidget winnews_shadows_widget []
+ (box
+ :orientation "v" :space-evenly false
+ :style "
+ ${anim_open_winnews ? 'transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ ${rev_winnews ? '' : 'margin-left: -960px;'}
+ "
+ (box :space-evenly false :orientation "v"
+ :width {RES_WIDTH / 2}
+ :height {RES_HEIGHT - 51}
+ :class "winwin-shadow"
+ )
+ )
+)
+
+(defwidget winstart_shadows_widget []
+ (box
+ :space-evenly false
+ :orientation "v"
+ :style "
+ ${anim_open_winstart ? 'transition: 150ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 100ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ ${rev_winstart ? '' : 'margin-bottom: -900px;'}
+ "
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "winwin-top-shadow"
+ :height 113
+ :width 676
+ :style "
+ ${winsearch != '' ? 'min-width: 811px;' : 'min-width: 676px;'}
+ "
+ (box
+ :valign "end"
+ :space-evenly false
+ :class "winstart-search-prompt"
+ (box
+ :halign "start"
+ :class "winsearch-icon winstart-search-searchbox-icon"
+ )
+ )
+ )
+ (revealer
+ :reveal {winsearch != ''}
+ :transition "slidedown"
+ :duration "0ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "winwin-bottom-light-shadow"
+ :height 682
+ :width 676
+ :style "
+ ${winsearch != '' ? 'min-width: 811px;' : 'min-width: 676px;'}
+ "
+ ; Tag strip
+ (box
+ :class "winsearch-tag-strip"
+ :space-evenly false
+ )
+ (box
+ :height 627
+ :space-evenly false
+ :orientation "h"
+ :class "winsearch-pad"
+ :spacing 11
+ ; Search results list
+ (scroll
+ :width 404
+ (box
+ :width 404
+ :space-evenly false
+ :orientation "v"
+ :class "winsearch-result-list"
+ )
+ )
+ ; More options
+ (revealer
+ :reveal {winsearch != ''}
+ :transition "slideleft"
+ :duration "50ms"
+ ; Entry actions panel
+ (box
+ :orientation "v"
+ :space-evenly false
+ :width 404
+ )
+ )
+ )
+ )
+ )
+ (revealer
+ :reveal {winsearch == ''}
+ :transition "slidedown"
+ :duration "0ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "winwin-center-noseparator-shadow"
+ :height 600
+ :style "
+ ${winsearch != '' ? 'min-width: 811px;' : 'min-width: 676px;'}
+ "
+ (box
+ :space-evenly false
+ :orientation "h"
+ (revealer
+ :reveal {!winstart_allapps}
+ :transition "slideright"
+ :duration "250ms"
+ (revealer
+ :reveal {!winstart_allapps}
+ :transition "crossfade"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :width 674
+ (centerbox
+ :orientation "h"
+ :class "winsearch-section-box"
+ (label
+ :halign "start"
+ :class "winstart-section"
+ :text "Pinned"
+ )
+ (box)
+ (button
+ :halign "end"
+ :class "wintoggle-text winstart-button-allapps"
+ :onclick "scripts/toggle-allapps.sh --open &"
+ (box
+ :space-evenly false
+ :spacing 6
+ (label :text "All apps" :style "padding: 0 2px;")
+ (label :class "winstart-allapps-icon" :text "")
+ ; (box
+ ; :class "winstart-allapps-arrow"
+ ; )
+ )
+ )
+ )
+ (box
+ :class "winstart-pinnedapps"
+ :height 293
+ :orientation "v"
+ :space-evenly false
+ )
+ (centerbox
+ :orientation "h"
+ :class "winsearch-section-box"
+ (label
+ :halign "start"
+ :class "winstart-section"
+ :text "Recommended"
+ )
+ (box)
+ (box)
+ )
+ (box
+ :class "winstart-recommended"
+ :height 222
+ :orientation "v"
+ :space-evenly false
+ :valign "start"
+ )
+ )
+ )
+ )
+ (revealer
+ :reveal {winstart_allapps}
+ :transition "slideleft"
+ :duration "250ms"
+ (revealer
+ :reveal {winstart_allapps}
+ :transition "crossfade"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :width 674
+ (centerbox
+ :orientation "h"
+ :class "winsearch-section-box"
+ (label
+ :halign "start"
+ :class "winstart-section"
+ :text "All apps"
+ )
+ (box)
+ (button
+ :halign "end"
+ :class "wintoggle-text winstart-button-allapps"
+ :onclick "scripts/toggle-allapps.sh --close"
+ (box
+ :space-evenly false
+ :spacing 6
+ (label :class "winstart-allapps-icon" :text "")
+ (label :text "Back" :style "padding: 0 2px;")
+ ; (box
+ ; :class "winstart-allapps-arrow"
+ ; )
+ )
+ )
+ )
+ (scroll
+ :height 549
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "winstart-allapps-box"
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (box
+ :space-evenly false
+ :orientation "h"
+ :class "winwin-bottom-shadow winstart-bottom-pad"
+ :height 67
+ (box
+ :halign "start"
+ :space-evenly false
+ :class "winstart-user"
+ (box
+ :space-evenly false
+ :orientation "h"
+ :spacing 16
+ (box
+ :class "winstart-user-icon"
+ )
+ (label :class "wintoggle-text" :text "${username}")
+ )
+ )
+ (box)
+ (box
+ :halign "end"
+ :class "winstart-power-icon winstart-power-icon-${rev_winpowermenu}"
+ (image
+ :path "images/svg/dark/power.svg"
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwidget winactions_shadows_widget []
+ (box
+ :space-evenly false :spacing -12
+ :orientation "v"
+ :style "
+ ${anim_open_winactions ? 'transition: 150ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 150ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ ${rev_winactions ? '' : 'margin-bottom: -700px;'}
+ "
+ ; Media controls
+ (revealer
+ :reveal {mname_win.title != ''}
+ :transition "slideup"
+ :duration "200ms"
+ (box
+ :space-evenly false :orientation "v"
+ :height 207
+ :class "winwin-shadow"
+ :style "
+ min-height: 207px;
+ "
+ )
+ )
+ (box
+ :space-evenly false :orientation "v"
+ :class "winwin-shadow"
+ :style "
+ min-height: 433px;
+ min-width: 398px;
+ "
+ )
+ )
+)
+
+(defwidget winlang_shadows_widget []
+ (box
+ :space-evenly false
+ :orientation "v"
+ :style "
+ ${anim_open_winlang ? 'transition: 150ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 100ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ ${rev_winlang ? '' : 'margin-bottom: -700px;'}
+ "
+ (eventbox
+ :onclick "scripts/toggle-winlang.sh --close &"
+ :onmiddleclick "scripts/toggle-winlang.sh --close &"
+ :onrightclick "scripts/toggle-winlang.sh --close &"
+ (box
+ :class "box-that-is-there" :style "min-height: 1px;"
+ )
+ )
+ (box
+ :space-evenly false :orientation "v"
+ :class "winwin-shadow"
+ :width 420
+ (box
+ :space-evenly false :spacing 10
+ :style "padding: 15px;"
+ (label
+ :class "winlang-text"
+ )
+ )
+ (box
+ :space-evenly false :orientation "v"
+ (for language in langs
+ (box
+ :class "winlang-lang-false"
+ :height 84
+ )
+ )
+ )
+ (box
+ :class "winwin-bottom-pad"
+ (box
+ :class "winlang-bottom-button"
+ (label
+ :class "winlang-text"
+ :style "padding: 0 5px;"
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow winnotif_shadows
+ :wm-ignore true
+ :monitor 0
+ :focusable false
+ :namespace "noblur"
+ :geometry (geometry
+ :x "0px"
+ :y "51px"
+ :height 1029
+ :anchor "bottom right"
+ )
+ (winnotif_shadows_widget)
+)
+
+(defwindow winnews_shadows
+ :wm-ignore true
+ :monitor 0
+ :focusable false
+ :namespace "noblur"
+ :geometry (geometry
+ :x "0px"
+ :y "51px"
+ :height 1029
+ :anchor "bottom left"
+ )
+ (winnews_shadows_widget)
+)
+
+(defwindow winstart_shadows
+ :wm-ignore true
+ :monitor 0
+ :focusable false
+ :namespace "noblur"
+ :geometry (geometry
+ :x "0px"
+ :y "51px"
+ ; :height 788
+ :width 673
+ :anchor "bottom center"
+ )
+ (winstart_shadows_widget)
+)
+
+(defwindow winactions_shadows
+ :wm-ignore true
+ :monitor 0
+ :focusable false
+ :namespace "noblur"
+ :geometry (geometry
+ :x "0px"
+ :y "50px"
+ :anchor "bottom right"
+ )
+ (winactions_shadows_widget)
+)
+
+(defwindow winlang_shadows
+ :wm-ignore true
+ :monitor 0
+ :focusable false
+ :namespace "noblur"
+ :geometry (geometry
+ :x "0px"
+ :y "50px"
+ :anchor "bottom right"
+ )
+ (winlang_shadows_widget)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/winstart.yuck b/early/.config/eww/windows/winstart.yuck
new file mode 100755
index 000000000..19cb02036
--- /dev/null
+++ b/early/.config/eww/windows/winstart.yuck
@@ -0,0 +1,585 @@
+(defwidget winstart_widget []
+ (box
+ :space-evenly false
+ :orientation "v"
+ :style "
+ ${anim_open_winstart ? 'transition: 150ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 100ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ ${rev_winstart ? '' : 'margin-bottom: -900px;'}
+ "
+ (eventbox
+ :valign "start"
+ :onclick "scripts/toggle-winstart.sh --close &"
+ :onmiddleclick "scripts/toggle-winstart.sh --close &"
+ :onrightclick "scripts/toggle-winstart.sh --close &"
+ (box
+ :class "box-that-is-there" :style "min-height: 1px;"
+ )
+ )
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "winwin-top"
+ :height 113
+ :width 676
+ :style "
+ ${winsearch != '' ? 'min-width: 811px;' : 'min-width: 676px;'}
+ "
+ (overlay
+ (box
+ :valign "end"
+ :space-evenly false
+ :class "winstart-search-prompt"
+ (box
+ :halign "start"
+ :class "winsearch-icon winstart-search-searchbox-icon"
+ )
+ (revealer
+ :reveal {winsearch == ''}
+ :halign "start"
+ :duration "100ms"
+ (label :class "winstart-search-prompt-text" :xalign 0 :text "Type to search")
+ )
+ )
+ (box
+ :valign "end"
+ :class "winstart-search-accent"
+ )
+ (input
+ :class "winstart-search-contents"
+ :onchange "${EWW_CMD} update winsearch='${winsearch_prefix}{}' && ${EWW_CMD} update winsearch_results=\"$(scripts/appsearch '${winsearch_prefix}{}' --updateinfo)\" &"
+ :onaccept "scripts/launchapp '${winsearch_results == '[]' ? (winsearch_prefix + {}) : winsearch_results[0].exec}' &"
+ )
+ )
+ )
+ (revealer
+ :reveal {winsearch != ''}
+ :transition "slidedown"
+ :duration "0ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "winwin-bottom-light"
+ :height 682
+ :width 676
+ :style "
+ ${winsearch != '' ? 'min-width: 811px;' : 'min-width: 676px;'}
+ "
+ ; Tag strip
+ (box
+ :class "winsearch-tag-strip"
+ :space-evenly false
+ (eventbox
+ :onclick "${EWW_CMD} update winsearch_prefix='' && ${EWW_CMD} update winsearch='${winsearch_prefix} ' && ${EWW_CMD} update winsearch_results=\"$(scripts/appsearch ' ' --updateinfo)\" &"
+ (box :class "winsearch-tag-${winsearch_prefix == ''}"
+ (label :class "wintoggle-text" :text "All")
+ )
+ )
+ (eventbox
+ :onclick "${EWW_CMD} update winsearch_prefix='>load ' && ${EWW_CMD} update winsearch='${winsearch_prefix} ' && ${EWW_CMD} update winsearch_results=\"$(scripts/appsearch '>load ' --updateinfo)\" &"
+ (box :class "winsearch-tag-${winsearch_prefix == '>load '}"
+ (label :class "wintoggle-text" :text "Load theme")
+ )
+ )
+ (eventbox
+ :onclick "${EWW_CMD} update winsearch_prefix='1*' && ${EWW_CMD} update winsearch='${winsearch_prefix} ' && ${EWW_CMD} update winsearch_results=\"$(scripts/appsearch --calculator --updateinfo)\" &"
+ (box :class "winsearch-tag-${winsearch_prefix == '1*'}"
+ (label :class "wintoggle-text" :text "Calculate")
+ )
+ )
+ ; (eventbox
+ ; :onclick "${EWW_CMD} update winsearch_prefix='>_ ' && ${EWW_CMD} update winsearch='${winsearch_prefix}${winsearch}' && ${EWW_CMD} update winsearch_results=\"$(scripts/appsearch '${winsearch_prefix}${winsearch}')\" &"
+ ; (box :class "winsearch-tag-${winsearch_prefix == '>_ '}"
+ ; (label :class "wintoggle-text" :text "Execute")
+ ; )
+ ; )
+ )
+ (box
+ :height 627
+ :space-evenly false
+ :orientation "h"
+ :class "winsearch-pad"
+ :spacing 11
+ ; Search results list
+ (scroll
+ :width 404
+ (box
+ :width 404
+ :space-evenly false
+ :orientation "v"
+ :class "winsearch-result-list"
+ (revealer
+ :reveal {winsearch_results != '[]'}
+ :transition "slidedown"
+ :duration "0ms"
+ (label
+ :halign "start"
+ :class "winstart-section winsearch-section"
+ :text "${winsearch_prefix == '' ? 'Results' :
+ (winsearch_prefix == '>load ' ? 'Themes' :
+ (winsearch_prefix == '1*' ? 'Calculator' : 'Execute'))}"
+ )
+ )
+ (box
+ :space-evenly false
+ :orientation "v"
+ (for result in winsearch_results
+ (overlay
+ (input
+ :value "${result.name}"
+ :class "winsearch-result"
+ :style "
+ background-position: -0.5% center;
+ background-size: auto 65%;
+ "
+ :onaccept "scripts/launchapp '${result.exec}' && scripts/toggle-winstart.sh --close &"
+ )
+ (image
+ :halign "start"
+ :class "winsearch-result-icon"
+ :path {(result.icon != '' && result.icon != 'null') ? result.icon : 'images/svg/dark/appgeneric.svg'}
+ :image-width 28
+ :image-height 28
+ )
+ )
+ )
+ )
+ (label
+ :halign "start"
+ :class "winstart-section winsearch-section"
+ :text "Run command"
+ )
+ (overlay
+ (input
+ :value {winsearch}
+ :class "winsearch-result"
+ :onaccept "scripts/launchapp '${winsearch_prefix}{}' &"
+ )
+ (image
+ :halign "start"
+ :class "winsearch-result-icon"
+ :path "images/svg/dark/protocol.svg"
+ :image-width 28
+ :image-height 28
+ )
+ )
+ (label
+ :halign "start"
+ :class "winstart-section winsearch-section"
+ :text "Search the web"
+ )
+ (overlay
+ (input
+ :value {winsearch}
+ :class "winsearch-result"
+ :onaccept "xdg-open 'https://www.google.com/search?q={}' && scripts/toggle-winstart.sh --close &"
+ )
+ (image
+ :halign "start"
+ :class "winsearch-result-icon"
+ :path "images/svg/dark/search-fluent.svg"
+ :image-width 28
+ :image-height 28
+ )
+ )
+ )
+ )
+ ; More options
+ (revealer
+ :reveal {winsearch != ''}
+ :transition "slideleft"
+ :duration "50ms"
+ ; Entry actions panel
+ (box
+ :orientation "v"
+ :space-evenly false
+ :class "winsearch-actions-box"
+ :width 404
+ (image
+ :halign "center"
+ :class "winsearch-result-icon-big"
+ :path {(winsearch_actions.icon != '' && winsearch_actions.icon != 'null') ? winsearch_actions.icon : 'images/svg/dark/appgeneric.svg'}
+ :image-width 67
+ :image-height 67
+ )
+ (label
+ :class "winsearch-result-actions-title"
+ :text {winsearch_actions.name}
+ )
+ (label
+ :class "winsearch-result-actions-subtext"
+ :text {winsearch_actions_type}
+ )
+ (box
+ :class "winsearch-separator"
+ )
+ ; Actions
+ (box
+ :orientation "v"
+ :space-evenly false
+ (revealer
+ :reveal {winsearch_actions_type == 'Application'}
+ :transition "slidedown"
+ :duration "0ms"
+ (button
+ :class "winsearch-actions-button"
+ :onclick "scripts/launchapp '${winsearch_actions.exec}' &"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 13
+ (image
+ :class "winsearch-actions-icon"
+ :path "images/svg/open.svg"
+ :image-width 20
+ :image-height 20
+ )
+ (label :text "Run")
+ )
+ )
+ )
+ (revealer
+ :reveal {winsearch_actions_type == 'Application'}
+ :transition "slidedown"
+ :duration "0ms"
+ (button
+ :class "winsearch-actions-button"
+ :onclick "scripts/launchapp 'xdg-open ${winsearch_actions.filepath}'&"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 13
+ (image
+ :class "winsearch-actions-icon"
+ :path "images/svg/folderopen.svg"
+ :image-width 20
+ :image-height 20
+ )
+ (label :text "Open desktop entry")
+ )
+ )
+ )
+ (revealer
+ :reveal {winsearch_actions_type == 'Math result'}
+ :transition "slidedown"
+ :duration "0ms"
+ (button
+ :class "winsearch-actions-button"
+ :onclick "scripts/launchapp '${winsearch_actions.exec}' &"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 13
+ (image
+ :class "winsearch-actions-icon"
+ :path "images/svg/copy.svg"
+ :image-width 20
+ :image-height 20
+ )
+ (label :text "Copy result")
+ )
+ )
+ )
+ (revealer
+ :reveal {winsearch_actions_type == 'Color theme'}
+ :transition "slidedown"
+ :duration "0ms"
+ (button
+ :class "winsearch-actions-button"
+ :onclick "scripts/launchapp '${winsearch_actions.exec}' &"
+ (box
+ :orientation "h"
+ :space-evenly false
+ :spacing 13
+ (image
+ :class "winsearch-actions-icon"
+ :path "images/svg/applycolor.svg"
+ :image-width 20
+ :image-height 20
+ )
+ (label :text "Apply colorscheme")
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (revealer
+ :reveal {winsearch == ''}
+ :transition "slidedown"
+ :duration "0ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "winwin-center-noseparator"
+ :height 581
+ :style "
+ ${winsearch != '' ? 'min-width: 811px;' : 'min-width: 676px;'}
+ "
+ (box
+ :space-evenly false
+ :orientation "h"
+ (revealer
+ :reveal {!winstart_allapps}
+ :transition "slideright"
+ :duration "250ms"
+ (revealer
+ :reveal {!winstart_allapps}
+ :transition "crossfade"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :width 674
+ (centerbox
+ :orientation "h"
+ :class "winsearch-section-box"
+ (label
+ :halign "start"
+ :class "winstart-section"
+ :text "Pinned"
+ )
+ (box)
+ (button
+ :halign "end"
+ :class "wintoggle-text winstart-button-allapps"
+ :onclick "scripts/toggle-allapps.sh --open &"
+ (box
+ :space-evenly false
+ :spacing 6
+ (label :text "All apps" :style "padding: 0 2px;")
+ (label :class "winstart-allapps-icon" :text "")
+ ; (box
+ ; :class "winstart-allapps-arrow"
+ ; )
+ )
+ )
+ )
+ (box
+ :class "winstart-pinnedapps"
+ :height 293
+ :orientation "v"
+ :space-evenly false
+ (for row in pinnedapps
+ (box
+ :orientation "h"
+ :space-evenly false
+ (for app in row
+ (eventbox
+ :class "winstart-pinnedapps-entry"
+ :onclick "scripts/toggle-winstart.sh --close && ${app.exec}"
+ (box
+ :orientation "v"
+ :space-evenly false
+ :class "winstart-pinnedapps-entry-pad"
+ :width 101
+ :height 88
+ (box
+ :class "winstart-pinnedapps-icon"
+ :style "
+ min-width: 33px;
+ min-height: 33px;
+ background-image: url('${app.icon}');
+ background-position: center;
+ background-size: auto 100%;
+ "
+ )
+ (label
+ :limit-width 12
+ :class "wintoggle-text"
+ :style "margin-top: 4px;"
+ :text "${app.name}"
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (centerbox
+ :orientation "h"
+ :class "winsearch-section-box"
+ (label
+ :halign "start"
+ :class "winstart-section"
+ :text "Recommended"
+ )
+ (box)
+ (box)
+ )
+ (box
+ :class "winstart-recommended"
+ :height 222
+ :orientation "v"
+ :space-evenly false
+ :valign "start"
+ (for recrow in recommended
+ (box
+ :orientation "h"
+ :space-evenly false
+ :valign "start"
+ :spacing 20
+ (for entry in recrow
+ (eventbox
+ :class "winstart-recommended-entry"
+ :onclick "scripts/toggle-winstart.sh --close && ${entry.exec}"
+ (box
+ :valign "start"
+ :orientation "h"
+ :space-evenly false
+ :width 286
+ :height 66
+ :class "winstart-recommended-entry-pad"
+ ; Recommended tile contents here
+ (box
+ :halign "start"
+ :class "winstart-recommended-icon"
+ :style "
+ min-width: 33px;
+ min-height: 33px;
+ background-image: url('${entry.icon}');
+ background-position: center;
+ background-size: 100% auto;
+ "
+ )
+ (box
+ :orientation "v"
+ :space-evenly false
+ :class "winstart-recommended-text"
+ (label :xalign 0 :class "wintoggle-text winstart-recommended-name" :text "${entry.name}" :limit-width 26)
+ (label :xalign 0 :class "wintoggle-text winstart-recommended-subtext" :text "${entry.subtext}" :limit-width 29)
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (revealer
+ :reveal {winstart_allapps}
+ :transition "slideleft"
+ :duration "250ms"
+ (revealer
+ :reveal {winstart_allapps}
+ :transition "crossfade"
+ :duration "200ms"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :width 674
+ (centerbox
+ :orientation "h"
+ :class "winsearch-section-box"
+ (label
+ :halign "start"
+ :class "winstart-section"
+ :text "All apps"
+ )
+ (box)
+ (button
+ :halign "end"
+ :class "wintoggle-text winstart-button-allapps"
+ :onclick "scripts/toggle-allapps.sh --close"
+ (box
+ :space-evenly false
+ :spacing 6
+ (label :class "winstart-allapps-icon" :text "")
+ (label :text "Back" :style "padding: 0 2px;")
+ ; (box
+ ; :class "winstart-allapps-arrow"
+ ; )
+ )
+ )
+ )
+ (scroll
+ :height 549
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "winstart-allapps-box"
+ (for app in allapps
+ (button
+ :class "winstart-allapps-app"
+ :onclick "scripts/toggle-winstart.sh --close && gtk-launch ${app.filename} &"
+ (box
+ :space-evenly false
+ :orientation "h"
+ (revealer
+ :transition "slideright"
+ :duration "0ms"
+ :reveal {app.icon != '_letter'}
+ (image
+ :class "winstart-allapps-app-icon"
+ :path {(app.icon != '_letter' && app.icon != '') ? app.icon : 'images/svg/dark/app.svg'}
+ :image-height 25
+ :image-width 25
+ )
+ )
+ (label
+ :class "winbartext winstart-allapps-appname"
+ :text {app.name}
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (centerbox
+ :orientation "h"
+ :class "winwin-bottom winstart-bottom-pad"
+ :height 67
+ (button
+ :halign "start"
+ :class "winstart-user"
+ :onclick "scripts/toggle-winstart.sh --close && gnome-control-center user-accounts &"
+ (box
+ :space-evenly false
+ :orientation "h"
+ :spacing 16
+ (box
+ :class "winstart-user-icon"
+ )
+ (label :class "wintoggle-text" :text "${username}")
+ )
+ )
+ (box)
+ (button
+ :halign "end"
+ :class "winstart-power-icon winstart-power-icon-${rev_winpowermenu}"
+ :onclick "scripts/toggle-winpowermenu.sh &"
+ (image
+ :path "images/svg/dark/power.svg"
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow winstart
+ :wm-ignore true
+ :monitor 0
+ :focusable true
+ :geometry (geometry
+ :x "0px"
+ :y "51px"
+ ; :height 788
+ :width 673
+ :anchor "bottom center"
+ )
+ (winstart_widget)
+)
\ No newline at end of file
diff --git a/early/.config/eww/windows/wintaskview.yuck b/early/.config/eww/windows/wintaskview.yuck
new file mode 100755
index 000000000..b2b8b15ab
--- /dev/null
+++ b/early/.config/eww/windows/wintaskview.yuck
@@ -0,0 +1,217 @@
+(defwidget winworkspacebox [wspace]
+ (box ; Note: height 100px width 356px
+ :space-evenly false :orientation "v" :spacing 3
+ :class "taskview-ws taskview-ws-${wspace[0].workspace.id == activews}"
+ (label
+ :class "wintaskview-text"
+ :xalign 0
+ :text "Desktop ${wspace[0].workspace.id}"
+ )
+ (box
+ :space-evenly false :orientation "h"
+ :style "
+ min-width: ${RES_WIDTH * TASKVIEW_SCALE}px;
+ min-height: ${RES_HEIGHT * TASKVIEW_SCALE}px;
+ "
+ (overlay
+ (box ; image doesnt do rounding so use css background image
+ :class "wintaskview-workspace-bg"
+ ; :path "./images/wallpaper/wallpaper_small"
+ :style "
+ min-width: ${RES_WIDTH * TASKVIEW_SCALE}px;
+ min-height: ${RES_HEIGHT * TASKVIEW_SCALE}px;
+ background-image: url('./images/wallpaper/wallpaper_small');
+ "
+ :width {round(RES_WIDTH * TASKVIEW_SCALE, 0)}
+ :height {round(RES_HEIGHT * TASKVIEW_SCALE, 0)}
+ )
+ (box
+ :space-evenly false :orientation "h"
+ (for ws-window in wspace
+ (box
+ :class "${ws-window.class == 'workspace' ? '' : 'taskview-ws-window'}"
+ :style "
+ ${ws-window.address == selected ? 'border: 1px solid #FFFFFF' : ''};
+ ${ws-window.address == '_none' ? 'border: none' : ''};
+ margin-left: ${ws-window.at[0] * TASKVIEW_SCALE}px;
+ margin-top: ${ws-window.at[1] * TASKVIEW_SCALE}px;
+ margin-right: -${(ws-window.at[0] + ws-window.size[0]) * TASKVIEW_SCALE}px;
+ margin-bottom: ${RES_HEIGHT * TASKVIEW_SCALE - ((ws-window.at[1] + ws-window.size[1]) * TASKVIEW_SCALE)};
+ "
+ (eventbox
+ :onrightclick "scripts/selectwindow ${ws-window.address} '${EWW_CMD}' ${ws-window.workspace.id}"
+ :onmiddleclick "hyprctl dispatch closewindow address:${ws-window.address}"
+ :onclick "scripts/focuswindow ${ws-window.address} ${ws-window.workspace.id} scripts/toggle-wintaskview.sh --close &"
+ :onhover "${ws-window.class == 'workspace' ? '' : (EWW_CMD + ' update overview_hover_name=\'' + ws-window + '\'')}"
+ (box
+ :class "overview-background"
+ ; Uncomment below to enable thumbnail previews (VERY SLOW)
+ ; :style "
+ ; background-image: url('scripts/cache/thumbnails/${ws-window.address }.png');
+ ; "
+ (image
+ :class "overview-icon"
+ :path {ws-window.icon}
+ :image-width {round(ws-window.size[0] * TASKVIEW_SCALE * 45 / 100, 0)}
+ :image-height {round(ws-window.size[1] * TASKVIEW_SCALE * 45 / 100, 0)}
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwidget wintaskview_widget []
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "thewholething"
+ (eventbox
+ :onclick "scripts/toggle-wintaskview.sh --close &"
+ (overlay
+ (box
+ :width RES_WIDTH :height {RES_HEIGHT - 50}
+ :class "wintaskview-bg"
+ )
+ (box
+ :orientation "h" :space-evenly false
+ :halign "fill" :valign "start" :height {RES_HEIGHT - WINTASKVIEW_RESERVED_BOTTOM}
+ (for workspace in taskviewlayout
+ (revealer
+ :reveal {arraylength(workspace) != 0 && workspace[0][0]["workspace"]["id"] == activews}
+ :transition "slideright"
+ :duration "0ms"
+ (scroll
+ :hscroll false :vscroll true
+ :width {RES_WIDTH}
+ :height {RES_HEIGHT - WINTASKVIEW_RESERVED_BOTTOM}
+ (box
+ :space-evenly false :orientation "v" :spacing WINTASKVIEW_SPACING
+ :style "padding: ${WINTASKVIEW_SPACING}"
+ :valign "center"
+ (for row in workspace
+ (box
+ :space-evenly false :spacing WINTASKVIEW_SPACING
+ :halign "center"
+ :valign "center"
+ :height {
+ (MIN_ROW_HEIGHT > (RES_HEIGHT - WINTASKVIEW_RESERVED_BOTTOM - WINTASKVIEW_SPACING) / arraylength(workspace) - 51 - WINTASKVIEW_SPACING) ?
+ MIN_ROW_HEIGHT :
+ (RES_HEIGHT - WINTASKVIEW_RESERVED_BOTTOM - WINTASKVIEW_SPACING) / arraylength(workspace) - 51 - WINTASKVIEW_SPACING
+ }
+ (for window in row
+ (box
+ :class "${window.class == 'workspace' ? '' : 'taskview-thisws-window'}"
+ :valign "center"
+ :style `
+ ${window.address == selected ? 'border: 1px solid #FFFFFF' : ''};
+ ${window.address == '_none' ? 'border: none' : ''};
+ min-width: ${window["size"][0]}px;
+ min-height: ${window["size"][1]}px;
+ `
+ (eventbox
+ :onrightclick "scripts/selectwindow ${window.address} '${EWW_CMD}' ${window.workspace.id}"
+ :onmiddleclick "hyprctl dispatch closewindow address:${window.address}"
+ :onclick "scripts/focuswindow ${window.address} ${window.workspace.id} && hyprctl dispatch bringactivetotop && scripts/toggle-wintaskview.sh --close &"
+ ; :onhover "${ws-window.class == 'workspace' ? '' : (EWW_CMD + ' update overview_hover_name=\'' + ws-window + '\'')}"
+ (box
+ :orientation "v" :space-evenly false
+ :class "overview-background"
+ (box ;
+ :height 49 :space-evenly false :spacing 10
+ :orientation "h"
+ :style "padding: 0 14px;"
+ (image
+ :vexpand true
+ :class "overview-icon"
+ :path {window.icon}
+ :image-width 25
+ :image-height 25
+ ; :image-width {round(window.size[0] * TASKVIEW_SCALE * 45 / 100, 0)}
+ ; :image-height {round(window.size[1] * TASKVIEW_SCALE * 45 / 100, 0)}
+ )
+ (label
+ :hexpand true :xalign 0
+ :class "wintaskview-text"
+ :limit-width {round(window.size[0] / 9, 0)}
+ :text "${window.title}"
+ )
+ ; (button
+ ; (label
+ ; :class "wintaskview-thisws-window-close"
+ ; :text ""
+ ; )
+ ; )
+ )
+ (image
+ :vexpand true
+ :path {window.icon}
+ :class "taskview-thisws-window-thumbnail"
+ :image-width {round(window.size[0] * 25 / 100, 0)}
+ :image-height {round(window.size[1] * 25 / 100, 0)}
+ ; :image-width {round(window.size[0] * TASKVIEW_SCALE * 45 / 100, 0)}
+ ; :image-height {round(window.size[1] * TASKVIEW_SCALE * 45 / 100, 0)}
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (box
+ :valign "end"
+ :class "wintaskview-workspaces-bg"
+ :style "
+ ${anim_open_wintaskview ? 'transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);' : 'transition: 100ms cubic-bezier(0.3, 0, 0.8, 0.15);'}
+ ${rev_wintaskview ? '' : 'margin-bottom: -900px;'}
+ min-height: ${RES_HEIGHT * TASKVIEW_SCALE}px;
+ "
+ (scroll
+ :hscroll true
+ :vscroll false
+ (box
+ :orientation "h" :space-evenly false
+ :halign "center"
+ (box
+ :orientation "h" :space-evenly false
+ (for wspace in wsjsona
+ (winworkspacebox
+ :wspace {wspace}
+ )
+ )
+ )
+ (box
+ :orientation "h" :space-evenly false
+ (for wspace in wsjsonb
+ (winworkspacebox
+ :wspace {wspace}
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwindow wintaskview
+ :stacking "overlay"
+ :wm-ignore true
+ :focusable true
+ :monitor 0
+ :geometry (geometry
+ :anchor "top center"
+ )
+ (wintaskview_widget)
+)
diff --git a/early/.config/fish/completions/fisher.fish b/early/.config/fish/completions/fisher.fish
new file mode 100755
index 000000000..6d23ce490
--- /dev/null
+++ b/early/.config/fish/completions/fisher.fish
@@ -0,0 +1,7 @@
+complete --command fisher --exclusive --long help --description "Print help"
+complete --command fisher --exclusive --long version --description "Print version"
+complete --command fisher --exclusive --condition __fish_use_subcommand --arguments install --description "Install plugins"
+complete --command fisher --exclusive --condition __fish_use_subcommand --arguments update --description "Update installed plugins"
+complete --command fisher --exclusive --condition __fish_use_subcommand --arguments remove --description "Remove installed plugins"
+complete --command fisher --exclusive --condition __fish_use_subcommand --arguments list --description "List installed plugins matching regex"
+complete --command fisher --exclusive --condition "__fish_seen_subcommand_from update remove" --arguments "(fisher list)"
diff --git a/early/.config/fish/config.fish b/early/.config/fish/config.fish
new file mode 100755
index 000000000..bfa2bf74c
--- /dev/null
+++ b/early/.config/fish/config.fish
@@ -0,0 +1,20 @@
+function fish_prompt -d "Write out the prompt"
+ # This shows up as USER@HOST /home/user/ >, with the directory colored
+ # $USER and $hostname are set by fish, so you can just use them
+ # instead of using `whoami` and `hostname`
+ printf '%s@%s %s%s%s > ' $USER $hostname \
+ (set_color $fish_color_cwd) (prompt_pwd) (set_color normal)
+end
+
+if status is-interactive
+ # Commands to run in interactive sessions can go here
+ set fish_greeting
+
+end
+
+starship init fish | source
+
+# function fish_prompt
+# set_color cyan; echo (pwd)
+# set_color green; echo '> '
+# end
\ No newline at end of file
diff --git a/early/.config/fish/fish_plugins b/early/.config/fish/fish_plugins
new file mode 100755
index 000000000..594dfc033
--- /dev/null
+++ b/early/.config/fish/fish_plugins
@@ -0,0 +1 @@
+jorgebucaran/fisher
diff --git a/early/.config/fish/fish_variables b/early/.config/fish/fish_variables
new file mode 100755
index 000000000..479710902
--- /dev/null
+++ b/early/.config/fish/fish_variables
@@ -0,0 +1,34 @@
+# This file contains fish universal variable definitions.
+# VERSION: 3.0
+SETUVAR __fish_initialized:3400
+SETUVAR _fisher_jorgebucaran_2F_fisher_files:\x7e/\x2econfig/fish/functions/fisher\x2efish\x1e\x7e/\x2econfig/fish/completions/fisher\x2efish
+SETUVAR _fisher_plugins:jorgebucaran/fisher
+SETUVAR _fisher_upgraded_to_4_4:\x1d
+SETUVAR fish_color_autosuggestion:555\x1ebrblack
+SETUVAR fish_color_cancel:\x2dr
+SETUVAR fish_color_command:blue
+SETUVAR fish_color_comment:red
+SETUVAR fish_color_cwd:green
+SETUVAR fish_color_cwd_root:red
+SETUVAR fish_color_end:green
+SETUVAR fish_color_error:brred
+SETUVAR fish_color_escape:brcyan
+SETUVAR fish_color_history_current:\x2d\x2dbold
+SETUVAR fish_color_host:normal
+SETUVAR fish_color_host_remote:yellow
+SETUVAR fish_color_normal:normal
+SETUVAR fish_color_operator:brcyan
+SETUVAR fish_color_param:cyan
+SETUVAR fish_color_quote:yellow
+SETUVAR fish_color_redirection:cyan\x1e\x2d\x2dbold
+SETUVAR fish_color_search_match:\x2d\x2dbackground\x3d111
+SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack
+SETUVAR fish_color_status:red
+SETUVAR fish_color_user:brgreen
+SETUVAR fish_color_valid_path:\x2d\x2dunderline
+SETUVAR fish_key_bindings:fish_default_key_bindings
+SETUVAR fish_pager_color_completion:normal
+SETUVAR fish_pager_color_description:B3A06D\x1eyellow\x1e\x2di
+SETUVAR fish_pager_color_prefix:cyan\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
+SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
+SETUVAR fish_pager_color_selected_background:\x2dr
diff --git a/early/.config/fish/functions/fisher.fish b/early/.config/fish/functions/fisher.fish
new file mode 100755
index 000000000..c0a86fa4e
--- /dev/null
+++ b/early/.config/fish/functions/fisher.fish
@@ -0,0 +1,240 @@
+function fisher --argument-names cmd --description "A plugin manager for Fish"
+ set --query fisher_path || set --local fisher_path $__fish_config_dir
+ set --local fisher_version 4.4.3
+ set --local fish_plugins $__fish_config_dir/fish_plugins
+
+ switch "$cmd"
+ case -v --version
+ echo "fisher, version $fisher_version"
+ case "" -h --help
+ echo "Usage: fisher install Install plugins"
+ echo " fisher remove Remove installed plugins"
+ echo " fisher update Update installed plugins"
+ echo " fisher update Update all installed plugins"
+ echo " fisher list [] List installed plugins matching regex"
+ echo "Options:"
+ echo " -v or --version Print version"
+ echo " -h or --help Print this help message"
+ echo "Variables:"
+ echo " \$fisher_path Plugin installation path. Default: $__fish_config_dir" | string replace --regex -- $HOME \~
+ case ls list
+ string match --entire --regex -- "$argv[2]" $_fisher_plugins
+ case install update remove
+ isatty || read --local --null --array stdin && set --append argv $stdin
+
+ set --local install_plugins
+ set --local update_plugins
+ set --local remove_plugins
+ set --local arg_plugins $argv[2..-1]
+ set --local old_plugins $_fisher_plugins
+ set --local new_plugins
+
+ test -e $fish_plugins && set --local file_plugins (string match --regex -- '^[^\s]+$' <$fish_plugins)
+
+ if ! set --query argv[2]
+ if test "$cmd" != update
+ echo "fisher: Not enough arguments for command: \"$cmd\"" >&2 && return 1
+ else if ! set --query file_plugins
+ echo "fisher: \"$fish_plugins\" file not found: \"$cmd\"" >&2 && return 1
+ end
+ set arg_plugins $file_plugins
+ end
+
+ for plugin in $arg_plugins
+ set plugin (test -e "$plugin" && realpath $plugin || string lower -- $plugin)
+ contains -- "$plugin" $new_plugins || set --append new_plugins $plugin
+ end
+
+ if set --query argv[2]
+ for plugin in $new_plugins
+ if contains -- "$plugin" $old_plugins
+ test "$cmd" = remove &&
+ set --append remove_plugins $plugin ||
+ set --append update_plugins $plugin
+ else if test "$cmd" = install
+ set --append install_plugins $plugin
+ else
+ echo "fisher: Plugin not installed: \"$plugin\"" >&2 && return 1
+ end
+ end
+ else
+ for plugin in $new_plugins
+ contains -- "$plugin" $old_plugins &&
+ set --append update_plugins $plugin ||
+ set --append install_plugins $plugin
+ end
+
+ for plugin in $old_plugins
+ contains -- "$plugin" $new_plugins || set --append remove_plugins $plugin
+ end
+ end
+
+ set --local pid_list
+ set --local source_plugins
+ set --local fetch_plugins $update_plugins $install_plugins
+ set --local fish_path (status fish-path)
+
+ echo (set_color --bold)fisher $cmd version $fisher_version(set_color normal)
+
+ for plugin in $fetch_plugins
+ set --local source (command mktemp -d)
+ set --append source_plugins $source
+
+ command mkdir -p $source/{completions,conf.d,themes,functions}
+
+ $fish_path --command "
+ if test -e $plugin
+ command cp -Rf $plugin/* $source
+ else
+ set temp (command mktemp -d)
+ set repo (string split -- \@ $plugin) || set repo[2] HEAD
+
+ if set path (string replace --regex -- '^(https://)?gitlab.com/' '' \$repo[1])
+ set name (string split -- / \$path)[-1]
+ set url https://gitlab.com/\$path/-/archive/\$repo[2]/\$name-\$repo[2].tar.gz
+ else
+ set url https://api.github.com/repos/\$repo[1]/tarball/\$repo[2]
+ end
+
+ echo Fetching (set_color --underline)\$url(set_color normal)
+
+ if curl --silent -L \$url | tar -xzC \$temp -f - 2>/dev/null
+ command cp -Rf \$temp/*/* $source
+ else
+ echo fisher: Invalid plugin name or host unavailable: \\\"$plugin\\\" >&2
+ command rm -rf $source
+ end
+
+ command rm -rf \$temp
+ end
+
+ set files $source/* && string match --quiet --regex -- .+\.fish\\\$ \$files
+ " &
+
+ set --append pid_list (jobs --last --pid)
+ end
+
+ wait $pid_list 2>/dev/null
+
+ for plugin in $fetch_plugins
+ if set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)] && test ! -e $source
+ if set --local index (contains --index -- "$plugin" $install_plugins)
+ set --erase install_plugins[$index]
+ else
+ set --erase update_plugins[(contains --index -- "$plugin" $update_plugins)]
+ end
+ end
+ end
+
+ for plugin in $update_plugins $remove_plugins
+ if set --local index (contains --index -- "$plugin" $_fisher_plugins)
+ set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files
+
+ if contains -- "$plugin" $remove_plugins
+ for name in (string replace --filter --regex -- '.+/conf\.d/([^/]+)\.fish$' '$1' $$plugin_files_var)
+ emit {$name}_uninstall
+ end
+ printf "%s\n" Removing\ (set_color red --bold)$plugin(set_color normal) " "$$plugin_files_var | string replace -- \~ ~
+ set --erase _fisher_plugins[$index]
+ end
+
+ command rm -rf (string replace -- \~ ~ $$plugin_files_var)
+
+ functions --erase (string replace --filter --regex -- '.+/functions/([^/]+)\.fish$' '$1' $$plugin_files_var)
+
+ for name in (string replace --filter --regex -- '.+/completions/([^/]+)\.fish$' '$1' $$plugin_files_var)
+ complete --erase --command $name
+ end
+
+ set --erase $plugin_files_var
+ end
+ end
+
+ if set --query update_plugins[1] || set --query install_plugins[1]
+ command mkdir -p $fisher_path/{functions,themes,conf.d,completions}
+ end
+
+ for plugin in $update_plugins $install_plugins
+ set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)]
+ set --local files $source/{functions,themes,conf.d,completions}/*
+
+ if set --local index (contains --index -- $plugin $install_plugins)
+ set --local user_files $fisher_path/{functions,themes,conf.d,completions}/*
+ set --local conflict_files
+
+ for file in (string replace -- $source/ $fisher_path/ $files)
+ contains -- $file $user_files && set --append conflict_files $file
+ end
+
+ if set --query conflict_files[1] && set --erase install_plugins[$index]
+ echo -s "fisher: Cannot install \"$plugin\": please remove or move conflicting files first:" \n" "$conflict_files >&2
+ continue
+ end
+ end
+
+ for file in (string replace -- $source/ "" $files)
+ command cp -RLf $source/$file $fisher_path/$file
+ end
+
+ set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files
+
+ set --query files[1] && set --universal $plugin_files_var (string replace -- $source $fisher_path $files | string replace -- ~ \~)
+
+ contains -- $plugin $_fisher_plugins || set --universal --append _fisher_plugins $plugin
+ contains -- $plugin $install_plugins && set --local event install || set --local event update
+
+ printf "%s\n" Installing\ (set_color --bold)$plugin(set_color normal) " "$$plugin_files_var | string replace -- \~ ~
+
+ for file in (string match --regex -- '.+/[^/]+\.fish$' $$plugin_files_var | string replace -- \~ ~)
+ source $file
+ if set --local name (string replace --regex -- '.+conf\.d/([^/]+)\.fish$' '$1' $file)
+ emit {$name}_$event
+ end
+ end
+ end
+
+ command rm -rf $source_plugins
+
+ if set --query _fisher_plugins[1]
+ set --local commit_plugins
+
+ for plugin in $file_plugins
+ contains -- (string lower -- $plugin) (string lower -- $_fisher_plugins) && set --append commit_plugins $plugin
+ end
+
+ for plugin in $_fisher_plugins
+ contains -- (string lower -- $plugin) (string lower -- $commit_plugins) || set --append commit_plugins $plugin
+ end
+
+ printf "%s\n" $commit_plugins >$fish_plugins
+ else
+ set --erase _fisher_plugins
+ command rm -f $fish_plugins
+ end
+
+ set --local total (count $install_plugins) (count $update_plugins) (count $remove_plugins)
+
+ test "$total" != "0 0 0" && echo (string join ", " (
+ test $total[1] = 0 || echo "Installed $total[1]") (
+ test $total[2] = 0 || echo "Updated $total[2]") (
+ test $total[3] = 0 || echo "Removed $total[3]")
+ ) plugin/s
+ case \*
+ echo "fisher: Unknown command: \"$cmd\"" >&2 && return 1
+ end
+end
+
+if ! set --query _fisher_upgraded_to_4_4
+ set --universal _fisher_upgraded_to_4_4
+ if functions --query _fisher_list
+ set --query XDG_DATA_HOME[1] || set --local XDG_DATA_HOME ~/.local/share
+ command rm -rf $XDG_DATA_HOME/fisher
+ functions --erase _fisher_{list,plugin_parse}
+ fisher update >/dev/null 2>/dev/null
+ else
+ for var in (set --names | string match --entire --regex '^_fisher_.+_files$')
+ set $var (string replace -- ~ \~ $$var)
+ end
+ functions --erase _fisher_fish_postexec
+ end
+end
diff --git a/early/.config/fish/tokyonight_day.fish b/early/.config/fish/tokyonight_day.fish
new file mode 100644
index 000000000..0a73a06a5
--- /dev/null
+++ b/early/.config/fish/tokyonight_day.fish
@@ -0,0 +1,36 @@
+ # TokyoNight Color Palette
+ set -l foreground 3760bf
+ set -l selection 99a7df
+ set -l comment 848cb5
+ set -l red f52a65
+ set -l orange b15c00
+ set -l yellow 8c6c3e
+ set -l green 587539
+ set -l purple 7847bd
+ set -l cyan 007197
+ set -l pink 9854f1
+
+ # Syntax Highlighting Colors
+ set -g fish_color_normal $foreground
+ set -g fish_color_command $cyan
+ set -g fish_color_keyword $pink
+ set -g fish_color_quote $yellow
+ set -g fish_color_redirection $foreground
+ set -g fish_color_end $orange
+ set -g fish_color_error $red
+ set -g fish_color_param $purple
+ set -g fish_color_comment $comment
+ set -g fish_color_selection --background=$selection
+ set -g fish_color_search_match --background=$selection
+ set -g fish_color_operator $green
+ set -g fish_color_escape $pink
+ set -g fish_color_autosuggestion $comment
+
+ # Completion Pager Colors
+ set -g fish_pager_color_progress $comment
+ set -g fish_pager_color_prefix $cyan
+ set -g fish_pager_color_completion $foreground
+ set -g fish_pager_color_description $comment
+ set -g fish_pager_color_selected_background --background=$selection
+
+
\ No newline at end of file
diff --git a/early/.config/fish/tokyonight_moon.fish b/early/.config/fish/tokyonight_moon.fish
new file mode 100644
index 000000000..2acc461b3
--- /dev/null
+++ b/early/.config/fish/tokyonight_moon.fish
@@ -0,0 +1,36 @@
+ # TokyoNight Color Palette
+ set -l foreground c8d3f5
+ set -l selection 3654a7
+ set -l comment 7a88cf
+ set -l red ff757f
+ set -l orange ff966c
+ set -l yellow ffc777
+ set -l green c3e88d
+ set -l purple fca7ea
+ set -l cyan 86e1fc
+ set -l pink c099ff
+
+ # Syntax Highlighting Colors
+ set -g fish_color_normal $foreground
+ set -g fish_color_command $cyan
+ set -g fish_color_keyword $pink
+ set -g fish_color_quote $yellow
+ set -g fish_color_redirection $foreground
+ set -g fish_color_end $orange
+ set -g fish_color_error $red
+ set -g fish_color_param $purple
+ set -g fish_color_comment $comment
+ set -g fish_color_selection --background=$selection
+ set -g fish_color_search_match --background=$selection
+ set -g fish_color_operator $green
+ set -g fish_color_escape $pink
+ set -g fish_color_autosuggestion $comment
+
+ # Completion Pager Colors
+ set -g fish_pager_color_progress $comment
+ set -g fish_pager_color_prefix $cyan
+ set -g fish_pager_color_completion $foreground
+ set -g fish_pager_color_description $comment
+ set -g fish_pager_color_selected_background --background=$selection
+
+
\ No newline at end of file
diff --git a/early/.config/fish/tokyonight_night.fish b/early/.config/fish/tokyonight_night.fish
new file mode 100644
index 000000000..58edd99b3
--- /dev/null
+++ b/early/.config/fish/tokyonight_night.fish
@@ -0,0 +1,36 @@
+ # TokyoNight Color Palette
+ set -l foreground c0caf5
+ set -l selection 33467c
+ set -l comment 565f89
+ set -l red f7768e
+ set -l orange ff9e64
+ set -l yellow e0af68
+ set -l green 9ece6a
+ set -l purple 9d7cd8
+ set -l cyan 7dcfff
+ set -l pink bb9af7
+
+ # Syntax Highlighting Colors
+ set -g fish_color_normal $foreground
+ set -g fish_color_command $cyan
+ set -g fish_color_keyword $pink
+ set -g fish_color_quote $yellow
+ set -g fish_color_redirection $foreground
+ set -g fish_color_end $orange
+ set -g fish_color_error $red
+ set -g fish_color_param $purple
+ set -g fish_color_comment $comment
+ set -g fish_color_selection --background=$selection
+ set -g fish_color_search_match --background=$selection
+ set -g fish_color_operator $green
+ set -g fish_color_escape $pink
+ set -g fish_color_autosuggestion $comment
+
+ # Completion Pager Colors
+ set -g fish_pager_color_progress $comment
+ set -g fish_pager_color_prefix $cyan
+ set -g fish_pager_color_completion $foreground
+ set -g fish_pager_color_description $comment
+ set -g fish_pager_color_selected_background --background=$selection
+
+
\ No newline at end of file
diff --git a/early/.config/fish/tokyonight_storm.fish b/early/.config/fish/tokyonight_storm.fish
new file mode 100644
index 000000000..0fd59a748
--- /dev/null
+++ b/early/.config/fish/tokyonight_storm.fish
@@ -0,0 +1,36 @@
+ # TokyoNight Color Palette
+ set -l foreground c0caf5
+ set -l selection 364a82
+ set -l comment 565f89
+ set -l red f7768e
+ set -l orange ff9e64
+ set -l yellow e0af68
+ set -l green 9ece6a
+ set -l purple 9d7cd8
+ set -l cyan 7dcfff
+ set -l pink bb9af7
+
+ # Syntax Highlighting Colors
+ set -g fish_color_normal $foreground
+ set -g fish_color_command $cyan
+ set -g fish_color_keyword $pink
+ set -g fish_color_quote $yellow
+ set -g fish_color_redirection $foreground
+ set -g fish_color_end $orange
+ set -g fish_color_error $red
+ set -g fish_color_param $purple
+ set -g fish_color_comment $comment
+ set -g fish_color_selection --background=$selection
+ set -g fish_color_search_match --background=$selection
+ set -g fish_color_operator $green
+ set -g fish_color_escape $pink
+ set -g fish_color_autosuggestion $comment
+
+ # Completion Pager Colors
+ set -g fish_pager_color_progress $comment
+ set -g fish_pager_color_prefix $cyan
+ set -g fish_pager_color_completion $foreground
+ set -g fish_pager_color_description $comment
+ set -g fish_pager_color_selected_background --background=$selection
+
+
\ No newline at end of file
diff --git a/early/.config/foot/foot.ini b/early/.config/foot/foot.ini
new file mode 100755
index 000000000..e4ff60012
--- /dev/null
+++ b/early/.config/foot/foot.ini
@@ -0,0 +1,320 @@
+# -*- conf -*-
+
+ shell=fish
+# term=foot (or xterm-256color if built with -Dterminfo=disabled)
+ term=xterm-256color
+# login-shell=no
+
+# app-id=foot
+# title=foot
+# locked-title=no
+
+#font=monospace:size=11
+font=JetBrainsMono Nerd Font:size=12
+# font-bold=
+# font-italic=
+# font-bold-italic=
+# line-height=
+ letter-spacing=0
+# horizontal-letter-offset=0
+# vertical-letter-offset=0
+# underline-offset=
+# box-drawings-uses-font-glyphs=no
+ dpi-aware=no
+
+# initial-window-size-pixels=700x500 # Or,
+# initial-window-size-chars=
+# initial-window-mode=windowed
+pad=30x30 # optionally append 'center'
+# resize-delay-ms=100
+
+# notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body}
+
+bold-text-in-bright=no
+# bell=none
+# word-delimiters=,│`|:"'()[]{}<>
+# selection-target=primary
+# workers=
+
+[bell]
+# urgent=no
+# notify=no
+# command=
+# command-focused=no
+
+[scrollback]
+lines=10000
+# multiplier=3.0
+# indicator-position=relative
+# indicator-format=
+
+[url]
+# launch=xdg-open ${url}
+# label-letters=sadfjklewcmpgh
+# osc8-underline=url-mode
+# protocols=http, https, ftp, ftps, file, gemini, gopher
+# uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'
+
+[cursor]
+# style=block
+# color=111111 dcdccc
+color=282a36 f8f8f2
+# blink=no
+# beam-thickness=1.5
+# underline-thickness=
+
+[mouse]
+# hide-when-typing=no
+# alternate-scroll-mode=yes
+
+#DoomOne Colors
+#[colors]
+#alpha=0.3
+#foreground=bbc2cf
+#background=444444
+#regular0=282c34 # black
+#regular1=ff6c6b # red
+#regular2=98be65 # green
+#regular3=ecbe7b # yellow
+#regular4=51afef # blue
+#regular5=c678dd # magenta
+#regular6=46d9ff # cyan
+#regular7=bfbfbf # white
+#bright0=666666 # bright black
+#bright1=da8548 # bright red
+#bright2=4db5bd # bright green
+#bright3=ECBE7B # bright yellow
+#bright4=51afef # bright blue
+#bright5=c678dd # bright magenta
+#bright6=46D9FF # bright cyan
+#bright7=dfdfdf # bright white
+# 16 = <256-color palette #16>
+# ...
+# 255 = <256-color palette #255>
+# selection-foreground=
+# selection-background=
+# jump-labels=
+# urls=
+
+##Dracula Colors
+# [colors]
+# alpha=0.3
+# foreground=f8f8f2
+# background=444444
+# regular0=000000 # black
+# regular1=ff5555 # red
+# regular2=50fa7b # green
+# regular3=f1fa8c # yellow
+# regular4=bd93f9 # blue
+# regular5=ff79c6 # magenta
+# regular6=8be9fd # cyan
+# regular7=bfbfbf # white
+# bright0=4d4d4d # bright black
+# bright1=ff6e67 # bright red
+# bright2=5af78e # bright green
+# bright3=f4f99d # bright yellow
+# bright4=caa9fa # bright blue
+# bright5=ff92d0 # bright magenta
+# bright6=9aedfe # bright cyan
+# bright7=e6e6e6 # bright white
+
+# Catppuccin Colors
+[colors]
+alpha=0.5
+foreground=a9b1d6
+background=1a1b26
+regular0=414868 # black
+regular1=f7768e # red
+regular2=73daca # green
+regular3=e0af68 # yellow
+regular4=7aa2f7 # blue
+regular5=bb9af7 # magenta
+regular6=7dcfff # cyan
+regular7=c0caf5 # white
+bright0=414868 # black
+bright1=f7768e # red
+bright2=73daca # green
+bright3=e0af68 # yellow
+bright4=7aa2f7 # blue
+bright5=bb9af7 # magenta
+bright6=7dcfff # cyan
+bright7=c0caf5 # white
+
+# Ice colors
+# [colors]
+# alpha=0.5
+# foreground=90D1F6
+# background=162546
+# regular0=68ABE3 # black
+# regular1=BB9AF7 # red
+# regular2=90D1F6 # green
+# regular3=90D1F6 # yellow
+# regular4=AED6F7 # blue
+# regular5=AEE5FA # magenta
+# regular6=DEECF5 # cyan
+# regular7=90D1F6 # white
+# bright0=68ABE3 # black
+# bright1=F7768E # red
+# bright2=8DB5E3 # green
+# bright3=90D1F6 # yellow
+# bright4=AED6F7 # blue
+# bright5=AEE5FA # magenta
+# bright6=DEECF5 # cyan
+# bright7=90D1F6 # white
+
+##Lovelace Colors
+# [colors]
+# alpha=0.3
+# foreground=f8f8f2
+# background=444444
+# regular0=282A36 # black
+# regular1=F37F97 # red
+# regular2=5ADECD # green
+# regular3=F2A272 # yellow
+# regular4=8897F4 # blue
+# regular5=C574DD # magenta
+# regular6=79E6F3 # cyan
+# regular7=FDFDFD # white
+# bright0=414458 # bright black
+# bright1=FF4971 # bright red
+# bright2=18E3C8 # bright green
+# bright3=FF8037 # bright yellow
+# bright4=556FFF # bright blue
+# bright5=B043D1 # bright magenta
+# bright6=3FDCEE # bright cyan
+# bright7=BEBEC1 # bright white
+
+##Amarena Colors
+# [colors]
+# alpha=0.3
+# foreground=FFFFFF
+# background=1A2026
+# regular0=242D35 #black
+# regular1=FB6396 #red
+# regular2=94CF95 #green
+# regular3=F692B2 #yellow
+# regular4=6EC1D6 #blue
+# regular5=CD84C8 #magenta
+# regular6=7FE4D2 #cyan
+# regular7=FFFFFF #white
+# bright0=526170 #bright black
+# bright1=F92D72 #bright red
+# bright2=6CCB6E #bright green
+# bright3=F26190 #bright yellow
+# bright4=4CB9D6 #bright blue
+# bright5=C269BC #bright magenta
+# bright6=58D6BF #bright cyan
+# bright7=F4F5F2 #bright white
+
+#Catpuccin Frappe
+#[colors]
+# alpha=0.3
+# foreground=c6d0f5 # Text
+# background=444444 # Base
+# regular0=51576d # Surface 1
+# regular1=e78284 # red
+# regular2=a6d189 # green
+# regular3=e5c890 # yellow
+# regular4=8caaee # blue
+# regular5=f4b8e4 # pink
+# regular6=81c8be # teal
+# regular7=b5bfe2 # Subtext 1
+# bright0=626880 # Surface 2
+# bright1=e78284 # red
+# bright2=a6d189 # green
+# bright3=e5c890 # yellow
+# bright4=8caaee # blue
+# bright5=f4b8e4 # pink
+# bright6=81c8be # teal
+# bright7=a5adce # Subtext 0
+
+##Catpuccin Latte
+#[colors]
+# alpha=0.3
+# foreground=4c4f69 # Text
+# background=444444 # Base
+# regular0=5c5f77 # Subtext 1
+# regular1=d20f39 # red
+# regular2=40a02b # green
+# regular3=df8e1d # yellow
+# regular4=1e66f5 # blue
+# regular5=ea76cb # pink
+# regular6=179299 # teal
+# regular7=acb0be # Surface 2
+# bright0=6c6f85 # Subtext 0
+# bright1=d20f39 # red
+# bright2=40a02b # green
+# bright3=df8e1d # yellow
+# bright4=1e66f5 # blue
+# bright5=ea76cb # pink
+# bright6=179299 # teal
+# bright7=bcc0cc # Surface 1
+
+[csd]
+# preferred=server
+# size=26
+# font=
+# color=
+# button-width=26
+# button-color=
+# button-minimize-color=
+# button-maximize-color=
+# button-close-color=
+
+[key-bindings]
+scrollback-up-page=Page_Up
+# scrollback-up-half-page=none
+# scrollback-up-line=none
+scrollback-down-page=Page_Down
+# scrollback-down-half-page=none
+# scrollback-down-line=none
+clipboard-copy=Control+c
+clipboard-paste=Control+v
+# primary-paste=Shift+Insert
+search-start=Control+f
+# font-increase=Control+plus Control+equal Control+KP_Add
+# font-decrease=Control+minus Control+KP_Subtract
+# font-reset=Control+0 Control+KP_0
+# spawn-terminal=Control+Shift+n
+# minimize=none
+# maximize=none
+# fullscreen=none
+# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none
+# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none
+# pipe-selected=[xargs -r firefox] none
+# show-urls-launch=Control+Shift+u
+# show-urls-copy=none
+
+[search-bindings]
+# cancel=Control+g Control+c Escape
+# commit=Return
+# find-prev=Control+r
+# find-next=Control+s
+# cursor-left=Left Control+b
+# cursor-left-word=Control+Left Mod1+b
+# cursor-right=Right Control+f
+# cursor-right-word=Control+Right Mod1+f
+# cursor-home=Home Control+a
+# cursor-end=End Control+e
+# delete-prev=BackSpace
+# delete-prev-word=Mod1+BackSpace Control+BackSpace
+# delete-next=Delete
+# delete-next-word=Mod1+d Control+Delete
+# extend-to-word-boundary=Control+w
+# extend-to-next-whitespace=Control+Shift+w
+# clipboard-paste=Control+v Control+y
+# primary-paste=Shift+Insert
+
+[url-bindings]
+# cancel=Control+g Control+c Control+d Escape
+# toggle-url-visible=t
+
+[mouse-bindings]
+# primary-paste=BTN_MIDDLE
+# select-begin=BTN_LEFT
+# select-begin-block=Control+BTN_LEFT
+# select-extend=BTN_RIGHT
+# select-extend-character-wise=Control+BTN_RIGHT
+# select-word=BTN_LEFT-2
+# select-word-whitespace=Control+BTN_LEFT-2
+# select-row=BTN_LEFT-3
diff --git a/early/.config/gtklock/background.jpg b/early/.config/gtklock/background.jpg
new file mode 100644
index 000000000..0baf605b1
Binary files /dev/null and b/early/.config/gtklock/background.jpg differ
diff --git a/early/.config/gtklock/config.ini b/early/.config/gtklock/config.ini
new file mode 100644
index 000000000..9369e4131
--- /dev/null
+++ b/early/.config/gtklock/config.ini
@@ -0,0 +1,3 @@
+[main]
+gtk-theme=Tokyonight-Dark-BL-LB
+modules=/usr/lib/gtklock/userinfo-module.so;/usr/lib/gtklock/powerbar-module.so;/usr/lib/gtklock/playerctl-module.so
\ No newline at end of file
diff --git a/early/.config/gtklock/style.css b/early/.config/gtklock/style.css
new file mode 100644
index 000000000..f4910162d
--- /dev/null
+++ b/early/.config/gtklock/style.css
@@ -0,0 +1,96 @@
+* {
+ border: 0px;
+}
+
+window {
+ /* background: transparent; */
+ background-color: #1A1B26;
+ background-image: url("background.jpg");
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center;
+}
+
+#window-box {
+ /* background-color: #1A1B26; */
+ border-radius: 1.5rem;
+ padding: 1.5rem;
+ /* border: 4px solid #7E64C5; */
+ border: 0px solid black;
+}
+
+#input-label {
+ font-size: 1.5rem;
+ color: transparent;
+ background-color: transparent;
+ margin: -20rem;
+ border: 0px solid black;
+}
+
+#input-field {
+ background-color: rgba(26, 27, 38, 1);
+ border-radius: 1.2rem;
+ font-size: 1.4rem;
+ padding: 0.5rem;
+ padding-left: 0.7rem;
+ margin: 0.6rem;
+}
+
+#unlock-button {
+ margin: -20rem;
+ color: transparent;
+ background-color: transparent;
+}
+
+#error-label {
+ color: #F38BA8;
+}
+
+/* #clock-label {
+ font-family: Gabarito;
+ font-size: 3.5rem;
+ color: transparent;
+ border-radius: 9999px;
+ min-height: 150px;
+ min-width: 150px;
+ background-image: url('/var/lib/AccountsService/icons/end');
+ background-size: 100% auto;
+ box-shadow: 2px 2px 4px #16161E;
+} */
+
+#clock-label {
+ font-family: 'Gabarito';
+ font-size: 6rem;
+ /* background-color: rgba(26, 27, 38, 1); */
+ border-radius: 1.2rem;
+ padding: 0.5rem;
+ padding-left: 0.7rem;
+ margin: 0.6rem;
+ margin-top: -40rem;
+ /* border: 0.2rem solid #7E64C5; */
+ color: #a2d5f8;
+ text-shadow: 2px 2px 4px #16161E;
+}
+
+#user-image {
+ /* min-width: 200px;
+ min-height: 200px; */
+}
+
+#powerbar-box {
+ border-radius: 9999px;
+ background-color: rgba(26, 27, 38, 1);
+ padding: 0.3rem;
+}
+#poweroff-button {
+ min-width: 2rem;
+ min-height: 2rem;
+}
+#suspend-button {
+ min-width: 2rem;
+ min-height: 2rem;
+}
+#reboot-button {
+ min-width: 2rem;
+ min-height: 2rem;
+}
\ No newline at end of file
diff --git a/early/.config/hypr/colors.conf b/early/.config/hypr/colors.conf
new file mode 100755
index 000000000..8f00d2a73
--- /dev/null
+++ b/early/.config/hypr/colors.conf
@@ -0,0 +1,5 @@
+# Auto generated color theme for image at: https://i.ytimg.com/vi/4Me9rKMKIiY/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARgdIGUoYDAP&rs=AOn4CLCTO0d31Dqgq1VrZ7Kyc7QQprKctw
+general {
+ col.active_border = rgba(E72DA9FF) rgba(C24BB3FF) rgba(32EBDCFF) 45deg
+ col.inactive_border = rgba(E72DA966)
+}
diff --git a/early/.config/hypr/colors_default.conf b/early/.config/hypr/colors_default.conf
new file mode 100755
index 000000000..09e7115b6
--- /dev/null
+++ b/early/.config/hypr/colors_default.conf
@@ -0,0 +1,4 @@
+general {
+ col.active_border = rgba(0DB7D4FF) rgba(7AA2F7FF) rgba(9778D0FF) 45deg
+ col.inactive_border = rgba(04404aaa)
+}
diff --git a/early/.config/hypr/dirs/hyprland_HORIZONTAL.conf b/early/.config/hypr/dirs/hyprland_HORIZONTAL.conf
new file mode 100755
index 000000000..6708a2a55
--- /dev/null
+++ b/early/.config/hypr/dirs/hyprland_HORIZONTAL.conf
@@ -0,0 +1,193 @@
+# This file contains general customization options
+# For Environment variables see env.conf
+# For Keybinds variables see keybinds.conf
+# For Auto-run stuff see execs.conf
+#autogenerated = 1
+
+# I haven't updated yet but prepared
+# source=~/.config/hypr/env.conf
+
+# Monitor: reserve space for eww bar
+monitor=eDP-1,1920x1080@60,0x0,1
+monitor=eDP-1, addreserved, 61, 0, 0, 0
+monitor=HDMI-A-1,1920x1080@60,1920x0,1,mirror,eDP-1
+
+#################### Core components (authentication, idle daemon and stuff) ##############
+source=~/.config/hypr/execs.conf
+
+############################# Keybinds ############################
+source=~/.config/hypr/keybinds.conf
+
+############################## Input ##############################
+input {
+ # Mouse
+ # accel_profile = adaptive
+ force_no_accel = false
+ #sensitivity = 0
+ # osu
+ # force_no_accel = true
+ # sensitivity = -0.23
+
+ # Keyboard
+ kb_layout = us
+ follow_mouse = 1
+ numlock_by_default = true
+
+ touchpad {
+ natural_scroll = yes
+ disable_while_typing = true
+ clickfinger_behavior = true
+ scroll_factor = 0.7
+ }
+ scroll_method = 2fg
+}
+gestures {
+ # See https://wiki.hyprland.org/Configuring/Variables/ for more
+ workspace_swipe = true
+ workspace_swipe_distance = 1200px
+ workspace_swipe_fingers = 4
+ workspace_swipe_cancel_ratio = 0.2
+ workspace_swipe_min_speed_to_force = 5
+ workspace_swipe_create_new = true
+}
+
+general {
+ # Gaps and border
+ gaps_in = 4
+ gaps_out = 8
+ border_size = 2
+
+ # Fallback colors
+ col.active_border = rgba(0DB7D4FF) rgba(7AA2F7FF) rgba(9778D0FF) 45deg
+ col.inactive_border = rgba(04404aaa)
+
+ # Functionality
+ # resize_on_border = true
+ layout = dwindle
+}
+
+
+decoration {
+ # Blur rules
+ # blurls=gtk-layer-shell
+ rounding = 17
+
+ # Blur
+ blur = yes
+ blur_size = 7
+ blur_passes = 4
+ blur_new_optimizations = on
+ blur_ignore_opacity = false
+ #blur_xray = true
+ # Shadow
+ drop_shadow = no
+ shadow_range = 30
+ shadow_render_power = 3
+ col.shadow = rgba(01010166)
+
+ # Opacity
+
+
+ # Shader
+ # screen_shader = ~/.config/hypr/shaders/nothing.frag
+
+ # Dim
+ dim_inactive = false
+ dim_strength = 0.1
+ dim_special = 0
+}
+
+animations {
+ enabled = yes
+ # Animation curves
+
+ bezier = md3_standard, 0.2, 0.0, 0, 1.0
+ bezier = md3_decel, 0.05, 0.7, 0.1, 1
+ bezier = md3_accel, 0.3, 0, 0.8, 0.15
+ bezier = overshot, 0.05, 0.9, 0.1, 1.05
+ bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0
+ bezier = win10, 0, 0, 0, 1
+ bezier = gnome, 0, 0.85, 0.3, 1
+ bezier = funky, 0.46, 0.35, -0.2, 1.2
+ # Animation configs
+ animation = windows, 1, 2, md3_decel, slide
+ animation = border, 1, 10, default
+ animation = fade, 1, 0.0000001, default
+ animation = workspaces, 1, 4, md3_decel, slide
+}
+
+misc {
+ vfr = 1
+ vrr = 0
+ focus_on_activate = true
+ animate_manual_resizes = true
+ animate_mouse_windowdragging = true
+ #suppress_portal_warnings = true
+ enable_swallow = true
+}
+debug {
+ #overlay = true
+}
+dwindle {
+ preserve_split = true # you probably want this
+ #no_gaps_when_only = true
+}
+
+decoration {
+ #screen_shader = ~/.config/hypr/shaders/drugs.frag
+ #screen_shader = ~/.config/hypr/shaders/crt.frag
+}
+debug {
+ #damage_tracking=0
+}
+
+# Efficiency
+#general {
+# gaps_in = 0
+# gaps_out = 0
+# border_size = 2
+#}
+#decoration {
+# rounding = 0
+#}
+#monitor=eDP-1, addreserved, 32, 0, 0, 0
+
+######## Window rules ########
+#windowrule = float, ^(firefox)$
+windowrule = float, ^(steam)$
+windowrule = float, ^(guifetch)$
+
+#windowrule = opacity 0.9 override 0.9 override, ^(firefox)$
+# Dialogs
+windowrule=float,title:^(Open File)(.*)$
+windowrule=float,title:^(Open Folder)(.*)$
+windowrule=float,title:^(Save As)(.*)$
+windowrule=float,title:^(Library)(.*)$
+windowrulev2 = float, class:^com.github.hluk.copyq$
+
+windowrulev2 = rounding 10, floating:1
+######## Layer rules ########
+layerrule = blur, gtk-layer-shell
+layerrule = ignorezero, gtk-layer-shell
+layerrule = blur, notifications
+layerrule = ignorezero, notifications
+layerrule = blur, waybar
+layerrule = ignorezero, waybar
+
+plugin {
+ hyprbars {
+ bar_color = rgba(090727FF)
+ bar_height = 20
+ bar_text_size = 10
+ bar_text_color = rgba(7775D0FF)
+ }
+ borders-plus-plus {
+ add_borders = 2 # 0 - 2
+ col.border_1 = rgb(82E6F5) # example col for border 1
+ col.border_2 = rgb(2222ff) # example col for border 2
+ }
+}
+
+
+# Dynamic colors are written here
+source=~/.config/hypr/colors.conf
diff --git a/early/.config/hypr/dirs/hyprland_VERTICAL.conf b/early/.config/hypr/dirs/hyprland_VERTICAL.conf
new file mode 100755
index 000000000..41d2d4d06
--- /dev/null
+++ b/early/.config/hypr/dirs/hyprland_VERTICAL.conf
@@ -0,0 +1,191 @@
+# This file contains general customization options
+# For Environment variables see env.conf
+# For Keybinds variables see keybinds.conf
+# For Auto-run stuff see execs.conf
+#autogenerated = 1
+
+# I haven't updated yet but prepared
+# source=~/.config/hypr/env.conf
+
+# Monitor: reserve space for eww bar
+monitor=eDP-1,1920x1080@60,0x0,1
+monitor=eDP-1, addreserved, 1, 1, 61, 1
+monitor=HDMI-A-1,1920x1080@60,1920x0,1,mirror,eDP-1
+
+#################### Core components (authentication, idle daemon and stuff) ##############
+source=~/.config/hypr/execs.conf
+
+############################# Keybinds ############################
+source=~/.config/hypr/keybinds.conf
+
+############################## Input ##############################
+input {
+ # Mouse
+ # accel_profile = adaptive
+ force_no_accel = false
+ #sensitivity = 0
+ # osu
+ # force_no_accel = true
+ # sensitivity = -0.23
+
+ # Keyboard
+ kb_layout = us
+ follow_mouse = 1
+ numlock_by_default = true
+
+ touchpad {
+ natural_scroll = yes
+ disable_while_typing = true
+ clickfinger_behavior = true
+ scroll_factor = 0.7
+ }
+ scroll_method = 2fg
+}
+gestures {
+ # See https://wiki.hyprland.org/Configuring/Variables/ for more
+ workspace_swipe = true
+ workspace_swipe_distance = 1000px
+ workspace_swipe_fingers = 4
+ workspace_swipe_cancel_ratio = 0.05
+ workspace_swipe_min_speed_to_force = 5
+ workspace_swipe_create_new = true
+}
+
+general {
+ # Gaps and border
+ gaps_in = 4
+ gaps_out = 7
+ border_size = 2
+
+ # Fallback colors
+ col.active_border = rgba(0DB7D4FF) rgba(7AA2F7FF) rgba(9778D0FF) 45deg
+ col.inactive_border = rgba(04404aaa)
+
+ # Functionality
+ # resize_on_border = true
+ layout = dwindle
+}
+
+
+decoration {
+ # Blur rules
+ # blurls=gtk-layer-shell
+ rounding = 17
+
+ # Blur
+ blur = yes
+ blur_size = 7
+ blur_passes = 4
+ blur_new_optimizations = on
+ blur_ignore_opacity = false
+ #blur_xray = true
+ # Shadow
+ drop_shadow = no
+ shadow_range = 30
+ shadow_render_power = 3
+ col.shadow = rgba(01010166)
+
+ # Opacity
+
+
+ # Shader
+ # screen_shader = ~/.config/hypr/shaders/nothing.frag
+
+ # Dim
+ dim_inactive = false
+ dim_strength = 0.1
+ dim_special = 0
+}
+
+animations {
+ enabled = yes
+ # Animation curves
+
+ bezier = md3_standard, 0.2, 0.0, 0, 1.0
+ bezier = md3_decel, 0.05, 0.7, 0.1, 1
+ bezier = md3_accel, 0.3, 0, 0.8, 0.15
+ bezier = overshot, 0.05, 0.9, 0.1, 1.05
+ bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0
+ bezier = win10, 0, 0, 0, 1
+ bezier = gnome, 0, 0.85, 0.3, 1
+ bezier = funky, 0.46, 0.35, -0.2, 1.2
+ # Animation configs
+ animation = windows, 1, 2, md3_decel, slide
+ animation = border, 1, 10, default
+ animation = fade, 1, 0.0000001, default
+ animation = workspaces, 1, 4, md3_decel, slidevert
+}
+
+misc {
+ vfr = 1
+ vrr = 0
+ focus_on_activate = true
+ animate_manual_resizes = true
+ animate_mouse_windowdragging = true
+ #suppress_portal_warnings = true
+ enable_swallow = true
+}
+debug {
+ #overlay = true
+}
+dwindle {
+ preserve_split = true # you probably want this
+ #no_gaps_when_only = true
+}
+
+decoration {
+ #screen_shader = ~/.config/hypr/shaders/drugs.frag
+ #screen_shader = ~/.config/hypr/shaders/crt.frag
+}
+debug {
+ #damage_tracking=0
+}
+
+# Efficiency
+#general {
+# gaps_in = 0
+# gaps_out = 0
+# border_size = 2
+#}
+#decoration {
+# rounding = 0
+#}
+#monitor=eDP-1, addreserved, 32, 0, 0, 0
+
+######## Window rules ########
+#windowrule = float, ^(firefox)$
+windowrule = float, ^(steam)$
+windowrule = float, ^(guifetch)$
+
+#windowrule = opacity 0.9 override 0.9 override, ^(firefox)$
+# Dialogs
+windowrule=float,title:^(Open File)(.*)$
+windowrule=float,title:^(Open Folder)(.*)$
+windowrule=float,title:^(Save As)(.*)$
+windowrule=float,title:^(Library)(.*)$
+windowrulev2 = float, class:^com.github.hluk.copyq$
+
+windowrulev2 = rounding 10, floating:1
+######## Layer rules ########
+layerrule = blur, gtk-layer-shell
+layerrule = ignorezero, gtk-layer-shell
+layerrule = blur, waybar
+layerrule = ignorezero, waybar
+
+plugin {
+ hyprbars {
+ bar_color = rgba(090727FF)
+ bar_height = 20
+ bar_text_size = 10
+ bar_text_color = rgba(7775D0FF)
+ }
+ borders-plus-plus {
+ add_borders = 2 # 0 - 2
+ col.border_1 = rgb(82E6F5) # example col for border 1
+ col.border_2 = rgb(2222ff) # example col for border 2
+ }
+}
+
+
+# Dynamic colors are written here
+source=~/.config/hypr/colors.conf
diff --git a/early/.config/hypr/dirs/keybinds_HORIZONTAL.conf b/early/.config/hypr/dirs/keybinds_HORIZONTAL.conf
new file mode 100755
index 000000000..9d82e08e6
--- /dev/null
+++ b/early/.config/hypr/dirs/keybinds_HORIZONTAL.conf
@@ -0,0 +1,199 @@
+########################## Language ############################
+bind = SUPERSHIFT, V, exec, ibus engine Bamboo::Us
+bind = SUPERSHIFT, E, exec, ibus engine xkb:us::eng
+
+#################### It just works™ keybinds ###################
+# Volume
+bindl = ,XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle
+bindle=, XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
+bindle=, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
+bindle = , XF86AudioRaiseVolume, exec, ~/.config/eww/scripts/volume osd &
+bindle = , XF86AudioLowerVolume, exec, ~/.config/eww/scripts/volume osd &
+bindl = , XF86AudioMute, exec, ~/.config/eww/scripts/volume osd &
+
+# Brightness
+bindle=, XF86MonBrightnessUp, exec, light -A 3 && ~/.config/eww/scripts/brightness osd &
+bindle=, XF86MonBrightnessDown, exec, light -U 3 && ~/.config/eww/scripts/brightness osd &
+
+######################################## Keybinds ########################################
+# Apps: just normal apps
+bind = SUPER, C, exec, code --password-store=gnome --enable-features=UseOzonePlatform --ozone-platform=wayland
+bind = CONTROLSHIFTALT, Y, exec, yuzu
+bind = SUPER, T, exec, foot --override shell=fish
+bind = SUPERALT, T, exec, wezterm
+bind = SUPER, Return, exec, kitty
+bind = SUPER, E, exec, nautilus --new-window
+bind = SUPER, W, exec, firefox
+bind = CONTROLSUPERALT, E, exec, /usr/bin/microsoft-edge-stable --password-store=gnome --enable-features=UseOzonePlatform --ozone-platform=wayland --gtk-version=4
+bind = SUPER, X, exec, gnome-text-editor --new-window
+bind = SUPERSHIFT, W, exec, wps
+
+#Apps: Settings and config
+bind = SUPER, I, exec, 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
+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 = CONTROLALT, Delete, exec, pkill wlogout || wlogout -p layer-shell
+bind = CONTROLSHIFTALTSUPER, Delete, exec, systemctl poweroff
+
+# Screenshot, Record, OCR (Optical Character Recognition), Color picker, Clipboard history
+bind = SUPERSHIFT, D, exec,~/.local/bin/rubyshot | wl-copy
+bind = SUPERSHIFTALT, S, exec, grim -g "$(slurp)" - | swappy -f -
+bindl =,Print,exec,grim - | wl-copy
+bind = SUPERSHIFT, S, exec, grim -g "$(slurp)" - | 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 = CONTROLSUPERSHIFT,S,exec,grim -g "$(slurp)" "tmp.png" && tesseract "tmp.png" - | wl-copy && rm "tmp.png"
+bind = SUPERSHIFT,T,exec,grim -g "$(slurp)" "tmp.png" && tesseract "tmp.png" - | wl-copy && rm "tmp.png"
+bind = SUPERSHIFT, C, exec, hyprpicker -a
+bind = SUPER, B, exec, copyq menu
+bind = SUPER, V, exec, pkill fuzzel || cliphist list | fuzzel --no-fuzzy --icon-theme=candy-icons --background-color=1D1D27ee --text-color=cdd6f4ff --match-color=AC16C7FF --border-width=3 --border-radius=10 --border-color=8701E7FF --selection-color=585b70ff --selection-text-color=cdd6f4ff --selection-match-color=AC16C7FF --font="Rubik" --prompt=" " --dmenu | cliphist decode | wl-copy
+# Media
+bind = SUPERSHIFT, N, 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
+#Lock screen | blur: --effect-blur=20x20
+bind = SUPER, L, exec, ~/.local/bin/lock.sh
+bind = SUPERSHIFT, L, exec, ~/.local/bin/lock.sh
+bindl = SUPERSHIFT, L, exec, sleep 0.1 && systemctl suspend
+# App launcher
+bindr = SUPER, SUPER_L, exec, ~/.config/eww/scripts/toggle-overview.sh --keypress &
+bind = SUPER, Slash, exec, pkill fuzzel || fuzzel --icon-theme=candy-icons --background-color=1D1D27ee --text-color=cdd6f4ff --match-color=AC16C7FF --border-width=3 --border-radius=10 --border-color=8701E7FF --selection-color=585b70ff --selection-text-color=cdd6f4ff --selection-match-color=AC16C7FF --font="Rubik" --prompt=" "
+#bindr = SUPER, SUPER_L, exec, pkill rofi || rofi -show drun
+
+################################# eww keybinds ################################
+bindr = CONTROLSUPER, R, exec, pkill eww && eww daemon && eww open bar && eww open bg-decor
+bind = SUPER, Tab, exec, ~/.config/eww/scripts/toggle-overview.sh
+bind = SUPER, O, exec, ~/.config/eww/scripts/toggle-osettings.sh --keypress
+bind = CONTROLSUPER, O, exec, ~/.config/eww/scripts/toggle-osettings.sh --keypress
+bind = SUPER, M, exec, ~/.config/eww/scripts/toggle-bottombar.sh
+bind = SUPER, N, exec, ~/.config/eww/scripts/toggle-onotify.sh --keypress
+bind = SUPER, Comma, exec, ~/.config/eww/scripts/toggle-themer.sh
+bind = SUPER, D, exec, ~/.config/eww/scripts/toggle-dash.sh --keypress
+bind = SUPER, A, exec, ~/.config/eww/scripts/toggle-dashfs.sh
+bind = SUPER, G, exec, ~/.config/eww/scripts/toggle-wingamebar.sh
+
+bind = CONTROLSUPER, Tab, exec, ~/.config/eww/scripts/toggle-compactmode.sh
+bind = SUPERALT, W, exec, ~/.config/eww/scripts/toggle-winmode.sh
+
+############################ Keybinds for Hyprland ############################
+# Swap windows
+bind=SUPERSHIFT,left,movewindow,l
+bind=SUPERSHIFT,right,movewindow,r
+bind=SUPERSHIFT,up,movewindow,u
+bind=SUPERSHIFT,down,movewindow,d
+# Move focus
+bind = SUPER, left, movefocus, l
+bind = SUPER, right, movefocus, r
+bind = SUPER, up, movefocus, u
+bind = SUPER, down, movefocus, d
+bind = SUPER, BracketLeft, movefocus, l
+bind = SUPER, BracketRight, movefocus, r
+# Window title
+bind = SUPER, left, exec, eww update rev_center_ws=false
+bind = SUPER, right, exec, eww update rev_center_ws=false
+bind = SUPER, up, exec, eww update rev_center_ws=false
+bind = SUPER, down, exec, eww update rev_center_ws=false
+bind = SUPER, BracketLeft, exec, eww update rev_center_ws=false
+bind = SUPER, BracketRight, exec, eww update rev_center_ws=false
+bind = ALT, Tab, exec, eww update rev_center_ws=false
+
+# Workspace, window, tab switch with keyboard
+bind = CONTROLSUPER, right, workspace, +1
+bind = CONTROLSUPER, left, workspace, -1
+bind = CONTROLSUPER, BracketLeft, workspace, -1
+bind = CONTROLSUPER, BracketRight, workspace, +1
+bind = CONTROLSUPER, up, workspace, -5
+bind = CONTROLSUPER, down, workspace, +5
+bind = SUPER, Page_Down, workspace, +1
+bind = SUPER, Page_Up, workspace, -1
+bind = CONTROLSUPER, Page_Down, workspace, +1
+bind = CONTROLSUPER, Page_Up, workspace, -1
+bind = SUPERSHIFT, Page_Down, movetoworkspace, +1
+bind = SUPERSHIFT, Page_Up, movetoworkspace, -1
+bind = CONTROLSUPERSHIFT, Right, movetoworkspace, +1
+bind = CONTROLSUPERSHIFT, Left, movetoworkspace, -1
+bind = SUPERSHIFT, mouse_down, movetoworkspace, -1
+bind = SUPERSHIFT, mouse_up, movetoworkspace, +1
+
+# Show workspaces module
+bind = CONTROLSUPER, right, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, left, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, BracketLeft, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, BracketRight, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, up, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, down, exec, eww update rev_center_ws=true
+bind = SUPER, Page_Down, exec, eww update rev_center_ws=true
+bind = SUPER, Page_Up, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, Page_Down, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, Page_Up, exec, eww update rev_center_ws=true
+bind = SUPERSHIFT, Page_Down, exec, eww update rev_center_ws=true
+bind = SUPERSHIFT, Page_Up, exec, eww update rev_center_ws=true
+bind = CONTROLSUPERSHIFT, Right, exec, eww update rev_center_ws=true
+bind = CONTROLSUPERSHIFT, Left, exec, eww update rev_center_ws=true
+bind = SUPERSHIFT, mouse_down, exec, eww update rev_center_ws=true
+bind = SUPERSHIFT, mouse_up, exec, eww update rev_center_ws=true
+
+# Window split ratio
+binde = SUPER, Minus, splitratio, -0.1
+binde = SUPER, Equal, splitratio, 0.1
+binde = SUPER, Semicolon, splitratio, -0.1
+binde = SUPER, Apostrophe, splitratio, 0.1
+# Fullscreen
+bind = SUPER, F, fullscreen
+# Switching
+bind = SUPER, 1, workspace, 1
+bind = SUPER, 2, workspace, 2
+bind = SUPER, 3, workspace, 3
+bind = SUPER, 4, workspace, 4
+bind = SUPER, 5, workspace, 5
+bind = SUPER, 6, workspace, 6
+bind = SUPER, 7, workspace, 7
+bind = SUPER, 8, workspace, 8
+bind = SUPER, 9, workspace, 9
+bind = SUPER, 0, workspace, 10
+bind = SUPER, S, togglespecialworkspace,
+bind = CONTROLSUPER, S, togglespecialworkspace,
+bind = ALT, Tab, cyclenext # Why is this even here?
+bind = ALT, Tab, bringactivetotop, # bring it to the top
+# Move window to workspace Super + Alt + [0-9]
+bind = SUPER ALT, 1, movetoworkspacesilent, 1
+bind = SUPER ALT, 2, movetoworkspacesilent, 2
+bind = SUPER ALT, 3, movetoworkspacesilent, 3
+bind = SUPER ALT, 4, movetoworkspacesilent, 4
+bind = SUPER ALT, 5, movetoworkspacesilent, 5
+bind = SUPER ALT, 6, movetoworkspacesilent, 6
+bind = SUPER ALT, 7, movetoworkspacesilent, 7
+bind = SUPER ALT, 8, movetoworkspacesilent, 8
+bind = SUPER ALT, 9, movetoworkspacesilent, 9
+bind = SUPER ALT, 0, movetoworkspacesilent, 10
+bind = CONTROLSHIFTSUPER, Up, movetoworkspacesilent, special
+bind = SUPERALT, S, movetoworkspacesilent, special
+# Scroll through existing workspaces with (Control) + Super + scroll
+bind = SUPER, mouse_up, workspace, +1
+bind = SUPER, mouse_down, workspace, -1
+bind = CONTROLSUPER, mouse_up, workspace, +1
+bind = CONTROLSUPER, mouse_down, workspace, -1
+# Move/resize windows with Super + LMB/RMB and dragging
+bindm = SUPER, mouse:272, movewindow
+bindm = SUPER, mouse:273, resizewindow
+bindm = SUPER, mouse:274, movewindow
+bindm = SUPER, Z, movewindow
+bind = CONTROLSUPER, Backslash, resizeactive, exact 640 480
+
+# trying vim-like stuff
+binde = SUPER_ALT, I, exec, wtype -k Up
+binde = SUPER_ALT, K, exec, wtype -P Down
+binde = SUPER_ALT, J, exec, wtype -P Left
+binde = SUPER_ALT, L, exec, wtype -P Right
+
diff --git a/early/.config/hypr/dirs/keybinds_VERTICAL.conf b/early/.config/hypr/dirs/keybinds_VERTICAL.conf
new file mode 100755
index 000000000..b4568432a
--- /dev/null
+++ b/early/.config/hypr/dirs/keybinds_VERTICAL.conf
@@ -0,0 +1,198 @@
+########################## Language ############################
+bind = SUPERSHIFT, V, exec, ibus engine Bamboo::Us
+bind = SUPERSHIFT, E, exec, ibus engine xkb:us::eng
+
+#################### It just works™ keybinds ###################
+# Volume
+bindl = ,XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle
+bindle=, XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
+bindle=, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
+bindle = , XF86AudioRaiseVolume, exec, ~/.config/eww/scripts/volume osd &
+bindle = , XF86AudioLowerVolume, exec, ~/.config/eww/scripts/volume osd &
+bindl = , XF86AudioMute, exec, ~/.config/eww/scripts/volume osd &
+
+# Brightness
+bindle=, XF86MonBrightnessUp, exec, light -A 3 && ~/.config/eww/scripts/brightness osd &
+bindle=, XF86MonBrightnessDown, exec, light -U 3 && ~/.config/eww/scripts/brightness osd &
+
+######################################## Keybinds ########################################
+# Apps: just normal apps
+bind = SUPER, C, exec, code --password-store=gnome --enable-features=UseOzonePlatform --ozone-platform=wayland
+bind = CONTROLSHIFTALT, Y, exec, yuzu
+bind = SUPER, T, exec, foot --override shell=fish
+bind = SUPERALT, T, exec, wezterm
+bind = SUPER, Return, exec, kitty
+bind = SUPER, E, exec, nautilus --new-window
+bind = SUPER, W, exec, firefox
+bind = CONTROLSUPERALT, E, exec, /usr/bin/microsoft-edge-stable --password-store=gnome --enable-features=UseOzonePlatform --ozone-platform=wayland --gtk-version=4
+bind = SUPER, X, exec, gnome-text-editor --new-window
+bind = SUPERSHIFT, W, exec, wps
+
+#Apps: Settings and config
+bind = SUPER, I, exec, 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
+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 = CONTROLALT, Delete, exec, pkill wlogout || wlogout -p layer-shell
+bind = CONTROLSHIFTALTSUPER, Delete, exec, systemctl poweroff
+
+# Screenshot, Record, OCR (Optical Character Recognition), Color picker, Clipboard history
+bind = SUPERSHIFT, D, exec,~/.local/bin/rubyshot | wl-copy
+bind = SUPERSHIFTALT, S, exec, grim -g "$(slurp)" - | swappy -f -
+bindl =,Print,exec,grim - | wl-copy
+bind = SUPERSHIFT, S, exec, grim -g "$(slurp)" - | 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 = CONTROLSUPERSHIFT,S,exec,grim -g "$(slurp)" "tmp.png" && tesseract "tmp.png" - | wl-copy && rm "tmp.png"
+bind = SUPERSHIFT,T,exec,grim -g "$(slurp)" "tmp.png" && tesseract "tmp.png" - | wl-copy && rm "tmp.png"
+bind = SUPERSHIFT, C, exec, hyprpicker -a
+bind = SUPER, B, exec, copyq menu
+bind = SUPER, V, exec, pkill fuzzel || cliphist list | fuzzel --no-fuzzy --icon-theme=candy-icons --background-color=1D1D27ee --text-color=cdd6f4ff --match-color=AC16C7FF --border-width=3 --border-radius=10 --border-color=8701E7FF --selection-color=585b70ff --selection-text-color=cdd6f4ff --selection-match-color=AC16C7FF --font="Rubik" --prompt=" " --dmenu | cliphist decode | wl-copy
+# Media
+bind = SUPERSHIFT, N, 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
+#Lock screen | blur: --effect-blur=20x20
+bind = SUPER, L, exec, ~/.local/bin/lock.sh
+bind = SUPERSHIFT, L, exec, ~/.local/bin/lock.sh
+bindl = SUPERSHIFT, L, exec, sleep 0.1 && systemctl suspend
+# App launcher
+bindr = SUPER, SUPER_L, exec, ~/.config/eww/scripts/toggle-overview.sh --keypress &
+bind = SUPER, Slash, exec, pkill fuzzel || fuzzel --icon-theme=candy-icons --background-color=1D1D27ee --text-color=cdd6f4ff --match-color=AC16C7FF --border-width=3 --border-radius=10 --border-color=8701E7FF --selection-color=585b70ff --selection-text-color=cdd6f4ff --selection-match-color=AC16C7FF --font="Rubik" --prompt=" "
+#bindr = SUPER, SUPER_L, exec, pkill rofi || rofi -show drun
+
+################################# eww keybinds ################################
+bindr = CONTROLSUPER, R, exec, pkill eww && eww daemon && eww open bar && eww open bg-decor
+bind = SUPER, Tab, exec, ~/.config/eww/scripts/toggle-overview.sh
+bind = SUPER, O, exec, ~/.config/eww/scripts/toggle-osettings.sh --keypress
+bind = CONTROLSUPER, O, exec, ~/.config/eww/scripts/toggle-osettings.sh --keypress
+bind = SUPER, M, exec, ~/.config/eww/scripts/toggle-bottombar.sh
+bind = SUPER, N, exec, ~/.config/eww/scripts/toggle-onotify.sh --keypress
+bind = SUPER, Comma, exec, ~/.config/eww/scripts/toggle-themer.sh
+bind = SUPER, D, exec, ~/.config/eww/scripts/toggle-dash.sh --keypress
+bind = SUPER, A, exec, ~/.config/eww/scripts/toggle-dashfs.sh
+bind = SUPER, G, exec, ~/.config/eww/scripts/toggle-wingamebar.sh
+
+bind = CONTROLSUPER, Tab, exec, ~/.config/eww/scripts/toggle-compactmode.sh
+bind = SUPERALT, W, exec, ~/.config/eww/scripts/toggle-winmode.sh
+
+############################ Keybinds for Hyprland ############################
+# Swap windows
+bind=SUPERSHIFT,left,movewindow,l
+bind=SUPERSHIFT,right,movewindow,r
+bind=SUPERSHIFT,up,movewindow,u
+bind=SUPERSHIFT,down,movewindow,d
+# Move focus
+bind = SUPER, left, movefocus, l
+bind = SUPER, right, movefocus, r
+bind = SUPER, up, movefocus, u
+bind = SUPER, down, movefocus, d
+bind = SUPER, BracketLeft, movefocus, l
+bind = SUPER, BracketRight, movefocus, r
+# Window title
+bind = SUPER, left, exec, eww update rev_center_ws=false
+bind = SUPER, right, exec, eww update rev_center_ws=false
+bind = SUPER, up, exec, eww update rev_center_ws=false
+bind = SUPER, down, exec, eww update rev_center_ws=false
+bind = SUPER, BracketLeft, exec, eww update rev_center_ws=false
+bind = SUPER, BracketRight, exec, eww update rev_center_ws=false
+bind = ALT, Tab, exec, eww update rev_center_ws=false
+
+# Workspace, window, tab switch with keyboard
+bind = CONTROLSUPER, right, workspace, +1
+bind = CONTROLSUPER, left, workspace, -1
+bind = CONTROLSUPER, BracketLeft, workspace, -1
+bind = CONTROLSUPER, BracketRight, workspace, +1
+bind = CONTROLSUPER, up, workspace, -1
+bind = CONTROLSUPER, down, workspace, +1
+bind = SUPER, Page_Down, workspace, +1
+bind = SUPER, Page_Up, workspace, -1
+bind = CONTROLSUPER, Page_Down, workspace, +1
+bind = CONTROLSUPER, Page_Up, workspace, -1
+bind = SUPERSHIFT, Page_Down, movetoworkspace, +1
+bind = SUPERSHIFT, Page_Up, movetoworkspace, -1
+bind = CONTROLSUPERSHIFT, Right, movetoworkspace, +1
+bind = CONTROLSUPERSHIFT, Left, movetoworkspace, -1
+bind = SUPERSHIFT, mouse_down, movetoworkspace, -1
+bind = SUPERSHIFT, mouse_up, movetoworkspace, +1
+
+# Show workspaces module
+bind = CONTROLSUPER, right, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, left, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, BracketLeft, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, BracketRight, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, up, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, down, exec, eww update rev_center_ws=true
+bind = SUPER, Page_Down, exec, eww update rev_center_ws=true
+bind = SUPER, Page_Up, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, Page_Down, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, Page_Up, exec, eww update rev_center_ws=true
+bind = SUPERSHIFT, Page_Down, exec, eww update rev_center_ws=true
+bind = SUPERSHIFT, Page_Up, exec, eww update rev_center_ws=true
+bind = CONTROLSUPERSHIFT, Right, exec, eww update rev_center_ws=true
+bind = CONTROLSUPERSHIFT, Left, exec, eww update rev_center_ws=true
+bind = SUPERSHIFT, mouse_down, exec, eww update rev_center_ws=true
+bind = SUPERSHIFT, mouse_up, exec, eww update rev_center_ws=true
+
+# Window split ratio
+binde = SUPER, Minus, splitratio, -0.1
+binde = SUPER, Equal, splitratio, 0.1
+binde = SUPER, Semicolon, splitratio, -0.1
+binde = SUPER, Apostrophe, splitratio, 0.1
+# Fullscreen
+bind = SUPER, F, fullscreen
+# Switching
+bind = SUPER, 1, workspace, 1
+bind = SUPER, 2, workspace, 2
+bind = SUPER, 3, workspace, 3
+bind = SUPER, 4, workspace, 4
+bind = SUPER, 5, workspace, 5
+bind = SUPER, 6, workspace, 6
+bind = SUPER, 7, workspace, 7
+bind = SUPER, 8, workspace, 8
+bind = SUPER, 9, workspace, 9
+bind = SUPER, 0, workspace, 10
+bind = SUPER, S, togglespecialworkspace,
+bind = CONTROLSUPER, S, togglespecialworkspace,
+bind = ALT, Tab, cyclenext # Why is this even here?
+bind = ALT, Tab, bringactivetotop, # bring it to the top
+# Move window to workspace Super + Alt + [0-9]
+bind = SUPER ALT, 1, movetoworkspacesilent, 1
+bind = SUPER ALT, 2, movetoworkspacesilent, 2
+bind = SUPER ALT, 3, movetoworkspacesilent, 3
+bind = SUPER ALT, 4, movetoworkspacesilent, 4
+bind = SUPER ALT, 5, movetoworkspacesilent, 5
+bind = SUPER ALT, 6, movetoworkspacesilent, 6
+bind = SUPER ALT, 7, movetoworkspacesilent, 7
+bind = SUPER ALT, 8, movetoworkspacesilent, 8
+bind = SUPER ALT, 9, movetoworkspacesilent, 9
+bind = SUPER ALT, 0, movetoworkspacesilent, 10
+bind = SUPERALT, S, movetoworkspacesilent, special
+# Scroll through existing workspaces with (Control) + Super + scroll
+bind = SUPER, mouse_up, workspace, +1
+bind = SUPER, mouse_down, workspace, -1
+bind = CONTROLSUPER, mouse_up, workspace, +1
+bind = CONTROLSUPER, mouse_down, workspace, -1
+# Move/resize windows with Super + LMB/RMB and dragging
+bindm = SUPER, mouse:272, movewindow
+bindm = SUPER, mouse:273, resizewindow
+bindm = SUPER, mouse:274, movewindow
+bindm = SUPER, Z, movewindow
+bind = CONTROLSUPER, Backslash, resizeactive, exact 640 480
+
+# trying vim-like stuff
+binde = SUPER_ALT, I, exec, wtype -k Up
+binde = SUPER_ALT, K, exec, wtype -P Down
+binde = SUPER_ALT, J, exec, wtype -P Left
+binde = SUPER_ALT, L, exec, wtype -P Right
+
diff --git a/early/.config/hypr/env.conf b/early/.config/hypr/env.conf
new file mode 100755
index 000000000..c913c75f4
--- /dev/null
+++ b/early/.config/hypr/env.conf
@@ -0,0 +1,5 @@
+env = XMODIFIERS, @im=ibus
+env = GTK_IM_MODULE, ibus
+env = QT_IM_MODULE, ibus
+env = QT_QPA_PLATFORMTHEME, qt5ct
+env = WLR_NO_HARDWARE_CURSORS, 1
diff --git a/early/.config/hypr/execs.conf b/early/.config/hypr/execs.conf
new file mode 100755
index 000000000..97fc5764b
--- /dev/null
+++ b/early/.config/hypr/execs.conf
@@ -0,0 +1,29 @@
+# Wallpaper
+exec-once = swaybg -i ~/.config/eww/images/wallpaper/wallpaper
+
+# Status bar
+#exec-once = waybar
+exec-once = eww daemon && eww open bar && eww open bottomline # && eww open dynamic-bg
+exec-once = ~/.config/eww/scripts/get_open_icons &
+#exec-once = eww daemon && eww open winbar &
+
+# Language Switch
+exec-once = ibus-daemon --xim -d -r
+exec-once = ibus engine xkb:us::eng
+
+# Core components (authentication, lock screen, notification daemon)
+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 = dunst &
+exec-once = swayidle -w timeout 300 '$HOME/.local/bin/lock.sh' before-sleep '$HOME/.local/bin/lock.sh' &
+exec-once = swayidle -w timeout 450 'systemctl suspend'
+
+# Clipboard history
+exec-once = wl-paste --watch cliphist store
+
+# Cursor and Touchpad gestures
+exec-once = hyprctl setcursor Bibata-Modern-Classic 24
+exec-once = libinput-gestures-setup start
+
+exec-once = sleep 1 && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
diff --git a/early/.config/hypr/hypr.conf b/early/.config/hypr/hypr.conf
new file mode 100755
index 000000000..9e8af1936
--- /dev/null
+++ b/early/.config/hypr/hypr.conf
@@ -0,0 +1,148 @@
+###################################################
+# This is the config for Hypr, not Hyprland! #
+# that abandoned Xorg window manager.. #
+###################################################
+
+gaps_in=4
+border_size=3
+gaps_out=8
+rounding=17
+max_fps=60 # max fps for updates of config & animations
+focus_when_hover=1 # 0 - do not switch the focus when hover (only for tiling)
+main_mod=SUPER # For moving, resizing
+intelligent_transients=1 # keeps transients always on top.
+no_unmap_saving=1 # disables saving unmapped windows (seems to break sometimes)
+scratchpad_mon=0 # self-explanatory # no its not
+
+# Execs
+exec-once=nitrogen --set-centered ~/.config/eww/images/wallpaper/wallpaper
+exec-once=/usr/bin/gnome-keyring-daemon --start --components=secrets
+exec-once=/usr/libexec/polkit-gnome-authentication-agent-1 &
+exec-once=ibus-daemon --xim -d -r
+exec-once=picom
+#exec-once=ibus-daemon &
+exec-once=ibus engine Bamboo::Us
+bind=SUPERSHIFT,V,exec,ibus engine Bamboo::Us
+bind=SUPERSHIFT,E,exec,ibus engine xkb:us::eng
+
+# Layout
+layout=0 # 0 - dwindle (default), 1 - master
+layout {
+ no_gaps_when_only=0 # disables gaps and borders when only window on screen
+}
+
+# Bar config
+Bar {
+ height=20
+ monitor=0
+ enabled=1
+ mod_pad_in=8
+ no_tray_saving=1 # using this doesnt save the tray between reloads but fixes an issue with the bar disappearing.
+
+ font.main=Noto Sans
+ font.secondary=Noto Sans
+
+ col.bg=0xff111111
+ col.high=0xffff3333
+
+ module=left,X,0xff8000ff,0xffffffff,1,workspaces
+ module=pad,left,10
+ module=left,,0xff7000dd,0xff7000dd,1,tray
+ module=right,X,0xffffffff,0xff00ff33,1000,$date +%a,\ %b\ %Y\ \ %I:%M\ %p$
+}
+
+# colors
+col.active_border=0xff7348e0
+col.inactive_border=0x77222222
+
+# status command
+# deprecated
+# status_command=date +%a,\ %b\ %Y\ \ %I:%M\ %p
+#
+
+# animations
+Animations {
+ enabled=1
+ speed=8
+ window_resize_speed=1
+ cheap=1 # highly recommended
+ borders=1
+ workspaces=1
+}
+
+# example window rules, more in the wiki
+
+# windowrule=float,class:krunner
+# windowrule=float,role:pop-up
+# windowrule=float,role:task_dialog
+# windowrule=monitor 0,class:krunner
+# windowrule=size 500 50,class:krunner
+# windowrule=move 700 500,class:krunner
+# windowrule=pseudo,class:discord
+
+# keybinds
+bind=CTRLALT,119,exec,kill Xorg
+bind=SUPER,R,exec,dmenu_run
+bind=SUPER,T,exec,kitty fish
+# bind=SUPER,W,exec,microsoft-edge --password-store=gnome --enable-features=UseOzonePlatform --gtk-version=4
+bind=SUPER,W,exec,firefox
+bind=SUPER,A,exec,rofi -show drun
+bind=SUPER,ESCAPE,exec,kitty btop
+bind=SUPER,E,exec,nautilus --new-window
+bind=SUPER,G,exec,gnome-text-editor --new-window
+
+bind=SUPER,Q,killactive,
+
+bind=SUPERSHIFT,LEFT,movewindow,l
+bind=SUPERSHIFT,RIGHT,movewindow,r
+bind=SUPERSHIFT,UP,movewindow,u
+bind=SUPERSHIFT,DOWN,movewindow,d
+
+bind=SUPER,LEFT,movefocus,l
+bind=SUPER,RIGHT,movefocus,r
+bind=SUPER,UP,movefocus,u
+bind=SUPER,DOWN,movefocus,d
+
+bind=SUPER,F,fullscreen,
+
+bind=SUPER,1,workspace,1
+bind=SUPER,2,workspace,2
+bind=SUPER,3,workspace,3
+bind=SUPER,4,workspace,4
+bind=SUPER,5,workspace,5
+bind=SUPER,6,workspace,6
+bind=SUPER,7,workspace,7
+bind=SUPER,8,workspace,8
+bind=SUPER,9,workspace,9
+bind=SUPER,0,workspace,10
+
+bind=CTRLSUPER,left,lastworkspace,-
+bind=CTRLSUPER,right,nextworkspace,+
+bind=CTRLSUPER,Prior,lastworkspace,-
+bind=CTRLSUPER,Next,nextworkspace,+
+bind=SUPER,Prior,lastworkspace,-
+bind=SUPER,Next,nextworkspace,+
+bind=CTRLSUPER,H,lastworkspace,
+bind=CTRLSUPER,L,nextworkspace,
+
+bind=CTRLSUPERSHIFT,left,movetorelativeworkspace,-
+bind=CTRLSUPERSHIFT,right,movetorelativeworkspace,+
+
+bind=SUPERALT,1,movetoworkspace,1
+bind=SUPERALT,2,movetoworkspace,2
+bind=SUPERALT,3,movetoworkspace,3
+bind=SUPERALT,4,movetoworkspace,4
+bind=SUPERALT,5,movetoworkspace,5
+bind=SUPERALT,6,movetoworkspace,6
+bind=SUPERALT,7,movetoworkspace,7
+bind=SUPERALT,8,movetoworkspace,8
+bind=SUPERALT,9,movetoworkspace,9
+bind=SUPERALT,0,movetoworkspace,10
+
+bind=SUPERSHIFT,S,movetoworkspace,scratchpad
+bind=SUPER,S,scratchpad,
+
+bind=SUPERALT,SPACE,togglefloating,
+
+bind=SUPER,equal,splitratio,+0.15
+bind=SUPER,minus,splitratio,-0.15
diff --git a/early/.config/hypr/hyprland.conf b/early/.config/hypr/hyprland.conf
new file mode 100755
index 000000000..6c17a6f63
--- /dev/null
+++ b/early/.config/hypr/hyprland.conf
@@ -0,0 +1,162 @@
+# This file contains general customization options
+# For Environment variables see env.conf
+# For Keybinds variables see keybinds.conf
+# For Auto-run stuff see execs.conf
+#autogenerated = 1
+
+source=~/.config/hypr/env.conf
+
+# Monitor: reserve space for eww bar
+monitor=eDP-1,1920x1080@60,0x0,1
+monitor=eDP-1, addreserved, 61, 0, 0, 0
+monitor=HDMI-A-1,1920x1080@60,1920x0,1,mirror,eDP-1
+
+#################### Core components (authentication, idle daemon and stuff) ##############
+source=~/.config/hypr/execs.conf
+
+############################# Keybinds ############################
+source=~/.config/hypr/keybinds.conf
+
+############################## Input ##############################
+input {
+ # Mouse
+ # accel_profile = adaptive
+ force_no_accel = false
+ #sensitivity = 0
+
+ # Keyboard
+ kb_layout = us
+ follow_mouse = 1
+ numlock_by_default = true
+
+ touchpad {
+ natural_scroll = yes
+ disable_while_typing = true
+ clickfinger_behavior = true
+ scroll_factor = 0.7
+ }
+ scroll_method = 2fg
+}
+gestures {
+ # See https://wiki.hyprland.org/Configuring/Variables/ for more
+ workspace_swipe = true
+ workspace_swipe_distance = 1200px
+ workspace_swipe_fingers = 4
+ workspace_swipe_cancel_ratio = 0.2
+ workspace_swipe_min_speed_to_force = 5
+ workspace_swipe_create_new = true
+}
+
+general {
+ # Gaps and border
+ gaps_in = 4
+ gaps_out = 8
+ border_size = 2
+
+ # Fallback colors
+ col.active_border = rgba(0DB7D4FF) rgba(7AA2F7FF) rgba(9778D0FF) 45deg
+ col.inactive_border = rgba(04404aaa)
+
+ # Functionality
+ # resize_on_border = true
+ layout = dwindle
+}
+
+dwindle {
+ preserve_split = true # you probably want this
+ #no_gaps_when_only = true
+}
+
+decoration {
+ # Blur rules
+ rounding = 15
+
+ # Blur
+ blur = yes
+ blur_size = 7
+ blur_passes = 4
+ blur_new_optimizations = on
+ blur_ignore_opacity = false
+ # Shadow
+ drop_shadow = no
+ shadow_range = 30
+ shadow_render_power = 3
+ col.shadow = rgba(01010166)
+
+ # Shader
+ # screen_shader = ~/.config/hypr/shaders/nothing.frag
+
+ # Dim
+ dim_inactive = false
+ dim_strength = 0.1
+ dim_special = 0
+}
+
+animations {
+ enabled = yes
+ # Animation curves
+
+ bezier = md3_standard, 0.2, 0.0, 0, 1.0
+ bezier = md3_decel, 0.05, 0.7, 0.1, 1
+ bezier = md3_accel, 0.3, 0, 0.8, 0.15
+ bezier = overshot, 0.05, 0.9, 0.1, 1.05
+ bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0
+ bezier = win10, 0, 0, 0, 1
+ bezier = gnome, 0, 0.85, 0.3, 1
+ bezier = funky, 0.46, 0.35, -0.2, 1.2
+ # Animation configs
+ animation = windows, 1, 2, md3_decel, slide
+ animation = border, 1, 10, default
+ animation = fade, 1, 0.0000001, default
+ animation = workspaces, 1, 4, md3_decel, slide
+}
+
+misc {
+ vfr = 1
+ vrr = 0
+ focus_on_activate = true
+ animate_manual_resizes = true
+ animate_mouse_windowdragging = true
+ #suppress_portal_warnings = true
+ enable_swallow = true
+}
+
+debug {
+ #overlay = true
+ #damage_tracking=0
+}
+
+decoration {
+ #screen_shader = ~/.config/hypr/shaders/drugs.frag
+ #screen_shader = ~/.config/hypr/shaders/crt.frag
+}
+
+######## Window rules ########
+windowrule = float, ^(steam)$
+windowrule = float, ^(guifetch)$
+
+# Dialogs
+windowrule=float,title:^(Open File)(.*)$
+windowrule=float,title:^(Open Folder)(.*)$
+windowrule=float,title:^(Save As)(.*)$
+windowrule=float,title:^(Library)(.*)$
+windowrulev2 = rounding 17, floating:1
+
+######## Layer rules ########
+layerrule = blur, gtk-layer-shell
+layerrule = ignorezero, gtk-layer-shell
+layerrule = blur, notifications
+layerrule = ignorezero, notifications
+
+plugin {
+ hyprbars {
+ bar_color = rgba(090727FF)
+ bar_height = 20
+ bar_text_size = 10
+ bar_text_color = rgba(7775D0FF)
+ }
+}
+
+
+# Dynamic colors
+source=~/.config/hypr/colors.conf
diff --git a/early/.config/hypr/keybinds.conf b/early/.config/hypr/keybinds.conf
new file mode 100755
index 000000000..ff9ee4f80
--- /dev/null
+++ b/early/.config/hypr/keybinds.conf
@@ -0,0 +1,201 @@
+########################## Language ############################
+bind = SUPERSHIFT, V, exec, ibus engine Bamboo::Us
+bind = SUPERSHIFT, E, exec, ibus engine xkb:us::eng
+bind = SUPER, Space, exec, ~/.config/eww/scripts/language --cycle
+
+#################### It just works™ keybinds ###################
+# Volume
+bindl = ,XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle
+bindle=, XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
+bindle=, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
+bindle = , XF86AudioRaiseVolume, exec, ~/.config/eww/scripts/volume osd &
+bindle = , XF86AudioLowerVolume, exec, ~/.config/eww/scripts/volume osd &
+bindl = , XF86AudioMute, exec, ~/.config/eww/scripts/volume osd &
+
+# Brightness
+bindle=, XF86MonBrightnessUp, exec, light -A 3 && ~/.config/eww/scripts/brightness osd &
+bindle=, XF86MonBrightnessDown, exec, light -U 3 && ~/.config/eww/scripts/brightness osd &
+
+######################################## Keybinds ########################################
+# Apps: just normal apps
+bind = SUPER, C, exec, code --password-store=gnome --enable-features=UseOzonePlatform --ozone-platform=wayland
+bind = CONTROLSHIFTALT, Y, exec, yuzu
+bind = SUPER, T, exec, foot --override shell=fish
+bind = SUPERALT, T, exec, wezterm
+bind = SUPER, Return, exec, kitty
+bind = SUPER, E, exec, nautilus --new-window
+bind = SUPER, W, exec, firefox
+bind = CONTROLSUPERALT, E, exec, /usr/bin/microsoft-edge-stable --password-store=gnome --enable-features=UseOzonePlatform --ozone-platform=wayland --gtk-version=4
+bind = SUPER, X, exec, gnome-text-editor --new-window
+bind = SUPERSHIFT, W, exec, wps
+
+# Apps: Settings and config
+bind = SUPER, I, exec, 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
+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 = CONTROLALT, Delete, exec, pkill wlogout || wlogout -p layer-shell
+bind = CONTROLSHIFTALTSUPER, Delete, exec, systemctl poweroff
+
+# Screenshot, Record, OCR (Optical Character Recognition), Color picker, Clipboard history
+bind = SUPERSHIFT, D, exec,~/.local/bin/rubyshot | wl-copy
+bind = SUPERSHIFTALT, S, exec, grim -g "$(slurp)" - | swappy -f -
+bindl =,Print,exec,grim - | wl-copy
+bind = SUPERSHIFT, S, exec, grim -g "$(slurp)" - | 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 = CONTROLSUPERSHIFT,S,exec,grim -g "$(slurp)" "tmp.png" && tesseract "tmp.png" - | wl-copy && rm "tmp.png"
+bind = SUPERSHIFT,T,exec,grim -g "$(slurp)" "tmp.png" && tesseract "tmp.png" - | wl-copy && rm "tmp.png"
+bind = SUPERSHIFT, C, exec, hyprpicker -a
+bind = SUPER, B, exec, copyq menu
+bind = SUPER, V, exec, pkill fuzzel || cliphist list | fuzzel --no-fuzzy --icon-theme=candy-icons --background-color=1D1D27ee --text-color=cdd6f4ff --match-color=AC16C7FF --border-width=3 --border-radius=10 --border-color=8701E7FF --selection-color=585b70ff --selection-text-color=cdd6f4ff --selection-match-color=AC16C7FF --font="Rubik" --prompt=" " --dmenu | cliphist decode | wl-copy
+
+# Media
+bind = SUPERSHIFT, N, 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
+
+#Lock screen | blur: --effect-blur=20x20
+bind = SUPER, L, exec, ~/.local/bin/lock.sh
+bind = SUPERSHIFT, L, exec, ~/.local/bin/lock.sh
+bindl = SUPERSHIFT, L, exec, sleep 0.1 && systemctl suspend
+
+# App launcher
+bindr = SUPER, SUPER_L, exec, ~/.config/eww/scripts/toggle-overview.sh --keypress &
+bind = SUPER, Slash, exec, pkill fuzzel || fuzzel --icon-theme=candy-icons --background-color=1D1D27ee --text-color=cdd6f4ff --match-color=AC16C7FF --border-width=3 --border-radius=10 --border-color=8701E7FF --selection-color=585b70ff --selection-text-color=cdd6f4ff --selection-match-color=AC16C7FF --font="Rubik" --prompt=" "
+
+################################# eww keybinds ################################
+bindr = CONTROLSUPER, R, exec, pkill eww && eww daemon && eww open bar && eww open bottomline
+bind = SUPER, Tab, exec, ~/.config/eww/scripts/toggle-overview.sh &
+bind = SUPER, O, exec, ~/.config/eww/scripts/toggle-osettings.sh --keypress &
+bind = CONTROLSUPER, O, exec, ~/.config/eww/scripts/toggle-osettings.sh --keypress &
+bind = SUPER, M, exec, ~/.config/eww/scripts/toggle-bottombar.sh &
+bind = SUPER, N, exec, ~/.config/eww/scripts/toggle-onotify.sh --keypress &
+bind = SUPER, Comma, exec, ~/.config/eww/scripts/toggle-themer.sh &
+bind = SUPER, D, exec, ~/.config/eww/scripts/toggle-dash.sh --keypress &
+bind = SUPER, A, exec, ~/.config/eww/scripts/toggle-dashfs.sh --keypress &
+bind = SUPER, G, exec, ~/.config/eww/scripts/toggle-wingamebar.sh &
+
+bind = CONTROLSUPER, Tab, exec, ~/.config/eww/scripts/toggle-compactmode.sh
+bind = SUPERALT, W, exec, ~/.config/eww/scripts/toggle-winmode.sh
+
+############################ Keybinds for Hyprland ############################
+# Swap windows
+bind = SUPERSHIFT, left, movewindow, l
+bind = SUPERSHIFT, right, movewindow, r
+bind = SUPERSHIFT, up, movewindow, u
+bind = SUPERSHIFT, down, movewindow, d
+# Move focus
+bind = SUPER, left, movefocus, l
+bind = SUPER, right, movefocus, r
+bind = SUPER, up, movefocus, u
+bind = SUPER, down, movefocus, d
+bind = SUPER, BracketLeft, movefocus, l
+bind = SUPER, BracketRight, movefocus, r
+# Window title
+bind = SUPER, left, exec, eww update rev_center_ws=false
+bind = SUPER, right, exec, eww update rev_center_ws=false
+bind = SUPER, up, exec, eww update rev_center_ws=false
+bind = SUPER, down, exec, eww update rev_center_ws=false
+bind = SUPER, BracketLeft, exec, eww update rev_center_ws=false
+bind = SUPER, BracketRight, exec, eww update rev_center_ws=false
+bind = ALT, Tab, exec, eww update rev_center_ws=false
+
+# Workspace, window, tab switch with keyboard
+bind = CONTROLSUPER, right, workspace, +1
+bind = CONTROLSUPER, left, workspace, -1
+bind = CONTROLSUPER, BracketLeft, workspace, -1
+bind = CONTROLSUPER, BracketRight, workspace, +1
+bind = CONTROLSUPER, up, workspace, -5
+bind = CONTROLSUPER, down, workspace, +5
+bind = SUPER, Page_Down, workspace, +1
+bind = SUPER, Page_Up, workspace, -1
+bind = CONTROLSUPER, Page_Down, workspace, +1
+bind = CONTROLSUPER, Page_Up, workspace, -1
+bind = SUPERSHIFT, Page_Down, movetoworkspace, +1
+bind = SUPERSHIFT, Page_Up, movetoworkspace, -1
+bind = CONTROLSUPERSHIFT, Right, movetoworkspace, +1
+bind = CONTROLSUPERSHIFT, Left, movetoworkspace, -1
+bind = SUPERSHIFT, mouse_down, movetoworkspace, -1
+bind = SUPERSHIFT, mouse_up, movetoworkspace, +1
+
+# Show workspaces module
+bind = CONTROLSUPER, right, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, left, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, BracketLeft, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, BracketRight, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, up, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, down, exec, eww update rev_center_ws=true
+bind = SUPER, Page_Down, exec, eww update rev_center_ws=true
+bind = SUPER, Page_Up, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, Page_Down, exec, eww update rev_center_ws=true
+bind = CONTROLSUPER, Page_Up, exec, eww update rev_center_ws=true
+bind = SUPERSHIFT, Page_Down, exec, eww update rev_center_ws=true
+bind = SUPERSHIFT, Page_Up, exec, eww update rev_center_ws=true
+bind = CONTROLSUPERSHIFT, Right, exec, eww update rev_center_ws=true
+bind = CONTROLSUPERSHIFT, Left, exec, eww update rev_center_ws=true
+bind = SUPERSHIFT, mouse_down, exec, eww update rev_center_ws=true
+bind = SUPERSHIFT, mouse_up, exec, eww update rev_center_ws=true
+
+# Window split ratio
+binde = SUPER, Minus, splitratio, -0.1
+binde = SUPER, Equal, splitratio, 0.1
+binde = SUPER, Semicolon, splitratio, -0.1
+binde = SUPER, Apostrophe, splitratio, 0.1
+
+# Fullscreen
+bind = SUPER, F, fullscreen
+
+# Switching
+bind = SUPER, 1, workspace, 1
+bind = SUPER, 2, workspace, 2
+bind = SUPER, 3, workspace, 3
+bind = SUPER, 4, workspace, 4
+bind = SUPER, 5, workspace, 5
+bind = SUPER, 6, workspace, 6
+bind = SUPER, 7, workspace, 7
+bind = SUPER, 8, workspace, 8
+bind = SUPER, 9, workspace, 9
+bind = SUPER, 0, workspace, 10
+bind = SUPER, S, togglespecialworkspace,
+bind = CONTROLSUPER, S, togglespecialworkspace,
+bind = ALT, Tab, cyclenext
+bind = ALT, Tab, bringactivetotop, # bring it to the top
+
+# Move window to workspace Super + Alt + [0-9]
+bind = SUPER ALT, 1, movetoworkspacesilent, 1
+bind = SUPER ALT, 2, movetoworkspacesilent, 2
+bind = SUPER ALT, 3, movetoworkspacesilent, 3
+bind = SUPER ALT, 4, movetoworkspacesilent, 4
+bind = SUPER ALT, 5, movetoworkspacesilent, 5
+bind = SUPER ALT, 6, movetoworkspacesilent, 6
+bind = SUPER ALT, 7, movetoworkspacesilent, 7
+bind = SUPER ALT, 8, movetoworkspacesilent, 8
+bind = SUPER ALT, 9, movetoworkspacesilent, 9
+bind = SUPER ALT, 0, movetoworkspacesilent, 10
+bind = CONTROLSHIFTSUPER, Up, movetoworkspacesilent, special
+bind = SUPERALT, S, movetoworkspacesilent, special
+
+# Scroll through existing workspaces with (Control) + Super + scroll
+bind = SUPER, mouse_up, workspace, +1
+bind = SUPER, mouse_down, workspace, -1
+bind = CONTROLSUPER, mouse_up, workspace, +1
+bind = CONTROLSUPER, mouse_down, workspace, -1
+
+# Move/resize windows with Super + LMB/RMB and dragging
+bindm = SUPER, mouse:272, movewindow
+bindm = SUPER, mouse:273, resizewindow
+bindm = SUPER, mouse:274, movewindow
+bindm = SUPER, Z, movewindow
+bind = CONTROLSUPER, Backslash, resizeactive, exact 640 480
+
diff --git a/early/.config/hypr/shaders/bluefilter.frag b/early/.config/hypr/shaders/bluefilter.frag
new file mode 100755
index 000000000..5469af9c6
--- /dev/null
+++ b/early/.config/hypr/shaders/bluefilter.frag
@@ -0,0 +1,20 @@
+// 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;
+}
diff --git a/early/.config/hypr/shaders/crt.frag b/early/.config/hypr/shaders/crt.frag
new file mode 100755
index 000000000..a37ff9fb2
--- /dev/null
+++ b/early/.config/hypr/shaders/crt.frag
@@ -0,0 +1,511 @@
+#version 100
+precision highp float;
+varying highp vec2 v_texcoord;
+varying highp vec3 v_pos;
+uniform highp sampler2D tex;
+uniform lowp float time;
+
+#define BORDER_COLOR vec4(vec3(0.0, 0.0, 0.0), 1.0) // black border
+#define BORDER_RADIUS 1.0 // larger vignette radius
+#define BORDER_SIZE 0.01 // small border size
+#define CHROMATIC_ABERRATION_STRENGTH 0.00
+#define DENOISE_INTENSITY 0.0001 //
+#define DISTORTION_AMOUNT 0.00 // moderate distortion amount
+#define HDR_BLOOM 0.75 // bloom intensity
+#define HDR_BRIGHTNESS 0.011 // brightness
+#define HDR_CONTRAST 0.011 // contrast
+#define HDR_SATURATION 1.0// saturation
+#define LENS_DISTORTION_AMOUNT 0.0
+#define NOISE_THRESHOLD 0.0001
+#define PHOSPHOR_BLUR_AMOUNT 0.77 // Amount of blur for phosphor glow
+#define PHOSPHOR_GLOW_AMOUNT 0.77 // Amount of phosphor glow
+#define SAMPLING_RADIUS 0.0001
+#define SCANLINE_FREQUENCY 540.0
+#define SCANLINE_THICKNESS 0.0507
+#define SCANLINE_TIME time * 471.24
+#define SHARPNESS 0.25
+#define SUPERSAMPLING_SAMPLES 16.0
+#define VIGNETTE_RADIUS 0.0 // larger vignette radius
+#define PI 3.14159265359
+#define TWOPI 6.28318530718
+
+vec2 applyBarrelDistortion(vec2 coord, float amt) {
+ vec2 p = coord.xy / vec2(1.0);
+ vec2 v = p * 2.0 - vec2(1.0);
+ float r = dot(v, v);
+ float k = 1.0 + pow(r, 2.0) * pow(amt, 2.0);
+ vec2 result = v * k;
+ return vec2(0.5, 0.5) + 0.5 * result.xy;
+}
+
+vec4 applyColorCorrection(vec4 color) {
+ color.rgb *= vec3(1.0, 0.79, 0.89);
+ return vec4(color.rgb, 1.0);
+}
+
+vec4 applyBorder(vec2 tc, vec4 color, float borderSize, vec4 borderColor) {
+ float dist_x = min(tc.x, 1.0 - tc.x);
+ float dist_y = min(tc.y, 1.0 - tc.y);
+ float dist = min(dist_x, dist_y) * -1.0;
+ float border = smoothstep(borderSize, 0.0, dist);
+ border += smoothstep(borderSize, 0.0, dist);
+ return mix(color, borderColor, border);
+}
+
+vec4 applyFakeHDR(vec4 color, float brightness, float contrast, float saturation, float bloom) {
+ color.rgb = (color.rgb - vec3(0.5)) * exp2(brightness) + vec3(0.5);
+ vec3 crtfactor = vec3(1.05, 0.92, 1.0);
+ color.rgb = pow(color.rgb, crtfactor);
+ // // NTSC
+ // vec3 lumCoeff = vec3(0.2125, 0.7154, 0.0721);
+
+ // // BT.709
+ // vec3 lumCoeff = vec3(0.299, 0.587, 0.114);
+
+ // BT.2020
+ vec3 lumCoeff = vec3(0.2627, 0.6780, 0.0593);
+
+ // // Warm NTSC
+ // vec3 lumCoeff = vec3(0.2125, 0.7010, 0.0865);
+
+ float luminance = dot(color.rgb, lumCoeff);
+ luminance = pow(luminance, 2.2);
+ color.rgb = mix(vec3(luminance), color.rgb, saturation);
+ color.rgb = mix(color.rgb, vec3(1.0), pow(max(0.0, luminance - 1.0 + bloom), 4.0));
+ return color;
+}
+
+vec4 applyVignette(vec4 color) {
+ vec2 center = vec2(0.5, 0.5); // center of screen
+ float radius = VIGNETTE_RADIUS; // radius of vignette effect
+ float softness = 1.0; // softness of vignette effect
+ float intensity = 0.7; // intensity of vignette effect
+ vec2 offset = v_texcoord - center; // offset from center of screen
+ float distance = length(offset); // distance from center of screen
+ float alpha = smoothstep(radius, radius - radius * softness, distance) * intensity; // calculate alpha value for vignette effect
+ return mix(vec4(0.0, 0.0, 0.0, alpha), color, alpha); // mix black with color using calculated alpha value
+}
+
+vec4 applyPhosphorGlow(vec2 tc, vec4 color, sampler2D tex) {
+ // Calculate average color value of the texture
+ vec4 texelColor = color;
+ float averageColor = (texelColor.r + texelColor.g + texelColor.b) / 3.0;
+
+ // Determine brightness-dependent color factor
+ float factor = mix(
+ mix(0.09,
+ mix(0.005, 0.0075, (averageColor - 0.1) / 0.1),
+ step(0.01, averageColor)), 0.0005,
+ step(0.02, averageColor));
+ // Apply phosphor glow effect
+ vec4 sum = vec4(0.0);
+ vec4 pixels[9];
+ pixels[0] = texture2D(tex, tc - vec2(0.001, 0.001));
+ pixels[1] = texture2D(tex, tc - vec2(0.001, 0.0));
+ pixels[2] = texture2D(tex, tc - vec2(0.001, -0.001));
+ pixels[3] = texture2D(tex, tc - vec2(0.0, 0.001));
+ pixels[4] = texture2D(tex, tc);
+ pixels[5] = texture2D(tex, tc + vec2(0.001, 0.001));
+ pixels[6] = texture2D(tex, tc + vec2(0.001, 0.0));
+ pixels[7] = texture2D(tex, tc + vec2(0.001, -0.001));
+ pixels[8] = texture2D(tex, tc + vec2(0.0, 0.001));
+
+// Perform operations on input pixels in parallel
+ sum = pixels[0]
+ + pixels[1]
+ + pixels[2]
+ + pixels[3]
+ + pixels[4]
+ + pixels[5]
+ + pixels[6]
+ + pixels[7]
+ + pixels[8];
+ sum /= 9.0;
+ sum += texture2D(tex, tc - vec2(0.01, 0.01)) * 0.001;
+ sum += texture2D(tex, tc - vec2(0.0, 0.01)) * 0.001;
+ sum += texture2D(tex, tc - vec2(-0.01, 0.01)) * 0.001;
+ sum += texture2D(tex, tc - vec2(0.01, 0.0)) * 0.001;
+ sum += color * PHOSPHOR_BLUR_AMOUNT;
+ sum += texture2D(tex, tc - vec2(-0.01, 0.0)) * 0.001;
+ sum += texture2D(tex, tc - vec2(0.01, -0.01)) * 0.001;
+ sum += texture2D(tex, tc - vec2(0.0, -0.01)) * 0.001;
+ sum += texture2D(tex, tc - vec2(-0.01, -0.01)) * 0.001;
+ sum *= PHOSPHOR_GLOW_AMOUNT;
+
+ // Initialize sum_sum_factor to zero
+ vec4 sum_sum_factor = vec4(0.0);
+ // Compute sum_j for i = -1
+ vec4 sum_j = vec4(0.0);
+ sum_j += texture2D(tex, tc + vec2(-1, -1) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(0, -1) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(1, -1) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(-1, 0) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(0, 0) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(1, 0) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(-1, 1) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(1, 1) * 0.01);
+ sum_sum_factor += sum_j * vec4(0.011);
+
+ // Compute sum_j for i = 0
+ sum_j = vec4(0.0);
+ sum_j += texture2D(tex, tc + vec2(-1, 0) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(0, 0) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(1, 0) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(-1, 1) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(1, 1) * 0.01);
+ sum_sum_factor += sum_j * vec4(0.011);
+
+ // Compute sum_j for i = 1
+ sum_j = vec4(0.0);
+ sum_j += texture2D(tex, tc + vec2(-1, 0) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(1, 0) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(-1, 1) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
+ sum_j += texture2D(tex, tc + vec2(1, 1) * 0.01);
+ sum_sum_factor += sum_j * vec4(0.011);
+ color += mix(sum_sum_factor * sum_sum_factor * vec4(factor), sum, 0.5);
+ return color;
+}
+
+vec4 applyAdaptiveSharpen(vec2 tc, vec4 color, sampler2D tex) {
+ vec4 color_tl = texture2D(tex, tc + vec2(-1.0, -1.0) * 0.5 / 2160.0);
+ vec4 color_tr = texture2D(tex, tc + vec2(1.0, -1.0) * 0.5 / 2160.0);
+ vec4 color_bl = texture2D(tex, tc + vec2(-1.0, 1.0) * 0.5 / 2160.0);
+ vec4 color_br = texture2D(tex, tc + vec2(1.0, 1.0) * 0.5 / 2160.0);
+ float sharpness = SHARPNESS;
+ vec3 color_no_alpha = color.rgb;
+ vec3 color_tl_no_alpha = color_tl.rgb;
+ vec3 color_tr_no_alpha = color_tr.rgb;
+ vec3 color_bl_no_alpha = color_bl.rgb;
+ vec3 color_br_no_alpha = color_br.rgb;
+ float delta = (dot(color_no_alpha, vec3(0.333333)) + dot(color_tl_no_alpha, vec3(0.333333)) + dot(color_tr_no_alpha, vec3(0.333333)) + dot(color_bl_no_alpha, vec3(0.333333)) + dot(color_br_no_alpha, vec3(0.333333))) * 0.2 - dot(color_no_alpha, vec3(0.333333));
+ vec3 sharp_color_no_alpha = color_no_alpha + min(vec3(0.0), vec3(delta * sharpness));
+ vec4 sharp_color = vec4(sharp_color_no_alpha, color.a);
+ return sharp_color;
+}
+
+vec4 applyScanlines(vec2 tc, vec4 color) {
+ float scanline = (cos(tc.y * SCANLINE_FREQUENCY + SCANLINE_TIME) *
+ sin(tc.y * SCANLINE_FREQUENCY + SCANLINE_TIME)) * SCANLINE_THICKNESS;
+ float alpha = clamp(1.0 - abs(scanline), 0.0, 1.0);
+ return vec4(color.rgb * alpha, color.a);
+}
+
+vec4 applyChromaticAberration(vec2 uv, vec4 color) {
+ vec2 center = vec2(0.5, 0.5); // center of the screen
+ vec2 offset = (uv - center) * CHROMATIC_ABERRATION_STRENGTH; // calculate the offset from the center
+
+ // apply lens distortion
+ float rSquared = dot(offset, offset);
+ float distortion = 1.0 + LENS_DISTORTION_AMOUNT * rSquared;
+ vec2 distortedOffset = offset * distortion;
+
+ // apply chromatic aberration
+ vec2 redOffset = vec2(distortedOffset.x * 1.00, distortedOffset.y * 1.00);
+ vec2 blueOffset = vec2(distortedOffset.x * 1.00, distortedOffset.y * 1.00);
+
+ vec4 redColor = texture2D(tex, uv + redOffset);
+ vec4 blueColor = texture2D(tex, uv + blueOffset);
+
+ vec4 result = vec4(redColor.r, color.g, blueColor.b, color.a);
+
+ return result;
+}
+
+vec4 reduceGlare(vec4 color) {
+ // Calculate the intensity of the color by taking the average of the RGB components
+ float intensity = (color.r + color.g + color.b) / 3.0;
+ // Set the maximum intensity that can be considered for glare
+ float maxIntensity = 0.98;
+ // Use smoothstep to create a smooth transition from no glare to full glare
+ // based on the intensity of the color and the maximum intensity
+ float glareIntensity = smoothstep(maxIntensity - 0.02, maxIntensity, intensity);
+ // Set the amount of glare to apply to the color
+ float glareAmount = 0.02;
+ // Mix the original color with the reduced color that has glare applied to it
+ vec3 reducedColor = mix(color.rgb, vec3(glareIntensity), glareAmount);
+ // Return the reduced color with the original alpha value
+ return vec4(reducedColor, color.a);
+}
+
+// Apply a fake HDR effect to the input color.
+// Parameters:
+// - inputColor: the color to apply the effect to.
+// - brightness: the brightness of the image. Should be a value between 0 and 1.
+// - contrast: the contrast of the image. Should be a value between 0 and 1.
+// - saturation: the saturation of the image. Should be a value between 0 and 2.
+// - bloom: the intensity of the bloom effect. Should be a value between 0 and 1.
+vec4 applyFakeHDREffect(vec4 inputColor, float brightness, float contrast, float saturation, float bloom) {
+ const float minBrightness = 0.0;
+ const float maxBrightness = 1.0;
+ const float minContrast = 0.0;
+ const float maxContrast = 1.0;
+ const float minSaturation = 0.0;
+ const float maxSaturation = 2.0;
+ const float minBloom = 0.0;
+ const float maxBloom = 1.0;
+
+ // Check input parameters for validity
+ if (brightness < minBrightness || brightness > maxBrightness) {
+ return vec4(0.0, 0.0, 0.0, 1.0); // Return black with alpha of 1.0 to indicate error
+ }
+ if (contrast < minContrast || contrast > maxContrast) {
+ return vec4(0.0, 0.0, 0.0, 1.0);
+ }
+ if (saturation < minSaturation || saturation > maxSaturation) {
+ return vec4(0.0, 0.0, 0.0, 1.0);
+ }
+ if (bloom < minBloom || bloom > maxBloom) {
+ return vec4(0.0, 0.0, 0.0, 1.0);
+ }
+
+ // Apply brightness and contrast
+ vec3 color = inputColor.rgb;
+ color = (color - vec3(0.5)) * exp2(brightness * 10.0) + vec3(0.5);
+ color = mix(vec3(0.5), color, pow(contrast * 4.0 + 1.0, 2.0));
+
+ // // NTSC
+ // vec3 lumCoeff = vec3(0.2125, 0.7154, 0.0721);
+
+ // // BT.709
+ // vec3 lumCoeff = vec3(0.299, 0.587, 0.114);
+
+ // // BT.2020
+ // vec3 lumCoeff = vec3(0.2627, 0.6780, 0.0593);
+
+ // Warm NTSC
+ vec3 lumCoeff = vec3(0.2125, 0.7010, 0.0865);
+
+ // Apply saturation
+ float luminance = dot(color, lumCoeff);
+ vec3 grey = vec3(luminance);
+ color = mix(grey, color, saturation);
+
+ // Apply bloom effect
+ float threshold = 1.0 - bloom;
+ vec3 bloomColor = max(color - threshold, vec3(0.0));
+ bloomColor = pow(bloomColor, vec3(2.0));
+ bloomColor = mix(vec3(0.0), bloomColor, pow(min(luminance, threshold), 4.0));
+ color += bloomColor;
+
+ return vec4(color, inputColor.a);
+}
+
+vec4 bilateralFilter(sampler2D tex, vec2 uv, vec4 color, float sampleRadius, float noiseThreshold, float intensity) {
+ vec4 filteredColor = vec4(0.0);
+ float totalWeight = 0.0;
+
+ // Top-left pixel
+ vec4 sample = texture2D(tex, uv + vec2(-1.0, -1.0));
+ float dist = length(vec2(-1.0, -1.0));
+ float colorDist = length(sample - color);
+ float weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+ filteredColor += sample * weight;
+ totalWeight += weight;
+
+ // Top pixel
+ sample = texture2D(tex, uv + vec2(0.0, -1.0));
+ dist = length(vec2(0.0, -1.0));
+ colorDist = length(sample - color);
+ weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+ filteredColor += sample * weight;
+ totalWeight += weight;
+
+ // Top-right pixel
+ sample = texture2D(tex, uv + vec2(1.0, -1.0));
+ dist = length(vec2(1.0, -1.0));
+ colorDist = length(sample - color);
+ weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+ filteredColor += sample * weight;
+ totalWeight += weight;
+
+ // Left pixel
+ sample = texture2D(tex, uv + vec2(-1.0, 0.0));
+ dist = length(vec2(-1.0, 0.0));
+ colorDist = length(sample - color);
+ weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+ filteredColor += sample * weight;
+ totalWeight += weight;
+
+ // Center pixel
+ sample = texture2D(tex, uv);
+ dist = 0.0;
+ colorDist = length(sample - color);
+ weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+ filteredColor += sample * weight;
+ totalWeight += weight;
+
+ // Right pixel
+ sample = texture2D(tex, uv + vec2(1.0, 0.0));
+ dist = length(vec2(1.0, 0.0));
+ colorDist = length(sample - color);
+ weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+ filteredColor += sample * weight;
+ totalWeight += weight;
+
+ // Bottom-left pixel
+ sample = texture2D(tex, uv + vec2(-1.0, 1.0));
+ dist = length(vec2(-1.0, 1.0));
+ colorDist = length(sample - color);
+ weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+ filteredColor += sample * weight;
+ totalWeight += weight;
+
+// Bottom pixel
+ sample = texture2D(tex, uv + vec2(0.0, sampleRadius));
+ dist = length(vec2(0.0, sampleRadius));
+ colorDist = length(sample - color);
+ weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+ filteredColor += sample * weight;
+ totalWeight += weight;
+
+ filteredColor /= totalWeight;
+ return mix(color, filteredColor, step(noiseThreshold, length(filteredColor - color)));
+}
+
+vec4 supersample(sampler2D tex, vec2 uv, float sampleRadius, float noiseThreshold, float intensity) {
+ float radiusSq = sampleRadius * sampleRadius;
+ vec2 poissonDisk;
+ vec4 color = vec4(0.0);
+
+ float r1_0 = sqrt(0.0 / 16.0);
+ float r2_0 = fract(1.0 / 3.0);
+ float theta_0 = TWOPI * r2_0;
+ poissonDisk = vec2(r1_0 * cos(theta_0), r1_0 * sin(theta_0));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_1 = sqrt(1.0 / 16.0);
+ float r2_1 = fract(2.0 / 3.0);
+ float theta_1 = TWOPI * r2_1;
+ poissonDisk = vec2(r1_1 * cos(theta_1), r1_1 * sin(theta_1));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_2 = sqrt(2.0 / 16.0);
+ float r2_2 = fract(3.0 / 3.0);
+ float theta_2 = TWOPI * r2_2;
+ poissonDisk = vec2(r1_2 * cos(theta_2), r1_2 * sin(theta_2));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_3 = sqrt(3.0 / 16.0);
+ float r2_3 = fract(4.0 / 3.0);
+ float theta_3 = TWOPI * r2_3;
+ poissonDisk = vec2(r1_3 * cos(theta_3), r1_3 * sin(theta_3));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_4 = sqrt(4.0 / 16.0);
+ float r2_4 = fract(5.0 / 3.0);
+ float theta_4 = TWOPI * r2_4;
+ poissonDisk = vec2(r1_4 * cos(theta_4), r1_4 * sin(theta_4));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_5 = sqrt(5.0 / 16.0);
+ float r2_5 = fract(6.0 / 3.0);
+ float theta_5 = TWOPI * r2_5;
+ poissonDisk = vec2(r1_5 * cos(theta_5), r1_5 * sin(theta_5));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_6 = sqrt(6.0 / 16.0);
+ float r2_6 = fract(7.0 / 3.0);
+ float theta_6 = TWOPI * r2_6;
+ poissonDisk = vec2(r1_6 * cos(theta_6), r1_6 * sin(theta_6));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_7 = sqrt(7.0 / 16.0);
+ float r2_7 = fract(8.0 / 3.0);
+ float theta_7 = TWOPI * r2_7;
+ poissonDisk = vec2(r1_7 * cos(theta_7), r1_7 * sin(theta_7));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_8 = sqrt(8.0 / 16.0);
+ float r2_8 = fract(9.0 / 3.0);
+ float theta_8 = TWOPI * r2_8;
+ poissonDisk = vec2(r1_8 * cos(theta_8), r1_8 * sin(theta_8));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_9 = sqrt(9.0 / 16.0);
+ float r2_9 = fract(10.0 / 3.0);
+ float theta_9 = TWOPI * r2_9;
+ poissonDisk = vec2(r1_9 * cos(theta_9), r1_9 * sin(theta_9));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_10 = sqrt(10.0 / 16.0);
+ float r2_10 = fract(11.0 / 3.0);
+ float theta_10 = TWOPI * r2_10;
+ poissonDisk = vec2(r1_10 * cos(theta_10), r1_10 * sin(theta_10));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_11 = sqrt(11.0 / 16.0);
+ float r2_11 = fract(12.0 / 3.0);
+ float theta_11 = TWOPI * r2_11;
+ poissonDisk = vec2(r1_11 * cos(theta_11), r1_11 * sin(theta_11));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_12 = sqrt(12.0 / 16.0);
+ float r2_12 = fract(13.0 / 3.0);
+ float theta_12 = TWOPI * r2_12;
+ poissonDisk = vec2(r1_12 * cos(theta_12), r1_12 * sin(theta_12));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_13 = sqrt(13.0 / 16.0);
+ float r2_13 = fract(14.0 / 3.0);
+ float theta_13 = TWOPI * r2_13;
+ poissonDisk = vec2(r1_13 * cos(theta_13), r1_13 * sin(theta_13));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_14 = sqrt(14.0 / 16.0);
+ float r2_14 = fract(15.0 / 3.0);
+ float theta_14 = TWOPI * r2_14;
+ poissonDisk = vec2(r1_14 * cos(theta_14), r1_14 * sin(theta_14));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ float r1_15 = sqrt(15.0 / 16.0);
+ float r2_15 = fract(16.0 / 3.0);
+ float theta_15 = TWOPI * r2_15;
+ poissonDisk = vec2(r1_15 * cos(theta_15), r1_15 * sin(theta_15));
+ color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+ return bilateralFilter(tex, uv, color, sampleRadius, noiseThreshold, intensity);
+}
+void main() {
+ vec2 tc_no_dist = v_texcoord;
+
+ vec2 tc = applyBarrelDistortion(tc_no_dist, DISTORTION_AMOUNT);
+
+ // [-1, 1]
+ vec2 tc_no_dist_symmetric = tc_no_dist * 2.0 - 1.0;
+
+ // [0,1]
+ vec2 tc_no_dist_normalized = (tc_no_dist_symmetric + 1.0) / 2.0;
+
+ // vec4 color = texture2D(tex, tc);
+ vec4 color = supersample(tex, tc, SAMPLING_RADIUS, NOISE_THRESHOLD, DENOISE_INTENSITY);
+
+ color = applyAdaptiveSharpen(tc, color, tex);
+
+ color = applyPhosphorGlow(tc, color, tex);
+
+ color = reduceGlare(color);
+
+ color = mix(applyFakeHDREffect(color, HDR_BRIGHTNESS, HDR_CONTRAST, HDR_SATURATION, HDR_BLOOM), color, 0.5);
+
+ color = applyColorCorrection(color);
+
+ color /= SUPERSAMPLING_SAMPLES;
+
+ color = mix(applyChromaticAberration(tc, color), color, 0.25);
+
+ color = mix(color, applyVignette(color), 0.37);
+
+ color = applyBorder(tc_no_dist_normalized, color, 1.0 - BORDER_SIZE * BORDER_RADIUS, BORDER_COLOR);
+
+ color = mix(applyBorder(tc, color, BORDER_SIZE, BORDER_COLOR), color, 0.05);
+
+ color = applyScanlines(tc, color);
+
+ gl_FragColor = color;
+ gl_FragColor.a = 1.0;
+}
+
diff --git a/early/.config/hypr/shaders/drugs.frag b/early/.config/hypr/shaders/drugs.frag
new file mode 100755
index 000000000..1190ed03c
--- /dev/null
+++ b/early/.config/hypr/shaders/drugs.frag
@@ -0,0 +1,42 @@
+
+precision highp float;
+varying vec2 v_texcoord;
+uniform sampler2D tex;
+uniform float time;
+
+void warpco(inout vec2 tc) {
+ tc -= 0.5;
+ tc *= length(tc) * 2.0;
+ tc += 0.5;
+}
+
+float rand1d(float seed) {
+ return sin(seed*1454.0);
+}
+
+float rand2d(vec2 co)
+{
+ return fract(sin(dot(co.xy, vec2(12.9898,78.233))) * 43758.5453);
+}
+
+vec3 rgb(in vec2 tc, float freq, float amp, inout vec4 centre) {
+ vec2 off = vec2(1.0/800.0, 0.0) * sin(tc.t * freq + time) * amp;
+ vec2 off2 = vec2(1.0/800.0, 0.0) * sin(tc.t * freq - time * 1.5) * amp;
+ centre = texture2D(tex, tc);
+ return vec3(texture2D(tex, tc-off).r, centre.g, texture2D(tex, tc+off2).b);
+}
+
+void main() {
+ // vec2 px = 1.0 / textureSize(tex, 0).st;
+ vec2 tc = v_texcoord;
+ warpco(tc);
+ tc = mix(v_texcoord, tc, sin(time * 2.0)*0.07);
+ tc.x += rand2d(floor(tc * 20.0 + floor(time * 2.5))) * 0.01;
+ tc.x += rand1d(floor(tc.x * 40.0)) * 0.005 * rand1d(time * 0.001);
+ tc.y += sin(tc.x + time) * 0.02;
+ vec4 centre;
+ vec3 bent = rgb(tc, 100.0, 5.0, centre);
+ vec3 col = mix(centre.rgb, bent, sin(time));
+ gl_FragColor = vec4(col, centre.a);
+ // gl_FragColor = vec4(texture2D(tex, v_texcoord));
+}
\ No newline at end of file
diff --git a/early/.config/hypr/shaders/extradark.frag b/early/.config/hypr/shaders/extradark.frag
new file mode 100755
index 000000000..089ee8149
--- /dev/null
+++ b/early/.config/hypr/shaders/extradark.frag
@@ -0,0 +1,21 @@
+// 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);
+
+ // red
+ pixColor[0] *= 0.7;
+ // green
+ pixColor[1] *= 0.6;
+ // blue
+ pixColor[2] *= 0.5;
+
+ gl_FragColor = pixColor;
+}
diff --git a/early/.config/hypr/shaders/nothing.frag b/early/.config/hypr/shaders/nothing.frag
new file mode 100755
index 000000000..163e6003a
--- /dev/null
+++ b/early/.config/hypr/shaders/nothing.frag
@@ -0,0 +1,14 @@
+// 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);
+
+ gl_FragColor = pixColor;
+}
diff --git a/early/.config/hypr/shaders/solarized.frag b/early/.config/hypr/shaders/solarized.frag
new file mode 100755
index 000000000..1c37f2cc0
--- /dev/null
+++ b/early/.config/hypr/shaders/solarized.frag
@@ -0,0 +1,41 @@
+// -*- mode:c -*-
+precision lowp float;
+varying vec2 v_texcoord;
+uniform sampler2D tex;
+
+float distanceSquared(vec3 pixColor, vec3 solarizedColor) {
+ vec3 distanceVector = pixColor - solarizedColor;
+ return dot(distanceVector, distanceVector);
+}
+
+void main() {
+ vec3 solarized[16];
+ solarized[0] = vec3(0.,0.169,0.212);
+ solarized[1] = vec3(0.027,0.212,0.259);
+ solarized[2] = vec3(0.345,0.431,0.459);
+ solarized[3] = vec3(0.396,0.482,0.514);
+ solarized[4] = vec3(0.514,0.58,0.588);
+ solarized[5] = vec3(0.576,0.631,0.631);
+ solarized[6] = vec3(0.933,0.91,0.835);
+ solarized[7] = vec3(0.992,0.965,0.89);
+ solarized[8] = vec3(0.71,0.537,0.);
+ solarized[9] = vec3(0.796,0.294,0.086);
+ solarized[10] = vec3(0.863,0.196,0.184);
+ solarized[11] = vec3(0.827,0.212,0.51);
+ solarized[12] = vec3(0.424,0.443,0.769);
+ solarized[13] = vec3(0.149,0.545,0.824);
+ solarized[14] = vec3(0.165,0.631,0.596);
+ solarized[15] = vec3(0.522,0.6,0.);
+
+ vec3 pixColor = vec3(texture2D(tex, v_texcoord));
+ int closest = 0;
+ float closestDistanceSquared = distanceSquared(pixColor, solarized[0]);
+ for (int i = 1; i < 15; i++) {
+ float newDistanceSquared = distanceSquared(pixColor, solarized[i]);
+ if (newDistanceSquared < closestDistanceSquared) {
+ closest = i;
+ closestDistanceSquared = newDistanceSquared;
+ }
+ }
+ gl_FragColor = vec4(solarized[closest], 1.);
+}
diff --git a/early/.config/kitty/kitty.conf b/early/.config/kitty/kitty.conf
new file mode 100644
index 000000000..6846e8d5a
--- /dev/null
+++ b/early/.config/kitty/kitty.conf
@@ -0,0 +1,93 @@
+font_family JetBrains Mono Nerd Font
+
+font_size 12
+confirm_os_window_close 0
+
+adjust_line_height 0
+cursor #00ccff
+
+# A port of forest night by sainnhe
+# https://github.com/sainnhe/forest-night
+
+## name: Everforest Dark B
+## author: nope
+## license: idk
+## blurb: everforesttttttt
+
+#window
+window_padding_width 20
+selection_foreground #d8caac
+selection_background #505a60
+background_opacity 0.5
+
+foreground #a9b1d6
+background #1a1b26
+
+# Black
+color0 #414868
+color8 #414868
+
+# Red
+color1 #f7768e
+color9 #f7768e
+
+# Green
+color2 #73daca
+color10 #73daca
+
+# Yellow
+color3 #e0af68
+color11 #e0af68
+
+# Blue
+color4 #7aa2f7
+color12 #7aa2f7
+
+# Magenta
+color5 #bb9af7
+color13 #bb9af7
+
+# Cyan
+color6 #7dcfff
+color14 #7dcfff
+
+# White
+color7 #c0caf5
+color15 #c0caf5
+
+# Cursor
+cursor #c0caf5
+cursor_text_color #1a1b26
+
+# Selection highlight
+selection_foreground none
+selection_background #28344a
+
+# The color for highlighting URLs on mouse-over
+url_color #9ece6a
+
+# Window borders
+active_border_color #3d59a1
+inactive_border_color #101014
+bell_border_color #e0af68
+
+# Tab bar
+tab_bar_style fade
+tab_fade 1
+active_tab_foreground #3d59a1
+active_tab_background #16161e
+active_tab_font_style bold
+inactive_tab_foreground #787c99
+inactive_tab_background #16161e
+inactive_tab_font_style bold
+tab_bar_background #101014
+
+# Title bar
+macos_titlebar_color #16161e
+
+# Storm
+# background #24283b
+# cursor_text_color #24283b
+# active_tab_background #1f2335
+# inactive_tab_background #1f2335
+# macos_titlebar_color #1f2335
diff --git a/early/.config/mpv/mpv.conf b/early/.config/mpv/mpv.conf
new file mode 100644
index 000000000..f7dc66c09
--- /dev/null
+++ b/early/.config/mpv/mpv.conf
@@ -0,0 +1 @@
+keep-open=yes
\ No newline at end of file
diff --git a/early/.config/starship.toml b/early/.config/starship.toml
new file mode 100644
index 000000000..4ef021903
--- /dev/null
+++ b/early/.config/starship.toml
@@ -0,0 +1,96 @@
+# Don't print a new line at the start of the prompt
+add_newline = false
+# Pipes ╰─ ╭─
+# Powerline symbols
+# Wedges 🭧🭒 🭣🭧🭓
+# Random noise 🬖🬥🬔🬗
+
+right_format = """\
+$cmd_duration
+"""
+
+format = """
+$username$hostname$directory
+$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:#000000)[](bold fg:blue)"
+
+error_symbol = "[🭧🭒](bold fg:red)[ ✗ ](bold bg:red fg:#000000)[](bold fg:red)"
+# Disable the package module, hiding it from the prompt completely
+[package]
+disabled = true
+
+[git_branch]
+symbol = "🌱 "
+truncation_length = 4
+truncation_symbol = ""
+
+[git_commit]
+commit_hash_length = 4
+tag_symbol = "🔖 "
+
+[git_state]
+format = '[\($state( $progress_current of $progress_total)\)]($style) '
+cherry_pick = "[🍒 PICKING](bold red)"
+
+[git_status]
+conflicted = " 🏳 "
+ahead = " 🏎💨 "
+behind = " 😰 "
+diverged = " 😵 "
+untracked = " 🤷 "
+stashed = " 📦 "
+modified = " 📝 "
+staged = '[++\($count\)](blue)'
+renamed = " ✍️ "
+deleted = " 🗑 "
+
+[hostname]
+ssh_only = false
+format = "[ ](bold bg:yellow fg:blue)[$hostname](bg:yellow bold fg:#000000)[ ](bold fg:yellow bg:green)"
+trim_at = ".companyname.com"
+disabled = false
+
+[line_break]
+disabled = false
+
+[memory_usage]
+disabled = true
+threshold = -1
+symbol = " "
+style = "bold dimmed blue"
+
+[time]
+disabled = true
+format = '🕙[\[ $time \]]($style) '
+time_format = "%T"
+
+[username]
+style_user = "bold bg:blue fg:#000000"
+style_root = "red bold"
+format = "[🭃](bold fg:blue)[$user]($style)"
+disabled = false
+show_always = true
+
+[directory]
+home_symbol = " "
+read_only = " "
+style = "bold bg:green fg:#000000"
+truncation_length = 2
+truncation_symbol = "./"
+format = '[$path]($style)[🭞](fg:green )'
+
+
+[directory.substitutions]
+"Documents" = " "
+"/" = " "
+"Downloads" = " "
+"Music" = " "
+"Pictures" = " "
+
+[cmd_duration]
+min_time = 0
+format = '[🬈🬖🬥🬅 ](bold bg:cyan fg:#000000)[time:$duration](bold bg:cyan fg:#000000)[ 🬖🬥🬔🬗](bold bg:cyan fg:#000000)'
diff --git a/early/.config/waybar/config b/early/.config/waybar/config
new file mode 100755
index 000000000..066818e4a
--- /dev/null
+++ b/early/.config/waybar/config
@@ -0,0 +1,78 @@
+{
+ "layer": "top",
+ "height": 30,
+ "position": "bottom",
+ "spacing": 0,
+ "exclusive": false,
+ "margin-bottom": 50,
+ "margin-right": 210,
+ "margin-left": 1600,
+ "fixed-center": false,
+
+ "modules-left": [
+
+ ],
+
+ "modules-center": [
+ "tray",
+ ],
+
+ "modules-right": [
+ ],
+
+ "custom/weather": {
+ "exec": "curl 'https://wttr.in/?format=1' | tr -d '+'",
+ "interval": 1800
+ },
+
+ "custom/start": {
+ "format": " ",
+ "on-click": "~/.config/eww/scripts/toggle-overview.sh"
+ },
+
+ "wlr/taskbar": {
+ "format": "{icon}",
+ "icon-size": 24,
+ "tooltip-format": "{title}",
+ "on-click": "activate",
+ "on-click-middle": "close",
+ },
+
+ "clock": {
+ "format": " {:%I:%M %p%n%e/%m/%G}",
+ "tooltip-format": "{:%Y %B}\n{calendar}",
+ "format-alt": " {:%Y-%m-%d}"
+ },
+
+ "tray": {
+ "spacing": 8
+ },
+
+ "pulseaudio": {
+ "format": "{icon}",
+ "format-bluetooth": "{volume}% {icon} {format_source}",
+ "format-bluetooth-muted": " {icon} {format_source}",
+ "format-muted": " {format_source}",
+ "format-source": " {volume}",
+ "format-source-muted": "",
+ "format-icons": {
+ "headphone": "",
+ "hands-free": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", "", ""]
+ },
+ "tooltip-format": "{format_source}%",
+ "on-click": "easyeffects"
+ },
+ "network": {
+ "format-wifi": "",
+ "format-ethernet": "",
+ "tooltip-format": "{ifname} via {gwaddr} ",
+ "format-linked": "{ifname} (No IP) ",
+ "format-disconnected": "Disconnected ⚠",
+ "on-click": "alacritty -e nmtui"
+ },
+}
diff --git a/early/.config/waybar/noise.png b/early/.config/waybar/noise.png
new file mode 100755
index 000000000..028b188b5
Binary files /dev/null and b/early/.config/waybar/noise.png differ
diff --git a/early/.config/waybar/style.css b/early/.config/waybar/style.css
new file mode 100755
index 000000000..c1a6ae5c2
--- /dev/null
+++ b/early/.config/waybar/style.css
@@ -0,0 +1,67 @@
+* {
+ color: #f3f9ff;
+ font-size: 11px;
+ font-family: Segoe-Fluent-Icons, Segoe-UI;
+ font-weight: 500;
+}
+
+window#waybar {
+ background: transparent;
+}
+
+tooltip {
+ background: #141414;
+ border-radius: 4px;
+}
+
+#tray {
+ font-size: 20px;
+ font-weight: 200;
+ padding: 4px;
+ min-width: 100px;
+ min-height: 37px;
+ background: rgba(45, 46, 48, 1);
+ background-image: url('images/textures/acrylic.png');
+ border-radius: 9px;
+ border: 1px solid rgba(34, 35, 38, 0.5);
+ margin: 14px;
+ box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.65);
+}
+
+#window,
+#pulseaudio,
+#network,
+#bluetooth {
+ font-size: 14px;
+ font-weight: 200;
+ padding: 4px;
+}
+
+#custom-weather {
+ padding-left: 12px;
+ font-size: 11px;
+}
+
+#custom-start {
+ background-image: url("./win.png");
+ background-size: 24px 24px;
+ background-position: center;
+ background-repeat: no-repeat;
+}
+
+#taskbar {
+ border-radius: 6px;
+ min-width: 45px;
+ min-height: 45px;
+ /* border-top: 1px solid rgba(64, 64, 64, 0.8); */
+}
+
+#tray,
+#pulseaudio {
+ padding-right: 12px;
+}
+
+#clock {
+ padding-left: 3px;
+ padding-right: 18px;
+}
\ No newline at end of file
diff --git a/early/.config/waybar/win.png b/early/.config/waybar/win.png
new file mode 100755
index 000000000..22904f136
Binary files /dev/null and b/early/.config/waybar/win.png differ
diff --git a/early/.config/wlogout/layout b/early/.config/wlogout/layout
new file mode 100755
index 000000000..c6b324dda
--- /dev/null
+++ b/early/.config/wlogout/layout
@@ -0,0 +1,36 @@
+{
+ "label" : "lock",
+ "action" : "~/.local/bin/lock.sh",
+ "text" : "Lock",
+ "keybind" : "l"
+}
+{
+ "label" : "hibernate",
+ "action" : "systemctl hibernate",
+ "text" : "Hibernate",
+ "keybind" : "h"
+}
+{
+ "label" : "logout",
+ "action" : "loginctl terminate-user $USER",
+ "text" : "Logout",
+ "keybind" : "e"
+}
+{
+ "label" : "shutdown",
+ "action" : "systemctl poweroff",
+ "text" : "Shutdown",
+ "keybind" : "s"
+}
+{
+ "label" : "suspend",
+ "action" : "systemctl suspend",
+ "text" : "Suspend",
+ "keybind" : "u"
+}
+{
+ "label" : "reboot",
+ "action" : "systemctl reboot",
+ "text" : "Reboot",
+ "keybind" : "r"
+}
diff --git a/early/.config/wlogout/noise.png b/early/.config/wlogout/noise.png
new file mode 100755
index 000000000..028b188b5
Binary files /dev/null and b/early/.config/wlogout/noise.png differ
diff --git a/early/.config/wlogout/style.css b/early/.config/wlogout/style.css
new file mode 100755
index 000000000..5c7f3e71c
--- /dev/null
+++ b/early/.config/wlogout/style.css
@@ -0,0 +1,66 @@
+* {
+ background-image: none;
+ transition: 0ms;
+}
+
+window {
+ background-color: rgba(12, 12, 12, 0.1);
+ background-image: url('./noise.png');
+}
+
+button {
+ color: #FFFFFF;
+ border-style: solid;
+ border-width: 2px;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 25%;
+
+ background-color: rgba(108, 112, 134, 0.4);
+ border: 1px solid rgba(108, 112, 134, 0.3);
+ border-top: 1px solid rgba(108, 112, 134, 0.3);
+}
+
+button:focus,
+button:active,
+button:hover {
+ background-color: rgba(156, 161, 192, 0.5);
+ border: 1px solid rgba(108, 112, 134, 0.15);
+ border-top: 1px solid rgba(108, 112, 134, 0.15);
+}
+
+#lock {
+ margin: 10px;
+ border-radius: 20px;
+ background-image: image(url("/usr/share/wlogout/icons/lock.png"), url("/usr/local/share/wlogout/icons/lock.png"));
+}
+
+#logout {
+ margin: 10px;
+ border-radius: 20px;
+ background-image: image(url("/usr/share/wlogout/icons/logout.png"), url("/usr/local/share/wlogout/icons/logout.png"));
+}
+
+#suspend {
+ margin: 10px;
+ border-radius: 20px;
+ background-image: image(url("/usr/share/wlogout/icons/suspend.png"), url("/usr/local/share/wlogout/icons/suspend.png"));
+}
+
+#hibernate {
+ margin: 10px;
+ border-radius: 20px;
+ background-image: image(url("/usr/share/wlogout/icons/hibernate.png"), url("/usr/local/share/wlogout/icons/hibernate.png"));
+}
+
+#shutdown {
+ margin: 10px;
+ border-radius: 20px;
+ background-image: image(url("/usr/share/wlogout/icons/shutdown.png"), url("/usr/local/share/wlogout/icons/shutdown.png"));
+}
+
+#reboot {
+ margin: 10px;
+ border-radius: 20px;
+ background-image: image(url("/usr/share/wlogout/icons/reboot.png"), url("/usr/local/share/wlogout/icons/reboot.png"));
+}
\ No newline at end of file
diff --git a/early/.local/bin/Hyprland-wrapped b/early/.local/bin/Hyprland-wrapped
new file mode 100755
index 000000000..56238b120
--- /dev/null
+++ b/early/.local/bin/Hyprland-wrapped
@@ -0,0 +1,18 @@
+#!/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/early/.local/bin/lock.sh b/early/.local/bin/lock.sh
new file mode 100755
index 000000000..df768dd43
--- /dev/null
+++ b/early/.local/bin/lock.sh
@@ -0,0 +1 @@
+swaylock --image /home/end/Pictures/ACE.jpg --clock --indicator --line-color cdd6f4ff --text-color cdd6f4ff --inside-color 1e1e2eff --ring-color 313244ff --line-ver-color cdd6f4ff --text-ver-color cdd6f4ff --inside-ver-color 1e1e2eff --ring-ver-color 313244ff --line-clear-color cdd6f4ff --text-clear-color cdd6f4ff --inside-clear-color 1e1e2eff --ring-clear-color 313244ff --line-clear-color cdd6f4ff --text-wrong-color 313244ff --inside-wrong-color f38ba8ff --ring-wrong-color 313244ff --key-hl-color cba6f7ff
diff --git a/early/.local/bin/record-script-fullscreen.sh b/early/.local/bin/record-script-fullscreen.sh
new file mode 100755
index 000000000..51f723a0f
--- /dev/null
+++ b/early/.local/bin/record-script-fullscreen.sh
@@ -0,0 +1,10 @@
+#/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/early/.local/bin/record-script.sh b/early/.local/bin/record-script.sh
new file mode 100755
index 000000000..2b0bff036
--- /dev/null
+++ b/early/.local/bin/record-script.sh
@@ -0,0 +1,11 @@
+#/usr/bin/bash
+
+cd /home/end/Videos
+if ["$(pidof wf-recorder)" -ne ""]; then
+ rm recording.mp4
+ notify-send "wf-recorder" "Starting recording"
+ wf-recorder --geometry "$(slurp)"
+else
+ /usr/bin/kill --signal SIGINT wf-recorder
+ notify-send "wf-recorder" "Recording Stopped"
+fi
\ No newline at end of file
diff --git a/early/.local/bin/rubyshot b/early/.local/bin/rubyshot
new file mode 100755
index 000000000..8431bd693
--- /dev/null
+++ b/early/.local/bin/rubyshot
@@ -0,0 +1,6 @@
+#!/usr/bin/bash
+
+WORKSPACES="$(hyprctl monitors -j | jq -r 'map(.activeWorkspace.id)')"
+WINDOWS="$(hyprctl clients -j | jq -r --argjson workspaces "$WORKSPACES" 'map(select([.workspace.id] | inside($workspaces)))' )"
+GEOM=$(echo "$WINDOWS" | jq -r '.[] | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | slurp -f '%x %y %w %h')
+wayshot -s "$GEOM" --stdout ${#:+"$@"}
\ No newline at end of file
diff --git a/early/.local/bin/wofi-emoji b/early/.local/bin/wofi-emoji
new file mode 100755
index 000000000..938db3afc
--- /dev/null
+++ b/early/.local/bin/wofi-emoji
@@ -0,0 +1,1858 @@
+#!/bin/bash
+if [ $? -eq 0 ]
+then
+ sed '1,/^### DATA ###$/d' $0 | wofi --show dmenu -i | cut -d ' ' -f 1 | tr -d '\n' | wtype -
+else
+ sed '1,/^### DATA ###$/d' $0 | wofi --show dmenu -i | cut -d ' ' -f 1 | tr -d '\n' | wl-copy
+fi
+exit
+### DATA ###
+😀 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
+🥺 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
+😱 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 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/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/Cached Theme.pak b/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/Cached Theme.pak
new file mode 100755
index 000000000..036a8e860
Binary files /dev/null and b/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/Cached Theme.pak differ
diff --git a/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon128.png b/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon128.png
new file mode 100755
index 000000000..fbe2ed7e2
Binary files /dev/null and b/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon128.png differ
diff --git a/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon16.png b/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon16.png
new file mode 100755
index 000000000..75e6ced3b
Binary files /dev/null and b/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon16.png differ
diff --git a/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon48.png b/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon48.png
new file mode 100755
index 000000000..c93cfc794
Binary files /dev/null and b/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon48.png differ
diff --git a/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/manifest.json b/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/manifest.json
new file mode 100755
index 000000000..0e4fd0f9e
--- /dev/null
+++ b/early/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/manifest.json
@@ -0,0 +1,35 @@
+{
+ "manifest_version": 3,
+ "name": "Catppuccin Chrome Theme - Mocha - Colorful",
+ "description": "Soothing pastel theme for Google Chrome - Catppuccin Mocha",
+ "version": "3.0",
+ "icons": {
+ "16": "images/icon16.png",
+ "48": "images/icon48.png",
+ "128": "images/icon128.png"
+ },
+ "theme": {
+ "colors": {
+ "frame": [30, 30, 46],
+ "frame_inactive": [30, 30, 46],
+ "frame_incognito": [30, 30, 46],
+ "frame_incognito_inactive": [30, 30, 46],
+ "bookmark_text": [137, 180, 250],
+ "tab_background_text": [186, 194, 222],
+ "tab_background_text_inactive": [186, 194, 222],
+ "tab_background_text_incognito": [203, 166, 247],
+ "tab_background_text_incognito_inactive": [137, 180, 250],
+ "tab_text": [203, 166, 247],
+ "toolbar": [65, 72, 104],
+ "toolbar_button_icon": [203, 166, 247],
+ "omnibox_text": [203, 166, 247],
+ "omnibox_background": [49, 50, 68],
+ "ntp_background": [30, 30, 46],
+ "ntp_link": [203, 166, 247],
+ "ntp_text": [203, 166, 247],
+ "ntp_link_underline": [30, 30, 46],
+ "ntp_section_link_underline": [30, 30, 46],
+ "button_background": [65, 72, 104]
+ }
+ }
+}
diff --git a/early/Import Manually/chromethemes/EverForest-Dark-B/Cached Theme.pak b/early/Import Manually/chromethemes/EverForest-Dark-B/Cached Theme.pak
new file mode 100755
index 000000000..6cb19536f
Binary files /dev/null and b/early/Import Manually/chromethemes/EverForest-Dark-B/Cached Theme.pak differ
diff --git a/early/Import Manually/chromethemes/EverForest-Dark-B/images/icon128.png b/early/Import Manually/chromethemes/EverForest-Dark-B/images/icon128.png
new file mode 100755
index 000000000..fbe2ed7e2
Binary files /dev/null and b/early/Import Manually/chromethemes/EverForest-Dark-B/images/icon128.png differ
diff --git a/early/Import Manually/chromethemes/EverForest-Dark-B/images/icon16.png b/early/Import Manually/chromethemes/EverForest-Dark-B/images/icon16.png
new file mode 100755
index 000000000..75e6ced3b
Binary files /dev/null and b/early/Import Manually/chromethemes/EverForest-Dark-B/images/icon16.png differ
diff --git a/early/Import Manually/chromethemes/EverForest-Dark-B/images/icon48.png b/early/Import Manually/chromethemes/EverForest-Dark-B/images/icon48.png
new file mode 100755
index 000000000..c93cfc794
Binary files /dev/null and b/early/Import Manually/chromethemes/EverForest-Dark-B/images/icon48.png differ
diff --git a/early/Import Manually/chromethemes/EverForest-Dark-B/manifest.json b/early/Import Manually/chromethemes/EverForest-Dark-B/manifest.json
new file mode 100755
index 000000000..6f2f5bd69
--- /dev/null
+++ b/early/Import Manually/chromethemes/EverForest-Dark-B/manifest.json
@@ -0,0 +1,35 @@
+{
+ "manifest_version": 3,
+ "name": "Everforest Dark B",
+ "description": "Forest.",
+ "version": "3.0",
+ "icons": {
+ "16": "images/icon16.png",
+ "48": "images/icon48.png",
+ "128": "images/icon128.png"
+ },
+ "theme": {
+ "colors": {
+ "frame": [28, 32, 33],
+ "frame_inactive": [30, 32, 31],
+ "frame_incognito": [28, 32, 33],
+ "frame_incognito_inactive": [30, 32, 31],
+ "bookmark_text": [211, 198, 170],
+ "tab_background_text": [161, 152, 131],
+ "tab_background_text_inactive": [211, 198, 170],
+ "tab_background_text_incognito": [161, 152, 131],
+ "tab_background_text_incognito_inactive": [211, 198, 170],
+ "tab_text": [168, 179, 112],
+ "toolbar": [48, 49, 52],
+ "toolbar_button_icon": [168, 179, 112],
+ "omnibox_text": [168, 179, 112],
+ "omnibox_background": [28, 32, 33],
+ "ntp_background": [28, 32, 33],
+ "ntp_link": [168, 179, 112],
+ "ntp_text": [168, 179, 112],
+ "ntp_link_underline": [28, 32, 33],
+ "ntp_section_link_underline": [28, 32, 33],
+ "button_background": [48, 49, 52]
+ }
+ }
+}
diff --git a/early/Import Manually/chromethemes/README.md b/early/Import Manually/chromethemes/README.md
new file mode 100644
index 000000000..8c35b6a95
--- /dev/null
+++ b/early/Import Manually/chromethemes/README.md
@@ -0,0 +1,4 @@
+## Chrome themes
+- Go to chrome:extensions (might be different depending on your chromium browser)
+- Click "Load Unpacked"
+- Go to one of the folders in this directory and choose it
\ No newline at end of file
diff --git a/early/Import Manually/chromethemes/TokyoNight/Cached Theme.pak b/early/Import Manually/chromethemes/TokyoNight/Cached Theme.pak
new file mode 100755
index 000000000..72a3c406a
Binary files /dev/null and b/early/Import Manually/chromethemes/TokyoNight/Cached Theme.pak differ
diff --git a/early/Import Manually/chromethemes/TokyoNight/images/icon128.png b/early/Import Manually/chromethemes/TokyoNight/images/icon128.png
new file mode 100755
index 000000000..fbe2ed7e2
Binary files /dev/null and b/early/Import Manually/chromethemes/TokyoNight/images/icon128.png differ
diff --git a/early/Import Manually/chromethemes/TokyoNight/images/icon16.png b/early/Import Manually/chromethemes/TokyoNight/images/icon16.png
new file mode 100755
index 000000000..75e6ced3b
Binary files /dev/null and b/early/Import Manually/chromethemes/TokyoNight/images/icon16.png differ
diff --git a/early/Import Manually/chromethemes/TokyoNight/images/icon48.png b/early/Import Manually/chromethemes/TokyoNight/images/icon48.png
new file mode 100755
index 000000000..c93cfc794
Binary files /dev/null and b/early/Import Manually/chromethemes/TokyoNight/images/icon48.png differ
diff --git a/early/Import Manually/chromethemes/TokyoNight/manifest.json b/early/Import Manually/chromethemes/TokyoNight/manifest.json
new file mode 100755
index 000000000..9f9e5ed0a
--- /dev/null
+++ b/early/Import Manually/chromethemes/TokyoNight/manifest.json
@@ -0,0 +1,35 @@
+{
+ "manifest_version": 3,
+ "name": "TokyoNight-Dark",
+ "description": "Dark",
+ "version": "3.0",
+ "icons": {
+ "16": "images/icon16.png",
+ "48": "images/icon48.png",
+ "128": "images/icon128.png"
+ },
+ "theme": {
+ "colors": {
+ "frame": [26, 27, 38],
+ "frame_inactive": [26, 27, 38],
+ "frame_incognito": [26, 27, 38],
+ "frame_incognito_inactive": [26, 27, 38],
+ "bookmark_text": [192, 202, 245],
+ "tab_background_text": [192, 202, 245],
+ "tab_background_text_inactive": [192, 202, 245],
+ "tab_background_text_incognito": [192, 202, 245],
+ "tab_background_text_incognito_inactive": [192, 202, 245],
+ "tab_text": [13, 183, 212],
+ "toolbar": [46, 47, 66],
+ "toolbar_button_icon": [192, 202, 245],
+ "omnibox_text": [13, 183, 212],
+ "omnibox_background": [26, 27, 38],
+ "ntp_background": [46, 47, 66],
+ "ntp_link": [13, 183, 212],
+ "ntp_text": [13, 183, 212],
+ "ntp_link_underline": [13, 183, 212],
+ "ntp_section_link_underline": [13, 183, 212],
+ "button_background": [30, 30, 46]
+ }
+ }
+}
diff --git a/early/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-frappe.xml b/early/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/early/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/early/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-latte.xml b/early/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/early/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/early/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-macchiato.xml b/early/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/early/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/early/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-mocha.xml b/early/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/early/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/early/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/everforest-b.xml b/early/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/early/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/early/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/tokyo_night_dark.xml b/early/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/early/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/early/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/tokyo_night_storm.xml b/early/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/early/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/early/Import Manually/tabliss/tabliss.json b/early/Import Manually/tabliss/tabliss.json
new file mode 100644
index 000000000..f86f84f50
--- /dev/null
+++ b/early/Import Manually/tabliss/tabliss.json
@@ -0,0 +1 @@
+{"background":{"id":"AlVnN3ZSpf3i","key":"background/image","display":{"blur":0,"luminosity":-0.2}},"data/default-time":{"mode":"digital","hour12":false,"showDate":true,"showMinutes":true,"showSeconds":false,"showDayPeriod":true,"timeZone":null},"focus":false,"widget/JVcm-ptH22CB":null,"widget/default-greeting":null,"widget/default-time":{"id":"default-time","key":"widget/time","order":0,"display":{"position":"middleCentre","fontFamily":"Gabarito","fontSize":22}},"data/Oe8h0ATqABMw":{"username":"end-4","showSummary":false},"widget/Oe8h0ATqABMw":{"id":"Oe8h0ATqABMw","key":"widget/github","order":1,"display":{"position":"bottomCentre"}},"widget/u2ZuwyqO-tka":null,"widget/TbRxrpl9QgjK":{"id":"TbRxrpl9QgjK","key":"widget/quote","order":2,"display":{"position":"middleCentre"}},"widget/2J2Q2Cw962KN":null,"widget/tK_0dJhtQXPS":null,"widget/OwW65aQzXLLs":{"id":"OwW65aQzXLLs","key":"widget/links","order":3,"display":{"position":"middleCentre","fontFamily":"JetBrainsMono Nerd Font"}},"data/OwW65aQzXLLs":{"columns":6,"links":[{"url":"https://www.facebook.com/messages/","name":""},{"url":"https://discord.com/app","name":" ","icon":""},{"url":"https://youtube.com","icon":"","name":""},{"url":"https://soundcloud.com","icon":"","name":""},{"url":"https://github.com","icon":"","name":""},{"url":"https://reddit.com","icon":"","name":" "}],"visible":true,"linkOpenStyle":false},"locale":"en","timeZone":null,"version":3}
\ No newline at end of file
diff --git a/hybrid-summer/.config/btop/btop.conf b/hybrid-summer/.config/btop/btop.conf
new file mode 100644
index 000000000..e37a07ae1
--- /dev/null
+++ b/hybrid-summer/.config/btop/btop.conf
@@ -0,0 +1,212 @@
+#? Config file for btop v. 1.2.13
+
+#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
+#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
+color_theme = "TTY"
+
+#* If the theme set background should be shown, set to False if you want terminal background transparency.
+theme_background = False
+
+#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
+truecolor = True
+
+#* Set to true to force tty mode regardless if a real tty has been detected or not.
+#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
+force_tty = False
+
+#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
+#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
+#* Use whitespace " " as separator between different presets.
+#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
+presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
+
+#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
+#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
+vim_keys = False
+
+#* Rounded corners on boxes, is ignored if TTY mode is ON.
+rounded_corners = True
+
+#* Default symbols to use for graph creation, "braille", "block" or "tty".
+#* "braille" offers the highest resolution but might not be included in all fonts.
+#* "block" has half the resolution of braille but uses more common characters.
+#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
+#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
+graph_symbol = "braille"
+
+# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
+graph_symbol_cpu = "default"
+
+# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
+graph_symbol_mem = "default"
+
+# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
+graph_symbol_net = "default"
+
+# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
+graph_symbol_proc = "default"
+
+#* Manually set which boxes to show. Available values are "cpu mem net proc", separate values with whitespace.
+shown_boxes = "cpu mem net proc"
+
+#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
+update_ms = 1000
+
+#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
+#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
+proc_sorting = "memory"
+
+#* Reverse sorting order, True or False.
+proc_reversed = False
+
+#* Show processes as a tree.
+proc_tree = False
+
+#* Use the cpu graph colors in the process list.
+proc_colors = True
+
+#* Use a darkening gradient in the process list.
+proc_gradient = True
+
+#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
+proc_per_core = False
+
+#* Show process memory as bytes instead of percent.
+proc_mem_bytes = True
+
+#* Show cpu graph for each process.
+proc_cpu_graphs = True
+
+#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
+proc_info_smaps = False
+
+#* Show proc box on left side of screen instead of right.
+proc_left = False
+
+#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
+proc_filter_kernel = False
+
+#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
+#* Select from a list of detected attributes from the options menu.
+cpu_graph_upper = "total"
+
+#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
+#* Select from a list of detected attributes from the options menu.
+cpu_graph_lower = "total"
+
+#* Toggles if the lower CPU graph should be inverted.
+cpu_invert_lower = True
+
+#* Set to True to completely disable the lower CPU graph.
+cpu_single_graph = False
+
+#* Show cpu box at bottom of screen instead of top.
+cpu_bottom = False
+
+#* Shows the system uptime in the CPU box.
+show_uptime = True
+
+#* Show cpu temperature.
+check_temp = True
+
+#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
+cpu_sensor = "Auto"
+
+#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
+show_coretemp = True
+
+#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
+#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
+#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
+#* Example: "4:0 5:1 6:3"
+cpu_core_map = ""
+
+#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
+temp_scale = "celsius"
+
+#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
+base_10_sizes = False
+
+#* Show CPU frequency.
+show_cpu_freq = True
+
+#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
+#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
+clock_format = "%X"
+
+#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
+background_update = True
+
+#* Custom cpu model name, empty string to disable.
+custom_cpu_name = ""
+
+#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
+#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user".
+disks_filter = ""
+
+#* Show graphs instead of meters for memory values.
+mem_graphs = True
+
+#* Show mem box below net box instead of above.
+mem_below_net = False
+
+#* Count ZFS ARC in cached and available memory.
+zfs_arc_cached = True
+
+#* If swap memory should be shown in memory box.
+show_swap = True
+
+#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
+swap_disk = True
+
+#* If mem box should be split to also show disks info.
+show_disks = True
+
+#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
+only_physical = True
+
+#* Read disks list from /etc/fstab. This also disables only_physical.
+use_fstab = True
+
+#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
+zfs_hide_datasets = False
+
+#* Set to true to show available disk space for privileged users.
+disk_free_priv = False
+
+#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
+show_io_stat = True
+
+#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
+io_mode = False
+
+#* Set to True to show combined read/write io graphs in io mode.
+io_graph_combined = False
+
+#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
+#* Example: "/mnt/media:100 /:20 /boot:1".
+io_graph_speeds = ""
+
+#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
+net_download = 100
+
+net_upload = 100
+
+#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
+net_auto = True
+
+#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
+net_sync = True
+
+#* Starts with the Network Interface specified here.
+net_iface = ""
+
+#* Show battery stats in top right if battery is present.
+show_battery = True
+
+#* Which battery to use if multiple are present. "Auto" for auto detection.
+selected_battery = "Auto"
+
+#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
+#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
+log_level = "WARNING"
\ No newline at end of file
diff --git a/hybrid-summer/.config/dunst/dunstrc b/hybrid-summer/.config/dunst/dunstrc
new file mode 100755
index 000000000..ba0fa272f
--- /dev/null
+++ b/hybrid-summer/.config/dunst/dunstrc
@@ -0,0 +1,59 @@
+[global]
+monitor = 0
+follow = mouse
+origin = top-right offset = 20x73
+offset = 20x73
+geometry = "280x50-20+200"
+indicate_hidden = no
+shrink = no
+separator_height = 4
+separator_color = yes
+padding = 20
+horizontal_padding = 20
+frame_width = 2
+sort = no
+idle_threshold = 120
+font = Rubik 13
+line_height = 4
+markup = full
+format = "%s\n%b"
+alignment = left
+show_age_threshold = 60
+word_wrap = yes
+ignore_newline = no
+stack_duplicates = false
+hide_duplicate_count = yes
+show_indicators = no
+icon_position = left
+max_icon_size = 48
+sticky_history = no
+history_length = 20
+browser = firefox
+always_run_script = true
+title = Dunst
+class = Dunst
+corner_radius = 10
+
+[shortcuts]
+close = ctrl+shift+space
+close_all = ctrl+shift+space
+history = ctrl+grave
+context = ctrl+shift+period
+
+[urgency_low]
+timeout = 4
+background = "#282828"
+foreground = "#EBDBB2"
+frame_color = "#B3925F"
+
+[urgency_normal]
+timeout = 8
+background = "#282828"
+foreground = "#EBDBB2"
+frame_color = "#B3925F"
+
+[urgency_critical]
+timeout = 0
+background = "#1D2021"
+foreground = "#EEAA00"
+frame_color = "#EEAA00"
diff --git a/hybrid-summer/.config/eww/.vscode/c_cpp_properties.json b/hybrid-summer/.config/eww/.vscode/c_cpp_properties.json
new file mode 100644
index 000000000..a2461ad1a
--- /dev/null
+++ b/hybrid-summer/.config/eww/.vscode/c_cpp_properties.json
@@ -0,0 +1,18 @@
+{
+ "configurations": [
+ {
+ "name": "Linux",
+ "includePath": [
+ "${workspaceFolder}/**",
+ "/usr/include/**"
+ ],
+ "defines": [],
+ "compilerPath": "/usr/bin/clang",
+ "cStandard": "c17",
+ "cppStandard": "c++17",
+ "intelliSenseMode": "linux-clang-x64",
+ "configurationProvider": "ms-vscode.makefile-tools",
+ }
+ ],
+ "version": 4
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/.vscode/settings.json b/hybrid-summer/.config/eww/.vscode/settings.json
new file mode 100644
index 000000000..abe6dad5e
--- /dev/null
+++ b/hybrid-summer/.config/eww/.vscode/settings.json
@@ -0,0 +1,56 @@
+{
+ "files.associations": {
+ "optional": "cpp",
+ "system_error": "cpp",
+ "fstream": "cpp",
+ "iosfwd": "cpp",
+ "string_view": "cpp",
+ "string": "cpp",
+ "any": "cpp",
+ "array": "cpp",
+ "bit": "cpp",
+ "*.tcc": "cpp",
+ "cctype": "cpp",
+ "clocale": "cpp",
+ "cmath": "cpp",
+ "codecvt": "cpp",
+ "compare": "cpp",
+ "concepts": "cpp",
+ "cstddef": "cpp",
+ "cstdint": "cpp",
+ "cstdio": "cpp",
+ "cstdlib": "cpp",
+ "cstring": "cpp",
+ "ctime": "cpp",
+ "cwchar": "cpp",
+ "cwctype": "cpp",
+ "deque": "cpp",
+ "forward_list": "cpp",
+ "map": "cpp",
+ "unordered_map": "cpp",
+ "vector": "cpp",
+ "exception": "cpp",
+ "functional": "cpp",
+ "initializer_list": "cpp",
+ "iomanip": "cpp",
+ "iostream": "cpp",
+ "istream": "cpp",
+ "limits": "cpp",
+ "memory": "cpp",
+ "new": "cpp",
+ "numbers": "cpp",
+ "numeric": "cpp",
+ "ostream": "cpp",
+ "ranges": "cpp",
+ "ratio": "cpp",
+ "span": "cpp",
+ "sstream": "cpp",
+ "stdexcept": "cpp",
+ "streambuf": "cpp",
+ "type_traits": "cpp",
+ "tuple": "cpp",
+ "typeinfo": "cpp",
+ "utility": "cpp",
+ "valarray": "cpp"
+ }
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/.vscode/tasks.json b/hybrid-summer/.config/eww/.vscode/tasks.json
new file mode 100644
index 000000000..2cd0264c6
--- /dev/null
+++ b/hybrid-summer/.config/eww/.vscode/tasks.json
@@ -0,0 +1,30 @@
+{
+ "tasks": [
+ {
+ "type": "cppbuild",
+ "label": "C/C++: g++ build active file",
+ "command": "/usr/bin/g++",
+ "args": [
+ "-fdiagnostics-color=always",
+ "-g",
+ "${file}",
+ "-o",
+ "${fileDirname}/${fileBasenameNoExtension}",
+ "-lboost_iostreams",
+ "`pkg-config --libs boost_iostreams`"
+ ],
+ "options": {
+ "cwd": "${fileDirname}"
+ },
+ "problemMatcher": [
+ "$gcc"
+ ],
+ "group": {
+ "kind": "build",
+ "isDefault": true
+ },
+ "detail": "Task generated by Debugger."
+ }
+ ],
+ "version": "2.0.0"
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_bgdecor.scss b/hybrid-summer/.config/eww/css/_bgdecor.scss
new file mode 100755
index 000000000..9ca03cd64
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_bgdecor.scss
@@ -0,0 +1,125 @@
+.bg-decor-dow {
+ color: $onPrimaryContainer;
+ font-family: Rubik;
+ font-size: 35pt;
+}
+
+.bg-decor-date {
+ color: $onPrimaryContainer;
+ font-family: Rubik;
+ font-size: 20pt;
+}
+
+.bg-module {
+ // background-color: shade($colorbg, 10%);
+ border-radius: 30px;
+ padding: 20px;
+ margin: 5px;
+}
+
+.bg-text {
+ text-shadow: -1px -1px 0 $primaryContainer,
+ 1px -1px 0 $primaryContainer,
+ -1px 1px 0 $primaryContainer,
+ 1px 1px 0 $primaryContainer;
+ color: $onPrimaryContainer;
+ font-family: 'Rubik';
+}
+
+.bg-icon {
+ margin-bottom: 9px;
+ color: $onSecondaryContainer;
+ font-family: 'Material Symbols Rounded';
+ font-size: 15pt;
+ min-width: 40px;
+ min-height: 40px;
+ background-color: $secondaryContainer;
+ border-radius: 13px;
+}
+
+.bg-title {
+ text-shadow: -1px -1px 0 $primaryContainer,
+ 1px -1px 0 $primaryContainer,
+ -1px 1px 0 $primaryContainer,
+ 1px 1px 0 $primaryContainer;
+ color: $onPrimaryContainer;
+ font-size: 16pt;
+ margin: 5px;
+ padding-bottom: 10px;
+ padding-left: 5px;
+}
+
+.bg-cool-text {
+ color: $onPrimaryContainer;
+ font-family: 'Rubik';
+ font-size: 13pt;
+ margin: 5px;
+ text-shadow: -1px -1px 0 $primaryContainer,
+ 1px -1px 0 $primaryContainer,
+ -1px 1px 0 $primaryContainer,
+ 1px 1px 0 $primaryContainer;
+}
+
+.bg-progress {
+ margin: 5px;
+ min-width: 450px;
+
+ trough {
+ border-radius: 9999px;
+ background-color: #24222A;
+ min-height: 10px;
+ }
+
+ highlight {
+ border-radius: 9999px;
+ background-color: $color3;
+ }
+}
+
+.bg-graph-container {
+ min-width: 150px;
+ min-height: 30px;
+ padding-bottom: 4px;
+ padding-top: 4px;
+ border-radius: 8px;
+ border: 1px solid $onPrimaryContainer;
+ margin: 5px;
+ box-shadow: -1px -1px 0 $primaryContainer,
+ 1px -1px 0 $primaryContainer,
+ -1px 1px 0 $primaryContainer,
+ 1px 1px 0 $primaryContainer;
+}
+
+.bg-graph {
+ color: $color3;
+ // background-color: $color3;
+}
+
+.bg-date {
+ min-width: 500px;
+}
+
+.bg-decor-input-left {
+ border-top-left-radius: 999px;
+ border-bottom-left-radius: 999px;
+ margin-top: 30px;
+ padding-left: 20px;
+ padding-right: 20px;
+ font-size: 15pt;
+ min-height: 50px;
+ background-color: rgba(255, 255, 255, 0.2);
+}
+
+.bg-decor-input-right {
+ border-top-right-radius: 999px;
+ border-bottom-right-radius: 999px;
+ margin-top: 30px;
+ padding-left: 20px;
+ padding-right: 20px;
+ // padding-top: 5px;
+ // padding-bottom: 5px;
+ font-size: 15pt;
+ min-height: 50px;
+ background-color: rgba(255, 255, 255, 0.2);
+ color: rgba(255, 255, 255, 0.2);
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_bottombar.scss b/hybrid-summer/.config/eww/css/_bottombar.scss
new file mode 100755
index 000000000..561196de1
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_bottombar.scss
@@ -0,0 +1,59 @@
+.bottombar-closed-hitbox {
+ min-width: 1920px;
+ background-color: mix(rgba(30, 30, 30, 0.5), $colorbg, 50%);
+}
+.bottombar-bg {
+ min-width: 1920px;
+ min-height: 300px;
+ border-top-left-radius: 26px;
+ border-top-right-radius: 26px;
+ background-color: shade($colorbg, 70%);
+ background-size: 100% auto;
+ background-position: center center;
+}
+
+.bottombar-bg-front {
+ min-width: 1920px;
+ min-height: 300px;
+ border-top-left-radius: 26px;
+ border-top-right-radius: 26px;
+ background-color: mix(rgba(30, 30, 30, 0.5), $colorbg, 50%);
+ background-size: 100% 100%;
+}
+
+.cava-column {
+ // background-image: linear-gradient($color1, $color3);
+ background-color: rgb(176, 226, 247);
+ border-top-left-radius: 99px;
+ border-top-right-radius: 99px;
+ margin: 6px;
+ margin-bottom: 0px;
+}
+
+.bottombar-musicinfo-box {
+ margin-left: 50px;
+ margin-top: 50px;
+}
+
+.bottombar-title {
+ font-family: 'Gabarito';
+ font-size: 30pt;
+ font-weight: 700;
+ text-shadow: 2px 4px 4px rgba(0, 0, 0, 0.5);
+}
+
+.bottombar-artist {
+ font-family: 'Gabarito';
+ font-size: 16pt;
+ font-weight: 700;
+ text-shadow: 2px 4px 4px rgba(0, 0, 0, 0.5);
+}
+
+.bottombar-music-cover {
+ border-radius: 15px;
+ min-height: 200px;
+ min-width: 200px;
+ background-size: auto 100%;
+ background-position: center;
+ box-shadow: 2px 4px 4px rgba(0, 0, 0, 0.5);
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_calendar.scss b/hybrid-summer/.config/eww/css/_calendar.scss
new file mode 100755
index 000000000..e22548ba9
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_calendar.scss
@@ -0,0 +1,125 @@
+.calendar-win {
+ @include window;
+ background-color: $colorbarbg;
+ border: 3px solid $color3;
+ border-radius: 15px;
+ color: $colortext;
+ padding: .2em;
+ font-family: 'Rubik';
+ margin: 14px;
+}
+
+calendar {
+ * {
+ padding-top: 10px;
+ color: $primary;
+ }
+
+ :selected {
+ color: $onPrimary;
+ font-weight: bolder;
+ background-color: $primary;
+ border-radius: 8px;
+ }
+
+ .header {
+ color: $colortext;
+ margin: 15px;
+ min-height: 400px;
+ }
+
+ .highlight {
+ color: $onTertiaryContainer;
+ font-weight: bold;
+ }
+
+ .button {
+ color: $colortext;
+ padding-top: 10px;
+ }
+
+ :indeterminate {
+ color: $onBackground;
+ }
+}
+
+.calendarwin-title {
+ border-radius: 9999px;
+ font-size: 15pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ margin: 1px;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.calendarwin-button {
+ border-radius: 9999px;
+ font-size: 12pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ margin: 1px;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.calendarwin-text {
+ border-radius: 9999px;
+ font-size: 11pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.calendarwin-icon {
+ background-position: center;
+ min-height: 42px;
+ min-width: 30px;
+}
+
+.calendarwin-text {
+ border-radius: 9999px;
+ font-size: 12pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ min-height: 50px;
+ min-width: 50px;
+ margin: 3px;
+}
+
+.calendarwin-day-1 {
+ background-color: transparent;
+ color: #7C7C7C;
+}
+
+.calendarwin-day0 {
+ background-color: transparent;
+ color: white;
+}
+
+.calendarwin-day1 {
+ background-color: $primary;
+ color: black;
+}
+
+.calendarwin-day0:hover {
+ background-color: rgba(75, 75, 75, 0.5);
+}
+
+.calendarwin-day0:active {
+ background-color: tint(rgba(75, 75, 75, 0.5), 10%);
+}
+
+.calendarwin-day1:hover {
+ background-color: tint($color4, 10%);
+ color: black;
+}
+
+.calendarwin-day1:active {
+ background-color: tint($color4, 20%);
+ color: black;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_colors.scss b/hybrid-summer/.config/eww/css/_colors.scss
new file mode 100755
index 000000000..7e7546543
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_colors.scss
@@ -0,0 +1,77 @@
+
+
+$rosewater: #f5e0dc;
+$flamingo: #f2cdcd;
+$pink: #f5c2e7;
+$mauve: #cba6f7;
+$red: #f38ba8;
+// $red: #EF738A;
+$maroon: #eba0ac;
+$peach: #fab387;
+$yellow: #f9e2af;
+$green: #a6e3a1;
+$teal: #94e2d5;
+$sky: #89dceb;
+$sapphire: #74c7ec;
+$blue: #89b4fa;
+$lavender: #b4befe;
+$true: #EF738A;
+$false: #A9B1D6;
+
+
+$forestgreen: #A8B468;
+$forestyellow : #8e8370;
+$foresttext : #d3c6ab;
+$forestblack : #1e201f;
+$forestred : #e76c69;
+$forestpink : #d698b5;
+$forestorange : #e59576;
+$forestgray : #75817b;
+$forestgraylight: #495156;
+$forestgreendark: #7fba90;
+$forestblue: #77AEA7;
+
+$tokyobluedark: #1A1B26;
+$tokyobluelessdark: #1f212e;
+$tokyotext: #a9b1d6;
+$tokyopink: #ff79b1; //nah theres no pink in tokyonight, but i need one so added
+$tokyored: #EF738A;
+$tokyoorange: #FF9E64;
+$tokyoyellow: #E0AF68;
+$tokyogreen: #9ECE6A;
+$tokyoturquoise: #73daca;
+$tokyoice: #b4f9f8;
+$tokyocyan: #0DB9D7;
+$tokyoblue: #7AA2F7;
+$tokyopurple: #9778D0;
+$tokyogrey: #444B6A;
+$catbg: #1E1E2E;
+
+$text: $tokyotext;
+$subtext1: #868dac;
+$subtext0: #a6adc8;
+$overlay2: #9399b2;
+$overlay1: #7f849c;
+$overlay0: rgba(108, 112, 134, 0.4);
+$overlayedge: rgba(108, 112, 134, 0.15);
+
+$hover0: rgba(200, 200, 200, 0.3);
+
+$surface2: rgba(88, 91, 112, 0.7);
+$surface1: rgba(69, 71, 90, 0.7);
+// $surface0: rgba(28, 28, 48, 0.5); //Needs dynamic change
+// $surface0: #24222A; //Needs dynamic change
+
+
+$base: #1E201F;
+$mantle: #181825;
+$crust: #121415;
+
+$fg: $tokyotext;
+$bg: #171726;
+$barbg: #131426;
+$shadow: $crust;
+
+// $battcolor: $tokyogreen;
+// $memcolor: $tokyoorange;
+// $cpucolor: $tokyoblue;
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_colorscheme.scss b/hybrid-summer/.config/eww/css/_colorscheme.scss
new file mode 100755
index 000000000..0d7028c2c
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_colorscheme.scss
@@ -0,0 +1,14 @@
+//Auto generated color theme for image at: [Local wallpaper]
+@function bluetint($color, $percentage) { @return mix(#CDDFED, $color, $percentage); }
+@function blueshade($color, $percentage) { @return mix(#152E50, $color, $percentage); }
+$colorbarbg: #1f1207;
+$colorbg: rgba(31,18,7,0.75);
+$colortext: #cad7db;
+$color0: #AF8D61;
+$color1: #CEB153;
+$color2: #D99C69;
+$color3: #7B8387;
+$color4: #E4A794;
+$color5: #EFD69C;
+$color6: #cad7db;
+$color7: #7B8387;
diff --git a/hybrid-summer/.config/eww/css/_colorscheme_default.scss b/hybrid-summer/.config/eww/css/_colorscheme_default.scss
new file mode 100755
index 000000000..37aaee4c4
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_colorscheme_default.scss
@@ -0,0 +1,14 @@
+//Auto generated color theme for image at: https://i1.sndcdn.com/artworks-000653264299-7lydij-t80x80.jpg
+@function bluetint($color, $percentage) { @return mix(#CDDFED, $color, $percentage); }
+@function blueshade($color, $percentage) { @return mix(#152E50, $color, $percentage); }
+$colorbarbg: #090727;
+$colorbg: rgba(9,7,39,0.7);
+$colortext: #e1e4f1;
+$color0: #926AC9;
+$color1: #2994E6;
+$color2: #5E9EE8;
+$color3: #5BC3E9;
+$color4: #9EA8E4;
+$color5: #AEC4E9;
+$color6: #e1e4f1;
+$color7: #5BC3E9;
diff --git a/hybrid-summer/.config/eww/css/_colorscheme_osu.scss b/hybrid-summer/.config/eww/css/_colorscheme_osu.scss
new file mode 100755
index 000000000..48bb59f78
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_colorscheme_osu.scss
@@ -0,0 +1,11 @@
+$colorbg: #0f0e11; //Get from color0
+$colortext: white; //Get from color4
+$color0: #8C66FF;
+$color1: #CC3378;
+$color2: #5933CC;
+$color3: #EEAA00;
+$color4: white;
+$color5: white;
+$color6: white;
+$color7: white; //Get from color4 (border)
+$colormusic: white;
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_dashboard.scss b/hybrid-summer/.config/eww/css/_dashboard.scss
new file mode 100755
index 000000000..4f5d533e3
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_dashboard.scss
@@ -0,0 +1,236 @@
+.dash-window {
+ background-color: transparent;
+}
+
+.dash-title {
+ color: $primary;
+ font-size: 18pt;
+}
+
+.dash-subtitle {
+ color: $color5;
+ font-size: 13pt;
+}
+
+.dash {
+ min-height: 50px;
+ min-width: 50px;
+ background-color: $colorbarbg;
+ border-radius: 15px;
+ padding: 20px;
+ margin: 5px;
+}
+
+.dash-profile {
+ min-width: 300px;
+ min-height: 228px;
+}
+
+.dash-user-pic {
+ margin: 20px;
+ min-width: 150px;
+ min-height: 150px;
+ background-repeat: no-repeat;
+ background-size: 100%;
+ border-radius: 1500px;
+ background-position: center;
+}
+
+.dash-fetch {
+ color: $colortext;
+ font-size: 15pt;
+}
+
+.dash-fetch-icon {
+ color: $colortext;
+ font-size: 16pt;
+ margin: 3px;
+ font-family: Material Symbols Rounded;
+}
+
+.dash-fetch-icon-nerd {
+ color: $colortext;
+ font-size: 16pt;
+ margin: 3px;
+ font-family: JetBrainsMono Nerd Font Regular;
+}
+
+.dash-icon {
+ font-size: 24pt;
+ font-weight: bold;
+ font-family: Material Symbols Rounded;
+}
+
+.dash-button {
+ border-radius: 15px;
+}
+
+.dash-button:hover {
+ background-color: tint($colorbarbg, 10%);
+}
+
+.dash-button:focus {
+ background-color: tint($colorbarbg, 10%);
+}
+
+.dash-button:active {
+ background-color: tint($colorbarbg, 20%);
+}
+
+.dash-quote-content {
+ margin: 2px;
+ color: $colortext;
+ font-size: 14pt;
+}
+
+.dash-quote-author {
+ margin: 2px;
+ color: $colortext;
+ font-size: 12pt;
+}
+
+.dash-tile {
+ min-width: 800px;
+}
+
+.dash-input-icon {
+ padding-left: 15px;
+ padding-right: 15px;
+ min-width: 30px;
+ margin: -5px;
+ margin-left: 15px;
+ background-color: $colorbarbg;
+ border: 2px solid tint($colorbarbg, 10%);
+ border-radius: 10px;
+ color: $colortext;
+ font-size: 19pt;
+}
+
+.dash-input {
+ padding-left: 15px;
+ padding-right: 15px;
+ min-width: 860px;
+ margin: -5px;
+ background-color: $colorbarbg;
+ border: 2px solid tint($colorbarbg, 10%);
+ border-radius: 10px;
+ color: $colortext;
+ font-size: 15pt;
+ caret-color: $colortext;
+
+ selection {
+ background-color: rgba(154, 152, 152, 0.5);
+ }
+}
+
+.dash-time {
+ color: $primary;
+ font-size: 35pt;
+}
+
+.dash-date {
+ color: $primary;
+ font-size: 18pt;
+}
+
+.dash-clock-text-area {
+ min-width: 200px;
+}
+
+.dash-clock-circle-area {
+ // margin-left: 10px;
+}
+
+.dash-clock-circle {
+ background-color: $surface0;
+}
+
+.dash-clock-inner {
+ padding: 36px;
+}
+
+.dash-clock-circle-minute {
+ margin: 10px;
+ background-color: $overlay0;
+}
+
+.dash-debug-area {
+ background-color: rgba(214, 28, 50, 0.3);
+}
+
+.dash-dir-area {
+ min-width: 198px;
+}
+
+.dash-dir {
+ font-size: 15pt;
+ padding: 10px;
+ padding-left: 15px;
+}
+
+.dash-resources {
+ min-width: 198px;
+ min-height: 122px;
+}
+
+.dash-resouce-icon {
+ font-size: 99pt;
+}
+
+.dash-resource-inner {
+ padding: 30px;
+}
+
+.dash-resource-text {
+ font-size: 15pt;
+ margin: 3px;
+}
+
+.dash-resource-title {
+ font-size: 15pt;
+}
+
+.dash-resource-tile {
+ // background-color: tint($colorbarbg, 20%);
+ border-radius: 12px;
+ padding-left: 15px;
+ padding-right: 15px;
+ padding-top: 11px;
+ // padding: 15px;
+}
+
+.clrt {
+ color: $colortext;
+}
+
+.clr0 {
+ color: $primary;
+}
+
+.clr1 {
+ color: $secondary;
+}
+
+.clr2 {
+ color: $tertiary;
+}
+
+.clr3 {
+ color: $primary;
+}
+
+.clr4 {
+ color: $secondary;
+}
+
+.clr5 {
+ color: $tertiary;
+}
+
+.clr6 {
+ color: $primary;
+}
+
+.clr7 {
+ color: $secondary;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_dashfs.scss b/hybrid-summer/.config/eww/css/_dashfs.scss
new file mode 100755
index 000000000..183c10e68
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_dashfs.scss
@@ -0,0 +1,338 @@
+.dashfs-bg {
+ background-color: rgba(20, 20, 20, 0.7);
+}
+
+.dashfs-greet {
+ border-radius: 10px;
+ margin-top: 40px;
+ margin-left: 40px;
+ border: 3px solid transparent;
+ border-left: 3px solid $color5;
+ padding: 10px;
+}
+
+.dashfs-greet-text {
+ font-family: 'Rubik';
+ font-size: 20pt;
+ color: $color5;
+}
+
+.dashfs-clock {
+ border-radius: 10px;
+ margin-top: 40px;
+ margin-right: 40px;
+ border: 3px solid transparent;
+ border-right: 3px solid $color4;
+ padding: 15px;
+}
+
+.dashfs-clock-time {
+ margin-top: -15px;
+ font-family: 'Rubik';
+ font-size: 45pt;
+ color: $color4;
+}
+
+.dashfs-clock-date {
+ font-family: 'Rubik';
+ font-size: 22pt;
+ color: $color4;
+}
+
+.dashfs-calendar-title {
+ border-radius: 9999px;
+ font-size: 15pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ margin: 1px;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.dashfs-calendar-button {
+ border-radius: 9999px;
+ font-size: 12pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ margin: 1px;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.dashfs-calendar-text {
+ border-radius: 9999px;
+ font-size: 11pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.dashfs-section-nopad {
+ border-radius: 10px;
+ border: 3px solid transparent;
+ border-top: 3px solid $color4;
+}
+
+.dashfs-section {
+ border-radius: 10px;
+ border: 3px solid transparent;
+ border-top: 3px solid $color1;
+ padding: 10px;
+ min-width: 200px;
+}
+
+.dashfs-section-title {
+ color: $color1;
+ font-size: 18pt;
+ font-family: 'Rubik';
+ margin-bottom: 5px;
+}
+
+.dashfs-fetch {
+ color: $color1;
+ font-size: 15pt;
+ font-family: 'Rubik';
+}
+
+.dashfs-fetch-icon {
+ color: $color1;
+ font-size: 16pt;
+ margin: 5px 0px;
+ margin-right: 10px;
+ font-family: 'Material Symbols Rounded';
+}
+
+.dashfs-section-button {
+ border-radius: 8px;
+ padding: 0 10px;
+}
+
+.dashfs-section-button:hover {
+ background-color: $overlay0;
+}
+
+.dashfs-calendar-icon {
+ background-position: center;
+ min-height: 42px;
+ min-width: 30px;
+}
+
+.dashfs-monthbutton {
+ // background-size: 80% auto;
+ background-color: transparent;
+ background-position: center;
+ border-radius: 6px;
+ margin: 12px 3px;
+ margin-top: 0px;
+ padding: 6px;
+ min-width: 20px;
+ min-height: 20px;
+}
+
+.dashfs-monthbutton:hover {
+ background-color: rgba(95, 95, 95, 0.4);
+}
+
+.dashfs-calendar-text {
+ border-radius: 9999px;
+ font-size: 12pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.dashfs-nerd-icon {
+ color: $color1;
+ font-size: 16pt;
+ margin: 5px 0px;
+ margin-right: 10px;
+ font-family: 'JetBrainsMono Nerd Font';
+}
+
+.dashfs-button-only {
+ :first-child {
+ :first-child {
+ border-radius: 10px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ }
+ }
+}
+
+.dashfs-button-only:hover {
+ :first-child {
+ :first-child {
+ background-color: shade($overlay0, 2%);
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ }
+ }
+}
+
+.dashfs-button-pad {
+ padding: 3px;
+ // min-width: 42px;
+ min-height: 42px;
+}
+
+.dashfs-taskbaricon {
+ background-size: 60%;
+ background-position: center;
+ min-width: 64px;
+ min-height: 64px;
+ border-radius: 10px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.dashfs-taskbaricon-false {
+ background-size: 70%;
+ background-position: center;
+ min-width: 64px;
+ min-height: 64px;
+ border-radius: 10px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.dashfs-taskbaricon-true {
+ background-size: 70%;
+ background-position: center;
+ min-width: 64px;
+ min-height: 64px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.dashfs-taskbar-indicator-true {
+ border-radius: 10px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ margin-bottom: 4px;
+ margin-top: 65px;
+ margin-left: 25px;
+ margin-right: 25px;
+ background-color: $color4;
+}
+
+.dashfs-taskbar-indicator-false {
+ border-radius: 10px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ margin-bottom: 4px;
+ margin-top: 65px;
+ margin-left: 32px;
+ margin-right: 32px;
+ background-color: #9C98A3;
+}
+
+.dashfs-day-1 {
+ background-color: transparent;
+ color: #7C7C7C;
+}
+
+.dashfs-day0 {
+ background-color: transparent;
+ color: white;
+}
+
+.dashfs-day1 {
+ background-color: tint($color4, 20%);
+ color: black;
+}
+
+.dashfs-day0:hover {
+ background-color: rgba(75, 75, 75, 0.5);
+}
+
+.dashfs-day0:active {
+ background-color: tint(rgba(75, 75, 75, 0.5), 10%);
+}
+
+.dashfs-day1:hover {
+ background-color: tint($color4, 10%);
+ color: black;
+}
+
+.dashfs-day1:active {
+ background-color: tint($color4, 20%);
+ color: black;
+}
+
+.dashfs-music-cover {
+ border-radius: 10px;
+ min-height: 50px;
+ min-width: 50px;
+ background-size: auto 100%;
+ background-position: center;
+}
+
+.dashfs-resource-title {
+ color: $tertiary;
+ font-size: 18pt;
+ font-family: 'Rubik';
+ margin-bottom: 5px;
+}
+
+.dashfs-resource-box {
+ border-radius: 10px;
+ border: 3px solid transparent;
+ border-top: 3px solid $tertiary;
+ padding: 20px 5px;
+ min-width: 110px;
+}
+
+.dashfs-resource-circle {
+ color: $tertiary;
+ background-color: #5B5A5C;
+}
+
+.dashfs-resource-icon {
+ color: $tertiary;
+ font-size: 30pt;
+ font-family: 'Material Symbols Rounded';
+}
+
+.dashfs-resource-label {
+ color: $onTertiary;
+ background-color: $tertiary;
+ font-size: 13pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ padding: 3px 8px;
+ border-radius: 9999px;
+ min-width: 50px;
+}
+
+.dashfs-graph {
+ background-image: url('images/svg/graph.svg');
+ background-size: 100% 100%;
+ background-position: center;
+}
+
+.dashfs-cava-column {
+ background-color: rgba(176, 226, 247, 0.1);
+ border-radius: 9999px;
+ margin: 5px 0;
+}
+
+.dashfs-quote-content {
+ font-family: 'Space Grotesk';
+ font-weight: 500;
+ font-size: 16pt;
+ color: $primary;
+}
+
+.dashfs-quote-author {
+ font-family: 'Space Grotesk';
+ font-weight: 500;
+ font-size: 14pt;
+ color: $primary;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_editmode.scss b/hybrid-summer/.config/eww/css/_editmode.scss
new file mode 100755
index 000000000..3733a2095
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_editmode.scss
@@ -0,0 +1,18 @@
+.edit-mode-checkbox-false {
+ min-height: 53px;
+ min-width: 53px;
+ // background-image: url('images/svg/tournaments.svg');
+ background-size: auto 65%;
+ background-position: center;
+ color: transparent;
+}
+
+.edit-mode-checkbox-true {
+ min-height: 53px;
+ min-width: 53px;
+ background-color: $overlay0;
+ // background-image: url('images/svg/tournaments.svg');
+ background-size: auto 65%;
+ background-position: center;
+ color: transparent;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_iconcolor.txt b/hybrid-summer/.config/eww/css/_iconcolor.txt
new file mode 100755
index 000000000..61e55c5c0
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_iconcolor.txt
@@ -0,0 +1,6 @@
+#ffdbc4
+#caca93
+#92360F
+#A7683C
+#DA681D
+#DA681D
diff --git a/hybrid-summer/.config/eww/css/_iconcolor_default.txt b/hybrid-summer/.config/eww/css/_iconcolor_default.txt
new file mode 100755
index 000000000..3d888e238
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_iconcolor_default.txt
@@ -0,0 +1 @@
+#e1e4f1
diff --git a/hybrid-summer/.config/eww/css/_material.scss b/hybrid-summer/.config/eww/css/_material.scss
new file mode 100644
index 000000000..76fa24ab2
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_material.scss
@@ -0,0 +1,27 @@
+$primary: #ffb684;
+$onPrimary: #512300;
+$primaryContainer: #733500;
+$onPrimaryContainer: #ffdbc4;
+$secondary: #e5bfa8;
+$onSecondary: #432b1b;
+$secondaryContainer: #5b4130;
+$onSecondaryContainer: #ffdbc4;
+$tertiary: #caca93;
+$onTertiary: #31320a;
+$tertiaryContainer: #48491e;
+$onTertiaryContainer: #e6e6ad;
+$error: #ffb4a9;
+$onError: #680003;
+$errorContainer: #930006;
+$onErrorContainer: #ffb4a9;
+$colorbarbg: #201a17;
+$onBackground: #ece0da;
+$surface: #201a17;
+$onSurface: #ece0da;
+$surfaceVariant: #52443c;
+$onSurfaceVariant: #d7c3b8;
+$outline: #9f8d83;
+$shadow: #000000;
+$inverseSurface: #ece0da;
+$inverseOnSurface: #362f2b;
+$inversePrimary: #954905;
diff --git a/hybrid-summer/.config/eww/css/_music.scss b/hybrid-summer/.config/eww/css/_music.scss
new file mode 100755
index 000000000..5f120c08d
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_music.scss
@@ -0,0 +1,305 @@
+.music-area {
+ padding: 10px;
+ @include rounding;
+}
+
+.song-cover-art {
+ @include rounding;
+ background-position: center;
+ background-size: 100%;
+ margin: 4px 5px 4px 0;
+ min-height: 24px;
+ min-width: 24px;
+}
+
+.music-window {
+ @include window;
+ @include rounding;
+ background-color: $colorbarbg;
+ border: 3px solid;
+ color: $colortext;
+ margin: 3px;
+}
+
+.music-cover-art {
+ @include rounding;
+ background-color: transparent;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-image: url("eww_covers/cover_art_default");
+ background-position: 50% 15%;
+ // border-radius: 5px;
+ // margin: 1em;
+ // min-height: 200px;
+ min-width: 200px;
+}
+
+.music-box {
+ @include rounding;
+ padding-top: 24px;
+ background-color: rgba(0, 0, 0, 0.4);
+ background-position: top;
+}
+
+.music-title {
+ // font-weight: bold;
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ min-height: 39px;
+ font-size: 19pt;
+ color: $colortext;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+.music-title-hover {
+ // font-weight: bold;
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ font-size: 19pt;
+ color: $colortext;
+ background-color: $overlay0;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+.music-title-bar {
+ font-family: 'Rubik';
+ font-size: 15pt;
+ color: $colorbar;
+ padding-left: 10px;
+ padding-right: 10px;
+
+}
+
+.music-artist-bar {
+ color: $colorbar;
+ padding-left: 10px;
+ padding-right: 10px;
+ font-family: 'Rubik';
+ font-size: 11pt;
+}
+
+.music-artist {
+ color: $colortext;
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ font-weight: bold;
+ margin-bottom: 5px;
+ min-height: 25px;
+}
+
+.music-button label {
+ font-family: 'Material Symbols Rounded';
+ // color: $text;
+ font-size: 2rem;
+ font-family: SF Mono Nerd Font;
+ padding: 8px;
+}
+
+.music-time {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ color: $color1;
+ margin: 0 1rem;
+}
+
+.music-bar scale {
+ font-family: 'Material Symbols Rounded';
+ font-family: SF Mono Nerd Font;
+
+ highlight {
+ background-color: $color1;
+ border-radius: 24px;
+ }
+
+ trough {
+ background-color: $surface0;
+ border-radius: 24px;
+ min-height: 10px;
+ min-width: 170px;
+ }
+}
+
+.music-ctl {
+ border-radius: 0px;
+ color: $color1;
+ // padding-right: 10px;
+ min-height: 53px;
+}
+
+.music-icon {
+ padding-top: 5px; //Because the music icon is a bit high
+ padding-left: 16px;
+ padding-right: 16px;
+ color: $color1;
+ background-image: url("images/LinageMusic.png");
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center;
+}
+
+.music-ctl-revealer {
+ margin-top: -4px;
+ // transition: 200ms cubic-bezier(0.3, 0, 0.8, 0.15);
+}
+
+.music-ctl-revealer-false {
+ // padding-left: 10px;
+}
+
+.music-ctl-revealer-true {
+ background-color: $overlay0;
+}
+
+.music-media-source {
+ border-top-left-radius: 10px;
+ border-bottom-right-radius: 15px;
+ min-width: 40px;
+ min-height: 20px;
+ background-color: rgba(0, 0, 0, 0.4);
+}
+
+.music-source-icon {
+ font-family: 'JetBrainsMono Nerd Font';
+ font-size: 16pt;
+ margin-right: 5px;
+}
+
+.song-button {
+ color: $colortext;
+ border-radius: 9999px;
+ margin: 3px 3px;
+ min-width: 52px;
+ font-size: 32pt;
+}
+
+.song-button:hover {
+ background-color: $overlay0;
+}
+
+.music-button-box {
+ font-family: 'Material Symbols Rounded';
+ color: $colortext;
+ min-width: 160px;
+ margin-top: 6px;
+ margin-bottom: 6px;
+ padding-bottom: 0px;
+ background-color: rgba(0, 0, 0, 0.6);
+ border-radius: 9999px;
+}
+
+.osu-music-box {
+ // min-width: 75px;
+ min-height: 53px;
+ background-size: auto 65%;
+ background-position: 50% 50%;
+ // background-image: url('images/svg/beatmaps.svg');
+ // background-color: $colorbarbg;
+ background-repeat: no-repeat;
+ padding-left: 15px;
+}
+
+.osu-music-box-dummy {
+ min-width: 50px;
+ min-height: 53px;
+ margin-right: -6px;
+ margin-left: 6px;
+}
+
+.osu-music-slider {
+ margin-top: 9px;
+ margin-bottom: 9px;
+ min-height: 6px;
+ padding-left: 13px;
+
+ trough {
+ border-radius: 9999px;
+ background-color: #5c5b5b;
+ min-height: 6px;
+ // margin-left: 32px;
+ // margin-right: 32px;
+ // min-width: 70px;
+ min-width: 3px;
+ }
+
+ highlight {
+ min-width: 3px;
+ border-radius: 9999px;
+ background-color: $colorbar;
+ }
+}
+
+.track-scale {
+ @include rounding;
+
+ trough {
+ border-bottom-left-radius: 9999px;
+ border-bottom-right-radius: 9999px;
+ background-color: rgba(0, 0, 0, 0.8);
+ min-height: 8px;
+ // margin-left: 32px;
+ // margin-right: 32px;
+ // min-width: 70px;
+ min-width: 3px;
+ }
+
+ highlight {
+ min-width: 8px;
+ border-bottom-left-radius: 9999px;
+ border-bottom-right-radius: 9999px;
+ background-color: $color0;
+ }
+}
+
+.bar-music-cover {
+ border-radius: 10px;
+ min-height: 45px;
+ min-width: 45px;
+ background-size: auto 100%;
+ background-position: center;
+}
+
+.bar-music-state {
+ font-family: 'Material Symbols Rounded';
+ color: $color6;
+ background-color: rgba(0, 0, 0, 0.7);
+ border-radius: 9999px;
+ min-width: 30px;
+ min-height: 30px;
+}
+
+.music-cava-column {
+ background-color: $color0;
+ margin: 0 3px;
+ margin-bottom: 8px;
+ border-top-left-radius: 99px;
+ border-top-right-radius: 99px;
+}
+
+.music-time-label {
+ color: $colorbar;
+ background-color: rgba(0, 0, 0, 0.6);
+ font-size: 13pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ padding: 3px 8px;
+ border-radius: 9999px;
+ min-width: 50px;
+}
+
+.music-button-box-bar {
+ font-family: 'Material Symbols Rounded';
+ color: $colortext;
+ min-width: 160px;
+ margin: 0 0px;
+ border-radius: 9999px;
+}
+
+.song-button-bar {
+ color: $colortext;
+ border-radius: 9999px;
+ // margin: 3px;
+ min-width: 52px;
+ font-size: 32pt;
+}
+
+.song-button-bar:hover {
+ background-color: rgba(0, 0, 0, 0.4);
+}
diff --git a/hybrid-summer/.config/eww/css/_notification.scss b/hybrid-summer/.config/eww/css/_notification.scss
new file mode 100755
index 000000000..c289fd471
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_notification.scss
@@ -0,0 +1,84 @@
+.notifications-box {
+ // @include window;
+ // padding: 1rem;
+ font-family: 'Rubik';
+}
+
+.notification {
+ // @include rounding;
+ border-radius: 8px;
+ font-size: 12pt;
+ font-family: 'Rubik';
+ background-color: $surface0;
+ // border-bottom: 3px solid $colorbg;
+ padding: .7rem;
+ margin-top: 5px;
+ margin-bottom: 5px;
+
+ // box {
+ // margin-bottom: .5rem;
+ // }
+
+ label {
+ font-size: 1rem;
+ }
+
+ &:hover {
+ border: 3px solid $color7;
+ }
+
+ .appname {
+ font-size: 13pt;
+ color: $color0;
+ font-weight: bold;
+ }
+
+ .summary {
+ font-size: 13pt;
+ color: $colortext;
+ font-weight: bold;
+ }
+
+ .body {
+ color: $colortext;
+ }
+}
+
+// .container {
+// &:first-child {
+// border-radius: 8px 8px 0 0;
+// }
+
+// ;
+
+// &:last-child {
+// border-radius: 0 0 8px 8px;
+// }
+
+// ;
+// }
+
+.notification-header {
+ margin-bottom: 1rem;
+}
+
+.notification-label {
+ color: $colortext;
+ font-size: 1.5rem;
+}
+
+.notification-action {
+ border-radius: 50%;
+ margin-top: 33px;
+ margin-bottom: 9px;
+ padding: 0 .3rem;
+
+ label {
+ color: $colortext;
+ font-size: 1.4rem;
+ }
+
+ &:hover {
+ background: $surface0;
+ }
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_osd.scss b/hybrid-summer/.config/eww/css/_osd.scss
new file mode 100755
index 000000000..11b6bc65e
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_osd.scss
@@ -0,0 +1,43 @@
+.osd-window {
+ margin: 5px;
+ border-radius: 9999px;
+ min-width: 10px;
+ min-height: 40px;
+}
+
+.osd-var {
+ margin-left: 5px;
+ margin-right: 5px;
+ background-color: $surface;
+ border-radius: 9999px;
+ min-width: 100px;
+ min-height: 37px;
+ padding: 7px;
+}
+
+.osd-circle {
+ // margin-left: 14px;
+ background-color: #5c5b5b;
+ color: $colortext;
+}
+
+.osd-incircle {
+ font-size: 19pt;
+ padding: 6px;
+ font-family: "Material Symbols Rounded"; //AAAAAAAAAGGGHHH
+ color: $colortext;
+}
+
+.osd-incircle-bright {
+ font-size: 19pt;
+ padding: 6px;
+ font-family: "Material Symbols Rounded"; //AAAAAAAAAGGGHHH
+ color: $colortext;
+}
+
+.osd-text {
+ font-size: 15pt;
+ font-family: "Rubik"; //AAAAAAAAAGGGHHH
+ color: $colortext;
+ padding-right: 5px;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_osettings.scss b/hybrid-summer/.config/eww/css/_osettings.scss
new file mode 100755
index 000000000..2afc5e7e4
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_osettings.scss
@@ -0,0 +1,439 @@
+.osettings-window {
+ min-width: 501px;
+ padding-top: 20px;
+ background-color: shade($colorbarbg, 4%);
+ color: $onBackground;
+ font-family: Rubik;
+ margin: 7px;
+ margin-left: 0px;
+ border-top-right-radius: 53px;
+
+ background-image: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),
+ url('images/pictures/beach_smoothie.jpg');
+ background-position: top;
+ background-repeat: no-repeat;
+ background-size: 100% auto;
+}
+
+.onotify-window {
+ min-width: 529px;
+ background-color: shade($colorbarbg, 5%);
+ color: $onBackground;
+ font-family: Rubik;
+ margin: 7px;
+ margin-right: 0px;
+ border-top-left-radius: 53px;
+
+ background-image: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),
+ url('images/pictures/beach_drinks.jpeg');
+ background-position: top;
+ background-repeat: no-repeat;
+ background-size: 100% auto;
+}
+
+.osettings-separator {
+ background-color: shade($colorbarbg, 5%);
+ min-height: 6px;
+ margin-top: 27px;
+}
+
+.osettings-content {
+ // padding-top: 13px;
+ margin-top: 27px;
+ padding-bottom: 8px;
+ padding-top: 8px;
+ font-family: Rubik;
+ color: $onBackground;
+ background-color: shade($colorbarbg, 5%);
+ border-top-right-radius: 53px;
+}
+
+.onotify-content {
+ // padding-top: 13px;
+ margin-top: 27px;
+ padding-top: 8px;
+ padding-bottom: 16px;
+ font-family: Rubik;
+ color: $onBackground;
+ background-color: shade($colorbarbg, 5%);
+ border-top-left-radius: 53px;
+}
+
+.osettings-heading {
+ padding-left: 28px;
+ padding-right: 28px;
+ color: $onBackground;
+ font-family: Rubik;
+}
+
+.osettings-title {
+ color: $onBackground;
+ font-family: Rubik;
+ font-size: 30pt;
+}
+
+.osettings-subtitle {
+ color: $onSecondaryContainer;
+ font-family: Rubik;
+ font-size: 14pt;
+}
+
+.osettings-section-icon {
+ margin-top: 33px;
+ margin-bottom: 9px;
+ color: $onSecondaryContainer;
+ font-family: 'Material Symbols Rounded';
+ font-size: 20pt;
+ min-width: 50px;
+ min-height: 50px;
+ background-color: $secondaryContainer;
+ border-radius: 16px;
+}
+
+.osettings-section {
+ margin-top: 33px;
+ margin-bottom: 9px;
+ color: $onSecondaryContainer;
+ font-family: Rubik;
+ font-size: 20pt;
+}
+
+.osettings-text {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ color: $onBackground;
+ font-family: Rubik;
+ font-size: 14pt;
+}
+
+.osettings-text-icon {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ color: $onBackground;
+ font-family: 'Material Symbols Rounded';
+ font-size: 14pt;
+ min-width: 50px;
+}
+
+.osettings-search {
+ margin-left: 28px;
+ margin-right: 28px;
+ margin-top: 35px;
+ background-color: tint($colorbarbg, 4%);
+ border: 2px solid $onSurfaceVariant;
+ color: $onBackground;
+ border-radius: 10px;
+ font-size: 11pt;
+ min-height: 45px;
+ caret-color: $onBackground;
+
+ selection {
+ background-color: rgba(154, 152, 152, 0.5);
+ }
+}
+
+.osettings-search-text {
+ color: $onSurfaceVariant;
+ padding: 10px;
+ font-size: 13pt;
+ min-width: 420px;
+}
+
+.osettings-search-icon {
+ color: $onSurfaceVariant;
+ padding: 6px;
+ padding-left: 0px;
+ font-size: 20pt;
+}
+
+.osettings-scroll-bg {
+ padding-left: 28px;
+ padding-right: 28px;
+}
+
+.osettings-scroll-bg-colored {
+ padding-left: 28px;
+ padding-right: 28px;
+ background-color: shade($colorbarbg, 5%);
+}
+
+.osettings-btn {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ border-radius: 9999px;
+ min-height: 50px;
+ font-weight: normal;
+ font-size: 13pt;
+}
+
+.osettings-btn {
+ font-weight: bold;
+}
+
+.osettings-btn-destructive {
+ color: $onTertiary;
+ background-color: $tertiary;
+ background-image: linear-gradient(45deg, shade($color4, 5%) 58%, tint($color4, 10%) 58%);
+ background-size: 300% 300%;
+ background-position: 50% 50%;
+}
+
+.osettings-btn-neutral {
+ color: $onPrimary;
+ background-color: $primary;
+ background-image: linear-gradient(45deg, shade($color1, 5%) 58%, tint($color1, 10%) 58%);
+ background-size: 300% 300%;
+ background-position: 50% 50%;
+}
+
+.osettings-btn-informative {
+ color: $onSecondary;
+ background-color: $secondary;
+ background-image: linear-gradient(45deg, shade($color5, 5%) 58%, tint($color5, 10%) 58%);
+ background-size: 300% 300%;
+ background-position: 50% 50%;
+}
+
+.osettings-btn-neutral:hover,
+.osettings-btn-neutral:focus {
+ background-color: tint($primary, 10%);
+ // background-image: linear-gradient(135deg, $color3 75%, $color3 75%);
+ background-position: 70% 0%;
+}
+
+.osettings-btn-destructive:hover,
+.osettings-btn-destructive:focus {
+ background-color: tint($tertiary, 10%);
+ // background-image: linear-gradient(135deg, tint($color4, 10%) 75%, tint($color4, 10%) 75%);
+ background-position: 70% 0%;
+}
+
+.osettings-btn-informative:hover,
+.osettings-btn-informative:focus {
+ background-color: tint($secondary, 10%);
+ // background-image: linear-gradient(135deg, tint($color5, 10%) 75%, tint($color5, 10%) 75%);
+ background-position: 70% 0%;
+}
+
+.osettings-btn-neutral:active {
+ background-color: tint($primary, 10%);
+ // background-image: linear-gradient(135deg, $color3 75%, $color3 75%);
+ background-position: 100% 50%;
+}
+
+.osettings-btn-destructive:active {
+ background-color: tint($tertiary, 10%);
+ // background-image: linear-gradient(135deg, tint($color4, 10%) 75%, tint($color4, 10%) 75%);
+ background-position: 100% 50%;
+}
+
+.osettings-btn-informative:active {
+ background-color: tint($secondary, 10%);
+ // background-image: linear-gradient(135deg, tint($color5, 10%) 75%, tint($color5, 10%) 75%);
+ background-position: 100% 50%;
+}
+
+.rounder {
+ border-radius: 9999px;
+}
+
+.osettings-slider {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ min-height: 6px;
+ border-radius: 9999px;
+ background-image: linear-gradient(45deg, $primary 50%, tint($colorbarbg, 15%) 50%);
+ padding: 0px;
+
+ trough {
+ border-radius: 9999px;
+ background-color: tint($colorbarbg, 15%);
+ min-height: 6px;
+ margin-left: 32px;
+ margin-right: 32px;
+ // min-width: 70px;
+ }
+
+ highlight {
+ border-radius: 9999px;
+ background-color: $primary;
+ background-image: linear-gradient(45deg, $primary 0%, $primary 100%);
+ }
+
+ slider {
+ border-radius: 9999px;
+ min-height: 20px;
+ min-width: 65px;
+ background-color: $primary;
+ margin: -8px;
+ }
+
+ slider:hover {
+ background-color: $primary;
+ }
+}
+
+.osettings-checkbox {
+ border-radius: 9999px;
+ // min-height: 20px;
+ // min-height: 6px;
+ min-width: 60px;
+ background-color: transparent;
+ color: transparent;
+ border: 3px solid $primary;
+
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.osettings-checkbox-1 {
+ border-radius: 9999px;
+ // min-height: 20px;
+ // min-height: 6px;
+ min-width: 60px;
+ background-color: $primary;
+ color: transparent;
+ border: 3px solid $primary;
+
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.osettings-checkbox-0 {
+ border-radius: 9999px;
+ // min-height: 20px;
+ // min-height: 6px;
+ min-width: 60px;
+ background-color: transparent;
+ color: transparent;
+ border: 3px solid $primary;
+
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.osettings-checkbox:checked {
+ border-radius: 9999px;
+ background-color: $primary;
+ color: $primary;
+}
+
+.osettings-waifu {
+ margin-top: 30px;
+ min-width: 350px;
+ min-height: 350px;
+ border-radius: 20px;
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-position: center center;
+}
+
+.onotify-app-icon {
+ margin: 9px 5px;
+
+ color: $onSecondaryContainer;
+ font-family: 'Material Symbols Rounded';
+ font-size: 20pt;
+ min-width: 40px;
+ min-height: 40px;
+ background-color: $secondaryContainer;
+ border-radius: 14px;
+}
+
+.onotify-app-name {
+ margin-top: 5px;
+ margin-bottom: 5px;
+ color: $onSecondaryContainer;
+ font-family: Rubik;
+ font-size: 15pt;
+}
+
+.onotify-app-text {
+ color: $onSecondaryContainer;
+ font-family: Rubik;
+ font-size: 13pt;
+}
+
+.onotify-app-ser {
+ color: $onSecondaryContainer;
+ font-family: Rubik;
+ font-size: 13pt;
+}
+
+.onotify-app-vol-circle {
+ background-color: #5c5b5b;
+ color: $primary;
+}
+
+.onotify-app-volbox {
+ margin: 9px 5px;
+ padding: 5px;
+
+ color: $onSecondaryContainer;
+ font-family: 'Material Symbols Rounded';
+ font-size: 20pt;
+ min-width: 40px;
+ min-height: 40px;
+ background-color: $secondaryContainer;
+ border-radius: 14px;
+}
+
+.osettings-tag {
+ color: $onTertiary;
+ background-color: $tertiary;
+ font-size: 13pt;
+ font-family: 'Rubik';
+ font-weight: 500;
+ padding: 3px 8px;
+ border-radius: 9999px;
+ min-width: 50px;
+ margin-top: 25px;
+}
+
+.osettings-tag:hover {
+ background-color: tint($tertiary, 20%);
+}
+
+.osettings-tag:active {
+ background-color: tint($tertiary, 40%);
+}
+
+.osettings-tag-nerd {
+ color: $onTertiary;
+ background-color: $tertiary;
+ font-size: 13pt;
+ font-family: 'JetBrainsMono Nerd Font';
+ font-weight: 500;
+ padding: 3px 8px;
+ border-radius: 9999px;
+ min-width: 50px;
+ margin-top: 25px;
+}
+
+.osettings-tag-nerd:hover {
+ background-color: tint($tertiary, 20%);
+}
+
+.osettings-tag-nerd:active {
+ background-color: tint($tertiary, 40%);
+}
+
+.osettings-tag-material {
+ color: $onTertiary;
+ background-color: $tertiary;
+ font-size: 13pt;
+ font-family: 'Material Symbols Rounded';
+ font-weight: 500;
+ padding: 3px 8px;
+ border-radius: 9999px;
+ // min-width: 25px;
+ margin-top: 25px;
+}
+
+.osettings-tag-material:hover {
+ background-color: tint($tertiary, 20%);
+}
+
+.osettings-tag-material:active {
+ background-color: tint($tertiary, 40%);
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_overview.scss b/hybrid-summer/.config/eww/css/_overview.scss
new file mode 100755
index 000000000..1d36a3027
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_overview.scss
@@ -0,0 +1,198 @@
+.overview-window {
+ @include window;
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ border-radius: 22px;
+ background-color: shade($colorbarbg, 4%);
+ // background-color: transparent;
+ // border: 3px solid $color0;
+ //padding: 5px;
+}
+
+.overview-window-title {
+ font-size: 15pt;
+ color: $onPrimaryContainer;
+ border-radius: 15px;
+ background-color: tint($surface, 5%);
+ margin: 4px;
+ padding: 4px;
+ min-height: 30px;
+ background-image: linear-gradient(135deg, $onSecondary 15%, rgba(0, 0, 0, 0) 15%, rgba(0, 0, 0, 0) 33%, $onSecondary 33%, $onSecondary 68%, rgba(0, 0, 0, 0) 68%, rgba(0, 0, 0, 0) 95%, $onSecondary 95%);
+}
+
+.overview-window-top {
+ @include rounding;
+ background-color: transparent;
+ border: 3px solid transparent;
+ //padding: 5px;
+}
+
+.overview-ws {
+ border: 2px solid;
+ border-radius: 15px;
+ background-color: tint($surface, 2%);
+ margin: 4px;
+}
+
+.overview-ws-true {
+ color: $primary;
+}
+
+.overview-ws-false {
+ color: transparent;
+}
+
+.overview-ws-window {
+ // border: 2px solid transparent;
+ // background-color: rgba(108, 112, 134, 1);
+ border-radius: 15px;
+ background-color: shade($surface0, 2%);
+ border: 1px solid $surface0;
+ border-top: 1px solid tint($surface0, 5%);
+ // //margin: 3px;
+}
+
+.overview-ws-window-content {
+ border-radius: 11px;
+ // background-color: rgba(135, 147, 163, 0.7);
+}
+
+.overview-topbar-icon {
+ min-width: 30px;
+ min-height: 30px;
+ margin: 5px;
+ background-size: contain;
+}
+
+.overview-topbar-button {
+ min-width: 30px;
+ min-height: 30px;
+ margin: 5px;
+ border-radius: 8px;
+}
+
+.overview-topbar-button:hover {
+ background-color: $overlay0;
+}
+
+.overview-icon {
+ background-repeat: no-repeat;
+ background-position: center;
+}
+
+.overview-background {
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 100%;
+ border-radius: 15px;
+}
+
+.overview-ws-text {
+ //padding-left: 5px;
+ font-size: 13pt;
+}
+
+.overview-ws-subtext {
+ //padding-left: 5px;
+ font-size: 9pt;
+}
+
+.overview-ws-number {
+ //Note: height 100px width 356px
+ font-size: 25pt;
+ border-radius: 11px;
+ background-color: $overlay0;
+ color: $onBackground;
+ //margin: 10px;
+ min-height: 40px;
+ min-width: 40px;
+}
+
+.overview-title {
+ font-weight: bold;
+ font-size: 15pt;
+ //padding-top: .6rem;
+ //padding-bottom: .6rem;
+}
+
+.overview-search-box {
+ border: 2px solid;
+ border-radius: 9999px;
+ background-color: tint($colorbarbg, 4%);
+ color: $onBackground;
+ font-size: 15pt;
+ min-height: 45px;
+ min-width: 130px;
+
+ margin: 20px 20px;
+ padding: 2px 17px;
+
+ caret-color: $onBackground;
+
+ selection {
+ background-color: rgba(154, 152, 152, 0.5);
+ }
+}
+
+.overview-search-box:focus {
+ color: $tertiary;
+}
+
+.overview-results {
+ // background-color: $surface;
+ padding: 10px 5px;
+ border-radius: 20px;
+}
+
+.overview-search-result {
+ border-radius: 9999px;
+ background-color: $onTertiary;
+ color: $onBackground;
+ font-size: 15pt;
+ min-height: 47px;
+ min-width: 400px;
+ padding: 2px 12px;
+ padding-left: 57px;
+ margin: 0px 5px;
+
+ background-image: linear-gradient(135deg, rgba(0, 0, 0, 0) 60%, tint($tertiaryContainer, 10%) 60%);
+ background-size: 400% auto;
+ background-position: 40% 50%;
+
+ caret-color: transparent;
+
+ selection {
+ background-color: transparent;
+ }
+}
+
+.overview-search-result-icon {
+ background-color: $tertiaryContainer;
+ border-radius: 9999px;
+ min-height: 51px;
+ min-width: 51px;
+ // padding: 2px 12px;
+}
+
+.overview-search-result:focus {
+ color: $onTertiaryContainer;
+ // background-color: $tertiaryContainer;
+ background-position: 65% 50%;
+}
+
+.overview-search-result:active {
+ color: $onTertiaryContainer;
+ // background-color: $tertiaryContainer;
+ background-position: 100% 50%;
+}
+
+.overview-search-typetosearch-pad {
+ min-width: 160px;
+ margin: 20px 20px;
+ padding: 2px 12px;
+}
+
+.overview-search-typetosearch-text {
+ margin: 13px 13px;
+ font-size: 15pt;
+ color: #CCCCCC;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_sidebar.scss b/hybrid-summer/.config/eww/css/_sidebar.scss
new file mode 100755
index 000000000..1667f702f
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_sidebar.scss
@@ -0,0 +1,170 @@
+.system-menu-box {
+ @include window;
+ background-color: $colorbarbg;
+ border: 3px solid $border;
+ // color: $colortext;
+}
+
+.separator {
+ font-size: 1rem;
+}
+
+.top-row {
+ margin: 1rem 1.5rem 0;
+
+ .time {
+ font-size: 2rem;
+ }
+
+ .date-box {
+ margin: 0 1rem;
+
+ label {
+ font-size: 1.1rem;
+ }
+
+ .date {
+ background: unset;
+ margin: 0 .5rem 0 0;
+ padding: 0;
+ }
+ }
+}
+
+.system-row {
+ font-family: Rubik;
+ // margin: .5rem .7rem;
+ margin-top: 27px;
+
+ .airplane-box button {
+ padding: 1rem 3rem;
+ }
+
+ .power-box button {
+ padding-left: 30px;
+ padding-right: 30px;
+ }
+
+ label {
+ font-size: 1rem;
+ }
+}
+
+.element {
+ font-family: 'Rubik';
+ border-top-left-radius: 31px;
+ border-top-right-radius: 31px;
+ border-bottom-left-radius: 31px;
+ border-bottom-right-radius: 10px;
+ background-color: $secondaryContainer;
+ color: $onSecondaryContainer;
+ margin: .3rem;
+
+ button {
+ border-top-left-radius: 31px;
+ border-top-right-radius: 31px;
+ border-bottom-left-radius: 31px;
+ border-bottom-right-radius: 10px;
+ padding: 1rem;
+
+ label {
+ font-size: 1.5rem;
+ }
+
+ &:hover {
+ background: $overlay0;
+ }
+ }
+}
+
+.sliders {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ @include rounding;
+ background-color: $surface0;
+ margin: .5rem 1rem;
+ padding: .6rem 1rem;
+
+ scale {
+ margin-right: -1rem;
+ min-width: 25.8rem;
+ }
+
+ scale trough {
+ background-color: $bg1;
+ border-radius: 24px;
+ margin: 0 1rem;
+ min-height: 10px;
+ min-width: 70px;
+ }
+
+ box {
+ margin: .2rem 0;
+ }
+
+ label {
+ font-size: 1.2rem;
+ }
+}
+
+.sliderbg {
+ background-color: transparent;
+ padding: 0px;
+}
+
+.volume-bar highlight {
+ font-family: SF Mono Nerd Font;
+ @include rounding;
+ background: $color6;
+ // background-image: linear-gradient(to right, $tokyocyan 30%, $tokyopurple 100%);
+}
+
+.volume-slider-box scale highlight {
+ @include rounding;
+ background: $color6;
+ // background-image: linear-gradient(to right, $tokyocyan 30%, $tokyopurple 100%);
+ // border: 2px solid;
+ min-height: 0.9rem;
+}
+
+// .volume-slider-box scale {
+// @include rounding;
+// background-color: #1A1B26;
+// border: 2px solid;
+// }
+
+.bottom-row {
+ margin: .5rem 1rem;
+
+ .battery-icon {
+ font-size: 2rem;
+ }
+
+ .battery-wattage {
+ color: $color7;
+ }
+
+ .battery-status {
+ color: $colortext;
+ margin: 0 .5rem;
+ }
+
+ button {
+ background-color: $surface0;
+ border-radius: 50%;
+ margin-bottom: .1rem;
+ padding: 0 .5rem;
+
+ label {
+ font-size: 1.5rem;
+ }
+
+ &:hover {
+ background: $overlay0;
+ }
+ }
+}
+
+.power-button {
+ min-height: 2.5rem;
+ // min-width: 2.5rem;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_system.scss b/hybrid-summer/.config/eww/css/_system.scss
new file mode 100755
index 000000000..0bba21fed
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_system.scss
@@ -0,0 +1,194 @@
+.membar {
+ color: $color5;
+}
+
+.cpubar {
+ color: $color4;
+}
+
+.batbar {
+ color: $color6;
+ padding-right: 4px;
+}
+
+.cpubar-circle {
+ background-color: #5c5b5b;
+}
+.membar-circle {
+ background-color: #5c5b5b;
+}
+.batbar-circle {
+ background-color: #5c5b5b;
+}
+
+// .batbar-circle {
+// color: $battcolor;
+// padding-right: 4px;
+// }
+
+// .membar,
+// .cpubar,
+// .batbar {
+// // background-color: transparent;
+// padding: 0px;
+// }
+
+.membar:hover,
+.cpubar:hover,
+.batbar:hover {
+ // border-top: 2px solid;
+}
+
+.batt-percentage {
+ color: $color6;
+ padding-right: 5px;
+ padding-left: 4px;
+}
+
+.batt-low {
+ background-color: #B5E8E0;
+ color: #161320;
+ animation-name: blink;
+ animation-duration: 0.5s;
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+}
+
+.sys-menu-charge {
+ padding-left: 2px;
+ color: $colorbar;
+}
+
+.iconmem {
+ color: $color5;
+}
+
+.iconcpu {
+ color: $color4;
+}
+
+.icon-text {
+ font-size: 3rem;
+ padding: .7rem;
+}
+
+.sys-text-sub {
+ color: $onBackground;
+}
+
+.sys-text-mem,
+.sys-text-cpu {
+ font-size: 1rem;
+ font-weight: bold;
+}
+
+.sys-icon-mem,
+.sys-icon-cpu {
+ font-size: 1.5rem;
+ margin: 1.5rem;
+}
+
+.system-info-box {
+ @include rounding;
+ background-color: $surface0;
+ margin: .5rem 1rem;
+ // padding: .5rem;
+}
+
+.sys-mem,
+.sys-cpu {
+ background-color: $colorbg;
+}
+
+.sys-icon-mem,
+.sys-text-mem,
+.sys-mem {
+ color: $memcolor;
+}
+
+.sys-icon-cpu,
+.sys-text-cpu,
+.sys-cpu {
+ color: $cpucolor;
+}
+
+.sys-box {
+ margin: .3em;
+ // background-color: tint($colorbarbg, 7%);
+ // border-radius: 20px;
+ // padding: 35px;
+
+ box {
+ margin-left: 1rem;
+ }
+}
+
+.cpu-menu {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ color: $color4;
+ padding-left: 5px;
+}
+
+.mem-menu {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ color: $color5;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+.mem-menu-left {
+ color: $color5;
+ padding-left: 5px;
+ padding-right: 0px;
+}
+
+.mem-menu-mid {
+ color: $color5;
+ padding-left: 0px;
+ padding-right: 0px;
+}
+
+.mem-menu-right {
+ color: $color5;
+ padding-left: 0px;
+ padding-right: 5px;
+}
+
+.sys-menu {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ color: $battcolor;
+ margin: 0px;
+ padding: 0px;
+}
+
+.sys-menu-button {
+ color: $colorbar;
+ margin: 0px;
+ padding-left: 16px;
+ padding-right: 16px;
+ background-image: url("images/LinageSettings.png");
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center;
+}
+
+// .volume-bar, .brightness-slider, .slider {
+// background-color: #16161E;
+// border: 2px solid #7C9FF5;
+// border-radius: 99px;
+// }
+
+.sys-toggle {
+ font-size: 3pt;
+}
+
+.inside-circle {
+ min-height: 27px;
+ min-width: 27px;
+}
+
+.sys-circle-inner {
+ font-size: 15pt;
+ padding: 5px;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_taskbar.scss b/hybrid-summer/.config/eww/css/_taskbar.scss
new file mode 100644
index 000000000..6387da2fa
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_taskbar.scss
@@ -0,0 +1,87 @@
+.taskbaricon {
+ background-size: 60%;
+ background-position: center;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.taskbaricon-false {
+ background-size: 70%;
+ background-position: center;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.taskbaricon-true {
+ background-size: 70%;
+ background-position: center;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.taskbar-indicator-true {
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ margin-bottom: 4px;
+ margin-top: 43px;
+ margin-left: 16px;
+ margin-right: 16px;
+ background-color: $primary;
+}
+
+.taskbar-indicator-false {
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ margin-bottom: 4px;
+ margin-top: 43px;
+ margin-left: 22px;
+ margin-right: 22px;
+ background-color: #9C98A3;
+}
+
+.taskbar-button-only {
+ :first-child {
+ :first-child {
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ }
+ }
+}
+
+.taskbar-button-only:hover {
+ :first-child {
+ :first-child {
+ background-color: shade($overlay0, 2%);
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ }
+ }
+}
+
+.taskbar-button-only:active {
+ :first-child {
+ :first-child {
+ background-color: tint($overlay0, 8%);
+ border: 1px solid tint($overlayedge, 10%);
+ border-top: 1px solid tint($overlayedge, 15%);
+ }
+ }
+}
+
+.taskbar-button-pad {
+ padding: 3px;
+ // min-width: 42px;
+ min-height: 42px;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_themer.scss b/hybrid-summer/.config/eww/css/_themer.scss
new file mode 100755
index 000000000..b2aafc963
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_themer.scss
@@ -0,0 +1,205 @@
+.themer-button {
+ min-height: 53px;
+ min-width: 53px;
+ color: $colortext;
+ font-family: Material Symbols Rounded;
+ // background-image: url('images/svg/beatmappacks.svg');
+ // background-size: auto 65%;
+ // background-position: center;
+}
+
+
+.themer-button-false {
+ min-height: 53px;
+ min-width: 53px;
+ color: $colortext;
+ font-family: Material Symbols Rounded;
+ // background-image: url('images/svg/beatmappacks.svg');
+ // background-image: linear-gradient(45deg, rgba(0, 0, 0, 0) 60%, tint($overlay0, 10%) 60%);
+ // background-size: 400% auto;
+ // background-position: 90% 50%;
+}
+
+.themer-button-true {
+ min-height: 53px;
+ min-width: 53px;
+ color: $colortext;
+ font-family: Material Symbols Rounded;
+ background-color: $overlay0;
+ // background-image: linear-gradient(45deg, rgba(0, 0, 0, 0) 60%, tint($overlay0, 10%) 60%);
+ // background-size: 400% auto;
+ // background-position: 90% 50%;
+}
+
+.themer-action-button {
+ @include rounding;
+ min-height: 53px;
+ min-width: 53px;
+ color: $colortext;
+ font-family: Material Symbols Rounded;
+}
+
+.themer-action-button:hover {
+ background-color: $overlay0;
+}
+
+.themer-action-button:active {
+ background-color: $overlay0;
+}
+
+.themer-action-button:focus {
+ border: 2px solid $overlay0;
+}
+
+.themer-menu-box {
+ @include window;
+ @include rounding;
+ border-radius: 15px;
+ background-color: shade($colorbarbg, 4%);
+ margin: 14px;
+ transition: 250ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ // box-shadow: 2px 2px 6px #16161E;
+}
+
+.themer-title {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ font-size: 15pt;
+ padding: .6rem;
+ color: $colortext;
+ font-size: 14pt;
+}
+
+.themer-prompt {
+ color: $colortext;
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ font-size: 12pt;
+ padding: .6rem;
+}
+
+.themer-input {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ // background-color: $surface0;
+ background-color: tint($colorbarbg, 4%);
+ color: $colortext;
+ border-radius: 10px;
+ padding: 7px;
+ margin-top: 2px;
+ margin-bottom: 2px;
+ border: 2px solid $overlay0;
+ caret-color: $colortext;
+
+ selection {
+ background-color: rgba(154, 152, 152, 0.5);
+ }
+}
+
+.themer-input:focus {
+ border: 2px solid $colortext;
+}
+
+.themer-color-preview-section {
+ @include rounding;
+}
+
+.themer-color-preview {
+ min-height: 25px;
+ min-width: 25px;
+ border-radius: 5px;
+ border-width: 55px;
+}
+
+.preview-0 {
+ background-color: $color0;
+}
+
+.preview-1 {
+ background-color: $color1;
+}
+
+.preview-2 {
+ background-color: $color2;
+}
+
+.preview-3 {
+ background-color: $color3;
+}
+
+.preview-4 {
+ background-color: $color4;
+}
+
+.preview-5 {
+ background-color: $color5;
+}
+
+.preview-6 {
+ background-color: $color6;
+}
+
+.preview-7 {
+ background-color: $color7;
+}
+
+.preview-primary {
+ background-color: $primary;
+}
+
+.preview-onPrimary {
+ background-color: $onPrimary;
+}
+
+.preview-primaryContainer {
+ background-color: $primaryContainer;
+}
+
+.preview-onPrimaryContainer {
+ background-color: $onPrimaryContainer;
+}
+
+.preview-secondary {
+ background-color: $secondary;
+}
+
+.preview-onSecondary {
+ background-color: $onSecondary;
+}
+
+.preview-secondaryContainer {
+ background-color: $secondaryContainer;
+}
+
+.preview-onSecondaryContainer {
+ background-color: $onSecondaryContainer;
+}
+
+.preview-tertiary {
+ background-color: $tertiary;
+}
+
+.preview-onTertiary {
+ background-color: $onTertiary;
+}
+
+.preview-tertiaryContainer {
+ background-color: $tertiaryContainer;
+}
+
+.preview-onTertiaryContainer {
+ background-color: $onTertiaryContainer;
+}
+
+.preview-background {
+ background-color: $colorbarbg;
+}
+
+.preview-onBackground {
+ background-color: $onBackground;
+}
+
+.preview-surface {
+ background-color: $surface;
+}
+
+.preview-onSurface {
+ background-color: $onSurface;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_volume.scss b/hybrid-summer/.config/eww/css/_volume.scss
new file mode 100755
index 000000000..fd7acf507
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_volume.scss
@@ -0,0 +1,29 @@
+.vol-icon {
+ color: $color6;
+ padding-right: 2px;
+}
+
+// .vol-icon {
+// color: $tokyocyan;
+// padding-right: 2px;
+// }
+
+.volbar highlight {
+ background-image: linear-gradient(to right, $teal 30%, $sky 100%);
+ border-radius: 10px;
+}
+
+
+.vol-menu {
+ font-size: 1pt;
+ color: $color6;
+ padding-right: 2px;
+ padding-top: 4px;
+}
+
+.vol-menu:hover {
+ border-top: 2px solid;
+}
+.vol-icon:hover {
+ border-top: 2px solid;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_winctl.scss b/hybrid-summer/.config/eww/css/_winctl.scss
new file mode 100755
index 000000000..12c27eb36
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_winctl.scss
@@ -0,0 +1,55 @@
+.winctl {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ padding-left: 3px;
+ padding-right: 3px;
+ color: $color0;
+ padding-top: 4px;
+}
+
+.winctl:hover {
+ border-top: 2px solid;
+}
+
+.winws {
+ @include rounding;
+ background-color: $surface0;
+ margin: .4rem .8rem;
+ padding: .3rem .5rem;
+ min-width: 31rem;
+}
+
+.winws-title {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ font-weight: bold;
+ font-size: 15pt;
+ padding-top: .6rem;
+ padding-bottom: .6rem;
+}
+
+.wintext {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ font-size: 13pt;
+}
+.winsubtext {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ font-size: 10pt;
+}
+
+.winws-workspace {
+ padding: 0px;
+ margin: 0px;
+}
+
+.appicon {
+ background-size: 90%;
+ background-repeat: no-repeat;
+ background-position: center;
+ padding-left: 22px;
+ padding-right: 22px;
+ margin-right: 10px;
+}
+
+.wschoose {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ font-size: 14pt;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/css/_winstuff.scss b/hybrid-summer/.config/eww/css/_winstuff.scss
new file mode 100644
index 000000000..89a548d61
--- /dev/null
+++ b/hybrid-summer/.config/eww/css/_winstuff.scss
@@ -0,0 +1,1574 @@
+.winwin {
+ background: rgba(40, 40, 40, 0.6);
+ border-radius: 12px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-top: 1px solid rgba(64, 64, 64, 0.5);
+ margin: 12px;
+}
+
+.winwin-center {
+ background: rgba(40, 40, 40, 0.6);
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-bottom: 0px solid transparent;
+ border-top: 1px solid rgba(30, 30, 30, 0.5);
+ margin: 0px 12px;
+}
+
+.winwin-center-noseparator {
+ background: rgba(40, 40, 40, 0.6);
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-bottom: 0px solid transparent;
+ border-top: 0px solid transparent;
+ margin: 0px 12px;
+}
+
+.winwin-topbar {
+ background: rgba(28, 28, 28, 0.6);
+ border-top-left-radius: 12px;
+ border-top-right-radius: 12px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-bottom: 0px solid transparent;
+ margin: 12px;
+ margin-bottom: 0px;
+}
+
+.winwin-top {
+ transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ background: rgba(40, 40, 40, 0.6);
+ border-top-left-radius: 12px;
+ border-top-right-radius: 12px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-top: 1px solid rgba(64, 64, 64, 0.5);
+ border-bottom: 0px solid transparent;
+ margin: 12px;
+ margin-bottom: 0px;
+}
+
+.winwin-bottom {
+ background: rgba(28, 28, 28, 0.6);
+ border-bottom-left-radius: 12px;
+ border-bottom-right-radius: 12px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-top: 1px solid rgba(30, 30, 30, 0.5);
+ margin: 12px;
+ margin-top: 0px;
+}
+
+.winwin-bottom-light {
+ transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ background: rgba(40, 40, 40, 0.6);
+ border-bottom-left-radius: 12px;
+ border-bottom-right-radius: 12px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-top: 0px solid transparent;
+ margin: 12px;
+ margin-top: 0px;
+}
+
+.winwin-bottom-pad {
+ padding: 6px 12px;
+}
+
+.winstart-bottom-pad {
+ padding: 0px 43px;
+}
+
+.winbar-bg {
+ background: rgba(30, 30, 30, 0.25);
+ background-image: url('images/textures/acrylic.png');
+ background-blend-mode: luminosity;
+
+ min-height: 50px;
+ border-top: 1px solid rgba(64, 64, 64, 0.8);
+ animation-name: flyin-bottom;
+ animation-duration: 350ms;
+ animation-timing-function: cubic-bezier(0.05, 0.7, 0.1, 1);
+ animation-iteration-count: 1;
+}
+
+.winbutton-pad {
+ padding: 3px;
+ // min-width: 42px;
+ min-height: 42px;
+}
+
+.winbutton-only {
+ :first-child {
+ :first-child {
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ }
+ }
+}
+
+.winbutton-only:hover {
+ :first-child {
+ :first-child {
+ background-color: shade($overlay0, 2%);
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ }
+ }
+}
+
+.winbutton-only:active {
+ :first-child {
+ :first-child {
+ background-color: tint($overlay0, 8%);
+ border: 1px solid tint($overlayedge, 10%);
+ border-top: 1px solid tint($overlayedge, 15%);
+ }
+ }
+}
+
+.winnotif-text {
+ background-color: transparent;
+ font-size: 12pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ margin: 1px;
+}
+
+.winnotif-bodytext {
+ color: #CDCDCD;
+}
+
+.winbartext {
+ background-color: transparent;
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+}
+
+.wintoggle-text {
+ background-color: transparent;
+ font-size: 10pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+}
+
+.winstarticon-true {
+ background-size: 60%;
+ background-position: center;
+ background-image: url('images/icons/win.png');
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.winstarticon-false {
+ background-size: 60%;
+ background-position: center;
+ background-image: url('images/icons/win-inactive.png');
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.winnewsicon {
+ background-size: 60%;
+ background-position: center;
+ // background-image: url('images/icons/winnews.png');
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.thewinbutton:active {
+ :first-child {
+ :first-child {
+ background-size: 50%;
+ background-image: url('images/icons/win-clicked.png');
+ }
+ }
+}
+
+.wintaskbaricon {
+ background-size: 60%;
+ background-position: center;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.wintaskbaricon-false {
+ background-size: 70%;
+ background-position: center;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.wintaskbaricon-true {
+ background-size: 70%;
+ background-position: center;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+}
+
+.wintaskbar-indicator-true {
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ margin-bottom: 4px;
+ margin-top: 43px;
+ margin-left: 16px;
+ margin-right: 16px;
+ background-color: $primary;
+}
+
+.wintaskbar-indicator-false {
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ margin-bottom: 4px;
+ margin-top: 43px;
+ margin-left: 22px;
+ margin-right: 22px;
+ background-color: #9C98A3;
+}
+
+.winbutton-only:active {
+ :first-child {
+ :first-child {
+ background-size: 50%;
+ }
+ }
+}
+
+.wintimedate {
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ border-top: 1px solid transparent;
+ padding: 0 10px;
+}
+
+.winbutton-true {
+ background-color: shade($overlay0, 2%);
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+}
+
+.winicon {
+ background-position: center;
+ min-height: 42px;
+ min-width: 30px;
+}
+
+.winwifi {
+ background-image: url('images/svg/dark/wifi.svg');
+}
+
+.winwifi1 {
+ background-image: url('images/svg/dark/wifi1.svg');
+}
+
+.winwifi2 {
+ background-image: url('images/svg/dark/wifi2.svg');
+}
+
+.winwifi3 {
+ background-image: url('images/svg/dark/wifi3.svg');
+}
+
+.winwifi4 {
+ background-image: url('images/svg/dark/wifi4.svg');
+}
+
+.winwifi-activated {
+ background-image: url('images/svg/light/wifi.svg');
+}
+
+.winwifi1-activated {
+ background-image: url('images/svg/light/wifi1.svg');
+}
+
+.winwifi2-activated {
+ background-image: url('images/svg/light/wifi2.svg');
+}
+
+.winwifi3-activated {
+ background-image: url('images/svg/light/wifi3.svg');
+}
+
+.winwifi4-activated {
+ background-image: url('images/svg/light/wifi4.svg');
+}
+
+.winbat0 {
+ background-image: url('images/svg/dark/bat0.svg');
+}
+
+.winbat1 {
+ background-image: url('images/svg/dark/bat1.svg');
+}
+
+.winbat2 {
+ background-image: url('images/svg/dark/bat2.svg');
+}
+
+.winbat3 {
+ background-image: url('images/svg/dark/bat3.svg');
+}
+
+.winbat4 {
+ background-image: url('images/svg/dark/bat4.svg');
+}
+
+.winbat5 {
+ background-image: url('images/svg/dark/bat5.svg');
+}
+
+.winbat6 {
+ background-image: url('images/svg/dark/bat6.svg');
+}
+
+.winbat7 {
+ background-image: url('images/svg/dark/bat7.svg');
+}
+
+.winbat8 {
+ background-image: url('images/svg/dark/bat8.svg');
+}
+
+.winbat9 {
+ background-image: url('images/svg/dark/bat9.svg');
+}
+
+.winbat10 {
+ background-image: url('images/svg/dark/bat10.svg');
+}
+
+.winbatcharge {
+ background-image: url('images/svg/dark/batcharge.svg');
+}
+
+.winvol0 {
+ background-image: url('images/svg/dark/vol0.svg');
+}
+
+.winvol1 {
+ background-image: url('images/svg/dark/vol1.svg');
+}
+
+.winvol2 {
+ background-image: url('images/svg/dark/vol2.svg');
+}
+
+.winvol3 {
+ background-image: url('images/svg/dark/vol3.svg');
+}
+
+.winvolmute {
+ background-image: url('images/svg/dark/volmute.svg');
+}
+
+.winbrightness {
+ background-image: url('images/svg/dark/brightness.svg');
+}
+
+.winbluetooth {
+ background-image: url('images/svg/dark/bluetooth.svg');
+}
+
+.winbluetooth-false {
+ background-image: url('images/svg/dark/bluetoothfalse.svg');
+}
+
+.winbluetooth-true {
+ background-image: url('images/svg/light/bluetoothtrue.svg');
+}
+
+.winbluetooth {
+ background-image: url('images/svg/light/bluetooth.svg');
+}
+
+.winbluetooth-false {
+ background-image: url('images/svg/dark/bluetoothfalse.svg');
+}
+
+.winbluetooth-true {
+ background-image: url('images/svg/dark/bluetoothtrue.svg');
+}
+
+.winactions-airplane {
+ background-image: url('images/svg/dark/airplane.svg');
+}
+
+.winactions-nightlight-activated {
+ background-image: url('images/svg/light/night.svg');
+}
+
+.winactions-nightlight {
+ background-image: url('images/svg/dark/brightness.svg');
+}
+
+.wincog {
+ background-image: url('images/svg/dark/cog.svg');
+}
+
+.winbell {
+ background-image: url('images/svg/dark/notif.svg');
+}
+
+.winreset {
+ background-image: url('images/svg/dark/reset.svg');
+}
+
+.winnotifsnooze {
+ background-image: url('images/svg/dark/notifsnooze.svg');
+}
+
+.winapp {
+ background-image: url('images/svg/dark/app.svg');
+}
+
+.wincaretup {
+ background-image: url('images/svg/dark/caretup.svg');
+}
+
+.wincaretdown {
+ background-image: url('images/svg/dark/caretdown.svg');
+}
+
+.winsearch-icon {
+ background-image: url('images/svg/dark/search-fluent.svg');
+}
+
+.winstart-search-searchbox-icon {
+ background-size: 100%;
+ background-position: center;
+ min-height: 21px;
+ min-width: 21px;
+ margin-left: 4px;
+ margin-right: 10px;
+}
+
+.winactions-togglerow {
+ margin: 12px;
+ margin-bottom: 0px;
+}
+
+.winactions-sliderrow {
+ margin: 0 12px;
+}
+
+.winactions-toggle {
+ background-color: shade($overlay0, 2%);
+ border-radius: 6px;
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ margin: 12px;
+ min-height: 50px;
+ min-width: 98px;
+}
+
+.winactions-toggle-true {
+ background-color: $primary;
+}
+
+.winactions-toggle-icon {
+ min-width: 21px;
+ min-height: 21px;
+ background-position: center;
+ background-repeat: no-repeat;
+ // background-size: auto 45%;
+}
+
+.winactions-toggle-icon:hover {
+ background-color: $hover0;
+}
+
+.winactions-toggle-icon:active {
+ background-color: tint($hover0, 10%);
+}
+
+.winactions-toggle-icon-center {
+ border-radius: 6px;
+}
+
+.winactions-toggle-icon-left {
+ min-width: 21px;
+ min-height: 21px;
+ background-position: center;
+ background-repeat: no-repeat;
+ // background-size: auto 45%;
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+ border-right: 1px solid tint($overlayedge, 5%);
+}
+
+.winactions-toggle-icon-right {
+ min-width: 21px;
+ min-height: 21px;
+ background-position: center;
+ background-repeat: no-repeat;
+ // background-size: auto 45%;
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+ border-right: 1px solid tint($overlayedge, 5%);
+}
+
+.winactions-toggle-icon-left:hover {
+ background-color: $hover0;
+}
+
+.winactions-toggle-icon-right:hover {
+ background-color: $hover0;
+}
+
+.winactions-toggle-icon-left:active {
+ background-color: tint($hover0, 10%);
+}
+
+.winactions-toggle-icon-right:active {
+ background-color: tint($hover0, 10%)
+}
+
+.winactions-toggle-arrow {
+ background-image: url('images/svg/dark/rightarrow.svg');
+ background-position: center;
+ background-repeat: no-repeat;
+ // background-size: 40%;
+}
+
+.winactions-toggle-arrow-activated {
+ background-image: url('images/svg/light/rightarrow.svg');
+ background-position: center;
+ background-repeat: no-repeat;
+ // background-size: 40%;
+}
+
+.winactions-element {
+ margin: 12px;
+}
+
+.winslider {
+ border-radius: 9999px;
+ transition: 0ms cubic-bezier(0.05, 0.7, 0.1, 1);
+
+ trough {
+ border-radius: 9999px;
+ background-color: #A69999;
+ min-height: 4px;
+ transition: 0ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ }
+
+ highlight {
+ border-radius: 9999px;
+ background-color: $primary;
+ background-image: linear-gradient(45deg, $primary 0%, $primary 100%);
+ transition: 0ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ }
+
+ slider {
+ border-radius: 9999px;
+ border: 5px solid #454545;
+ min-height: 11px;
+ min-width: 11px;
+ background-color: $primary;
+ margin: -8px;
+ transition: 0ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ }
+
+ slider:hover {
+ border-radius: 9999px;
+ border: 4px solid #454545;
+ min-height: 13px;
+ min-width: 13px;
+ background-color: $primary;
+ margin: -8px;
+ }
+
+ slider:active {
+ border-radius: 9999px;
+ border: 6px solid #454545;
+ min-height: 9px;
+ min-width: 9px;
+ background-color: $primary;
+ margin: -8px;
+ }
+
+ // slider:focus {
+ // background-color: $primary;
+ // }
+}
+
+.winslider-winactions {
+ margin: 0 9px;
+
+ trough {
+ min-width: 287px;
+ }
+}
+
+.winnotif-badge {
+ border-radius: 9999px;
+ min-width: 20px;
+ min-height: 20px;
+ background-color: $primary;
+ color: #000000;
+ margin-left: 10px;
+}
+
+.winnotif-notif {
+ background-color: rgba(75, 75, 75, 0.25);
+ border-radius: 6px;
+ border: 1px solid rgba(30, 30, 30, 0.5);
+ margin: 4px;
+ padding: 13px;
+}
+
+.winnotif-notif-icon {
+ background-position: center center;
+ min-height: 20px;
+ min-width: 20px;
+ margin: 8px;
+}
+
+.winnotif-appname {
+ margin: 8px;
+ background-color: transparent;
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+}
+
+.winnotif-title {
+ margin: 17px;
+}
+
+.winnotif-button {
+ background-size: 50% auto;
+ background-color: rgba(75, 75, 75, 0.25);
+ background-position: center;
+ border-radius: 6px;
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ margin: 12px 3px;
+ padding: 6px;
+ min-width: 20px;
+ min-height: 20px;
+}
+
+.winnotif-button:hover {
+ background-color: rgba(95, 95, 95, 0.4);
+}
+
+.winnotif-button:active {
+ background-color: tint(rgba(95, 95, 95, 0.4), 20%);
+}
+
+.wincalendar-title {
+ border-radius: 9999px;
+ font-size: 12pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ margin: 1px;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.wincalendar-button {
+ border-radius: 9999px;
+ font-size: 12pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ margin: 1px;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.wincalendar-text {
+ border-radius: 9999px;
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ min-height: 44px;
+ min-width: 44px;
+ margin: 3px;
+}
+
+.day-1 {
+ background-color: transparent;
+ color: #7C7C7C;
+}
+
+.day0 {
+ background-color: transparent;
+ color: white;
+}
+
+.day-1:hover {
+ background-color: rgba(75, 75, 75, 0.5);
+}
+
+.day0:hover {
+ background-color: rgba(75, 75, 75, 0.5);
+}
+
+.day-1:active {
+ background-color: tint(rgba(75, 75, 75, 0.5), 10%);
+}
+
+.day0:active {
+ background-color: tint(rgba(75, 75, 75, 0.5), 10%);
+}
+
+.day1 {
+ background-color: $primary;
+ color: #000000;
+}
+
+.day1:hover {
+ background-color: tint($primary, 10%);
+}
+
+.day1:active {
+ background-color: tint($primary, 20%);
+}
+
+.winarrow-up {
+ background-image: url('images/svg/dark/uparrow.svg');
+}
+
+.winarrow-down {
+ background-image: url('images/svg/dark/downarrow.svg');
+}
+
+.winactions-bottom-button {
+ background-color: transparent;
+ border-radius: 6px;
+ // border: 1px solid transparent;
+ // border-top: 1px solid transparent;
+ min-width: 42px;
+ min-height: 42px;
+}
+
+.winactions-bottom-button:hover {
+ background-color: rgba(75, 75, 75, 0.5);
+}
+
+.winactions-bottom-button:active {
+ background-color: tint(rgba(75, 75, 75, 0.5), 10%);
+}
+
+.winnotif-calendar {
+ background: rgba(40, 40, 40, 0.6);
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-bottom: 0px solid transparent;
+ border-top: 1px solid rgba(30, 30, 30, 0.5);
+ margin: 0px 12px;
+}
+
+.winnotif-monthbutton {
+ // background-size: 80% auto;
+ background-color: transparent;
+ background-position: center;
+ border-radius: 6px;
+ margin: 12px 3px;
+ padding: 6px;
+ min-width: 20px;
+ min-height: 20px;
+}
+
+.winnotif-monthbutton:hover {
+ background-color: rgba(95, 95, 95, 0.4);
+}
+
+.winnotif-monthbutton:active {
+ background-color: tint(rgba(95, 95, 95, 0.4), 10%);
+}
+
+.winstart-search-contents {
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ background-color: transparent;
+ border-radius: 6px;
+ border: 0px solid transparent;
+ padding: 11px;
+ margin: 34px;
+ margin-left: 69px;
+
+ selection {
+ background-color: tint($primary, 50%);
+ color: #1e1e1e;
+ }
+}
+
+.winstart-search-accent {
+ min-height: 2px;
+ background-color: $primary;
+ border-bottom-left-radius: 99px;
+ border-bottom-right-radius: 99px;
+ margin: 34px 36px;
+ margin-bottom: 34px;
+}
+
+.winstart-search-prompt {
+ background-color: rgba(34, 32, 39, 0.5);
+ border-radius: 6px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ padding: 11px;
+ margin: 34px;
+}
+
+.winstart-search-prompt-text {
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ color: #CCCCCC;
+}
+
+.winstart-button-allapps {
+ background-color: rgba(75, 75, 75, 0.25);
+ border-radius: 6px;
+ border: 1px solid $overlayedge;
+ border-top: 1px solid tint($overlayedge, 5%);
+ padding: 6px;
+ min-width: 20px;
+ min-height: 20px;
+}
+
+.winstart-button-allapps:hover {
+ background-color: rgba(95, 95, 95, 0.4);
+}
+
+.winstart-button-allapps:active {
+ background-color: tint(rgba(95, 95, 95, 0.4), 20%);
+}
+
+.winstart-allapps-arrow {
+ background-image: url('images/svg/dark/rightarrow.svg');
+ background-position: center;
+ background-repeat: no-repeat;
+ min-width: 15px;
+ min-width: 15px;
+ margin-left: 8px;
+ background-size: 90%;
+}
+
+.winstart-allapps-icon {
+ font-family: 'Material Symbols Rounded';
+ font-size: 13pt;
+ font-weight: 300;
+}
+
+.winstart-section {
+ background-color: transparent;
+ font-size: 11.4pt;
+ font-family: 'Cantarell';
+ font-weight: 700;
+}
+
+.winstart-pinnedapps {
+ margin: 12px 34px;
+}
+
+.winsearch-section-box {
+ margin: 0 72px;
+ margin-bottom: 12px;
+}
+
+.winstart-pinnedapps-entry-pad {
+ padding-top: 11px;
+}
+
+.winstart-pinnedapps-entry {
+ min-width: 101px;
+ min-height: 88px;
+ border-radius: 6px;
+}
+
+.winstart-pinnedapps-entry:hover {
+ background-color: rgba(49, 49, 49, 0.45);
+}
+
+.winstart-pinnedapps-icon {
+ min-width: 33px;
+ min-height: 33px;
+}
+
+.winstart-recommended {
+ margin: 0px 60px;
+ margin-bottom: 33px;
+}
+
+.winstart-recommended-entry {
+ // min-width: 285.67px;
+ min-height: 59px;
+ border-radius: 6px;
+}
+
+.winstart-recommended-entry:hover {
+ background-color: rgba(49, 49, 49, 0.45);
+}
+
+.winstart-recommended-entry-pad {
+ min-width: 266.67px;
+ min-height: 59px;
+ border-radius: 6px;
+}
+
+.winstart-recommended-icon {
+ min-width: 33px;
+ min-height: 33px;
+ margin: 13px;
+}
+
+.winstart-recommended-text {
+ margin: 13px 0px;
+}
+
+.winstart-recommended-name {
+ color: white;
+}
+
+.winstart-recommended-subtext {
+ color: #C1C1C1;
+}
+
+.winstart-user {
+ border-radius: 6px;
+ padding: 5px 16px;
+ margin: 14px;
+}
+
+.winstart-user:hover {
+ background-color: rgba(49, 49, 49, 0.7);
+}
+
+.winstart-user-icon {
+ min-width: 33px;
+ min-height: 33px;
+ border-radius: 9999px;
+ background: white;
+ background-image: url('images/svg/light/user.svg');
+ background-position: center;
+ background-repeat: no-repeat;
+}
+
+.winstart-power-icon {
+ background-size: 53%;
+ // background-image: url('images/svg/dark/power.svg');
+ background-position: center;
+ background-repeat: no-repeat;
+ min-width: 43px;
+ min-height: 43px;
+ border-radius: 6px;
+ margin: 14px;
+}
+
+.winstart-power-icon-true {
+ background-color: rgba(49, 49, 49, 0.7);
+}
+
+.winstart-power-icon:hover {
+ background-color: rgba(49, 49, 49, 0.7);
+}
+
+.winstart-allapps-box {
+ padding: 0 55px;
+}
+
+.winstart-allapps-app-pad {
+ padding-top: 11px;
+}
+
+.winstart-allapps-app {
+ border-radius: 6px;
+ min-height: 42px;
+ min-width: 564px;
+}
+
+.winstart-allapps-app:hover {
+ background-color: rgba(49, 49, 49, 0.45);
+}
+
+.winstart-allapps-app-icon {
+ margin: 8px;
+}
+
+.winstart-allapps-appname {
+ margin-left: 15px;
+}
+
+.winsearch-pad {
+ margin-left: 34px;
+ margin-right: 34px;
+}
+
+.winsearch-actions-box {
+ background-color: rgba(73, 73, 73, 0.25);
+ border-radius: 12px;
+}
+
+.winsearch-tag-strip {
+ min-height: 34px;
+ margin: 0 34px;
+ margin-bottom: 3px;
+}
+
+.winsearch-tag {
+ background-color: rgba(73, 73, 73, 0.25);
+ border-radius: 9999px;
+ padding: 10px 15px;
+ margin: 0 3px;
+}
+
+.winsearch-tag-false {
+ background-color: rgba(73, 73, 73, 0.25);
+ border-radius: 9999px;
+ padding: 10px 15px;
+ margin: 0 3px;
+}
+
+.winsearch-tag-true {
+ background-color: $primary;
+ color: $onPrimary;
+ border-radius: 9999px;
+ padding: 10px 15px;
+ margin: 0 3px;
+}
+
+.winsearch-result {
+ border-radius: 6px;
+ margin: 2px;
+ min-height: 42px;
+ padding: 0 12px;
+ padding-left: 57px;
+ caret-color: transparent;
+
+ border-left: 3px solid transparent;
+ // border-top: 2px solid transparent;
+ // border-bottom: 2px solid transparent;
+
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+
+ selection {
+ background-color: transparent;
+ }
+
+ background-position: -0.5% center;
+ background-size: auto 65%;
+ background-image: url('images/svg/linetransparent.svg');
+}
+
+.winsearch-result:focus {
+ background-color: rgba(73, 73, 73, 0.25);
+ background-position: -0.5% center;
+ background-size: auto 65%;
+ background-image: url('images/svg/linevertical.svg');
+
+ // border-left: 3px solid $primary;
+ // border-top: 2px solid transparent;
+ // border-bottom: 2px solid transparent;
+}
+
+.winsearch-result-icon {
+ margin-left: 13px;
+}
+
+.winsearch-result-icon-big {
+ margin-top: 34px;
+ margin-bottom: 14px;
+}
+
+.winsearch-section {
+ min-height: 38px;
+ margin-left: 13px;
+}
+
+.winsearch-result-actions-title {
+ font-size: 13pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ color: white;
+}
+
+.winsearch-result-actions-subtext {
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ color: #8E8D8F;
+ margin-bottom: 8px;
+}
+
+.winsearch-separator {
+ min-height: 3px;
+ background-color: rgba(73, 73, 73, 0.25);
+ border: 1px rgba(73, 73, 73, 0.4);
+ margin: 21px 17px;
+}
+
+.winsearch-actions-icon {
+ margin-left: 13px;
+}
+
+.winsearch-actions-button {
+ border-radius: 6px;
+ min-height: 34px;
+ margin: 0 17px;
+}
+
+.winsearch-actions-button:hover {
+ background-color: rgba(108, 108, 108, 0.25);
+}
+
+.winsearch-actions-button:focus {
+ background-color: rgba(108, 108, 108, 0.25);
+}
+
+.winsearch-actions-button:active {
+ background-color: tint(rgba(108, 108, 108, 0.25), 5%);
+}
+
+.winosd-window {
+ margin: 5px;
+ border-radius: 12px;
+ min-width: 10px;
+ min-height: 40px;
+}
+
+.winosd-var-shape {
+ padding: 7px;
+ min-width: 100px;
+ min-height: 37px;
+ border-radius: 12px;
+ margin: 12px;
+}
+
+.winosd-var {
+ padding: 7px;
+ min-width: 100px;
+ min-height: 37px;
+ background: rgba(45, 46, 48, 0.8);
+ background-image: url('images/textures/acrylic.png');
+ border-radius: 15px;
+ // border: 1px solid rgba(60, 60, 60, 0.4);
+ // border-top: 1px solid rgba(64, 64, 64, 0.5);
+ border: 1px solid rgba(34, 35, 38, 0.5);
+ margin: 14px;
+}
+
+.winslider-osd {
+ border-radius: 9999px;
+ margin: 0 9px;
+ transition: 0ms cubic-bezier(0.05, 0.7, 0.1, 1);
+
+ trough {
+ border-radius: 9999px;
+ background-color: #A69999;
+ min-height: 4px;
+ min-width: 116px;
+ transition: 0ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ }
+
+ highlight {
+ border-radius: 9999px;
+ background-color: $primary;
+ background-image: linear-gradient(45deg, $primary 0%, $primary 100%);
+ transition: 0ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ }
+}
+
+.win-segoeicon {
+ font-family: 'Segoe Fluent Icons';
+ font-weight: bold;
+}
+
+.winpower-window {
+ padding: 5px;
+}
+
+.winpower-buttonicon {
+ padding: 10px;
+ min-width: 20px;
+ min-height: 20px;
+}
+
+.winpower-button {
+ background-color: transparent;
+ border-radius: 6px;
+ // border: 1px solid transparent;
+ // border-top: 1px solid transparent;
+ min-width: 42px;
+ min-height: 42px;
+ // margin: 0 5px;
+}
+
+.winpower-button:hover {
+ background-color: rgba(75, 75, 75, 0.5);
+}
+
+.winpower-button:active {
+ background-color: tint(rgba(75, 75, 75, 0.5), 10%);
+}
+
+.wingamebar-overlay {
+ // background-color: rgba(25, 25, 25, 0.1);
+}
+
+.wingamebar-window {
+ background: #252525;
+ border-radius: 10px;
+ border: 1px solid $overlay0;
+ transition: 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
+}
+
+.wingamebar-titlebar {
+ background: #1C1C1C;
+ border-top-left-radius: 8px;
+ border-top-right-radius: 8px;
+ border: 2px $overlay0;
+ padding: 10px;
+}
+
+.wingamebar-icon {
+ font-family: 'Segoe Fluent Icons';
+ font-size: 10pt;
+ font-weight: bold;
+}
+
+.wingamebar-text {
+ font-family: 'Bahnschrift';
+ font-size: 12pt;
+ font-weight: 500;
+}
+
+.wingamebar-text-small {
+ font-size: 10pt;
+}
+
+.wingamebar-text-clock {
+ font-size: 17pt;
+ margin: 17px;
+}
+
+.wingamebar-text-bigmetric {
+ font-size: 25pt;
+}
+
+.wingamebar-content {
+ padding: 8px 17px;
+}
+
+.wingamebar-capture {
+ padding: 17px;
+}
+
+.wingamebar-capture-button {
+ min-width: 59px;
+ min-height: 59px;
+ background: #3A3A3A;
+ border-radius: 9999px;
+}
+
+.wingamebar-capture-button-unavailable {
+ min-width: 59px;
+ min-height: 59px;
+ background: #282828;
+ border-radius: 9999px;
+}
+
+.wingamebar-subtext {
+ color: #A8A8A8;
+}
+
+.wingamebar-capture-bottom {
+ border-top: 1px solid #373737;
+ padding: 8px 17px;
+ color: #DEDEDE;
+}
+
+.wingamebar-button-pad:hover {
+ :first-child {
+ background-color: $overlay0;
+ }
+}
+
+.wingamebar-button:hover {
+ background-color: $overlay0;
+}
+
+.wingamebar-capture-bottom {
+ border-bottom-left-radius: 8px;
+ border-bottom-right-radius: 8px;
+}
+
+.wingamebar-navbar {
+ min-height: 35px;
+ border-bottom: 2px solid #333333;
+ padding: 0 17px;
+}
+
+.wingamebar-navbar-button {
+ min-height: 35px;
+ min-width: 75px;
+ margin-bottom: -2px;
+ background-image: url('images/svg/dark/linehorizontal.svg');
+ background-position: bottom;
+ background-size: 100% auto;
+}
+
+.wingamebar-audio-sys {
+ padding: 17px;
+ border-bottom: 2px solid #333333;
+}
+
+.winslider-gamebar-sys {
+ margin: 0 5px;
+
+ trough {
+ min-width: 260px;
+ }
+}
+
+.winslider-gamebar-app {
+
+ // margin: 0 5px;
+ trough {
+ min-width: 205px;
+ margin: 0 3px;
+ }
+}
+
+.wingamebar-audio-appicon {
+ margin-left: 17px;
+ margin-bottom: 5px;
+}
+
+.wingamebar-control-button {
+ min-width: 59px;
+ min-height: 59px;
+ border-radius: 6px;
+ margin: 5px;
+}
+
+.wingamebar-control-button:hover {
+ background-color: $hover0;
+}
+
+.wingamebar-control-button-active {
+ min-width: 59px;
+ min-height: 59px;
+ border-radius: 6px;
+ margin: 5px;
+ background-size: auto 4%;
+ background-position: 0% 93%;
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0) 21%, $primary 21%, $primary 79%, rgba(0, 0, 0, 0) 79%, rgba(0, 0, 0, 0) 100%);
+}
+
+.wingamebar-control-button-active:hover {
+ background-color: $hover0;
+}
+
+.wingamebar-control-sidesection-left {
+ background-color: #1C1C1C;
+ min-height: 68px;
+ min-width: 68px;
+ border-top-left-radius: 10px;
+ border-bottom-left-radius: 10px;
+}
+
+.wingamebar-control-sidesection-right {
+ background-color: #1C1C1C;
+ min-height: 68px;
+ min-width: 68px;
+ border-top-right-radius: 10px;
+ border-bottom-right-radius: 10px;
+}
+
+.wingamebar-control-button {
+ font-size: 15pt;
+}
+
+.wingamebar-performance-metricscolumn {
+ min-width: 100px;
+}
+
+.wingamebar-performance-metric-false {
+ min-height: 25px;
+ padding: 0 17px;
+}
+
+.wingamebar-performance-metric-true {
+ min-height: 25px;
+ background-color: #3C3C3C;
+ padding: 0 17px;
+}
+
+.wingamebar-performance-grapharea {
+ border-bottom-right-radius: 10px;
+}
+
+.wingamebar-performance-graphpad {
+ padding: 17px;
+}
+
+.wingamebar-performance-graph-graphpad {
+ padding-top: 37px;
+ padding-bottom: 37px;
+ padding-left: 17px;
+ padding-right: 17px;
+}
+
+.wingamebar-graph {
+ color: $primary;
+}
+
+.winnews-topbar {
+ margin: 25px;
+ margin-bottom: 13px;
+}
+
+.winnews-user {
+ border-radius: 9999px;
+}
+
+.winnews-user:hover {
+ background-color: rgba(49, 49, 49, 0.7);
+}
+
+.winnews-clock {
+ font-family: 'Cantarell';
+ font-size: 12pt;
+ font-weight: 500;
+ font-size: 16pt;
+ margin-right: 20px;
+}
+
+.winnews-search-prompt {
+ background-color: rgba(34, 32, 39, 0.5);
+ border-radius: 9999px;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ padding: 5px;
+}
+
+.winnews-search-prompt-text {
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ color: #CCCCCC;
+}
+
+.winnews-search-contents {
+ font-size: 11pt;
+ font-family: 'Cantarell';
+ font-weight: 500;
+ background-color: transparent;
+ border-radius: 6px;
+ border: 0px solid transparent;
+ // padding: 11px;
+ // margin: 34px;
+ margin-left: 37px;
+
+ selection {
+ background-color: tint($primary, 50%);
+ color: #1e1e1e;
+ }
+}
+
+.winnews-widgets {
+ margin: 0 46px;
+ margin-top: 4px;
+}
+
+.winnews-section-icon {
+ color: $onSecondaryContainer;
+ font-family: 'Material Symbols Rounded';
+ font-size: 20pt;
+ min-width: 42px;
+ min-height: 42px;
+ border-radius: 6px;
+ margin: 5px;
+}
+
+.winnews-widget {
+ border-radius: 12px;
+ background-color: $onSecondary;
+}
+
+.winnews-section {
+ color: $onSecondaryContainer;
+ font-family: 'Cantarell';
+ font-size: 15pt;
+ font-weight: bold;
+ margin: 5px;
+}
+
+.winnews-text {
+ margin: 5px 0px;
+ background-repeat: no-repeat;
+ color: $onBackground;
+ font-family: 'Cantarell';
+ font-size: 12pt;
+}
+
+.winnews-option {
+ padding: 0 17px;
+}
+
+.winslider-winnews {
+ margin: 0 5px;
+ min-height: 21px;
+
+ trough {
+ min-width: 260px;
+ }
+}
+
+.win-checkbox-0 {
+ margin: 5px 0px;
+ border-radius: 9999px;
+ min-width: 26px;
+ min-height: 26px;
+ background: url('images/svg/checkbox_no.svg');
+ background-repeat: no-repeat;
+ color: transparent;
+}
+
+.win-checkbox-1 {
+ margin: 5px 0px;
+ border-radius: 9999px;
+ min-width: 26px;
+ min-height: 26px;
+ background: url('images/svg/checkbox.svg');
+ background-repeat: no-repeat;
+ color: transparent;
+}
+
+.winnews-fetch-pad {
+ padding: 0 17px;
+ padding-left: 15px;
+}
+
+.winnews-fetch-icon {
+ color: $primary;
+ font-size: 16pt;
+ font-family: Material Symbols Rounded;
+}
+.winnews-fetch {
+ font-size: 15pt;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/eww.scss b/hybrid-summer/.config/eww/eww.scss
new file mode 100755
index 000000000..f261a835c
--- /dev/null
+++ b/hybrid-summer/.config/eww/eww.scss
@@ -0,0 +1,646 @@
+@import 'css/colors';
+@import 'css/colorscheme';
+@import 'css/material';
+@import 'images/svg/color.scss';
+
+@function tint($color, $percentage) {
+ @return mix(rgb(245, 250, 255), $color, $percentage);
+}
+
+@function shade($color, $percentage) {
+ @return mix(rgb(0, 7, 18), $color, $percentage);
+}
+
+$battcolor: $color6;
+$memcolor: $color5;
+$cpucolor: $color4;
+$border: $color7;
+$surface0: tint($colorbg, 10%);
+$bg1: $surface0;
+
+//thanks flick0!
+@keyframes gradient {
+ 0% {
+ background-position: 0% 50%;
+ }
+
+ 50% {
+ background-position: 100% 50%;
+ }
+
+ 100% {
+ background-position: 0% 50%;
+ }
+}
+
+//also thanks to him
+@keyframes blink {
+ to {
+ background-color: #f9e2af;
+ color: #96804e;
+ }
+}
+
+@keyframes ripple {
+ to {
+ background-size: 1000% 1000%;
+ }
+}
+
+@keyframes flyin-bottom {
+ from {
+ margin-bottom: -55px;
+ margin-top: 55px;
+ }
+
+ to {
+ margin-bottom: 0px;
+ margin-top: 0px;
+ }
+}
+
+@keyframes flyin-top {
+ from {
+ margin-bottom: 55px;
+ margin-top: -55px;
+ }
+
+ to {
+ margin-bottom: 0px;
+ margin-top: 0px;
+ }
+}
+
+@mixin rounding {
+ border-radius: 10px;
+}
+
+@mixin filter {
+ saturate {
+ filter: saturate(3);
+ }
+
+ grayscale {
+ filter: grayscale(100%);
+ }
+
+ contrast {
+ filter: contrast(160%);
+ }
+
+ brightness {
+ filter: brightness(0.25);
+ }
+
+ blur {
+ filter: blur(3px);
+ }
+
+ invert {
+ filter: invert(100%);
+ }
+
+ .sepia {
+ filter: sepia(100%);
+ }
+
+ huerotate {
+ filter: hue-rotate(180deg);
+ }
+
+ rss.opacity {
+ filter: opacity(50%);
+ }
+}
+
+@mixin window {
+ border: 3px solid $primary;
+ // box-shadow: 0 2px 3px $shadow;
+ margin: 5px 5px 10px;
+ @include rounding;
+}
+
+* {
+ all: unset;
+ transition: 200ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ // font-family: 'Rubik', 'Material Symbols Rounded';
+ background-repeat: no-repeat;
+}
+
+.scale slider {
+ transition: all 75ms cubic-bezier(0, 0, 0.2, 1);
+}
+
+.progress slider {
+ transition: all 75ms cubic-bezier(0, 0, 0.2, 1);
+}
+
+.music-ctl-revealer {
+ font-family: Material Symbols Rounded;
+}
+
+@import 'css/bottombar';
+@import 'css/bgdecor';
+@import 'css/calendar';
+@import 'css/dashboard';
+@import 'css/dashfs';
+@import 'css/editmode';
+@import 'css/music';
+@import 'css/notification';
+@import 'css/overview';
+@import 'css/osd';
+@import 'css/osettings';
+@import 'css/sidebar';
+@import 'css/system';
+@import 'css/themer';
+@import 'css/taskbar';
+@import 'css/volume';
+@import 'css/winctl';
+@import 'css/winstuff';
+
+.module-group {
+ // background-color: $colorbg;
+ min-height: 53px;
+ color: $fg;
+ border-bottom-right-radius: 26px;
+ border-bottom-left-radius: 26px;
+}
+
+.bar-bg-only {
+ margin-top: 8px;
+ margin-bottom: 8px;
+ margin-right: -1911px;
+ margin-left: 8px;
+ border-radius: 26px;
+ background-color: shade($colorbg, 75%); //because dark background makes colors pop
+ background-image: linear-gradient(135deg, shade($onTertiary, 47%) 18%, rgba(0, 0, 0, 0) 18%, rgba(0, 0, 0, 0) 37%, shade($onTertiary, 47%) 37%, shade($onTertiary, 47%) 63%, rgba(0, 0, 0, 0) 63%, rgba(0, 0, 0, 0) 85%, shade($onTertiary, 47%) 85%);
+}
+
+.bar-bg-only-compact {
+ margin-right: -1920px;
+ background-color: shade($colorbg, 75%); //because dark background makes colors pop
+ background-image: linear-gradient(135deg, shade($onTertiary, 47%) 18%, rgba(0, 0, 0, 0) 18%, rgba(0, 0, 0, 0) 37%, shade($onTertiary, 47%) 37%, shade($onTertiary, 47%) 63%, rgba(0, 0, 0, 0) 63%, rgba(0, 0, 0, 0) 85%, shade($onTertiary, 47%) 85%);
+}
+
+.bar-normal {
+ // margin: 8px;
+ // border-radius: 26px;
+ // background-color: shade($colorbg, 75%); //because dark background makes colors pop
+ min-height: 53px;
+ color: $fg;
+ border-bottom-right-radius: 26px;
+ border-bottom-left-radius: 26px;
+
+ // background-image: linear-gradient(to right,
+ // rgba(0, 0, 0, 0) 0%,
+ // rgba(0, 0, 0, 0) 4.322916667%,
+ // shade($colorbg, 75%) 4.322916667%,
+ // shade($colorbg, 75%) 96.82291667%,
+ // rgba(0, 0, 0, 0) 96.82291667%,
+ // rgba(0, 0, 0, 0) 100%,
+ // );
+
+ label {
+ font-size: 1.2rem;
+ }
+
+ font-family: 'Rubik';
+ // animation-name: flyin-top;
+ // animation-duration: 350ms;
+ // animation-timing-function: cubic-bezier(0.05, 0.7, 0.1, 1);
+ // animation-iteration-count: 1;
+}
+
+.bar-compact {
+ background-color: shade($colorbg, 70%); //because dark background makes colors pop
+ border-bottom: 1px solid $primary;
+ min-height: 53px;
+ color: $fg;
+
+ label {
+ font-size: 1.2rem;
+ }
+
+ font-family: 'Rubik';
+}
+
+tooltip {
+ background: $colorbarbg;
+ border: 1px solid rgba(60, 60, 60, 0.4);
+ border-radius: 8px;
+ color: white;
+
+ label {
+ font-family: 'Cantarell';
+ font-size: 13pt;
+ }
+}
+
+.music-module {
+ font-family: Material Symbols Rounded;
+}
+
+.icon {
+ font-family: Material Symbols Rounded;
+ // padding-left: 4px;
+ // padding-right: 4px;
+}
+
+.module {
+ font-family: Material Symbols Rounded;
+ min-height: 53px;
+}
+
+.module-timedate {
+ padding-left: 13px;
+ padding-right: 13px;
+}
+
+.hour {
+ // font-weight: bold;
+ // padding-left: 13px;
+ color: $colorbar;
+ font-size: 20pt;
+}
+
+.clock {
+ color: $color2;
+ font-family: 'Rubik';
+ font-size: 19pt;
+}
+
+// .clock-module:hover {
+// border-top: 2px solid $color5;
+// }
+
+.minute {
+ color: $color2;
+ font-family: 'Rubik', 'Material Symbols Rounded';
+}
+
+.timedate-time {
+ label {
+ font-size: 16pt;
+ }
+}
+
+.date {
+ font-family: 'Rubik', 'Material Symbols Rounded';
+ color: $color2;
+
+ // margin-top: -2px;
+ label {
+ font-size: 12pt;
+ }
+}
+
+.bright-icon {
+ color: $color2;
+ padding-right: 4px;
+ padding-top: 4px;
+}
+
+// .bright-icon:hover {
+// border-top: 2px solid;
+// }
+
+.module-bt {
+ font-size: 1.2rem;
+}
+
+.workspaces {
+ // margin-left: 10px;
+ background-color: transparent;
+}
+
+.player-controls {
+ font-family: Material Symbols Rounded;
+}
+
+.volume-icon {
+ padding-left: 3px;
+ padding-right: 3px;
+}
+
+.net-icon {
+ color: $color7;
+ font-family: Material Symbols Rounded;
+ padding-left: 4px;
+ padding-right: 4px;
+ padding-top: 4px;
+}
+
+// .net-icon:hover {
+// border-top: 2px solid;
+// }
+
+.my-separator {
+ padding-left: 15px;
+ padding-right: 15px;
+ color: $onBackground;
+ min-height: 53px;
+}
+
+.ws {
+ font-size: 6rem;
+ transition: 75ms cubic-bezier(0.05, 0.9, 0.1, 1); //Hyprland, no overshot
+ // transition: 400ms cubic-bezier(0.2, 0.0, 0, 1.0); //Material 3
+}
+
+.ws-top {
+ // padding-top: 9px;
+}
+
+.ws-active-top {
+
+}
+
+.ws-text {
+ font-size: 16pt;
+ font-family: Rubik;
+ border-radius: 9999px;
+ // padding-left: 3px;
+ // padding-right: 3px;
+ min-width: 27px;
+ min-height: 27px;
+ color: $colorbarbg;
+ margin-top: 13px;
+ margin-bottom: 13px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+.ws-text-top {
+ // font-size: 16pt;
+ // font-family: Rubik;
+ border-radius: 9999px;
+ // padding-left: 3px;
+ // padding-right: 3px;
+ min-width: 27px;
+ min-height: 5px;
+ color: $colorbarbg;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+.ws-text-active {
+ background-color: $colorbar;
+}
+
+.ws:hover {
+ :first-child {
+ color: $tertiary;
+ }
+}
+
+.ws-active {
+ background-color: $onBackground;
+}
+
+.ws-inactive {
+ // background-color: tint($colorbg, 37%);
+ background-color: rgba(194, 192, 192, 0.7);
+}
+
+.ws-empty {
+ // background-color: tint($colorbg, 10%);
+ background-color: rgba(146, 145, 145, 0.3);
+}
+
+.activewin {
+ color: $colorbar;
+ // padding-left: 8px;
+ // padding-right: 8px;
+}
+
+// .themer-get {
+// padding-top: 4px;
+// padding-left: 10px;
+// padding-right: 10px;
+// background-image: url("images/grayscale/Add.png");
+// background-repeat: no-repeat;
+// background-position: center;
+// background-size: 100%;
+// }
+
+// .themer-restore {
+// padding-top: 7px;
+// padding-left: 10px;
+// padding-right: 10px;
+// padding-bottom: 16px;
+// background-image: url("images/grayscale/Backup.png");
+// background-repeat: no-repeat;
+// background-position: center;
+// background-size: 100%;
+// }
+
+
+.icon,
+.icon,
+.icon-text,
+.vol-icon label {
+ font-family: "Material Symbols Rounded";
+}
+
+.username {
+ color: $onBackground;
+}
+
+.userpic {
+ margin: 5px;
+ min-height: 42px;
+ min-width: 42px;
+ background-size: 100%;
+ border-radius: 5px;
+ background-repeat: no-repeat;
+}
+
+.osettings-toggle-button-false {
+ :first-child {
+ :first-child {
+ padding: 0px 11px;
+ min-width: 53px;
+ min-height: 53px;
+ background-color: transparent;
+ // background-image: url('images/svg/settings.svg');
+ background-size: 400% auto;
+ background-repeat: no-repeat;
+ background-image: linear-gradient(45deg, rgba(0, 0, 0, 0) 60%, tint($overlay0, 10%) 60%);
+ border-radius: 26px;
+
+ :active {
+ background-color: $overlay0;
+ background-position: 90% 50%;
+ }
+ }
+ }
+}
+
+.osettings-toggle-button-false:hover {
+ :first-child {
+ :first-child {
+ background-color: $overlay0;
+ background-position: 60% 50%;
+ }
+ }
+}
+
+.osettings-toggle-button-true {
+ :first-child {
+ :first-child {
+ padding: 0px 11px;
+ min-width: 53px;
+ min-height: 53px;
+ background-color: $overlay0;
+ background-position: 90% 50%;
+ background-repeat: no-repeat;
+ background-image: linear-gradient(45deg, rgba(0, 0, 0, 0) 60%, tint($overlay0, 10%) 60%);
+ background-size: 400% auto;
+ border-radius: 26px;
+ }
+ }
+}
+
+.module-button-pad {
+ margin: 8px 0;
+ border-radius: 26px;
+ // background-color: shade($colorbg, 75%);
+}
+
+.module-button-pad-left {
+ margin: 8px 0;
+ margin-left: 8px;
+ // background-color: shade($colorbg, 75%);
+ border-top-left-radius: 26px;
+ border-bottom-left-radius: 26px;
+}
+
+.module-button-pad-center {
+ margin: 8px 0;
+ // background-color: shade($colorbg, 75%);
+}
+
+.module-button-pad-right {
+ margin: 8px 0;
+ margin-right: 8px;
+ // background-color: shade($colorbg, 75%);
+ border-bottom-right-radius: 26px;
+ border-top-right-radius: 26px;
+}
+
+.module-button-pad-right-nomargin {
+ // background-color: shade($colorbg, 75%);
+ border-bottom-right-radius: 26px;
+ border-top-right-radius: 26px;
+}
+
+.onotify-toggle-button-false {
+ min-width: 53px;
+ min-height: 53px;
+ background-color: transparent;
+ background-repeat: no-repeat;
+ background-size: auto 65%;
+ background-position: center;
+
+ :hover {
+ background-color: $overlay0;
+ // background-image: url('./images/lazer_icons/notifications_hover.png');
+ }
+
+ border-radius: 26px;
+}
+
+.onotify-toggle-button-true {
+ min-width: 53px;
+ min-height: 53px;
+ background-color: $overlay0;
+ // background-image: url('./images/lazer_icons/notifications_hover.png');
+ background-repeat: no-repeat;
+ background-size: auto 65%;
+ background-position: center;
+}
+
+.real-onotify-toggle-button {
+ min-width: 53px;
+ min-height: 53px;
+ // background-image: url('./images/svg/forum.svg');
+ background-repeat: no-repeat;
+ background-size: auto 65%;
+ background-position: center;
+
+ :hover {
+ background-color: $overlay0;
+ }
+}
+
+.real-onotify-toggle-button-true {
+ min-width: 53px;
+ min-height: 53px;
+ background-color: $overlay0;
+ background-size: auto 65%;
+ background-position: center;
+ // background-image: url('./images/svg/forum.svg');
+ background-repeat: no-repeat;
+}
+
+.module-button {
+ transition: 500ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ border-radius: 26px;
+ padding: 0px 5px;
+ background-image: linear-gradient(45deg, rgba(0, 0, 0, 0) 60%, tint($overlay0, 10%) 60%);
+ background-size: 400% auto;
+ background-position: 40% 50%;
+}
+
+.module-button-hover {
+ transition: 500ms cubic-bezier(0.05, 0.7, 0.1, 1);
+ border-radius: 26px;
+ padding: 0px 5px;
+ background-image: linear-gradient(45deg, rgba(0, 0, 0, 0) 60%, tint($overlay0, 10%) 60%);
+ background-size: 400% auto;
+ background-color: $overlay0;
+ background-position: 60% 50%;
+}
+
+.module-button:hover {
+ background-color: $overlay0;
+ background-position: 60% 50%;
+}
+
+.module-button:active {
+ background-color: $overlay0;
+ background-position: 100% 50%;
+}
+
+.module-button-true {
+ border-radius: 26px;
+ padding: 0px 5px;
+ background-color: $overlay0;
+ background-image: linear-gradient(45deg, rgba(0, 0, 0, 0) 60%, tint($overlay0, 10%) 60%);
+ background-size: 400% auto;
+ background-position: 90% 50%;
+}
+
+.dynbg-image {
+ transition: 900ms cubic-bezier(0.05, 0.9, 0.1, 1); // Hyprland default bezier but no overshot
+}
+
+progressbar>trough {
+ min-width: 30px;
+}
+
+.box-that-is-there {
+ background-color: transparent;
+}
+
+.search-button {
+ min-height: 53px;
+ min-width: 65px;
+ color: $colortext;
+ font-family: Material Symbols Rounded;
+}
+
+.workspaces-top {
+ min-width: 306px;
+ min-height: 5px;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/eww.yuck b/hybrid-summer/.config/eww/eww.yuck
new file mode 100755
index 000000000..49dd9b400
--- /dev/null
+++ b/hybrid-summer/.config/eww/eww.yuck
@@ -0,0 +1,224 @@
+;##################### Modules #########################
+(include "./modules/activewindow.yuck")
+(include "./modules/audiolevels.yuck")
+(include "./modules/bluetooth.yuck")
+(include "./modules/bright.yuck")
+(include "./modules/clock.yuck")
+(include "./modules/editmode.yuck")
+(include "./modules/music.yuck")
+; (include "./modules/net.yuck")
+(include "./modules/searchbutton.yuck")
+(include "./modules/sys.yuck")
+(include "./modules/taskbar.yuck")
+(include "./modules/variables.yuck")
+(include "./modules/user.yuck")
+; (include "./modules/volume.yuck")
+(include "./modules/winstuff.yuck")
+(include "./modules/workspaces.yuck")
+
+;##################### Windows #########################
+(include "./windows/bottombar.yuck")
+(include "./windows/bg-decor.yuck")
+(include "./windows/dynamic-bg.yuck")
+(include "./windows/dashboard.yuck")
+(include "./windows/dashfs.yuck")
+(include "./windows/calendar.yuck")
+(include "./windows/music.yuck")
+(include "./windows/overview.yuck")
+(include "./windows/osd.yuck")
+(include "./windows/osettings.yuck")
+(include "./windows/onotify.yuck")
+; (include "./windows/system-menu.yuck")
+(include "./windows/themer.yuck")
+(include "./windows/winactions.yuck")
+(include "./windows/winosd.yuck")
+(include "./windows/winnews.yuck")
+(include "./windows/winnotif.yuck")
+(include "./windows/winpowermenu.yuck")
+(include "./windows/winstart.yuck")
+(include "./windows/winoverview.yuck")
+(include "./windows/wingamebar.yuck")
+
+(defwidget separator []
+ (box
+ :valign "start"
+ (label
+ :class "my-separator"
+ :text "|"
+ )
+ )
+)
+
+(defwidget left []
+ (eventbox
+ :onhover "${EWW_CMD} update music_reveal=true"
+ :onhoverlost "${EWW_CMD} update music_reveal=false"
+ (box
+ :space-evenly false :spacing 5
+ :valign "start" :halign "start"
+ (box :space-evenly false :class "module-group"
+ (osettings-button)
+ (osu-music-module)
+ )
+ ; (box :space-evenly false :class "module-group"
+ ; (taskbar)
+ ; )
+ (revealer
+ :reveal false
+ :transition "slideright"
+ (label
+ :text "${volume.audio} ${brightness.level} ${wsjsona[0][0].at} ${wsjsonb[0][0].at}" ; Dummy to keep listeners active
+ )
+ )
+ )
+ )
+)
+
+(defwidget right []
+ (eventbox
+ :onhover "${EWW_CMD} update right_hover=true"
+ :onhoverlost "${EWW_CMD} update right_hover=false"
+ (box
+ :space-evenly false :spacing 5
+ :halign "end" :valign "start"
+ (box :space-evenly false :class "module-group"
+ ; (editmode)
+ (themer)
+ )
+ ; (user)
+ (box :space-evenly false :class "module-group"
+ (onotify-button)
+ )
+ )
+ )
+)
+
+(defwidget center []
+ (box
+ :space-evenly false :orientation "v"
+ ; (revealer
+ ; :transition "slidedown"
+ ; :duration "0ms"
+ ; :reveal {!(rev_center_ws || awin.title == 'null')}
+ ; ; :reveal true
+ ; (workspaces_top)
+ ; )
+ (box
+ :valign "start"
+ :space-evenly false :spacing 5
+ :halign "center"
+ ; :style "${!(rev_center_ws || awin.title == 'null') ? 'margin-top: -15px; transition: 0px;' : 'transition: 0px;'}"
+ (box
+ :space-evenly false :space-evenly false
+ :spacing 5 :class "module-group" :style "padding-right: 10px;"
+ (searchbutton)
+ (revealer
+ :reveal {rev_center_ws || awin.title == 'null'}
+ ; :reveal false
+ :transition "slideright"
+ :duration "0ms"
+ (workspaces)
+ )
+ (revealer
+ :reveal {!(rev_center_ws || awin.title == 'null')}
+ ; :reveal true
+ :transition "slideright"
+ :duration "0ms"
+ (activewindow)
+ )
+ )
+ )
+ )
+)
+
+(defwidget bar [] ; Class .bar applies automatically
+ (box
+ :space-evenly false
+ :orientation "h"
+ (box
+ :class "bar-bg-only${compact ? '-compact' : ''}"
+ :style "
+ margin-right: -${RES_WIDTH - 9}px;
+ "
+ )
+ (centerbox
+ :class "bar-${compact ? 'compact' : 'normal'}"
+ :width {RES_WIDTH}
+ (left)
+ (center)
+ (right)
+ )
+ )
+)
+
+(defwidget winbar []
+ (centerbox
+ :class "winbar-bg"
+ (box
+ :space-evenly false
+ (winnews-button)
+ (eventbox
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ (box
+ :space-evenly false
+ :style "margin-left: ${RES_WIDTH / 2 - 75 - (25 * arraylength(tasks))}px;"
+ (winstarticon)
+ (wintaskbar)
+ (revealer
+ :reveal false
+ :transition "slideright"
+ (label
+ :text "${net.level} ${brightness.level} ${wsjsona[0][0].at} ${wsjsonb[0][0].at}" ; Dummy to keep listeners active
+ )
+ )
+ )
+ )
+ )
+ (box
+
+ )
+ (box
+ :halign "end"
+ :space-evenly false
+ (winactions)
+ (windate)
+ )
+ )
+)
+
+(defwindow bar
+ :stacking "fg"
+ :wm-ignore true
+ :monitor 0
+ :geometry (geometry
+ :x "0%"
+ :y "0%"
+ :width "100%"
+ :height "53px"
+ ; :width "53px"
+ ; :height "100%"
+ :anchor "top center"
+ )
+ ; :stacking "fg"
+ :exclusive false
+ (bar)
+)
+
+(defwindow winbar
+ :stacking "fg"
+ :monitor 0
+ :exclusive true
+ :geometry (geometry
+ :x "0%"
+ :y "0%"
+ :width "100%"
+ ; :height "53px"
+ ; :width "53px"
+ ; :height "100%"
+ :anchor "bottom center"
+ )
+ ; :stacking "fg"
+ :exclusive false
+ (winbar)
+)
+
diff --git a/hybrid-summer/.config/eww/eww_covers/cover_art_default b/hybrid-summer/.config/eww/eww_covers/cover_art_default
new file mode 100644
index 000000000..f607b5ae0
Binary files /dev/null and b/hybrid-summer/.config/eww/eww_covers/cover_art_default differ
diff --git a/hybrid-summer/.config/eww/eww_covers/cover_art_error b/hybrid-summer/.config/eww/eww_covers/cover_art_error
new file mode 100755
index 000000000..09715b548
Binary files /dev/null and b/hybrid-summer/.config/eww/eww_covers/cover_art_error differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/beatmaps.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/beatmaps.png
new file mode 100755
index 000000000..6790f713c
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/beatmaps.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/changelog.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/changelog.png
new file mode 100755
index 000000000..33bad1bee
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/changelog.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/dashboard.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/dashboard.png
new file mode 100755
index 000000000..d3bd65852
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/dashboard.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/dashboard_hover.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/dashboard_hover.png
new file mode 100644
index 000000000..5a444383d
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/dashboard_hover.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/forum.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/forum.png
new file mode 100755
index 000000000..cbf58770b
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/forum.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/music.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/music.png
new file mode 100755
index 000000000..2c3898f7c
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/music.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/music_hover.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/music_hover.png
new file mode 100644
index 000000000..942a6521d
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/music_hover.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/music_hover_reference.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/music_hover_reference.png
new file mode 100644
index 000000000..369f8cdce
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/music_hover_reference.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/music_reference.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/music_reference.png
new file mode 100755
index 000000000..2ee032bba
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/music_reference.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/news.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/news.png
new file mode 100755
index 000000000..c07bd0c1f
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/news.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/notifications.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/notifications.png
new file mode 100755
index 000000000..50ea3d40b
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/notifications.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/notifications_hover.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/notifications_hover.png
new file mode 100755
index 000000000..0ef188ca1
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/notifications_hover.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/options.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/options.png
new file mode 100755
index 000000000..cec497cd9
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/options.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/options_hover.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/options_hover.png
new file mode 100755
index 000000000..42439b642
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/options_hover.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/rankings.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/rankings.png
new file mode 100755
index 000000000..d7210d3d0
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/rankings.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/beatmappacks.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/beatmappacks.png
new file mode 100644
index 000000000..29722cb97
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/beatmappacks.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/beatmaps.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/beatmaps.png
new file mode 100644
index 000000000..4fea440a3
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/beatmaps.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/changelog.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/changelog.png
new file mode 100644
index 000000000..1f2f16c67
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/changelog.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/chat.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/chat.png
new file mode 100644
index 000000000..d823c584d
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/chat.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/contests.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/contests.png
new file mode 100644
index 000000000..994d5632c
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/contests.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/forum.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/forum.png
new file mode 100644
index 000000000..d39b6fe21
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/forum.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/home.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/home.png
new file mode 100644
index 000000000..cfd881e46
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/home.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/news.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/news.png
new file mode 100644
index 000000000..05e5d4dc7
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/news.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/rankings.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/rankings.png
new file mode 100644
index 000000000..04191ae5b
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/rankings.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/search.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/search.png
new file mode 100644
index 000000000..a061f307a
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/search.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/settings.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/settings.png
new file mode 100644
index 000000000..a74388e9a
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/settings.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/store.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/store.png
new file mode 100644
index 000000000..b6c02fb37
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/store.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/tournaments.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/tournaments.png
new file mode 100644
index 000000000..de1a29bda
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/tournaments.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/wiki.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/wiki.png
new file mode 100644
index 000000000..405e287a5
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/transparent/wiki.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/lazer_icons/wiki.png b/hybrid-summer/.config/eww/images/icons/lazer_icons/wiki.png
new file mode 100755
index 000000000..6d6c7ba91
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/lazer_icons/wiki.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/win-clicked.png b/hybrid-summer/.config/eww/images/icons/win-clicked.png
new file mode 100644
index 000000000..a65486725
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/win-clicked.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/win-inactive.png b/hybrid-summer/.config/eww/images/icons/win-inactive.png
new file mode 100644
index 000000000..37328e3e5
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/win-inactive.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/win.png b/hybrid-summer/.config/eww/images/icons/win.png
new file mode 100644
index 000000000..88b1a19de
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/win.png differ
diff --git a/hybrid-summer/.config/eww/images/icons/winnews.png b/hybrid-summer/.config/eww/images/icons/winnews.png
new file mode 100644
index 000000000..7829fd79e
Binary files /dev/null and b/hybrid-summer/.config/eww/images/icons/winnews.png differ
diff --git a/hybrid-summer/.config/eww/images/pictures/beach_drinks.jpeg b/hybrid-summer/.config/eww/images/pictures/beach_drinks.jpeg
new file mode 100644
index 000000000..43ba66abb
Binary files /dev/null and b/hybrid-summer/.config/eww/images/pictures/beach_drinks.jpeg differ
diff --git a/hybrid-summer/.config/eww/images/pictures/beach_smoothie.jpg b/hybrid-summer/.config/eww/images/pictures/beach_smoothie.jpg
new file mode 100644
index 000000000..29f84f797
Binary files /dev/null and b/hybrid-summer/.config/eww/images/pictures/beach_smoothie.jpg differ
diff --git a/hybrid-summer/.config/eww/images/svg/__mode_light_dark.txt b/hybrid-summer/.config/eww/images/svg/__mode_light_dark.txt
new file mode 100644
index 000000000..e69de29bb
diff --git a/hybrid-summer/.config/eww/images/svg/airplane.svg b/hybrid-summer/.config/eww/images/svg/airplane.svg
new file mode 100644
index 000000000..37a84d1e8
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/airplane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/app.svg b/hybrid-summer/.config/eww/images/svg/app.svg
new file mode 100644
index 000000000..d0d84b3d0
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/app.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/appgeneric.svg b/hybrid-summer/.config/eww/images/svg/appgeneric.svg
new file mode 100644
index 000000000..2a6913a9d
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/appgeneric.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/applycolor.svg b/hybrid-summer/.config/eww/images/svg/applycolor.svg
new file mode 100644
index 000000000..1ffe181fa
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/applycolor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bat0.svg b/hybrid-summer/.config/eww/images/svg/bat0.svg
new file mode 100644
index 000000000..b8ff6a028
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bat0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bat1.svg b/hybrid-summer/.config/eww/images/svg/bat1.svg
new file mode 100644
index 000000000..bbc4a313f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bat1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bat10.svg b/hybrid-summer/.config/eww/images/svg/bat10.svg
new file mode 100644
index 000000000..1c9877250
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bat10.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bat2.svg b/hybrid-summer/.config/eww/images/svg/bat2.svg
new file mode 100644
index 000000000..33279884d
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bat2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bat3.svg b/hybrid-summer/.config/eww/images/svg/bat3.svg
new file mode 100644
index 000000000..29489bd21
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bat3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bat4.svg b/hybrid-summer/.config/eww/images/svg/bat4.svg
new file mode 100644
index 000000000..0add3b519
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bat4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bat5.svg b/hybrid-summer/.config/eww/images/svg/bat5.svg
new file mode 100644
index 000000000..d9083a952
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bat5.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bat6.svg b/hybrid-summer/.config/eww/images/svg/bat6.svg
new file mode 100644
index 000000000..c88b64265
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bat6.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bat7.svg b/hybrid-summer/.config/eww/images/svg/bat7.svg
new file mode 100644
index 000000000..c5de316e3
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bat7.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bat8.svg b/hybrid-summer/.config/eww/images/svg/bat8.svg
new file mode 100644
index 000000000..f17f2d995
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bat8.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bat9.svg b/hybrid-summer/.config/eww/images/svg/bat9.svg
new file mode 100644
index 000000000..2b3d6124a
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bat9.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/batcharge.svg b/hybrid-summer/.config/eww/images/svg/batcharge.svg
new file mode 100644
index 000000000..441fc9e9a
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/batcharge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/beach/beatmappacks.svg b/hybrid-summer/.config/eww/images/svg/beach/beatmappacks.svg
new file mode 100644
index 000000000..7ed628d4a
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/beach/beatmappacks.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/beach/forum.svg b/hybrid-summer/.config/eww/images/svg/beach/forum.svg
new file mode 100644
index 000000000..d5dabd69f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/beach/forum.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/beach/search.svg b/hybrid-summer/.config/eww/images/svg/beach/search.svg
new file mode 100644
index 000000000..94bd29803
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/beach/search.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/beach/settings.svg b/hybrid-summer/.config/eww/images/svg/beach/settings.svg
new file mode 100644
index 000000000..2ae0bf40b
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/beach/settings.svg
@@ -0,0 +1,23 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/beach/tournaments.svg b/hybrid-summer/.config/eww/images/svg/beach/tournaments.svg
new file mode 100644
index 000000000..3373bc0ae
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/beach/tournaments.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/beatmappacks.svg b/hybrid-summer/.config/eww/images/svg/beatmappacks.svg
new file mode 100644
index 000000000..e7716f832
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/beatmappacks.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/beatmaps.svg b/hybrid-summer/.config/eww/images/svg/beatmaps.svg
new file mode 100644
index 000000000..a9532018a
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/beatmaps.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bluetooth.svg b/hybrid-summer/.config/eww/images/svg/bluetooth.svg
new file mode 100644
index 000000000..ed87c2bc4
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bluetooth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bluetoothfalse.svg b/hybrid-summer/.config/eww/images/svg/bluetoothfalse.svg
new file mode 100644
index 000000000..a9dd9e9e2
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bluetoothfalse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bluetoothtrue.svg b/hybrid-summer/.config/eww/images/svg/bluetoothtrue.svg
new file mode 100644
index 000000000..1e855705b
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bluetoothtrue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/bright0.svg b/hybrid-summer/.config/eww/images/svg/bright0.svg
new file mode 100644
index 000000000..b8ff6a028
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/bright0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/brightness.svg b/hybrid-summer/.config/eww/images/svg/brightness.svg
new file mode 100644
index 000000000..42cd5713c
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/brightness.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/calculator.svg b/hybrid-summer/.config/eww/images/svg/calculator.svg
new file mode 100644
index 000000000..0f8c0b49d
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/calculator.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/caretdown.svg b/hybrid-summer/.config/eww/images/svg/caretdown.svg
new file mode 100644
index 000000000..79e8e1f92
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/caretdown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/caretup.svg b/hybrid-summer/.config/eww/images/svg/caretup.svg
new file mode 100644
index 000000000..02b307963
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/caretup.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/changelog.svg b/hybrid-summer/.config/eww/images/svg/changelog.svg
new file mode 100644
index 000000000..f0f6c0e82
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/changelog.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/chat.svg b/hybrid-summer/.config/eww/images/svg/chat.svg
new file mode 100644
index 000000000..f0fc145ab
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/chat.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/checkbox.svg b/hybrid-summer/.config/eww/images/svg/checkbox.svg
new file mode 100644
index 000000000..ed8d1cdfa
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/checkbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/checkbox_no.svg b/hybrid-summer/.config/eww/images/svg/checkbox_no.svg
new file mode 100644
index 000000000..1d3e0467f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/checkbox_no.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/cog.svg b/hybrid-summer/.config/eww/images/svg/cog.svg
new file mode 100644
index 000000000..4f4972271
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/cog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/color.scss b/hybrid-summer/.config/eww/images/svg/color.scss
new file mode 100644
index 000000000..5fa42450c
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/color.scss
@@ -0,0 +1 @@
+$colorbar: #ffdbc4;
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/color.txt b/hybrid-summer/.config/eww/images/svg/color.txt
new file mode 100644
index 000000000..39d514104
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/color.txt
@@ -0,0 +1 @@
+#ffdbc4
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/contests.svg b/hybrid-summer/.config/eww/images/svg/contests.svg
new file mode 100644
index 000000000..8a3129b5c
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/contests.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/copy.svg b/hybrid-summer/.config/eww/images/svg/copy.svg
new file mode 100644
index 000000000..c732a6ed7
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/copy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/airplane.svg b/hybrid-summer/.config/eww/images/svg/dark/airplane.svg
new file mode 100644
index 000000000..c289fd7cb
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/airplane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/app.svg b/hybrid-summer/.config/eww/images/svg/dark/app.svg
new file mode 100644
index 000000000..b2a2169f0
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/app.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/appgeneric.svg b/hybrid-summer/.config/eww/images/svg/dark/appgeneric.svg
new file mode 100644
index 000000000..70f378c96
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/appgeneric.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/applycolor.svg b/hybrid-summer/.config/eww/images/svg/dark/applycolor.svg
new file mode 100644
index 000000000..70d163583
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/applycolor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bat0.svg b/hybrid-summer/.config/eww/images/svg/dark/bat0.svg
new file mode 100644
index 000000000..5a4b54eaf
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bat0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bat1.svg b/hybrid-summer/.config/eww/images/svg/dark/bat1.svg
new file mode 100644
index 000000000..d0fee08cf
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bat1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bat10.svg b/hybrid-summer/.config/eww/images/svg/dark/bat10.svg
new file mode 100644
index 000000000..6518b5510
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bat10.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bat2.svg b/hybrid-summer/.config/eww/images/svg/dark/bat2.svg
new file mode 100644
index 000000000..359e89591
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bat2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bat3.svg b/hybrid-summer/.config/eww/images/svg/dark/bat3.svg
new file mode 100644
index 000000000..71d54b711
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bat3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bat4.svg b/hybrid-summer/.config/eww/images/svg/dark/bat4.svg
new file mode 100644
index 000000000..fccf41179
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bat4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bat5.svg b/hybrid-summer/.config/eww/images/svg/dark/bat5.svg
new file mode 100644
index 000000000..f038d856b
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bat5.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bat6.svg b/hybrid-summer/.config/eww/images/svg/dark/bat6.svg
new file mode 100644
index 000000000..1e78412ea
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bat6.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bat7.svg b/hybrid-summer/.config/eww/images/svg/dark/bat7.svg
new file mode 100644
index 000000000..e2ac822f8
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bat7.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bat8.svg b/hybrid-summer/.config/eww/images/svg/dark/bat8.svg
new file mode 100644
index 000000000..ab8433e94
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bat8.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bat9.svg b/hybrid-summer/.config/eww/images/svg/dark/bat9.svg
new file mode 100644
index 000000000..bbe514d7b
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bat9.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/batcharge.svg b/hybrid-summer/.config/eww/images/svg/dark/batcharge.svg
new file mode 100644
index 000000000..eb76029ba
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/batcharge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/beatmappacks.svg b/hybrid-summer/.config/eww/images/svg/dark/beatmappacks.svg
new file mode 100644
index 000000000..4f4bc4bd2
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/beatmappacks.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/beatmaps.svg b/hybrid-summer/.config/eww/images/svg/dark/beatmaps.svg
new file mode 100644
index 000000000..34aca1b69
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/beatmaps.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bluetooth.svg b/hybrid-summer/.config/eww/images/svg/dark/bluetooth.svg
new file mode 100644
index 000000000..3320f9394
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bluetooth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bluetoothfalse.svg b/hybrid-summer/.config/eww/images/svg/dark/bluetoothfalse.svg
new file mode 100644
index 000000000..50742113a
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bluetoothfalse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bluetoothtrue.svg b/hybrid-summer/.config/eww/images/svg/dark/bluetoothtrue.svg
new file mode 100644
index 000000000..a13c122a6
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bluetoothtrue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/bright0.svg b/hybrid-summer/.config/eww/images/svg/dark/bright0.svg
new file mode 100644
index 000000000..5a4b54eaf
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/bright0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/brightness.svg b/hybrid-summer/.config/eww/images/svg/dark/brightness.svg
new file mode 100644
index 000000000..7c9ded244
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/brightness.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/calculator.svg b/hybrid-summer/.config/eww/images/svg/dark/calculator.svg
new file mode 100644
index 000000000..0a8f53dd1
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/calculator.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/caretdown.svg b/hybrid-summer/.config/eww/images/svg/dark/caretdown.svg
new file mode 100644
index 000000000..75b3c59f0
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/caretdown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/caretup.svg b/hybrid-summer/.config/eww/images/svg/dark/caretup.svg
new file mode 100644
index 000000000..aecea9e57
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/caretup.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/changelog.svg b/hybrid-summer/.config/eww/images/svg/dark/changelog.svg
new file mode 100644
index 000000000..4d610ba10
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/changelog.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/chat.svg b/hybrid-summer/.config/eww/images/svg/dark/chat.svg
new file mode 100644
index 000000000..c0b632db2
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/chat.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/checkbox.svg b/hybrid-summer/.config/eww/images/svg/dark/checkbox.svg
new file mode 100644
index 000000000..dde43be39
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/checkbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/checkbox_no.svg b/hybrid-summer/.config/eww/images/svg/dark/checkbox_no.svg
new file mode 100644
index 000000000..773954a56
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/checkbox_no.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/cog.svg b/hybrid-summer/.config/eww/images/svg/dark/cog.svg
new file mode 100644
index 000000000..fd8990e30
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/cog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/color.scss b/hybrid-summer/.config/eww/images/svg/dark/color.scss
new file mode 100644
index 000000000..e96f7e758
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/color.scss
@@ -0,0 +1 @@
+$colorbar: white;
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/color.txt b/hybrid-summer/.config/eww/images/svg/dark/color.txt
new file mode 100644
index 000000000..65c27486f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/color.txt
@@ -0,0 +1 @@
+white
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/contests.svg b/hybrid-summer/.config/eww/images/svg/dark/contests.svg
new file mode 100644
index 000000000..ee97f1e25
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/contests.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/copy.svg b/hybrid-summer/.config/eww/images/svg/dark/copy.svg
new file mode 100644
index 000000000..dfc96f75f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/copy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/downarrow.svg b/hybrid-summer/.config/eww/images/svg/dark/downarrow.svg
new file mode 100644
index 000000000..8007c824d
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/downarrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/folderopen.svg b/hybrid-summer/.config/eww/images/svg/dark/folderopen.svg
new file mode 100644
index 000000000..7a13e37ce
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/folderopen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/forum.svg b/hybrid-summer/.config/eww/images/svg/dark/forum.svg
new file mode 100644
index 000000000..d498ef84e
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/forum.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/graph.svg b/hybrid-summer/.config/eww/images/svg/dark/graph.svg
new file mode 100644
index 000000000..dce5d1733
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/graph.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/home.svg b/hybrid-summer/.config/eww/images/svg/dark/home.svg
new file mode 100644
index 000000000..83014e4d2
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/home.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/icosahedron.svg b/hybrid-summer/.config/eww/images/svg/dark/icosahedron.svg
new file mode 100644
index 000000000..c73725b17
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/icosahedron.svg
@@ -0,0 +1,67 @@
+
+
+
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/linehorizontal.svg b/hybrid-summer/.config/eww/images/svg/dark/linehorizontal.svg
new file mode 100644
index 000000000..7d8af77a0
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/linehorizontal.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/linetransparent.svg b/hybrid-summer/.config/eww/images/svg/dark/linetransparent.svg
new file mode 100644
index 000000000..9be840a61
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/linetransparent.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/linevertical.svg b/hybrid-summer/.config/eww/images/svg/dark/linevertical.svg
new file mode 100644
index 000000000..1c823058c
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/linevertical.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/moon.svg b/hybrid-summer/.config/eww/images/svg/dark/moon.svg
new file mode 100644
index 000000000..83a0417d9
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/news.svg b/hybrid-summer/.config/eww/images/svg/dark/news.svg
new file mode 100644
index 000000000..3368f9490
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/news.svg
@@ -0,0 +1,18 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/night.svg b/hybrid-summer/.config/eww/images/svg/dark/night.svg
new file mode 100644
index 000000000..1e0aacb7e
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/night.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/notif.svg b/hybrid-summer/.config/eww/images/svg/dark/notif.svg
new file mode 100644
index 000000000..27b31c32a
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/notif.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/notifsnooze.svg b/hybrid-summer/.config/eww/images/svg/dark/notifsnooze.svg
new file mode 100644
index 000000000..14b47c028
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/notifsnooze.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/open.svg b/hybrid-summer/.config/eww/images/svg/dark/open.svg
new file mode 100644
index 000000000..f2d77ca1b
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/power.svg b/hybrid-summer/.config/eww/images/svg/dark/power.svg
new file mode 100644
index 000000000..ea17b7eeb
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/power.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/protocol.svg b/hybrid-summer/.config/eww/images/svg/dark/protocol.svg
new file mode 100644
index 000000000..716cacbb5
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/protocol.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/radiobutton.svg b/hybrid-summer/.config/eww/images/svg/dark/radiobutton.svg
new file mode 100644
index 000000000..1ed6e36b2
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/radiobutton.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/rankings.svg b/hybrid-summer/.config/eww/images/svg/dark/rankings.svg
new file mode 100644
index 000000000..4534694db
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/rankings.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/reset.svg b/hybrid-summer/.config/eww/images/svg/dark/reset.svg
new file mode 100644
index 000000000..1d866ae5c
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/reset.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/rightarrow.svg b/hybrid-summer/.config/eww/images/svg/dark/rightarrow.svg
new file mode 100644
index 000000000..6fd1d98eb
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/rightarrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/root.svg b/hybrid-summer/.config/eww/images/svg/dark/root.svg
new file mode 100644
index 000000000..306fd7f39
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/root.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/search-fluent.svg b/hybrid-summer/.config/eww/images/svg/dark/search-fluent.svg
new file mode 100644
index 000000000..d06ad1ac9
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/search-fluent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/search.svg b/hybrid-summer/.config/eww/images/svg/dark/search.svg
new file mode 100644
index 000000000..4542bf491
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/search.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/settings.svg b/hybrid-summer/.config/eww/images/svg/dark/settings.svg
new file mode 100644
index 000000000..c69c6a3a6
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/settings.svg
@@ -0,0 +1,23 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/store.svg b/hybrid-summer/.config/eww/images/svg/dark/store.svg
new file mode 100644
index 000000000..e4ac6edd5
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/store.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/tournaments.svg b/hybrid-summer/.config/eww/images/svg/dark/tournaments.svg
new file mode 100644
index 000000000..cd0f69268
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/tournaments.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/uparrow.svg b/hybrid-summer/.config/eww/images/svg/dark/uparrow.svg
new file mode 100644
index 000000000..5ea8ae99a
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/uparrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/user.svg b/hybrid-summer/.config/eww/images/svg/dark/user.svg
new file mode 100644
index 000000000..5127e451a
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/vol0.svg b/hybrid-summer/.config/eww/images/svg/dark/vol0.svg
new file mode 100644
index 000000000..036a79126
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/vol0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/vol1.svg b/hybrid-summer/.config/eww/images/svg/dark/vol1.svg
new file mode 100644
index 000000000..96d5570a5
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/vol1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/vol2.svg b/hybrid-summer/.config/eww/images/svg/dark/vol2.svg
new file mode 100644
index 000000000..a090e3c39
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/vol2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/vol3.svg b/hybrid-summer/.config/eww/images/svg/dark/vol3.svg
new file mode 100644
index 000000000..a090e3c39
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/vol3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/volmute.svg b/hybrid-summer/.config/eww/images/svg/dark/volmute.svg
new file mode 100644
index 000000000..474a67cb0
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/volmute.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/wifi.svg b/hybrid-summer/.config/eww/images/svg/dark/wifi.svg
new file mode 100644
index 000000000..bd7500be3
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/wifi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/wifi1.svg b/hybrid-summer/.config/eww/images/svg/dark/wifi1.svg
new file mode 100644
index 000000000..e77cb492f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/wifi1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/wifi2.svg b/hybrid-summer/.config/eww/images/svg/dark/wifi2.svg
new file mode 100644
index 000000000..9bd4c1127
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/wifi2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/wifi3.svg b/hybrid-summer/.config/eww/images/svg/dark/wifi3.svg
new file mode 100644
index 000000000..15147e602
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/wifi3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/wifi4.svg b/hybrid-summer/.config/eww/images/svg/dark/wifi4.svg
new file mode 100644
index 000000000..360b10868
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/wifi4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/dark/wiki.svg b/hybrid-summer/.config/eww/images/svg/dark/wiki.svg
new file mode 100644
index 000000000..a2d8358b6
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/dark/wiki.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/downarrow.svg b/hybrid-summer/.config/eww/images/svg/downarrow.svg
new file mode 100644
index 000000000..42b6fd5bd
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/downarrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/folderopen.svg b/hybrid-summer/.config/eww/images/svg/folderopen.svg
new file mode 100644
index 000000000..01c3f761d
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/folderopen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/forum.svg b/hybrid-summer/.config/eww/images/svg/forum.svg
new file mode 100644
index 000000000..344eeebba
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/forum.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/graph.svg b/hybrid-summer/.config/eww/images/svg/graph.svg
new file mode 100644
index 000000000..63c8852fc
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/graph.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/gruv/beatmappacks.svg b/hybrid-summer/.config/eww/images/svg/gruv/beatmappacks.svg
new file mode 100644
index 000000000..e7716f832
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/gruv/beatmappacks.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/gruv/beatmaps.svg b/hybrid-summer/.config/eww/images/svg/gruv/beatmaps.svg
new file mode 100644
index 000000000..a9532018a
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/gruv/beatmaps.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/gruv/contests.svg b/hybrid-summer/.config/eww/images/svg/gruv/contests.svg
new file mode 100644
index 000000000..8a3129b5c
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/gruv/contests.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/gruv/forum.svg b/hybrid-summer/.config/eww/images/svg/gruv/forum.svg
new file mode 100644
index 000000000..344eeebba
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/gruv/forum.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/gruv/graph.svg b/hybrid-summer/.config/eww/images/svg/gruv/graph.svg
new file mode 100644
index 000000000..63c8852fc
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/gruv/graph.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/gruv/search.svg b/hybrid-summer/.config/eww/images/svg/gruv/search.svg
new file mode 100644
index 000000000..c87f5f101
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/gruv/search.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/gruv/settings.svg b/hybrid-summer/.config/eww/images/svg/gruv/settings.svg
new file mode 100644
index 000000000..e0b0586cf
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/gruv/settings.svg
@@ -0,0 +1,23 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/gruv/tournaments.svg b/hybrid-summer/.config/eww/images/svg/gruv/tournaments.svg
new file mode 100644
index 000000000..6c270463f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/gruv/tournaments.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/gruv/wiki.svg b/hybrid-summer/.config/eww/images/svg/gruv/wiki.svg
new file mode 100644
index 000000000..e7d3a8c67
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/gruv/wiki.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/home.svg b/hybrid-summer/.config/eww/images/svg/home.svg
new file mode 100644
index 000000000..0f957ffad
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/home.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/icosahedron.svg b/hybrid-summer/.config/eww/images/svg/icosahedron.svg
new file mode 100644
index 000000000..5dfab7306
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/icosahedron.svg
@@ -0,0 +1,67 @@
+
+
+
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/airplane.svg b/hybrid-summer/.config/eww/images/svg/light/airplane.svg
new file mode 100644
index 000000000..7d16cd031
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/airplane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/app.svg b/hybrid-summer/.config/eww/images/svg/light/app.svg
new file mode 100644
index 000000000..ce93fdea2
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/app.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/appgeneric.svg b/hybrid-summer/.config/eww/images/svg/light/appgeneric.svg
new file mode 100644
index 000000000..251cac6bd
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/appgeneric.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/applycolor.svg b/hybrid-summer/.config/eww/images/svg/light/applycolor.svg
new file mode 100644
index 000000000..695583a97
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/applycolor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/bat0.svg b/hybrid-summer/.config/eww/images/svg/light/bat0.svg
new file mode 100644
index 000000000..9bcffe06d
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/bat0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/bat1.svg b/hybrid-summer/.config/eww/images/svg/light/bat1.svg
new file mode 100644
index 000000000..c00e2b58d
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/bat1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/bat10.svg b/hybrid-summer/.config/eww/images/svg/light/bat10.svg
new file mode 100644
index 000000000..80d559853
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/bat10.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/bat2.svg b/hybrid-summer/.config/eww/images/svg/light/bat2.svg
new file mode 100644
index 000000000..9a912d0bd
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/bat2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/bat3.svg b/hybrid-summer/.config/eww/images/svg/light/bat3.svg
new file mode 100644
index 000000000..edc5afece
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/bat3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/bat4.svg b/hybrid-summer/.config/eww/images/svg/light/bat4.svg
new file mode 100644
index 000000000..05b2c815b
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/bat4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/bat5.svg b/hybrid-summer/.config/eww/images/svg/light/bat5.svg
new file mode 100644
index 000000000..287e71cb4
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/bat5.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/bat6.svg b/hybrid-summer/.config/eww/images/svg/light/bat6.svg
new file mode 100644
index 000000000..c6c2d92d2
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/bat6.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/bat7.svg b/hybrid-summer/.config/eww/images/svg/light/bat7.svg
new file mode 100644
index 000000000..c3dd369a6
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/bat7.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/bat8.svg b/hybrid-summer/.config/eww/images/svg/light/bat8.svg
new file mode 100644
index 000000000..b2f433242
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/bat8.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/bat9.svg b/hybrid-summer/.config/eww/images/svg/light/bat9.svg
new file mode 100644
index 000000000..7b3c8ec77
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/bat9.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/batcharge.svg b/hybrid-summer/.config/eww/images/svg/light/batcharge.svg
new file mode 100644
index 000000000..55be957f9
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/batcharge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/beatmappacks.svg b/hybrid-summer/.config/eww/images/svg/light/beatmappacks.svg
new file mode 100644
index 000000000..a37a07de5
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/beatmappacks.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/beatmaps.svg b/hybrid-summer/.config/eww/images/svg/light/beatmaps.svg
new file mode 100644
index 000000000..5c8bcedbd
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/beatmaps.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/bluetooth.svg b/hybrid-summer/.config/eww/images/svg/light/bluetooth.svg
new file mode 100644
index 000000000..91a7988a8
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/bluetooth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/bluetoothfalse.svg b/hybrid-summer/.config/eww/images/svg/light/bluetoothfalse.svg
new file mode 100644
index 000000000..1e01de0af
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/bluetoothfalse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/bluetoothtrue.svg b/hybrid-summer/.config/eww/images/svg/light/bluetoothtrue.svg
new file mode 100644
index 000000000..34f93fb9f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/bluetoothtrue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/brightness.svg b/hybrid-summer/.config/eww/images/svg/light/brightness.svg
new file mode 100644
index 000000000..3a3704d3c
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/brightness.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/calculator.svg b/hybrid-summer/.config/eww/images/svg/light/calculator.svg
new file mode 100644
index 000000000..d1a6a8e2a
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/calculator.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/caretdown.svg b/hybrid-summer/.config/eww/images/svg/light/caretdown.svg
new file mode 100644
index 000000000..d4a1baf5f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/caretdown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/caretup.svg b/hybrid-summer/.config/eww/images/svg/light/caretup.svg
new file mode 100644
index 000000000..d316a3a52
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/caretup.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/changelog.svg b/hybrid-summer/.config/eww/images/svg/light/changelog.svg
new file mode 100644
index 000000000..bb55ed079
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/changelog.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/chat.svg b/hybrid-summer/.config/eww/images/svg/light/chat.svg
new file mode 100644
index 000000000..6f3a9e386
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/chat.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/checkbox.svg b/hybrid-summer/.config/eww/images/svg/light/checkbox.svg
new file mode 100644
index 000000000..931aef1e9
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/checkbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/checkbox_no.svg b/hybrid-summer/.config/eww/images/svg/light/checkbox_no.svg
new file mode 100644
index 000000000..dee077c1a
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/checkbox_no.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/cog.svg b/hybrid-summer/.config/eww/images/svg/light/cog.svg
new file mode 100644
index 000000000..fe00d1b58
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/cog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/color.scss b/hybrid-summer/.config/eww/images/svg/light/color.scss
new file mode 100644
index 000000000..dd580d4ee
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/color.scss
@@ -0,0 +1 @@
+$colorbar: #000000;
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/color.txt b/hybrid-summer/.config/eww/images/svg/light/color.txt
new file mode 100644
index 000000000..c0abf774f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/color.txt
@@ -0,0 +1 @@
+#000000
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/contests.svg b/hybrid-summer/.config/eww/images/svg/light/contests.svg
new file mode 100644
index 000000000..efd5b94e7
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/contests.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/copy.svg b/hybrid-summer/.config/eww/images/svg/light/copy.svg
new file mode 100644
index 000000000..646e5c69c
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/copy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/downarrow.svg b/hybrid-summer/.config/eww/images/svg/light/downarrow.svg
new file mode 100644
index 000000000..9a444f159
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/downarrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/folderopen.svg b/hybrid-summer/.config/eww/images/svg/light/folderopen.svg
new file mode 100644
index 000000000..b7516348d
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/folderopen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/forum.svg b/hybrid-summer/.config/eww/images/svg/light/forum.svg
new file mode 100644
index 000000000..f743df8e9
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/forum.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/graph.svg b/hybrid-summer/.config/eww/images/svg/light/graph.svg
new file mode 100644
index 000000000..68c74ee66
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/graph.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/home.svg b/hybrid-summer/.config/eww/images/svg/light/home.svg
new file mode 100644
index 000000000..50eb4a235
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/home.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/icosahedron.svg b/hybrid-summer/.config/eww/images/svg/light/icosahedron.svg
new file mode 100644
index 000000000..c443f2a56
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/icosahedron.svg
@@ -0,0 +1,67 @@
+
+
+
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/linehorizontal.svg b/hybrid-summer/.config/eww/images/svg/light/linehorizontal.svg
new file mode 100644
index 000000000..81ead10da
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/linehorizontal.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/linetransparent.svg b/hybrid-summer/.config/eww/images/svg/light/linetransparent.svg
new file mode 100644
index 000000000..9be840a61
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/linetransparent.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/linevertical.svg b/hybrid-summer/.config/eww/images/svg/light/linevertical.svg
new file mode 100644
index 000000000..ff695f8c9
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/linevertical.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/moon.svg b/hybrid-summer/.config/eww/images/svg/light/moon.svg
new file mode 100644
index 000000000..76b35d988
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/news.svg b/hybrid-summer/.config/eww/images/svg/light/news.svg
new file mode 100644
index 000000000..057a49a14
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/news.svg
@@ -0,0 +1,18 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/night.svg b/hybrid-summer/.config/eww/images/svg/light/night.svg
new file mode 100644
index 000000000..053a6c46e
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/night.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/notif.svg b/hybrid-summer/.config/eww/images/svg/light/notif.svg
new file mode 100644
index 000000000..0903c73a0
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/notif.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/notifsnooze.svg b/hybrid-summer/.config/eww/images/svg/light/notifsnooze.svg
new file mode 100644
index 000000000..e6b23f29f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/notifsnooze.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/open.svg b/hybrid-summer/.config/eww/images/svg/light/open.svg
new file mode 100644
index 000000000..5b1267935
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/power.svg b/hybrid-summer/.config/eww/images/svg/light/power.svg
new file mode 100644
index 000000000..0d12dd7c0
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/power.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/protocol.svg b/hybrid-summer/.config/eww/images/svg/light/protocol.svg
new file mode 100644
index 000000000..92fe7abe2
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/protocol.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/radiobutton.svg b/hybrid-summer/.config/eww/images/svg/light/radiobutton.svg
new file mode 100644
index 000000000..80513fb32
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/radiobutton.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/rankings.svg b/hybrid-summer/.config/eww/images/svg/light/rankings.svg
new file mode 100644
index 000000000..9b322c401
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/rankings.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/reset.svg b/hybrid-summer/.config/eww/images/svg/light/reset.svg
new file mode 100644
index 000000000..c9cdbcd84
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/reset.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/rightarrow.svg b/hybrid-summer/.config/eww/images/svg/light/rightarrow.svg
new file mode 100644
index 000000000..4bfb1349b
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/rightarrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/root.svg b/hybrid-summer/.config/eww/images/svg/light/root.svg
new file mode 100644
index 000000000..2dedab277
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/root.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/search-fluent.svg b/hybrid-summer/.config/eww/images/svg/light/search-fluent.svg
new file mode 100644
index 000000000..bbcd5f5b4
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/search-fluent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/search.svg b/hybrid-summer/.config/eww/images/svg/light/search.svg
new file mode 100644
index 000000000..cf0ea4678
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/search.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/settings.svg b/hybrid-summer/.config/eww/images/svg/light/settings.svg
new file mode 100644
index 000000000..c8e51e41e
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/settings.svg
@@ -0,0 +1,23 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/store.svg b/hybrid-summer/.config/eww/images/svg/light/store.svg
new file mode 100644
index 000000000..0e8b78cec
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/store.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/tournaments.svg b/hybrid-summer/.config/eww/images/svg/light/tournaments.svg
new file mode 100644
index 000000000..cc0e1a95f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/tournaments.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/uparrow.svg b/hybrid-summer/.config/eww/images/svg/light/uparrow.svg
new file mode 100644
index 000000000..f27adb950
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/uparrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/user.svg b/hybrid-summer/.config/eww/images/svg/light/user.svg
new file mode 100644
index 000000000..ee072b7b9
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/vol0.svg b/hybrid-summer/.config/eww/images/svg/light/vol0.svg
new file mode 100644
index 000000000..2f724a3d5
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/vol0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/vol1.svg b/hybrid-summer/.config/eww/images/svg/light/vol1.svg
new file mode 100644
index 000000000..43938e063
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/vol1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/vol2.svg b/hybrid-summer/.config/eww/images/svg/light/vol2.svg
new file mode 100644
index 000000000..0e1ae1921
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/vol2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/vol3.svg b/hybrid-summer/.config/eww/images/svg/light/vol3.svg
new file mode 100644
index 000000000..0e1ae1921
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/vol3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/volmute.svg b/hybrid-summer/.config/eww/images/svg/light/volmute.svg
new file mode 100644
index 000000000..ac61db6f5
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/volmute.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/wifi.svg b/hybrid-summer/.config/eww/images/svg/light/wifi.svg
new file mode 100644
index 000000000..1ad75251f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/wifi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/wifi1.svg b/hybrid-summer/.config/eww/images/svg/light/wifi1.svg
new file mode 100644
index 000000000..875b72537
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/wifi1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/wifi2.svg b/hybrid-summer/.config/eww/images/svg/light/wifi2.svg
new file mode 100644
index 000000000..b5650c541
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/wifi2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/wifi3.svg b/hybrid-summer/.config/eww/images/svg/light/wifi3.svg
new file mode 100644
index 000000000..72b566f01
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/wifi3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/wifi4.svg b/hybrid-summer/.config/eww/images/svg/light/wifi4.svg
new file mode 100644
index 000000000..792fd532e
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/wifi4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/light/wiki.svg b/hybrid-summer/.config/eww/images/svg/light/wiki.svg
new file mode 100644
index 000000000..1eb3de640
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/light/wiki.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/linehorizontal.svg b/hybrid-summer/.config/eww/images/svg/linehorizontal.svg
new file mode 100644
index 000000000..40cf3be07
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/linehorizontal.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/linetransparent.svg b/hybrid-summer/.config/eww/images/svg/linetransparent.svg
new file mode 100644
index 000000000..9be840a61
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/linetransparent.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/linevertical.svg b/hybrid-summer/.config/eww/images/svg/linevertical.svg
new file mode 100644
index 000000000..42437d726
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/linevertical.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/moon.svg b/hybrid-summer/.config/eww/images/svg/moon.svg
new file mode 100644
index 000000000..740eb3c1b
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/news.svg b/hybrid-summer/.config/eww/images/svg/news.svg
new file mode 100644
index 000000000..ba3d1d84b
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/news.svg
@@ -0,0 +1,18 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/night.svg b/hybrid-summer/.config/eww/images/svg/night.svg
new file mode 100644
index 000000000..27d72d362
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/night.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/notif-snooze.svg b/hybrid-summer/.config/eww/images/svg/notif-snooze.svg
new file mode 100644
index 000000000..e72c0282c
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/notif-snooze.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/notif.svg b/hybrid-summer/.config/eww/images/svg/notif.svg
new file mode 100644
index 000000000..968255cc4
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/notif.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/notifsnooze.svg b/hybrid-summer/.config/eww/images/svg/notifsnooze.svg
new file mode 100644
index 000000000..3d130b632
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/notifsnooze.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/open.svg b/hybrid-summer/.config/eww/images/svg/open.svg
new file mode 100644
index 000000000..3e4c94f9d
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/power.svg b/hybrid-summer/.config/eww/images/svg/power.svg
new file mode 100644
index 000000000..cd417d1d7
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/power.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/protocol.svg b/hybrid-summer/.config/eww/images/svg/protocol.svg
new file mode 100644
index 000000000..a6d61eb9a
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/protocol.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/radiobutton.svg b/hybrid-summer/.config/eww/images/svg/radiobutton.svg
new file mode 100644
index 000000000..e09623d4f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/radiobutton.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/rankings.svg b/hybrid-summer/.config/eww/images/svg/rankings.svg
new file mode 100644
index 000000000..6b3588c00
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/rankings.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/reset.svg b/hybrid-summer/.config/eww/images/svg/reset.svg
new file mode 100644
index 000000000..e7828fd06
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/reset.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/rightarrow.svg b/hybrid-summer/.config/eww/images/svg/rightarrow.svg
new file mode 100644
index 000000000..4fa4e1dca
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/rightarrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/root.svg b/hybrid-summer/.config/eww/images/svg/root.svg
new file mode 100644
index 000000000..7df88361c
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/root.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/search-fluent.svg b/hybrid-summer/.config/eww/images/svg/search-fluent.svg
new file mode 100644
index 000000000..8696a927a
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/search-fluent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/search.svg b/hybrid-summer/.config/eww/images/svg/search.svg
new file mode 100644
index 000000000..c87f5f101
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/search.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/settings.svg b/hybrid-summer/.config/eww/images/svg/settings.svg
new file mode 100644
index 000000000..e0b0586cf
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/settings.svg
@@ -0,0 +1,23 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/store.svg b/hybrid-summer/.config/eww/images/svg/store.svg
new file mode 100644
index 000000000..b30cc5c98
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/store.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/tournaments.svg b/hybrid-summer/.config/eww/images/svg/tournaments.svg
new file mode 100644
index 000000000..6c270463f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/tournaments.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/uparrow.svg b/hybrid-summer/.config/eww/images/svg/uparrow.svg
new file mode 100644
index 000000000..a87c95c88
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/uparrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/user.svg b/hybrid-summer/.config/eww/images/svg/user.svg
new file mode 100644
index 000000000..7de0e1953
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/vol0.svg b/hybrid-summer/.config/eww/images/svg/vol0.svg
new file mode 100644
index 000000000..02da12b17
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/vol0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/vol1.svg b/hybrid-summer/.config/eww/images/svg/vol1.svg
new file mode 100644
index 000000000..7162b0d6c
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/vol1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/vol2.svg b/hybrid-summer/.config/eww/images/svg/vol2.svg
new file mode 100644
index 000000000..785d86975
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/vol2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/vol3.svg b/hybrid-summer/.config/eww/images/svg/vol3.svg
new file mode 100644
index 000000000..785d86975
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/vol3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/volmute.svg b/hybrid-summer/.config/eww/images/svg/volmute.svg
new file mode 100644
index 000000000..ebbe60e1f
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/volmute.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/wifi.svg b/hybrid-summer/.config/eww/images/svg/wifi.svg
new file mode 100644
index 000000000..628935bda
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/wifi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/wifi1.svg b/hybrid-summer/.config/eww/images/svg/wifi1.svg
new file mode 100644
index 000000000..2350199a4
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/wifi1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/wifi2.svg b/hybrid-summer/.config/eww/images/svg/wifi2.svg
new file mode 100644
index 000000000..1bba911da
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/wifi2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/wifi3.svg b/hybrid-summer/.config/eww/images/svg/wifi3.svg
new file mode 100644
index 000000000..cddecd0e3
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/wifi3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/wifi4.svg b/hybrid-summer/.config/eww/images/svg/wifi4.svg
new file mode 100644
index 000000000..763bcdfa4
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/wifi4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/svg/wiki.svg b/hybrid-summer/.config/eww/images/svg/wiki.svg
new file mode 100644
index 000000000..e7d3a8c67
--- /dev/null
+++ b/hybrid-summer/.config/eww/images/svg/wiki.svg
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/images/textures/acrylic.png b/hybrid-summer/.config/eww/images/textures/acrylic.png
new file mode 100644
index 000000000..028b188b5
Binary files /dev/null and b/hybrid-summer/.config/eww/images/textures/acrylic.png differ
diff --git a/hybrid-summer/.config/eww/images/wallpaper/wallpaper b/hybrid-summer/.config/eww/images/wallpaper/wallpaper
new file mode 100644
index 000000000..abf8dbb23
Binary files /dev/null and b/hybrid-summer/.config/eww/images/wallpaper/wallpaper differ
diff --git a/hybrid-summer/.config/eww/modules/activewindow.yuck b/hybrid-summer/.config/eww/modules/activewindow.yuck
new file mode 100755
index 000000000..6e510dddd
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/activewindow.yuck
@@ -0,0 +1,26 @@
+(defwidget activewindow []
+ (box
+ :valign "center"
+ :space-evenly false
+ :orientation "v"
+ (box
+ (eventbox
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ :onhover "${EWW_CMD} update rev_center_ws=true"
+ (box
+ :space-evenly false
+ :class "activewin"
+ (revealer
+ :transition "slideright"
+ :reveal "${!music_reveal}"
+ :duration "300ms"
+ (label
+ :limit-width 40
+ :text "${awin.title}"
+ )
+ )
+ )
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/audiolevels.yuck b/hybrid-summer/.config/eww/modules/audiolevels.yuck
new file mode 100755
index 000000000..da529c3a6
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/audiolevels.yuck
@@ -0,0 +1,71 @@
+(defwidget audiolevels[]
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "sliders"
+ (label
+ :text "Volume mixer"
+ :xalign 0
+ :style "font-weight: bold;"
+ )
+ (for i in audiojson
+ (eventbox
+ :onscroll "pactl set-sink-input-volume ${i.sink} $(echo {} | sed -e \"s/up/+10/g\" -e \"s/down/-10/g\")% &"
+ :onrightclick "pactl set-sink-input-volume ${i.sink} 100%"
+ (box
+ :space-evenly false
+ :orientation "v"
+ ; (label :class "time" :text "DEBUG:${i}")
+ (centerbox
+ :space-evenly false
+ :orientation "h"
+ ; :halign "center"
+ (label
+ :xalign 0
+ :class "audiotext"
+ :limit-width 42
+ :style "font-size: 13pt; padding-bottom: 2px;"
+ :text "${i.name} (#${i.sink})"
+ )
+ (label
+ :xalign 0
+ :class "audiotext"
+ :limit-width 30
+ :style "font-size: 13pt; padding-bottom: 2px;"
+ :text ""
+ )
+ (box :orientation "v"
+ (label
+ :xalign 1
+ :class "audiotext"
+ :style "font-size: 13pt; padding-bottom: 2px;"
+ :text "${i.volume}%"
+ )
+ )
+ )
+ (box
+ :class "volume-slider-box"
+ :space-evenly false
+ (eventbox
+ ; :class "volume-icon"
+ :onclick "pactl set-sink-input-volume ${i.sink} 0%"
+ :onscroll "pactl set-sink-input-volume ${i.sink} $(echo {} | sed -e \"s/up/+10/g\" -e \"s/down/-10/g\")%"
+ :onrightclick "pactl set-sink-input-volume ${i.sink} 100%"
+ (label
+ :style "font-family: 'Material Symbols Rounded';"
+ :text "${volume.icon}"
+ )
+ )
+ (scale
+ :class "sliderbg"
+ :value {i.volume}
+ :class "volume-bar slider"
+ :onchange "pactl set-sink-input-volume ${i.sink} {}%"
+ :tooltip "${i.name}: ${i.volume}%"
+ )
+ )
+ )
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/bluetooth.yuck b/hybrid-summer/.config/eww/modules/bluetooth.yuck
new file mode 100755
index 000000000..bb84e9668
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/bluetooth.yuck
@@ -0,0 +1,13 @@
+(defwidget bluetooth []
+ (eventbox
+ :onrightclick "gnome-control-center bluetooth"
+ (button
+ :class "module-bt module icon"
+ :onclick "blueberry"
+ :onrightclick "gnome-control-center bluetooth"
+ :tooltip "${bluetooth.text} ${bluetooth.batt_icon}"
+ :style "color: ${bluetooth.color};"
+ {bluetooth.icon}
+ )
+ )
+)
diff --git a/hybrid-summer/.config/eww/modules/bright.yuck b/hybrid-summer/.config/eww/modules/bright.yuck
new file mode 100755
index 000000000..d45bfcaaf
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/bright.yuck
@@ -0,0 +1,15 @@
+(defwidget bright []
+ (box
+ :class "module"
+ (eventbox
+ :class "bright-icon"
+ :onscroll "echo $(echo {} | sed -e 's/down/-U 5/g' -e 's/up/-A 5/g' | xargs light) && scripts/bright osd"
+ (label
+ :valign "start"
+ :text {brightness.icon}
+ :class "bright-icon icon"
+ :tooltip "brightness ${round(brightness.level, 0)}%"
+ )
+ )
+ )
+)
diff --git a/hybrid-summer/.config/eww/modules/clock.yuck b/hybrid-summer/.config/eww/modules/clock.yuck
new file mode 100755
index 000000000..1a93b3890
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/clock.yuck
@@ -0,0 +1,51 @@
+(defwidget clock_module []
+ (eventbox
+ :onclick "${EWW_CMD} update popup='calendar'"
+ :class "${popup == 'calendar' ? 'calendar-win' : ''}"
+ :style "${rev_ontf ? 'background-color: #838383;' : ''}"
+ ; clock-module
+ (box
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "module"
+ :valign "start"
+ :orientation "v"
+ :style "min-width: 115px;"
+ (box
+ :space-evenly false
+ :halign "start"
+ (label :text "${time.hour}" :class "clock hour")
+ (label :text ":" :class "clock")
+ (label :text {time.minute} :class "clock minute")
+ )
+ (button
+ :style "background"
+ :halign "start"
+ :valign "start"
+ :class "date-clock"
+ :onclick "${EWW_CMD} update popup='calendar'"
+ "${time.day}, ${time.date}"
+ )
+
+ )
+ (revealer
+ :reveal "${popup == 'calendar'}"
+ :transition "slideright"
+ :duration "0ms"
+ (revealer
+ :reveal "${popup == 'calendar'}"
+ :transition "crossfade"
+ :duration "0ms"
+ (revealer
+ :reveal "${popup == 'calendar'}"
+ :transition "slidedown"
+ :duration "0ms"
+ (calendar)
+ )
+ )
+ )
+ )
+ )
+)
+
diff --git a/hybrid-summer/.config/eww/modules/editmode.yuck b/hybrid-summer/.config/eww/modules/editmode.yuck
new file mode 100755
index 000000000..24a9b89c7
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/editmode.yuck
@@ -0,0 +1,24 @@
+(defwidget editmode []
+ (eventbox
+ :cursor "col-resize"
+ :onhover "${EWW_CMD} update edit_hover=true"
+ :onhoverlost "${EWW_CMD} update edit_hover=false"
+ :onscroll "hyprctl dispatch splitratio $(echo {} | sed -e \"s/up/-0.1/g\" -e \"s/down/+0.1/g\")"
+ :onmiddleclick "scripts/toggle-compactmode.sh"
+ :onrightclick "scripts/toggle-compactmode.sh --toggle --border 0"
+ (checkbox
+ :class "module-button${editing ? '-true' : (edit_hover ? '-hover' : '')} edit-mode-checkbox-${editing}"
+ :onchecked "scripts/editmode.sh enable"
+ :onunchecked "scripts/editmode.sh disable"
+ :tooltip "Edit mode (middle-click to move, right-click to resize windows)"
+ (image
+ :path "images/svg/tournaments.svg"
+ :image-height 33
+ :image-width 33
+ :style "
+ margin-left: -5.5px;
+ "
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/gamebar.json b/hybrid-summer/.config/eww/modules/gamebar.json
new file mode 100644
index 000000000..efb2c03f8
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/gamebar.json
@@ -0,0 +1,42 @@
+{
+ "controls": {
+ "at": [
+ 960,
+ 65
+ ],
+ "size": [
+ 530,
+ 70
+ ]
+ },
+ "capture": {
+ "at": [
+ 202,
+ 131.5
+ ],
+ "size": [
+ 338,
+ 197
+ ]
+ },
+ "audio": {
+ "at": [
+ 202,
+ 644.5
+ ],
+ "size": [
+ 338,
+ 789
+ ]
+ },
+ "performance": {
+ "at": [
+ 1718,
+ 932
+ ],
+ "size": [
+ 338,
+ 230
+ ]
+ }
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/gamebar_topleft_size.json b/hybrid-summer/.config/eww/modules/gamebar_topleft_size.json
new file mode 100644
index 000000000..9635a8ef7
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/gamebar_topleft_size.json
@@ -0,0 +1,42 @@
+{
+ "controls": {
+ "at": [
+ 495,
+ 30
+ ],
+ "size": [
+ 930,
+ 70
+ ]
+ },
+ "capture": {
+ "at": [
+ 33,
+ 33
+ ],
+ "size": [
+ 338,
+ 197
+ ]
+ },
+ "audio": {
+ "at": [
+ 33,
+ 250
+ ],
+ "size": [
+ 338,
+ 589
+ ]
+ },
+ "performance": {
+ "at": [
+ 1250,
+ 604
+ ],
+ "size": [
+ 338,
+ 230
+ ]
+ }
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/music.yuck b/hybrid-summer/.config/eww/modules/music.yuck
new file mode 100755
index 000000000..10267390f
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/music.yuck
@@ -0,0 +1,142 @@
+(defwidget osu-music-module []
+ (eventbox
+ :onscroll "echo $(echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%) && scripts/volume osd"
+ :onclick "scripts/toggle-music.sh &"
+ :onmiddleclick "playerctl play-pause"
+ :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
+ :onhover "${EWW_CMD} update music_hover=true"
+ :onhoverlost "${EWW_CMD} update music_hover=false"
+ (box
+ :space-evenly false
+ :class "module-button-pad-center"
+ (box
+ :space-evenly false
+ :class "module-button${music_open ? '-true' : (music_hover ? '-hover' : '')}"
+ (revealer ; dummy keep alive
+ :reveal false
+ :duration "0ms"
+ :transition "slideright"
+ (label :text "${mcover.image} ${cavajson[0]}")
+ )
+ (box
+ :space-evenly false
+ :valign "start"
+ ; :class "osu-music-box"
+ :class "osu-music-box"
+ ; (image
+ ; :path "images/svg/beatmaps.svg"
+ ; :image-width 33
+ ; :image-height 33
+ ; :class "osu-music-box-dummy"
+ ; )
+ (overlay
+ (box
+ :halign "center" :valign "center"
+ :class "bar-music-cover"
+ :style "background-image: url('eww_covers/cover_art_default')"
+ )
+ (box
+ :halign "center" :valign "center"
+ :class "bar-music-cover"
+ :style "background-image: url('${mcover.image}')"
+ )
+ (label
+ :class "bar-music-state"
+ :halign "center" :valign "center"
+ :style "
+ font-size: 18pt;
+ margin-bottom: -1px;
+ color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};
+ "
+ :text "${mplay == 'Playing' ? '' : ''}"
+ )
+ )
+ )
+ (revealer
+ :transition "slideright"
+ ; :reveal "${(music_reveal || osd_vol || (mname.title != '')) && !focus}"
+ :reveal true
+ :duration "300ms"
+ :class "music-ctl-revealer"
+ :onscroll "echo $(echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%) && scripts/volume osd"
+ :limit-width 20
+ (eventbox
+ :onscroll "echo $(echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%) && scripts/volume osd"
+ (box
+ :space-evenly false :orientation "h"
+ :width 421
+ (box
+ :space-evenly false :orientation "v"
+ :valign "center"
+ :class "music-ctl-revealer"
+ :hexpand true
+ (label
+ :class "music-title-bar"
+ :limit-width 50
+ :xalign 0
+ :style "
+ color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};
+ "
+ :text "${mname.title == '' ? 'Not playing' : mname.title}"
+ )
+ (revealer
+ :transition "slidedown"
+ :reveal "${mname.artist != ''}"
+ :duration "20ms"
+ (label
+ :class "music-artist-bar"
+ :limit-width 50
+ :xalign 0
+ :style "font-size: 11pt; font-family: 'Rubik';
+ color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};
+ "
+ :text "${mname.artist}"
+ )
+ )
+ )
+ (revealer
+ :reveal {music_hover}
+ :transition "slideleft"
+ :duration "400ms"
+ (revealer
+ :reveal {music_hover}
+ :transition "crossfade"
+ :duration "400ms"
+ (centerbox
+ :class "music-button-box-bar"
+ (button
+ :class "song-button-bar"
+ :style "
+ font-size: 30pt;
+ color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};
+ "
+ :onclick "playerctl previous" ""
+ )
+ (button
+ :class "song-button-bar"
+ :style "
+ font-size: 30pt;
+ color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};
+ "
+ :onclick "playerctl play-pause"
+ "${music.status != '' ? music.status : ''}"
+ )
+ (button
+ :class "song-button-bar"
+ :style "
+ font-size: 30pt;
+ color: ${mcover.color.colors.color7 == 'null' ? 'white' : mcover.color.colors.color7};
+ "
+ :onclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
+ ""
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/net.yuck b/hybrid-summer/.config/eww/modules/net.yuck
new file mode 100755
index 000000000..4a9adad73
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/net.yuck
@@ -0,0 +1,19 @@
+(defwidget net []
+ (box
+ :class "module"
+ (eventbox
+ :class "net-icon"
+ :onclick "iwgtk &"
+ :onrightclick "gnome-control-center network &"
+ :tooltip {net.essid}
+ ; :style "color: ${net.color};"
+ (label
+ :valign "start"
+ :text {net.icon}
+ :class "net-icon"
+ :tooltip {net.essid}
+ ; :style "color: ${net.color};"
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/pinned-apps.json b/hybrid-summer/.config/eww/modules/pinned-apps.json
new file mode 100644
index 000000000..a127007bd
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/pinned-apps.json
@@ -0,0 +1,21 @@
+[
+ [
+ {"name": "File Explorer", "exec": "gtk-launch org.gnome.Nautilus.desktop &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/nautilus.svg"},
+ {"name": "Firefox", "exec": "gtk-launch firefox &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/firefox.svg"},
+ {"name": "Terminal", "exec": "gtk-launch org.codeberg.dnkl.foot.desktop &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/foot.svg"},
+ {"name": "Paint", "exec": "gtk-launch org.kde.kolourpaint.desktop &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/kolourpaint.svg"},
+ {"name": "Settings", "exec": "gtk-launch org.gnome.Settings.desktop &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/gnome-control-center.svg"},
+ {"name": "Notepad", "exec": "gtk-launch org.gnome.TextEditor &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/org.gnome.TextEditor.svg"}
+ ],
+ [
+ {"name": "Clock", "exec": "gtk-launch org.gnome.clocks &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/gnome-clocks.svg"},
+ {"name": "Edge", "exec": "/usr/bin/microsoft-edge-stable --password-store=gnome --enable-features=UseOzonePlatform --ozone-platform=wayland --gtk-version=4 &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/microsoft-edge.svg"},
+ {"name": "Visual Studio Code", "exec": "code --password-store=gnome --enable-features=UseOzonePlatform --ozone-platform=wayland &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/code.svg"},
+ {"name": "Calculator", "exec": "gtk-launch org.gnome.Calculator &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/org.gnome.Calculator.svg"},
+ {"name": "GitHub Desktop", "exec": "gtk-launch github-desktop &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/github-desktop.svg"},
+ {"name": "Photos", "exec": "gtk-launch org.gnome.eog &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/eog.svg"}
+ ],
+ [
+ {"name": "VLC Media Player", "exec": "gtk-launch vlc &", "icon": "/usr/share/icons/Win11-dark/apps/scalable/vlc.svg"}
+ ]
+]
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/recommended.json b/hybrid-summer/.config/eww/modules/recommended.json
new file mode 100644
index 000000000..c8ff0f2d2
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/recommended.json
@@ -0,0 +1,9 @@
+[
+ [
+ {"name": "This is NOT Windows 11", "subtext": "Check out my configs", "exec": "xdg-open 'https://github.com/end-4/dots-hyprland/tree/main' &", "icon": "images/icons/github.svg"},
+ {"name": "Get Hyprland help", "subtext": "+ chance to be called a retard", "exec": "xdg-open 'https://discord.com/invite/hQ9XvMUjjr' &", "icon": "images/icons/discord.png"}
+ ],
+ [
+ {"name": "r/unixporn", "subtext": "The best kinda porn", "exec": "xdg-open 'https://www.reddit.com/r/unixporn/' &", "icon": "images/icons/reddit.svg"}
+ ]
+]
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/searchbutton.yuck b/hybrid-summer/.config/eww/modules/searchbutton.yuck
new file mode 100755
index 000000000..35922f07d
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/searchbutton.yuck
@@ -0,0 +1,17 @@
+(defwidget searchbutton []
+ (eventbox
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ :class "osettings-toggle-button-${open_overview}"
+ :onclick "scripts/toggle-overview.sh"
+ :onmiddleclick "scripts/toggle-overview.sh"
+ :onrightclick "scripts/toggle-overview.sh"
+ (box
+ :class "module-button-pad-center"
+ (image
+ :path "images/svg/search.svg"
+ :image-width 33
+ :image-height 33
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/sys.yuck b/hybrid-summer/.config/eww/modules/sys.yuck
new file mode 100755
index 000000000..74aff928a
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/sys.yuck
@@ -0,0 +1,370 @@
+(defwidget sys []
+ (eventbox
+ :class "${popup == 'system-menu' ? 'system-menu-box' : 'sysbar'}"
+ ; :onscroll "echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%"
+ (box
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "module"
+ :space-evenly false
+ :spacing 5
+ :halign "end"
+ (syscpu)
+ (sysmem)
+ (sysbatt)
+ ; (settingscog)
+ )
+ (revealer
+ :reveal "${popup == 'system-menu'}"
+ :transition "slideright"
+ :duration "0ms"
+ (revealer
+ :reveal "${popup == 'system-menu'}"
+ :transition "crossfade"
+ :duration "0ms"
+ (revealer
+ :reveal "${popup == 'system-menu'}"
+ :transition "slidedown"
+ :duration "0ms"
+ (box
+ :space-evenly false
+ (box
+ ; :class "system-menu-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "top-row"
+ :space-evenly false
+ (label :class "time" :text "${time.hour}:${time.minute}")
+ (box
+ :class "date-box"
+ :space-evenly false
+ (label :class "date" :text "${time.day},")
+ (label :class "date" :text "${time.date}")
+ )
+ )
+
+ (box
+ :class "system-row"
+ :space-evenly false
+ (box
+ :class "wifi-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element"
+ :space-evenly false
+ (button
+ ; :class "wifi-button"
+ :onclick "scripts/net toggle"
+ :style "font-family: Material Symbols Rounded;"
+ {net.icon}
+ )
+ (label :class "separator" :text "|")
+ (button
+ :class "wifi-arrow-btn"
+ :style "font-family: Material Symbols Rounded;"
+ :onclick "nm-connection-editor &"
+ ""
+ )
+ )
+ (label :style "font-size: 12pt;" :class "sys-toggle" :text {net.essid} :xalign 0.5 :limit-width 15)
+ )
+
+ (box
+ :class "bluetooth-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element icon"
+ :space-evenly false
+ (button
+ :class "bluetooth-button"
+ :onclick "scripts/bluetooth toggle"
+ :style "font-family: 'Material Symbols Rounded';"
+ {bluetooth.icon}
+ )
+ (label :class "separator" :text "|")
+ (button
+ :class "bluetooth-arrow-btn"
+ :onclick "blueberry"
+ ""
+ )
+ )
+ (label
+ :style "font-size: 12pt;"
+ :text {bluetooth.text}
+ :xalign 0.5
+ :class "sys-toggle"
+ :tooltip "${bluetooth.text} ${bluetooth.batt_icon}"
+ :limit-width 15
+ )
+ )
+
+ (box
+ :class "airplane-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element"
+ (button
+ :class "airplane-button"
+ :onclick "scripts/airplane toggle"
+ airplane
+ )
+ )
+ (label :style "font-size: 12pt;" :text "Airplane Mode" :xalign 0.5 :limit-width 16)
+ )
+
+ (box
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element"
+ (button
+ :halign "end"
+ :onclick "wlogout -p layer-shell &"
+ ""
+ )
+ )
+ (label
+ :style "font-size: 12pt;"
+ :text "Power"
+ :class "sys-toggle"
+ :xalign 0.5
+ :limit-width 16
+ )
+ )
+ )
+ (audiolevels)
+ (box
+ :class "system-info-box"
+ :style "margin-bottom: 17px;"
+ ; cpu
+ (box
+ :class "sys-box"
+ :space-evenly false
+ :halign "start"
+ (circular-progress
+ :value "${EWW_CPU.avg}"
+ :class "sys-cpu"
+ :thickness 3
+ (label
+ :text ""
+ :class "sys-icon-cpu icon")
+ )
+ (box
+ :orientation "v"
+ :vexpand false
+ (label
+ :text "CPU"
+ :halign "start"
+ :class "sys-text-cpu"
+ :style "font-size: 12pt;"
+ )
+ (label
+ :text "${round(EWW_CPU.avg,2)}%"
+ :halign "start"
+ :class "sys-text-sub"
+ :style "font-size: 12pt;"
+ )
+ (label
+ :text "${EWW_CPU.cores[0].freq} MHz"
+ :halign "start"
+ :class "sys-text-sub"
+ :style "font-size: 12pt;"
+ )
+ )
+ )
+
+ ; memory
+ (box
+ :class "sys-box"
+ :space-evenly false
+ :halign "end"
+ (circular-progress
+ :value {memory.percentage}
+ :class "sys-mem"
+ :thickness 3
+ (label
+ :text ""
+ :class "sys-icon-mem icon"
+ )
+ )
+ (box
+ :orientation "v"
+ (label :style "font-size: 12pt;" :text "Memory" :halign "start" :class "sys-text-mem")
+ (label :style "font-size: 12pt;" :text "${memory.used} / ${memory.total}" :halign "start" :class "sys-text-sub")
+ (label :style "font-size: 12pt;" :text "Swap ${memory.swapused} / ${memory.swaptotal}" :halign "start" :class "sys-text-sub")
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwidget syscpu []
+ (revealer
+ :reveal "${((popup == 'system-menu' || EWW_CPU.avg>= 50) || force_sys_rev)}"
+ :transition "slideleft"
+ :duration "300ms"
+ :onscroll "echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%"
+ (eventbox
+ :class "cpubar"
+ :space-evenly false
+ (box
+ :class "cpubar"
+ :space-evenly false
+ (circular-progress
+ :value "${EWW_CPU.avg}"
+ :class "cpubar-circle"
+ :thickness 4
+ :start-at 75
+ (box
+ :tooltip "CPU: ${round(EWW_CPU.avg,0)}%"
+ :class "inside-circle"
+ (label :class "icon-text" :text "")
+ )
+ )
+ (revealer
+ :transition "slideright"
+ :reveal "${sys_rev || popup == 'system-menu' || force_sys_rev || EWW_CPU.avg>= 50}"
+ :duration "300ms"
+ :class "sys-menu"
+ :onclick "${EWW_CMD} update popup='system-menu'"
+ (cpumenu)
+ )
+ )
+ )
+ )
+)
+
+(defwidget sysmem []
+ (eventbox
+ :class "membar"
+ :space-evenly false
+ (box
+ :class "membar"
+ :space-evenly false
+ (circular-progress
+ :value {memory.percentage}
+ :class "membar-circle"
+ :thickness 4
+ :start-at 75
+ (box
+ :class "inside-circle"
+ :tooltip "RAM: ${round(memory.percentage,0)}%"
+ (label :class "icon-text" :text "")
+ )
+ )
+ (revealer
+ :transition "slideright"
+ :reveal "${sys_rev || force_sys_rev || memory.percentage + memory.swappercentage >= 120}"
+ :duration "300ms"
+ :class "sys-menu"
+ :onclick "${EWW_CMD} update popup='system-menu'"
+ (memmenu)
+ )
+ )
+ )
+)
+
+(defwidget sysbatt []
+ (eventbox
+ :onscroll "echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%"
+ :class "batbar"
+ :space-evenly false
+ (box
+ :class "batbar"
+ :space-evenly false
+ (circular-progress
+ :value "${EWW_BATTERY["BATT"].capacity}"
+ :class "batbar-circle"
+ :thickness 4
+ :start-at 75
+ :style "border-radius: 99px; color: ${battery.circolor};"
+ (box
+ :class "inside-circle"
+ :tooltip "Battery: ${EWW_BATTERY["BATT"].capacity}%"
+ :onclick "${EWW_CMD} update popup='system-menu'"
+ :style "border-radius: 99px; color: ${battery.color}; background-color: ${battery.bgcolor};"
+ (label :class "icon-text" :text "")
+ )
+ )
+ (revealer
+ :transition "slideright"
+ :reveal true
+ :duration "300ms"
+ :class "sys-menu"
+ (sysmenu)
+ )
+ )
+ )
+)
+
+(defwidget cpumenu[]
+ (eventbox
+ :class "cpu-menu"
+ (box
+ :orientation "h"
+ :space-evenly false
+ (label :class "cpu-menu icon" :text "")
+ (label :class "cpu-menu" :text "${round(EWW_CPU.avg,0)}%")
+ )
+ )
+)
+
+(defwidget memmenu[]
+ (eventbox
+ (box
+ :space-evenly false
+ (label :class "mem-menu-left" :text "")
+ (label :class "mem-menu-left" :text "${memory.used}")
+ (label :class "mem-menu-mid" :text "")
+ (label :class "mem-menu-right" :text "${memory.swapused}")
+ )
+ )
+)
+
+(defwidget sysmenu[]
+ (eventbox
+ :class "sys-menu"
+ :style "color: ${battery.color}"
+ (box
+ :space-evenly false
+ (label :class "sys-menu-charge" :text "${battery.quickicon}")
+ (label :class "batt-percentage" :text "${EWW_BATTERY["BATT"].capacity}%")
+ ; (revealer
+ ; :reveal "${popup == 'system-menu' || force_sys_rev}"
+ ; :transition "slideright"
+ ; :duration "300ms"
+ ; :class "sys-menu"
+ ; (label :class "batt-percentage" :text " | ${battery.wattage} | ${battery.status}")
+ ; )
+ )
+ )
+)
+
+(defwidget settingscog[]
+ (eventbox
+ :onscroll "echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%"
+ :class "settings-icon"
+ (revealer
+ :transition "slideright"
+ :reveal true
+ :duration "300ms"
+ :onclick "${EWW_CMD} update popup='system-menu'"
+ (button
+ :class "sys-menu-button"
+ :onclick "${EWW_CMD} update popup='system-menu'"
+ " "
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/taskbar.json b/hybrid-summer/.config/eww/modules/taskbar.json
new file mode 100644
index 000000000..eb76c2c3d
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/taskbar.json
@@ -0,0 +1,34 @@
+[
+ {
+ "address": [],
+ "class": "org.gnome.Nautilus",
+ "count": 0,
+ "icon": "/usr/share/icons/Win11-dark/apps/scalable/nautilus.svg",
+ "workspace": [],
+ "exec": "nautilus --new-window &"
+ },
+ {
+ "address": [],
+ "class": "firefox",
+ "count": 0,
+ "icon": "/usr/share/icons/Win11-dark/apps/scalable/firefox.svg",
+ "workspace": [],
+ "exec": "firefox &"
+ },
+ {
+ "address": [],
+ "class": "code-url-handler",
+ "count": 0,
+ "icon": "/usr/share/icons/Win11-dark/apps/scalable/code.svg",
+ "workspace": [],
+ "exec": "code --password-store=gnome --enable-features=UseOzonePlatform --ozone-platform=wayland &"
+ },
+ {
+ "address": [],
+ "class": "foot",
+ "count": 0,
+ "icon": "/usr/share/icons/Win11-dark/apps/scalable/foot.svg",
+ "workspace": [],
+ "exec": "foot &"
+ }
+]
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/taskbar.yuck b/hybrid-summer/.config/eww/modules/taskbar.yuck
new file mode 100755
index 000000000..df7b18a88
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/taskbar.yuck
@@ -0,0 +1,30 @@
+(defwidget taskbar []
+ (box
+ :orientation "h"
+ :space-evenly false
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ (for app in tasks
+ (overlay
+ (eventbox
+ :class "taskbar-button-only"
+ :onclick "${app.count > 0 ? ('hyprctl dispatch workspace ' + app.workspace[0] + ' &') : (app.exec)}"
+ ; :tooltip "${app.class}"
+ ; :onclick "hyprctl dispatch workspace ${app.workspace[0]} && hyprctl dispatch focusdow address:${app.address[0]} &"
+ (box
+ :class "taskbar-button-pad"
+ (box
+ :class "taskbaricon"
+ :style "
+ background-image: url('${app.icon}');
+ ${app.class == awin.class ? 'background-color: rgba(108, 112, 134, 0.4); border: 1px solid rgba(108, 112, 134, 0.15); border-top: 1px solid rgba(108, 112, 134, 0.15);' : ''}
+ "
+ )
+ )
+ )
+ (box :class "taskbar-indicator-${app.class == awin.class ? 'true' : (app.count > 0 ? 'false' : 'none')}")
+ )
+ )
+ ; Dummy keep alive
+ (revealer :transition "slideright" :reveal false (label :text {awin.class}))
+ )
+)
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/user.yuck b/hybrid-summer/.config/eww/modules/user.yuck
new file mode 100755
index 000000000..1a30d25be
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/user.yuck
@@ -0,0 +1,16 @@
+(defwidget user []
+ (box
+ :space-evenly false
+ :orientation "h"
+ :style "padding-left: 28px; padding-right: 22px;"
+ (label
+ :class "username"
+ :style "margin-right: 5px;"
+ :text "${username == "" ? username_default : username}"
+ )
+ (box
+ :class "userpic"
+ :style "background-image: url('/var/lib/AccountsService/icons/${username == "" ? username_default : username}');"
+ )
+ )
+)
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/variables.yuck b/hybrid-summer/.config/eww/modules/variables.yuck
new file mode 100755
index 000000000..132a63b9f
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/variables.yuck
@@ -0,0 +1,146 @@
+; Const and bg scripts
+(defvar FILE_BROWSER "nautilus")
+(defvar RES_WIDTH 1920)
+(defvar RES_HEIGHT 1080)
+(defvar BG_ZOOM 1.2)
+(defvar OVERVIEW_SCALE 0.18)
+(defvar OVERVIEW_SCALE_TEXT 0.45)
+(defvar OVERVIEW_SCALE_SUBTEXT 0.35)
+(defvar wsloop "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]")
+(defvar weekdays '[{"day":"Mo","today":"0"},{"day":"Tu","today":"0"},{"day":"We","today":"0"},{"day":"Th","today":"0"},{"day":"Fr","today":"0"},{"day":"Sa","today":"0"},{"day":"Su","today":"0"}]')
+(defvar ws-icons '["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]')
+(deflisten ICON_GET `scripts/get_open_icons`)
+
+; Vars
+(defvar music_reveal false)
+(defvar oquery "")
+(defvar sys_menu_open true)
+(defvar date_rev false)
+(defvar sys_rev false)
+(defvar force_sys_rev true)
+(defvar editing false)
+(defvar osd_track false)
+(defvar osd_vol false)
+(defvar osd_bright false)
+(defvar selected '')
+(defvar overview_hover_name "Activities Overview")
+(defvar overview_query "")
+(defvar overview_results "")
+(defvar open_overview false)
+(defvar popup "none")
+(defvar right_hover false)
+(defvar ontf_hover false)
+(defvar music_hover false)
+(defvar edit_hover false)
+(defvar themer_hover false)
+(defvar calendar_hover false)
+(defvar rev_center_ws true)
+(defvar music_open false)
+(defvar themer_open false)
+(defvar focus false)
+(defvar win_hover false)
+(defvar winnotif_hover false)
+(defvar winactions_hover false)
+(defvar winstart_allapps false)
+(defvar monthshift 0)
+(defvar calendartitle '')
+(defvar winsearch '')
+(defvar winsearch_results "")
+(defvar winsearch_actions "")
+(defvar winsearch_actions_type "")
+(defvar winsearch_prefix "")
+(defvar allapps '')
+(defvar allapps_get '')
+(defvar compact false)
+(defvar resource_metric "cpu")
+
+; Dynamic animation: different for open and close
+(defvar rev_wincalendar true)
+(defvar rev_winactions false)
+(defvar rev_winnotif false)
+(defvar rev_winstart false)
+(defvar rev_winpowermenu false)
+(defvar rev_ostg false)
+(defvar rev_ontf false)
+(defvar rev_themer false)
+(defvar rev_dash false)
+(defvar rev_calendar false)
+(defvar rev_wingamebar false)
+(defvar rev_winnews false)
+(defvar rev_dashfs false)
+(defvar rev_bottombar false)
+
+(defvar anim_open_ostg true)
+(defvar anim_open_ontf true)
+(defvar anim_open_search true)
+(defvar anim_open_themer true)
+(defvar anim_open_music true)
+(defvar anim_open_dash true)
+(defvar anim_open_calendar true)
+(defvar anim_open_winactions true)
+(defvar anim_open_winnotif true)
+(defvar anim_open_winstart true)
+(defvar anim_open_winpowermenu true)
+(defvar anim_open_wingamebar true)
+(defvar anim_open_winnews true)
+(defvar anim_open_dashfs true)
+(defvar anim_open_bottombar true)
+
+; Time
+(defpoll time :interval "5s" `date +'{"date": "%d/%m", "hour": "%H", "minute": "%M", "monthname": "%B", "day": "%A", "year": "%Y"}'`)
+(defpoll day_only :interval "5s" "date '+%e' | sed 's/ //g'")
+(defpoll time12 :interval "10s" `date '+%l:%M %^P' | sed 's/am/AM/g' | sed 's/pm/PM/g'`)
+
+; Listeners
+(deflisten airplane "scripts/airplane")
+(deflisten battery "scripts/battery")
+(deflisten bluetooth "scripts/bluetooth")
+(deflisten brightness "scripts/brightness")
+(deflisten memory "scripts/memory")
+(deflisten music "scripts/music")
+(deflisten music_cover "scripts/music cover")
+(deflisten notifications "scripts/notifications")
+(deflisten notif_icons :initial `{"icon": "", "paused": false, "toggle_icon": ""}` "scripts/notifications icons")
+(deflisten net "scripts/net")
+(deflisten volume "scripts/volume")
+(deflisten workspace "scripts/workspaces")
+(deflisten winjson "scripts/winlist")
+(deflisten winicons "scripts/appicons")
+(deflisten winnums "scripts/winnumbers")
+(deflisten hyprjson "scripts/hyprsettings")
+(deflisten awin "scripts/activewin")
+(deflisten audiojson "scripts/audiolevels")
+(deflisten mcover "scripts/music cover")
+(deflisten mname "scripts/music name")
+(deflisten mplay "playerctl -F metadata -f '{{status}}'")
+(deflisten wsjsona "scripts/overview-wrapper1")
+(deflisten wsjsonb "scripts/overview-wrapper2")
+; (deflisten appoverview "scripts/overview-wrapper")
+; (deflisten wsthumbs "scripts/overview-thumbnails") ; slow, so nope
+(deflisten activews :initial 1 "scripts/activews")
+(deflisten tasks "scripts/taskbarloop")
+(deflisten pinnedapps "cat modules/pinned-apps.json | gojq -c -M")
+(deflisten recommended "cat modules/recommended.json | gojq -c -M")
+(deflisten gamebarwidgets "cat modules/gamebar.json | gojq -c -M")
+(deflisten audiodevice `pactl --format=json list sinks | gojq -c -r '.[0]["description"]'`)
+(deflisten cavajson `scripts/cavajson`)
+(deflisten mousepos `scripts/mousetrack`)
+
+(defvar username_default "username")
+(defvar quote_content `["haha pointers hee hee i love pointe-\\\nProcess Vaxry exited with signal SIGSEGV", "I have a hentai anal gif playing in my base", "Amazing XXXmas. Cute femboy was fucked\\\nin the ass under the Christmas tree"]`)
+(defvar quote_author `["- vaxry", "- vaxry", "- Hyprland community, 2022"]`)
+
+; Fetch stuff
+(defpoll uptime :interval "1m" "uptime -p | sed -e 's/up //;s/ hours,/h/;s/ minutes/m/'")
+(defpoll packages :interval "5m" `pacman -Q | wc -l`)
+(defpoll kernel :interval "5m" `uname -r`)
+(defpoll username :interval "5m" :initial "username" `whoami`)
+(defpoll hostname :interval "5m" :initial "distro" `uname -n`)
+(defpoll wm :interval "5m" :initial "Hyprland" `echo $XDG_CURRENT_DESKTOP`)
+(defpoll diskfreepercent :interval "5m" `echo $(df --output=pcent / | tr -dc '0-9')`)
+(defpoll diskused :interval "5m" `df -h --output=used / | awk 'NR==2{print $1}'`)
+(defpoll diskfree :interval "5m" `df -h --output=avail / | awk 'NR==2{print $1}'`)
+(defpoll disksize :interval "5m" `df -h --output=size / | awk 'NR==2{print $1}'`)
+(deflisten cpuname `cat /proc/cpuinfo | grep 'model name' | awk -F: '{print $2}' | head -n 1`)
+(defpoll waifu_get :interval "5m" `python3 scripts/waifupics.py`)
+(defpoll calendar :interval "15m" `eww update monthshift=0 && eww update calendartitle="$(date '+%B %Y')" && scripts/calendarlayout`)
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/volume.yuck b/hybrid-summer/.config/eww/modules/volume.yuck
new file mode 100755
index 000000000..af4970df2
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/volume.yuck
@@ -0,0 +1,33 @@
+(defwidget volume-module []
+ (box
+ :class "vol-menu"
+ (eventbox
+ ; :class "vol-menu"
+ :onscroll "echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%"
+ :onrightclick "pavucontrol"
+ :onclick "scripts/volume mute SINK"
+ (box
+ (label
+ ; :class "vol-menu"
+ :tooltip "volume ${volume.percent}%"
+ :style "font-family: 'Material Symbols Rounded';"
+ :text "${volume.icon}"
+ :valign "start"
+ )
+ (label :valign "start" :text "${volume.percent}%")
+ )
+ )
+ ; (volmenu)
+ )
+)
+
+(defwidget volmenu[]
+ (eventbox
+ :class "vol-menu"
+ :onscroll "echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%"
+ :onrightclick "pavucontrol"
+ :onclick "scripts/volume mute SINK"
+ :valign "start"
+ (label :class "vol-menu" :text "${volume.percent}%")
+ )
+)
diff --git a/hybrid-summer/.config/eww/modules/winctl.yuck b/hybrid-summer/.config/eww/modules/winctl.yuck
new file mode 100755
index 000000000..7750ff9aa
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/winctl.yuck
@@ -0,0 +1,99 @@
+(defwidget win-ws[]
+ (eventbox
+ ; :onhoverlost "${EWW_CMD} close win-workspace"
+ (box
+ :space-evenly false
+ :orientation "v"
+ :class "system-menu-box"
+ ; :style "background-color: $bg; color: #A9B1D6; padding-bottom: .6rem; background-color: ${awin == winjson[i].title ? '#7AA2F7' : '$bg'};"
+ :style "background-color: $bg; color: #A9B1D6; padding-bottom: .6rem; background-color: $bg};"
+ ; (label :text "${winjson}" ) ; DEBUG
+ (label
+ :class "winws-title"
+ :text "Activities"
+ :xalign 0.5
+ )
+ (for i in winnums
+ (eventbox
+ :class "winws-evbox"
+ :onscroll "hyprctl dispatch movetoworkspacesilent $((${winjson[i].workspace.id}$(echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\"))),address:${winjson[i].address}"
+ :onclick "hyprctl dispatch focuswindow address:${winjson[i].address} && ${EWW_CMD} close win-workspace"
+ :onmiddleclick "hyprctl dispatch closewindow address:${winjson[i].address}"
+ (centerbox ;App icon & info
+ :class "winws"
+ :space-evenly false
+ :orientation "h"
+ (box
+ :space-evenly false
+ :orientation "h"
+ (label
+ :class "appicon"
+ :style "background-image: url(\"${winicons[i]}\");"
+ :text ""
+ )
+ (box
+ :space-evenly false
+ :orientation "v"
+ (label
+ :halign "start"
+ :class "wintext"
+ :text "${winjson[i].title}"
+ :limit-width 44
+ :xalign 0
+ )
+ (label
+ :halign "start"
+ :class "winsubtext"
+ :text "${winjson[i].class}"
+ :limit-width 35
+ :xalign 0
+ )
+ )
+ )
+ (label
+ :class "wintext"
+ :text ""
+ :limit-width 1
+ :xalign 0
+ )
+ (box ; Workspace number
+ :space-evenly false
+ :orientation "h"
+ :halign "end"
+ :style "padding-left: 30px;"
+ (label
+ :halign "end"
+ :class "wintext"
+ ; :text "[ ${winjson[i].workspace.id} ]"
+ :xalign 1
+ )
+ (for w in wsloop
+ (button
+ :onclick "hyprctl dispatch movetoworkspacesilent ${w+1},address:${winjson[i].address}"
+ :class "wschoose"
+ :style "font-size: 16pt; color: ${(winjson[i].workspace.id == w+1) ? mcover.color.colors.color7 : 'rgba(108, 112, 134, 0.5)'};"
+ ; "hyprctl dispatch movetoworkspacesilent ${w},address:${winjson[i].address}"
+ "${ws-icons[w]}"
+ ; "●"
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwidget winctl []
+ (box
+ :space-evenly false
+ :orientation "h"
+ (eventbox
+ :valign "start"
+ ; :class "winctl module"
+ :onscroll "hyprctl dispatch splitratio $(echo {} | sed -e \"s/up/-0.1/g\" -e \"s/down/+0.1/g\")"
+ (label :class "winctl" :text "[ Split ]")
+ )
+ )
+)
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/winstuff.yuck b/hybrid-summer/.config/eww/modules/winstuff.yuck
new file mode 100755
index 000000000..d1fe37b22
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/winstuff.yuck
@@ -0,0 +1,115 @@
+(defwidget winstarticon []
+ (eventbox
+ :class "winbutton-only thewinbutton"
+ :onclick "scripts/toggle-winstart.sh &"
+ :onmiddleclick "playerctl play-pause"
+ :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
+ :onscroll "echo $(echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%) && scripts/volume osd"
+ (box
+ :class "winbutton-pad"
+ (box
+ :class "winstarticon-${rev_winstart} winbutton-${rev_winstart}"
+ )
+ )
+ )
+)
+
+(defwidget winactions []
+ (eventbox
+ :class "winbutton"
+ :onhover "${EWW_CMD} update winactions_hover=true &"
+ :onhoverlost "${EWW_CMD} update winactions_hover=false &"
+ :onclick "scripts/toggle-winactions.sh &"
+ :onscroll "echo $(echo {} | sed -e 's/down/-U 3/g' -e 's/up/-A 3/g' | xargs light) && scripts/brightness osd &"
+ (box
+ :class "winbutton-pad"
+ (box
+ :class "wintimedate winbutton-${winactions_hover || rev_winactions}"
+ :space-evenly false
+ (box
+ :orientation "h"
+ :space-evenly false
+ (image :class "winicon" :path "images/svg/dark/wifi${net.level}.svg")
+ (image :class "winicon" :path "images/svg/dark/vol${volume.audio == 1 ? round(volume.percent / 33, 0) : 'mute'}.svg")
+ (image :class "winicon" :path "images/svg/dark/bat${round(battery.percentage / 10, 0)}.svg")
+ )
+ )
+ )
+ )
+)
+
+(defwidget windate []
+ (eventbox
+ :class "winbutton"
+ :onhover "${EWW_CMD} update winnotif_hover=true &"
+ :onhoverlost "${EWW_CMD} update winnotif_hover=false &"
+ :onclick "scripts/toggle-winnotif.sh &"
+ :onscroll "echo $(echo {} | sed -e 's/down/-/g' -e 's/up/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.03%) && scripts/volume osd"
+ (box
+ :class "winbutton-pad"
+ (box
+ :class "wintimedate winbutton-${winnotif_hover || rev_winnotif}"
+ :space-evenly false
+ (box
+ :orientation "v"
+ :space-evenly false
+ (box
+ :space-evenly false
+ :halign "end"
+ :class "wintime"
+ (label :text "${time.hour}" :class "winbartext")
+ (label :text ":" :class "winbartext")
+ (label :text {time.minute} :class "winbartext")
+ )
+ (label
+ :class "winbartext"
+ :text "${time.date}/${time.year}"
+ )
+ )
+ (revealer
+ :reveal {arraylength(notifications) > 0}
+ :transition "slideleft"
+ :duration "200ms"
+ :class "dummy${notifications[0].id}"
+ (box
+ :halign "center"
+ :valign "center"
+ :class "winnotif-badge"
+ (label :class "winbartext" :text "${arraylength(notifications)}")
+ )
+ )
+ )
+ )
+ )
+)
+
+(defwidget wintaskbar []
+ (box
+ :orientation "h"
+ :space-evenly false
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ (for app in tasks
+ (overlay
+ (eventbox
+ :class "winbutton-only"
+ :onclick "${app.count > 0 ? ('hyprctl dispatch workspace ' + app.workspace[0] + ' &') : (app.exec)}"
+ ; :tooltip "${app.class}"
+ ; :onclick "hyprctl dispatch workspace ${app.workspace[0]} && hyprctl dispatch focuswindow address:${app.address[0]} &"
+ (box
+ :class "winbutton-pad"
+ (box
+ :class "wintaskbaricon"
+ :style "
+ background-image: url('${app.icon}');
+ ${app.class == awin.class ? 'background-color: rgba(108, 112, 134, 0.4); border: 1px solid rgba(108, 112, 134, 0.15); border-top: 1px solid rgba(108, 112, 134, 0.15);' : ''}
+ "
+ )
+ )
+ )
+ (box :class "wintaskbar-indicator-${app.class == awin.class ? 'true' : (app.count > 0 ? 'false' : 'none')}")
+ )
+ )
+ ; Dummy keep alive
+ (revealer :transition "slideright" :reveal false (label :text {awin.class}))
+ )
+)
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/modules/workspaces.yuck b/hybrid-summer/.config/eww/modules/workspaces.yuck
new file mode 100755
index 000000000..6ace33d8b
--- /dev/null
+++ b/hybrid-summer/.config/eww/modules/workspaces.yuck
@@ -0,0 +1,92 @@
+(defwidget workspaces []
+ (eventbox
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ :onmiddleclick "scripts/toggle-overview.sh &"
+ :onrightclick "scripts/toggle-overview.sh &"
+ (overlay
+ ; Only displays workspace state (has windows or not)
+ (box
+ :class "module workspaces"
+ :spacing 0
+ :space-evenly false
+ (for i in workspace
+ (button
+ :onclick "hyprctl dispatch workspace ${i.num}"
+ :class "ws"
+ (label
+ :valign "center"
+ :class "ws-text"
+ :style "font-size: 13pt; background-color: ${i.clr};"
+ :text "${ws-icons[i.num - 1]}"
+ )
+ ; "●"
+ )
+ )
+ )
+ ; Use a separate indicator for active workspace (animations, yay) (and more performant)
+ (button
+ :class "ws"
+ :style "
+ margin-left: ${31 * (activews - 1)}px;
+ margin-right: ${31 * (10 - activews)}px;
+ "
+ (label
+ :valign "center"
+ :class "ws-text ws-text-active"
+ :style "font-size: 13pt;"
+ :text "${activews}"
+ )
+ ; "●"
+ )
+ )
+ )
+)
+
+(defwidget workspaces_top []
+ (box
+ (eventbox
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ :onmiddleclick "scripts/toggle-overview.sh &"
+ :onrightclick "scripts/toggle-overview.sh &"
+ :halign "center"
+ (box
+ :space-evenly false
+ :orientation "v"
+ ; Only displays workspace state (has windows or not)
+ (box
+ :class "workspaces-top"
+ :spacing 0
+ :space-evenly false
+ (for i in workspace
+ (button
+ :onclick "hyprctl dispatch workspace ${i.num}"
+ :class "ws-top"
+ :valign "end"
+ (label
+ :valign "center"
+ :class "ws-text-top"
+ :style "font-size: 1pt; background-color: ${i.clr};"
+ )
+ )
+ )
+ )
+ ; Use a separate indicator for active workspace (animations, yay) (and more performant)
+ (button
+ :class "ws-active-top"
+ :style "
+ margin-left: ${31 * (activews - 1)}px;
+ margin-right: ${31 * (10 - activews)}px;
+ margin-top: -5px;
+ "
+ (label
+ :valign "center"
+ :class "ws-text-top ws-text-active"
+ :style "font-size: 1pt;"
+ )
+ )
+ )
+ )
+ )
+)
+
+; ①②③④⑤⑥⑦⑧⑨⑩
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/activewin b/hybrid-summer/.config/eww/scripts/activewin
new file mode 100755
index 000000000..8019a5188
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/activewin
@@ -0,0 +1,12 @@
+#!/usr/bin/bash
+
+hyprctl activewindow -j | gojq -c -M
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ hyprctl activewindow -j | gojq -c -M
+ done
+fi
+
diff --git a/hybrid-summer/.config/eww/scripts/activews b/hybrid-summer/.config/eww/scripts/activews
new file mode 100755
index 000000000..e5264b221
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/activews
@@ -0,0 +1,22 @@
+#!/usr/bin/bash
+
+focusedws=$(hyprctl activewindow -j | gojq -c -M '.workspace.id')
+echo $focusedws
+
+if [[ "$focusedws" == 'null' ]]; then
+ echo 1
+fi
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "workspace>>" | while read -r line; do
+ case ${line%>>*} in
+ "workspace")
+ focusedws=${line#*>>}
+ echo $focusedws
+ ;;
+ esac
+ done
+fi
+
diff --git a/hybrid-summer/.config/eww/scripts/airplane b/hybrid-summer/.config/eww/scripts/airplane
new file mode 100755
index 000000000..81c9e0b1c
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/airplane
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+STATUS="$(rfkill list | sed -n 2p | awk '{print $3}')"
+
+icon() {
+ if [[ $STATUS == "no" ]]; then
+ echo ""
+ else
+ echo ""
+ fi
+}
+
+toggle() {
+ if [[ $STATUS == "no" ]]; then
+ rfkill block all
+ notify-send --urgency=normal -i airplane-mode-symbolic "Airplane Mode" "Airplane mode has been turned on!"
+ else
+ rfkill unblock all
+ notify-send --urgency=normal -i airplane-mode-disabled-symbolic "Airplane Mode" "Airplane mode has been turned off!"
+ fi
+}
+
+if [[ $1 == "toggle" ]]; then
+ toggle
+else
+ while true; do
+ STATUS="$(rfkill list | sed -n 2p | awk '{print $3}')"
+ icon
+ sleep 3;
+ done
+fi
diff --git a/hybrid-summer/.config/eww/scripts/allappnames.cpp b/hybrid-summer/.config/eww/scripts/allappnames.cpp
new file mode 100755
index 000000000..3a1f54854
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/allappnames.cpp
@@ -0,0 +1,137 @@
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+
+#include "nlohmann/json.hpp"
+using namespace std;
+using json = nlohmann::json;
+
+// A simple struct to store the name and exec properties of a desktop entry
+struct DesktopEntry {
+ string name;
+ string exec;
+ string icon;
+ bool show;
+};
+
+string username;
+vector allApps;
+json apps;
+int mode = 0; // 0: Object, 1: Array
+
+// A function that reads a .desktop file and returns a DesktopEntry struct
+DesktopEntry read_desktop_file(const string& filename) {
+ DesktopEntry entry;
+ entry.show = true;
+
+ ifstream file(filename);
+ if (file.is_open()) {
+ string line;
+ while (getline(file, line)) {
+ // Skip comments and empty lines
+ if (line.empty() || line[0] == '#') {
+ continue;
+ }
+ if (line.substr(0, 1) == "[" &&
+ line.substr(0, 15) == "[Desktop Action")
+ break;
+ // Split the line by '=' and store the key-value pair
+ size_t pos = line.find('=');
+ if (pos != string::npos) {
+ string key = line.substr(0, pos);
+ string value = line.substr(pos + 1);
+ // Store the name and exec properties
+ if (key == "Name") {
+ entry.name = value;
+ } else if (key == "Exec") {
+ entry.exec = value;
+ } else if (key == "Icon") {
+ entry.icon = value;
+ } else if (key == "NoDisplay" && value == "true") {
+ entry.show = false;
+ }
+ }
+ }
+ // cout << entry.name << " " << entry.exec << " " << entry.icon << "\n";
+ file.close();
+ }
+ return entry;
+}
+
+bool lf(DesktopEntry a, DesktopEntry b) { return a.name < b.name; }
+
+// A function that prints out all desktop entry names and exec properties in a
+// given directory
+void get_desktop_entries(const string& dirname) {
+ // Check if the directory exists
+ if (!filesystem::exists(dirname) || !filesystem::is_directory(dirname)) {
+ return;
+ }
+ // Iterate over all files in the directory
+ for (const auto& entry : filesystem::directory_iterator(dirname)) {
+ // Check if the file has a .desktop extension
+ if (entry.path().extension() == ".desktop") {
+ DesktopEntry thisEntry = read_desktop_file(entry.path());
+ if (thisEntry.show) allApps.push_back(thisEntry);
+ }
+ }
+}
+
+void to_json() {
+ sort(allApps.begin(), allApps.end(), lf);
+ for (const auto& entry : allApps) {
+ json thisApp;
+ thisApp["name"] = entry.name;
+ thisApp["icon"] = entry.icon;
+ thisApp["exec"] = entry.exec;
+ // Get
+ if (mode == 0)
+ apps[entry.name] = thisApp;
+ else
+ apps.push_back(thisApp);
+ }
+}
+
+string get_username() {
+ uid_t uid = geteuid();
+ struct passwd* pw = getpwuid(uid);
+ return pw->pw_name;
+}
+
+int main(int argc, char* argv[]) {
+ ios::sync_with_stdio(false);
+ cin.tie(nullptr);
+
+ if (argc == 3 && string(argv[1]) == "--mode") {
+ if (string(argv[2]) == "object")
+ mode = 0;
+ else if (string(argv[2]) == "array")
+ mode = 1;
+ else
+ mode = stoi(string(argv[2]));
+ }
+
+ username = get_username();
+ // Print all desktop entries in /usr/share/applications/
+ string entryDirs[3] = {"/usr/share/applications/",
+ "/home/" + username + "/.local/share/applications",
+ "/var/lib/flatpak/exports/share/applications"};
+ for (string directory : entryDirs) {
+ if (filesystem::exists(directory))
+ get_desktop_entries(directory);
+ }
+
+ // Get em in the json object
+ to_json();
+ // Print
+ for (const auto& entry : allApps) {
+ cout << entry.name << '\n';
+ }
+
+ return 0;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/allapps.cpp b/hybrid-summer/.config/eww/scripts/allapps.cpp
new file mode 100755
index 000000000..26813fa03
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/allapps.cpp
@@ -0,0 +1,254 @@
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "nlohmann/json.hpp"
+using namespace std;
+using json = nlohmann::json;
+
+// A simple struct to store the name and exec properties of a desktop entry
+struct DesktopEntry {
+ string name;
+ string exec;
+ string icon;
+ string filename;
+ string filepath;
+ bool show;
+};
+
+string username;
+vector allApps;
+json apps;
+int mode = 0; // 0: Object, 1: Array, 2: Start (Contains JSON for letters)
+string iconTheme = "";
+
+// Returns the file name from a path
+std::string getFileName(const std::string& path) {
+ // Find the last position of '/' or '\' in the path
+ size_t pos = path.find_last_of("/\\");
+ // If none is found, return the whole path
+ if (pos == std::string::npos) return path;
+ // Otherwise, return the substring after the last slash
+ return path.substr(pos + 1);
+}
+
+// Returns the file name without extension from a path
+string getFileNameNoExt(const string& path) {
+ string filename = getFileName(path); // Get file name (with extension)
+ size_t pos = filename.find_last_of(".");
+ if (pos == string::npos) return filename; // Name found
+ return filename.substr(0, pos);
+}
+
+// Function to check if file exists, if yes read it
+string readIfExists(const string& name) {
+ ifstream f(name.c_str());
+ stringstream buffer;
+ if (f) { // check if the file was opened successfully
+ buffer << f.rdbuf(); // read the whole file into a string stream
+ f.close(); // close the file when done
+ }
+ return buffer.str(); // return the string stream as a string
+}
+
+void writeToFile(const string& name, const string& content) {
+ ofstream f(name.c_str(), ios::app); // open the file in append mode
+ if (f) { // check if the file was opened successfully
+ f << content << "\n"; // write the content to the file
+ f.close(); // close the file when done
+ } else {
+ cerr << "Error: could not open " << name
+ << "\n"; // print an error message to the standard error
+ }
+}
+
+string exec(const char* cmd) {
+ array buffer;
+ string result;
+ unique_ptr pipe(popen(cmd, "r"), pclose);
+ if (!pipe) {
+ throw runtime_error("popen() failed!");
+ }
+ while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+ result += buffer.data();
+ }
+ return result;
+}
+
+string getIconPath(string iconname) {
+ if (iconTheme == "") {
+ iconTheme =
+ exec(string("gsettings get org.gnome.desktop.interface icon-theme")
+ .c_str());
+ iconTheme.pop_back();
+ // cout << "icon theme: " << iconTheme << '\n';
+ }
+ if (iconname.size() == 0) {
+ return "";
+ } else if (iconname[0] == '/') {
+ return iconname; // Already absolute path
+ } else if (iconname[0] == '\n') {
+ return ""; // wtf
+ }
+ string path = readIfExists("/home/" + username + "/.config/eww/scripts/cache/" + iconname);
+ if (path == "") {
+ path = exec(string("geticons -t " + iconTheme + " " + string(iconname) +
+ " | head -n 1")
+ .c_str());
+ // cout << "path: " << path << '\n';
+ writeToFile("/home/" + username + "/.config/eww/scripts/cache/" + iconname, path);
+ // cout << "icon name: " << iconname << '\n';
+ // cout << "path: " << path << '\n';
+ }
+ while (path.size() > 0 && *path.rbegin() == '\n')
+ path.pop_back(); // Remove '\n'
+ return path;
+}
+
+// A function that reads a .desktop file and returns a DesktopEntry struct
+DesktopEntry readDesktopFile(const string& filename) {
+ DesktopEntry entry;
+ entry.show = true;
+ entry.filename = getFileNameNoExt(filename);
+ entry.filepath = filename;
+
+ ifstream file(filename);
+ if (file.is_open()) {
+ string line;
+ while (getline(file, line)) {
+ // Skip comments and empty lines
+ if (line.empty() || line[0] == '#') {
+ continue;
+ }
+ if (line.substr(0, 1) == "[" &&
+ line.substr(0, 15) == "[Desktop Action")
+ break;
+ // Split the line by '=' and store the key-value pair
+ size_t pos = line.find('=');
+ if (pos != string::npos) {
+ string key = line.substr(0, pos);
+ string value = line.substr(pos + 1);
+ // Store properties
+ if (key == "Name") {
+ entry.name = value;
+ } else if (key == "Exec") {
+ entry.exec = value;
+ } else if (key == "Icon") {
+ entry.icon = getIconPath(value);
+ } else if (key == "NoDisplay" && value == "true") {
+ entry.show = false;
+ }
+ }
+ }
+ file.close();
+ }
+ return entry;
+}
+
+string lowercaseOf(string s) {
+ for (char& c : s) {
+ c = tolower(c);
+ }
+ return s;
+}
+
+bool lf(DesktopEntry a, DesktopEntry b) {
+ if (tolower(a.name[0]) == tolower(b.name[0]))
+ return a.name < b.name;
+ else
+ return tolower(a.name[0]) < tolower(b.name[0]);
+}
+
+// A function that prints out all desktop entry names and exec properties in a
+// given directory
+void getDesktopEntries(const string& dirname) {
+ // Iterate over all files in the directory
+ for (const auto& entry : filesystem::directory_iterator(dirname)) {
+ // Check if the file has a .desktop extension
+ if (entry.path().extension() == ".desktop") {
+ // Read the file and print its name and exec properties
+ DesktopEntry thisEntry = readDesktopFile(entry.path());
+ // cout << thisEntry.name << " [icon: " << thisEntry.icon << "]\n";
+ if (thisEntry.show) allApps.push_back(thisEntry);
+ }
+ }
+}
+
+void toJson() {
+ sort(allApps.begin(), allApps.end(), lf);
+ int i = -1;
+ for (const auto& entry : allApps) {
+ i++;
+ // cout << entry.name << ", ";
+ json thisApp;
+ thisApp["name"] = entry.name;
+ thisApp["icon"] = entry.icon;
+ thisApp["exec"] = entry.exec;
+ if (mode != 2) {
+ thisApp["filename"] = entry.filename;
+ thisApp["filepath"] = entry.filepath;
+ }
+ // Get
+ if (mode == 0)
+ apps[entry.name] = thisApp;
+ else if (mode == 1)
+ apps.push_back(thisApp);
+ else if (mode == 2) {
+ apps.push_back(thisApp);
+ }
+ }
+ cout << apps << '\n';
+}
+
+string getUsername() {
+ uid_t uid = geteuid();
+ struct passwd* pw = getpwuid(uid);
+ return pw->pw_name;
+}
+
+void addLetters() {
+ for (char c = 'A'; c <= 'Z'; c++) {
+ DesktopEntry thisLetter;
+ thisLetter.name = c;
+ thisLetter.exec = "";
+ thisLetter.icon = "_letter";
+ allApps.push_back(thisLetter);
+ }
+}
+
+int main(int argc, char* argv[]) {
+ ios::sync_with_stdio(false);
+ cin.tie(nullptr);
+
+ if (argc == 3 && string(argv[1]) == "--mode") {
+ if (string(argv[2]) == "object")
+ mode = 0;
+ else if (string(argv[2]) == "array")
+ mode = 1;
+ else if (string(argv[2]) == "start")
+ mode = 2;
+ else
+ mode = stoi(string(argv[2]));
+ }
+
+ username = getUsername();
+ // Print all desktop entries in common locations
+ string entryDirs[3] = {"/usr/share/applications/",
+ "/home/" + username + "/.local/share/applications",
+ "/var/lib/flatpak/exports/share/applications"};
+ for (string directory : entryDirs) {
+ if (filesystem::exists(directory))
+ getDesktopEntries(directory);
+ }
+ if (mode == 2) addLetters();
+ // Get a json and print
+ toJson();
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/appicons b/hybrid-summer/.config/eww/scripts/appicons
new file mode 100755
index 000000000..5d7cff5a5
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/appicons
@@ -0,0 +1,64 @@
+#!/usr/bin/bash
+
+geticonlist() {
+ classes=$(hyprctl clients | grep -e 'class: ' | sed 's/\tclass: //')
+ addresses=$(hyprctl clients | grep -e ' -> ')
+ # echo "$classes"
+ IFS=$'\n'
+ classarr=($(echo "$classes"))
+ addressarr=($(echo "$addresses"))
+ iconarr=($(echo "$classes"))
+
+ for i in "${!classarr[@]}"; do
+ addressarr[i]=$(echo "0x${addressarr[i]% -> *}" | sed 's/Window //')
+ # echo "${addressarr[i]}"
+ done
+
+ for i in "${!classarr[@]}"; do
+ classarr[i]=$(echo ${classarr[i]})
+ if [ -f "scripts/cache/${classarr[i]}" ]; then
+ iconarr[i]=$(cat scripts/cache/${classarr[i]})
+ if [ ! -f "${iconarr[i]}" ]; then # Cache refresh if icon doesnt exist
+ iconarr[i]=$(scripts/get-icon.py "${classarr[i]}")
+ echo "${iconarr[i]}" > "scripts/cache/${classarr[i]}"
+ fi
+ else
+ iconarr[i]=$(scripts/get-icon.py "${classarr[i]}")
+ echo "${iconarr[i]}" > "scripts/cache/${classarr[i]}"
+ fi
+ if [[ ${iconarr[i]} = "not found" ]]; then
+ iconarr[i]=$(scripts/get-icon.py "$(echo "${classarr[i]##*.}" | tr '[:upper:]' '[:lower:]')")
+ if [[ ! ${iconarr[i]} = "not found" ]]; then
+ rm "scripts/cache/${classarr[i]}"
+ echo "${iconarr[i]}" > "scripts/cache/${classarr[i]}"
+ else
+ iconarr[i]="/home/$USER/.local/share/icons/candy-icons/mimetypes/scalable/application-x-theme.svg"
+ rm "scripts/cache/${classarr[i]}"
+ echo "${iconarr[i]}" > "scripts/cache/${classarr[i]}"
+ fi
+ fi
+ done
+
+ printf '['
+ for i in "${!classarr[@]}"; do
+ if [ $i -ne 0 ]; then
+ printf ', '
+ fi
+ # printf '{'
+ # printf "\"${addressarr[i]}\": \"${iconarr[i]}\""
+ # printf '}'
+ printf "\"${iconarr[i]}\""
+ done
+ printf ']\n'
+}
+
+geticonlist
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r line; do
+ geticonlist
+ done
+fi
+
diff --git a/hybrid-summer/.config/eww/scripts/applycolor b/hybrid-summer/.config/eww/scripts/applycolor
new file mode 100755
index 000000000..167e732ed
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/applycolor
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+cp -r images/svg/dark/* images/svg/
+
+filelist=$(ls 'images/svg' -p | grep -v /)
+
+IFS=$'\n'
+filearr=($(echo "$filelist"))
+
+c1=$(cat css/_iconcolor.txt | head -2 | tail -1)
+c2=$(cat css/_iconcolor.txt | head -3 | tail -1)
+c3=$(cat css/_iconcolor.txt | head -2 | tail -1)
+c4=$(cat css/_iconcolor.txt | head -5 | tail -1)
+c5=$(cat css/_iconcolor.txt | head -6 | tail -1)
+
+sed -i "s/white/$c1/gi" "images/svg/beatmappacks.svg"
+sed -i "s/white/$c2/gi" "images/svg/forum.svg"
+sed -i "s/white/$c3/gi" "images/svg/search.svg"
+sed -i "s/white/$c4/gi" "images/svg/settings.svg"
+sed -i "s/white/$c5/gi" "images/svg/tournaments.svg"
+
+for i in "${!filearr[@]}"; do
+ # echo "images/svg/${filearr[$i]}"
+ sed -i "s/white/$1/gi" "images/svg/${filearr[$i]}"
+done
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/appsearch b/hybrid-summer/.config/eww/scripts/appsearch
new file mode 100755
index 000000000..546d751a5
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/appsearch
@@ -0,0 +1,146 @@
+#!/usr/bin/bash
+
+IFS=$'\n'
+entrynames=( $(cat 'scripts/cache/entrynames.txt' | fzf --filter="$1" | head -n 10) )
+entries=( $(cat 'scripts/cache/entries.txt') )
+
+addedNewActions=false
+
+geticonof() {
+ clientclass=''
+ clientclass=$1
+ iconpath=''
+ # Get app icon
+ if [ -f "scripts/cache/$clientclass" ]; then
+ iconpath=$(cat scripts/cache/$clientclass)
+ if [ ! -f "${iconpath}" ]; then # Cache refresh if icon doesnt exist
+ iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ else
+ iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ if [[ ${iconpath} == "" ]]; then
+ # Retry with lowercase if icon not found
+ iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" $(echo "$clientclass" | tr '[:upper:]' '[:lower:]' | sed 's/\ /-/g') | head -n 1)
+
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ newname=$(scripts/iconpatch $clientclass)
+ iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" "$newname" | head -n 1)
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ # Fallback app icon, replace the path below to the fallback icon of your choice
+ # iconpath="/usr/share/icons/Win11-dark/mimes/48/application-x-executable.svg"
+ iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" "application-x-executable" | head -n 1)
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ fi
+ fi
+ echo "$iconpath"
+}
+
+quiteSureNotMath() {
+ if [[ ${1:0:1} != "0" \
+ && ${1:0:1} != "1" \
+ && ${1:0:1} != "2" \
+ && ${1:0:1} != "3" \
+ && ${1:0:1} != "4" \
+ && ${1:0:1} != "5" \
+ && ${1:0:1} != "6" \
+ && ${1:0:1} != "7" \
+ && ${1:0:1} != "8" \
+ && ${1:0:1} != "9" \
+ && ${1:0:1} != "(" \
+ && ${1:0:1} != ")" \
+ ]]; then
+ echo 'true'
+ else
+ echo 'false'
+ fi
+}
+
+# Search inits: math
+if [[ "$1" == "--calculator" ]]; then
+ echo -n '[{"name":"Calculator - Type something!","icon":"images/svg/dark/calculator.svg","exec":"wl-copy \"Clipboard contents ;)\""}]'
+ eww update winsearch_actions='{"name":"Calculator - Type something!","icon":"images/svg/dark/calculator.svg","exec":"wl-copy \"Clipboard contents ;)\""}'
+ eww update winsearch_actions_type='Math result'
+ addedNewActions=true
+ exit 0
+fi
+
+# Quick commands
+if [[ "$1" == ">"* ]]; then
+ cd ~/.config/eww
+ if [[ "$1" == ">load"* ]]; then
+ searching=$(echo "$1" | sed 's/>load //g' | sed 's/>load//g')
+ profilenames=( $(ls css/savedcolors/ | grep .txt | sed 's/_iconcolor_//g' | sed 's/.txt//g' | fzf --filter="$searching") )
+ echo -n '['
+ for x in "${!profilenames[@]}"; do
+ if [ "$x" != "0" ]; then
+ printf ','
+ fi
+ profilejson='{"name": "'"${profilenames[x]}"'", "exec": ">load '"${profilenames[x]}"'"}'
+ if (( x == 0 )); then
+ eww update winsearch_actions="$profilejson"
+ eww update winsearch_actions_type='Color theme'
+ addedNewActions=true
+ fi
+
+ echo -n "$profilejson"
+ done
+ echo -n ']'
+ else
+ echo '[]'
+ fi
+ exit 0
+fi
+
+# Do math
+if [[ $(quiteSureNotMath "$1") == "false" ]]; then
+ mathAns=$(qalc $1 | head -n 1)
+ mathAns="${mathAns#*= }"
+ mathAns="${mathAns#*≈ }"
+ if [[ "$mathAns" == *"error"* || "$mathAns" == *"warning"* ]]; then
+ echo '[{"name":"Invalid math","icon":"images/svg/dark/calculator.svg","exec":"wl-copy \"Clipboard contents ;)\""}]'
+ exit 0
+ else
+ ansjson='{"name": "'"$mathAns"'","icon":"images/svg/dark/calculator.svg","exec": "wl-copy \"'"$mathAns"'\""}'
+ eww update winsearch_actions="$ansjson"
+ eww update winsearch_actions_type='Math result'
+ addedNewActions=true
+ echo '['"$ansjson"']'
+ fi
+ exit 0
+fi
+
+# Application search
+printf '['
+
+for x in "${!entrynames[@]}"; do
+ if [ "$x" != "0" ]; then
+ printf ','
+ fi
+ appjson=$(echo $entries | gojq -c -M '."'"${entrynames[x]}"'"')
+ if (( x == 0 )); then
+ eww update winsearch_actions="$appjson"
+ eww update winsearch_actions_type='Application'
+ addedNewActions=true
+ fi
+ # iconname=$(echo "$appjson" | gojq -r -c -M '.icon')
+ # appjson=$(echo "$appjson" | gojq '.icon = "'$(geticonof "$iconname")'"')
+ echo -n "$appjson"
+done
+
+printf ']'
+
+if [[ "$addedNewActions" == "false" ]]; then
+ eww update winsearch_actions='{"name":"'"$1"'","icon":"images/svg/dark/protocol.svg","exec":"wl-copy \"Clipboard contents ;)\""}'
+ eww update winsearch_actions_type='Run command'
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/audioapps.cpp b/hybrid-summer/.config/eww/scripts/audioapps.cpp
new file mode 100644
index 000000000..1a82c968d
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/audioapps.cpp
@@ -0,0 +1,133 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "nlohmann/json.hpp"
+using namespace std;
+using json = nlohmann::json;
+
+string clients;
+json clientjson, apps;
+string iconTheme = "";
+
+string exec(const char* cmd) {
+ array buffer;
+ string result;
+ unique_ptr pipe(popen(cmd, "r"), pclose);
+ if (!pipe) {
+ throw runtime_error("popen() failed!");
+ }
+ while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+ result += buffer.data();
+ }
+ return result;
+}
+
+// Function to check if file exists, if yes read it
+string readIfExists(const string& name) {
+ ifstream f(name.c_str());
+ stringstream buffer;
+ if (f) { // check if the file was opened successfully
+ buffer << f.rdbuf(); // read the whole file into a string stream
+ f.close(); // close the file when done
+ }
+ return buffer.str(); // return the string stream as a string
+}
+
+void writeToFile(const string& name, const string& content) {
+ ofstream f(name.c_str(), ios::app); // open the file in append mode
+ if (f) { // check if the file was opened successfully
+ f << content << "\n"; // write the content to the file
+ f.close(); // close the file when done
+ } else {
+ cerr << "Error: could not open " << name
+ << "\n"; // print an error message to the standard error
+ }
+}
+
+string getIconPath(string iconname) {
+ if (iconTheme == "") {
+ iconTheme =
+ exec(string("gsettings get org.gnome.desktop.interface icon-theme")
+ .c_str());
+ iconTheme.pop_back();
+ // cout << "icon theme: " << iconTheme << '\n';
+ }
+ if (iconname.size() == 0) {
+ return "";
+ } else if (iconname[0] == '/') {
+ return iconname; // Already absolute path
+ } else if (iconname[0] == '\n') {
+ return ""; // wtf
+ }
+ string path = readIfExists("scripts/cache/" + iconname);
+ if (path == "") {
+ path = exec(
+ string("geticons -t " + iconTheme + " " + string(iconname) + " | head -n 1").c_str());
+ writeToFile("scripts/cache/" + iconname, path);
+ // cout << "icon name: " << iconname << '\n';
+ // cout << "path: " << path << '\n';
+ }
+ while (path.size() > 0 && *path.rbegin() == '\n')
+ path.pop_back(); // Remove '\n'
+ return path;
+}
+
+void addApp(json& client) {
+ string volumestr = client["volume"]["front-left"]["value_percent"];
+ volumestr.pop_back();
+ int volume = stoi(volumestr);
+ client = client["properties"];
+
+ bool found = false;
+ for (json& obj : apps) {
+ auto it = obj.find("name");
+ if (it != obj.end() && *it == client["application.name"]) {
+ found = true;
+ obj["count"] = int(obj["count"]) + 1;
+ obj["volume"].push_back(
+ json::array({client["object.serial"], volume}));
+ break;
+ }
+ }
+ if (!found) {
+ json newApp =
+ R"({"name": "", "count": 1, "volume": [], "icon": ""})"_json;
+ newApp["name"] = client["application.name"];
+ newApp["volume"].push_back(
+ json::array({client["object.serial"], volume}));
+
+ string iconpath;
+ auto it = client.find("application.icon_name");
+ if (it != client.end())
+ iconpath = getIconPath(client["application.icon_name"]);
+ else {
+ iconpath = getIconPath(client["application.process.binary"]);
+ }
+ newApp["icon"] = iconpath;
+
+ apps.push_back(newApp);
+ }
+}
+
+void getAudioClients() {
+ clients = exec("pactl --format json list sink-inputs");
+ clientjson = json::parse(clients);
+ for (json client : clientjson) {
+ addApp(client);
+ // cout << client << '\n';
+ }
+}
+
+int main() {
+ ios::sync_with_stdio(false);
+ cin.tie(nullptr);
+
+ getAudioClients();
+ cout << apps << '\n';
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/audiolevels b/hybrid-summer/.config/eww/scripts/audiolevels
new file mode 100755
index 000000000..ba001d09d
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/audiolevels
@@ -0,0 +1,84 @@
+#!/usr/bin/bash
+dostuff(){
+ sinks=$(pactl list sink-inputs \
+ | grep -e "Sink Input" \
+ | sed 's/Sink Input #//')
+ names=$(pactl list sink-inputs \
+ | sed 's/"//g' \
+ | sed 's/application-name://' \
+ | grep -e "application.name" \
+ | sed 's/application.name = //' \
+ | sed 's/\t\t//' )
+ vols=$(pactl list sink-inputs \
+ | grep -e "Volume:" \
+ | sed 's/Volume: front-left: //' \
+ | sed 's/front-right: //' \
+ | sed 's/front-right: //' \
+ | tr " " "\n" \
+ | grep -e % \
+ | sed 's/%//g' )
+ binaries=$(pactl list sink-inputs \
+ | grep -e 'application.process.binary' -e 'application.icon_name' \
+ | sed 's/\t//g' \
+ | sed 's/application.process.binary = //g' \
+ | sed 's/application.icon_name = //g' \
+ | sed 's/"//g' )
+
+ # echo "-=-=-=-=-=-=-=-=- Debug: Raw value -=-=-=-=-=-=-=-=-"
+ # echo "$sinks"
+ # echo "$names"
+ # echo "$vols"
+
+ IFS=$'\n'
+ sinkarr=($(echo "$sinks"))
+ namearr=($(echo "$names"))
+ volarr=($(echo "$vols"))
+ iconarr=($(echo "$binaries"))
+
+ # Get icons
+ for i in "${!iconarr[@]}"; do
+ iconarr[$i]=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" ${iconarr[i]} | head -n 1)
+ done
+
+ # Functions
+ sanitize() {
+ echo "$1" | sed 's/"/\"/g'
+ }
+
+ geticon() {
+ # notify-send "${volarr[$((i*2))]}"
+ if [ "${volarr[$(($1*2))]}" -eq "0" ]; then
+ echo ""
+ else
+ echo ""
+ fi
+ }
+
+ # Print final JSON
+ printf '['
+ for i in "${!sinkarr[@]}"; do
+ if [ $i -ne 0 ]; then
+ printf ', '
+ fi
+ echo -n '{''"sink": "'"${sinkarr[$i]}"'", "name": "'"${namearr[$i]}"'", "volume": "'"${volarr[$((i*2))]}"'"}'
+ # echo -n '{''"sink": "'"${sinkarr[$i]}"'", "icon": "'"${iconarr[$i]}"'", "name": "'"${namearr[$i]}"'", "volume": "'"${volarr[$((i*2))]}"'"}'
+ done
+ printf ']\n'
+
+ # echo "$sinks"
+ # echo "$names"
+ # echo "$vols"
+}
+
+
+cd ~/.config/eww
+# dostuff
+scripts/audioapps
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ pactl subscribe | rg --line-buffered "on sink" | while read -r _; do
+ scripts/audioapps
+ done
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/battery b/hybrid-summer/.config/eww/scripts/battery
new file mode 100755
index 000000000..52b98c297
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/battery
@@ -0,0 +1,133 @@
+#!/usr/bin/env bash
+
+icons=("" "" "" "" "" "" "" "")
+
+gettime() {
+ FULL=$(cat /sys/class/power_supply/BATT/charge_full)
+ NOW=$(cat /sys/class/power_supply/BATT/charge_now)
+
+ if [ "$RATE" -gt 0 ]; then
+ if [ "$STATE" = "Discharging" ]; then
+ EX="$NOW / $RATE"
+ else
+ EX="($FULL - $NOW) / $RATE"
+ fi
+ date -u -d@"$(bc -l <<< "$EX * 3600")" +%H:%M
+ fi
+}
+
+geticon() {
+ if [ "$STATE" = "Charging" ]; then
+ level=$(awk -v n="$CAPACITY" 'BEGIN{print int((n-1)/12)}')
+ echo "${icons[$level]}"
+ else
+ level=$(awk -v n="$CAPACITY" 'BEGIN{print int((n-1)/12)}')
+ echo "${icons[$level]}"
+ fi
+}
+
+status() {
+ if [ "$STATE" = "Charging" ]; then
+ echo -n "charging"
+
+ if [ "$RATE" -gt 0 ]; then
+ echo ", $(gettime) left"
+ else
+ echo ""
+ fi
+ elif [ "$STATE" = "Discharging" ]; then
+ echo "$(gettime)h left"
+ else
+ echo "fully charged"
+ fi
+}
+
+statch() {
+ if [ "$STATE" = "Discharging" ]; then #Not charging, below 20%
+ if [ "$CAPACITY" -le 5 ]; then
+ echo 'deadly'
+ elif [ "$CAPACITY" -le 10 ]; then
+ echo 'critical'
+ elif [ "$CAPACITY" -le 30 ]; then
+ echo 'low'
+ else
+ echo 'normal'
+ fi
+ else
+ echo 'charging'
+ fi
+}
+
+chargestatus() {
+ if [ "$STATE" = "Charging" ]; then
+ echo -n ""
+ elif [ "$STATE" = "Discharging" ]; then
+ echo -n ""
+ fi
+}
+
+circolor() {
+ if [[ "$CAPACITY" -le 20 && "$STATE" = "Discharging" ]]; then
+ cat images/svg/color.txt
+ else
+ cat images/svg/color.txt
+ fi
+}
+
+cirbgcolor() {
+ if [[ "$CAPACITY" -le 20 && "$STATE" = "Discharging" ]]; then
+ echo '#EF738A'
+ else
+ echo 'transparent'
+ fi
+}
+
+color() {
+ if [ "$CAPACITY" -le 20 ]; then
+ echo '#EF738A'
+ else
+ echo 'white'
+ fi
+}
+
+bgcolor() {
+ if [ "$CAPACITY" -le 20 ]; then
+ echo '#EF738A'
+ else
+ echo 'transparent'
+ fi
+}
+
+wattage() {
+ echo "$(bc -l <<< "scale=1; $RATE / 1000000") W"
+}
+
+warnedlow=0
+
+while true; do
+ RATE=$(cat /sys/class/power_supply/BATT/voltage_now)
+ CAPACITY=$(cat /sys/class/power_supply/BATT/capacity)
+ STATE=$(cat /sys/class/power_supply/BATT/status)
+
+ if [[ "$CAPACITY" -le 5 && "$STATE" = "Discharging" ]]; then
+ if [ $warnedlow == 0 ]; then
+ warnedlow=1
+ notify-send 'FREAKING PLUG IN THE CHARGER ALREADY' '!!111!!1!123!!!' -u critical -a 'eww'
+ fi
+ elif [[ "$CAPACITY" -le 10 && "$STATE" = "Discharging" ]]; then
+ if [ $warnedlow == 0 ]; then
+ warnedlow=1
+ notify-send 'Battery verrry low' 'Hello?' -u critical -a 'eww'
+ fi
+ elif [[ "$CAPACITY" -le 20 && "$STATE" = "Discharging" ]]; then
+ if [ $warnedlow == 0 ]; then
+ warnedlow=1
+ notify-send 'Battery low' 'Plug in your charger pweeeeaaase :>' -u critical -a 'eww'
+ fi
+ else
+ warnedlow=0
+ fi
+
+ echo '{"quickicon": "'"$(chargestatus)"'", "icon": "'"$(geticon)"'", "percentage": '"$CAPACITY"', "wattage": "'"$(wattage)"'", "status": "'"$(status)"'", "circolor": "'"$(circolor)"'", "cirbgcolor": "'"$(cirbgcolor)"'", "color": "'"$(color)"'", "bgcolor": "'"$(bgcolor)"'" }'
+ sleep 3
+done
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/bluetooth b/hybrid-summer/.config/eww/scripts/bluetooth
new file mode 100755
index 000000000..112069540
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/bluetooth
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+
+declare -A baticon=([10]="" [20]="" [30]="" [40]="" [50]="" [60]="" [70]="" [80]="" [90]="" [100]="")
+
+toggle() {
+ status=$(rfkill -J | jq -r '.rfkilldevices[] | select(.type == "bluetooth") | .soft' | head -1)
+
+ if [ "$status" = "unblocked" ]; then
+ rfkill block bluetooth
+ else
+ rfkill unblock bluetooth
+ fi
+}
+
+if [ "$1" = "toggle" ]; then
+ toggle
+else
+ while true; do
+ powered=$(bluetoothctl show | rg Powered | cut -f 2- -d ' ')
+ status=$(bluetoothctl info)
+ name=$(echo "$status" | rg Name | cut -f 2- -d ' ')
+ mac=$(echo "$status" | head -1 | awk '{print $2}' | tr ':' '_')
+
+ if [[ "$(echo "$status" | rg Percentage)" != "" ]]; then
+ battery=$(upower -i /org/freedesktop/UPower/devices/headset_dev_"$mac" | rg percentage | awk '{print $2}' | cut -f 1 -d '%')
+ batt_icon=${baticon[$battery]}
+ else
+ batt_icon=""
+ fi
+
+ if [ "$powered" = "yes" ]; then
+ if [ "$status" != "Missing device address argument" ]; then
+ text="$name"
+ icon=""
+ color="#89b4fa"
+ else
+ icon=""
+ text="Disconnected"
+ color="#45475a"
+ fi
+ else
+ icon=""
+ text="Bluetooth off"
+ color="#45475a"
+ fi
+
+ echo '{ "icon": "'"$icon"'", "batt_icon": "'"$batt_icon"'", "text": "'"$text"'", "color": "'"$color"'" }'
+
+ sleep 3
+ done
+fi
diff --git a/hybrid-summer/.config/eww/scripts/brightness b/hybrid-summer/.config/eww/scripts/brightness
new file mode 100755
index 000000000..1f79bec25
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/brightness
@@ -0,0 +1,59 @@
+#!/usr/bin/env bash
+cd ~/.config/eww
+
+icons=("" "" "")
+XDG_CACHE_HOME="$HOME/.cache"
+date="$XDG_CACHE_HOME/eww/osd_brightness.date"
+lock=0
+
+showhide() {
+ # get dates
+ rundate=$(cat "$date")
+ currentdate=$(date +%s)
+
+ # handle showing
+ if [ "$rundate" = "$currentdate" ] && [ "$lock" -eq 0 ]; then
+ scripts/toggle-osd-bright.sh --open
+ lock=1
+ elif [ $((currentdate - rundate)) -ge 2 ] && [ "$lock" -eq 1 ]; then
+ scripts/toggle-osd-bright.sh --close > /dev/null
+ lock=0
+ fi
+}
+
+osd() {
+ if [ ! -f "$date" ]; then
+ mkdir -p "$XDG_CACHE_HOME/eww"
+ fi
+ date +%s > "$date"
+ # showhide
+}
+
+osd_handler() {
+ lock=0
+ rundate=0
+ if [ ! -f "$date" ]; then
+ mkdir -p "$XDG_CACHE_HOME/eww"
+ echo 0 > "$date"
+ fi
+
+ while true; do
+ showhide
+ sleep 0.1
+ done
+}
+
+if [ "$1" = "osd" ]; then
+ osd
+else
+ # initial
+ icon=${icons[$(awk -v n="$(light)" 'BEGIN{print int(n/34)}')]}
+ echo '{ "level": '"$(light)"', "icon": "'"$icon"'" }'
+
+ osd_handler &
+ udevadm monitor | rg --line-buffered "backlight" | while read -r _; do
+ icon="${icons[$(awk -v n="$(light)" 'BEGIN{print int(n/34)}')]}"
+
+ echo '{ "level": '"$(light)"', "icon": "'"$icon"'" }'
+ done
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/calendarlayout.cpp b/hybrid-summer/.config/eww/scripts/calendarlayout.cpp
new file mode 100644
index 000000000..cb3100f11
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/calendarlayout.cpp
@@ -0,0 +1,138 @@
+#include
+#include
+#include
+#include
+using namespace std;
+
+int year, month, day, weekday, weekdayOfMonthFirst;
+bool leapYear;
+int daysInMonth, daysInLastMonth, daysInNextMonth;
+bool highlight = true;
+
+int calendar[6][7];
+int today[6][7];
+
+void getTime() {
+ // Time
+ time_t now = time(0);
+ tm* ltm = localtime(&now);
+ // To vars
+ year = 1900 + ltm->tm_year;
+ month = 1 + ltm->tm_mon;
+ day = ltm->tm_mday;
+ weekday = ltm->tm_wday - 1;
+ weekdayOfMonthFirst = (weekday + 35 - (day - 1)) % 7;
+ // cout << weekday << ", " << day << '/' << month << '/' << year << '\n';
+}
+
+void setTime(int wd, int d, int m, int y) {
+ wd--;
+ highlight = false;
+ year = y;
+ month = m;
+ day = d;
+ weekday = wd;
+ weekdayOfMonthFirst = (weekday + 35 - (day - 1)) % 7;
+ // cout << weekday << ", " << day << '/' << month << '/' << year << '\n';
+}
+
+void checkLeapYear() {
+ if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
+ leapYear = true;
+ else
+ leapYear = false;
+}
+
+void getMonthDays() {
+ // Days in this month
+ if ((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0))
+ daysInMonth = 31;
+ else if (month == 2 && leapYear)
+ daysInMonth = 29;
+ else if (month == 2 && !leapYear)
+ daysInMonth = 28;
+ else
+ daysInMonth = 30;
+ // Days in next month
+ if (month == 1 && leapYear)
+ daysInNextMonth = 29;
+ else if (month == 1 && !leapYear)
+ daysInNextMonth = 28;
+ else if ((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0))
+ daysInNextMonth = 30;
+ else
+ daysInNextMonth = 31;
+ // Days in last month
+ if (month == 3 && leapYear)
+ daysInLastMonth = 29;
+ else if (month == 3 && !leapYear)
+ daysInLastMonth = 28;
+ else if ((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0))
+ daysInLastMonth = 30;
+ else
+ daysInLastMonth = 31;
+}
+
+void calcCalendar() {
+ int monthDiff = (weekdayOfMonthFirst == 0 ? 0 : -1);
+ int dim = daysInLastMonth;
+ int i = 0, j = 0;
+ int toFill = (weekdayOfMonthFirst == 0
+ ? 1
+ : (daysInLastMonth - (weekdayOfMonthFirst - 1)));
+
+ while (i < 6 && j < 7) {
+ // Fill it
+ calendar[i][j] = toFill;
+ if (toFill == day && monthDiff == 0 && highlight)
+ today[i][j] = 1;
+ else if (monthDiff == 0)
+ today[i][j] = 0;
+ else
+ today[i][j] = -1;
+ // Next day
+ toFill++;
+ if (toFill > dim) {
+ monthDiff++;
+ if (monthDiff == 0)
+ dim = daysInMonth;
+ else if (monthDiff == 1)
+ dim = daysInNextMonth;
+ toFill = 1;
+ }
+ // Next tile
+ j++;
+ if (j == 7) {
+ j = 0;
+ i++;
+ }
+ }
+}
+
+void printCalendar() {
+ cout << '[';
+ for (int i = 0; i < 6; i++) {
+ cout << '[';
+ for (int j = 0; j < 7; j++) {
+ cout << "{\"day\":" << calendar[i][j]
+ << ",\"today\":" << today[i][j] << "}";
+ if (j < 7 - 1) cout << ',';
+ }
+ cout << ']';
+ if (i < 6 - 1) cout << ',';
+ }
+ cout << ']';
+}
+
+int main(int argc, char* argv[]) {
+ if (argc == 1)
+ getTime();
+ else if(argc == 5)
+ setTime(stoi(argv[1]), stoi(argv[2]), stoi(argv[3]), stoi(argv[4]));
+ else
+ cout << " - Run \"calendarlayout\" to get calendar for today\n - Run\"calendarlayout \" to get calendar of the day specified";
+ checkLeapYear();
+ getMonthDays();
+ calcCalendar();
+ printCalendar();
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/cavajson.cpp b/hybrid-summer/.config/eww/scripts/cavajson.cpp
new file mode 100644
index 000000000..60b98d84c
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/cavajson.cpp
@@ -0,0 +1,30 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+void cavaToJson(std::string& s) {
+ for(int i = 0; i < s.size(); i++){
+ if(s[i] == ';') s[i] = ',';
+ }
+ s.pop_back();
+}
+
+int main()
+{
+ std::unique_ptr pipe(popen("cava -p ~/.config/eww/scripts/custom_configs/cava", "r"), pclose);
+ if (!pipe) {
+ throw std::runtime_error("popen() failed!");
+ }
+ boost::iostreams::file_descriptor_source fd(fileno(pipe.get()), boost::iostreams::never_close_handle);
+ boost::iostreams::stream is(fd);
+ std::string line;
+ while (std::getline(is, line)) {
+ cavaToJson(line);
+ std::cout << '[' << line << ']' << std::endl; // print the output line by line
+ }
+ return 0;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/checkcjk b/hybrid-summer/.config/eww/scripts/checkcjk
new file mode 100755
index 000000000..459e93029
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/checkcjk
@@ -0,0 +1,24 @@
+#!/bin/python3
+
+# Import the re module
+import re
+
+# Define a function that takes a string as an argument and returns True if it contains CJK characters, False otherwise
+def check_cjk(string):
+ # Use a regular expression that matches any of these Unicode ranges: U+3040 - U+30FF (hiragana and katakana), U+3400 - U+4DBF (CJK unified ideographs extension A), U+4E00 - U+9FFF (CJK unified ideographs), U+F900 - U+FAFF (CJK compatibility ideographs), U+FF66 - U+FF9F (half-width katakana)
+ pattern = r' [\\u3040-\\u30ff\\u3400-\\u4dbf\\u4e00-\\u9fff\\uf900-\\ufaff\\uff66-\\uff9f]'
+ # Search for the pattern in the string
+ match = re.search(pattern, string)
+ # Return True if there is a match, False otherwise
+ return bool(match)
+
+# Read a string from standard input
+input = input("Enter a string: ")
+
+# Call the function and print the result
+if check_cjk(input):
+ print("The string contains CJK characters.")
+else:
+ print("The string does not contain CJK characters.")
+
+ ・インザナイト
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/colorgen b/hybrid-summer/.config/eww/scripts/colorgen
new file mode 100755
index 000000000..56a9bedd4
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/colorgen
@@ -0,0 +1,97 @@
+#!/usr/bin/bash
+
+OPACITY=0.75
+
+IMGPATH=$1
+coverurl=$2
+
+coverpath="$IMGPATH"
+# Generate colors
+wal -c
+lightdark=$(cat scripts/workdir/__mode_light_dark.txt)
+wal -i "$IMGPATH" -n -t -s -e $lightdark -q
+
+themejson=$(cat ~/.cache/wal/colors.json | gojq -c -M)
+themejson="${themejson::-1}"
+themejson="$themejson"',"source":"'"$3"'"}'
+echo $themejson
+
+maincol="$(printf "$themejson" | gojq -c -M -r '.colors.color4')"
+# scripts/material_colors.py --path "$IMGPATH" $lightdark > tmp/_material.colorpallete
+scripts/material_colors.py --color "$maincol" "$lightdark" > tmp/_material.colorpallete &
+accent=$(scripts/material_colors.py --color "$maincol" "$lightdark" | grep '$onPrimaryContainer: ' | sed 's/$onPrimaryContainer: //g' | sed 's/;//g')
+tertiary=$(scripts/material_colors.py --color "$maincol" "$lightdark" | grep '$tertiary: ' | sed 's/$tertiary: //g' | sed 's/;//g')
+
+printf '{"image": "'"$coverpath"'", "color": '"$themejson"'}\n'
+
+# Get color in rgb
+colorsreg=$(cat ~/.cache/wal/colors-putty.reg)
+rgb_bg=$(echo $colorsreg | tr ' ' '\n' | grep 'Colour3')
+rgb_bg="${rgb_bg#*=}"
+rgb_bg="${rgb_bg#*\"}"
+rgb_bg="${rgb_bg::-1}"
+rgb_bg='rgba('"$rgb_bg"','"$OPACITY"')'
+# echo $rgb_bg
+
+# notify-send 'eww' 'i found a url!'
+
+# Write to scss
+echo '//Auto generated color theme for image at:' "$coverurl" > './tmp/_colorscheme.colorpallete'
+echo '@function bluetint($color, $percentage) { @return mix(#CDDFED, $color, $percentage); }' >> './tmp/_colorscheme.colorpallete'
+echo '@function blueshade($color, $percentage) { @return mix(#152E50, $color, $percentage); }' >> './tmp/_colorscheme.colorpallete'
+printf '$colorbarbg: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.special.background' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$colorbg: ' >> './tmp/_colorscheme.colorpallete'
+printf "$rgb_bg"';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$colortext: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.special.foreground' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color0: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color1' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color1: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color2' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color2: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color3' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color3: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color4' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color4: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color5' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color5: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color6' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color6: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color7' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+printf '$color7: ' >> './tmp/_colorscheme.colorpallete'
+printf "$themejson" | gojq -r '.colors.color4' | tr '\n' ';' >> './tmp/_colorscheme.colorpallete'
+echo '' >> './tmp/_colorscheme.colorpallete'
+
+
+gradient1=$(echo -n "$themejson" | gojq -r '.colors.color1')
+gradient2=$(echo -n "$themejson" | gojq -r '.colors.color2')
+gradient3=$(echo -n "$themejson" | gojq -r '.colors.color4')
+
+# Write hyprland color config
+echo '# Auto generated color theme for image at:' "$coverurl" > './tmp/colors_generated.conf'
+echo 'general {' >> './tmp/colors_generated.conf'
+echo ' col.active_border = rgba('"${gradient1#*#}FF"') rgba('"${gradient2#*#}FF"') rgba('"${gradient3#*#}FF"') 45deg' >> './tmp/colors_generated.conf'
+echo ' col.inactive_border = rgba('"${gradient1#*#}66"')' >> './tmp/colors_generated.conf'
+echo '}' >> './tmp/colors_generated.conf'
+
+# Print json to stdout
+echo "$accent" > 'tmp/_iconcolor.txt'
+echo "$tertiary" >> 'tmp/_iconcolor.txt'
+printf "$themejson" | gojq -r '.colors.color2' >> 'tmp/_iconcolor.txt'
+printf "$themejson" | gojq -r '.colors.color4' >> 'tmp/_iconcolor.txt'
+printf "$themejson" | gojq -r '.colors.color5' >> 'tmp/_iconcolor.txt'
+printf "$themejson" | gojq -r '.colors.color5' >> 'tmp/_iconcolor.txt'
+
+# beatmappacks tertiary, forum color1, search color3, search color4, tournaments color4
+#
diff --git a/hybrid-summer/.config/eww/scripts/colormanage b/hybrid-summer/.config/eww/scripts/colormanage
new file mode 100755
index 000000000..924011c60
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/colormanage
@@ -0,0 +1,40 @@
+#!/usr/bin/bash
+
+cd ~/.config/eww/ || exit
+
+if [ $1 == "get" ]; then
+ hyprctl keyword misc:disable_autoreload true
+ cp './tmp/_iconcolor.txt' './css/_iconcolor.txt'
+ cp './tmp/_colorscheme.colorpallete' './css/_colorscheme.scss'
+ cp './tmp/_material.colorpallete' './css/_material.scss'
+ cp './tmp/colors_generated.conf' ~/.config/hypr/colors.conf
+ applycolor=$(cat './css/_iconcolor.txt' | head -1)
+ scripts/applycolor "$applycolor"
+elif [ $1 == "default" ]; then
+ hyprctl keyword misc:disable_autoreload true
+ cp './css/_iconcolor_default.txt' './css/_iconcolor.txt'
+ cp css/_colorscheme_default.scss css/_colorscheme.scss
+ cp css/_material_default.scss css/_material.scss
+ cp ~/.config/hypr/colors_default.conf ~/.config/hypr/colors.conf
+ applycolor=$(cat css/_iconcolor.txt | head -1)
+ scripts/applycolor "$applycolor"
+elif [ $1 == "save" ]; then
+ eww close themer
+ eww update themer_open=false
+ cp "css/_iconcolor.txt" "css/savedcolors/_iconcolor_$2.txt"
+ cp "css/_colorscheme.scss" "css/savedcolors/_colorscheme_$2.scss"
+ cp "css/_material.scss" "css/savedcolors/_material_$2.scss"
+ cp ~/.config/hypr/colors.conf ~/.config/hypr/savedcolors/colors_$2.conf
+elif [ $1 == "load" ]; then
+ hyprctl keyword misc:disable_autoreload true
+ eww close themer
+ eww update themer_open=false
+ cp "css/savedcolors/_iconcolor_$2.txt" "css/_iconcolor.txt"
+ cp "css/savedcolors/_colorscheme_$2.scss" "css/_colorscheme.scss"
+ cp "css/savedcolors/_material_$2.scss" "css/_material.scss"
+ cp ~/.config/hypr/savedcolors/colors_$2.conf ~/.config/hypr/colors.conf
+ applycolor=$(cat css/_iconcolor.txt | head -1)
+ scripts/applycolor "$applycolor"
+fi
+
+hyprctl reload
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/custom_configs/cava b/hybrid-summer/.config/eww/scripts/custom_configs/cava
new file mode 100644
index 000000000..4dc79a133
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/custom_configs/cava
@@ -0,0 +1,22 @@
+[general]
+mode = waves
+framerate = 60
+autosens = 1
+bars = 90
+
+[output]
+method = raw
+raw_target = /dev/stdout
+data_format = ascii
+
+[color]
+gradient = 1
+
+gradient_color_1 = '#99B5DE'
+gradient_color_2 = '#92CBF6'
+gradient_color_3 = '#ACD7F7'
+gradient_color_4 = '#B0E2F7'
+gradient_color_5 = '#DFEDF5'
+gradient_color_6 = '#FDEBD4'
+gradient_color_7 = '#E7D2D7'
+gradient_color_8 = '#C1838E'
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/dashactivate b/hybrid-summer/.config/eww/scripts/dashactivate
new file mode 100755
index 000000000..81c8619e7
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/dashactivate
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+
+cd ~
+eww close dashboard
+
+if [[ "$1" == "--web" ]]; then
+ app=$2
+ eval "${app%\%*}" &
+else
+ app=$1
+ eval "${app%\%*}" &
+ pkill dashactivate
+fi
+
diff --git a/hybrid-summer/.config/eww/scripts/editmode.sh b/hybrid-summer/.config/eww/scripts/editmode.sh
new file mode 100755
index 000000000..c14b92876
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/editmode.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+if [ "$1" == "enable" ]; then
+ hyprctl keyword bindm ,mouse:273,resizewindow
+ hyprctl keyword bindm ,mouse:274,movewindow
+ hyprctl keyword bind ,mouse_up,workspace,+1
+ hyprctl keyword bind ,mouse_down,workspace,-1
+ eww update editing=true
+elif [ "$1" == "disable" ]; then
+ hyprctl keyword unbind ,mouse:273
+ hyprctl keyword unbind ,mouse:274
+ hyprctl keyword unbind ,mouse_up
+ hyprctl keyword unbind ,mouse_down
+ eww update editing=false
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/focuswindow b/hybrid-summer/.config/eww/scripts/focuswindow
new file mode 100755
index 000000000..9cc77c6bf
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/focuswindow
@@ -0,0 +1,6 @@
+#!/usr/bin/bash
+if [[ $1 == '_none' ]]; then
+ hyprctl dispatch workspace $2
+else
+ hyprctl dispatch focuswindow address:$1
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/get-icon.py b/hybrid-summer/.config/eww/scripts/get-icon.py
new file mode 100755
index 000000000..f95956ec5
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/get-icon.py
@@ -0,0 +1,31 @@
+#!/usr/bin/env python3
+import gi
+import sys
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk
+
+# Predefine class corrections
+if sys.argv[1] == 'Code':
+ sys.argv[1] = 'code'
+elif sys.argv[1] == 'code-url-handler':
+ sys.argv[1] = 'code'
+elif sys.argv[1] == 'Microsoft-edge':
+ sys.argv[1] = 'microsoft-edge'
+elif sys.argv[1] == 'GitHub Desktop':
+ sys.argv[1] = 'github-desktop'
+elif sys.argv[1] == 'org.kde.kolourpaint':
+ sys.argv[1] = 'kolourpaint'
+elif sys.argv[1] == 'osu!':
+ sys.argv[1] = 'osu'
+elif sys.argv[1].find("Minecraft") != -1:
+ sys.argv[1] = 'minecraft'
+# elif sys.argv[1] == 'ru-turikhay-tlauncher-bootstrap-Bootstrap':
+# sys.argv[1] = 'minecraft'
+
+icon_name = sys.argv[1]
+icon_theme = Gtk.IconTheme.get_default()
+icon = icon_theme.lookup_icon(icon_name, 48, 0)
+if icon:
+ print(icon.get_filename())
+else:
+ print("not found")
diff --git a/hybrid-summer/.config/eww/scripts/get_open_icons b/hybrid-summer/.config/eww/scripts/get_open_icons
new file mode 100755
index 000000000..d7d73383e
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/get_open_icons
@@ -0,0 +1,77 @@
+#!/usr/bin/bash
+
+cd ~/.config/eww
+
+getwins() {
+ hyprctlclients=$(hyprctl clients -j \
+ | grep -v '"mapped": ' \
+ | grep -v '"hidden": ' \
+ | grep -v '"floating": ' \
+ | grep -v '"monitor": ' \
+ | grep -v '"pid": ' \
+ | grep -v '"xwayland": ' \
+ | grep -v '"pinned":' \
+ | grep -v '"fullscreen": ' \
+ | grep -v '"fullscreenMode": ' \
+ | grep -v '"fakeFullscreen": ' \
+ | grep -v '"grouped": ')
+
+ # echo $hyprctlclients | gojq -c '.[]'
+
+ IFS=$'\n'
+ clientsarr=( $(echo $hyprctlclients | gojq -c -M '.[]') )
+
+ #For every window
+ for client in "${clientsarr[@]}"; do
+ iconpath=''
+ clientclass=$(echo "$client" | gojq -r '.class')
+ if [[ "$clientclass" == "" ]]; then
+ continue
+ fi
+
+ # Get app icon
+ if [ -f "scripts/cache/$clientclass" ]; then
+ iconpath=$(cat scripts/cache/$clientclass)
+ if [ ! -f "${iconpath}" ]; then # Cache refresh if icon doesnt exist
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ else
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ if [[ ${iconpath} == "" ]]; then
+ # Retry with lowercase if icon not found
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") $(echo "$clientclass" | tr '[:upper:]' '[:lower:]' | sed 's/\ /-/g') | head -n 1)
+
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ newname=$(scripts/iconpatch $clientclass)
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$newname" | head -n 1)
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ # Fallback app icon, replace the path below to the fallback icon of your choice
+ # iconpath="/usr/share/icons/Win11-dark/mimes/48/application-x-executable.svg"
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "application-x-executable" | head -n 1)
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ fi
+ fi
+ done
+}
+
+# Do stuff here
+getwins
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ getwins
+ done
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/getallicons.cpp b/hybrid-summer/.config/eww/scripts/getallicons.cpp
new file mode 100644
index 000000000..1e47daf4d
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/getallicons.cpp
@@ -0,0 +1,21 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "nlohmann/json.hpp"
+using namespace std;
+using json = nlohmann::json;
+
+
+
+int main(int argc, char* argv[]) {
+ ios::sync_with_stdio(false);
+ cin.tie(nullptr);
+
+ entries = exec("hyprctl clients -j | gojq -c -M");
+
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/getfirstdayofmonth b/hybrid-summer/.config/eww/scripts/getfirstdayofmonth
new file mode 100755
index 000000000..e75171fe4
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/getfirstdayofmonth
@@ -0,0 +1,39 @@
+#!/bin/bash
+# Thanks Bing!
+
+# Check if the argument is a valid number
+if [[ ! $1 =~ ^-?[0-9]+$ ]]; then
+ echo "Invalid argument: $1"
+ echo "Usage: getfirstdayofmonth [NUMBER]"
+ exit 1
+fi
+
+# Get the current month and year
+current_month=$(date +%m)
+current_year=$(date +%Y)
+
+# Add the argument to the current month and adjust the year if needed
+if [[ $1 -gt 0 ]]; then
+ next_month=$((current_month + $1))
+ next_year=$((current_year + ((next_month-1) / 12)))
+ next_month=$((current_month + ($1 % 12)))
+else
+ next_month=$((current_month + $1))
+ next_year=$((current_year + ((next_month-12) / 12)))
+ next_month=$((current_month + ($1 % 12)))
+fi
+
+if ((next_month > 12)); then
+ next_month=$((next_month % 12))
+elif ((next_month == 0)); then
+ next_month=12
+ # next_year=$((next_year - 1))
+elif ((next_month < 1)); then
+ next_month=$(( (next_month + 12) % 12 ))
+fi
+
+# Get the weekday name (%A), day number (%d), month name (%B) and year (%Y) of the first day of the next month
+first_day=$(date -d "$next_year-$next_month-01" '+%u %d %m %Y')
+
+# Print the result
+echo $first_day
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/hyprsettings b/hybrid-summer/.config/eww/scripts/hyprsettings
new file mode 100755
index 000000000..f98e29bba
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/hyprsettings
@@ -0,0 +1,51 @@
+#!/usr/bin/bash
+getoptions(){
+ rounding=$(hyprctl getoption decoration:rounding -j | gojq -r -c '.int')
+ gaps_in=$(hyprctl getoption general:gaps_in -j | gojq -r -c '.int')
+ gaps_out=$(hyprctl getoption general:gaps_out -j | gojq -r -c '.int')
+ border_size=$(hyprctl getoption general:border_size -j | gojq -r -c '.int')
+ force_no_accel=$(hyprctl getoption input:force_no_accel -j | gojq -r -c '.int')
+ input_sensitivity=$(hyprctl getoption input:sensitivity -j | gojq -r -c '.float')
+ touchpad_disable_while_typing=$(hyprctl getoption input:touchpad:disable_while_typing -j | gojq -r -c '.int')
+ touchpad_clickfinger_behavior=$(hyprctl getoption input:touchpad:clickfinger_behavior -j | gojq -r -c '.int')
+ blur=$(hyprctl getoption decoration:blur -j | gojq -r -c '.int')
+ blur_size=$(hyprctl getoption decoration:blur_size -j | gojq -r -c '.int')
+ blur_passes=$(hyprctl getoption decoration:blur_passes -j | gojq -r -c '.int')
+ blur_xray=$(hyprctl getoption decoration:blur_xray -j | gojq -r -c '.int')
+ nightlight=$(hyprctl getoption decoration:screen_shader -j | gojq -r -c '.str')
+ if [[ "$nightlight" == *"nothing.frag" ]]; then
+ nightlight='false'
+ else
+ nightlight='true'
+ fi
+
+ echo -n '{'
+ echo -n "\"rounding\":$rounding,"
+ echo -n "\"gaps_in\":$gaps_in,"
+ echo -n "\"gaps_out\":$gaps_out,"
+ echo -n "\"border_size\":$border_size,"
+ echo -n "\"force_no_accel\":$force_no_accel,"
+ echo -n "\"input_sensitivity\":$input_sensitivity,"
+ echo -n "\"touchpad_disable_while_typing\":$touchpad_disable_while_typing,"
+ echo -n "\"touchpad_clickfinger_behavior\":$touchpad_clickfinger_behavior,"
+ echo -n "\"blur\":$blur,"
+ echo -n "\"blur_size\":$blur_size,"
+ echo -n "\"blur_passes\":$blur_passes,"
+ echo -n "\"blur_xray\":$blur_xray,"
+ echo -n "\"nightlight\":$nightlight,"
+
+ echo '"dummy":0}'
+}
+
+getoptions
+
+if [ "$1" == "--once" ]; then
+ exit 0
+elif [ "$1" == "tickle" ]; then
+ hyprctl keyword input:force_no_accel $(hyprctl getoption input:force_no_accel -j | gojq -r -c '.int')
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "activelayout>>" | while read -r line; do
+ # echo $line
+ getoptions
+ done
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/hyprtest b/hybrid-summer/.config/eww/scripts/hyprtest
new file mode 100755
index 000000000..593c665f6
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/hyprtest
@@ -0,0 +1,10 @@
+#!/usr/bin/bash
+
+geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "firefox" | head -n 1
+
+socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r line; do
+ echo "$line"
+done
+
+
+
diff --git a/hybrid-summer/.config/eww/scripts/hyprview.sh b/hybrid-summer/.config/eww/scripts/hyprview.sh
new file mode 100755
index 000000000..d28d2b059
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/hyprview.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/bash
+
+if [[ "$1" == "--close" ]]; then
+ hyprctl keyword monitor eDP-1,1920x1080@60,0x0,1
+ hyprctl keyword monitor eDP-1,addreserved,61,0,0,0
+else
+ hyprctl keyword monitor eDP-1,1920x1080@60,0x0,0.5
+ hyprctl keyword monitor eDP-1,addreserved,533,600,960,960
+fi
diff --git a/hybrid-summer/.config/eww/scripts/iconpatch b/hybrid-summer/.config/eww/scripts/iconpatch
new file mode 100755
index 000000000..542f4c164
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/iconpatch
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+
+appname=$1
+
+if [[ "$1" == "code-url-handler" ]];then
+ echo 'code'
+elif [[ "$1" == "gnome-tweaks" ]];then
+ echo 'org.gnome.tweaks'
+elif [[ "$1" == "org."* ]];then
+ appname="${appname#*.}"
+ appname="${appname#*.}"
+ echo $appname
+fi
+
diff --git a/hybrid-summer/.config/eww/scripts/isopen.sh b/hybrid-summer/.config/eww/scripts/isopen.sh
new file mode 100755
index 000000000..03075a619
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/isopen.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+getopen(){
+ ans=$(eww windows | grep -e "$1")
+ if [ "${ans:0:1}" == "*" ]; then
+ echo "true"
+ else
+ echo "false"
+ fi
+}
+
+getopen $1
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/launchapp b/hybrid-summer/.config/eww/scripts/launchapp
new file mode 100755
index 000000000..7a30072a8
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/launchapp
@@ -0,0 +1,38 @@
+#!/usr/bin/bash
+
+~/.config/eww/scripts/toggle-overview.sh --close &
+~/.config/eww/scripts/toggle-winstart.sh --close &
+
+if [[ "$1" == ">"* ]]; then
+ args=( $1 )
+ if [[ "${args[0]}" == ">music" ]]; then
+ scripts/colormanage get
+ elif [[ "${args[0]}" == ">load" ]]; then
+ scripts/colormanage load "${args[1]}"
+ elif [[ "${args[0]}" == ">save" ]]; then
+ scripts/colormanage save "${args[1]}"
+ elif [[ "${args[0]}" == ">light" ]]; then
+ scripts/togglelight light
+ elif [[ "${args[0]}" == ">dark" ]]; then
+ scripts/togglelight dark
+ elif [[ "${args[0]}" == ">wall" ]]; then
+ scripts/colorgen 'images/wallpaper/wallpaper' '[Local wallpaper]' ''
+ scripts/colormanage get
+ elif [[ "${args[0]}" == ">segs" ]]; then
+ python3 scripts/waifupics.py --segs
+ elif [[ "${args[0]}" == ">uwu" ]]; then
+ python3 scripts/waifupics.py
+ elif [[ "${args[0]}" == ">r" ]]; then
+ pkill eww && eww daemon && eww open bar && eww open dynamic-bg && eww open bottomline
+ else
+ # notify-send 'eww' 'Invalid command!'
+ false
+ fi
+else
+ cd ~
+ app=$1
+ eval "${app%\%*}" &
+ pkill launchapp
+fi
+
+
diff --git a/hybrid-summer/.config/eww/scripts/limitlen.py b/hybrid-summer/.config/eww/scripts/limitlen.py
new file mode 100755
index 000000000..20ed07a8d
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/limitlen.py
@@ -0,0 +1,26 @@
+#!/bin/python3
+import sys
+
+def limit_length(s, newlength):
+ # Use len() function to get number of characters in s
+ char_count = 0
+ newstr = ''
+ # Use unicodedata.east_asian_width() function to check for double-width characters
+ import unicodedata
+ for c in s:
+ char_count += 1
+ if unicodedata.east_asian_width(c) == 'W':
+ char_count += 1
+ if char_count <= newlength:
+ newstr += c
+ else:
+ newstr = newstr + '...'
+ break
+ # Add double-width count to character count to get display length
+ return newstr
+
+original = sys.argv[1]
+newlen = int(sys.argv[2])
+newstr = limit_length(original, newlen)
+
+print(newstr)
diff --git a/hybrid-summer/.config/eww/scripts/listentries.py b/hybrid-summer/.config/eww/scripts/listentries.py
new file mode 100755
index 000000000..2e69e917b
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/listentries.py
@@ -0,0 +1,71 @@
+#!/usr/bin/python3
+
+import desktop_entry_lib
+import os
+import json
+import subprocess
+
+full_output = {}
+
+def read(target_file) -> None:
+ entry = desktop_entry_lib.DesktopEntry.from_file(target_file)
+
+ print("Name: " + str(entry.Name.default_text))
+ print("Comment: " + str(entry.Comment.default_text))
+ print("Exec: " + str(entry.Exec))
+
+
+def getProperties(target_file) -> None:
+ entry = desktop_entry_lib.DesktopEntry.from_file(target_file)
+
+ # iconcmd = "/usr/bin/geticons " + str(entry.Icon)
+ # iconcmd = "/usr/bin/geticons"
+ # iconpath = str(subprocess.check_output(str(iconcmd), shell=True))
+ dirs = target_file.split('/')
+ entryname = dirs[-1]
+
+ # return
+ props = {
+ "name": str(entry.Name.default_text),
+ # "icon": str(entry.Icon),
+ "exec": str('gtk-launch ' + entryname)
+ }
+ return props
+
+
+if __name__ == "__main__":
+ entryFile = open("scripts/cache/entries.txt", "w")
+ # Get files
+ entries = list(str(s) for s in os.listdir("/usr/share/applications"))
+ entries_flatpak = list(str(s) for s in os.listdir("/var/lib/flatpak/exports/share/applications"))
+ entries_local = list(str('../../.local/share/applications/' + s) for s in os.listdir("../../.local/share/applications/"))
+
+ for app in entries:
+ alreadythere = False
+ for localized in entries_local:
+ if app in localized:
+ alreadythere = True
+
+ if not(alreadythere):
+ entries_local.append(str('/usr/share/applications/'+app))
+
+ for app in entries_flatpak:
+ alreadythere = False
+ for localized in entries_local:
+ if app in localized:
+ alreadythere = True
+
+ if not(alreadythere):
+ entries_local.append(str('/var/lib/flatpak/exports/share/applications/'+app))
+
+ # Get properties
+ for app in entries_local:
+ if app.find('.desktop') == -1: # Skip files that aren't desktop entries
+ continue
+ this_entry = getProperties(app)
+
+ full_output[this_entry['name']] = (this_entry)
+
+ # output=json.dumps(this_entry)
+ # print(output)
+ entryFile.write(json.dumps(full_output))
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/listentrynames.py b/hybrid-summer/.config/eww/scripts/listentrynames.py
new file mode 100755
index 000000000..99ae84a22
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/listentrynames.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python3
+
+import desktop_entry_lib
+import os
+import json
+# from fuzzysearch import find_near_matches
+
+def read(target_file) -> None:
+ entry = desktop_entry_lib.DesktopEntry.from_file(target_file)
+
+ print("Name: " + str(entry.Name.default_text))
+ print("Comment: " + str(entry.Comment.default_text))
+ print("Exec: " + str(entry.Exec))
+
+
+def getProperties(target_file) -> None:
+ entry = desktop_entry_lib.DesktopEntry.from_file(target_file)
+
+ # return
+ props = {
+ "name": str(entry.Name.default_text),
+ "comment": str(entry.Comment.default_text),
+ "exec": str(entry.Exec),
+ "icon": str(entry.Icon)
+ }
+ return props
+
+
+if __name__ == "__main__":
+ entryFile = open("scripts/cache/entrynames.txt", "w")
+ # Get files
+ entries = list(str(s) for s in os.listdir("/usr/share/applications"))
+ entries_flatpak = list(str(s) for s in os.listdir("/var/lib/flatpak/exports/share/applications"))
+ entries_local = list(str('../../.local/share/applications/' + s) for s in os.listdir("../../.local/share/applications/"))
+
+ for app in entries:
+ alreadythere = False
+ for localized in entries_local:
+ if app in localized:
+ alreadythere = True
+
+ if not(alreadythere):
+ entries_local.append(str('/usr/share/applications/'+app))
+
+ for app in entries_flatpak:
+ alreadythere = False
+ for localized in entries_local:
+ if app in localized:
+ alreadythere = True
+
+ if not(alreadythere):
+ entries_local.append(str('/var/lib/flatpak/exports/share/applications/'+app))
+
+ # Get properties
+ for app in entries_local:
+ if app.find('.desktop') == -1: # Skip files that aren't desktop entries
+ continue
+
+ thisEntry = getProperties(app)
+
+ entryFile.write(thisEntry['name'])
+ entryFile.write('\n')
+
diff --git a/hybrid-summer/.config/eww/scripts/material_colors.py b/hybrid-summer/.config/eww/scripts/material_colors.py
new file mode 100755
index 000000000..6823412ce
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/material_colors.py
@@ -0,0 +1,87 @@
+#!/bin/python3
+from material_color_utilities_python import *
+from pathlib import Path
+import sys
+
+img = 0
+newtheme=0
+if len(sys.argv) > 1 and sys.argv[1] == '--path':
+ img = Image.open(sys.argv[2])
+ basewidth = 64
+ wpercent = (basewidth/float(img.size[0]))
+ hsize = int((float(img.size[1])*float(wpercent)))
+ img = img.resize((basewidth,hsize),Image.Resampling.LANCZOS)
+ newtheme = themeFromImage(img)
+elif len(sys.argv) > 1 and sys.argv[1] == '--color':
+ colorstr = sys.argv[2]
+ newtheme = themeFromSourceColor(argbFromHex(colorstr))
+else:
+ img = Image.open(str(Path.home())+'/.config/eww/images/wallpaper/wallpaper')
+ basewidth = 64
+ wpercent = (basewidth/float(img.size[0]))
+ hsize = int((float(img.size[1])*float(wpercent)))
+ img = img.resize((basewidth,hsize),Image.Resampling.LANCZOS)
+ newtheme = themeFromImage(img)
+
+colorscheme=0
+if("-l" in sys.argv):
+ colorscheme = newtheme.get('schemes').get('light')
+else:
+ colorscheme = newtheme.get('schemes').get('dark')
+
+primary = colorscheme.get_primary()
+onPrimary = colorscheme.get_onPrimary()
+primaryContainer = colorscheme.get_primaryContainer()
+onPrimaryContainer = colorscheme.get_onPrimaryContainer()
+secondary = colorscheme.get_secondary()
+onSecondary = colorscheme.get_onSecondary()
+secondaryContainer = colorscheme.get_secondaryContainer()
+onSecondaryContainer = colorscheme.get_onSecondaryContainer()
+tertiary = colorscheme.get_tertiary()
+onTertiary = colorscheme.get_onTertiary()
+tertiaryContainer = colorscheme.get_tertiaryContainer()
+onTertiaryContainer = colorscheme.get_onTertiaryContainer()
+error = colorscheme.get_error()
+onError = colorscheme.get_onError()
+errorContainer = colorscheme.get_errorContainer()
+onErrorContainer = colorscheme.get_onErrorContainer()
+background = colorscheme.get_background()
+onBackground = colorscheme.get_onBackground()
+surface = colorscheme.get_surface()
+onSurface = colorscheme.get_onSurface()
+surfaceVariant = colorscheme.get_surfaceVariant()
+onSurfaceVariant = colorscheme.get_onSurfaceVariant()
+outline = colorscheme.get_outline()
+shadow = colorscheme.get_shadow()
+inverseSurface = colorscheme.get_inverseSurface()
+inverseOnSurface = colorscheme.get_inverseOnSurface()
+inversePrimary = colorscheme.get_inversePrimary()
+
+
+print('$primary: ' + hexFromArgb(primary) + ';')
+print('$onPrimary: ' + hexFromArgb(onPrimary) + ';')
+print('$primaryContainer: ' + hexFromArgb(primaryContainer) + ';')
+print('$onPrimaryContainer: ' + hexFromArgb(onPrimaryContainer) + ';')
+print('$secondary: ' + hexFromArgb(secondary) + ';')
+print('$onSecondary: ' + hexFromArgb(onSecondary) + ';')
+print('$secondaryContainer: ' + hexFromArgb(secondaryContainer) + ';')
+print('$onSecondaryContainer: ' + hexFromArgb(onSecondaryContainer) + ';')
+print('$tertiary: ' + hexFromArgb(tertiary) + ';')
+print('$onTertiary: ' + hexFromArgb(onTertiary) + ';')
+print('$tertiaryContainer: ' + hexFromArgb(tertiaryContainer) + ';')
+print('$onTertiaryContainer: ' + hexFromArgb(onTertiaryContainer) + ';')
+print('$error: ' + hexFromArgb(error) + ';')
+print('$onError: ' + hexFromArgb(onError) + ';')
+print('$errorContainer: ' + hexFromArgb(errorContainer) + ';')
+print('$onErrorContainer: ' + hexFromArgb(onErrorContainer) + ';')
+print('$colorbarbg: ' + hexFromArgb(background) + ';')
+print('$onBackground: ' + hexFromArgb(onBackground) + ';')
+print('$surface: ' + hexFromArgb(surface) + ';')
+print('$onSurface: ' + hexFromArgb(onSurface) + ';')
+print('$surfaceVariant: ' + hexFromArgb(surfaceVariant) + ';')
+print('$onSurfaceVariant: ' + hexFromArgb(onSurfaceVariant) + ';')
+print('$outline: ' + hexFromArgb(outline) + ';')
+print('$shadow: ' + hexFromArgb(shadow) + ';')
+print('$inverseSurface: ' + hexFromArgb(inverseSurface) + ';')
+print('$inverseOnSurface: ' + hexFromArgb(inverseOnSurface) + ';')
+print('$inversePrimary: ' + hexFromArgb(inversePrimary) + ';')
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/memory b/hybrid-summer/.config/eww/scripts/memory
new file mode 100755
index 000000000..d2856d98a
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/memory
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+
+while true; do
+ # human-readable
+ freeH=$(free -h --si | rg "Mem:")
+ swapfreeH=$(free -h --si | rg "Swap:")
+ # non-human-readable
+ freeN=$(free --mega | rg "Mem:")
+ swapfreeN=$(free --mega | rg "Swap:")
+
+ total="$(echo "$freeH" | awk '{ print $2 }')"
+ used="$(echo "$freeH" | awk '{ print $3 }')"
+ t="$(echo "$freeN" | awk '{ print $2 }')"
+ u="$(echo "$freeN" | awk '{ print $3 }')"
+
+ swaptotal="$(echo "$swapfreeH" | awk '{ print $2 }')"
+ swapused="$(echo "$swapfreeH" | awk '{ print $3 }')"
+ swapt="$(echo "$swapfreeN" | awk '{ print $2 }')"
+ swapu="$(echo "$swapfreeN" | awk '{ print $3 }')"
+
+ free=$(printf '%.1fG' "$(bc -l <<< "($t - $u) / 1000")")
+ perc=$(printf '%.1f' "$(free -m | rg Mem | awk '{print ($3/$2)*100}')")
+
+ swapfree=$(printf '%.1fG' "$(bc -l <<< "($swapt - $swapu) / 1000")")
+ swapperc=$(printf '%.1f' "$(free -m | rg Swap | awk '{print ($3/$2)*100}')")
+
+ echo '{ "total": "'"$total"'", "used": "'"$used"'", "free": "'"$free"'", "swaptotal": "'"$swaptotal"'", "swapused": "'"$swapused"'", "swappercentage": '"$swapperc"', "swapfree": "'"$swapfree"'", "percentage": '"$perc"' }'
+
+ sleep 3
+done
diff --git a/hybrid-summer/.config/eww/scripts/mousetrack.cpp b/hybrid-summer/.config/eww/scripts/mousetrack.cpp
new file mode 100644
index 000000000..f8c5df702
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/mousetrack.cpp
@@ -0,0 +1,52 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+using namespace std;
+
+void cavaToJson(std::string& s) {
+ for(int i = 0; i < s.size(); i++){
+ if(s[i] == ';') s[i] = ',';
+ }
+ s.pop_back();
+}
+
+void cursorPosToJson(std::string& s) {
+ for(int i = 0; i < s.size(); i++){
+ if(s[i] == ';') s[i] = ',';
+ }
+ s.pop_back();
+}
+
+string exec(const char* cmd) {
+ array buffer;
+ string result;
+ unique_ptr pipe(popen(cmd, "r"), pclose);
+ if (!pipe) {
+ throw runtime_error("popen() failed!");
+ }
+ while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+ result += buffer.data();
+ }
+ return result;
+}
+
+int main()
+{
+ std::unique_ptr pipe(popen("cava -p ~/.config/eww/scripts/custom_configs/cava", "r"), pclose);
+ if (!pipe) {
+ throw std::runtime_error("popen() failed!");
+ }
+ boost::iostreams::file_descriptor_source fd(fileno(pipe.get()), boost::iostreams::never_close_handle);
+ boost::iostreams::stream is(fd);
+ std::string line;
+ while (std::getline(is, line)) {
+ string st = exec("hyprctl cursorpos");
+ st.pop_back();
+ cout << '[' << st << ']' << endl;
+ }
+ return 0;
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/music b/hybrid-summer/.config/eww/scripts/music
new file mode 100755
index 000000000..e89effa7f
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/music
@@ -0,0 +1,158 @@
+#!/usr/bin/env bash
+
+prevtitle=''
+prevartist=''
+
+get_status() {
+ s=$1
+ if [ "$s" = "Playing" ]; then
+ echo ""
+ else
+ echo ""
+ fi
+}
+
+get_length_sec() {
+ len=$1
+ if [ -z "$len" ]; then
+ echo 0
+ else
+ bc <<< "$len / 1000000"
+ fi
+}
+
+get_length_time() {
+ len=$1
+ if [ -n "$len" ]; then
+ len=$(bc <<< "$len / 1000000 + 1")
+ date -d@"$len" +%M:%S
+ else
+ echo ""
+ fi
+}
+
+get_position() {
+ pos=$1
+ len=$2
+ if [ -n "$pos" ]; then
+ bc -l <<< "$pos / $len * 100"
+ else
+ echo 0
+ fi
+}
+
+get_position_time() {
+ pos=$1
+ if [ -n "$pos" ]; then
+ date -d@"$(bc <<< "$pos / 1000000")" +%M:%S
+ else
+ echo ""
+ fi
+}
+
+get_cover() {
+ # COVER_URL=$1
+ mkdir -p "eww_covers"
+ cd "eww_covers" || exit
+
+ IMGPATH="cover_art"
+ echo '{"image": "eww_covers/cover_art_default", "color": {"alpha":"100","colors":{"color0":"#111215","color1":"#2B698F","color10":"#597591","color11":"#447CC0","color12":"#3A9FB7","color13":"#6192A6","color14":"#60ABCC","color15":"#c4c6ca","color2":"#597591","color3":"#447CC0","color4":"#3A9FB7","color5":"#6192A6","color6":"#60ABCC","color7":"#c4c6ca","color8":"#898a8d","color9":"#2B698F"},"special":{"background":"#111215","cursor":"#c4c6ca","foreground":"#c4c6ca"},"wallpaper":"~/.config/eww/eww_covers/cover_art","source":""}}'
+
+ playerctl -F metadata mpris:artUrl 2>/dev/null | while read -r COVER_URL; do
+ music_source=''
+ if [[ "$COVER_URL" = https* ]]; then
+ music_source=''
+ coverurl="$(playerctl metadata mpris:artUrl)"
+ coverurl_highres_yt="$(echo $coverurl | sed 's/hqdefault/maxresdefault/g')"
+ coverurl_highres_soundcloud="$(echo $coverurl | sed 's/80x80/500x500/g')"
+
+ # SoundCloud
+ if [[ "$coverurl" == *"sndcdn"* ]]; then
+ music_source=''
+ curl --silent --output "$IMGPATH""_soundcloud" "$coverurl_highres_soundcloud" -q –read-timeout=0.1
+ cp "$IMGPATH""_soundcloud" "$IMGPATH"
+ imgsize=$(echo $(du -b ~/.config/eww/eww_covers/cover_art | tr '\t' '\n' | grep -v 'cover_art'))
+ # Youtube
+ elif [[ "$coverurl" == *"ytimg"* ]]; then
+ music_source=''
+ curl --silent --output "$IMGPATH""_yt" "$coverurl_highres_yt" -q –read-timeout=0.1
+ cp "$IMGPATH""_yt" "$IMGPATH"
+ imgsize=$(echo $(du -b ~/.config/eww/eww_covers/cover_art | tr '\t' '\n' | grep -v 'cover_art'))
+ # Likely YT Music
+ elif [[ "$coverurl" == *"googleusercontent"* ]]; then
+ music_source=''
+ curl --silent --output "$IMGPATH""_other" "$coverurl" -q –read-timeout=0.1
+ cp "$IMGPATH""_other" "$IMGPATH"
+ imgsize=$(echo $(du -b ~/.config/eww/eww_covers/cover_art | tr '\t' '\n' | grep -v 'cover_art'))
+ # Any other
+ else
+ curl --silent --output "$IMGPATH""_other" "$coverurl" -q –read-timeout=0.1
+ cp "$IMGPATH""_other" "$IMGPATH"
+ imgsize=$(echo $(du -b ~/.config/eww/eww_covers/cover_art | tr '\t' '\n' | grep -v 'cover_art'))
+ fi
+ # Fallback
+ if [ "$imgsize" == "0" ] || [ ! "$(diff ~/.config/eww/eww_covers/cover_art ~/.config/eww/eww_covers/cover_art_error)" ]; then
+ curl --silent --output "$IMGPATH""_lowres" "$coverurl" -q –read-timeout=0.1
+ cp "$IMGPATH""_lowres" "$IMGPATH"
+ fi
+
+ #Generate colors
+ cd ..
+ scripts/colorgen 'eww_covers/'$IMGPATH $coverurl "$music_source"
+ cd "eww_covers"
+ elif [ "$COVER_URL" = "" ]; then
+ echo '{"image": "", "color": "$bg"}'
+ else
+ COVER_URL="${COVER_URL:7}"
+ cp "$COVER_URL" "$IMGPATH"
+
+ cd ..
+ scripts/colorgen '"eww_covers/'$IMGPATH'"' $coverurl "$music_source"
+ cd "eww_covers"
+ fi
+ done
+}
+
+# SANITIZE FIX
+sanitize() {
+ echo "$1" | sed 's/"/\"/g'
+}
+
+if [ "$1" = "cover" ]; then
+ get_cover
+elif [ "$1" = "name" ]; then
+ echo '{"artist": "", "title": ""}'
+ playerctl -F metadata -f '{{title}}\{{artist}}\' 2>/dev/null | while IFS="$(printf '\\')" read -r title artist; do
+
+ if [[ "$title" == *" - YouTube"* && "$artist" == "" ]]; then
+ continue
+ fi
+ title=$(scripts/limitlen.py "$title" 41)
+
+ gojq --null-input -r -c \
+ --arg artist "$(sanitize "$artist")" \
+ --arg title "$(sanitize "$title")" \
+ '{"artist": $artist, "title": $title}'
+
+ done
+else
+ echo '{"artist": "", "title": "", "status": "", "position": "", "position_time": "", "length": ""}'
+ playerctl -F metadata -f '{{title}}\{{artist}}\{{status}}\{{position}}\' 2>/dev/null | while IFS="$(printf '\\')" read -r title artist status position; do
+
+ if [[ "$title" == *" - YouTube" && "$artist" == "" ]]; then
+ continue
+ fi
+ len=$(playerctl metadata mpris:length)
+ title=$(scripts/limitlen.py "$title" 40)
+
+ gojq --null-input -r -c \
+ --arg artist "$(sanitize "$artist")" \
+ --arg title "$(sanitize "$title")" \
+ --arg status "$(get_status "$status")" \
+ --arg pos "$(get_position "$position" "$len")" \
+ --arg pos_time "$(get_position_time "$position")" \
+ --arg length "$(get_length_time "$len")" \
+ '{"artist": $artist, "title": $title, "status": $status, "position": $pos, "position_time": $pos_time, "length": $length}'
+
+ done
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/net b/hybrid-summer/.config/eww/scripts/net
new file mode 100755
index 000000000..fc1d97df7
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/net
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+
+toggle() {
+ status=$(rfkill -J | jaq -r '.rfkilldevices[] | select(.type == "wlan") | .soft' | head -1)
+
+ if [ "$status" = "unblocked" ]; then
+ rfkill block wlan
+ else
+ rfkill unblock wlan
+ fi
+}
+
+if [ "$1" = "toggle" ]; then
+ toggle
+else
+ while true; do
+ status=$(nmcli g | tail -n 1 | awk '{print $1}')
+ signal=$(nmcli -f in-use,signal dev wifi | rg "\*" | awk '{ print $2 }')
+ essid=$(nmcli -t -f NAME connection show --active | head -n1 | sed 's/\"/\\"/g')
+
+ icons=("" "" "" "" "")
+
+ if [ "$status" = "disconnected" ] ; then
+ icon=""
+ color="#988ba2"
+ else
+ level=$(awk -v n="$signal" 'BEGIN{print int((n-1)/20)}')
+ if [ "$level" -gt 4 ]; then
+ level=4
+ fi
+
+ icon=${icons[$level]}
+ color="#cba6f7"
+ fi
+
+ echo '{ "essid": "'"$essid"'", "icon": "'"$icon"'", "color": "'"$color"'", "level": "'"$level"'" }'
+
+ sleep 4
+ done
+fi
diff --git a/hybrid-summer/.config/eww/scripts/notifications b/hybrid-summer/.config/eww/scripts/notifications
new file mode 100755
index 000000000..d8680f279
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/notifications
@@ -0,0 +1,95 @@
+#!/usr/bin/env bash
+
+tmp=scripts/cache/dunst-history.json
+lock="scripts/cache/dunst-toggle.lock"
+lockinfo="scripts/cache/dunst-lock-info"
+cd ~/.config/eww
+
+touch $lockinfo
+
+declare ids
+export toggle_icon=""
+
+sanitize() {
+ retstr=$(echo $1 | sed 's/\\\\/\\\\\\\\/g' | sed 's/"/\\"/g')
+
+ # echo "original: $1"
+ echo "$retstr"
+ # echo 'sanitized'
+}
+
+get_ids() {
+ mapfile -t ids < <(dunstctl history | gojq -r ".data[] | .[] | select(.appname.data != \"Spotify\") | .id.data")
+}
+
+get_notif() {
+ echo -n '['
+
+ for id in "${ids[@]}"; do
+ mapfile -t n < <(gojq -r ".data[] | .[] | select(.id.data == $id) | .appname.data, .summary.data, .body.data" "$tmp" | sed -r '/^\s*$/d' | sed -e 's/\%/ percent/g')
+ ohkay=$(sanitize "${n[1]}")
+ # echo $ohkay
+ echo -n ''$([ $id -eq ${ids[0]} ] || echo ,)' { '
+ echo -n '"id": "'"$id"'", "appname": "'"${n[0]}"'", "summary": "'"$ohkay"'", "body": "'"${n[2]}"'"'
+ echo -n '}'
+ done
+
+ echo ']'
+}
+
+toggle() {
+ dunstctl set-paused toggle
+
+ if [ ! -f "$lock" ]; then
+ export toggle_icon=""
+ touch "$lock"
+ else
+ export toggle_icon=""
+ rm "$lock"
+ fi
+
+ echo "icon_change" > $lockinfo
+}
+
+clear() {
+ dunstctl history-clear
+ echo "icon_change" > $lockinfo
+}
+
+get_icon() {
+ if [ ${#ids[@]} -eq 0 ]; then
+ echo ""
+ else
+ echo ""
+ fi
+}
+
+if [ "$1" == "--once" ]; then
+ dunstctl history > "$tmp"
+ get_ids
+ get_notif
+elif [ "$1" == "toggle" ]; then
+ toggle
+ dunstctl history > "$tmp"
+elif [ "$1" == "clear" ]; then
+ clear
+ dunstctl history > "$tmp"
+elif [ "$1" == "icons" ]; then
+ dunstctl history > "$tmp"
+ get_ids
+ is_paused=$(dunstctl is-paused)
+ echo '{"toggle_icon": "'"$toggle_icon"'", "paused": '"$is_paused"', "icon": "'"$(get_icon)"'"}'
+ tail -f "$lockinfo" | while read -r; do
+ get_ids
+ is_paused=$(dunstctl is-paused)
+ echo '{"toggle_icon": "'"$toggle_icon"'", "paused": '"$is_paused"', "icon": "'"$(get_icon)"'"}'
+ done
+else
+ dunstctl history > "$tmp"
+ get_ids
+ get_notif
+ tail -f "$tmp" 2>/dev/null | rg --line-buffered "aa\{sv\}" | while read -r; do
+ get_ids
+ get_notif
+ done
+fi
diff --git a/hybrid-summer/.config/eww/scripts/open-blurred.sh b/hybrid-summer/.config/eww/scripts/open-blurred.sh
new file mode 100755
index 000000000..81d2b27d9
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/open-blurred.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/bash
+
+exit 0 # BLURS ARE FUCKING UNSTABLE AAAAAAA
+
+current_addresses=("$(hyprctl layers -j | jq -r '.[] | .levels | ."2" | .[] | select(.namespace == "gtk-layer-shell") | .address')")
+for current_address in ${current_addresses[@]}; do
+ hyprctl keyword layerrule "blur,address:$current_address"
+ hyprctl keyword layerrule "ignorezero,address:$current_address"
+done
diff --git a/hybrid-summer/.config/eww/scripts/overview-thumbnails b/hybrid-summer/.config/eww/scripts/overview-thumbnails
new file mode 100755
index 000000000..cfe8e7967
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/overview-thumbnails
@@ -0,0 +1,94 @@
+#!/usr/bin/bash
+dummy='{"thumbnail": null}'
+
+getwins() {
+ overviewopen=$(scripts/isopen.sh overview)
+ if [ "$overviewopen" == "true" ]; then
+ return
+ fi
+
+ focusedws=$(hyprctl -j monitors | gojq -r '.[] | select(.focused == true) | .activeWorkspace.id')
+ hyprctlclients=$(hyprctl clients -j \
+ | grep -v '"xwayland": ' \
+ | grep -v '"grouped": ' \
+ | grep -v '"pid": ' \
+ | grep -v '"fullscreenMode": ' \
+ | grep -v '"monitor": ' \
+ | grep -v '"floating": ' \
+ | grep -v '"fullscreen": ' \
+ | grep -v '"pinned":') # | grep -v ""name":")
+ # echo '-=-=-=- final output -=-=-=-'
+ # echo "$toprint"
+ # echo $(echo "$hyprctlclients") # Print on one line only
+
+ workspace=('[' '[' '[' '[' '[' '[' '[' '[' '[' '[')
+ workspacecnt=(1 1 1 1 1 1 1 1 1 1)
+ outputstring='{'
+
+ wsid=0
+
+ # echo $hyprctlclients | gojq -c '.[]'
+
+ IFS=$'\n'
+ clientsarr=( $(echo $hyprctlclients | gojq -c -M '.[]') )
+
+ #For every window
+ for client in "${clientsarr[@]}"; do
+ wsid=$(echo $client | gojq -c -M '.workspace.id')
+ ((wsid-=1))
+ if [[ "$wsid" == "-100" ]]; then
+ continue
+ fi
+ if [[ "${workspacecnt[wsid]}" != "0" ]]; then
+ workspace[wsid]+=","
+ fi
+
+ clientclass=$(echo $client | gojq -r '.class')
+ iconpath=''
+ thumbnailpath=''
+
+ # Get thumbnail
+ clientaddress=$(echo $client | gojq -r '.address')
+ atx=$(echo $client | gojq -c '.at[0]')
+ aty=$(echo $client | gojq -c '.at[1]')
+ sizex=$(echo $client | gojq -c '.size[0]')
+ sizey=$(echo $client | gojq -c '.size[1]')
+ if [ "$(( wsid + 1 ))" == "$focusedws" ]; then
+ grim -g "$atx,$aty ""$sizex"'x'"$sizey" "scripts/cache/thumbnails/$clientaddress.png" -q 1 -t png -l 9
+ fi
+
+ # If thumbnail available
+ if [ -f "scripts/cache/thumbnails/$clientaddress.png" ]; then
+ thumbnailpath="scripts/cache/thumbnails/$clientaddress.png"
+ fi
+
+ client="\"$clientaddress\": \"$thumbnailpath\","
+ outputstring+="$client"
+
+ # echo -n "Window: $clientclass"
+ # echo '; icon path: '"$iconpath"
+
+
+ # echo "Count: ${workspacecnt[wsid]}"
+ # echo 'ADDED TO: workspace '"$wsid"
+ # echo ' --> '"${workspace[wsid]}"
+ ((workspacecnt[wsid]+=1))
+ done
+
+ outputstring=${outputstring::-1}
+ outputstring+='}'
+
+ # echo $outputstring
+}
+
+# Do stuff here
+getwins
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ while true; do
+ getwins
+ sleep 0.8
+ done
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/overview-wrapper b/hybrid-summer/.config/eww/scripts/overview-wrapper
new file mode 100755
index 000000000..b48d0769a
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/overview-wrapper
@@ -0,0 +1,11 @@
+#!/usr/bin/bash
+
+scripts/overview "$1"
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r line; do
+ scripts/overview "$1"
+ done
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/overview-wrapper1 b/hybrid-summer/.config/eww/scripts/overview-wrapper1
new file mode 100755
index 000000000..482bd688f
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/overview-wrapper1
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+
+scripts/overview --row 1
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ # This sleep is necessary!
+ # It prevents the script from being faster than hyprctl lmao
+ sleep 0.025
+ scripts/overview --row 1
+ done
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/overview-wrapper2 b/hybrid-summer/.config/eww/scripts/overview-wrapper2
new file mode 100755
index 000000000..2ef074e71
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/overview-wrapper2
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+
+scripts/overview --row 2
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ # This sleep is necessary!
+ # It prevents the script from being faster than hyprctl lmao
+ sleep 0.025
+ scripts/overview --row 2
+ done
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/overview.cpp b/hybrid-summer/.config/eww/scripts/overview.cpp
new file mode 100644
index 000000000..2202e3bed
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/overview.cpp
@@ -0,0 +1,102 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "nlohmann/json.hpp"
+using namespace std;
+using json = nlohmann::json;
+
+#define ROWS 2
+#define COLS 5
+
+string clients;
+json clientjson, apps;
+json workspaces;
+string workspaceInitTemplate =
+ "[{\"address\":\"_none\",\"at\":[0,0],\"class\":\"workspace\",\"size\":["
+ "1920,1080],\"title\":\"__WORKSPACE_ID\",\"workspace\":{\"id\":__WORKSPACE_"
+ "ID,\"name\":\"__WORKSPACE_ID\"}}]";
+vector appnames;
+
+string exec(const char* cmd) {
+ array buffer;
+ string result;
+ unique_ptr pipe(popen(cmd, "r"), pclose);
+ if (!pipe) {
+ throw runtime_error("popen() failed!");
+ }
+ while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+ result += buffer.data();
+ }
+ return result;
+}
+
+void initWorkspaces() {
+ for (int i = 0; i < ROWS; i++) {
+ workspaces.push_back(json::array({})); // []
+ for (int j = 0; j < COLS; j++) {
+ int workspaceNum = i * COLS + j + 1; // Note: Workspaces are 1-base
+ string workspaceInitString =
+ regex_replace(workspaceInitTemplate, regex("__WORKSPACE_ID"),
+ to_string(workspaceNum));
+ json thisWorkspaceInit = json::parse(workspaceInitString);
+ workspaces[i].push_back(thisWorkspaceInit);
+ }
+ }
+}
+
+void addApp(json& client) {
+ // Calculate position in overview tile
+ int workspaceNum = int(client["workspace"]["id"]) - 1; // 1-base to 0-base
+ if(workspaceNum < 0) return; //Skip scratchpads/specials, as they have negative ids
+ int i = workspaceNum / COLS, j = workspaceNum % COLS;
+
+ // New JSON for app
+ json newApp =
+ R"({"class": "", "workspace": {"id": 8, "name": "8"}, "title": "", "at": [0, 0], "size": [0, 0], "address": [], "icon": ""})"_json;
+ // Add normal stuff
+ newApp["class"] = client["class"];
+ newApp["address"] = client["address"];
+ newApp["workspace"] = client["workspace"];
+ newApp["title"] = client["title"];
+ newApp["at"] = client["at"];
+ newApp["size"] = client["size"];
+ // Icon path
+ string filename = string("./scripts/cache/" + string(client["class"]));
+ std::ifstream ifs(filename);
+ std::string iconpath((std::istreambuf_iterator(ifs)),
+ (std::istreambuf_iterator()));
+ while (iconpath.size() > 0 && *iconpath.rbegin() == '\n') iconpath.pop_back(); // Remove '\n'
+ newApp["icon"] = iconpath;
+
+ workspaces[i][j].push_back(newApp);
+}
+
+void getApps() {
+ // Get clients
+ clients = exec("hyprctl clients -j | gojq -c -M");
+ clientjson = json::parse(clients);
+
+ // Access the values
+ for (json client : clientjson) {
+ addApp(client);
+ }
+}
+
+int main(int argc, char* argv[]) {
+ ios::sync_with_stdio(false);
+ cin.tie(nullptr);
+
+ initWorkspaces();
+ getApps();
+ if (argc == 2) cout << workspaces[0][stoi(argv[1]) - 1] << '\n';
+ if (argc == 3 && string(argv[1]) == "--row" && stoi(argv[2]) >= 1 && stoi(argv[2]) <= ROWS) {
+ cout << workspaces[stoi(argv[2]) - 1] << '\n';
+ } else
+ cout << workspaces << '\n';
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/overview1 b/hybrid-summer/.config/eww/scripts/overview1
new file mode 100755
index 000000000..8c1e4f34a
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/overview1
@@ -0,0 +1,129 @@
+#!/usr/bin/bash
+dummy='{"address":"_none","at":[0,0],"class":"workspace","size":[1920,1080],"title":"<___overview_workspace>","workspace":{"id":<___overview_workspace>, "name": "<___overview_workspace>"}}'
+
+getwins() {
+ hyprctlclients=$(hyprctl clients -j \
+ | grep -v '"mapped": ' \
+ | grep -v '"hidden": ' \
+ | grep -v '"floating": ' \
+ | grep -v '"monitor": ' \
+ | grep -v '"pid": ' \
+ | grep -v '"xwayland": ' \
+ | grep -v '"pinned":' \
+ | grep -v '"fullscreen": ' \
+ | grep -v '"fullscreenMode": ' \
+ | grep -v '"fakeFullscreen": ' \
+ | grep -v '"grouped": ')
+
+ workspace=('[' '[' '[' '[' '[' '[' '[' '[' '[' '[')
+ workspacecnt=(1 1 1 1 1 1 1 1 1 1)
+
+ wsid=0
+ for i in 0 1 2 3 4; do
+ workspace[i]+=$(echo $dummy | sed "s/<___overview_workspace>/$((i+1))/g")
+ done
+
+ # echo $hyprctlclients | gojq -c '.[]'
+
+ IFS=$'\n'
+ clientsarr=( $(echo $hyprctlclients | gojq -c -M '.[]') )
+
+ #For every window
+ for client in "${clientsarr[@]}"; do
+ wsid=$(echo $client | gojq -c -M '.workspace.id')
+ if [[ $wsid -gt 5 ]]; then
+ continue
+ fi
+ ((wsid-=1))
+ iconpath=''
+ clientclass=$(echo "$client" | gojq -r '.class')
+ if [[ "$clientclass" == "" ]]; then
+ continue
+ fi
+ if [[ "$wsid" == "-100" ]]; then
+ continue
+ fi
+ if [[ "${workspacecnt[wsid]}" != "0" ]]; then
+ workspace[wsid]+=","
+ fi
+
+ # If thumbnail available
+ # if [ -f "scripts/cache/thumbnails/$clientaddress.png" ]; then
+ # thumbnailpath="scripts/cache/thumbnails/$clientaddress.png"
+ # fi
+
+ # Get app icon
+ if [ -f "scripts/cache/$clientclass" ]; then
+ iconpath=$(cat scripts/cache/$clientclass)
+ if [ ! -f "${iconpath}" ]; then # Cache refresh if icon doesnt exist
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ else
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ if [[ ${iconpath} == "" ]]; then
+ # Retry with lowercase if icon not found
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") $(echo "$clientclass" | tr '[:upper:]' '[:lower:]' | sed 's/\ /-/g') | head -n 1)
+
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ newname=$(scripts/iconpatch $clientclass)
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$newname" | head -n 1)
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ # Fallback app icon, replace the path below to the fallback icon of your choice
+ # iconpath="/usr/share/icons/Win11-dark/mimes/48/application-x-executable.svg"
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "application-x-executable" | head -n 1)
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ fi
+ fi
+
+ client=${client::-1}
+ client+=",\"icon\": \"$iconpath\"}"
+ workspace[wsid]+="$client" # Add window to workspace JSON
+
+ # echo -n "Window: $clientclass"
+ # echo '; icon path: '"$iconpath"
+
+
+ # echo "Count: ${workspacecnt[wsid]}"
+ # echo 'ADDED TO: workspace '"$wsid"
+ # echo ' --> '"${workspace[wsid]}"
+ ((workspacecnt[wsid]+=1))
+ done
+
+ for i in 0 1 2 3 4; do
+ workspace[i]+=']'
+ done
+
+ # echo '-=-=-=-=-=- Summary -=-=-=-=-=-'
+
+ # -=-=-=-=-=-=-=-=-=-=-=-=-=-=- PRINT STUFF HERE -=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ echo -n '['
+ for i in 0 1 2 3 4; do
+ if [[ $i != 0 ]]; then
+ echo -n ','
+ fi
+ echo -n "${workspace[i]}"
+ done
+ echo ']'
+}
+
+# Do stuff here
+getwins
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ getwins
+ done
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/overview2 b/hybrid-summer/.config/eww/scripts/overview2
new file mode 100755
index 000000000..97aa1c15b
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/overview2
@@ -0,0 +1,123 @@
+#!/usr/bin/bash
+dummy='{"address":"_none","at":[0,0],"class":"workspace","size":[1920,1080],"title":"<___overview_workspace>","workspace":{"id":<___overview_workspace>, "name": "<___overview_workspace>"}}'
+
+getwins() {
+ hyprctlclients=$(hyprctl clients -j \
+ | grep -v '"mapped": ' \
+ | grep -v '"hidden": ' \
+ | grep -v '"floating": ' \
+ | grep -v '"monitor": ' \
+ | grep -v '"pid": ' \
+ | grep -v '"xwayland": ' \
+ | grep -v '"pinned":' \
+ | grep -v '"fullscreen": ' \
+ | grep -v '"fullscreenMode": ' \
+ | grep -v '"fakeFullscreen": ' \
+ | grep -v '"grouped": ')
+
+
+
+ workspace=('[' '[' '[' '[' '[' '[' '[' '[' '[' '[')
+ workspacecnt=(1 1 1 1 1 1 1 1 1 1)
+
+ wsid=0
+ for i in 5 6 7 8 9; do
+ workspace[i]+=$(echo $dummy | sed "s/<___overview_workspace>/$((i+1))/g")
+ done
+
+ # echo $hyprctlclients | gojq -c '.[]'
+
+ IFS=$'\n'
+ clientsarr=( $(echo $hyprctlclients | gojq -c -M '.[]') )
+ for client in "${clientsarr[@]}"; do
+ wsid=$(echo $client | gojq -c -M '.workspace.id')
+ if [[ $wsid -lt 6 ]]; then
+ continue
+ fi
+ ((wsid-=1))
+ iconpath=''
+ clientclass=$(echo $client | gojq -r '.class')
+ if [[ "$clientclass" == "" ]]; then
+ continue
+ fi
+ if [[ "$wsid" == "-100" ]]; then
+ continue
+ fi
+ if [[ "${workspacecnt[wsid]}" != "0" ]]; then
+ workspace[wsid]+=","
+ fi
+
+ # Get app icon
+ if [ -f "scripts/cache/$clientclass" ]; then
+ iconpath=$(cat scripts/cache/$clientclass)
+ if [ ! -f "${iconpath}" ]; then # Cache refresh if icon doesnt exist
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ else
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$clientclass" | head -n 1)
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ if [[ ${iconpath} == "" ]]; then
+ # Retry with lowercase if icon not found
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") $(echo "$clientclass" | tr '[:upper:]' '[:lower:]' | sed 's/\ /-/g') | head -n 1)
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ newname=$(scripts/iconpatch $clientclass)
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "$newname" | head -n 1)
+ if [[ ! ${iconpath} = "" ]]; then
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ else
+ # Fallback app icon, replace the path below to the fallback icon of your choice
+ # iconpath="/usr/share/icons/Win11-dark/mimes/48/application-x-executable.svg"
+ iconpath=$(geticons -t $(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g") "application-x-executable" | head -n 1)
+ rm "scripts/cache/$clientclass"
+ echo "${iconpath}" > "scripts/cache/$clientclass"
+ fi
+ fi
+ fi
+
+ client=${client::-1}
+ client+=",\"icon\": \"$iconpath\"}"
+ workspace[wsid]+="$client" # Add window to workspace JSON
+
+ # echo -n "Window: $clientclass"
+ # echo '; icon path: '"$iconpath"
+
+
+ # echo "Count: ${workspacecnt[wsid]}"
+ # echo 'ADDED TO: workspace '"$wsid"
+ # echo ' --> '"${workspace[wsid]}"
+ ((workspacecnt[wsid]+=1))
+ done
+
+ for i in 5 6 7 8 9; do
+ workspace[i]+=']'
+ done
+
+ # echo '-=-=-=-=-=- Summary -=-=-=-=-=-'
+
+ # -=-=-=-=-=-=-=-=-=-=-=-=-=-=- PRINT STUFF HERE -=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ echo -n '['
+ for i in 5 6 7 8 9; do
+ if [[ $i != 5 ]]; then
+ echo -n ','
+ fi
+ echo -n "${workspace[i]}"
+ done
+ echo ']'
+}
+
+# Do stuff here
+getwins
+
+if [ "$1" == "--once" ]; then
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ getwins
+ done
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/scrollmonth b/hybrid-summer/.config/eww/scripts/scrollmonth
new file mode 100755
index 000000000..52e23fece
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/scrollmonth
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+
+# Get month diff
+diffmonth=$(eww get monthshift)
+if [[ "$1" == "up" ]]; then
+ diffmonth=$(( $diffmonth - 1 ))
+else
+ diffmonth=$(( $diffmonth + 1 ))
+fi
+eww update monthshift="$diffmonth" &
+
+# Get dates
+dates=$(scripts/getfirstdayofmonth "$diffmonth")
+dateSplitted=( $dates )
+newTitle=$(date -d "${dateSplitted[3]}-${dateSplitted[2]}-${dateSplitted[1]}" "+%B %Y")
+
+if [[ "$diffmonth" == "0" ]]; then
+ dates=''
+fi
+eww update calendartitle="$newTitle" &
+eww update calendar="$(scripts/calendarlayout $dates)"
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/search_items.txt b/hybrid-summer/.config/eww/scripts/search_items.txt
new file mode 100644
index 000000000..411e47b04
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/search_items.txt
@@ -0,0 +1 @@
+(box :orientation "v" :spacing 5 :class "apps" :halign "center" :valign "center" (button :class "item" :onclick "4channels &" "4channels") (button :class "item" :onclick "7za &" "7za") (button :class "item" :onclick "a52dec &" "a52dec") (button :class "item" :onclick "aafire &" "aafire") (button :class "item" :onclick "aainfo &" "aainfo") (button :class "item" :onclick "aalib-config &" "aalib-config") (button :class "item" :onclick "aasavefont &" "aasavefont") (button :class "item" :onclick "aatest &" "aatest") (button :class "item" :onclick "abw2html &" "abw2html") (button :class "item" :onclick "abw2raw &" "abw2raw"))
diff --git a/hybrid-summer/.config/eww/scripts/selectwindow b/hybrid-summer/.config/eww/scripts/selectwindow
new file mode 100755
index 000000000..2f88d9099
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/selectwindow
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+
+selected=$(eval $2 get selected)
+
+
+if [[ $selected == "_none" ]] || [[ $selected == "" ]]; then
+ eval "$2 update selected=$1"
+ selected=$(eval $2 get selected)
+else
+ hyprctl dispatch movetoworkspacesilent $3,address:$selected
+
+ eval "$2 update selected=_none"
+ selected=$(eval $2 get selected)
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/supersecretsettings/culture b/hybrid-summer/.config/eww/scripts/supersecretsettings/culture
new file mode 100755
index 000000000..28c5c0abf
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/supersecretsettings/culture
@@ -0,0 +1,18 @@
+#!/usr/bin/env bash
+plugged=0
+
+swaybg -i images/wallpaper/wallpaper-cultured &
+
+while true; do
+ STATE=$(cat /sys/class/power_supply/BATT/status)
+ if [[ "$STATE" = "Charging" ]]; then
+ if [ "$plugged" -eq "0" ]; then
+ plugged=1
+ notify-send 'Aghh~~~~'
+ play scripts/supersecretsettings/culture.mp3
+ fi
+ else
+ plugged=0
+ fi
+ sleep 1
+done
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/supersecretsettings/culture.mp3 b/hybrid-summer/.config/eww/scripts/supersecretsettings/culture.mp3
new file mode 100644
index 000000000..3614f93f1
Binary files /dev/null and b/hybrid-summer/.config/eww/scripts/supersecretsettings/culture.mp3 differ
diff --git a/hybrid-summer/.config/eww/scripts/supersecretsettings/doreload b/hybrid-summer/.config/eww/scripts/supersecretsettings/doreload
new file mode 100755
index 000000000..363dbedbc
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/supersecretsettings/doreload
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+
+cp ~/.config/hypr/hyprland.conf temporary_config.conf && cp temporary_config.conf ~/.config/hypr/hyprland.conf
+rm temporary_config.conf
+
+pkill swaybg
+swaybg -i images/wallpaper/wallpaper-normal
+
+kill $(pidof eww) && eww open bar && eww open bg-decor
diff --git a/hybrid-summer/.config/eww/scripts/taskbar.cpp b/hybrid-summer/.config/eww/scripts/taskbar.cpp
new file mode 100644
index 000000000..99301a12a
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/taskbar.cpp
@@ -0,0 +1,84 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "nlohmann/json.hpp"
+using namespace std;
+using json = nlohmann::json;
+
+string clients, pinned;
+json clientjson, apps;
+vector appnames;
+
+string exec(const char* cmd) {
+ array buffer;
+ string result;
+ unique_ptr pipe(popen(cmd, "r"), pclose);
+ if (!pipe) {
+ throw runtime_error("popen() failed!");
+ }
+ while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+ result += buffer.data();
+ }
+ return result;
+}
+
+void addApp(json& client) {
+ bool found = false;
+ for (json& obj : apps) {
+ auto it = obj.find("class");
+ if (it != obj.end() && *it == client["class"]) {
+ found = true;
+ obj["count"] = int(obj["count"]) + 1;
+ obj["address"].push_back(client["address"]);
+ obj["workspace"].push_back(client["workspace"]["id"]);
+ break;
+ }
+ }
+ if (!found) {
+ json newApp =
+ R"({"class": "", "count": 1, "workspace": [], "address": [], "icon": ""})"_json;
+ newApp["class"] = client["class"];
+ newApp["address"].push_back(client["address"]);
+ newApp["workspace"].push_back(client["workspace"]["id"]);
+ string filename = string("./scripts/cache/" + string(client["class"]));
+ std::ifstream ifs(filename);
+ std::string iconpath((std::istreambuf_iterator(ifs)),
+ (std::istreambuf_iterator()));
+ // cout << "PATH: " << filename << " | ICON PATH: " << iconpath << '\n';
+ while (iconpath.size() > 0 && *iconpath.rbegin() == '\n') iconpath.pop_back(); // Remove '\n'
+ newApp["icon"] = iconpath;
+
+ apps.push_back(newApp);
+ }
+}
+
+void getAppNameAndCount() {
+ // Get clients
+ clients = exec("hyprctl clients -j | gojq -c -M");
+ pinned = exec("cat modules/taskbar.json | gojq -c -M");
+ clientjson = json::parse(clients);
+ apps = json::parse(pinned);
+
+ // Access the values
+ for (json client : clientjson) {
+ addApp(client);
+ // cout << client << '\n';
+ }
+}
+
+void getAppIcon() {}
+
+int main() {
+ ios::sync_with_stdio(false);
+ cin.tie(nullptr);
+
+ getAppNameAndCount();
+ getAppIcon();
+ cout << apps << '\n';
+}
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/taskbarloop b/hybrid-summer/.config/eww/scripts/taskbarloop
new file mode 100755
index 000000000..edec3a371
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/taskbarloop
@@ -0,0 +1,13 @@
+#!/usr/bin/bash
+
+scripts/taskbar
+
+if [ "$1" == "--once" ]; then
+ scripts/taskbar
+ exit 0
+else
+ socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "window>>" | while read -r line; do
+ scripts/taskbar
+ echo
+ done
+fi
\ No newline at end of file
diff --git a/hybrid-summer/.config/eww/scripts/taskviewlayout.cpp b/hybrid-summer/.config/eww/scripts/taskviewlayout.cpp
new file mode 100644
index 000000000..e3c5b1873
--- /dev/null
+++ b/hybrid-summer/.config/eww/scripts/taskviewlayout.cpp
@@ -0,0 +1,102 @@
+#include
+#include
+#include
+#include
+#include