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/m3ww/.config/eww/images/logos/archlinux.svg b/m3ww/.config/eww/images/logos/archlinux.svg new file mode 100644 index 000000000..e06c1dcb9 --- /dev/null +++ b/m3ww/.config/eww/images/logos/archlinux.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/asahilinux.svg b/m3ww/.config/eww/images/logos/asahilinux.svg new file mode 100644 index 000000000..58f25e1b8 --- /dev/null +++ b/m3ww/.config/eww/images/logos/asahilinux.svg @@ -0,0 +1,90 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/budgie.svg b/m3ww/.config/eww/images/logos/budgie.svg new file mode 100644 index 000000000..b216fc782 --- /dev/null +++ b/m3ww/.config/eww/images/logos/budgie.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/debian.svg b/m3ww/.config/eww/images/logos/debian.svg new file mode 100644 index 000000000..120b236fe --- /dev/null +++ b/m3ww/.config/eww/images/logos/debian.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/endeavouros.svg b/m3ww/.config/eww/images/logos/endeavouros.svg new file mode 100644 index 000000000..9f1b4b108 --- /dev/null +++ b/m3ww/.config/eww/images/logos/endeavouros.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/fedora.svg b/m3ww/.config/eww/images/logos/fedora.svg new file mode 100644 index 000000000..cfbd3d9ed --- /dev/null +++ b/m3ww/.config/eww/images/logos/fedora.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/freebsd.svg b/m3ww/.config/eww/images/logos/freebsd.svg new file mode 100644 index 000000000..151e8826d --- /dev/null +++ b/m3ww/.config/eww/images/logos/freebsd.svg @@ -0,0 +1,39 @@ + + + + diff --git a/m3ww/.config/eww/images/logos/garuda.svg b/m3ww/.config/eww/images/logos/garuda.svg new file mode 100644 index 000000000..62c9e0691 --- /dev/null +++ b/m3ww/.config/eww/images/logos/garuda.svg @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/gentoo.svg b/m3ww/.config/eww/images/logos/gentoo.svg new file mode 100644 index 000000000..41a80cf9f --- /dev/null +++ b/m3ww/.config/eww/images/logos/gentoo.svg @@ -0,0 +1,35 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/hyprland.svg b/m3ww/.config/eww/images/logos/hyprland.svg new file mode 100644 index 000000000..581cdb582 --- /dev/null +++ b/m3ww/.config/eww/images/logos/hyprland.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/kali-linux.svg b/m3ww/.config/eww/images/logos/kali-linux.svg new file mode 100644 index 000000000..3e396a8d6 --- /dev/null +++ b/m3ww/.config/eww/images/logos/kali-linux.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/manjaro.svg b/m3ww/.config/eww/images/logos/manjaro.svg new file mode 100644 index 000000000..c6bf22c20 --- /dev/null +++ b/m3ww/.config/eww/images/logos/manjaro.svg @@ -0,0 +1,42 @@ + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/mx.svg b/m3ww/.config/eww/images/logos/mx.svg new file mode 100644 index 000000000..362344326 --- /dev/null +++ b/m3ww/.config/eww/images/logos/mx.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/nixos.svg b/m3ww/.config/eww/images/logos/nixos.svg new file mode 100644 index 000000000..7bb42eddf --- /dev/null +++ b/m3ww/.config/eww/images/logos/nixos.svg @@ -0,0 +1,155 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/opensuse.svg b/m3ww/.config/eww/images/logos/opensuse.svg new file mode 100644 index 000000000..4fc074c3c --- /dev/null +++ b/m3ww/.config/eww/images/logos/opensuse.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/pop-os.svg b/m3ww/.config/eww/images/logos/pop-os.svg new file mode 100644 index 000000000..92dd61a7b --- /dev/null +++ b/m3ww/.config/eww/images/logos/pop-os.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/pureos.svg b/m3ww/.config/eww/images/logos/pureos.svg new file mode 100644 index 000000000..1160304d6 --- /dev/null +++ b/m3ww/.config/eww/images/logos/pureos.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/raspbian.svg b/m3ww/.config/eww/images/logos/raspbian.svg new file mode 100644 index 000000000..3a8f44043 --- /dev/null +++ b/m3ww/.config/eww/images/logos/raspbian.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/redhat.svg b/m3ww/.config/eww/images/logos/redhat.svg new file mode 100644 index 000000000..40727f459 --- /dev/null +++ b/m3ww/.config/eww/images/logos/redhat.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/rockylinux.svg b/m3ww/.config/eww/images/logos/rockylinux.svg new file mode 100644 index 000000000..a4bf8237f --- /dev/null +++ b/m3ww/.config/eww/images/logos/rockylinux.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/shastraos.svg b/m3ww/.config/eww/images/logos/shastraos.svg new file mode 100644 index 000000000..90e616c5e --- /dev/null +++ b/m3ww/.config/eww/images/logos/shastraos.svg @@ -0,0 +1,29 @@ + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/solus.svg b/m3ww/.config/eww/images/logos/solus.svg new file mode 100644 index 000000000..6d61eb18b --- /dev/null +++ b/m3ww/.config/eww/images/logos/solus.svg @@ -0,0 +1,53 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/tux.svg b/m3ww/.config/eww/images/logos/tux.svg new file mode 100644 index 000000000..ce309ca4c --- /dev/null +++ b/m3ww/.config/eww/images/logos/tux.svg @@ -0,0 +1,36 @@ + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/ubuntu.svg b/m3ww/.config/eww/images/logos/ubuntu.svg new file mode 100644 index 000000000..b137d0527 --- /dev/null +++ b/m3ww/.config/eww/images/logos/ubuntu.svg @@ -0,0 +1,70 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/voyager.svg b/m3ww/.config/eww/images/logos/voyager.svg new file mode 100644 index 000000000..4f869a7a2 --- /dev/null +++ b/m3ww/.config/eww/images/logos/voyager.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/logos/zorin.svg b/m3ww/.config/eww/images/logos/zorin.svg new file mode 100644 index 000000000..a07cd8218 --- /dev/null +++ b/m3ww/.config/eww/images/logos/zorin.svg @@ -0,0 +1,24 @@ + +image/svg+xml diff --git a/m3ww/.config/eww/images/svg/app.svg b/m3ww/.config/eww/images/svg/app.svg new file mode 100644 index 000000000..645607577 --- /dev/null +++ b/m3ww/.config/eww/images/svg/app.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/m3ww/.config/eww/images/svg/archlinux.svg b/m3ww/.config/eww/images/svg/archlinux.svg new file mode 100644 index 000000000..bfcf46958 --- /dev/null +++ b/m3ww/.config/eww/images/svg/archlinux.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/corner_bottomleft.svg b/m3ww/.config/eww/images/svg/corner_bottomleft.svg new file mode 100644 index 000000000..7eeec832a --- /dev/null +++ b/m3ww/.config/eww/images/svg/corner_bottomleft.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/.config/eww/images/svg/corner_bottomright.svg b/m3ww/.config/eww/images/svg/corner_bottomright.svg new file mode 100644 index 000000000..f624efb96 --- /dev/null +++ b/m3ww/.config/eww/images/svg/corner_bottomright.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/.config/eww/images/svg/corner_topleft.svg b/m3ww/.config/eww/images/svg/corner_topleft.svg new file mode 100644 index 000000000..ef73a5656 --- /dev/null +++ b/m3ww/.config/eww/images/svg/corner_topleft.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/.config/eww/images/svg/corner_topright.svg b/m3ww/.config/eww/images/svg/corner_topright.svg new file mode 100644 index 000000000..b0659a04f --- /dev/null +++ b/m3ww/.config/eww/images/svg/corner_topright.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/.config/eww/images/svg/drips.svg b/m3ww/.config/eww/images/svg/drips.svg new file mode 100644 index 000000000..1ea9e5cff --- /dev/null +++ b/m3ww/.config/eww/images/svg/drips.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/endeavouros.svg b/m3ww/.config/eww/images/svg/endeavouros.svg new file mode 100644 index 000000000..234341d2a --- /dev/null +++ b/m3ww/.config/eww/images/svg/endeavouros.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/fedora.svg b/m3ww/.config/eww/images/svg/fedora.svg new file mode 100644 index 000000000..1c7f41620 --- /dev/null +++ b/m3ww/.config/eww/images/svg/fedora.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/hyprland.svg b/m3ww/.config/eww/images/svg/hyprland.svg new file mode 100644 index 000000000..0b35cd215 --- /dev/null +++ b/m3ww/.config/eww/images/svg/hyprland.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/nixos.svg b/m3ww/.config/eww/images/svg/nixos.svg new file mode 100644 index 000000000..6e2300a37 --- /dev/null +++ b/m3ww/.config/eww/images/svg/nixos.svg @@ -0,0 +1,155 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/template/background/corner_bottomleft.svg b/m3ww/.config/eww/images/svg/template/background/corner_bottomleft.svg new file mode 100644 index 000000000..5918ad4fa --- /dev/null +++ b/m3ww/.config/eww/images/svg/template/background/corner_bottomleft.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/.config/eww/images/svg/template/background/corner_bottomright.svg b/m3ww/.config/eww/images/svg/template/background/corner_bottomright.svg new file mode 100644 index 000000000..e12441612 --- /dev/null +++ b/m3ww/.config/eww/images/svg/template/background/corner_bottomright.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/.config/eww/images/svg/template/background/corner_topleft.svg b/m3ww/.config/eww/images/svg/template/background/corner_topleft.svg new file mode 100644 index 000000000..9f32bca6f --- /dev/null +++ b/m3ww/.config/eww/images/svg/template/background/corner_topleft.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/.config/eww/images/svg/template/background/corner_topright.svg b/m3ww/.config/eww/images/svg/template/background/corner_topright.svg new file mode 100644 index 000000000..1eceb50e4 --- /dev/null +++ b/m3ww/.config/eww/images/svg/template/background/corner_topright.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/.config/eww/images/svg/template/onBackground/archlinux.svg b/m3ww/.config/eww/images/svg/template/onBackground/archlinux.svg new file mode 100644 index 000000000..e06c1dcb9 --- /dev/null +++ b/m3ww/.config/eww/images/svg/template/onBackground/archlinux.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/template/onBackground/endeavouros.svg b/m3ww/.config/eww/images/svg/template/onBackground/endeavouros.svg new file mode 100644 index 000000000..0a95eedca --- /dev/null +++ b/m3ww/.config/eww/images/svg/template/onBackground/endeavouros.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/template/onBackground/fedora.svg b/m3ww/.config/eww/images/svg/template/onBackground/fedora.svg new file mode 100644 index 000000000..6fcde0e9e --- /dev/null +++ b/m3ww/.config/eww/images/svg/template/onBackground/fedora.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/template/onBackground/hyprland.svg b/m3ww/.config/eww/images/svg/template/onBackground/hyprland.svg new file mode 100644 index 000000000..55f2e9c0f --- /dev/null +++ b/m3ww/.config/eww/images/svg/template/onBackground/hyprland.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/template/onBackground/nixos.svg b/m3ww/.config/eww/images/svg/template/onBackground/nixos.svg new file mode 100644 index 000000000..575e1199d --- /dev/null +++ b/m3ww/.config/eww/images/svg/template/onBackground/nixos.svg @@ -0,0 +1,155 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/template/onBackground/tux.svg b/m3ww/.config/eww/images/svg/template/onBackground/tux.svg new file mode 100644 index 000000000..f2c532956 --- /dev/null +++ b/m3ww/.config/eww/images/svg/template/onBackground/tux.svg @@ -0,0 +1,36 @@ + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/template/onBackground/ubuntu.svg b/m3ww/.config/eww/images/svg/template/onBackground/ubuntu.svg new file mode 100644 index 000000000..39ebc8c70 --- /dev/null +++ b/m3ww/.config/eww/images/svg/template/onBackground/ubuntu.svg @@ -0,0 +1,70 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/template/onBackground/zorin.svg b/m3ww/.config/eww/images/svg/template/onBackground/zorin.svg new file mode 100644 index 000000000..22d225e09 --- /dev/null +++ b/m3ww/.config/eww/images/svg/template/onBackground/zorin.svg @@ -0,0 +1,24 @@ + +image/svg+xml diff --git a/m3ww/.config/eww/images/svg/template/onSecondaryContainer/app.svg b/m3ww/.config/eww/images/svg/template/onSecondaryContainer/app.svg new file mode 100644 index 000000000..d0d9e8c40 --- /dev/null +++ b/m3ww/.config/eww/images/svg/template/onSecondaryContainer/app.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/m3ww/.config/eww/images/svg/template/surface/drips.svg b/m3ww/.config/eww/images/svg/template/surface/drips.svg new file mode 100644 index 000000000..1ea9e5cff --- /dev/null +++ b/m3ww/.config/eww/images/svg/template/surface/drips.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/tux.svg b/m3ww/.config/eww/images/svg/tux.svg new file mode 100644 index 000000000..1e522e15d --- /dev/null +++ b/m3ww/.config/eww/images/svg/tux.svg @@ -0,0 +1,36 @@ + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/ubuntu.svg b/m3ww/.config/eww/images/svg/ubuntu.svg new file mode 100644 index 000000000..ac8e35ddf --- /dev/null +++ b/m3ww/.config/eww/images/svg/ubuntu.svg @@ -0,0 +1,70 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/m3ww/.config/eww/images/svg/zorin.svg b/m3ww/.config/eww/images/svg/zorin.svg new file mode 100644 index 000000000..c49b0a61b --- /dev/null +++ b/m3ww/.config/eww/images/svg/zorin.svg @@ -0,0 +1,24 @@ + +image/svg+xml diff --git a/m3ww/.config/eww/images/wallpaper b/m3ww/.config/eww/images/wallpaper new file mode 100755 index 000000000..3ac6974ee Binary files /dev/null and b/m3ww/.config/eww/images/wallpaper differ diff --git a/m3ww/.config/eww/json/cheatsheet.json b/m3ww/.config/eww/json/cheatsheet.json new file mode 100755 index 000000000..3a4982519 --- /dev/null +++ b/m3ww/.config/eww/json/cheatsheet.json @@ -0,0 +1,128 @@ +[ + [ + { + "icon": "pin_drop", + "name": "Workspaces: navigation", + "binds": [ + { "keys": [ "", "+", "#" ], "action": "Go to workspace #" }, + { "keys": [ "", "+", "S" ], "action": "Toggle special workspace" }, + { "keys": [ "", "+", "(Scroll ↑↓)" ], "action": "Go to workspace -1/+1" }, + { "keys": [ "Ctrl", "", "+", "←"], "action": "Go to workspace on the left" }, + { "keys": [ "Ctrl", "", "+", "→" ], "action": "Go to workspace on the right" }, + { "keys": [ "", "+", "PageUp" ], "action": "Go to workspace on the left" }, + { "keys": [ "", "+", "PageDown" ], "action": "Go to workspace on the right" } + ], + "appeartick": 1 + }, + { + "icon": "overview_key", + "name": "Workspaces: management", + "binds": [ + { "keys": [ "", "Alt", "+", "#" ], "action": "Move window to workspace #" }, + { "keys": [ "", "Alt", "+", "S" ], "action": "Move window to special workspace" }, + { "keys": [ "", "Alt", "+", "PageUp" ], "action": "Move window to workspace on the left" }, + { "keys": [ "", "Alt", "+", "PageDown" ], "action": "Move window to workspace on the right" } + ], + "appeartick": 1 + }, + { + "icon": "move_group", + "name": "Windows", + "binds": [ + { "keys": [ "", "+", "←↑→↓" ], "action": "Focus window in direction" }, + { "keys": [ "", "Shift", "+", "←↑→↓" ], "action": "Swap window in direction" }, + { "keys": [ "", "+", ";" ], "action": "Split ratio -" }, + { "keys": [ "", "+", "'" ], "action": "Split ratio +" }, + { "keys": [ "", "+", "Lmb" ], "action": "Move window" }, + { "keys": [ "", "+", "Mmb" ], "action": "Move window" }, + { "keys": [ "", "+", "Rmb" ], "action": "Resize window" }, + { "keys": [ "", "+", "F" ], "action": "Fullscreen" }, + { "keys": [ "", "Alt", "+", "F" ], "action": "Fake fullscreen" } + ], + "appeartick": 1 + } + ], + [ + { + "icon": "widgets", + "name": "Eww widgets", + "binds": [ + { "keys": [ "" ], "action": "Open overview/launcher" }, + { "keys": [ "Ctrl", "", "+", "R" ], "action": "Kill and restart Eww" }, + { "keys": [ "", "+", "B" ], "action": "Toggle left sidebar" }, + { "keys": [ "", "+", "N" ], "action": "Toggle right sidebar" }, + { "keys": [ "", "+", "G" ], "action": "Toggle volume mixer" }, + { "keys": [ "", "+", "M" ], "action": "Toggle useless audio visualizer" }, + { "keys": [ "(right)Ctrl" ], "action": "Dismiss notification & close menus" } + ], + "appeartick": 2 + }, + { + "icon": "construction", + "name": "Utilities", + "binds": [ + { "keys": [ "PrtSc" ], "action": "Screenshot → Clipboard" }, + { "keys": [ "", "Shift", "+", "S" ], "action": "Screen snip → Clipboard" }, + { "keys": [ "", "Shift", "+", "T" ], "action": "Image to text → Clipboard" }, + { "keys": [ "", "Shift", "+", "C" ], "action": "Color picker" }, + { "keys": [ "", "Alt", "+", "R" ], "action": "Record region" }, + { "keys": [ "Ctrl", "Alt", "+", "R" ], "action": "Record region with sound" }, + { "keys": [ "", "Shift", "Alt", "+", "R" ], "action": "Record screen with sound" } + ], + "appeartick": 2 + }, + { + "icon": "edit", + "name": "Edit mode", + "binds": [ + { "keys": [ "Esc" ], "action": "Exit Edit mode" }, + { "keys": [ "#" ], "action": "Go to to workspace #" }, + { "keys": [ "Alt", "+", "#" ], "action": "Dump windows to workspace #" }, + { "keys": [ "Shift", "+", "#" ], "action": "Swap windows with workspace #" }, + { "keys": [ "Lmb" ], "action": "Move window" }, + { "keys": [ "Mmb" ], "action": "Move window" }, + { "keys": [ "Rmb" ], "action": "Resize window" } + ], + "appeartick": 2 + } + ], + [ + { + "icon": "apps", + "name": "Apps", + "binds": [ + { "keys": [ "", "+", "T" ], "action": "Launch terminal: foot" }, + { "keys": [ "", "+", "↵" ], "action": "Launch terminal: WezTerm" }, + { "keys": [ "", "+", "W" ], "action": "Launch browser: Firefox" }, + { "keys": [ "", "+", "C" ], "action": "Launch editor: vscode" }, + { "keys": [ "", "+", "X" ], "action": "Launch editor: GNOME Text Editor" }, + { "keys": [ "", "+", "I" ], "action": "Launch settings: GNOME Control center" } + ], + "appeartick": 3 + }, + { + "icon": "keyboard", + "name": "Typing", + "binds": [ + { "keys": [ "", "+", "V" ], "action": "Clipboard" }, + { "keys": [ "", "+", "." ], "action": "Emoji picker" }, + { "keys": [ "", "+", "Space" ], "action": "Switch language" } + ], + "appeartick": 3 + }, + { + "icon": "terminal", + "name": "Launcher commands", + "binds": [ + { "keys": [ ">light" ], "action": "Switch to light theme" }, + { "keys": [ ">dark" ], "action": "Switch to dark theme" }, + { "keys": [ ">img" ], "action": "Select wallpaper and generate colorscheme" }, + { "keys": [ ">save", "THEME_NAME" ], "action": "Save current colorscheme as THEME_NAME" }, + { "keys": [ ">load", "THEME_NAME" ], "action": "Load colorscheme THEME_NAME" }, + { "keys": [ ">music" ], "action": "Apply colorscheme from media cover" }, + { "keys": [ ">r" ], "action": "Restart Eww" } + ], + "appeartick": 3 + } + ] +] \ No newline at end of file diff --git a/m3ww/.config/eww/json/directories.json b/m3ww/.config/eww/json/directories.json new file mode 100755 index 000000000..af03dbbfb --- /dev/null +++ b/m3ww/.config/eww/json/directories.json @@ -0,0 +1,9 @@ +[ + {"name": "Documents", "path": "~/Documents", "icon": "description"}, + {"name": "Downloads", "path": "~/Downloads", "icon": "download"}, + {"name": "Music", "path": "~/Music", "icon": "music_note"}, + {"name": "Pictures", "path": "~/Pictures", "icon": "image"}, + {"name": "Videos", "path": "~/Videos", "icon": "movie"}, + {"name": "eww", "path": "~/.config/eww", "icon": "widgets"}, + {"name": "hypr", "path": "~/.config/hypr", "icon": "water_drop"} +] \ No newline at end of file diff --git a/m3ww/.config/eww/json/langs.json b/m3ww/.config/eww/json/langs.json new file mode 100755 index 000000000..3fa2bda59 --- /dev/null +++ b/m3ww/.config/eww/json/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/m3ww/.config/eww/json/taskbar.json b/m3ww/.config/eww/json/taskbar.json new file mode 100755 index 000000000..eb76c2c3d --- /dev/null +++ b/m3ww/.config/eww/json/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/m3ww/.config/eww/json/todo.json b/m3ww/.config/eww/json/todo.json new file mode 100755 index 000000000..364d3fcbe --- /dev/null +++ b/m3ww/.config/eww/json/todo.json @@ -0,0 +1,2 @@ + +["wallpaper scroll, multi layer with diff speed","hyprlewd = hyprland + newm","hyprland: mouse warp with anim","hyprland: allow movefocus to adjacent workspaces","hyprland: submap inherit global","install tutorial","hyprland: cut corners instead of just rounding"] diff --git a/m3ww/.config/eww/json/websites.json b/m3ww/.config/eww/json/websites.json new file mode 100755 index 000000000..7f9b04c75 --- /dev/null +++ b/m3ww/.config/eww/json/websites.json @@ -0,0 +1,9 @@ +[ + {"name": "Discord", "url": "https://discord.com/app", "icon": "󰙯"}, + {"name": "Youtube", "url": "https://youtube.com", "icon": "󰗃"}, + {"name": "SoundCloud", "url": "https://soundcloud.com", "icon": "󰓀"}, + {"name": "GitHub", "url": "https://github.com", "icon": "󰊤"}, + {"name": "Pixiv", "url": "https://pixiv.net", "icon": "󰋩"}, + {"name": "Gmail", "url": "https://mail.google.com", "icon": "󰊫"}, + {"name": "G Translate", "url": "https://translate.google.com", "icon": "󰊿"} +] \ No newline at end of file diff --git a/m3ww/.config/eww/lib.yuck b/m3ww/.config/eww/lib.yuck new file mode 100644 index 000000000..33b22a842 --- /dev/null +++ b/m3ww/.config/eww/lib.yuck @@ -0,0 +1,6 @@ +(defwidget separator_widget [] + (box + :valign "center" + :class "separator" + ) +) \ No newline at end of file diff --git a/m3ww/.config/eww/modules/dynamiccenter.yuck b/m3ww/.config/eww/modules/dynamiccenter.yuck new file mode 100755 index 000000000..860325d88 --- /dev/null +++ b/m3ww/.config/eww/modules/dynamiccenter.yuck @@ -0,0 +1,13 @@ +(defwidget dynamiccenter_widget [] + (box + :orientation "v" :space-evenly false + (box ; Module 1: Volume, Brightness + :class "dynamic-module${(osd_vol || osd_bright) ? '' : '-hidetop'}" + (osd_widget) + ) + (box ; Module 2: Workspaces + :class "dynamic-module${(osd_vol || osd_bright) ? '-hidebottom' : ''}" + (workspaces_widget) + ) + ) +) \ No newline at end of file diff --git a/m3ww/.config/eww/modules/dynamicright.yuck b/m3ww/.config/eww/modules/dynamicright.yuck new file mode 100755 index 000000000..d6e63c2c6 --- /dev/null +++ b/m3ww/.config/eww/modules/dynamicright.yuck @@ -0,0 +1,19 @@ +(defwidget dynamicright_widget [] + (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 &" + :onmiddleclick "playerctl play-pause" + :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + :onclick "scripts/toggle-sideright.sh &" + (box + :orientation "v" :space-evenly false + (box ; Module 1: Volume, Brightness + :class "dynamic-module${flash_notif ? '' : '-hidetop'}" + (notifications_widget) + ) + (box ; Module 2: Workspaces + :class "dynamic-module${flash_notif ? '-hidebottom' : ''}" + (status_widget) + ) + ) + ) +) \ No newline at end of file diff --git a/m3ww/.config/eww/modules/leftspace.yuck b/m3ww/.config/eww/modules/leftspace.yuck new file mode 100644 index 000000000..bffb99ab3 --- /dev/null +++ b/m3ww/.config/eww/modules/leftspace.yuck @@ -0,0 +1,29 @@ +(defwidget leftspace_widget [] + (eventbox + :onscroll "echo $(echo {} | sed -e 's/down/-U 3/g' -e 's/up/-A 3/g' | xargs light) && scripts/brightness osd &" + :onmiddleclick "playerctl play-pause" + :onclick "scripts/toggle-sideleft.sh &" + :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + (box + :space-evenly false + (box :class "corner-width") + ; (eventbox + ; :class "bar-btn" + ; :onclick "scripts/toggle-powerview.sh" + ; (box + ; :class "bar-btn-box" + ; :space-evenly false :spacing 5 + ; (label + ; :class "icon-material txt-norm txt" + ; :text "search" + ; ) + ; (label + ; :class "txt-smaller txt txt-smaller-offset" + ; :text "Search" + ; ) + ; ) + ; ) + (box :hexpand true) + ) + ) +) \ No newline at end of file diff --git a/m3ww/.config/eww/modules/music.yuck b/m3ww/.config/eww/modules/music.yuck new file mode 100644 index 000000000..a8b135450 --- /dev/null +++ b/m3ww/.config/eww/modules/music.yuck @@ -0,0 +1,122 @@ +(defwidget music_widget [] + (eventbox + :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace" + :onmiddleclick "playerctl play-pause" + :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + :onclick "scripts/toggle-sideleft.sh &" + (box + :class "bar-group-margin bar-sides" + (box + :class "bar-group bar-group-standalone bar-group-pad-rightonly" + :orientation "h" + :space-evenly false + (box + :class "bar-music-playstate${mplay == 'Playing' ? '-playing' : ''}" + (label + :class "bar-music-playstate-txt" + :text {mplay == 'Playing' ? '' : ''} + ) + ) + (scroll :hscroll true :vscroll false :hexpand true + (box + :space-evenly false :spacing 5 + :hexpand true + (label + :hexpand true + :xalign 1 + :class "txt-smallie txt" + :text {mname.title != '' ? mname.title : 'Musik'} + ) + (label :xalign 0 :class "txt-norm txt" + :text {mname.artist == '' ? '' : '•'} + ) + (label + :hexpand true + :xalign 0 + :class "txt-smallie txt" + :text {mname.artist} + ) + ) + ) + ) + ) + ) +) + +(defwidget music_bottom_widget [] + (eventbox + :onhover "${EWW_CMD} update hover_music=true &" + :onhoverlost "${EWW_CMD} update hover_music=false &" + :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 &" + :onmiddleclick "playerctl play-pause" + :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + :onclick "scripts/toggle-sideleft.sh &" + (box + :halign "start" + :space-evenly false + :class "bar-group-margin" + (box + :class "bar-bottom-sides bar-group bar-group-round bar-group-pad-less" + :space-evenly false :spacing 10 + (box + :valign "center" + :class "bar-music-bottom-cover bar-music-cover" + :style " + background-image: url('${mcover.image == 'null' || mcover.image == '' ? 'eww_covers/cover_art_default' : mcover.image}'); + " + (box + :class "bar-music-bottom-ctl-bg bar-music-hide-${!hover_music}" + (box + :halign "center" :valign "center" + :spacing 10 + (button + :class "icon-material bar-music-btn" + :onclick "playerctl previous" + "skip_previous" + ) + (button + :class "icon-material bar-music-btn" + :onclick "playerctl play-pause" + "${mplay == 'Playing' ? 'pause' : 'play_arrow'}" + ) + (button + :class "icon-material bar-music-btn" + :onclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + "skip_next" + ) + ) + ) + ) + (box + :hexpand true + :orientation "h" :space-evenly false + :valign "center" + (scroll :hscroll true :vscroll false :hexpand true + (box + :orientation "v" + :space-evenly false + :class "bar-music-bottom-textbox" + :hexpand true + (label :xalign 0 + :hexpand true + :class "txt-small txt" + :style "color: ${mcover.materialcolor.onPrimaryContainer};" + :text {mname.title != '' ? mname.title : 'Music...'} + ) + (revealer + :reveal {mname.artist != ''} + :transition "slidedown" + (label :xalign 0 + :hexpand true + :class "txt-small txt" + :style "color: ${mcover.materialcolor.onPrimaryContainer};" + :text {mname.artist} + ) + ) + ) + ) + ) + ) + ) + ) +) \ No newline at end of file diff --git a/m3ww/.config/eww/modules/notifications.yuck b/m3ww/.config/eww/modules/notifications.yuck new file mode 100644 index 000000000..71fa14227 --- /dev/null +++ b/m3ww/.config/eww/modules/notifications.yuck @@ -0,0 +1,33 @@ +(defwidget notifications_widget [] + (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 &" + :onmiddleclick "playerctl play-pause" + :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + (box + :class "bar-group-margin bar-group-pad-leftonly" + :space-evenly false :spacing 10 + (scroll :hexpand true + :class "bar-group-pad-leftonly" + (label + :halign "end" + :class "txt-small txt" + :text {arraylength(notifications) > 0 ? (notifications[0]['summary']) : ''} + ) + ) + (box + :valign "center" + :class "bar-notif-indicator" + :space-evenly false :spacing 5 + (label + :class "icon-material bar-system-icon txt-small bar-notif-icon" + :text "notifications" + ) + (label + :class "txt-small" + :text "${arraylength(notifications)} " + ) + ) + (box :class "corner-width") + ) + ) +) \ No newline at end of file diff --git a/m3ww/.config/eww/modules/osd.yuck b/m3ww/.config/eww/modules/osd.yuck new file mode 100644 index 000000000..1f5f02022 --- /dev/null +++ b/m3ww/.config/eww/modules/osd.yuck @@ -0,0 +1,38 @@ +(defwidget osd_widget [] + (eventbox + :onhover "${EWW_CMD} update osd_vol=false && ${EWW_CMD} update osd_bright=false" + :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace" + :onmiddleclick "scripts/toggle-powerview.sh &" + :onrightclick "scripts/toggle-powerview.sh &" + (box + :class "bar-ws-width bar-group-margin" + (box + :spacing 15 + :class "bar-group bar-group-standalone bar-group-pad-less" + (box + :space-evenly false :spacing 5 + (label :class "icon-material txt-norm txt" + :text "sunny" + ) + (progress + :value {brightness.level} + :class "bar-prog-osd" + :hexpand true :valign "center" + ) + ) + (box + :space-evenly false :spacing 5 + (progress + :flipped true + :value {volume.percent} + :class "bar-prog-osd" + :hexpand true :valign "center" + ) + (label :class "icon-material txt-norm txt" + :text "volume_up" + ) + ) + ) + ) + ) +) \ No newline at end of file diff --git a/m3ww/.config/eww/modules/status.yuck b/m3ww/.config/eww/modules/status.yuck new file mode 100644 index 000000000..7fde8e637 --- /dev/null +++ b/m3ww/.config/eww/modules/status.yuck @@ -0,0 +1,17 @@ +(defwidget status_widget [] + (box + :space-evenly false + (box :hexpand true) + (systray :pack-direction "rtl" :icon-size 18) + (box :class "corner-width") + (label + :class "bar-width icon-material bar-system-icon txt-norm txt" + :text {WIFI_ICONS[net.level]} + ) + (label + :class "bar-width icon-material bar-system-icon txt-norm txt" + :text {bluetooth.icon} + ) + (box :class "corner-width") + ) +) \ No newline at end of file diff --git a/m3ww/.config/eww/modules/system.yuck b/m3ww/.config/eww/modules/system.yuck new file mode 100644 index 000000000..bf13b9afa --- /dev/null +++ b/m3ww/.config/eww/modules/system.yuck @@ -0,0 +1,181 @@ +(defwidget system_widget [] + (eventbox + :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace" + :onmiddleclick "playerctl play-pause" + :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + :onclick "scripts/toggle-sideright.sh &" + (box + :class "bar-group-margin bar-sides" + (box + :class "bar-group bar-group-standalone bar-group-pad" + :orientation "h" :space-evenly false :spacing 15 + (box + :space-evenly false :spacing 5 + (label :xalign 0 :class "txt-norm txt" + :text {formattime(EWW_TIME, '%I:%M')} + ) + (label :xalign 0 :class "txt-norm txt" + :text "•" + ) + (label :xalign 0 :class "txt-smallie txt" + :text {formattime(EWW_TIME, '%A, %d/%m')} + ) + ) + (box + :hexpand true :valign "center" + :space-evenly false :spacing 2 + :class "bar-batt${battery.percentage <= BATTERY_LOW ? '-low' : ''}" + :tooltip {battery.status == ' left' || battery.status == ' to full' ? "${battery.percentage}%" : battery.status} + (label :xalign 0 + :valign "center" + :class "bar-batt-percentage" + :text {battery.percentage} + ) + (progress + :hexpand true :valign "center" + :value {battery.percentage} + :class "bar-prog-batt${battery.percentage <= BATTERY_LOW ? '-low' : ''}" + ) + (box + :valign "center" + :class "bar-batt-chargestate${battery.quickicon == '' ? '' : (battery.percentage <= BATTERY_LOW ? '-charging-low' : '-charging')}" + ) + ) + (box ; Icons + :space-evenly false :spacing 10 + :orientation "h" + :class "bar-pad-horiz-moreright" + (box + :valign "center" + :orientation "v" + :space-evenly false :spacing -4 + (label :class "icon-material bar-system-icon txt-norm txt" + :text "keyboard" + ) + (label :class "txt-tiny txt" :text {lang_ibus.name_abbr}) + ) + ; (label + ; :valign "center" + ; :class "icon-material bar-system-icon txt-norm" + ; :text {WIFI_ICONS[net.level]} + ; ) + ; (label + ; :valign "center" + ; :class "icon-material bar-system-icon txt-norm" + ; :text {bluetooth.icon} + ; ) + ) + ) + ) + ) +) + +(defwidget system_bottom_widget [] + (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 &" + :onmiddleclick "playerctl play-pause" + :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + :onclick "scripts/toggle-sideright.sh &" + (box + :class "bar-group-margin bar-bottom-sides" + (box + :class "bar-group bar-group-round bar-group-pad-less" + :orientation "h" :space-evenly false :spacing 10 + (box ; Icons + :space-evenly false :spacing 10 + :orientation "h" + :class "bar-pad-horiz-moreright" + (systray :pack-direction "rtl" :icon-size 20) + (box + :valign "center" + :orientation "v" + :space-evenly false :spacing -4 + (label :class "icon-material bar-system-icon txt-norm txt" + :text "keyboard" + ) + (label :class "txt-tiny txt" :text {lang_ibus.name_abbr}) + ) + (label + :valign "center" + :class "icon-material bar-system-icon txt-norm txt" + :text {WIFI_ICONS[net.level]} + ) + (label + :valign "center" + :class "icon-material bar-system-icon txt-norm txt" + :text {bluetooth.icon} + ) + ) + (box + :valign "center" + :orientation "v" + :space-evenly false + (label :xalign 0 :class "txt-norm txt" + :text {formattime(EWW_TIME, '%I:%M')} + ) + (label :xalign 0 :class "txt-smallie txt" + :text {formattime(EWW_TIME, '%A, %d/%m')} + ) + ) + (box + :hexpand true :valign "center" + :space-evenly false + :class "bar-batt-bottom" + (label :xalign 0 + :valign "center" + :hexpand true + :class "bar-batt-percentage-bottom txt-norm" + :text "${memory.used} + ${memory.swapused}" + ) + (overlay + (box :class "bar-circ-bottom-size") + (circular-progress + :halign "end" :valign "center" + :class "bar-batt-circ" + :value {memory.percentage} + :thickness 3 + :start-at 75 + :hexpand true :valign "center" + (box :class "bar-batt-circ-inside") + ) + (circular-progress + :halign "end" :valign "center" + :value {memory.swappercentage} + :thickness 3 + :start-at 75 + :class "bar-batt-circ-layer2" + :hexpand true :valign "center" + (box :class "bar-batt-circ-layer2-inside") + ) + ) + ) + (box + :hexpand true :valign "center" + :space-evenly false + :class "bar-batt-bottom${battery.percentage <= BATTERY_LOW ? '-low' : ''}" + :tooltip "Battery: ${battery.percentage}%" + (label :xalign 0 + :valign "center" + :hexpand true + :class "bar-batt-percentage-bottom txt-norm" + :text {battery.status == ' left' || battery.status == ' to full' ? "${battery.percentage}%" : battery.status} + ) + (box :class "bar-circ-bottom-size" + (circular-progress + :halign "end" :valign "center" + :value {battery.percentage} + :thickness 3 + :start-at 75 + :class "bar-batt-circ${battery.percentage <= BATTERY_LOW ? '-low' : ''}" + :hexpand true :valign "center" + (box + :valign "center" :halign "center" + :class "bar-batt-chargestate-bottom${battery.quickicon == '' ? '' : (battery.percentage <= BATTERY_LOW ? '-charging-low' : '-charging')}" + ) + ) + ) + ) + ) + ) + ) +) \ No newline at end of file diff --git a/m3ww/.config/eww/modules/taskbar.yuck b/m3ww/.config/eww/modules/taskbar.yuck new file mode 100644 index 000000000..92517d70b --- /dev/null +++ b/m3ww/.config/eww/modules/taskbar.yuck @@ -0,0 +1,47 @@ +(defwidget taskbar_widget [] + (eventbox + :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace" + :onmiddleclick "scripts/toggle-powerview.sh &" + :onrightclick "scripts/toggle-powerview.sh &" + (overlay + (box + :class "bar-group-margin" + :style " + min-width: ${(arraylength(tasks) > 13 ? 13 : arraylength(tasks)) * BAR_HEIGHT_BOTTOM_NORMAL}px; + " + (box + :class "bar-group bar-group-round" + ) + ) + (scroll + (box + :halign "center" + :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 + :cursor "pointer" + :onclick "${app.count > 0 ? ('hyprctl dispatch focuswindow address:' + app.address[0] + ' &') : (app.exec)}" + ; :tooltip "${app.class}" + (box + :class "taskbar-button ${app.class == awin.class ? 'taskbar-button-active' : ''}" + (image + :class "taskbaricon" + :path {app.icon} + :image-width 32 + :image-height 32 + ) + ) + ) + (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/m3ww/.config/eww/modules/workspaces.yuck b/m3ww/.config/eww/modules/workspaces.yuck new file mode 100644 index 000000000..45e5b5728 --- /dev/null +++ b/m3ww/.config/eww/modules/workspaces.yuck @@ -0,0 +1,57 @@ +(defwidget workspaces_widget [] + (eventbox + :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace" + :onmiddleclick "scripts/toggle-powerview.sh &" + :onrightclick `hyprctl keyword bind ",mouse:273,exec,hyprctl keyword unbind ,mouse:273 && hyprctl dispatch submap editmode && notify-send 'Edit mode enabled' 'LMB to move, RMB to resize, Esc to exit' -a 'Edit mode' &" &` + :onhoverlost `hyprctl keyword unbind ",mouse:273" &` + (overlay + ; Only displays workspace state (has windows or not) + (box + :class "bar-ws-width bar-group-margin" + (box + :class "bar-group bar-group-standalone bar-group-pad" + ) + ) + (box + :class "bar-group-pad" + :halign "center" + (for i in workspace + (button + :onclick "hyprctl dispatch workspace ${i.num}" + (label + :valign "center" + ; NOTE: Array is 0-based but i.num values are 1-based + :class "bar-ws-txt txt-norm bar-ws-txt-${ + i.haswins ? ( + i.num == 1 ? (workspace[(i.num)]['haswins'] ? 'left' : 'alone') : ( + i.num == 10 ? (workspace[(i.num - 2)]['haswins'] ? 'right' : 'alone') : ( + workspace[(i.num - 2)]['haswins'] && workspace[(i.num)]['haswins'] ? 'middle' : ( + workspace[(i.num - 2)]['haswins'] ? 'right' : ( + workspace[(i.num)]['haswins'] ? 'left' : 'alone' + ) + ) + ) + ) + ) : 'false' + }" + :text "${ws-icons[i.num - 1]}" + ) + ) + ) + ) + ; Use a separate indicator for active workspace (animations, yay) (and more performant) + (button + :class "ws" + :style " + margin-left: ${1.79 * (activews - 1) + WORKSPACE_SIDE_PAD}rem; + margin-right: ${1.79 * (10 - activews) + WORKSPACE_SIDE_PAD}rem; + " + (label + :valign "center" + :class "bar-ws-txt bar-ws-txt-active" + :text "${activews}" + ) + ) + ) + ) +) \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/activewin b/m3ww/.config/eww/scripts/activewin new file mode 100755 index 000000000..8019a5188 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/activews b/m3ww/.config/eww/scripts/activews new file mode 100755 index 000000000..0abf3e91e --- /dev/null +++ b/m3ww/.config/eww/scripts/activews @@ -0,0 +1,17 @@ +#!/usr/bin/bash + +hyprctl activeworkspace -j | gojq '.id' + +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/m3ww/.config/eww/scripts/airplane b/m3ww/.config/eww/scripts/airplane new file mode 100755 index 000000000..81c9e0b1c --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/allappnames.cpp b/m3ww/.config/eww/scripts/allappnames.cpp new file mode 100755 index 000000000..479bd5a73 --- /dev/null +++ b/m3ww/.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 getDesktopEntries(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)) + getDesktopEntries(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/m3ww/.config/eww/scripts/allapps.cpp b/m3ww/.config/eww/scripts/allapps.cpp new file mode 100755 index 000000000..26813fa03 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/applycolor b/m3ww/.config/eww/scripts/applycolor new file mode 100755 index 000000000..52ee5e7cc --- /dev/null +++ b/m3ww/.config/eww/scripts/applycolor @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +cd "$HOME/.config/eww" || exit +filelist=$(ls 'images/svg/template/' | grep -v /) +colorscss=$(cat css/_material.scss) +colornames=$(cat css/_material.scss | cut -d: -f1) +colorstrings=$(cat css/_material.scss | cut -d: -f2 | cut -d ' ' -f2 | cut -d ";" -f1) +IFS=$'\n' +filearr=( $filelist ) # Get colors +colorlist=( $colornames ) # Array of color names +colorvalues=( $colorstrings ) # Array of color values + +apply_svgs() { + for i in "${!filearr[@]}"; do # Loop through folders + colorvalue=$(echo "$colorscss" | grep "${filearr[$i]}" | awk '{print $2}' | cut -d ";" -f1) + for file in images/svg/template/"${filearr[$i]}"/*; do # Loop through files + cp "$file" images/svg/ + sed -i "s/black/$colorvalue/g" images/svg/"${file##*/}" + done + done +} + +apply_gtklock() { + # Check if $HOME/.config/eww/scripts/templates/gtklock/style.css exists + if [ ! -f "$HOME/.config/eww/scripts/templates/gtklock/style.css" ]; then + echo "Template file not found for Gtklock. Skipping that." + return + fi + # Copy template to style.css + cp "$HOME/.config/eww/scripts/templates/gtklock/style.css" "$HOME/.config/gtklock/style.css" + # Apply colors + for i in "${!colorlist[@]}"; do + sed -i "s/${colorlist[$i]};/${colorvalues[$i]};/g" "$HOME/.config/gtklock/style.css" + done +} + +apply_fuzzel() { + # Check if $HOME/.config/eww/scripts/templates/fuzzel/fuzzel.ini exists + if [ ! -f "$HOME/.config/eww/scripts/templates/fuzzel/fuzzel.ini" ]; then + echo "Template file not found for Fuzzel. Skipping that." + return + fi + # Copy template to style.css + cp "$HOME/.config/eww/scripts/templates/fuzzel/fuzzel.ini" "$HOME/.config/fuzzel/fuzzel.ini" + # Apply colors + for i in "${!colorlist[@]}"; do + sed -i "s/${colorlist[$i]}ff/${colorvalues[$i]#\#}ff/g" "$HOME/.config/fuzzel/fuzzel.ini" # note: ff because theyre opaque + done +} + +apply_foot() { + # Check if $HOME/.config/eww/scripts/templates/fuzzel/fuzzel.ini exists + if [ ! -f "$HOME/.config/eww/scripts/templates/foot/foot.ini" ]; then + echo "Template file not found for Foot. Skipping that." + return + fi + # Copy template to style.css + cp "$HOME/.config/eww/scripts/templates/foot/foot.ini" "$HOME/.config/foot/foot.ini" + # Apply colors + for i in "${!colorlist[@]}"; do + sed -i "s/=${colorlist[$i]} #/=${colorvalues[$i]#\#}/g" "$HOME/.config/foot/foot.ini" # note: ff because theyre opaque + done +} + +apply_svgs +apply_gtklock +apply_fuzzel +apply_foot \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/appsearch.cpp b/m3ww/.config/eww/scripts/appsearch.cpp new file mode 100755 index 000000000..61538f7df --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/audioapps.cpp b/m3ww/.config/eww/scripts/audioapps.cpp new file mode 100755 index 000000000..140d2b518 --- /dev/null +++ b/m3ww/.config/eww/scripts/audioapps.cpp @@ -0,0 +1,137 @@ +#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["clients"].push_back( + json{{"serial", client["object.serial"]}, + {"volume", volume}, + {"title", client["media.name"]}}); + break; + } + } + if (!found) { + json newApp = + R"({"name": "", "count": 1, "clients": [], "icon": "", "title": []})"_json; + newApp["name"] = client["application.name"]; + newApp["clients"].push_back(json{{"serial", client["object.serial"]}, + {"volume", volume}, + {"title", client["media.name"]}}); + + 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 2>/dev/null"); + 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/m3ww/.config/eww/scripts/audiolevels b/m3ww/.config/eww/scripts/audiolevels new file mode 100755 index 000000000..ba001d09d --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/battery b/m3ww/.config/eww/scripts/battery new file mode 100755 index 000000000..53c94fc77 --- /dev/null +++ b/m3ww/.config/eww/scripts/battery @@ -0,0 +1,132 @@ +#!/usr/bin/env bash + +icons=("" "" "" "" "" "" "" "") + +gettime() { + # FULL=$(cat /sys/class/power_supply/*/uevent | grep 'POWER_SUPPLY_CHARGE_FULL=' | cut -d '=' -f2) + # NOW=$(cat /sys/class/power_supply/*/uevent | grep 'POWER_SUPPLY_CHARGE_NOW=' | cut -d '=' -f2) + # RATE=$(cat /sys/class/power_supply/*/uevent | grep 'POWER_SUPPLY_VOLTAGE_NOW=' | cut -d '=' -f2) + + if [ "$RATE" -gt 0 ]; then + if [ "$STATE" = "Discharging" ]; then + upower -e | grep battery | while read line; do upower -i $line; done | grep 'time to empty:' | cut -d ':' -f2 | sed 's/ //g' | sed 's/ours//g' | sed 's/inutes//g' + else + upower -e | grep battery | while read line; do upower -i $line; done | grep 'time to full:' | cut -d ':' -f2 | sed 's/ //g' | sed 's/ours//g' | sed 's/inutes//g' + 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 + if [ "$RATE" -gt 0 ]; then + echo "$(gettime) to full" + else + echo "" + fi + elif [ "$STATE" = "Discharging" ]; then + echo "$(gettime) 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 css/_iconcolor.txt | head -1 + else + cat css/_iconcolor.txt | head -1 + 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/*/voltage_now | head -1) + CAPACITY=$(cat /sys/class/power_supply/*/capacity | head -1) + STATE=$(cat /sys/class/power_supply/*/status | head -1) + + 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)"'", "percentage": '"$CAPACITY"', "status": "'"$(status)"'"}' + sleep 3 +done \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/bluetooth b/m3ww/.config/eww/scripts/bluetooth new file mode 100755 index 000000000..112069540 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/brightness b/m3ww/.config/eww/scripts/brightness new file mode 100755 index 000000000..1f79bec25 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/calendarlayout.cpp b/m3ww/.config/eww/scripts/calendarlayout.cpp new file mode 100755 index 000000000..cb3100f11 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/cavajson.cpp b/m3ww/.config/eww/scripts/cavajson.cpp new file mode 100755 index 000000000..2ff125d95 --- /dev/null +++ b/m3ww/.config/eww/scripts/cavajson.cpp @@ -0,0 +1,42 @@ +#include +#include +#include +#include +#include +#include +#include + +void cavaToJson(std::string& s) { + int cnt = 0; + std::string newStr = "["; + for (int i = 0; i < s.size(); i++) { + if (s[i] == ';') { + s[i] = ','; + newStr += std::string(',' + std::to_string(cnt++) + "],["); + } else { + newStr.push_back(s[i]); + } + } + newStr.pop_back(); + newStr.pop_back(); + s = newStr; +} + +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/m3ww/.config/eww/scripts/colorgen b/m3ww/.config/eww/scripts/colorgen new file mode 100755 index 000000000..ece9c21e5 --- /dev/null +++ b/m3ww/.config/eww/scripts/colorgen @@ -0,0 +1,89 @@ +#!/usr/bin/bash +cd ~/.config/eww || exit + +OPACITY=0.75 + +IMGPATH=$1 +coverurl=$2 + +coverpath=$(echo "$IMGPATH" | sed 's/"//g') +# 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')" +generated_material=$(scripts/material_colors.py --color "$maincol" "$lightdark") +echo "$generated_material" > scripts/cache/_material.colorpallete & +cp scripts/cache/_material.colorpallete ~/.config/ags/scss/_material.scss +onPrimaryContainer=$(echo "$generated_material" | grep '$onPrimaryContainer: ' | sed 's/$onPrimaryContainer: //g' | sed 's/;//g') +primaryContainer=$(echo "$generated_material" | grep '$primaryContainer: ' | sed 's/$primaryContainer: //g' | sed 's/;//g') +onSecondaryContainer=$(echo "$generated_material" | grep '$onSecondaryContainer: ' | sed 's/$onSecondaryContainer: //g' | sed 's/;//g') +secondaryContainer=$(echo "$generated_material" | grep '$secondaryContainer: ' | sed 's/$secondaryContainer: //g' | sed 's/;//g') +tertiary=$(echo "$generated_material" | grep '$tertiary: ' | sed 's/$tertiary: //g' | sed 's/;//g') +onPrimary=$(echo "$generated_material" | grep '$onPrimary: ' | sed 's/$onPrimary: //g' | sed 's/;//g') +primary=$(echo "$generated_material" | grep '$primary: ' | sed 's/$primary: //g' | sed 's/;//g') + +printf '{"image": "'$coverpath'", "color": '"$themejson"', "materialcolor": {"onPrimaryContainer": "'"$onPrimaryContainer"'", "primaryContainer": "'"$primaryContainer"'", "onPrimary": "'"$onPrimary"'", "primary": "'"$primary"'", "secondaryContainer": "'"$secondaryContainer"'", "onSecondaryContainer": "'"$onSecondaryContainer"'"}}\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" > './scripts/cache/_colorscheme.colorpallete' +printf '$colorbarbg: ' >> './scripts/cache/_colorscheme.colorpallete' +printf "$themejson" | gojq -r '.special.background' | tr '\n' ';' >> './scripts/cache/_colorscheme.colorpallete' +echo '' >> './scripts/cache/_colorscheme.colorpallete' +printf '$colorbg: ' >> './scripts/cache/_colorscheme.colorpallete' +printf "$rgb_bg"';' >> './scripts/cache/_colorscheme.colorpallete' +echo '' >> './scripts/cache/_colorscheme.colorpallete' +printf '$colortext: ' >> './scripts/cache/_colorscheme.colorpallete' +printf "$themejson" | gojq -r '.special.foreground' | tr '\n' ';' >> './scripts/cache/_colorscheme.colorpallete' +echo '' >> './scripts/cache/_colorscheme.colorpallete' +printf '$color0: ' >> './scripts/cache/_colorscheme.colorpallete' +printf "$themejson" | gojq -r '.colors.color1' | tr '\n' ';' >> './scripts/cache/_colorscheme.colorpallete' +echo '' >> './scripts/cache/_colorscheme.colorpallete' +printf '$color1: ' >> './scripts/cache/_colorscheme.colorpallete' +printf "$themejson" | gojq -r '.colors.color2' | tr '\n' ';' >> './scripts/cache/_colorscheme.colorpallete' +echo '' >> './scripts/cache/_colorscheme.colorpallete' +printf '$color2: ' >> './scripts/cache/_colorscheme.colorpallete' +printf "$themejson" | gojq -r '.colors.color3' | tr '\n' ';' >> './scripts/cache/_colorscheme.colorpallete' +echo '' >> './scripts/cache/_colorscheme.colorpallete' +printf '$color3: ' >> './scripts/cache/_colorscheme.colorpallete' +printf "$themejson" | gojq -r '.colors.color4' | tr '\n' ';' >> './scripts/cache/_colorscheme.colorpallete' +echo '' >> './scripts/cache/_colorscheme.colorpallete' +printf '$color4: ' >> './scripts/cache/_colorscheme.colorpallete' +printf "$themejson" | gojq -r '.colors.color5' | tr '\n' ';' >> './scripts/cache/_colorscheme.colorpallete' +echo '' >> './scripts/cache/_colorscheme.colorpallete' +printf '$color5: ' >> './scripts/cache/_colorscheme.colorpallete' +printf "$themejson" | gojq -r '.colors.color6' | tr '\n' ';' >> './scripts/cache/_colorscheme.colorpallete' +echo '' >> './scripts/cache/_colorscheme.colorpallete' +printf '$color6: ' >> './scripts/cache/_colorscheme.colorpallete' +printf "$themejson" | gojq -r '.colors.color7' | tr '\n' ';' >> './scripts/cache/_colorscheme.colorpallete' +echo '' >> './scripts/cache/_colorscheme.colorpallete' +printf '$color7: ' >> './scripts/cache/_colorscheme.colorpallete' +printf "$themejson" | gojq -r '.colors.color4' | tr '\n' ';' >> './scripts/cache/_colorscheme.colorpallete' +echo '' >> './scripts/cache/_colorscheme.colorpallete' + +# Write hyprland color config +echo '# Auto generated color theme for image at:' "$coverurl" > './scripts/cache/colors_generated.conf' +echo 'general {' >> './scripts/cache/colors_generated.conf' +echo ' col.active_border = rgba('"${primary#*#}FF"') 45deg' >> './scripts/cache/colors_generated.conf' +echo ' col.inactive_border = rgba(555555AA)' >> './scripts/cache/colors_generated.conf' +echo '}' >> './scripts/cache/colors_generated.conf' + +# Print json to stdout +cp "$HOME/.cache/wal/colors.json" 'scripts/cache/_iconcolor.txt' diff --git a/m3ww/.config/eww/scripts/colormanage b/m3ww/.config/eww/scripts/colormanage new file mode 100755 index 000000000..ff1329de9 --- /dev/null +++ b/m3ww/.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 'scripts/cache/_iconcolor.txt' './css/_iconcolor.txt' + cp 'scripts/cache/_colorscheme.colorpallete' './css/_colorscheme.scss' + cp 'scripts/cache/_material.colorpallete' './css/_material.scss' + cp 'scripts/cache/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/m3ww/.config/eww/scripts/custom_configs/cava b/m3ww/.config/eww/scripts/custom_configs/cava new file mode 100755 index 000000000..9c15753bc --- /dev/null +++ b/m3ww/.config/eww/scripts/custom_configs/cava @@ -0,0 +1,21 @@ +[general] + +mode = normal +framerate = 60 +autosens = 1 +bars = 70 + +[output] + +method = raw +raw_target = /dev/stdout +data_format = ascii + +[smoothing] +monstercat = 1 +gravity = 1000000 +noise_reduction = 34 + +[input] +method = pulse +source = auto diff --git a/m3ww/.config/eww/scripts/custom_configs/waybar-tray-config/config b/m3ww/.config/eww/scripts/custom_configs/waybar-tray-config/config new file mode 100755 index 000000000..4b7e7e3cc --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/custom_configs/waybar-tray-config/style.css b/m3ww/.config/eww/scripts/custom_configs/waybar-tray-config/style.css new file mode 100755 index 000000000..2cdf04cf4 --- /dev/null +++ b/m3ww/.config/eww/scripts/custom_configs/waybar-tray-config/style.css @@ -0,0 +1,69 @@ +* { + color: #f3f9ff; + font-size: 11px; + font-family: 'Lexend'; + 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/m3ww/.config/eww/scripts/dumptows.cpp b/m3ww/.config/eww/scripts/dumptows.cpp new file mode 100755 index 000000000..6548af7b7 --- /dev/null +++ b/m3ww/.config/eww/scripts/dumptows.cpp @@ -0,0 +1,79 @@ +#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 dumptoWorkspace() { + for (string address : windows_a) { + string cmd = "hyprctl dispatch movetoworkspacesilent " + + to_string(workspace_b) + ",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: dumptows [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(); + dumptoWorkspace(); +} \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/editmode.sh b/m3ww/.config/eww/scripts/editmode.sh new file mode 100755 index 000000000..c14b92876 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/focuswindow b/m3ww/.config/eww/scripts/focuswindow new file mode 100755 index 000000000..9cc77c6bf --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/get_open_icons b/m3ww/.config/eww/scripts/get_open_icons new file mode 100755 index 000000000..d7d73383e --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/getfirstdayofmonth b/m3ww/.config/eww/scripts/getfirstdayofmonth new file mode 100755 index 000000000..e75171fe4 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/hyprsettings b/m3ww/.config/eww/scripts/hyprsettings new file mode 100755 index 000000000..8aa137858 --- /dev/null +++ b/m3ww/.config/eww/scripts/hyprsettings @@ -0,0 +1,55 @@ +#!/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:enabled -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') + overlay=$(hyprctl getoption debug:overlay -j | gojq -r -c '.int') + damage_tracking=$(hyprctl getoption debug:damage_tracking -j | gojq -r -c '.int') + 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 -n "\"overlay\":$overlay," + echo -n "\"damage_tracking\":$damage_tracking," + + 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/m3ww/.config/eww/scripts/hyprtest b/m3ww/.config/eww/scripts/hyprtest new file mode 100755 index 000000000..593c665f6 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/iconpatch b/m3ww/.config/eww/scripts/iconpatch new file mode 100755 index 000000000..542f4c164 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/language.cpp b/m3ww/.config/eww/scripts/language.cpp new file mode 100755 index 000000000..ce643cb50 --- /dev/null +++ b/m3ww/.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("json/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/m3ww/.config/eww/scripts/launchapp b/m3ww/.config/eww/scripts/launchapp new file mode 100755 index 000000000..aaee03acf --- /dev/null +++ b/m3ww/.config/eww/scripts/launchapp @@ -0,0 +1,50 @@ +#!/usr/bin/bash + +~/.config/eww/scripts/toggle-powerview.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]}" == ">swr" ]]; then # basic rice switching + ~/.local/bin/switchrice.sh "${args[1]}" "${args[2]}" + 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' '[Local wallpaper]' '' + scripts/colormanage get + elif [[ "${args[0]}" == ">img" ]]; then + scripts/switchwall + elif [[ "${args[0]}" == ">segs" ]]; then + eww update waifu="$(python3 scripts/waifu-get.py --segs ero)" + elif [[ "${args[0]}" == ">uwu" ]]; then + eww update waifu="$(python3 scripts/waifu-get.py)" + elif [[ "${args[0]}" == ">r" ]]; then + pkill eww && eww daemon && eww open bar && eww open bgdecor + elif [[ "${args[0]}" == ">todo" ]]; then + scripts/todo add "${1#*>todo }" + eww update todolist="$(cat json/todo.json | gojq -c -M)" + elif [[ "${args[0]}" == ">raw" ]]; then + hyprctl keyword input:force_no_accel $(( 1 - $(hyprctl getoption input:force_no_accel -j | gojq '.int') )) + else + # notify-send 'eww' 'Invalid command!' + false + fi +else + cd ~ + app=$1 + eval "${app%\%*}" & + pkill launchapp +fi + + diff --git a/m3ww/.config/eww/scripts/limitlen.py b/m3ww/.config/eww/scripts/limitlen.py new file mode 100755 index 000000000..20ed07a8d --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/listentries.py b/m3ww/.config/eww/scripts/listentries.py new file mode 100755 index 000000000..2e69e917b --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/listentrynames.py b/m3ww/.config/eww/scripts/listentrynames.py new file mode 100755 index 000000000..99ae84a22 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/material_colors.py b/m3ww/.config/eww/scripts/material_colors.py new file mode 100755 index 000000000..857a98ad6 --- /dev/null +++ b/m3ww/.config/eww/scripts/material_colors.py @@ -0,0 +1,88 @@ +#!/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') + 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('$background: ' + 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/m3ww/.config/eww/scripts/memory b/m3ww/.config/eww/scripts/memory new file mode 100755 index 000000000..cbff941fa --- /dev/null +++ b/m3ww/.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 ($2!=0) ? ($3/$2)*100 : 0}')") + + echo '{ "total": "'"$total"'", "used": "'"$used"'", "free": "'"$free"'", "swaptotal": "'"$swaptotal"'", "swapused": "'"$swapused"'", "swappercentage": '"$swapperc"', "swapfree": "'"$swapfree"'", "percentage": '"$perc"' }' + + sleep 3 +done diff --git a/m3ww/.config/eww/scripts/mousetrack.cpp b/m3ww/.config/eww/scripts/mousetrack.cpp new file mode 100755 index 000000000..f8c5df702 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/music b/m3ww/.config/eww/scripts/music new file mode 100755 index 000000000..109eac1d7 --- /dev/null +++ b/m3ww/.config/eww/scripts/music @@ -0,0 +1,175 @@ +#!/usr/bin/env bash + +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": "null", "color": {"alpha":"100","colors":{"color0":"null","color1":"null","color10":"null","color11":"null","color12":"null","color13":"null","color14":"null","color15":"null","color2":"null","color3":"null","color4":"null","color5":"null","color6":"null","color7":"null","color8":"null","color9":"null"},"special":{"background":"null","cursor":"null","foreground":"null"},"wallpaper":"~/.config/eww/eww_covers/cover_art","source":"󱛟"},"materialcolor":{"onPrimary":"null","onPrimaryContainer":"null","onSecondaryContainer":"null","primary":"null","primaryContainer":"null","secondaryContainer":"null"}}' + # echo '{"image": "eww_covers/cover_art_default","source":"󱛟"}}' + + playerctl -F metadata mpris:artUrl 2>/dev/null | while read -r COVER_URL; do + music_source='󰐍' + COVER_URL=${COVER_URL//blob:/} + COVER_URL=${COVER_URL//file:\/\//} + COVER_URL=${COVER_URL//%20/ } + if [[ "$COVER_URL" = *"https"* ]]; then + music_source='󰖟' + coverurl="$(playerctl metadata mpris:artUrl)" + coverurl_highres_yt="${coverurl/hqdefault/maxresdefault}" + coverurl_highres_soundcloud="${coverurl/80x80/500x500}" + # 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')) + elif [[ "$coverurl" == *"spotify"* ]]; 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 + music_source='󱛟' + 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=$(echo "$title" | cut -d '-' -f2) + 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=$(echo "$title" | cut -d '-' -f2) + 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/m3ww/.config/eww/scripts/net b/m3ww/.config/eww/scripts/net new file mode 100755 index 000000000..165d54dc3 --- /dev/null +++ b/m3ww/.config/eww/scripts/net @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +toggle() { + status=$(rfkill -J | gojq -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/m3ww/.config/eww/scripts/notifget.cpp b/m3ww/.config/eww/scripts/notifget.cpp new file mode 100755 index 000000000..1e6a14c02 --- /dev/null +++ b/m3ww/.config/eww/scripts/notifget.cpp @@ -0,0 +1,98 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "nlohmann/json.hpp" +using namespace std; +using json = nlohmann::json; + +string dunstOutput; +json allNotifs, notifApps; + +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 + } +} + +inline void getDunstNotifs() { + dunstOutput = exec("dunstctl history | gojq -c -M"); + allNotifs = json::parse(dunstOutput)["data"][0]; +} + +void addNotif(const json& newNotification) { + notifApps["count"] = int(notifApps["count"]) + 1; + bool found = false; + for (json& existingApp : notifApps["data"]) { + auto it = existingApp.find("name"); + if (it != existingApp.end() && + *it == newNotification["appname"]["data"]) { + found = true; + existingApp["count"] = int(existingApp["count"]) + 1; + existingApp["content"].push_back( + json::array({newNotification["summary"]["data"], + newNotification["body"]["data"]})); + break; + } + } + // Not found? A new app it is + if (!found) { + json newApp = R"({"name": "", "count": 1, "content": []})"_json; + newApp["name"] = string(newNotification["appname"]["data"]); + newApp["content"].push_back( + json::array({newNotification["summary"]["data"], + newNotification["body"]["data"]})); + + notifApps["data"].push_back(newApp); + } +} + +inline void groupNotifs() { + for (json notification : allNotifs) { + addNotif(notification); + } +} + +int main() { + // ios::sync_with_stdio(false); + notifApps["data"] = json::array(); + notifApps["count"] = 0; + + getDunstNotifs(); + groupNotifs(); + cout << notifApps << '\n'; +} \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/notification-on-receive.sh b/m3ww/.config/eww/scripts/notification-on-receive.sh new file mode 100755 index 000000000..fb925fe77 --- /dev/null +++ b/m3ww/.config/eww/scripts/notification-on-receive.sh @@ -0,0 +1,10 @@ +#!/usr/bin/bash + +# eww update dynamicright_module_page=2 +# eww update flash_notif=true +# sleep 4 +# eww update dynamicright_module_page=1 +# eww update flash_notif=false + +scripts/toggle-notificationspopup.sh --open +eww update notification_revcnt=$(eww get notifications | gojq 'length') \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/notifications b/m3ww/.config/eww/scripts/notifications new file mode 100755 index 000000000..cea3b5c76 --- /dev/null +++ b/m3ww/.config/eww/scripts/notifications @@ -0,0 +1,91 @@ +#!/usr/bin/env bash + +tmp=scripts/cache/dunst-history.json +lock="scripts/cache/dunst-toggle.lock" +lockinfo="scripts/cache/dunst-lock-info" + +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" == "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 +cd ~/.config/eww + dunstctl history > "$tmp" + get_ids + scripts/notifget + # tail -f "$tmp" 2>/dev/null | rg --line-buffered "aa\{sv\}" | while read -r; do + # get_ids + # scripts/notifget + # done +fi diff --git a/m3ww/.config/eww/scripts/overview-wrapper b/m3ww/.config/eww/scripts/overview-wrapper new file mode 100755 index 000000000..b48d0769a --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/overview-wrapper1 b/m3ww/.config/eww/scripts/overview-wrapper1 new file mode 100755 index 000000000..42cb0deab --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/overview-wrapper2 b/m3ww/.config/eww/scripts/overview-wrapper2 new file mode 100755 index 000000000..22c648bd7 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/overview.cpp b/m3ww/.config/eww/scripts/overview.cpp new file mode 100755 index 000000000..8fa112779 --- /dev/null +++ b/m3ww/.config/eww/scripts/overview.cpp @@ -0,0 +1,105 @@ +#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 + if(string(client["class"]) == "") { + client["class"] = "dummy"; + } + 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/m3ww/.config/eww/scripts/scroll-quote b/m3ww/.config/eww/scripts/scroll-quote new file mode 100755 index 000000000..6b005d347 --- /dev/null +++ b/m3ww/.config/eww/scripts/scroll-quote @@ -0,0 +1,13 @@ +#!/usr/bin/bash + +offset=$(eww get quote_index) +total=$(eww get quote_content | gojq 'length') + +# total=25 +# shown=7 + +if [ "$1" == "up" ]; then + eww update quote_index=$(( ("$offset" + "$total" - 1) % "$total" )) +else + eww update quote_index=$(( ("$offset" + 1) % "$total" )) +fi \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/scroll-settings b/m3ww/.config/eww/scripts/scroll-settings new file mode 100755 index 000000000..f3416da26 --- /dev/null +++ b/m3ww/.config/eww/scripts/scroll-settings @@ -0,0 +1,10 @@ +#!/usr/bin/bash + +offset=$(eww get scroll_offset_settings) +total=$(eww get DASHBOARD_SETTINGS_PAGES) + +if [ "$1" == "up" ]; then + eww update scroll_offset_settings=$(( ("$offset" + "$total" - 1) % "$total" )) +else + eww update scroll_offset_settings=$(( ("$offset" + 1) % "$total" )) +fi diff --git a/m3ww/.config/eww/scripts/scroll-waifu b/m3ww/.config/eww/scripts/scroll-waifu new file mode 100755 index 000000000..fa089e24d --- /dev/null +++ b/m3ww/.config/eww/scripts/scroll-waifu @@ -0,0 +1,18 @@ +#!/usr/bin/bash + +offset=$(eww get scroll_offset_waifu) +# total=$(eww get WAIFU_TAG_ID | gojq 'length') +# shown=$(eww get SCROLL_TOSHOW_WAIFUTAGS) +total=20 +shown=13 +# I'm sorry but I have to hard code or it'll be slow asf + +if [ "$1" == "up" ]; then + if [ "$offset" -gt 0 ]; then + eww update scroll_offset_waifu=$(( "$offset" - 2 )) + fi +else + if [ "$offset" -lt $(( "$total" - "$shown" - 1 )) ]; then + eww update scroll_offset_waifu=$(( "$offset" + 2 )) + fi +fi \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/scrollmonth b/m3ww/.config/eww/scripts/scrollmonth new file mode 100755 index 000000000..52e23fece --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/search_items.txt b/m3ww/.config/eww/scripts/search_items.txt new file mode 100755 index 000000000..411e47b04 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/selectwindow b/m3ww/.config/eww/scripts/selectwindow new file mode 100755 index 000000000..2f88d9099 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/swapws.cpp b/m3ww/.config/eww/scripts/swapws.cpp new file mode 100755 index 000000000..ead7b34e5 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/switchwall b/m3ww/.config/eww/scripts/switchwall new file mode 100755 index 000000000..79fc80d49 --- /dev/null +++ b/m3ww/.config/eww/scripts/switchwall @@ -0,0 +1,26 @@ +#!/usr/bin/bash +# Switches swww wallpaper + +# Select +cd "$HOME/Pictures" +imgpath=$(yad --width 1200 --height 800 --file --title='Choose wallpaper') +screensizey=$(xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f2 | head -1) +cursorposx=$(hyprctl cursorpos -j | gojq '.x') +cursorposy=$(hyprctl cursorpos -j | gojq '.y') +cursorposy_inverted=$(( screensizey - cursorposy )) + +if [ "$imgpath" == '' ]; then + echo 'Aborted' + exit 0 +fi + +echo Sending "$imgpath" to swww. Cursor pos: ["$cursorposx, $cursorposy_inverted"] & +# Change swww img +swww img "$imgpath" --transition-step 230 --transition-fps 60 \ + --transition-type grow --transition-angle 30 --transition-duration 1 \ + --transition-pos "$cursorposx, $cursorposy_inverted" & + +# Generate colors for eww n stuff +cp "$imgpath" "$HOME/.config/eww/images/wallpaper" +cd "$HOME/.config/eww" || exit +./scripts/launchapp '>wall' \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/taskbar.cpp b/m3ww/.config/eww/scripts/taskbar.cpp new file mode 100755 index 000000000..b72640bf5 --- /dev/null +++ b/m3ww/.config/eww/scripts/taskbar.cpp @@ -0,0 +1,97 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "nlohmann/json.hpp" +using namespace std; +using json = nlohmann::json; + +string clients, pinned, username; +json clientjson, apps; +vector appnames; + +string getUsername() { + uid_t uid = geteuid(); + struct passwd* pw = getpwuid(uid); + return pw->pw_name; +} + +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 (client["class"] == "") 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(&string("cat /home/" + username + + "/.config/eww/json/taskbar.json | gojq -c -M")[0]); + 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); + + username = getUsername(); + getAppNameAndCount(); + getAppIcon(); + cout << apps << '\n'; +} \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/taskbarloop b/m3ww/.config/eww/scripts/taskbarloop new file mode 100755 index 000000000..edec3a371 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/taskviewlayout-wrapper b/m3ww/.config/eww/scripts/taskviewlayout-wrapper new file mode 100755 index 000000000..bf3e5b967 --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/taskviewlayout.cpp b/m3ww/.config/eww/scripts/taskviewlayout.cpp new file mode 100755 index 000000000..58e145880 --- /dev/null +++ b/m3ww/.config/eww/scripts/taskviewlayout.cpp @@ -0,0 +1,186 @@ +#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) { + // 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/m3ww/.config/eww/scripts/templates/foot/foot.ini b/m3ww/.config/eww/scripts/templates/foot/foot.ini new file mode 100755 index 000000000..f8e255961 --- /dev/null +++ b/m3ww/.config/eww/scripts/templates/foot/foot.ini @@ -0,0 +1,156 @@ +# -*- 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=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=25x25 # optionally append 'center' +# resize-delay-ms=100 + +# notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body} + +bold-text-in-bright=no +# 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=beam +# color=111111 dcdccc +color=282a36 f8f8f2 +# blink=no +beam-thickness=1.5 +# underline-thickness= + +[mouse] +# hide-when-typing=no +# alternate-scroll-mode=yes + +[colors] +alpha=0.7 +background=$background # +foreground=$onBackground # +regular0=$background # +regular1=$error # +regular2=$inversePrimary # +regular3=$tertiary # +regular4=$onPrimaryContainer # +regular5=$onSecondaryContainer # +regular6=$primary # +regular7=$onBackground # +bright0=$background # +bright1=$error # +bright2=$inversePrimary # +bright3=$tertiary # +bright4=$onPrimaryContainer # +bright5=$onSecondaryContainer # +bright6=$primary # +bright7=$onBackground # + +[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=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/m3ww/.config/eww/scripts/templates/fuzzel/fuzzel.ini b/m3ww/.config/eww/scripts/templates/fuzzel/fuzzel.ini new file mode 100755 index 000000000..8846ac306 --- /dev/null +++ b/m3ww/.config/eww/scripts/templates/fuzzel/fuzzel.ini @@ -0,0 +1,21 @@ +font=Lexend +terminal=foot -e +prompt=">> " +layer=overlay + +[colors] +background=$backgroundff +text=$onBackgroundff +selection=$surfaceVariantff +selection-text=$onSurfaceVariantff +border=$surfaceVariantff +match=$primaryff +selection-match=$primaryff + + +[border] +radius=17 +width=2 + +[dmenu] +exit-immediately-if-empty=yes diff --git a/m3ww/.config/eww/scripts/templates/gtklock/style.css b/m3ww/.config/eww/scripts/templates/gtklock/style.css new file mode 100755 index 000000000..7a35b6729 --- /dev/null +++ b/m3ww/.config/eww/scripts/templates/gtklock/style.css @@ -0,0 +1,101 @@ +/* Gtklock css */ + +* { + all: unset; + border: 0px; +} + +window { + background: rgba(0, 0, 0, 0.5); + background-size: cover; + background-repeat: no-repeat; + background-position: center; +} + +#window-box { + border-radius: 1.5rem; + padding: 1.5rem; + border: 0px solid black; +} + +#input-label { + font-size: 1.5rem; + color: transparent; + background-color: transparent; + margin: -20rem; +} + +#input-field { + background-color: $secondaryContainer; + color: $onSecondaryContainer; + border-radius: 999px; + font-size: 1.3rem; + padding: 0.341rem 1.364rem; + margin: 0.477rem; + box-shadow: 2px 2px 4px rgba(22, 22, 22, 0.5); + min-height: 2.727rem; +} + +#unlock-button { + margin: -20rem; + color: transparent; + background-color: transparent; +} + +#error-label { + color: $error; +} + +#clock-label { + font-family: 'Lexend'; + font-size: 6rem; + border-radius: 1.2rem; + padding: 0.5rem; + margin: 0.6rem; + margin-top: -35rem; + color: $primary; + text-shadow: 1px 1px 2px rgba(22, 22, 30, 0.5); +} + +#user-image {} + +#powerbar-box {} + +#poweroff-button { + background-color: $secondaryContainer; + color: $onSecondaryContainer; + min-width: 3rem; + min-height: 3rem; + margin: 10px; + border-radius: 99px; +} + +#suspend-button { + background-color: $secondaryContainer; + color: $onSecondaryContainer; + min-width: 3rem; + min-height: 3rem; + margin: 10px; + border-radius: 99px; +} + +#reboot-button { + background-color: $secondaryContainer; + color: $onSecondaryContainer; + min-width: 3rem; + min-height: 3rem; + margin: 10px; + border-radius: 99px; +} + +#poweroff-button:hover, +#reboot-button:hover, +#suspend-button:hover { + background: rgba(200, 200, 200, 0.3); +} + +#poweroff-button:active, +#reboot-button:active, +#suspend-button:active { + background: rgba(200, 200, 200, 0.5); +} \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/todo.cpp b/m3ww/.config/eww/scripts/todo.cpp new file mode 100755 index 000000000..2377f6072 --- /dev/null +++ b/m3ww/.config/eww/scripts/todo.cpp @@ -0,0 +1,92 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "nlohmann/json.hpp" +using namespace std; +using json = nlohmann::json; + +string rawTodo; +json todo; + +// 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; +} + +void delItem(const string& stringToDelete) { + cout << " [i] Full list: '" << todo << "'\n"; + cout << " [x] Deleting item: '" << stringToDelete << "'\n\n"; + for (int i = 0; i < todo.size(); i++) { + const string& thisEntry = todo[i]; + cout << "Compare: \"" << thisEntry << "\" and \"" << stringToDelete << "\"\n"; + if (thisEntry == stringToDelete) { + cout << "yes\n"; + todo.erase(i); + break; + } + } +} + +void addItem(const string& stringToAdd) { + cout << "adding\n"; + todo.push_back(stringToAdd); +} + +int main(int argc, char* argv[]) { + if (argc == 1) { + cout << "Usage: todo del [ STRING ]"; + return 0; + } + + rawTodo = readIfExists("json/todo.json"); + todo = json::parse(rawTodo); + if (argc > 2 && string(argv[1]) == "del") { + delItem(string(argv[2])); + exec("echo '' > json/todo.json"); + writeToFile("json/todo.json", todo.dump()); + } + else if (argc > 2 && string(argv[1]) == "add") { + addItem(string(argv[2])); + exec("echo '' > json/todo.json"); + writeToFile("json/todo.json", todo.dump()); + } +} \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/toggle-cheatsheet.sh b/m3ww/.config/eww/scripts/toggle-cheatsheet.sh new file mode 100755 index 000000000..45bb5a981 --- /dev/null +++ b/m3ww/.config/eww/scripts/toggle-cheatsheet.sh @@ -0,0 +1,14 @@ +#!/usr/bin/bash +state=$(eww get open_cheatsheet) + +if [[ "$state" -gt "0" || "$1" == "--close" ]]; then + eww update open_cheatsheet=false + eww close cheatsheet +else + eww open cheatsheet + eww update open_cheatsheet=1 + sleep 0.04 + eww update open_cheatsheet=2 + sleep 0.04 + eww update open_cheatsheet=3 +fi \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/toggle-dashboard.sh b/m3ww/.config/eww/scripts/toggle-dashboard.sh new file mode 100755 index 000000000..5c8f8191d --- /dev/null +++ b/m3ww/.config/eww/scripts/toggle-dashboard.sh @@ -0,0 +1,25 @@ +#!/usr/bin/bash +state=$(eww get open_dashboard) + +if [[ "$state" -gt "0" || "$1" == "--close" ]]; then + eww close dashboard + eww update open_dashboard=0 + sleep 0.1 + eww update cavajson='' +else + eww open dashboard + sleep 0.05 + eww update open_dashboard=1 + sleep 0.05 + eww update open_dashboard=2 + sleep 0.05 + eww update open_dashboard=3 + sleep 0.05 + eww update open_dashboard=4 + sleep 0.05 + eww update open_dashboard=5 + sleep 0.05 + eww update open_dashboard=6 + sleep 0.05 + eww update open_dashboard=7 +fi diff --git a/m3ww/.config/eww/scripts/toggle-mixer.sh b/m3ww/.config/eww/scripts/toggle-mixer.sh new file mode 100755 index 000000000..c330d5953 --- /dev/null +++ b/m3ww/.config/eww/scripts/toggle-mixer.sh @@ -0,0 +1,14 @@ +#!/usr/bin/bash +state=$(eww get rev_mixer) + +if [[ "$state" == "true" || "$1" == "--close" ]]; then + eww update open_sideleft=false + sleep 0.15 + eww update rev_mixer=false +else + cd ~/.config/eww || exit + eww update rev_mixer=true + eww open sideleft + eww update open_sideleft=true + eww update open_sideright=false +fi diff --git a/m3ww/.config/eww/scripts/toggle-nightlight.sh b/m3ww/.config/eww/scripts/toggle-nightlight.sh new file mode 100755 index 000000000..3845d741c --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/toggle-notificationspopup.sh b/m3ww/.config/eww/scripts/toggle-notificationspopup.sh new file mode 100755 index 000000000..971430252 --- /dev/null +++ b/m3ww/.config/eww/scripts/toggle-notificationspopup.sh @@ -0,0 +1,17 @@ +#!/usr/bin/bash +if [[ "$1" == "--open" ]]; then + eww open notificationspopup + eww update open_notificationspopup=true + exit +fi + +state=$(eww get open_notificationspopup) +if [[ "$state" == "true" || "$1" == "--close" ]]; then + eww update open_notificationspopup=false + sleep 0.15 + eww close notificationspopup +else + cd ~/.config/eww || exit + eww open notificationspopup + eww update open_notificationspopup=true +fi diff --git a/m3ww/.config/eww/scripts/toggle-osd-bright.sh b/m3ww/.config/eww/scripts/toggle-osd-bright.sh new file mode 100755 index 000000000..8b8a1dd2e --- /dev/null +++ b/m3ww/.config/eww/scripts/toggle-osd-bright.sh @@ -0,0 +1,11 @@ +#!/usr/bin/bash +cd ~/.config/eww +state=$(eww get osd_vol) + +if [[ "$1" == "--open" ]]; then + eww update osd_bright=true +elif [[ "$1" == "--close" ]]; then + eww update osd_bright=false +else + eww update osd_bright=true +fi diff --git a/m3ww/.config/eww/scripts/toggle-osd-vol.sh b/m3ww/.config/eww/scripts/toggle-osd-vol.sh new file mode 100755 index 000000000..b4f968c55 --- /dev/null +++ b/m3ww/.config/eww/scripts/toggle-osd-vol.sh @@ -0,0 +1,11 @@ +#!/usr/bin/bash +cd ~/.config/eww +state=$(eww get osd_bright) + +if [[ "$1" == "--open" ]]; then + eww update osd_vol=true +elif [[ "$1" == "--close" ]]; then + eww update osd_vol=false +else + eww update osd_vol=true +fi \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/toggle-powerview.sh b/m3ww/.config/eww/scripts/toggle-powerview.sh new file mode 100755 index 000000000..5fbea1fa4 --- /dev/null +++ b/m3ww/.config/eww/scripts/toggle-powerview.sh @@ -0,0 +1,20 @@ +#!/usr/bin/bash +cd ~/.config/eww || exit +mkdir -p ~/.config/eww/scripts/cache/ + +state=$(eww get open_powerview) + +if [[ "$state" == "true" || "$1" == "--close" ]]; then + hyprctl dispatch submap reset + eww close powerview 2>/dev/null & + eww update overview_query='' & + eww update open_powerview=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":"Powerview","workspace":{"id":0,"name":"0"},"icon": "/usr/share/icons/breeze-dark/actions/16/window.svg", "size": [0,0], "at": [0,0]}' & + eww open powerview + eww update open_powerview=true + hyprctl dispatch submap powerview +fi diff --git a/m3ww/.config/eww/scripts/toggle-sideleft.sh b/m3ww/.config/eww/scripts/toggle-sideleft.sh new file mode 100755 index 000000000..243f3607e --- /dev/null +++ b/m3ww/.config/eww/scripts/toggle-sideleft.sh @@ -0,0 +1,13 @@ +#!/usr/bin/bash +state=$(eww get open_sideleft) + +if [[ "$state" == "true" || "$1" == "--close" ]]; then + eww update open_sideleft=false + sleep 0.15 + eww update rev_mixer=false +else + cd ~/.config/eww || exit + eww open sideleft + eww update open_sideleft=true + eww update open_sideright=false +fi diff --git a/m3ww/.config/eww/scripts/toggle-sideright.sh b/m3ww/.config/eww/scripts/toggle-sideright.sh new file mode 100755 index 000000000..392030961 --- /dev/null +++ b/m3ww/.config/eww/scripts/toggle-sideright.sh @@ -0,0 +1,11 @@ +#!/usr/bin/bash +state=$(eww get open_sideright) + +if [[ "$state" == "true" || "$1" == "--close" ]]; then + eww update open_sideright=false +else + cd ~/.config/eww || exit + eww open sideright + eww update open_sideright=true + eww update open_sideleft=false +fi diff --git a/m3ww/.config/eww/scripts/toggle-topbottom.sh b/m3ww/.config/eww/scripts/toggle-topbottom.sh new file mode 100755 index 000000000..188868bff --- /dev/null +++ b/m3ww/.config/eww/scripts/toggle-topbottom.sh @@ -0,0 +1,18 @@ +#!/usr/bin/bash +BAR_HEIGHT_NORMAL='40' +BAR_HEIGHT_NORMAL_BOTTOM='60' +bar_height=$(eww get BAR_HEIGHT) + +if [ "$1" == "bottom" ] || [ "$bar_height" == "$BAR_HEIGHT_NORMAL" ]; then + eww close bar + eww update BAR_HEIGHT=0 + eww update BAR_HEIGHT_BOTTOM=$BAR_HEIGHT_NORMAL_BOTTOM + eww open barbottom + hyprctl keyword monitor ,addreserved,0,$BAR_HEIGHT_NORMAL_BOTTOM,0,0 +else + eww close barbottom + eww update BAR_HEIGHT=$BAR_HEIGHT_NORMAL + eww update BAR_HEIGHT_BOTTOM=0 + eww open bar + hyprctl keyword monitor ,addreserved,$BAR_HEIGHT_NORMAL,0,0,0 +fi \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/toggle-visualizer.sh b/m3ww/.config/eww/scripts/toggle-visualizer.sh new file mode 100755 index 000000000..266d06ece --- /dev/null +++ b/m3ww/.config/eww/scripts/toggle-visualizer.sh @@ -0,0 +1,13 @@ +#!/usr/bin/bash +state=$(eww get open_visualizer) + +if [[ "$state" == "true" || "$1" == "--close" ]]; then + eww update open_visualizer=false + sleep 0.15 + eww close visualizer + eww update cavajson='[]' +else + cd ~/.config/eww || exit + eww open visualizer + eww update open_visualizer=true +fi diff --git a/m3ww/.config/eww/scripts/togglelight b/m3ww/.config/eww/scripts/togglelight new file mode 100755 index 000000000..96dd9b58f --- /dev/null +++ b/m3ww/.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/m3ww/.config/eww/scripts/volume b/m3ww/.config/eww/scripts/volume new file mode 100755 index 000000000..8e3b20ab8 --- /dev/null +++ b/m3ww/.config/eww/scripts/volume @@ -0,0 +1,137 @@ +#!/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") + device=$(pactl --format=json list | gojq -r '.["sinks"][0]["active_port"]' | sed 's/\[Out] //g') + device=$(echo "$device" | tail -1) + + 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"'","device":"'"$device"'","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") + device=$(pactl --format=json list | gojq -r '.["sinks"][0]["active_port"]' | sed 's/\[Out] //g') + device=$(echo "$device" | tail -1) + + 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"'","device":"'"$device"'","percent":"'"$(vol "SINK")"'","microphone":"'"$(vol "SOURCE")"'"}' + done +fi diff --git a/m3ww/.config/eww/scripts/waifu-get.py b/m3ww/.config/eww/scripts/waifu-get.py new file mode 100755 index 000000000..960b3d032 --- /dev/null +++ b/m3ww/.config/eww/scripts/waifu-get.py @@ -0,0 +1,139 @@ +#!/usr/bin/python3 +import requests +import json +import os +import sys +from PIL import Image + +def printhelp(): + print(''' +Usage: waifu-get.py [OPTION]... [TAG]... + +Options: + --segs\tForce NSFW images + --im\tUse waifu.im API. You can use many tags + --pics\tUse waifu.pics API. Use 1 tag only. + --nekos\tUse nekos.life (old) API. No tags. + +Tags: + waifu.im (type): + maid waifu marin-kitagawa mori-calliope raiden-shogun oppai selfies uniform + waifu.im (nsfw tags): + ecchi hentai ero ass paizuri oral milf + ''') + exit() + +###### help ###### +if len(sys.argv) == 1: + printhelp() + +###### variables ###### +api_name = {'im': 'waifu.im', 'nekos': 'nekos.life', 'pics': 'waifu.pics', 'moe': 'nekos.moe'} +debug = False +mode = 'im' # either 'im' (waifu.im), 'nekos' (nekos.life), or 'pics' (waifu.pics) +taglist = [] +segs = False +output = {} +headers = {} + +###### arguments ###### +for i in range(1, len(sys.argv)): # Add tags + if sys.argv[i] == '--debug': + debug = True + elif sys.argv[i] == '--segs': + segs = True + elif sys.argv[i] == '--im': + mode = 'im' + elif sys.argv[i] == '--neko': + mode = 'nekos' + elif sys.argv[i] == '--pics': + mode = 'pics' + elif sys.argv[i] == '--moe': + mode = 'moe' + elif sys.argv[i] == '--help' or sys.argv[i] == '-h': + printhelp() + else: + taglist.append(sys.argv[i]) + +###### prepare request ###### +if mode == 'im': + url = 'https://api.waifu.im/search' + headers = {'Accept-Version': 'v5'} + +elif mode == 'nekos': + if segs: + url = 'https://nekos.life/api/lewd/neko' + else: + url = 'https://nekos.life/api/neko' + +elif mode == 'pics': + if segs: + url = 'https://api.waifu.pics/nsfw/' + else: + url = 'https://api.waifu.pics/sfw/' + + if len(taglist) > 0: + url += taglist[0] + else: + url += 'waifu' + +elif mode == 'moe': + url = 'https://nekos.moe/api/v1/random/image' + if segs: + url += '?nsfw=true' + +else: # default: waifu.im + url = 'https://api.waifu.im/search' + headers = {'Accept-Version': 'v5'} + + +params = { + 'included_tags': taglist, + 'height': '>=600', + 'nsfw': segs +} + +os.system('eww update rev_waifustatus=true') +os.system('eww update waifu_status=\'Requesting {0} API\''.format(api_name[mode])) +response = requests.get(url, params=params, headers=headers) + +if debug: + print(json.dumps(response.json())) + exit() + +###### processing ###### +if response.status_code == 200: + data = response.json() + # Process the response data as needed + if mode == 'im': + output['link'] = data['images'][0]['url'] + output['sauce'] = data['images'][0]['source'] + elif mode == 'nekos': + output['link'] = data['neko'] + output['sauce'] = data['neko'] + elif mode == 'moe': + image_id = data['images'][0]['id'] + output['link'] = str('https://nekos.moe/image/' + image_id) + output['sauce'] = str('https://nekos.moe/post/' + image_id) + elif mode == 'pics': + output['link'] = data['url'] + output['sauce'] = data['url'] + else: # default: waifu.im + output['link'] = data['images'][0]['url'] + output['sauce'] = data['images'][0]['source'] + + os.system('eww update waifu_status=\'Downloading image\'') + os.system('wget -O "{0}" "{1}" -q –read-timeout=0.1'.format('eww_covers/waifu_tmp', output['link'])) + os.system('eww update waifu=\'{"name":"eww_covers/waifu_loading", "size": [0, 100]}\'') + os.system('mv ./eww_covers/waifu_tmp ./eww_covers/waifu') + + with Image.open('./eww_covers/waifu') as img: + output['size'] = img.size + output['path'] = 'eww_covers/waifu' + output['ext'] = str('.' + img.format.lower()) + print(json.dumps(output)) + + os.system('eww update rev_waifustatus=false') + +else: + print('Request failed with status code:', response.status_code) diff --git a/m3ww/.config/eww/scripts/workdir/__mode_colors.txt b/m3ww/.config/eww/scripts/workdir/__mode_colors.txt new file mode 100755 index 000000000..43dd47ea6 --- /dev/null +++ b/m3ww/.config/eww/scripts/workdir/__mode_colors.txt @@ -0,0 +1 @@ +one \ No newline at end of file diff --git a/m3ww/.config/eww/scripts/workdir/__mode_light_dark.txt b/m3ww/.config/eww/scripts/workdir/__mode_light_dark.txt new file mode 100755 index 000000000..e69de29bb diff --git a/m3ww/.config/eww/scripts/workspaces b/m3ww/.config/eww/scripts/workspaces new file mode 100755 index 000000000..b2a85401f --- /dev/null +++ b/m3ww/.config/eww/scripts/workspaces @@ -0,0 +1,154 @@ +#!/usr/bin/env bash + +# define colors +colors=("#FFFFFF" "#fab387" "#a6e3a1" "#89b4fa") # Active Workspaces +dimmed=("rgba(154,152,162,0.7)" "#f9e2af" "#94e2d5" "#b4befe") # Inactive workspaces +empty='empty' # 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 "true" + else + echo -n "false" + 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'","haswins":"'$(status "$i")'"}' + done + + 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 + +if [ "$1" == "--once" ]; then + exit +fi + +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/m3ww/.config/eww/variables.yuck b/m3ww/.config/eww/variables.yuck new file mode 100644 index 000000000..6cb5d9a1e --- /dev/null +++ b/m3ww/.config/eww/variables.yuck @@ -0,0 +1,160 @@ +; Const +(defpoll RES_WIDTH :initial 1920 :interval "69h" `xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f1`) +(defpoll RES_HEIGHT :initial 1080 :interval "69h" `xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f2`) +; (defvar RES_WIDTH 1920) +; (defvar RES_HEIGHT 1080) +(defvar BAR_USELESS_GAPS 3) +(defvar BAR_HEIGHT_HIDDEN 0) +(defvar BAR_HEIGHT_NORMAL 40) +(defvar BAR_HEIGHT_EXTENDED 80) +(defvar BAR_HEIGHT_BOTTOM_NORMAL 60) +(defvar GAPS 0) +(defvar BG_ROUNDING 22) +(defpoll accent :initial "#16C1C8" :interval "69h" `cat css/_material.scss | grep 'onPrimaryContainer' | awk '{print $2}' | cut -d ";" -f1`) +(defvar BATTERY_LOW 20) +(defvar OVERVIEW_SCALE 0.18) +(defvar OVERVIEW_INDICATOR_GAP 1) +(defvar POWERMENU_COMMANDS `["gtklock &", "loginctl terminate-user $USER &", "systemctl suspend &", "systemctl hibernate &", "systemctl poweroff &", "systemctl reboot &", "# nothing", "# cancel"]`) +(defvar POWERMENU_QUICKLAUNCHES `["hyprctl keyword debug:overlay $(( 1 - $(hyprctl getoption debug:overlay -j | gojq '.int') ))", "hyprctl dispatch submap reset && eww close powermenu && xdg-open 'https://discord.com/app' && xdg-open 'https://youtube.com/' && xdg-open 'https://github.com/' &", "hyprctl dispatch submap reset && eww close powermenu && code ~/.config/eww/ &", "hyprctl dispatch submap reset && eww close powermenu && xdg-open ~/.config/hypr/hyprland.conf &", "hyprctl dispatch submap reset && eww close powermenu && xdg-open 'https://wiki.hyprland.org/' &", "hyprctl dispatch submap reset && eww close powermenu && xdg-open 'https://www.youtube.com/watch?v=dQw4w9WgXcQ' &"]`) +(defvar SCROLL_MULTIPLIER_WAIFUTAGS 36) ; Number of pixels to scroll each mouse scroll +(defvar SCROLL_TOSHOW_WAIFUTAGS 7) ; Edit scroll-waifu script too. I have to hard code or it'll be very slow +(defvar VOLUME_ICONS `["", "", "", ""]`) ; Levels 0 1 2 3 ; Material icons +(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]`) ; Note: change $total and $shown in scripts/scroll-waifu too +(defvar WAIFU_CATEGORIES_ICONS `["favorite", "mop", "school", "pets", "pets", "adjust", "🥵", "visibility_off", "visibility", "join", "photo_camera", "mode_fan", "explosion","checkroom", "💀", "hourglass_bottom", "relax", "♨️", "pets", "🥵pets", "voice_selection"]`) +(defvar WAIFU_CATEGORIES `["waifu", "maid", "uniform", "nekos.life", "nekos.moe", "oppai", "ero", "ecchi", "hentai", "paizuri", "selfies", "raiden-shogun", "megumin", "marin-kitagawa", "mori-calliope", "ass", ".pics:waifu", ".pics:waifu segs", ".pics:neko", ".pics:neko segs", "oral"]`) +(defvar WAIFU_CATEGORIES_ARGS `["waifu", "maid", "uniform", "--neko", "--moe --segs", "oppai", "ero", "ecchi", "hentai", "paizuri", "selfies", "raiden-shogun", "--pics megumin", "marin-kitagawa", "mori-calliope", "ass", "--pics waifu", "--pics waifu --segs", "--pics neko", "--pics neko --segs", "oral"]`) +(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 WIFI_ICONS `["", "", "", "", ""]`) ; Levels 0 1 2 3 4 ; Material icons +(defvar WORKSPACE_SIDE_PAD 0.477) ; In rem! +(defvar ws-icons '["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]') + +; Const: animation curves +(defvar ANIM_NAMES `["Material","Fluent"]`) +(defvar ANIM_ENTER `["transition: 200ms cubic-bezier(0.05,0.7,0.1,1);","transition: 250ms cubic-bezier(0,0,0,1);"]`) +(defvar ANIM_EXIT `["transition: 150ms cubic-bezier(0.3,0,0.8,0.15);","transition: 180ms cubic-bezier(1,0,1,1);"]`) +(defvar ANIM_VERYLONG `["transition: 600ms cubic-bezier(0.05,0.7,0.1,1);","transition: 600ms cubic-bezier(0,0,0,1);"]`) +(defvar ANIM_INSTANT "transition: 0ms;") +(defvar anim_set 0) ; Index of main animation set + +; Widget states +(defvar flash_notif false) +(defvar hover_leftspace false) +(defvar hover_rightspace false) +(defvar hover_music false) +(defvar open_cheatsheet 0) +(defvar open_notificationspopup false) +(defvar open_powermenu false) +(defvar open_powerview false) +(defvar open_sideleft false) +(defvar open_sideright false) +(defvar open_visualizer false) +(defvar osd_vol false) +(defvar osd_bright false) +(defvar rev_mixer false) +(defvar rev_mixerbtn false) +(defvar rev_waifustatus false) + +; Vars +(defvar BAR_HEIGHT 40) +(defvar BAR_HEIGHT_BOTTOM 0) +(defvar calendartitle "") +(defpoll langs :initial "[]" :interval "69h" `cat json/langs.json | gojq -c -M`) +(defvar monthshift 0) +(defvar notification_read 0) +(defvar notification_cleared 0) +(defvar notification_revcnt 0) +(defvar overview_hover_name `{"class": "LMB: Focus | MMB: Close | RMB: Select/Move","title":"Powerview","workspace":{"id":0,"name":"0"},"icon": "/usr/share/icons/breeze-dark/actions/16/window.svg", "size": [0,0], "at": [0,0]}`) +(defvar overview_query "") +(defvar overview_results "[]") +(defvar powermenu_option 0) +(defvar quote_index 0) +(defvar scroll_offset_waifu 0) +(defvar selected '') +(defvar show_waifu false) +(defvar waifu_status "") + + +; Dummies +(deflisten ICON_GET `scripts/get_open_icons`) + +; Listeners +(deflisten awin "scripts/activewin") +(deflisten activews :initial 1 "scripts/activews") +(deflisten audiojson :initial "[]" "scripts/audiolevels") +(deflisten battery :initial "{\"bgcolor\":\"transparent\",\"cirbgcolor\":\"transparent\",\"circolor\":\"#ffd9de\",\"color\":\"white\",\"icon\":\"\",\"percentage\":54,\"quickicon\":\"\",\"status\":\"00:06hleft\",\"wattage\":\"11.9W\"}" "scripts/battery 2>/dev/null") +(deflisten bluetooth :initial `{"icon": "","batt_icon":"","text":"Bluetooth off"}` "scripts/bluetooth") +(deflisten brightness :initial `{"level": 38.43,"icon": ""}` "scripts/brightness") +(defpoll calendar :initial "[]" :interval "15m" `eww update monthshift=0 && eww update calendartitle="$(date '+%B %Y')" && scripts/calendarlayout`) +(deflisten cheatsheet :initial "[]" "cat json/cheatsheet.json | gojq -c -M") +(deflisten cavajson :initial "[[0,0]]" `scripts/cavajson`) +(defpoll fontsize :initial 11 :interval "15m" `gsettings get org.gnome.desktop.interface font-name | cut -d ' ' -f 2 | sed 's/\'//g'`) +(deflisten hyprjson :initial `{"rounding":15,"gaps_in":4,"gaps_out":4,"border_size":2,"force_no_accel":0,"input_sensitivity":0,"touchpad_disable_while_typing":1,"touchpad_clickfinger_behavior":1,"blur":1,"blur_size":7,"blur_passes":4,"blur_xray":1,"nightlight":false,"dummy":0}` "scripts/hyprsettings") +(deflisten lang_ibus :initial "{\"name\":\"English (xkb)\",\"name_abbr\":\"ENG\",\"name_ibus\":\"xkb:us::eng\"}" `scripts/language`) +(deflisten memory :initial `{ "total": "8G", "used": "4G", "free": "4G", "swaptotal": "8G", "swapused": "0M", "swappercentage": 0, "swapfree": "8G", "percentage": 50 }` "scripts/memory") +(deflisten mname :initial "{\"artist\":\"\",\"title\":\"Music\"}" "scripts/music name 999") ; The number is the length limit of the title +(deflisten mplay "playerctl -F metadata -f '{{status}}'") +(deflisten music :initial `{"artist" :"","length":"00:00","position":"0","position_time":"00:00","status":"","title":"Music"}` "scripts/music") +(deflisten mcover + :initial '{"image": "null", "color": {"alpha":"100","colors":{"color0":"null","color1":"null","color10":"null","color11":"null","color12":"null","color13":"null","color14":"null","color15":"null","color2":"null","color3":"null","color4":"null","color5":"null","color6":"null","color7":"null","color8":"null","color9":"null"},"special":{"background":"null","cursor":"null","foreground":"null"},"wallpaper":"~/.config/eww/eww_covers/cover_art","source":"󱛟"},"materialcolor":{"onPrimary":"null","onPrimaryContainer":"null","onSecondaryContainer":"null","primary":"null","primaryContainer":"null","secondaryContainer":"null"}}' + "scripts/music cover" +) +(deflisten net :initial `{ "essid": "lo", "icon": "", "level": "0" }` "scripts/net") +(deflisten notifications :initial '[]' "scripts/notify-receive | gojq -c -M 'reverse'") +(deflisten tasks "scripts/taskbarloop") +(deflisten todolist :initial "[]" "cat json/todo.json | gojq -c -M") +(deflisten volume :initial `{"icon":"","audio":"1","device":"Headphones","percent":"32","microphone":"100"}` "scripts/volume") +(deflisten workspace :initial `[{"num":"1","haswins":"true"},{"num":"2","haswins":"true"},{"num":"3","haswins":"true"},{"num":"4","haswins":"true"},{"num":"5","haswins":"true"},{"num":"6","haswins":"true"},{"num":"7","haswins":"true"},{"num":"8","haswins":"true"},{"num":"9","haswins":"true"},{"num":"10","haswins":"true"}]` "scripts/workspaces") +(deflisten wsjsona + :initial `[[{"address":"_none","at":[0,0],"class":"workspace","size":[1920,1080],"title":"1","workspace":{"id":1,"name":"1"}}],[{"address":"_none","at":[0,0],"class":"workspace","size":[1920,1080],"title":"2","workspace":{"id":2,"name":"2"}}],[{"address":"_none","at":[0,0],"class":"workspace","size":[1920,1080],"title":"3","workspace":{"id":3,"name":"3"}}],[{"address":"_none","at":[0,0],"class":"workspace","size":[1920,1080],"title":"4","workspace":{"id":4,"name":"4"}}],[{"address":"_none","at":[0,0],"class":"workspace","size":[1920,1080],"title":"5","workspace":{"id":5,"name":"5"}}]]` + "scripts/overview-wrapper1" +) +(deflisten wsjsonb + :initial `[[{"address":"_none","at":[0,0],"class":"workspace","size":[1920,1080],"title":"6","workspace":{"id":6,"name":"6"}}],[{"address":"_none","at":[0,0],"class":"workspace","size":[1920,1080],"title":"7","workspace":{"id":7,"name":"7"}}],[{"address":"_none","at":[0,0],"class":"workspace","size":[1920,1080],"title":"8","workspace":{"id":8,"name":"8"}}],[{"address":"_none","at":[0,0],"class":"workspace","size":[1920,1080],"title":"9","workspace":{"id":9,"name":"9"}}],[{"address":"_none","at":[0,0],"class":"workspace","size":[1920,1080],"title":"10","workspace":{"id":10,"name":"10"}}]]` + "scripts/overview-wrapper2" +) + +; Polls +(defpoll cpuname :interval "69h" :initial "lincox" ` lscpu | grep 'Model name' | sed 's/Model name: *//' | sed 's/ with Radeon Graphics//g'`) +(defpoll gpunames :interval "69h" :initial "lincox" `lspci | grep "VGA\\\|3D" | cut -d ':' -f3 | cut -d '[' -f2 | cut -d ']' -f1`) +(defpoll diskfreepercent :initial "0" :interval "10m" `echo $(df --output=pcent / | tr -dc '0-9')`) +(defpoll diskfree :interval "10m" `df -h --output=avail / | awk 'NR==2{print $1}'`) +(defpoll diskused :interval "10m" `df -h --output=used / | awk 'NR==2{print $1}'`) +(defpoll distro :initial "endeavouros" :interval "69h" "grep -w ID /etc/os-release | cut -d\\\" -f2") +(defpoll hostname :interval "69h" :initial "distro" `uname -n`) +(defpoll hyprland_version :interval "69h" :initial "v69420" "hyprctl version | head -2 | tail -1") +(defpoll kernel :interval "69h" :initial "lincox kernel" `uname -r`) +(defpoll realname :interval "69h" :initial "username" `awk -F':' -v uid=1000 '$3 == uid { print $5 }' /etc/passwd`) +(defpoll time + :initial `{"date": "6/9", "hour": "0", "minute": "0", "monthname": "Month", "day": "Not monday", "year": "2077"}` + :interval "5s" + `date +'{"date": "%d/%m", "hour": "%H", "minute": "%M", "monthname": "%B", "day": "%A", "year": "%Y"}'` +) +(defpoll uptime :interval "5m" "uptime -p | sed -e 's/up //;s/ hours,/h/;s/ minutes/m/'") +(defpoll username :interval "69h" :initial "username" `whoami`) +(defpoll waifu :initial `{"path": "eww_covers/waifu", "size": [1080, 1080]}` :interval "5m" `python3 scripts/waifu-get.py waifu`) + +; INSPIRING quotes +(defvar quote_content `[ + "every other compositor is like professional and shit\\\nand we are about to make porn of ours\\\nLMAO", + "haha pointers hee hee i love pointe-\\\nProcess Vaxry exited with signal SIGSEGV", + "arch is like rick astley to me\\\nnever gonna let you down", + "you have any cool ones?\\\nI'm always open for new wallpapers\\\npreferably anime tiddies ofc but yknow", + "BRO FRANCE BANNED MS OFFICE AND GOOGLE DOCS IN SCHOOLS LMAO L L L L L L L L L L L L L L L L", + "doki doki waku waku", + "that was good enough I guess\\\nI have a penis", + "...so Nvidia, fuck you", + "you cant spell circumference without cum", + "sEX" +]`) +(defvar quote_author `[ + "- vaxer", + "- vaxry", + "- vaxry-chan", + "- vaxry", + "- vaxry", + "- Hyprland community, 2023", + "- vaxry", + "- Linus Torvalds", + "- vaxer", + "- vaxer" +]`) \ No newline at end of file diff --git a/m3ww/.config/eww/windows/bgdecor.yuck b/m3ww/.config/eww/windows/bgdecor.yuck new file mode 100755 index 000000000..39495a1e9 --- /dev/null +++ b/m3ww/.config/eww/windows/bgdecor.yuck @@ -0,0 +1,61 @@ +(defwidget bgdecor_widget [] + (box + :vexpand true + :space-evenly false :orientation "v" + (box + :class "bar-bg ${BAR_HEIGHT >= 2 ? 'bar-height' : ''}" + ) + (overlay + :vexpand true + (box + :vexpand true + :class "bgdecor-box" + ) + (image + :path "images/svg/corner_topleft.svg" + :halign "start" + :valign "start" + :image-width BG_ROUNDING + :image-height BG_ROUNDING + ) + (image + :path "images/svg/corner_topright.svg" + :halign "end" + :valign "start" + :image-width BG_ROUNDING + :image-height BG_ROUNDING + ) + (image + :path "images/svg/corner_bottomleft.svg" + :halign "start" + :valign "end" + :image-width BG_ROUNDING + :image-height BG_ROUNDING + ) + (image + :path "images/svg/corner_bottomright.svg" + :halign "end" + :valign "end" + :image-width BG_ROUNDING + :image-height BG_ROUNDING + ) + ) + (box + :class "bar-bg ${BAR_HEIGHT >= 2 ? '' : 'bar-bottom-height'}" + ) + (box + :class "bar-bg ${open_visualizer ? 'visualizer-height' : ''}" + ) + ) +) + +(defwindow bgdecor + :monitor 0 + :stacking "bg" + :namespace "noblur" + :geometry (geometry + :width "100%" + :height "100%" + ) + (bgdecor_widget) +) \ No newline at end of file diff --git a/m3ww/.config/eww/windows/cheatsheet.yuck b/m3ww/.config/eww/windows/cheatsheet.yuck new file mode 100755 index 000000000..f1ad572a6 --- /dev/null +++ b/m3ww/.config/eww/windows/cheatsheet.yuck @@ -0,0 +1,115 @@ +(defwidget cheatsheet_widget [] + (box + :class "cheatsheet-bg spacing-v-15" + :orientation "v" + :space-evenly false + (centerbox + (box) + (box + :valign "center" + :orientation "h" + :space-evenly false + :class "spacing-h-15" + (label + :class "txt txt-hugeass" + :text "Cheat sheet" + ) + (box + :space-evenly false + (label + :valign "center" + :class "cheatsheet-key txt-small" + :text "" + ) + (label + :valign "center" + :class "cheatsheet-key-notkey txt-small" + :text "+" + ) + (label + :valign "center" + :class "cheatsheet-key txt-small" + :text "/" + ) + ) + ) + (button + :halign "end" :valign "center" + :class "cheatsheet-closebtn icon-material txt txt-hugeass" + :onclick "hyprctl dispatch submap reset && scripts/toggle-cheatsheet.sh --close &" + (label + :text "close" + ) + ) + ) + (box + :spacing 15 ; can't apply dynamic children spacing for for loops sadly + (for column in cheatsheet + (box + :orientation "v" + :space-evenly false + :spacing 15 ; can't apply dynamic children spacing for for loops sadly + (for category in column + (revealer + :transition "crossfade" + :duration "150ms" + :reveal {open_cheatsheet >= category.appeartick} + (box :space-evenly false :orientation "v" + :class "spacing-v-15" + (box + :orientation "h" + :space-evenly false + :class "spacing-h-10" + (label :xalign 0 + :class "icon-material txt txt-larger" + :text {category.icon} + ) + (label :xalign 0 + :class "txt txt-larger" + :text {category.name} + ) + ) + (box + :space-evenly false :orientation "h" + :class "spacing-h-10" + (box + :orientation "v" + (for keybind in {category.binds} + (box :space-evenly false :orientation "h" + (for key in {keybind.keys} + (label + :class "${key == 'OR' || key == '+' ? 'cheatsheet-key-notkey' : 'cheatsheet-key'} txt-small" + :text {key} + ) + ) + ) + ) + ) + (box + :orientation "v" + (for keybind in {category.binds} + (label :xalign 0 + :class "txt chearsheet-action txt-small" + :text {keybind.action} + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) +) + +(defwindow cheatsheet + :monitor 0 + :stacking "fg" + :namespace "eww" + :geometry (geometry + :anchor "center center" + ) + (cheatsheet_widget) +) \ No newline at end of file diff --git a/m3ww/.config/eww/windows/notificationspopup.yuck b/m3ww/.config/eww/windows/notificationspopup.yuck new file mode 100755 index 000000000..1669472d7 --- /dev/null +++ b/m3ww/.config/eww/windows/notificationspopup.yuck @@ -0,0 +1,86 @@ +(defwidget notificationspopup_widget [] + (box + (box + :style " + ${open_notificationspopup ? '' : 'margin-top: -${RES_HEIGHT}px;'} + ${open_notificationspopup ? ANIM_ENTER[0] : ANIM_EXIT[0]} + " + (eventbox + :onhoverlost "scripts/toggle-notificationspopup.sh --close && ${EWW_CMD} update notification_read=${notifications[0]['id']} &" + (box + :orientation "v" :space-evenly false + (box + :orientation "v" :space-evenly false + (for notif in notifications + (revealer + :reveal {notif.id > notification_read && notif.id <= notification_revcnt} + :transition "slidedown" + :duration "100ms" + (box + :class "popup-notif-common popup-notif${ + arraylength(notifications) - notification_read == 1 ? '' : ( + notif.id == arraylength(notifications) ? ( + notifications[1]['app_name'] == notif.app_name && notifications[1]['urgency'] == notif.urgency ? '-top' : '' + ) : ( + notif.id == 1 ? ( + notifications[arraylength(notifications) - 2]['app_name'] == notif.app_name && notifications[arraylength(notifications) - 2]['urgency'] == notif.urgency ? '-bottom' : '' + ) : ( + notifications[arraylength(notifications) - notif.id + 1]['app_name'] == notif.app_name && notifications[arraylength(notifications) - notif.id + 1]['urgency'] == notif.urgency && notif.id != notification_read + 1 ? ( + notifications[arraylength(notifications) - notif.id - 1]['app_name'] == notif.app_name && notifications[arraylength(notifications) - notif.id - 1]['urgency'] == notif.urgency ? '-middle' : '-top') : ( + notifications[arraylength(notifications) - notif.id - 1]['urgency'] == notif.urgency ? '-bottom' : '' + ) + ) + ) + ) + } ${notif.urgency == 2 ? 'popup-notif-urgent' : 'popup-notif-normal'}" + :orientation "h" + (box :orientation "v" :space-evenly false + (box :orientation "h" :space-evenly false + (label :xalign 0 + :wrap true + :class "txt-norm txt-bold" + :text "${notif.summary}" + ) + (box :hexpand true) + (label :xalign 0 + :wrap true + :class "txt-small" + :text "${notif.app_name} • ${notif.time}" + :text "${arraylength(notifications) == 1 || + notif.id == arraylength(notifications) || + notifications[arraylength(notifications) - notif.id - 1]['app_name'] != notif.app_name || notifications[arraylength(notifications) - notif.id - 1]['urgency'] != notif.urgency ? + '${notif.app_name} • ${notif.time}' : notif.time + }" + ) + ) + (label :xalign 0 + :wrap true + :class "txt-smaller" + :text {notif.body} + ) + ) + ) + ) + ) + ) + (label + :halign "center" + :class "txt-small txt popup-notif-hint" + :text "Press right Ctrl or unhover to dismiss" + ) + ) + ) + ) + ) +) + +(defwindow notificationspopup + :monitor 0 + :stacking "overlay" + :namespace "eww" + :geometry (geometry + :anchor "top center" + :y "4%" + ) + (notificationspopup_widget) +) \ No newline at end of file diff --git a/m3ww/.config/eww/windows/powermenu.yuck b/m3ww/.config/eww/windows/powermenu.yuck new file mode 100755 index 000000000..dd00e3519 --- /dev/null +++ b/m3ww/.config/eww/windows/powermenu.yuck @@ -0,0 +1,269 @@ +(defwidget powermenu_button [ icon text optn_num force_height ] + (box + (button + :class "powermenu-btn${force_height ? '-forceheight' : ''}${optn_num == powermenu_option ? '-active' : ''}" + :onclick "hyprctl dispatch submap reset && eww close powermenu; ${POWERMENU_COMMANDS[optn_num]}" + (box + :valign "center" + :orientation "v" + :space-evenly false + (label + :class "icon-material txt-badonkers" + :text {icon} + ) + (label + :class "txt-small" + :text {text} + ) + ) + ) + ) +) + +(defwidget powermenu_quicklaunch [ icon text optn_num ] + (box + (button + :class "powermenu-btn-bottom" + :onclick {POWERMENU_QUICKLAUNCHES[optn_num]} + (overlay + (box + :valign "center" + :orientation "v" + :space-evenly false + (label + :class "icon-material txt-hugeass" + :text {icon} + ) + (label + :class "txt-small" + :text {text} + ) + ) + ; number indicator + (box + :class "powermenu-btn-number" + :halign "start" :valign "start" + (label + :class "txt-small" + :text {optn_num == 0 ? 'Grave' : optn_num} + ) + ) + ) + ) + ) +) + +(defwidget powermenu_guidetext [ icon text ] + (box + :class "spacing-h-10" + :space-evenly false :orientation "h" + (label :xalign 1 + :class "txt-large powermenu-keybind-min-width" + :text "[${icon}]" + ) + (label :xalign 0 + :class "txt-small" + :text {text} + ) + ) +) + +(defwidget powermenu_widget [] + (box + :orientation "v" + :space-evenly false + :class "powermenu-bg" + (box ; Top corners + :space-evenly false + :orientation "h" + (image + :path "images/svg/corner_topleft.svg" + :image-width BG_ROUNDING + :image-height BG_ROUNDING + ) + (box :hexpand true) + (image + :path "images/svg/corner_topright.svg" + :image-width BG_ROUNDING + :image-height BG_ROUNDING + ) + ) + (centerbox + :space-evenly false + (box ; Guide text + :hexpand true + :space-evenly false + :orientation "v" + :class "powermenu-time txt" + (powermenu_guidetext :icon "←↑→↓" :text "Arrows to navigate") + (powermenu_guidetext :icon "↵" :text "Enter to confirm") + (powermenu_guidetext :icon "Esc" :text "Esc to cancel") + (powermenu_guidetext :icon "C_S+R" :text "Ctrl+Super+R to force exit") + (powermenu_guidetext :icon "#" :text " to quick-launch") + ) + (box ; Power options + :space-evenly false + :halign "center" + :class "spacing-v-15 powermenu-btn-area" + :orientation "v" + (box + :space-evenly false + :class "spacing-h-15" + (powermenu_button :optn_num 0 :force_height true :icon "lock" :text "Lock") + (powermenu_button :optn_num 1 :force_height true :icon "logout" :text "Logout") + (powermenu_button :optn_num 2 :force_height true :icon "bedtime" :text "Sleep") + ) + (box + :space-evenly false + :class "spacing-h-15" + (powermenu_button :optn_num 3 :force_height true :icon "system_update_alt" :text "Hibernate") + (powermenu_button :optn_num 4 :force_height true :icon "power_settings_new" :text "Shutdown") + (powermenu_button :optn_num 5 :force_height true :icon "restart_alt" :text "Reboot") + ) + ; Cancel button + (box :halign "center" + (powermenu_button :optn_num 7 :force_height false :icon "Close" :text "Cancel") + ) + ) + (box ; Clock + :hexpand true + :space-evenly false + :orientation "v" + :class "powermenu-time txt" + (label :xalign 1 + :class "txt-badonkers" + :text {formattime(EWW_TIME, '%I:%M')} + ) + (label :xalign 1 + :class "txt-large" + :text {formattime(EWW_TIME, '%A, %d/%m')} + ) + ) + ) + ; (box :vexpand true) + ; Info stuff + (box + :halign "center" :valign "center" + :vexpand true + :orientation "h" + :space-evenly false + :class "spacing-h-15" + (box + :valign "center" + :class "spacing-h-15" + :space-evenly false + :orientation "h" + (label + :class "icon-material txt-badonkers powermenu-icon" + :text "devices" + ) + (box + :valign "center" + :orientation "v" + :space-evenly false + :class "spacing-v-5" + ; (label :xalign 0 + ; :class "txt-large txt" + ; :text "Hardware" + ; ) + (label :xalign 0 + :wrap true + :class "txt-small txt" + :text "${cpuname}" + ) + (label :xalign 0 + :wrap true + :class "txt-small txt" + :text "${gpunames}" + ) + ) + ) + (box + :valign "center" + :class "spacing-h-10" + :space-evenly false + :orientation "h" + (box + :class "powermenu-icon" + :style "background-image: url('images/svg/${distro}.svg');" + ) + (box + :valign "center" + :orientation "v" + :space-evenly false + :class "spacing-v-5" + (label :xalign 0 + :class "txt-large txt" + :text "${username}@${hostname}" + ) + (label :xalign 0 + :class "txt-small txt" + :text "${kernel}" + ) + ) + ) + (box + :valign "center" + :class "spacing-h-15" + :space-evenly false + :orientation "h" + (box + :class "powermenu-icon" + :style "background-image: url('images/svg/hyprland.svg');" + ) + (box + :valign "center" + :orientation "v" + :space-evenly false + :class "spacing-v-5" + (label :xalign 0 + :class "txt-large txt" + :text "Hyprland" + ) + (label :xalign 0 + :class "txt-small txt" + :text "${hyprland_version}" + ) + ) + ) + ) + (box ; Quick-launches + :space-evenly false + :halign "center" + :class "spacing-h-15 powermenu-btn-area" + ; toggle fps + (powermenu_quicklaunch :optn_num 0 :icon "60fps_select" :text "Toggle FPS") + (powermenu_quicklaunch :optn_num 1 :icon "language" :text "Open browser setup") + (powermenu_quicklaunch :optn_num 2 :icon "widgets" :text "Config Eww") + (powermenu_quicklaunch :optn_num 3 :icon "water_drop" :text "Config Hyprland") + (powermenu_quicklaunch :optn_num 4 :icon "article" :text "Hyprland Wiki") + (powermenu_quicklaunch :optn_num 5 :icon "auto_awesome" :text "Rickroll") + ) + (box ; Bottom corners + :space-evenly false + :orientation "h" + (image + :path "images/svg/corner_bottomleft.svg" + :image-width BG_ROUNDING + :image-height BG_ROUNDING + ) + (box :hexpand true) + (image + :path "images/svg/corner_bottomright.svg" + :image-width BG_ROUNDING + :image-height BG_ROUNDING + ) + ) + ) +) + +(defwindow powermenu + :monitor 0 + :stacking "overlay" + :namespace "noanim" + :geometry (geometry + :width "100%" + :height "100%" + ) + (powermenu_widget) +) \ No newline at end of file diff --git a/m3ww/.config/eww/windows/powerview.yuck b/m3ww/.config/eww/windows/powerview.yuck new file mode 100755 index 000000000..3fe4da352 --- /dev/null +++ b/m3ww/.config/eww/windows/powerview.yuck @@ -0,0 +1,226 @@ +(defwidget powerview_workspacebox_widget [wspace] + (box + :class "powerview-ws" + (overlay + (box + :space-evenly false + :orientation "h" + :style " + min-width: ${RES_WIDTH * OVERVIEW_SCALE}px; + min-height: ${RES_HEIGHT * OVERVIEW_SCALE}px; + " + (box + :hexpand true + :class "powerview-ws-${wspace[0].workspace.id == activews}" + :style " + border-radius: 99px; + margin: 0px ${RES_WIDTH / 3 * OVERVIEW_SCALE}px; + margin-bottom: ${(BAR_HEIGHT == 0 ? GAPS : (RES_HEIGHT - BAR_HEIGHT)) * OVERVIEW_SCALE + OVERVIEW_INDICATOR_GAP}px; + margin-top: ${(BAR_HEIGHT == 0 ? (RES_HEIGHT - BAR_HEIGHT_BOTTOM) : GAPS) * OVERVIEW_SCALE + OVERVIEW_INDICATOR_GAP}px; + " + ) + ) + (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.address == '_none' ? '' : ( + ws-window.address != selected ? 'powerview-ws-window' : 'powerview-ws-window-selected' + )}" + :style " + margin-left: ${round(ws-window.at[0] * OVERVIEW_SCALE, 0)}px; + margin-top: ${round(ws-window.at[1] * OVERVIEW_SCALE, 0)}px; + margin-right: -${round((ws-window.at[0] + ws-window.size[0]) * OVERVIEW_SCALE,0)}px; + margin-bottom: ${round(RES_HEIGHT * OVERVIEW_SCALE - ((ws-window.at[1] + ws-window.size[1]) * OVERVIEW_SCALE), 0)}px; + " + (eventbox + :cursor "${ws-window.class == 'workspace' ? '' : 'cell'}" + :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-powerview.sh --close &" + :onhover "${ws-window.class == 'workspace' ? '' : (EWW_CMD + ' update overview_hover_name=\'' + ws-window + '\'')}" + (literal + :content ` + ${ ws-window.icon == 'null' ? '(box)' : + ' + (image + :vexpand true + :path {ws-window.icon} + :image-width {round(ws-window.size[0] * OVERVIEW_SCALE * 45 / 100, 0)} + :image-height {round(ws-window.size[1] * OVERVIEW_SCALE * 45 / 100, 0)} + ) + ' + } + ` + ) + ) + ) + ) + ) + ) + ) +) + +(defwidget powerview_widget [] + (box + :space-evenly false + :orientation "v" + (eventbox + :onclick "scripts/toggle-powerview.sh --close &" + :onmiddleclick "scripts/toggle-powerview.sh --close &" + :onrightclick "scripts/toggle-powerview.sh --close &" + :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace" + ) + ; Search box + (box + :class "powerview-search-box-size" + :halign "center" + (box + (overlay + (input + :class "powerview-search-field" + :halign "fill" :vexpand true + :onchange "${EWW_CMD} update overview_query=\"{}\" && ${EWW_CMD} update overview_results=\"$(scripts/appsearch '{}')\" &" + :onaccept "scripts/launchapp '${overview_results == '[]' ? {} : overview_results[0].exec}' &" + ) + (revealer + :reveal false + :transition "slidedown" + (label + :text {ICON_GET} ; Dummy to keep listener active + ) + ) + (box + :space-evenly false + :halign "center" :valign "center" + :orientation "v" + (revealer + :reveal "${overview_query == ''}" + :duration "150ms" + (label + :class "powerview-search-prompt-txt" + :xalign 0 + :text "Search or calculate" + ) + ) + ) + ) + ) + ) + (eventbox ; Apps in workspaces + :onhoverlost `eww update overview_hover_name='{"class":"LMB: Focus | MMB: Close | RMB: Select/Move","title":"Powerview","workspace":{"id":0,"name":"0"},"icon": "/usr/share/icons/breeze-dark/actions/16/window.svg", "size": [0,0], "at": [0,0]}' &` + :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 == '' ? '180ms' : '150ms'}" + (revealer + :reveal "${overview_query == ''}" + :transition "crossfade" + :duration "${overview_query == '' ? '180ms' : '150ms'}" + (box + :space-evenly false + :orientation "v" + (box + :space-evenly false + :orientation "v" + :class "powerview-bg" + (box + :orientation "h" + (for wspace in wsjsona + (powerview_workspacebox_widget + :wspace {wspace} + ) + ) + ) + (box + :orientation "h" + (for wspace in wsjsonb + (powerview_workspacebox_widget + :wspace {wspace} + ) + ) + ) + ) + (centerbox + :halign "center" + :orientation "h" + :class "bar-bg powerview-info" + (label :xalign 0 + :class "txt-norm txt" + :text "${overview_hover_name.class}" + ) + (label + :class "txt-norm txt" + :style "margin: 0px 50px;" + :text "${overview_hover_name.title}" + ) + (label :xalign 1 + :class "txt-norm txt" + :text "${overview_hover_name.size[0]}x${overview_hover_name.size[1]} " + ) + ) + ) + ) + ) + ) + (box ; Search results + :space-evenly false + :halign "center" + :orientation "v" + (revealer + :reveal "${overview_query != ''}" + :transition "slidedown" + :duration "${overview_query == '' ? '170ms' : '200ms'}" + (revealer + :reveal "${overview_query != ''}" + :transition "crossfade" + :duration "${overview_query == '' ? '170ms' : '200ms'}" + (scroll + :class "powerview-search-list-size" + (box + :halign "center" + :orientation "v" + :spacing 2 + :space-evenly false + (for entry in overview_results + (overlay + (input + :value "${entry.name}" + :class "powerview-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/app.svg'} + :image-width 33 + :image-height 33 + ) + ) + ) + ) + ) + ) + ) + ) + ) +) + +(defwindow powerview + :stacking "overlay" + :focusable true + :monitor 0 + :namespace "eww" + :geometry (geometry + :anchor "top center" + :y 80 + ) + (powerview_widget) +) + diff --git a/m3ww/.config/eww/windows/sideleft.yuck b/m3ww/.config/eww/windows/sideleft.yuck new file mode 100755 index 000000000..ad98b9cc4 --- /dev/null +++ b/m3ww/.config/eww/windows/sideleft.yuck @@ -0,0 +1,578 @@ +(defwidget sideleft_widget [] + (eventbox + :onhoverlost "scripts/toggle-sideleft.sh --close &" + (box + :orientation "v" :space-evenly false + (eventbox + :onclick "scripts/toggle-sideleft.sh &" + :onscroll "echo $(echo {} | sed -e 's/down/-U 3/g' -e 's/up/-A 3/g' | xargs light) && scripts/brightness osd &" + :onmiddleclick "playerctl play-pause" + :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + (box :class {BAR_HEIGHT >= 2 ? 'bar-height' : ''}) + ) + (box + :vexpand true + :class "sidebar-window ${open_sideleft ? 'anim-enter' : 'anim-exit'} ${open_sideleft ? '' : 'sidebar-hide-left'}" + (scroll + :hscroll false :vscroll false + :vexpand true + (box + :orientation "h" + :spacing 1 + :style " + ${ANIM_ENTER[0]} + ${rev_mixer ? 'margin-left: -34.091rem' : 'margin-right: -34.091rem;'} + " + (scroll + :hscroll false :vscroll true + :vexpand true + (box + :vexpand true + :class "spacing-v-15" + :orientation "v" :space-evenly false + (box ; Resources + :class "spacing-h-5" + :orientation "h" + :space-evenly false + (box + :class "sidebar-resource-value" + :space-evenly false + (label :class "icon-material txt-large" + :valign "center" + :text "data_saver_on" + ) + (label :class "txt-smaller" :text "${round(EWW_CPU.avg, 0)}%") + (progress + :valign "center" + :class "sidebar-prog-resource" + :value {round(EWW_CPU.avg, 0)} + ) + ) + (box + :class "sidebar-resource-value" + :space-evenly false + (label :class "icon-material txt-larger" + :valign "center" + :text "memory" + ) + (box :orientation "v" + (label :xalign 0 + :class "txt-smaller" + :text {memory.used} + ) + (label :xalign 0 + :class "txt-smaller" + :text "+${memory.swapused}" + ) + ) + (box + :valign "center" + :orientation "v" :space-evenly false + (progress + :valign "center" + :class "sidebar-prog-resource" + :value {memory.percentage} + ) + (progress + :valign "center" + :class "sidebar-prog-resource" + :value {memory.swappercentage} + ) + ) + ) + (box + :class "sidebar-resource-value" + :space-evenly false + :hexpand true + (label :class "icon-material txt-larger" + :valign "center" + :text "hard_drive" + ) + (label :xalign 0 + :class "txt-smaller" + :text {diskfree} + ) + (progress + :hexpand true + :valign "center" + :class "sidebar-prog-resource" + :value {diskfreepercent} + ) + ) + ) + (box ; Music + (eventbox + :onhover "${EWW_CMD} update rev_mixerbtn=true &" + :onhoverlost "${EWW_CMD} update rev_mixerbtn=false &" + (box + :hexpand true + (overlay + :hexpand true + (box ; 0. Fallback background + :class "sidebar-music-thumbnail-fallback" + ) + (box ; 1. The background + :class "sidebar-music-thumbnail" + :style " + ${mcover.image == 'null' ? '' : ('background-image: url(\'' + mcover.image + '\'); background-size: 100% auto; background-position: center')} + " + ) + (box ; 2. Color tint + :class "sidebar-music-vignette" + :hexpand true + ) + (box ; 3. Text and controls + :class "spacing-v-minus5" + :orientation "v" + :space-evenly false + (box ; Media source, output + :class "sidebar-music-toprow" + :space-evenly false + :orientation "h" + (label :xalign 0 + :hexpand true + :class "sidebar-music-source txt-hugeass" + :text "${mcover.color.source}" + :style "color: ${mcover.materialcolor.onPrimaryContainer};" + :style {mcover.materialcolor.onPrimaryContainer == "null" ? "" : "color: ${mcover.materialcolor.onPrimaryContainer};"} + ) + (box + :orientation "h" :space-evenly false :class "spacing-h-5" + :halign "end" + :class "sidebar-music-output txt-small" + :style " + ${mcover.materialcolor.primary == 'null' ? '' : 'background-color: ${mcover.materialcolor.primary};'} + ${mcover.materialcolor.onPrimary == 'null' ? '' : 'color: ${mcover.materialcolor.onPrimary};'} + " + (label + :class "icon-material sidebar-music-device" + :text "${volume.device == 'Headphones' ? '' : ''} " + :style {mcover.materialcolor.onPrimary == "null" ? "" : "color: ${mcover.materialcolor.onPrimary};"} + ) + (label + :text "${volume.device}" + :style {mcover.materialcolor.onPrimary == "null" ? "" : "color: ${mcover.materialcolor.onPrimary};"} + ) + ) + (button ; Open mixer + :halign "end" + :class "sidebar-music-output txt-small" + :style " + ${ANIM_ENTER[0]} + ${rev_mixerbtn ? '' : 'margin-right: -10rem;'} + " + :onclick "${EWW_CMD} update rev_mixer=${!rev_mixer}" + (box + :orientation "h" :space-evenly false + :class "spacing-h-5" + (label + :class "icon-material sidebar-music-device" + :text "tune " + ) + (label + :text "Mixer " + ) + (label + :class "icon-material sidebar-music-device txt-norm" + :text "chevron_right" + ) + ) + ) + ) + (box ; Title, play button + :space-evenly false + :orientation "h" + (scroll + :class "sidebar-music-title-scroll" + :hexpand true + :hscroll true :vscroll false + (box + :orientation "v" + :space-evenly false + :valign "center" + (label :xalign 0 + :class "sidebar-music-title txt-norm" + :style {mcover.materialcolor.onPrimaryContainer == "null" ? "" : "color: ${mcover.materialcolor.onPrimaryContainer};"} + :text "${strlength(mname.title) == 0 ? 'Music' : mname.title}" + ) + (label :xalign 0 + :class "sidebar-music-artist txt-small" + :style {mcover.materialcolor.onPrimaryContainer == "null" ? "" : "color: ${mcover.materialcolor.onPrimaryContainer};"} + :text "${mname.artist}" + ) + ) + ) + (eventbox + :valign "center" + :class "txt-hugeass sidebar-music-playbtn" + :onclick "playerctl play-pause" + :cursor "pointer" + (box + :style " + ${mcover.materialcolor.primary == 'null' ? '' : 'background-color: ${mcover.materialcolor.primary};'} + ${mcover.materialcolor.onPrimary == 'null' ? '' : 'color: ${mcover.materialcolor.onPrimary};'} + " + "${mplay == 'Playing' ? 'pause' : 'play_arrow'}" + ) + ) + ) + (box ; Slider and skip track buttons + :space-evenly false + :orientation "h" + (eventbox + :class "txt-larger sidebar-music-trackbtn" + :onclick "playerctl previous" + (box + :style " + ${mcover.materialcolor.onPrimaryContainer == 'null' ? '' : ('color: ' + mcover.materialcolor.onPrimaryContainer + ';')} + " + "skip_previous" + ) + ) + (overlay + :hexpand true + (box + :hexpand true + :valign "center" + :class "sidebar-music-progress" + :style " + background-image: + linear-gradient(to right, + ${mcover.materialcolor.onPrimaryContainer} ${music.position}%, + rgba(200, 200, 200, 0.6) ${music.position}%); + " + ) + (label + :class "sidebar-music-progress-btn txt-large" + :valign "center" + :xalign {music.position == '' ? 0 : (music.position / 100)} + :style " + ${mcover.materialcolor.onPrimaryContainer == 'null' ? '' : ('color: ' + mcover.materialcolor.onPrimaryContainer + ';')} + " + :text "●" + ) + ) + ; ; Below is the proper scale widget, but doesn't follow Material colors + ; (scale + ; :hexpand true + ; :class "sidebar-music-slider" + ; :style " + ; highlight { + ; color: red; + ; } + ; " + ; :value {music.position} + ; ; :onchange "playerctl position `bc <<< \"{} * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + ; ) + (eventbox + :class "txt-larger sidebar-music-trackbtn" + :onclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + :cursor "pointer" + (box + :style " + color: ${mcover.materialcolor.onPrimaryContainer}; + " + "skip_next" + ) + ) + ) + ) + ) + ) + ) + ) + (box + :vexpand true + :orientation "h" + :space-evenly false + :class "sidebar-waifu-scrollbg spacing-h-15" + (box + :space-evenly false :orientation "h" + (eventbox + :onscroll "scripts/scroll-waifu {} &" + (box + :orientation "v" + ; :height {SCROLL_MULTIPLIER_WAIFUTAGS * SCROLL_TOSHOW_WAIFUTAGS} + (scroll :vscroll false :hscroll false + (box + :class "spacing-v-5" + :orientation "v" + :valign "start" + :style " + ${ANIM_ENTER[1]} + margin-top: -${(SCROLL_MULTIPLIER_WAIFUTAGS * scroll_offset_waifu)}px; + margin-bottom: -${(arraylength(WAIFU_TAG_ID) - SCROLL_TOSHOW_WAIFUTAGS - scroll_offset_waifu) * SCROLL_MULTIPLIER_WAIFUTAGS}px; + " + (for id in WAIFU_TAG_ID + (button + :class "sidebar-waifu-tag" + :onclick "${EWW_CMD} update waifu=\"$(scripts/waifu-get.py --segs ${WAIFU_CATEGORIES_ARGS[id]})\" &" + (box + :space-evenly false :orientation "h" + ; (label + ; :class "icon-material txt-smallie" + ; :text {WAIFU_CATEGORIES_ICONS[id]} + ; ) + (label + :class "txt-smallie" + :text {WAIFU_CATEGORIES[id]} + ) + ) + ) + ) + ) + ) + ) + ) + ) + (scroll + :hexpand true + :hscroll true :vscroll false + (box + :class "spacing-v-15" + :orientation "v" :space-evenly false + (box :orientation "h" :class "spacing-h-5" + (eventbox + :class "sidebar-waifu-actionbtn" + :cursor "pointer" + :onclick `mkdir -p ~/Pictures/Waifus/ && cp ${waifu.path} ~/Pictures/Waifus/eww_"$(date '+%Y_%m_%_d..%H.%M.%S')"${waifu.ext} && notify-send 'Saved pic to ~/Pictures/Waifus' eww_"$(date '+%Y_%m_%_d..%H.%M.%S')"${waifu.ext} -a 'eww' &` + (box + (box + :halign "center" + :space-evenly false :class "spacing-h-5" + (label + :class "icon-material txt-large" + :text "file_copy" + ) + (label + :class "txt-norm" + :text "Hoard" + ) + ) + ) + ) + (eventbox + :class "sidebar-waifu-actionbtn" + :cursor "pointer" + :onclick `xdg-open ${waifu.sauce} &` + (box + (box + :halign "center" + :space-evenly false :class "spacing-h-5" + (label + :class "icon-material txt-large" + :text "location_on" + ) + (label + :class "txt-norm" + :text "Sauce" + ) + ) + ) + ) + ) + (eventbox + :vexpand true + :onclick "${EWW_CMD} update show_waifu=${!show_waifu} &" + (overlay + :vexpand true + (box + :class "sidebar-waifu-pic-bg" + ) + (box + :class "sidebar-waifu-pic" + :style " + background-image: url('${waifu.path}'); + " + ) + (revealer + :reveal {!show_waifu} + :duration "50ms" + :transition "crossfade" + (box + :class "sidebar-waifu-pic-cover" + (box + :valign "center" + :orientation "v" + :space-evenly false + (label :valign "center" :class "icon-material txt-badonkers" :text "visibility_off") + (label :valign "center" :class "txt-norm" :text "Click to reveal") + ) + ) + ) + (revealer + :valign "end" + :reveal {rev_waifustatus} + :duration "100ms" + :transition "slidedown" + (label + :valign "end" + :class "txt-smaller sidebar-waifu-status" + :text {waifu_status} + ) + ) + ) + ) + ) + ) + ) + (eventbox ; Quote + ; :vexpand true + :onscroll "scripts/scroll-quote {} &" + :onclick "${EWW_CMD} update quote_index=${(quote_index + 1 + arraylength(quote_content)) % arraylength(quote_content)} &" + (box + ; :vexpand true + :orientation "v" :space-evenly false + :class "sidebar-quote" + (box + :space-evenly false + (label :xalign 0 + :hexpand true + :angle 180 + :class "icon-material txt-hugeass" + :text "format_quote" + ) + (label :xalign 1 + :class "txt-small sidebar-section-title-text" + :text "${quote_index+1}/${arraylength(quote_content)}" + ) + ) + (label :xalign 0 :yalign 1 + :vexpand true + :class "txt-small" + :wrap true + :text {quote_content[quote_index]} + ) + (label :xalign 0.9 :yalign 0 + :vexpand true + :class "txt-small" + :wrap true + :text {quote_author[quote_index]} + ) + ) + ) + ) + ) + (box + :space-evenly false :orientation "v" + :class "spacing-v-15" + (box ; Volume mixer header + :class "sidebar-mixer-header spacing-h-10" + :space-evenly false + (box + (eventbox + :cursor "pointer" + :class "sidebar-mixer-header-btn" + :onclick "${EWW_CMD} update rev_mixer=${!rev_mixer} &" + (box + (label + :class "icon-material txt-hugeass" + :text "arrow_back" + ) + ) + ) + ) + (label :xalign 0 + :hexpand true + :class "txt-hugeass" + :text "Volume mixer" + ) + ; Instructions + (label :xalign 1 + :hexpand true + :class "txt-smaller" + :text "scroll to change volume" + ) + ) + (scroll ; Volume mixer + :hscroll false :vscroll true + :vexpand true + (box + :valign "start" + :orientation "V" + :space-evenly false :spacing 10 + (for app in audiojson + (box + :class "sidebar-mixer-app spacing-h-10" + :space-evenly false :orientation "h" + (image + :class "sidebar-mixer-app-icon" + :valign "start" + :path {app.icon} + :image-width 30 + :image-height 30 + :tooltip {app.name} + ) + (box + :orientation "v" + :hexpand true + :spacing 10 + (for client in {app["clients"]} + (eventbox + :onscroll "pactl set-sink-input-volume ${client.serial} $(echo {} | sed -e \"s/up/+5/g\" -e \"s/down/-5/g\")%" + :onrightclick "pactl set-sink-input-volume ${client.serial} 100%" + :onclick "pactl set-sink-input-volume ${client.serial} 0%" + (box + :hexpand true + :space-evenly false + :orientation "h" + :class "sidebar-mixer-app-serial" + (box + :hexpand true + :orientation "v" + ; :space-evenly false + :class "sidebar-mixer-app-num spacing-v-5 txt-norm" + (scroll :hscroll true :vscroll false + (label + :xalign 0 :hexpand true + :wrap true + :text "${client.title}" + ) + ) + ) + (box + :style "margin: 0px 10px;" + (circular-progress + :value {client.volume <= 100 ? client.volume : 100} + :start-at 75 :thickness 3 + :width 37 :height 37 + :class "sidebar-mixer-app-circle" + (label + :class "sidebar-mixer-app-incircle" + :text "${client.volume}" + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (eventbox + :onclick "scripts/toggle-sideleft.sh &" + :onscroll "echo $(echo {} | sed -e 's/down/-U 3/g' -e 's/up/-A 3/g' | xargs light) && scripts/brightness osd &" + :onmiddleclick "playerctl play-pause" + :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + (box :class {BAR_HEIGHT >= 2 ? '' : 'bar-bottom-height'}) + ) + ) + ) +) + +(defwindow sideleft + :monitor 0 + :stacking "fg" + :namespace "eww" + :geometry (geometry + :anchor "top left" + :height "100%" + ) + (sideleft_widget) +) \ No newline at end of file diff --git a/m3ww/.config/eww/windows/sideright.yuck b/m3ww/.config/eww/windows/sideright.yuck new file mode 100755 index 000000000..3a5cf32b4 --- /dev/null +++ b/m3ww/.config/eww/windows/sideright.yuck @@ -0,0 +1,424 @@ +(defwidget sideright_widget [] + (eventbox + :onhoverlost "scripts/toggle-sideright.sh --close &" + (box + :orientation "v" :space-evenly false + (eventbox + :onclick "scripts/toggle-sideright.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 &" + :onmiddleclick "playerctl play-pause" + :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + (box :class {BAR_HEIGHT >= 2 ? 'bar-height' : ''}) + ) + (box + :vexpand true + :class "sidebar-window ${open_sideright ? 'anim-enter' : 'anim-exit'} ${open_sideright ? '' : 'sidebar-hide-right'}" + (box + :vexpand true + :class "spacing-v-15" + :orientation "v" :space-evenly false + (box + :class "spacing-v-5" + :orientation "v" :space-evenly false + (box + :class "spacing-h-5" + :orientation "h" + (box + (eventbox ; Wifi + :class "sidebar-toggle${net.essid == 'lo' ? '' : '-active'}" + :onclick "scripts/net toggle &" + :cursor "pointer" + :onrightclick "XDG_CURRENT_DESKTOP='gnome' gnome-control-center wifi &" + (box + :class "spacing-h-5" + :space-evenly false :orientation "h" + (label + :class "icon-material txt-norm" + :text {WIFI_ICONS[net.level]} + ) + (label :xalign 0 + :class "txt-txt-norm" + :hexpand true + :text "Internet" + ) + (label + :class "icon-material txt-norm" + :text "chevron_right" + ) + ) + ) + ) + (box + (eventbox ; Bluetooth + :class "sidebar-toggle${bluetooth.text == 'Bluetooth off' ? '' : '-active'}" + :onclick "scripts/bluetooth toggle &" + :cursor "pointer" + :onrightclick "blueberry &" + (box + :class "spacing-h-5" + :space-evenly false :orientation "h" + (label + :class "icon-material txt-norm" + :text {bluetooth.icon} + ) + (label :xalign 0 + :class "txt-txt-norm" + :hexpand true + :text "Bluetooth" + ) + (label + :class "icon-material txt-norm" + :text "chevron_right" + ) + ) + ) + ) + (box + (eventbox + :class "sidebar-toggle${hyprjson.nightlight ? '-active' : ''}" + :onclick "scripts/toggle-nightlight.sh &" + :cursor "pointer" + (box + :space-evenly false :orientation "h":class "spacing-h-5" + (label + :class "icon-material txt-norm" + :text {hyprjson.nightlight ? "Nightlight" : ""} + ) + (label :xalign 0 + :class "txt-txt-norm" + :hexpand true + :text "Night light" + ) + ) + ) + ) + ) + (box + :class "spacing-h-5" + :orientation "h" + (box + (eventbox ; Mouse raw input + :class "sidebar-toggle${hyprjson.force_no_accel == 1 ? '-active' : ''}" + :onclick "hyprctl keyword input:force_no_accel ${1 - hyprjson.force_no_accel} &" + :cursor "pointer" + (box + :space-evenly false :orientation "h" :class "spacing-h-5" + (label + :class "icon-material txt-norm" + :text "arrow_selector_tool" + ) + (label :xalign 0 + :class "txt-txt-norm" + :hexpand true + :text "Raw input" + ) + ) + ) + ) + (box + (eventbox ; Disable touchpad while typing + :class "sidebar-toggle${hyprjson.touchpad_disable_while_typing == 1 ? '-active' : ''}" + :onclick "hyprctl keyword input:touchpad:disable_while_typing ${1 - hyprjson.touchpad_disable_while_typing} &" + :cursor "pointer" + (box + :space-evenly false :orientation "h" :class "spacing-h-5" + (label + :class "icon-material txt-norm" + :text "keyboard" + ) + (label :xalign 0 + :class "txt-txt-norm" + :hexpand true + :text "→ No touchpad" + ) + ) + ) + ) + (box + (eventbox + :class "sidebar-toggle" + :onclick "~/.local/bin/record-script.sh &" + :cursor "pointer" + (box + :space-evenly false :orientation "h" :class "spacing-h-5" + (label + :class "icon-material txt-norm" + :text "screen_record" + ) + (label :xalign 0 + :class "txt-txt-norm" + :hexpand true + :text "Record" + ) + ) + ) + ) + ) + ) + (box + :orientation "h" :spacing 10 + (button + :class "sidebar-action" + :onclick "scripts/toggle-sideright.sh --close && XDG_CURRENT_DESKTOP='gnome' gnome-control-center &" + (label + :class "icon-material txt-norm" + :text "settings" + ) + ) + (button + :class "sidebar-action" + :onclick "scripts/toggle-sideright.sh --close && gtklock &" + (label + :class "icon-material txt-norm" + :text "lock" + ) + ) + (button + :class "sidebar-action" + :onclick "scripts/toggle-sideright.sh --close && systemctl suspend &" + (label + :class "icon-material txt-norm" + :text "bedtime" + ) + ) + (button + :class "sidebar-action" + :onclick "scripts/toggle-sideright.sh --close && ${EWW_CMD} open powermenu && hyprctl dispatch submap powermenu" + (label + :class "icon-material txt-norm" + :text "power_settings_new" + ) + ) + ) + (box + (revealer + :reveal {arraylength(notifications) - notification_cleared > 0} + :duration "180ms" + :transition "slidedown" + (box + :class "sidebar-notif-actions" + :space-evenly false + (label + :class "sidebar-notif-heading txt-norm" + :text "Notifications" + ) + (eventbox + :hexpand true + :onclick "${EWW_CMD} update notification_cleared=${arraylength(notifications)} &" + :class "sidebar-notif-action" + (box + :halign "end" + :space-evenly false :orientation "h" + (label + :class "icon-material txt-norm" + :text "clear_all" + ) + (label :xalign 0 + :class "txt-txt-norm" + :hexpand true + :text "Clear" + ) + ) + ) + ) + ) + ) + (scroll :vscroll true :hscroll false :vexpand true + (box :orientation "v" :space-evenly false + (box + :orientation "v" :space-evenly false + (for notif in notifications + (revealer + :reveal {notif.id > notification_cleared && notif.id <= notification_revcnt} + :transition "slidedown" + :duration "100ms" + (box + :class "sidebar-notif-common sidebar-notif${ + arraylength(notifications) - notification_cleared == 1 ? '' : ( + notif.id == arraylength(notifications) ? ( + notifications[1]['app_name'] == notif.app_name && notifications[1]['urgency'] == notif.urgency ? '-top' : '' + ) : ( + notif.id == 1 ? ( + notifications[arraylength(notifications) - 2]['app_name'] == notif.app_name && notifications[arraylength(notifications) - 2]['urgency'] == notif.urgency ? '-bottom' : '' + ) : ( + notifications[arraylength(notifications) - notif.id + 1]['app_name'] == notif.app_name && notifications[arraylength(notifications) - notif.id + 1]['urgency'] == notif.urgency && notif.id != notification_cleared + 1? ( + notifications[arraylength(notifications) - notif.id - 1]['app_name'] == notif.app_name && notifications[arraylength(notifications) - notif.id - 1]['urgency'] == notif.urgency ? '-middle' : '-top') : ( + notifications[arraylength(notifications) - notif.id - 1]['app_name'] == notif.app_name && notifications[arraylength(notifications) - notif.id - 1]['urgency'] == notif.urgency ? '-bottom' : '' + ) + ) + ) + ) + } ${notif.urgency == 2 ? 'sidebar-notif-urgent' : 'sidebar-notif-normal'}" + :orientation "h" + (box :orientation "v" :space-evenly false + (box :orientation "h" :space-evenly false + (label :xalign 0 + :wrap true + :class "txt-norm txt-bold" + :text "${notif.summary}" + ) + (box :hexpand true) + (label :xalign 0 + :wrap true + :class "txt-small" + :text "${notif.app_name} • ${notif.time}" + :text "${arraylength(notifications) == 1 || + notif.id == arraylength(notifications) || + notifications[arraylength(notifications) - notif.id - 1]['app_name'] != notif.app_name || notifications[arraylength(notifications) - notif.id - 1]['urgency'] != notif.urgency ? + '${notif.app_name} • ${notif.time}' : notif.time + }" + ) + ) + (label :xalign 0 + :wrap true + :class "txt-smaller" + :text {notif.body} + ) + ) + ) + ) + ) + ) + (revealer + :vexpand true + :reveal {arraylength(notifications) - notification_cleared == 0} + :duration "180ms" + :transition "slidedown" + (box + :halign "center" :valign "center" + :space-evenly false :orientation "v" + (label + :class "icon-material txt-badonkers txt" + :text "notifications" + ) + (label + :class "txt txt-norm" + :text "All caught up!" + ) + ) + ) + ) + ) + (box + :orientation "v" :space-evenly false + :class "sidebar-section" + (box + :space-evenly false :orientation "v" + (eventbox + :onscroll "scripts/scrollmonth {} &" + :onclick "${EWW_CMD} update monthshift=0 &" + (box :space-evenly false :orientation "h" + (label :xalign 0 + :class "sidebar-section-heading txt-large" + :text {calendartitle} + ) + (box :hexpand true) + (label :xalign 0 + :class "sidebar-section-heading txt-large" + :text "To-do list" + ) + ) + ) + (box ; Calendar + :orientation "v" + :space-evenly false + (box + :class "sidebar-content" + :orientation "h" :space-evenly false :spacing 8 + (eventbox + :onscroll "scripts/scrollmonth {} &" + (box + :orientation "v" + :space-evenly false + (box + (for day in weekdays + (box + :class "sidebar-calendar-btn day${day.today}" + (label + :class "sidebar-calendar-txt txt-smallie" + :text "${day.day}" + ) + ) + ) + ) + (for week in calendar + (box + (for day in week + (button + :class "sidebar-calendar-btn day${day.today}" + (label + :class "sidebar-calendar-txt txt-smallie" + :text "${day.day}" + ) + ) + ) + ) + ) + ) + ) + (box + :class "sidebar-divider" + ) + (box + :orientation "v" + :space-evenly false + :hexpand true + :class "sidebar-todo-box" + (scroll + :hscroll false :vscroll true + :vexpand true + (box + :orientation "v" + :space-evenly false + (for task in todolist + (box + :orientation "h" + :space-evenly false + :class "sidebar-todo-item" + (label :xalign 0 + :hexpand true + :class "txt-small" + :text {task} + :wrap true + ) + (button + :valign "center" + :class "sidebar-todo-btn" + :onclick "scripts/todo del '${task}' && ${EWW_CMD} update todolist=\"$(cat json/todo.json | gojq -c -M)\"" + (label + :class "icon-material txt-norm" + :text "Remove" + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (eventbox + :onclick "scripts/toggle-sideright.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 &" + :onmiddleclick "playerctl play-pause" + :onrightclick "playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + (box :class {BAR_HEIGHT >= 2 ? '' : 'bar-bottom-height'}) + ) + ) + ) +) + +(defwindow sideright + :monitor 0 + :stacking "fg" + :namespace "eww" + :geometry (geometry + :anchor "top right" + :height "100%" + ) + (sideright_widget) +) \ No newline at end of file diff --git a/m3ww/.config/eww/windows/visualizer.yuck b/m3ww/.config/eww/windows/visualizer.yuck new file mode 100755 index 000000000..6062049c5 --- /dev/null +++ b/m3ww/.config/eww/windows/visualizer.yuck @@ -0,0 +1,33 @@ +(defwidget visualizer_widget [] + (box + :class "visualizer-bg visualizer-height ${open_visualizer ? '' : 'visualizer-hide'}" + (overlay + :hexpand true + (box + :class "visualizer-columns" + (for cavacol in cavajson + (box + :class "visualizer-cavacol" + :valign "end" + :style " + min-height: ${round(cavacol[0] / 10, 0)}px; + background-color: ${cavacol[0] == 0 ? 'transparent' : 'mix(${(mcover.color.colors.color3 == 'null' ? accent : mcover.color.colors.color3)}, rgba(220, 220, 220, 0.1), 0.2)'}; + " + ) + ) + ) + ) + ) +) + +(defwindow visualizer + :monitor 0 + :stacking "bg" + :namespace "eww" + :exclusive true + :geometry (geometry + :anchor "bottom center" + :width "100%" + ) + (visualizer_widget) +) \ No newline at end of file diff --git a/m3ww/.config/fish/completions/fisher.fish b/m3ww/.config/fish/completions/fisher.fish new file mode 100755 index 000000000..6d23ce490 --- /dev/null +++ b/m3ww/.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/m3ww/.config/fish/config.fish b/m3ww/.config/fish/config.fish new file mode 100755 index 000000000..bfa2bf74c --- /dev/null +++ b/m3ww/.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/m3ww/.config/fish/fish_plugins b/m3ww/.config/fish/fish_plugins new file mode 100755 index 000000000..594dfc033 --- /dev/null +++ b/m3ww/.config/fish/fish_plugins @@ -0,0 +1 @@ +jorgebucaran/fisher diff --git a/m3ww/.config/fish/fish_variables b/m3ww/.config/fish/fish_variables new file mode 100755 index 000000000..479710902 --- /dev/null +++ b/m3ww/.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/m3ww/.config/fish/functions/fisher.fish b/m3ww/.config/fish/functions/fisher.fish new file mode 100755 index 000000000..c0a86fa4e --- /dev/null +++ b/m3ww/.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/m3ww/.config/foot/foot.ini b/m3ww/.config/foot/foot.ini new file mode 100755 index 000000000..a685302bf --- /dev/null +++ b/m3ww/.config/foot/foot.ini @@ -0,0 +1,156 @@ +# -*- 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=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=25x25 # optionally append 'center' +# resize-delay-ms=100 + +# notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body} + +bold-text-in-bright=no +# 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=beam +# color=111111 dcdccc +color=282a36 f8f8f2 +# blink=no +beam-thickness=1.5 +# underline-thickness= + +[mouse] +# hide-when-typing=no +# alternate-scroll-mode=yes + +[colors] +alpha=0.7 +background=1c1b1f +foreground=e5deff +regular0=1c1b1f +regular1=ffb4a9 +regular2=5c53a7 +regular3=ecb9cf +regular4=e5deff +regular5=e5dff9 +regular6=c8bfff +regular7=e5e1e6 +bright0=1c1b1f +bright1=ffb4a9 +bright2=5c53a7 +bright3=ecb9cf +bright4=e5deff +bright5=e5dff9 +bright6=c8bfff +bright7=e5e1e6 + +[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=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/m3ww/.config/fuzzel/fuzzel.ini b/m3ww/.config/fuzzel/fuzzel.ini new file mode 100755 index 000000000..0461cf0c8 --- /dev/null +++ b/m3ww/.config/fuzzel/fuzzel.ini @@ -0,0 +1,21 @@ +font=Lexend +terminal=foot -e +prompt=">> " +layer=overlay + +[colors] +background=1c1b1fff +text=e5e1e6ff +selection=47464fff +selection-text=c9c5d0ff +border=47464fff +match=c8bfffff +selection-match=c8bfffff + + +[border] +radius=17 +width=2 + +[dmenu] +exit-immediately-if-empty=yes diff --git a/m3ww/.config/gtk-3.0/gtk.css b/m3ww/.config/gtk-3.0/gtk.css new file mode 100644 index 000000000..5e10ad68c --- /dev/null +++ b/m3ww/.config/gtk-3.0/gtk.css @@ -0,0 +1,6 @@ +VteTerminal, +TerminalScreen, +vte-terminal { + padding: 30px 30px 30px 30px; + -VteTerminal-inner-border: 20px 20px 20px 20px; +} \ No newline at end of file diff --git a/m3ww/.config/gtk-4.0/gtk-dark.css b/m3ww/.config/gtk-4.0/gtk-dark.css new file mode 100755 index 000000000..d5d478f65 --- /dev/null +++ b/m3ww/.config/gtk-4.0/gtk-dark.css @@ -0,0 +1,6951 @@ +/* GTK NAMED COLORS -- USE RESPONSIBLY! */ + +/* widget text/foreground color */ +@define-color theme_fg_color #c0caf5; +/* text color for entries, views and content in general */ +@define-color theme_text_color #c0caf5; +/* widget base background color */ +@define-color theme_bg_color #1a1b26; +/* text widgets and the like base background color */ +@define-color theme_base_color #1a1b26; +/* base background color of selections */ +@define-color theme_selected_bg_color #a9b1d6; +/* text/foreground color of selections */ +@define-color theme_selected_fg_color rgba(0, 0, 0, 0.87); +/* base background color of insensitive widgets */ +@define-color insensitive_bg_color #1a1b26; +/* text foreground color of insensitive widgets */ +@define-color insensitive_fg_color rgba(192, 202, 245, 0.5); +/* insensitive text widgets and the like base background color */ +@define-color insensitive_base_color #24283b; +/* widget text/foreground color on backdrop windows */ +@define-color theme_unfocused_fg_color #c0caf5; +/* text color for entries, views and content in general on backdrop windows */ +@define-color theme_unfocused_text_color #c0caf5; +/* widget base background color on backdrop windows */ +@define-color theme_unfocused_bg_color #1a1b26; +/* text widgets and the like base background color on backdrop windows */ +@define-color theme_unfocused_base_color #1a1b26; +/* base background color of selections on backdrop windows */ +@define-color theme_unfocused_selected_bg_color #a9b1d6; +/* text/foreground color of selections on backdrop windows */ +@define-color theme_unfocused_selected_fg_color rgba(0, 0, 0, 0.87); +/* insensitive color on backdrop windows */ +@define-color unfocused_insensitive_color rgba(192, 202, 245, 0.5); +/* widgets main borders color */ +@define-color borders rgba(192, 202, 245, 0.12); +/* widgets main borders color on backdrop windows */ +@define-color unfocused_borders rgba(192, 202, 245, 0.12); +/* these are pretty self explicative */ +@define-color warning_color #FDD633; +@define-color error_color #F28B82; +@define-color success_color #81C995; +/* these colors are exported for the window manager and shouldn't be used in applications, +read if you used those and something break with a version upgrade you're on your own... */ +@define-color wm_title #c0caf5; +@define-color wm_unfocused_title rgba(192, 202, 245, 0.7); +@define-color wm_highlight rgba(192, 202, 245, 0.1); +@define-color wm_bg #1a1b26; +@define-color wm_unfocused_bg #1a1b26; +@define-color wm_button_close_icon #1a1b26; +@define-color wm_button_close_hover_bg #a9b1d6; +@define-color wm_button_close_active_bg #c7c7c7; +/* FIXME this is really an API */ +@define-color content_view_bg #1a1b26; +@define-color placeholder_text_color silver; +/* Very contrasty background for text views (@theme_text_color foreground) */ +@define-color text_view_bg #1d1d1d; +@define-color budgie_tasklist_indicator_color #c0caf5; +@define-color budgie_tasklist_indicator_color_active #c0caf5; +@define-color budgie_tasklist_indicator_color_active_window #999999; +@define-color budgie_tasklist_indicator_color_attention #FDD633; +@define-color STRAWBERRY_100 #FF9262; +@define-color STRAWBERRY_300 #FF793E; +@define-color STRAWBERRY_500 #F15D22; +@define-color STRAWBERRY_700 #CF3B00; +@define-color STRAWBERRY_900 #AC1800; +@define-color ORANGE_100 #FFDB91; +@define-color ORANGE_300 #FFCA40; +@define-color ORANGE_500 #FAA41A; +@define-color ORANGE_700 #DE8800; +@define-color ORANGE_900 #C26C00; +@define-color BANANA_100 #FFFFA8; +@define-color BANANA_300 #FFFA7D; +@define-color BANANA_500 #FFCE51; +@define-color BANANA_700 #D1A023; +@define-color BANANA_900 #A27100; +@define-color LIME_100 #A2F3BE; +@define-color LIME_300 #8ADBA6; +@define-color LIME_500 #73C48F; +@define-color LIME_700 #479863; +@define-color LIME_900 #1C6D38; +@define-color BLUEBERRY_100 #94A6FF; +@define-color BLUEBERRY_300 #6A7CE0; +@define-color BLUEBERRY_500 #3F51B5; +@define-color BLUEBERRY_700 #213397; +@define-color BLUEBERRY_900 #031579; +@define-color GRAPE_100 #D25DE6; +@define-color GRAPE_300 #B84ACB; +@define-color GRAPE_500 #9C27B0; +@define-color GRAPE_700 #830E97; +@define-color GRAPE_900 #6A007E; +@define-color COCOA_100 #9F9792; +@define-color COCOA_300 #7B736E; +@define-color COCOA_500 #574F4A; +@define-color COCOA_700 #463E39; +@define-color COCOA_900 #342C27; +@define-color SILVER_100 #EEE; +@define-color SILVER_300 #CCC; +@define-color SILVER_500 #AAA; +@define-color SILVER_700 #888; +@define-color SILVER_900 #666; +@define-color SLATE_100 #888; +@define-color SLATE_300 #666; +@define-color SLATE_500 #444; +@define-color SLATE_700 #222; +@define-color SLATE_900 #111; +@define-color BLACK_100 #474341; +@define-color BLACK_300 #403C3A; +@define-color BLACK_500 #393634; +@define-color BLACK_700 #33302F; +@define-color BLACK_900 #2B2928; + +/* GTK LIBADWAITA NAMED COLORS -- USE RESPONSIBLY! */ +@define-color accent_bg_color #a9b1d6; +@define-color accent_fg_color rgba(0, 0, 0, 0.87); +@define-color accent_color #a9b1d6; +@define-color destructive_bg_color #F28B82; +@define-color destructive_fg_color rgba(0, 0, 0, 0.87); +@define-color destructive_color #F28B82; +@define-color success_bg_color #81C995; +@define-color success_fg_color rgba(0, 0, 0, 0.87); +@define-color success_color #81C995; +@define-color warning_bg_color #FDD633; +@define-color warning_fg_color rgba(0, 0, 0, 0.87); +@define-color warning_color #FDD633; +@define-color error_bg_color #F28B82; +@define-color error_fg_color rgba(0, 0, 0, 0.87); +@define-color error_color #F28B82; +@define-color window_bg_color #1a1b26; +@define-color window_fg_color #c0caf5; +@define-color view_bg_color #1a1b26; +@define-color view_fg_color #c0caf5; +@define-color headerbar_bg_color #1a1b26; +@define-color headerbar_fg_color #c0caf5; +@define-color headerbar_border_color rgba(192, 202, 245, 0.12); +@define-color headerbar_backdrop_color @window_bg_color; +@define-color headerbar_shade_color rgba(0, 0, 0, 0.36); +@define-color card_bg_color #1a1b26; +@define-color card_fg_color #c0caf5; +@define-color card_shade_color rgba(0, 0, 0, 0.36); +@define-color dialog_bg_color #1a1b26; +@define-color dialog_fg_color #c0caf5; +@define-color popover_bg_color #1a1b26; +@define-color popover_fg_color #c0caf5; +@define-color thumbnail_bg_color #1a1b26; +@define-color thumbnail_fg_color #c0caf5; +@define-color shade_color rgba(0, 0, 0, 0.36); +@define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); + +/*************** + * Base States * + ***************/ +.background { + background-color: #1a1b26; + color: #c0caf5; +} + +dnd { + color: #c0caf5; +} + +.normal-icons { + -gtk-icon-size: 16px; +} + +.large-icons { + -gtk-icon-size: 32px; +} + +spinner:disabled, +arrow:disabled, +scrollbar:disabled, +check:disabled, +radio:disabled, +treeview.expander:disabled { + -gtk-icon-filter: opacity(0.5); +} + +iconview, +.view { + color: #c0caf5; +} + +iconview:disabled, +.view:disabled { + color: rgba(192, 202, 245, 0.5); +} + +textview text { + background-color: #1a1b26; +} + +textview border { + background-color: #24283b; + color: rgba(192, 202, 245, 0.7); +} + +iconview:hover, +iconview:selected { + border-radius: 3px; +} + +rubberband, +.content-view rubberband, +.content-view columnview.view > rubberband, +.content-view treeview.view > rubberband, +.content-view .rubberband, +columnview.view > rubberband, +treeview.view > rubberband, +gridview > rubberband, +flowbox > rubberband { + border: 1px solid #a9b1d6; + background-color: rgba(169, 177, 214, 0.3); +} + +flowbox > flowboxchild { + padding: 4px; + border-radius: 6px; +} + +.content-view .tile:selected { + background-color: transparent; +} + +gridview > child { + padding: 3px; +} + +gridview > child:selected { + outline-color: alpha(currentColor, 0.06); +} + +gridview > child box { + border-spacing: 8px; + margin: 12px; +} + +coverflow cover { + color: #c0caf5; + background-color: #1a1b26; + border: 1px solid black; +} + +label.separator { + color: rgba(192, 202, 245, 0.7); +} + +label:disabled { + color: rgba(192, 202, 245, 0.5); + opacity: 1; + filter: none; +} + +headerbar label:disabled, +tab label:disabled, +button label:disabled { + color: inherit; +} + +label.osd { + border-radius: 6px; + background-color: rgba(25, 25, 25, 0.9); + color: #c0caf5; +} + +label.search-information { + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); +} + +.dim-label, +row label.subtitle { + color: rgba(192, 202, 245, 0.7); + opacity: 1; +} + +window.assistant .sidebar { + padding: 4px 0; +} + +window.assistant .sidebar label { + min-height: 36px; + padding: 0 12px; + color: rgba(192, 202, 245, 0.5); + font-weight: 500; +} + +window.assistant .sidebar label.highlight { + color: #c0caf5; +} + +.osd popover.background > arrow, +.osd popover.background > contents, +popover.background.touch-selection > arrow, +popover.background.touch-selection > contents, +popover.background.magnifier > arrow, +popover.background.magnifier > contents, +.osd { + color: #c0caf5; + background-clip: padding-box; + border-radius: 6px; + border: none; +} + +.osd { + padding: 6px; + margin: 6px; + box-shadow: 0 2px 2.4px -1px rgba(0, 0, 0, 0.2), + 0 4px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 6px 0 rgba(0, 0, 0, 0.12); +} + +.osd.circular { + border-radius: 9999px; +} + +/********************* + * Spinner Animation * + *********************/ +@keyframes spin { + to { + transform: rotate(1turn); + } +} + +spinner { + background: none; + opacity: 0; + -gtk-icon-source: -gtk-icontheme('process-working-symbolic'); +} + +spinner:checked { + opacity: 1; + animation: spin 1s linear infinite; +} + +spinner:checked:disabled { + opacity: 0.5; +} + +.large-title { + font-weight: 300; + font-size: 24pt; +} + +.title-1 { + font-weight: 800; + font-size: 20pt; +} + +.title-2 { + font-weight: 800; + font-size: 15pt; +} + +.title-3 { + font-weight: 700; + font-size: 15pt; +} + +.title-4 { + font-weight: 700; + font-size: 13pt; +} + +.heading { + font-weight: 700; + font-size: 11pt; +} + +.body { + font-weight: 400; + font-size: 11pt; +} + +.caption { + font-weight: 400; + font-size: 9pt; +} + +.caption-heading { + font-weight: 700; + font-size: 9pt; +} + +/**************** + * Text Entries * + ****************/ +entry { + min-height: 36px; + padding: 0 8px; + border-spacing: 6px; + border-radius: 6px; + caret-color: currentColor; + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), + box-shadow 300ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: inset 0 0 0 2px transparent; + background-color: rgba(192, 202, 245, 0.08); + color: #c0caf5; + outline: none; +} + +entry:focus-within { + background-color: rgba(192, 202, 245, 0.08); + box-shadow: inset 0 0 0 2px #a9b1d6; + outline: none; +} + +entry:drop(active) { + background-color: alpha(currentColor, 0.08); + box-shadow: inset 0 0 0 2px alpha(currentColor, 0.08); + outline: none; +} + +entry:disabled { + box-shadow: inset 0 0 0 2px transparent; + background-color: rgba(192, 202, 245, 0.04); + color: rgba(192, 202, 245, 0.5); + outline: none; + opacity: 1; + filter: none; +} + +entry.search { + border-radius: 6px; +} + +entry.flat { + min-height: 0; + padding: 2px; + border-radius: 0; + background-color: transparent; +} + +entry image { + color: rgba(192, 202, 245, 0.7); +} + +entry image:hover, +entry image:active { + color: #c0caf5; +} + +entry image:disabled { + color: rgba(192, 202, 245, 0.5); +} + +entry image.left { + margin-left: 2px; + margin-right: 6px; +} + +entry image.right { + margin-left: 6px; + margin-right: 2px; +} + +entry undershoot.left { + background-color: transparent; + background-image: linear-gradient( + to top, + transparent 50%, + rgba(192, 202, 245, 0.3) 50% + ); + padding-left: 1px; + background-size: 1px 12px; + background-repeat: repeat-y; + background-origin: content-box; + background-position: left top; + margin: 0 4px; + margin: 4px 0; +} + +entry undershoot.right { + background-color: transparent; + background-image: linear-gradient( + to top, + transparent 50%, + rgba(192, 202, 245, 0.3) 50% + ); + padding-right: 1px; + background-size: 1px 12px; + background-repeat: repeat-y; + background-origin: content-box; + background-position: right top; + margin: 0 4px; + margin: 4px 0; +} + +entry.error { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), + box-shadow 300ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: inset 0 0 0 2px transparent; + background-color: rgba(192, 202, 245, 0.08); + color: #c0caf5; + outline: none; +} + +entry.error:focus-within { + background-color: rgba(192, 202, 245, 0.08); + box-shadow: inset 0 0 0 2px #f28b82; + outline: none; +} + +entry.error:disabled { + box-shadow: inset 0 0 0 2px transparent; + background-color: rgba(192, 202, 245, 0.04); + color: rgba(192, 202, 245, 0.5); + outline: none; + opacity: 1; + filter: none; +} + +entry.warning { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), + box-shadow 300ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: inset 0 0 0 2px transparent; + background-color: rgba(192, 202, 245, 0.08); + color: #c0caf5; + outline: none; +} + +entry.warning:focus-within { + background-color: rgba(192, 202, 245, 0.08); + box-shadow: inset 0 0 0 2px #fdd633; + outline: none; +} + +entry.warning:disabled { + box-shadow: inset 0 0 0 2px transparent; + background-color: rgba(192, 202, 245, 0.04); + color: rgba(192, 202, 245, 0.5); + outline: none; + opacity: 1; + filter: none; +} + +entry > progress, +entry progress > trough > progress { + margin: 2px -8px; + border-bottom: 2px solid #a9b1d6; + background-color: transparent; +} + +treeview entry.flat, +treeview entry { + background-color: #1a1b26; +} + +treeview entry.flat, +treeview entry.flat:focus-within, +treeview entry, +treeview entry:focus-within { + border-image: none; + box-shadow: none; +} + +.entry-tag { + margin: 2px; + border-radius: 9999px; + box-shadow: none; + background-color: rgba(192, 202, 245, 0.12); + color: #c0caf5; +} + +.entry-tag:hover { + background-image: image(alpha(currentColor, 0.08)); +} + +:dir(ltr) .entry-tag { + margin-left: 4px; + margin-right: 0; + padding-left: 12px; + padding-right: 8px; +} + +:dir(rtl) .entry-tag { + margin-left: 0; + margin-right: 4px; + padding-left: 8px; + padding-right: 12px; +} + +.entry-tag.button { + box-shadow: none; + background-color: transparent; +} + +.entry-tag.button:not(:hover):not(:active) { + color: rgba(192, 202, 245, 0.7); +} + +editablelabel > stack > text { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), + box-shadow 300ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: inset 0 0 0 2px transparent; + background-color: rgba(192, 202, 245, 0.08); + color: #c0caf5; + outline: none; +} + +/*********** + * Buttons * + ***********/ +@keyframes needs-attention { + from { + background-image: radial-gradient( + farthest-side, + #a9b1d6 0%, + rgba(169, 177, 214, 0) 0% + ); + } + to { + background-image: radial-gradient( + farthest-side, + #a9b1d6 95%, + rgba(169, 177, 214, 0) + ); + } +} + +toast button, +toast button.text-button, +toast button.circular.flat, +infobar.warning > revealer > box button, +infobar.warning:backdrop > revealer > box button, +popover.background.touch-selection button, +popover.background.magnifier button, +headerbar.selection-mode + button:not(.suggested-action):not(.destructive-action) { + color: rgba(192, 202, 245, 0.7); +} + +toast button:focus, +toast button.circular.flat:focus, +infobar.warning > revealer > box button:focus, +popover.background.touch-selection button:focus, +popover.background.magnifier button:focus, +headerbar.selection-mode + button:focus:not(.suggested-action):not(.destructive-action), +toast button:hover, +toast button.circular.flat:hover, +infobar.warning > revealer > box button:hover, +popover.background.touch-selection button:hover, +popover.background.magnifier button:hover, +headerbar.selection-mode + button:hover:not(.suggested-action):not(.destructive-action), +toast button:active, +toast button.circular.flat:active, +infobar.warning > revealer > box button:active, +popover.background.touch-selection button:active, +popover.background.magnifier button:active, +headerbar.selection-mode + button:active:not(.suggested-action):not(.destructive-action), +toast button:checked, +toast button.circular.flat:checked, +infobar.warning > revealer > box button:checked, +popover.background.touch-selection button:checked, +popover.background.magnifier button:checked, +headerbar.selection-mode + button:checked:not(.suggested-action):not(.destructive-action) { + color: #c0caf5; +} + +toast button:disabled, +toast button.circular.flat:disabled, +infobar.warning > revealer > box button:disabled, +popover.background.touch-selection button:disabled, +popover.background.magnifier button:disabled, +headerbar.selection-mode + button:disabled:not(.suggested-action):not(.destructive-action) { + color: rgba(192, 202, 245, 0.3); +} + +toast button:checked:disabled, +infobar.warning > revealer > box button:checked:disabled, +popover.background.touch-selection button:checked:disabled, +popover.background.magnifier button:checked:disabled, +headerbar.selection-mode + button:checked:disabled:not(.suggested-action):not(.destructive-action) { + color: rgba(192, 202, 245, 0.5); +} + +headerbar + popover + button:not(.suggested-action):not(.destructive-action):not(.flat), +button { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), + background-color 225ms cubic-bezier(0, 0, 0.2, 1), + box-shadow 300ms cubic-bezier(0, 0, 0.2, 1); + outline: none; + background-color: rgba(192, 202, 245, 0.08); + color: #c0caf5; + box-shadow: inset 0 0 0 2px transparent; +} + +headerbar + popover + button:focus:not(.suggested-action):not(.destructive-action):not(.flat), +button:focus { + box-shadow: inset 0 0 0 2px alpha(currentColor, 0.08); + color: #c0caf5; + outline: none; +} + +headerbar + popover + button:hover:not(.suggested-action):not(.destructive-action):not(.flat), +button:hover { + background-color: alpha(currentColor, 0.08); + color: #c0caf5; + box-shadow: inset 0 0 0 2px transparent; +} + +headerbar + popover + button:active:not(.suggested-action):not(.destructive-action):not(.flat), +button:active { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), + background-color 225ms cubic-bezier(0, 0, 0.2, 1), + box-shadow 300ms cubic-bezier(0, 0, 0.2, 1); + background-color: alpha(currentColor, 0.12); + box-shadow: inset 0 0 0 2px transparent; + color: #c0caf5; +} + +headerbar + popover + button:disabled:not(.suggested-action):not(.destructive-action):not(.flat), +button:disabled { + box-shadow: none; + background-color: rgba(192, 202, 245, 0.04); + color: rgba(192, 202, 245, 0.5); + transition: none; + opacity: 1; + filter: none; +} + +headerbar + popover + button:checked:not(.suggested-action):not(.destructive-action):not(.flat), +button:checked { + box-shadow: none; + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); + outline: none; +} + +headerbar + popover + button:checked:hover:not(.suggested-action):not(.destructive-action):not(.flat), +button:checked:hover { + box-shadow: none; +} + +headerbar + popover + button:checked:disabled:not(.suggested-action):not(.destructive-action):not(.flat), +button:checked:disabled { + box-shadow: none; + background-color: rgba(192, 202, 245, 0.04); + color: rgba(192, 202, 245, 0.5); + opacity: 1; + filter: none; +} + +button { + min-height: 24px; + min-width: 16px; + padding: 6px 10px; + border-radius: 6px; + font-weight: 500; +} + +button:drop(active) { + background-color: alpha(currentColor, 0.08); + color: #c0caf5; + box-shadow: inset 0 0 0 2px transparent; +} + +placessidebar .navigation-sidebar > row button.sidebar-button, +calendar > header > button, +columnview.view > header > button button.circular, +treeview.view > header > button button.circular, +row.activatable button.circular, +scrollbar button, +notebook > header > tabs > arrow, +popover.menu box.circular-buttons button.circular.image-button.model, +headerbar popover calendar > header > button, +spinbutton.vertical > button, +spinbutton:not(.vertical) > button, +splitbutton.flat > button, +splitbutton.flat > menubutton > button, +filechooser #pathbarbox > stack > box > button, +window.dialog.message.csd .dialog-action-area > button, +.app-notification button, +headerbar button:not(.suggested-action):not(.destructive-action), +.toolbar button, +toolbar button, +dropdown > .linked:not(.vertical) > button:not(:only-child), +combobox > .linked:not(.vertical) > button:not(:only-child), +splitbutton.suggested-action > button, +splitbutton.suggested-action > menubutton > button, +splitbutton.destructive-action > button, +splitbutton.destructive-action > menubutton > button, +splitbutton.opaque > button, +splitbutton.opaque > menubutton > button, +menubutton.suggested-action > button, +menubutton.destructive-action > button, +menubutton.opaque > button, +menubutton.flat > button, +button.flat { + background-color: transparent; + color: rgba(192, 202, 245, 0.7); +} + +placessidebar .navigation-sidebar > row button.sidebar-button:focus, +calendar > header > button:focus, +columnview.view > header > button button.circular:focus, +treeview.view > header > button button.circular:focus, +row.activatable button.circular:focus, +scrollbar button:focus, +notebook > header > tabs > arrow:focus, +popover.menu box.circular-buttons button.circular.image-button.model:focus, +headerbar popover calendar > header > button:focus, +spinbutton.vertical > button:focus, +spinbutton:not(.vertical) > button:focus, +splitbutton.flat > button:focus, +splitbutton.flat > menubutton > button:focus, +filechooser #pathbarbox > stack > box > button:focus, +window.dialog.message.csd .dialog-action-area > button:focus, +.app-notification button:focus, +headerbar button:focus:not(.suggested-action):not(.destructive-action), +.toolbar button:focus, +toolbar button:focus, +dropdown > .linked:not(.vertical) > button:focus:not(:only-child), +combobox > .linked:not(.vertical) > button:focus:not(:only-child), +splitbutton.suggested-action > button:focus, +splitbutton.suggested-action > menubutton > button:focus, +splitbutton.destructive-action > button:focus, +splitbutton.destructive-action > menubutton > button:focus, +splitbutton.opaque > button:focus, +splitbutton.opaque > menubutton > button:focus, +menubutton.suggested-action > button:focus, +menubutton.destructive-action > button:focus, +menubutton.opaque > button:focus, +menubutton.flat > button:focus, +button.flat:focus { + box-shadow: inset 0 0 0 2px alpha(currentColor, 0.08); + color: #c0caf5; +} + +placessidebar .navigation-sidebar > row button.sidebar-button:hover, +calendar > header > button:hover, +columnview.view > header > button button.circular:hover, +treeview.view > header > button button.circular:hover, +row.activatable button.circular:hover, +scrollbar button:hover, +notebook > header > tabs > arrow:hover, +popover.menu box.circular-buttons button.circular.image-button.model:hover, +headerbar popover calendar > header > button:hover, +spinbutton.vertical > button:hover, +spinbutton:not(.vertical) > button:hover, +splitbutton.flat > button:hover, +splitbutton.flat > menubutton > button:hover, +filechooser #pathbarbox > stack > box > button:hover, +window.dialog.message.csd .dialog-action-area > button:hover, +.app-notification button:hover, +headerbar button:hover:not(.suggested-action):not(.destructive-action), +.toolbar button:hover, +toolbar button:hover, +dropdown > .linked:not(.vertical) > button:hover:not(:only-child), +combobox > .linked:not(.vertical) > button:hover:not(:only-child), +splitbutton.suggested-action > button:hover, +splitbutton.suggested-action > menubutton > button:hover, +splitbutton.destructive-action > button:hover, +splitbutton.destructive-action > menubutton > button:hover, +splitbutton.opaque > button:hover, +splitbutton.opaque > menubutton > button:hover, +menubutton.suggested-action > button:hover, +menubutton.destructive-action > button:hover, +menubutton.opaque > button:hover, +menubutton.flat > button:hover, +button.flat:hover { + background-color: alpha(currentColor, 0.08); + color: #c0caf5; +} + +placessidebar .navigation-sidebar > row button.sidebar-button:active, +calendar > header > button:active, +columnview.view > header > button button.circular:active, +treeview.view > header > button button.circular:active, +row.activatable button.circular:active, +scrollbar button:active, +notebook > header > tabs > arrow:active, +popover.menu box.circular-buttons button.circular.image-button.model:active, +headerbar popover calendar > header > button:active, +spinbutton.vertical > button:active, +spinbutton:not(.vertical) > button:active, +splitbutton.flat > button:active, +splitbutton.flat > menubutton > button:active, +filechooser #pathbarbox > stack > box > button:active, +window.dialog.message.csd .dialog-action-area > button:active, +.app-notification button:active, +headerbar button:active:not(.suggested-action):not(.destructive-action), +.toolbar button:active, +toolbar button:active, +dropdown > .linked:not(.vertical) > button:active:not(:only-child), +combobox > .linked:not(.vertical) > button:active:not(:only-child), +splitbutton.suggested-action > button:active, +splitbutton.suggested-action > menubutton > button:active, +splitbutton.destructive-action > button:active, +splitbutton.destructive-action > menubutton > button:active, +splitbutton.opaque > button:active, +splitbutton.opaque > menubutton > button:active, +menubutton.suggested-action > button:active, +menubutton.destructive-action > button:active, +menubutton.opaque > button:active, +menubutton.flat > button:active, +button.flat:active { + background-color: alpha(currentColor, 0.12); + color: #c0caf5; + box-shadow: none; +} + +placessidebar .navigation-sidebar > row button.sidebar-button:disabled, +calendar > header > button:disabled, +columnview.view > header > button button.circular:disabled, +treeview.view > header > button button.circular:disabled, +row.activatable button.circular:disabled, +scrollbar button:disabled, +notebook > header > tabs > arrow:disabled, +popover.menu box.circular-buttons button.circular.image-button.model:disabled, +headerbar popover calendar > header > button:disabled, +spinbutton.vertical > button:disabled, +spinbutton:not(.vertical) > button:disabled, +splitbutton.flat > button:disabled, +splitbutton.flat > menubutton > button:disabled, +filechooser #pathbarbox > stack > box > button:disabled, +window.dialog.message.csd .dialog-action-area > button:disabled, +.app-notification button:disabled, +headerbar button:disabled:not(.suggested-action):not(.destructive-action), +.toolbar button:disabled, +toolbar button:disabled, +dropdown > .linked:not(.vertical) > button:disabled:not(:only-child), +combobox > .linked:not(.vertical) > button:disabled:not(:only-child), +splitbutton.suggested-action > button:disabled, +splitbutton.suggested-action > menubutton > button:disabled, +splitbutton.destructive-action > button:disabled, +splitbutton.destructive-action > menubutton > button:disabled, +splitbutton.opaque > button:disabled, +splitbutton.opaque > menubutton > button:disabled, +menubutton.suggested-action > button:disabled, +menubutton.destructive-action > button:disabled, +menubutton.opaque > button:disabled, +menubutton.flat > button:disabled, +button.flat:disabled { + box-shadow: none; + background-color: transparent; + color: rgba(192, 202, 245, 0.3); + opacity: 1; + filter: none; +} + +filechooser #pathbarbox > stack > box > button:checked, +window.dialog.message.csd .dialog-action-area > button:checked, +.app-notification button:checked, +headerbar button:checked:not(.suggested-action):not(.destructive-action), +.toolbar button:checked, +toolbar button:checked, +dropdown > .linked:not(.vertical) > button:checked:not(:only-child), +combobox > .linked:not(.vertical) > button:checked:not(:only-child), +splitbutton.suggested-action > button:checked, +splitbutton.suggested-action > menubutton > button:checked, +splitbutton.destructive-action > button:checked, +splitbutton.destructive-action > menubutton > button:checked, +splitbutton.opaque > button:checked, +splitbutton.opaque > menubutton > button:checked, +menubutton.suggested-action > button:checked, +menubutton.destructive-action > button:checked, +menubutton.opaque > button:checked, +menubutton.flat > button:checked, +button.flat:checked, +button.flat:checked:hover { + background-color: alpha(currentColor, 0.1); + color: #c0caf5; + outline: none; + box-shadow: none; +} + +filechooser #pathbarbox > stack > box > button:checked:disabled, +window.dialog.message.csd .dialog-action-area > button:checked:disabled, +.app-notification button:checked:disabled, +headerbar + button:checked:disabled:not(.suggested-action):not(.destructive-action), +.toolbar button:checked:disabled, +toolbar button:checked:disabled, +dropdown > .linked:not(.vertical) > button:checked:disabled:not(:only-child), +combobox > .linked:not(.vertical) > button:checked:disabled:not(:only-child), +splitbutton.suggested-action > button:checked:disabled, +splitbutton.suggested-action > menubutton > button:checked:disabled, +splitbutton.destructive-action > button:checked:disabled, +splitbutton.destructive-action > menubutton > button:checked:disabled, +splitbutton.opaque > button:checked:disabled, +splitbutton.opaque > menubutton > button:checked:disabled, +menubutton.suggested-action > button:checked:disabled, +menubutton.destructive-action > button:checked:disabled, +menubutton.opaque > button:checked:disabled, +menubutton.flat > button:checked:disabled, +button.flat:checked:disabled { + background-color: alpha(currentColor, 0.06); + color: rgba(192, 202, 245, 0.5); + opacity: 1; + filter: none; +} + +button.text-button { + min-width: 32px; + padding-left: 16px; + padding-right: 16px; +} + +button.text-button.flat { + min-width: 48px; + padding-left: 8px; + padding-right: 8px; +} + +button.image-button { + min-width: 24px; + padding: 6px; + border-radius: 6px; +} + +.linked button.image-button { + border-radius: 6px; +} + +button.text-button.image-button { + min-width: 24px; + padding: 6px; + border-radius: 6px; +} + +button.text-button.image-button label:first-child { + margin-left: 10px; +} + +button.text-button.image-button label:last-child { + margin-right: 10px; +} + +button.text-button.image-button.flat label:first-child { + margin-left: 6px; +} + +button.text-button.image-button.flat label:last-child { + margin-right: 6px; +} + +button.text-button.image-button image:not(:only-child) { + margin: 0 4px; +} + +.linked:not(.vertical) > button.flat:not(:only-child), +.linked.vertical > button.flat:not(:only-child) { + border-radius: 6px; +} + +.linked:not(.vertical) > button.flat:focus, +.linked.vertical > button.flat:focus { + box-shadow: inset 0 0 0 9999px alpha(currentColor, 0.08); +} + +button.osd { + padding: 12px 16px; + box-shadow: none; + background-color: #16161e; + color: #c0caf5; +} + +button.osd:hover { + background-color: #414868; + color: #c0caf5; +} + +button.osd:active { + background-color: #080808; + color: #c0caf5; +} + +button.osd.image-button { + padding: 6px; +} + +button.osd:disabled { + opacity: 0; +} + +button.suggested-action { + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); + box-shadow: none; +} + +button.suggested-action:disabled { + box-shadow: none; + background-color: rgba(192, 202, 245, 0.04); + color: rgba(192, 202, 245, 0.5); + transition: none; + opacity: 1; + filter: none; +} + +button.suggested-action:hover { + box-shadow: inset 0 0 0 9999px transparent, + 0 2px 2.4px -1px rgba(169, 177, 214, 0.2), + 0 4px 3px 0 rgba(169, 177, 214, 0.14), 0 1px 6px 0 rgba(169, 177, 214, 0.12); +} + +button.suggested-action:checked { + background-color: rgba(168, 168, 168, 0.961); +} + +button.suggested-action:checked:hover { + box-shadow: inset 0 0 0 9999px transparent, + 0 3px 3px -3px rgba(169, 177, 214, 0.3), + 0 2px 3px -1px rgba(169, 177, 214, 0.24), + 0 2px 5px 0 rgba(169, 177, 214, 0.12); +} + +button.suggested-action:focus { + box-shadow: 0 0 0 2px rgba(169, 177, 214, 0.35); +} + +button.suggested-action.flat { + background-color: transparent; + color: #a9b1d6; +} + +button.suggested-action.flat:disabled { + box-shadow: none; + background-color: transparent; + color: rgba(192, 202, 245, 0.3); + opacity: 1; + filter: none; +} + +button.suggested-action.flat:checked { + background-color: rgba(169, 177, 214, 0.3); +} + +button.destructive-action { + background-color: #f28b82; + color: rgba(0, 0, 0, 0.87); + box-shadow: none; +} + +button.destructive-action:disabled { + box-shadow: none; + background-color: rgba(192, 202, 245, 0.04); + color: rgba(192, 202, 245, 0.5); + transition: none; + opacity: 1; + filter: none; +} + +button.destructive-action:hover { + box-shadow: inset 0 0 0 9999px transparent, + 0 2px 2.4px -1px rgba(242, 139, 130, 0.2), + 0 4px 3px 0 rgba(242, 139, 130, 0.14), 0 1px 6px 0 rgba(242, 139, 130, 0.12); +} + +button.destructive-action:checked { + background-color: rgba(182, 105, 98, 0.961); +} + +button.destructive-action:checked:hover { + box-shadow: inset 0 0 0 9999px transparent, + 0 3px 3px -3px rgba(242, 139, 130, 0.3), + 0 2px 3px -1px rgba(242, 139, 130, 0.24), + 0 2px 5px 0 rgba(242, 139, 130, 0.12); +} + +button.destructive-action:focus { + box-shadow: 0 0 0 2px rgba(242, 139, 130, 0.35); +} + +button.destructive-action.flat { + background-color: transparent; + color: #f28b82; +} + +button.destructive-action.flat:disabled { + box-shadow: none; + background-color: transparent; + color: rgba(192, 202, 245, 0.3); + opacity: 1; + filter: none; +} + +button.destructive-action.flat:checked { + background-color: rgba(242, 139, 130, 0.3); +} + +menubutton.pill > button, +button.pill { + padding: 9px 30px; + border-radius: 9999px; +} + +button.card { + background-clip: padding-box; + font-weight: inherit; + background-clip: border-box; + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), + background-color 225ms cubic-bezier(0, 0, 0.2, 1), + box-shadow 300ms cubic-bezier(0, 0, 0.2, 1); + outline: none; + background-color: rgba(192, 202, 245, 0.08); + color: #c0caf5; + box-shadow: inset 0 0 0 2px transparent; +} + +button.card:hover { + background-image: none; + background-color: alpha(currentColor, 0.08); + color: #c0caf5; + box-shadow: inset 0 0 0 2px transparent; +} + +button.card.keyboard-activating, +button.card:active { + background-image: none; + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), + background-color 225ms cubic-bezier(0, 0, 0.2, 1), + box-shadow 300ms cubic-bezier(0, 0, 0.2, 1); + background-color: alpha(currentColor, 0.12); + box-shadow: inset 0 0 0 2px transparent; + color: #c0caf5; +} + +button.card:checked { + background-image: none; + box-shadow: none; + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); + outline: none; + border-color: #a9b1d6; +} + +button.card:checked:hover { + background-image: none; + box-shadow: none; +} + +button.card:checked:disabled { + box-shadow: none; + background-color: rgba(192, 202, 245, 0.04); + color: rgba(192, 202, 245, 0.5); + opacity: 1; + filter: none; +} + +button.card.keyboard-activating:checked, +button.card:checked:active { + background-image: none; +} + +button.card.has-open-popup:checked { + background-image: none; +} + +button.card:drop(active) { + color: #ff7043; + box-shadow: inset 0 0 0 1px #ff7043; +} + +stackswitcher > button > label { + margin: 0 -6px; + padding: 0 6px; +} + +stackswitcher > button > image { + margin: -3px -6px; + padding: 3px 6px; +} + +stackswitcher > button.needs-attention:checked > label, +stackswitcher > button.needs-attention:checked > image { + animation: none; + background-image: none; +} + +button.font > box, +button.file > box { + border-spacing: 6px; +} + +button.font > box > box > label, +button.file > box > box > label { + font-weight: bold; +} + +windowcontrols button:not(.suggested-action):not(.destructive-action), +filechooser #pathbarbox > stack > box > button, +menubutton.circular > button, +button.close, +button.circular { + border-radius: 9999px; + min-width: 24px; + min-height: 24px; + padding: 6px; +} + +windowcontrols button:not(.suggested-action):not(.destructive-action) label, +filechooser #pathbarbox > stack > box > button label, +menubutton.circular > button label, +button.close label, +button.circular label { + padding: 0; +} + +.nautilus-window .floating-bar button, +placessidebar .navigation-sidebar > row button.sidebar-button, +notebook > header tab button.flat, +popover.menu box.circular-buttons button.circular.image-button.model, +spinbutton.vertical > button, +spinbutton:not(.vertical) > button { + min-height: 24px; + min-width: 24px; + padding: 0; + border-radius: 9999px; +} + +menubutton.osd { + background: none; + color: inherit; +} + +menubutton.suggested-action { + background-color: #a9b1d6; + color: #c0caf5; +} + +menubutton.destructive-action { + background-color: #f28b82; + color: #c0caf5; +} + +menubutton.opaque { + background-color: #565f89; + color: #c0caf5; +} + +menubutton.suggested-action, +menubutton.destructive-action, +menubutton.opaque { + border-radius: 6px; +} + +menubutton.suggested-action.circular, +menubutton.suggested-action.pill, +menubutton.destructive-action.circular, +menubutton.destructive-action.pill, +menubutton.opaque.circular, +menubutton.opaque.pill { + border-radius: 9999px; +} + +menubutton.suggested-action > button, +menubutton.suggested-action > button:checked, +menubutton.destructive-action > button, +menubutton.destructive-action > button:checked, +menubutton.opaque > button, +menubutton.opaque > button:checked { + background-color: transparent; + color: inherit; +} + +menubutton.image-button > button { + min-width: 24px; + padding-left: 6px; + padding-right: 6px; +} + +menubutton arrow { + min-height: 16px; + min-width: 16px; +} + +menubutton arrow.none { + -gtk-icon-source: -gtk-icontheme('open-menu-symbolic'); +} + +menubutton arrow.down { + -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); +} + +menubutton arrow.up { + -gtk-icon-source: -gtk-icontheme('pan-up-symbolic'); +} + +menubutton arrow.left { + -gtk-icon-source: -gtk-icontheme('pan-start-symbolic'); +} + +menubutton arrow.right { + -gtk-icon-source: -gtk-icontheme('pan-end-symbolic'); +} + +splitbutton { + border-radius: 6px; +} + +splitbutton, +splitbutton > separator { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1); + transition-property: background; +} + +splitbutton:disabled { + filter: none; +} + +splitbutton:disabled > button, +splitbutton:disabled > menubutton > button { + filter: none; +} + +splitbutton > separator { + margin-top: 6px; + margin-bottom: 6px; + background: none; +} + +splitbutton > menubutton > button { + padding-left: 4px; + padding-right: 4px; +} + +splitbutton.image-button > button { + min-width: 24px; + padding-left: 6px; + padding-right: 6px; +} + +splitbutton.text-button.image-button > button, +splitbutton.image-text-button > button { + padding-left: 9px; + padding-right: 9px; +} + +splitbutton.text-button.image-button > button > box, +splitbutton.image-text-button > button > box { + border-spacing: 6px; +} + +splitbutton > button:dir(ltr), +splitbutton > menubutton > button:dir(rtl) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + margin-right: -1px; +} + +splitbutton > button:dir(rtl), +splitbutton > menubutton > button:dir(ltr) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + margin-left: -1px; +} + +splitbutton.flat > separator { + background: rgba(192, 202, 245, 0.12); +} + +splitbutton.flat:hover, +splitbutton.flat:active, +splitbutton.flat:checked { + background: alpha(currentColor, 0.07); +} + +splitbutton.flat:hover > separator, +splitbutton.flat:active > separator, +splitbutton.flat:checked > separator { + background: none; +} + +splitbutton.flat:focus-within:focus-visible > separator { + background: none; +} + +splitbutton.flat > button, +splitbutton.flat > menubutton > button { + border-radius: 6px; +} + +splitbutton.suggested-action { + background-color: #a9b1d6; + color: #c0caf5; +} + +splitbutton.destructive-action { + background-color: #f28b82; + color: #c0caf5; +} + +splitbutton.opaque { + background-color: #565f89; + color: #c0caf5; +} + +splitbutton.suggested-action > button, +splitbutton.suggested-action > button:checked, +splitbutton.suggested-action > menubutton > button, +splitbutton.suggested-action > menubutton > button:checked, +splitbutton.destructive-action > button, +splitbutton.destructive-action > button:checked, +splitbutton.destructive-action > menubutton > button, +splitbutton.destructive-action > menubutton > button:checked, +splitbutton.opaque > button, +splitbutton.opaque > button:checked, +splitbutton.opaque > menubutton > button, +splitbutton.opaque > menubutton > button:checked { + color: inherit; + background-color: transparent; +} + +splitbutton.suggested-action > menubutton > button:dir(ltr), +splitbutton.destructive-action > menubutton > button:dir(ltr), +splitbutton.opaque > menubutton > button:dir(ltr) { + box-shadow: inset 1px 0 rgba(192, 202, 245, 0.12); +} + +splitbutton.suggested-action > menubutton > button:dir(rtl), +splitbutton.destructive-action > menubutton > button:dir(rtl), +splitbutton.opaque > menubutton > button:dir(rtl) { + box-shadow: inset -1px 0 rgba(192, 202, 245, 0.12); +} + +splitbutton > menubutton > button > arrow.none { + -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); +} + +buttoncontent { + border-spacing: 6px; +} + +buttoncontent > label { + font-weight: bold; +} + +buttoncontent > label:dir(ltr) { + padding-right: 2px; +} + +buttoncontent > label:dir(rtl) { + padding-left: 2px; +} + +.arrow-button > box > buttoncontent > label:dir(ltr), +splitbutton > button > buttoncontent > label:dir(ltr) { + padding-right: 0; +} + +.arrow-button > box > buttoncontent > label:dir(rtl), +splitbutton > button > buttoncontent > label:dir(rtl) { + padding-left: 0; +} + +stacksidebar row.needs-attention > label, +stackswitcher > button.needs-attention > label, +stackswitcher > button.needs-attention > image { + animation: needs-attention 225ms cubic-bezier(0, 0, 0.2, 1) forwards; + background-repeat: no-repeat; + background-position: right 3px; + background-size: 6px 6px; +} + +stacksidebar row.needs-attention > label:dir(rtl), +stackswitcher > button.needs-attention > label:dir(rtl), +stackswitcher > button.needs-attention > image:dir(rtl) { + background-position: left 3px; +} + +.linked:not(.vertical) > entry, +.linked:not(.vertical) > button, +.linked:not(.vertical) > button.image-button { + border-radius: 0; +} + +.linked:not(.vertical) > entry:first-child, +.linked:not(.vertical) > button:first-child { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} + +.linked:not(.vertical) > entry:last-child, +.linked:not(.vertical) > button:last-child { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.linked:not(.vertical) > entry:only-child, +.linked:not(.vertical) > button:only-child { + border-radius: 6px; +} + +.linked.vertical > entry, +.linked.vertical > button, +.linked.vertical > button.image-button { + border-radius: 0; +} + +.linked.vertical > entry:first-child, +.linked.vertical > button:first-child { + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} + +.linked.vertical > entry:last-child, +.linked.vertical > button:last-child { + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; +} + +.linked.vertical > entry:only-child, +.linked.vertical > button:only-child { + border-radius: 6px; +} + +.linked:not(.vertical) > button:not(.combo):dir(ltr):not(:first-child), +.linked:not(.vertical) > button:not(.combo):dir(rtl):not(:last-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + margin-left: 0; +} + +.linked:not(.vertical) > button:not(.combo):dir(ltr):not(:last-child), +.linked:not(.vertical) > button:not(.combo):dir(rtl):not(:first-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.linked.vertical button:not(.combo):not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-top: 0; +} + +.linked.vertical button:not(.combo):not(:last-child) { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.linked:not(.vertical) > menubutton:dir(ltr):not(:first-child) > button, +.linked:not(.vertical) > menubutton:dir(rtl):not(:last-child) > button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + margin-left: 0; +} + +.linked:not(.vertical) > menubutton:dir(ltr):not(:last-child) > button, +.linked:not(.vertical) > menubutton:dir(rtl):not(:first-child) > button { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.linked.vertical menubutton:not(:first-child) > button { + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-top: 0; +} + +.linked.vertical menubutton:not(:last-child) > button { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.linked:not(.vertical) > dropdown:dir(ltr):not(:first-child) > button, +.linked:not(.vertical) > dropdown:dir(rtl):not(:last-child) > button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + margin-left: 0; +} + +.linked:not(.vertical) > dropdown:dir(ltr):not(:last-child) > button, +.linked:not(.vertical) > dropdown:dir(rtl):not(:first-child) > button { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.linked.vertical dropdown:not(:first-child) > button { + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-top: 0; +} + +.linked.vertical dropdown:not(:last-child) > button { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.linked:not(.vertical) > colorbutton:dir(ltr):not(:first-child) > button, +.linked:not(.vertical) > colorbutton:dir(rtl):not(:last-child) > button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + margin-left: 0; +} + +.linked:not(.vertical) > colorbutton:dir(ltr):not(:last-child) > button, +.linked:not(.vertical) > colorbutton:dir(rtl):not(:first-child) > button { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.linked.vertical colorbutton:not(:first-child) > button { + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-top: 0; +} + +.linked.vertical colorbutton:not(:last-child) > button { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.linked:not(.vertical) > fontbutton:dir(ltr):not(:first-child) > button, +.linked:not(.vertical) > fontbutton:dir(rtl):not(:last-child) > button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + margin-left: 0; +} + +.linked:not(.vertical) > fontbutton:dir(ltr):not(:last-child) > button, +.linked:not(.vertical) > fontbutton:dir(rtl):not(:first-child) > button { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.linked.vertical fontbutton:not(:first-child) > button { + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-top: 0; +} + +.linked.vertical fontbutton:not(:last-child) > button { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.linked:not(.vertical) > tabbutton:dir(ltr):not(:first-child) > button, +.linked:not(.vertical) > tabbutton:dir(rtl):not(:last-child) > button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + margin-left: 0; +} + +.linked:not(.vertical) > tabbutton:dir(ltr):not(:last-child) > button, +.linked:not(.vertical) > tabbutton:dir(rtl):not(:first-child) > button { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.linked.vertical tabbutton:not(:first-child) > button { + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-top: 0; +} + +.linked.vertical tabbutton:not(:last-child) > button { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.linked:not(.vertical) > entry:not(.combo):dir(ltr):not(:first-child), +.linked:not(.vertical) > entry:not(.combo):dir(rtl):not(:last-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + margin-left: 0; +} + +.linked:not(.vertical) > entry:not(.combo):dir(ltr):not(:last-child), +.linked:not(.vertical) > entry:not(.combo):dir(rtl):not(:first-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.linked.vertical entry:not(.combo):not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-top: 0; +} + +.linked.vertical entry:not(.combo):not(:last-child) { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +button.color { + min-height: 24px; + min-width: 24px; + padding: 6px; +} + +list > row button.image-button:not(.flat) { + background-color: transparent; + box-shadow: none; + border: none; +} + +list > row button.image-button:not(.flat):hover { + background-color: alpha(currentColor, 0.08); + color: #c0caf5; + box-shadow: inset 0 0 0 2px transparent; +} + +list > row button.image-button:not(.flat):active, +list > row button.image-button:not(.flat):checked { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), + background-color 225ms cubic-bezier(0, 0, 0.2, 1), + box-shadow 300ms cubic-bezier(0, 0, 0.2, 1); + background-color: alpha(currentColor, 0.12); + box-shadow: inset 0 0 0 2px transparent; + color: #c0caf5; +} + +list > row button.image-button.suggested-action:not(.flat) { + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); +} + +list > row button.image-button.destructive-action:not(.flat) { + background-color: #f28b82; + color: rgba(0, 0, 0, 0.87); +} + +/********* + * Links * + *********/ +link { + color: #2196f3; +} + +link:visited { + color: #ce93d8; +} + +button.link:link, +button.link:link:focus, +button.link:link:hover, +button.link:link:active { + color: #2196f3; +} + +button.link:visited, +button.link:visited:focus, +button.link:visited:hover, +button.link:visited:active { + color: #ce93d8; +} + +button.link > label { + text-decoration-line: underline; +} + +/***************** + * GtkSpinButton * + *****************/ +spinbutton { + border-radius: 6px; + padding: 0; + border-spacing: 0; + min-height: 0; + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), + box-shadow 300ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: inset 0 0 0 2px transparent; + background-color: rgba(192, 202, 245, 0.08); + color: #c0caf5; + outline: none; +} + +spinbutton:focus-within { + background-color: rgba(192, 202, 245, 0.08); + box-shadow: inset 0 0 0 2px #a9b1d6; + outline: none; +} + +spinbutton:disabled { + box-shadow: inset 0 0 0 2px transparent; + background-color: rgba(192, 202, 245, 0.04); + color: rgba(192, 202, 245, 0.5); + outline: none; + opacity: 1; + filter: none; +} + +spinbutton:not(.vertical) > text { + min-width: 32px; + margin: 0; + padding-left: 12px; + border-image: none; + border-radius: 0; + box-shadow: none; + background-color: transparent; +} + +spinbutton:not(.vertical) > button { + border: solid 6px transparent; +} + +spinbutton:not(.vertical) + > button:focus:not(:hover):not(:active):not(:disabled) { + box-shadow: inset 0 0 0 9999px transparent; + color: rgba(192, 202, 245, 0.7); +} + +spinbutton:not(.vertical) > button.up:dir(ltr), +spinbutton:not(.vertical) > button.down:dir(rtl) { + margin-left: -3px; +} + +spinbutton:not(.vertical) > button.up:dir(rtl), +spinbutton:not(.vertical) > button.down:dir(ltr) { + margin-right: -3px; +} + +spinbutton.vertical > text { + margin: 0; + border-image: none; + border-radius: 0; + box-shadow: none; + background-color: transparent; + min-height: 36px; + min-width: 42px; + padding: 0; +} + +spinbutton.vertical > button { + padding: 0; + border: solid 6px transparent; +} + +spinbutton.vertical > button:focus:not(:hover):not(:active) { + box-shadow: inset 0 0 0 9999px transparent; + color: rgba(192, 202, 245, 0.7); +} + +spinbutton.vertical > button.up { + margin: 0 3px; +} + +spinbutton.vertical > button.down { + margin: 0 3px; +} + +list > row spinbutton:not(.vertical) > button { + margin: 6px; +} + +list > row spinbutton:not(.vertical) > button.up:dir(ltr), +list > row spinbutton:not(.vertical) > button.down:dir(rtl) { + margin-left: 3px; +} + +list > row spinbutton:not(.vertical) > button.up:dir(rtl), +list > row spinbutton:not(.vertical) > button.down:dir(ltr) { + margin-right: 3px; +} + +/************** + * ComboBoxes * + **************/ +dropdown > button > box { + border-spacing: 6px; +} + +dropdown arrow, +combobox arrow { + -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); + min-height: 16px; + min-width: 16px; +} + +dropdown > popover.menu > contents modelbutton, +combobox > popover.menu > contents modelbutton { + padding-left: 9px; + padding-right: 9px; +} + +dropdown button.combo cellview:dir(ltr), +combobox button.combo cellview:dir(ltr) { + margin-left: -2px; +} + +dropdown button.combo cellview:dir(rtl), +combobox button.combo cellview:dir(rtl) { + margin-right: -2px; +} + +dropdown popover, +combobox popover { + margin-top: 4px; + padding: 0; +} + +dropdown popover listview, +combobox popover listview { + margin: 0; +} + +dropdown popover listview > row, +combobox popover listview > row { + padding: 6px; +} + +dropdown popover listview > row:selected, +combobox popover listview > row:selected { + color: #c0caf5; + background-color: alpha(currentColor, 0.06); +} + +dropdown popover .dropdown-searchbar, +combobox popover .dropdown-searchbar { + padding: 6px; +} + +dropdown.linked button:nth-child(2):dir(ltr), +combobox.linked button:nth-child(2):dir(ltr) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +dropdown.linked button:nth-child(2):dir(rtl), +combobox.linked button:nth-child(2):dir(rtl) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +dropdown > .linked:not(.vertical) > entry:not(:only-child), +combobox > .linked:not(.vertical) > entry:not(:only-child) { + border-radius: 6px; +} + +dropdown > .linked:not(.vertical) > entry:not(:only-child):first-child, +combobox > .linked:not(.vertical) > entry:not(:only-child):first-child { + margin-right: -36px; + padding-right: 36px; +} + +dropdown > .linked:not(.vertical) > entry:not(:only-child):last-child, +combobox > .linked:not(.vertical) > entry:not(:only-child):last-child { + margin-left: -36px; + padding-left: 36px; +} + +dropdown > .linked:not(.vertical) > button:not(:only-child), +combobox > .linked:not(.vertical) > button:not(:only-child) { + min-height: 16px; + min-width: 16px; + margin: 6px; + padding: 4px; + border-radius: 9999px; +} + +.linked:not(.vertical) > combobox:not(:first-child) > box > button.combo { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.linked:not(.vertical) > combobox:not(:last-child) > box > button.combo { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.linked.vertical > combobox:not(:first-child) > box > button.combo { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.linked.vertical > combobox:not(:last-child) > box > button.combo { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +button.combo:only-child { + border-radius: 6px; + font-weight: normal; + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), + box-shadow 300ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: inset 0 0 0 2px transparent; + background-color: rgba(192, 202, 245, 0.08); + color: #c0caf5; + outline: none; +} + +button.combo:only-child:focus { + box-shadow: inset 0 0 0 2px alpha(currentColor, 0.08); + color: #c0caf5; +} + +button.combo:only-child:hover { + background-color: alpha(currentColor, 0.08); + color: #c0caf5; +} + +button.combo:only-child:active { + background-color: alpha(currentColor, 0.12); + color: #c0caf5; + box-shadow: none; +} + +button.combo:only-child:checked { + background-color: alpha(currentColor, 0.1); + color: #c0caf5; + outline: none; + box-shadow: none; +} + +button.combo:only-child:disabled { + box-shadow: none; + background-color: rgba(192, 202, 245, 0.04); + color: rgba(192, 202, 245, 0.5); + transition: none; + opacity: 1; + filter: none; +} + +/************ + * Toolbars * + ************/ +.toolbar, +toolbar { + padding: 3px 6px; + background-color: #1a1b26; + border-spacing: 6px; +} + +.osd .toolbar, +.osd toolbar { + background-color: transparent; +} + +.app-notification, +.toolbar.osd, +toolbar.osd { + transition: box-shadow 75ms cubic-bezier(0, 0, 0.2, 1); + padding: 6px; + border-radius: 6px; + box-shadow: 0 2px 2.4px -1px rgba(0, 0, 0, 0.2), + 0 4px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 6px 0 rgba(0, 0, 0, 0.12), + inset 0 1px rgba(192, 202, 245, 0.1); + background-color: #292e42; +} + +.app-notification:backdrop, +.toolbar.osd:backdrop, +toolbar.osd:backdrop { + box-shadow: 0 3px 2px -3px rgba(0, 0, 0, 0.3), + 0 2px 2px -1px rgba(0, 0, 0, 0.24), 0 1px 3px 0 rgba(0, 0, 0, 0.12), + inset 0 1px rgba(192, 202, 245, 0.1); +} + +.left.app-notification, +.right.app-notification, +.top.app-notification, +.bottom.app-notification, +.toolbar.osd.left, +.toolbar.osd.right, +.toolbar.osd.top, +.toolbar.osd.bottom, +toolbar.osd.left, +toolbar.osd.right, +toolbar.osd.top, +toolbar.osd.bottom { + border-radius: 0; +} + +.bottom.app-notification, +.toolbar.osd.bottom, +toolbar.osd.bottom { + box-shadow: none; + background-color: transparent; + background-image: linear-gradient( + to bottom, + transparent, + rgba(0, 0, 0, 0.1) 30%, + rgba(0, 0, 0, 0.2) 50%, + rgba(0, 0, 0, 0.4) + ); +} + +.toolbar.horizontal > separator, +toolbar.horizontal > separator { + margin: 2px; +} + +.toolbar.vertical > separator, +toolbar.vertical > separator { + margin: 2px; +} + +.toolbar:not(.inline-toolbar):not(.osd) scale, +.toolbar:not(.inline-toolbar):not(.osd) entry, +.toolbar:not(.inline-toolbar):not(.osd) spinbutton, +.toolbar:not(.inline-toolbar):not(.osd) button, +toolbar:not(.inline-toolbar):not(.osd) scale, +toolbar:not(.inline-toolbar):not(.osd) entry, +toolbar:not(.inline-toolbar):not(.osd) spinbutton, +toolbar:not(.inline-toolbar):not(.osd) button { + margin: 2px; +} + +.toolbar:not(.inline-toolbar):not(.osd) .linked entry:not(:first-child), +.toolbar:not(.inline-toolbar):not(.osd) .linked spinbutton:not(:first-child), +.toolbar:not(.inline-toolbar):not(.osd) .linked button:not(:first-child), +toolbar:not(.inline-toolbar):not(.osd) .linked entry:not(:first-child), +toolbar:not(.inline-toolbar):not(.osd) .linked spinbutton:not(:first-child), +toolbar:not(.inline-toolbar):not(.osd) .linked button:not(:first-child) { + margin-left: 0; +} + +.toolbar:not(.inline-toolbar):not(.osd) .linked entry:not(:last-child), +.toolbar:not(.inline-toolbar):not(.osd) .linked spinbutton:not(:last-child), +.toolbar:not(.inline-toolbar):not(.osd) .linked button:not(:last-child), +toolbar:not(.inline-toolbar):not(.osd) .linked entry:not(:last-child), +toolbar:not(.inline-toolbar):not(.osd) .linked spinbutton:not(:last-child), +toolbar:not(.inline-toolbar):not(.osd) .linked button:not(:last-child) { + margin-right: 0; +} + +.toolbar:not(.inline-toolbar):not(.osd) spinbutton entry, +.toolbar:not(.inline-toolbar):not(.osd) spinbutton button, +toolbar:not(.inline-toolbar):not(.osd) spinbutton entry, +toolbar:not(.inline-toolbar):not(.osd) spinbutton button { + margin: 0; +} + +.toolbar:not(.inline-toolbar):not(.osd) switch, +toolbar:not(.inline-toolbar):not(.osd) switch { + margin: 8px 2px; +} + +searchbar > revealer > box { + padding: 6px; + border-spacing: 6px; + border-style: solid; + border-width: 0 0 1px; + border-color: rgba(192, 202, 245, 0.12); + background-color: #1a1b26; + background-clip: border-box; + box-shadow: none; +} + +searchbar > revealer > box entry, +searchbar > revealer > box button { + margin: 0; +} + +/*************** + * Header bars * + ***************/ +headerbar button:not(.suggested-action):not(.destructive-action) { + color: rgba(192, 202, 245, 0.7); + border-radius: 6px; +} + +headerbar button:focus:not(.suggested-action):not(.destructive-action), +headerbar button:hover:not(.suggested-action):not(.destructive-action), +headerbar button:active:not(.suggested-action):not(.destructive-action), +headerbar button:checked:not(.suggested-action):not(.destructive-action) { + color: #c0caf5; +} + +headerbar button:disabled:not(.suggested-action):not(.destructive-action) { + color: rgba(192, 202, 245, 0.3); +} + +headerbar + button:checked:disabled:not(.suggested-action):not(.destructive-action) { + background-color: transparent; + color: rgba(192, 202, 245, 0.5); +} + +headerbar button:backdrop:not(.suggested-action):not(.destructive-action) { + color: rgba(192, 202, 245, 0.5); +} + +headerbar button:backdrop:focus:not(.suggested-action):not(.destructive-action), +headerbar button:backdrop:hover:not(.suggested-action):not(.destructive-action), +headerbar + button:backdrop:active:not(.suggested-action):not(.destructive-action) { + color: rgba(192, 202, 245, 0.7); +} + +headerbar + button:backdrop:disabled:not(.suggested-action):not(.destructive-action) { + color: rgba(192, 202, 245, 0.3); +} + +headerbar + button:backdrop:checked:not(.suggested-action):not(.destructive-action) { + color: rgba(192, 202, 245, 0.7); +} + +headerbar + button:backdrop:checked:disabled:not(.suggested-action):not(.destructive-action) { + color: rgba(192, 202, 245, 0.3); +} + +headerbar entry { + background-color: rgba(192, 202, 245, 0.04); + color: #c0caf5; +} + +headerbar entry:focus-within { + box-shadow: inset 0 0 0 2px #a9b1d6; +} + +headerbar entry:disabled { + background-color: rgba(192, 202, 245, 0.04); + color: rgba(192, 202, 245, 0.5); +} + +headerbar entry image { + color: rgba(192, 202, 245, 0.7); +} + +headerbar entry image:hover, +headerbar entry image:active { + color: #c0caf5; +} + +headerbar entry image:disabled { + color: rgba(192, 202, 245, 0.5); +} + +headerbar { + min-height: 48px; + padding: 0; + margin: 0; + border: none; + transition: all 75ms cubic-bezier(0, 0, 0.2, 1); + background-color: #1a1b26; + color: #c0caf5; + box-shadow: inset 0 1px rgba(192, 202, 245, 0.1); +} + +headerbar:disabled { + color: rgba(192, 202, 245, 0.5); +} + +headerbar:backdrop { + background-color: #1a1b26; + color: rgba(192, 202, 245, 0.7); +} + +headerbar:backdrop:disabled { + color: rgba(192, 202, 245, 0.3); +} + +headerbar.flat { + background-color: transparent; + color: #c0caf5; +} + +headerbar .title { + padding: 0 12px; + font-weight: bold; +} + +headerbar .subtitle { + padding: 0 12px; + font-size: smaller; +} + +headerbar .subtitle, +headerbar .dim-label, +headerbar row label.subtitle, +row headerbar label.subtitle { + transition: color 75ms cubic-bezier(0, 0, 0.2, 1); + color: rgba(192, 202, 245, 0.7); +} + +headerbar .subtitle:backdrop, +headerbar .dim-label:backdrop, +headerbar row label.subtitle:backdrop, +row headerbar label.subtitle:backdrop { + color: rgba(192, 202, 245, 0.5); +} + +headerbar > windowhandle > box { + padding: 0 6px; +} + +headerbar > windowhandle > box, +headerbar > windowhandle > box > box.start, +headerbar > windowhandle > box > box.end { + border-spacing: 6px; +} + +headerbar entry, +headerbar spinbutton, +headerbar button, +headerbar stackswitcher, +headerbar menubutton, +headerbar splitbutton, +headerbar separator { + margin-top: 6px; + margin-bottom: 6px; +} + +headerbar menubutton > button, +headerbar spinbutton > button, +headerbar splitbutton > button, +headerbar splitbutton > menubutton, +headerbar stackswitcher > button { + margin-top: 0; + margin-bottom: 0; +} + +headerbar separator:not(.spacer) { + background-color: rgba(192, 202, 245, 0.12); +} + +headerbar switch { + margin-top: 12px; + margin-bottom: 12px; +} + +headerbar spinbutton button { + margin-top: 0; + margin-bottom: 0; +} + +headerbar .entry-tag { + margin-top: 5px; + margin-bottom: 5px; +} + +headerbar .titlebar { + background-color: transparent; + box-shadow: none; +} + +headerbar headerbar + separator { + background-color: rgba(192, 202, 245, 0.12); +} + +headerbar .linked:not(.vertical) > entry:not(:only-child) { + border-radius: 6px; +} + +headerbar button.suggested-action:disabled, +headerbar button.destructive-action:disabled { + background-color: rgba(192, 202, 245, 0.04); + color: rgba(192, 202, 245, 0.5); +} + +headerbar stackswitcher { + margin: 6px 0; + border-radius: 9999px; +} + +headerbar + stackswitcher.linked:not(.vertical) + > button.text-button:not(.suggested-action):not(.destructive-action) { + border-radius: 9999px; +} + +headerbar + stackswitcher.linked:not(.vertical) + > button.text-button:not(.suggested-action):not(.destructive-action):checked { + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); +} + +headerbar.selection-mode { + transition: background-color 0.1ms 225ms, + color 75ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: inset 0 1px rgba(192, 202, 245, 0); + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); +} + +headerbar.selection-mode:backdrop { + color: rgba(0, 0, 0, 0.6); +} + +headerbar.selection-mode .subtitle:link { + color: rgba(0, 0, 0, 0.87); +} + +headerbar.selection-mode .selection-menu { + padding-left: 16px; + padding-right: 16px; +} + +headerbar.selection-mode .selection-menu .arrow { + -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); +} + +headerbar .selection-mode { + box-shadow: inset 0 1px rgba(192, 202, 245, 0); + background-color: #a9b1d6; +} + +.tiled headerbar, +.tiled-top headerbar, +.tiled-right headerbar, +.tiled-bottom headerbar, +.tiled-left headerbar, +.maximized headerbar, +.fullscreen headerbar { + border-radius: 0; +} + +headerbar.default-decoration { + min-height: 24px; + padding: 6px; + border-radius: 6px 6px 0 0; +} + +headerbar.default-decoration windowcontrols button, +headerbar.default-decoration windowcontrols menubutton { + min-height: 24px; + min-width: 24px; + margin: 0; + padding: 0; +} + +.solid-csd headerbar:dir(rtl), +.solid-csd headerbar:dir(ltr) { + border-radius: 0; + box-shadow: none; +} + +window.devel headerbar.titlebar { + background: #1a1b26 + cross-fade(10% -gtk-icontheme('system-run-symbolic'), image(transparent)) + 90% 0/256px 256px no-repeat, + linear-gradient(to right, transparent 65%, rgba(169, 177, 214, 0.1)), + linear-gradient(to top, #343434 3px, #393939); +} + +window.devel headerbar.titlebar:backdrop { + background: #1a1b26 + cross-fade(10% -gtk-icontheme('system-run-symbolic'), image(transparent)) + 90% 0/256px 256px no-repeat, + image(#1a1b26); + /* background-color would flash */ +} + +/************ + * Pathbars * + ************/ + +pathbar > button { + padding-left: 6px; + padding-right: 6px; + border-radius: 6px; +} + +pathbar > button label:not(:only-child):first-child { + margin-left: 0; +} + +pathbar > button label:not(:only-child):last-child { + margin-right: 0; +} + +pathbar > button.text-button { + min-width: 0; +} + +pathbar > button.slider-button { + padding-left: 4px; + padding-right: 4px; +} + +.pathbar { + background-color: rgba(192, 202, 245, 0.04); + color: rgba(192, 202, 245, 0.7); + border: none; + border-radius: 6px; + padding: 2px; +} + +headerbar .pathbar { + margin-top: 6px; + margin-bottom: 6px; + background-color: rgba(192, 202, 245, 0.04); + color: rgba(192, 202, 245, 0.7); +} + +.pathbar > button { + margin-top: 0; + margin-bottom: 0; + min-height: 20px; + border-radius: 4px; + border: none; + box-shadow: none; +} + +.pathbar > button:last-child { + background-color: alpha(currentColor, 0.1); + color: #c0caf5; + outline: none; + box-shadow: none; +} + +/************** + * Tree Views * + **************/ +columnview.view, +treeview.view { + border-left-color: #414868; + border-top-color: #414868; +} + +columnview.view:selected, +treeview.view:selected { + background-color: alpha(currentColor, 0.1); + box-shadow: none; +} + +columnview.view:focus, +treeview.view:focus { + box-shadow: none; + outline: none; +} + +columnview.view:hover, +columnview.view:selected, +treeview.view:hover, +treeview.view:selected { + border-radius: 0; + box-shadow: none; +} + +columnview.view.separator, +treeview.view.separator { + min-height: 5px; + color: rgba(192, 202, 245, 0.12); +} + +columnview.view:drop(active), +treeview.view:drop(active) { + box-shadow: none; +} + +columnview.view.after:drop(active), +treeview.view.after:drop(active) { + border-top-style: none; +} + +columnview.view.before:drop(active), +treeview.view.before:drop(active) { + border-bottom-style: none; +} + +columnview.view > dndtarget:drop(active), +treeview.view > dndtarget:drop(active) { + border-style: solid none; + border-width: 1px; + border-color: alpha(currentColor, 0.06); +} + +columnview.view > dndtarget.after:drop(active), +treeview.view > dndtarget.after:drop(active) { + border-top-style: none; +} + +columnview.view > dndtarget.before:drop(active), +treeview.view > dndtarget.before:drop(active) { + border-bottom-style: none; +} + +columnview.view.expander, +treeview.view.expander { + min-width: 16px; + min-height: 16px; + -gtk-icon-source: -gtk-icontheme('pan-end-symbolic'); + color: rgba(192, 202, 245, 0.7); +} + +columnview.view.expander:dir(rtl), +treeview.view.expander:dir(rtl) { + -gtk-icon-source: -gtk-icontheme('pan-end-symbolic-rtl'); +} + +columnview.view.expander:hover, +treeview.view.expander:hover { + color: #c0caf5; +} + +columnview.view.expander:selected, +treeview.view.expander:selected { + color: #c0caf5; +} + +columnview.view.expander:selected:hover, +treeview.view.expander:selected:hover { + color: #c0caf5; +} + +columnview.view.expander:checked, +treeview.view.expander:checked { + -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); +} + +columnview.view.expander:disabled, +treeview.view.expander:disabled { + color: rgba(192, 202, 245, 0.3); +} + +columnview.view.progressbar, +treeview.view.progressbar { + border-bottom: 6px solid #a9b1d6; + box-shadow: none; + background-color: transparent; + background-image: none; +} + +columnview.view.progressbar:selected:hover, +treeview.view.progressbar:selected:hover { + box-shadow: none; +} + +columnview.view.trough, +treeview.view.trough { + border-bottom: 6px solid rgba(192, 202, 245, 0.12); + box-shadow: none; + background-color: transparent; + background-image: none; +} + +columnview.view.trough:selected:hover, +treeview.view.trough:selected:hover { + box-shadow: none; +} + +columnview.view > header > button, +treeview.view > header > button { + padding: 2px 6px; + border-style: none solid solid none; + border-width: 1px; + border-color: rgba(192, 202, 245, 0.12); + border-radius: 0; + background-clip: border-box; +} + +columnview.view > header > button:not(:focus):not(:hover):not(:active), +treeview.view > header > button:not(:focus):not(:hover):not(:active) { + color: rgba(192, 202, 245, 0.7); +} + +columnview.view > header > button, +columnview.view > header > button:disabled, +treeview.view > header > button, +treeview.view > header > button:disabled { + background-color: #1a1b26; +} + +columnview.view > header > button:last-child, +treeview.view > header > button:last-child { + border-right-style: none; +} + +columnview.view button.dnd, +columnview.view header.button.dnd, +treeview.view button.dnd, +treeview.view header.button.dnd { + padding: 2px 6px; + border-style: none solid solid; + border-width: 1px; + border-color: rgba(192, 202, 245, 0.12); + border-radius: 0; + box-shadow: none; + background-color: #1a1b26; + background-clip: border-box; + color: #a9b1d6; +} + +columnview.view acceleditor > label, +treeview.view acceleditor > label { + background-color: #a9b1d6; +} + +/********* + * Menus * + *********/ +menubar { + padding: 0; + color: #c0caf5; +} + +menubar:backdrop { + color: rgba(192, 202, 245, 0.7); +} + +.csd menubar { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1); +} + +menubar > item { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1); + min-height: 20px; + padding: 4px 8px; + color: rgba(192, 202, 245, 0.7); +} + +menubar > item:selected { + transition: none; + background-color: alpha(currentColor, 0.1); + color: #c0caf5; +} + +menubar > item:disabled { + color: rgba(192, 202, 245, 0.3); +} + +menubar > item label:disabled { + color: inherit; +} + +menubar > item popover.menu popover.menu { + margin-left: 9px; +} + +menubar > item popover.menu.background popover.menu.background > contents { + margin: 0; + border-radius: 12px; +} + +/********************** + * Popover Base Menus * + **********************/ +popover.menu box.inline-buttons { + padding: 0 6px; +} + +popover.menu box.inline-buttons button.image-button.model { + min-height: 28px; + min-width: 28px; + padding: 0; + border: none; + outline: none; + transition: none; +} + +popover.menu box.inline-buttons button.image-button.model:selected { + background-image: image(alpha(currentColor, 0.06)); +} + +popover.menu box.circular-buttons { + padding: 6px; +} + +popover.menu box.circular-buttons button.circular.image-button.model { + padding: 6px; +} + +popover.menu box.circular-buttons button.circular.image-button.model:focus { + background-color: alpha(currentColor, 0.06); +} + +popover.menu arrow.left, +popover.menu radio.left, +popover.menu check.left { + margin-left: 0; + margin-right: 0; +} + +popover.menu arrow.right, +popover.menu radio.right, +popover.menu check.right { + margin-left: 0; + margin-right: 0; +} + +/************ + * Popovers * + ************/ +popover.background { + font: initial; +} + +popover.background, +popover.background:backdrop { + background-color: transparent; +} + +popover.background > arrow, +popover.background > contents { + transition: box-shadow 75ms cubic-bezier(0, 0, 0.2, 1); + padding: 6px; + background-color: #292e42; + background-clip: border-box; + border-radius: 12px; + color: #c0caf5; + border: none; + border: 1px solid rgba(192, 202, 245, 0.2); + box-shadow: 0 2px 3px -1px rgba(0, 0, 0, 0.05), + 0 4px 6px 0 rgba(0, 0, 0, 0.06), 0 1px 10px 0 rgba(0, 0, 0, 0.05), + 0 0 0 1px rgba(0, 0, 0, 0.75); + background-clip: border-box; +} + +popover.background:backdrop > arrow, +popover.background:backdrop > contents { + border: none; + box-shadow: 0 3px 2px -3px rgba(0, 0, 0, 0.3), + 0 2px 2px -1px rgba(0, 0, 0, 0.24), 0 1px 3px 0 rgba(0, 0, 0, 0.12); +} + +popover.background separator { + margin: 6px 0; +} + +popover.background modelbutton { + transition: background-color 75ms cubic-bezier(0, 0, 0.2, 1); + min-height: 22px; + min-width: 56px; + padding: 3px 9px; + border-radius: 6px; + color: #c0caf5; + font: initial; + text-shadow: none; + box-shadow: none; + background: none; +} + +popover.background modelbutton:hover { + transition: none; + background-color: #3b4261; + color: #0db9d7; +} + +popover.background modelbutton:disabled { + color: rgba(192, 202, 245, 0.5); +} + +popover.background modelbutton arrow.left { + -gtk-icon-source: -gtk-icontheme('go-previous-symbolic'); +} + +popover.background modelbutton arrow.right { + -gtk-icon-source: -gtk-icontheme('go-next-symbolic'); +} + +popover.background label.title { + font-weight: bold; + padding: 4px 26px; +} + +popover.background > contents > list, +popover.background > contents > .view, +popover.background > contents > toolbar { + border-style: none; + box-shadow: none; + background-color: transparent; +} + +popover.background > contents separator { + background-color: rgba(192, 202, 245, 0.12); + margin: 3px 0; +} + +popover.background > contents list separator { + margin: 0; +} + +popover.background > contents stack > box { + padding: 0; +} + +popover.background > contents stack > scrolledwindow > viewport { + border: 1px solid rgba(192, 202, 245, 0.12); + border-radius: 2px; +} + +popover.background > contents > box > button { + margin: 0; +} + +popover.background.menu button, +popover.background button.model { + min-height: 32px; + padding: 0 8px; + border-radius: 6px; +} + +.osd popover.background, +popover.background.touch-selection, +popover.background.magnifier { + background-color: transparent; +} + +.osd popover.background > arrow, +.osd popover.background > contents, +popover.background.touch-selection > arrow, +popover.background.touch-selection > contents, +popover.background.magnifier > arrow, +popover.background.magnifier > contents { + border: none; + box-shadow: none; +} + +/************* + * Notebooks * + *************/ +tabbar scrolledwindow:not(.pinned) > tabbox tab, +notebook > header tab { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), background-size 0ms, + background-image 0ms; + min-height: 24px; + min-width: 24px; + padding: 6px; + border: none; + outline: none; + background-clip: padding-box; + color: rgba(192, 202, 245, 0.7); + font-weight: 500; + border-radius: 6px; +} + +tabbar scrolledwindow:not(.pinned) > tabbox tab:hover, +notebook > header tab:hover { + background-color: rgba(192, 202, 245, 0.04); + color: #0db9d7; +} + +tabbar scrolledwindow:not(.pinned) > tabbox tab:disabled, +notebook > header tab:disabled { + color: rgba(192, 202, 245, 0.3); +} + +tabbar scrolledwindow:not(.pinned) > tabbox tab:checked, +notebook > header tab:checked, +tabbar scrolledwindow:not(.pinned) > tabbox tab:selected, +notebook > header tab:selected { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1); + background-color: #292e42; + color: #0db9d7; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06); +} + +tabbar scrolledwindow:not(.pinned) > tabbox tab:checked:disabled, +notebook > header tab:checked:disabled, +tabbar scrolledwindow:not(.pinned) > tabbox tab:selected:disabled, +notebook > header tab:selected:disabled { + color: rgba(192, 202, 245, 0.5); +} + +frame > paned > notebook > header, +notebook.frame > header { + background-color: rgba(192, 202, 245, 0.04); +} + +notebook, +notebook.frame { + background-color: #1a1b26; + border-radius: 12px; +} + +notebook.frame frame > border { + border: none; + border-radius: 6px; +} + +notebook.frame frame > list row.activatable { + border-radius: 6px; +} + +notebook > header { + border: none; + background-color: rgba(192, 202, 245, 0.04); + padding: 3px; + margin: 3px; + border-radius: 9px; +} + +notebook > header.top > tabs > arrow { + border-top-style: none; +} + +notebook > header.bottom > tabs > arrow { + border-bottom-style: none; +} + +notebook > header.top > tabs > arrow, +notebook > header.bottom > tabs > arrow { + padding-left: 4px; + padding-right: 4px; +} + +notebook > header.top > tabs > arrow.down, +notebook > header.bottom > tabs > arrow.down { + margin-left: 0; + -gtk-icon-source: -gtk-icontheme('pan-start-symbolic'); +} + +notebook > header.top > tabs > arrow.up, +notebook > header.bottom > tabs > arrow.up { + margin-right: 0; + -gtk-icon-source: -gtk-icontheme('pan-end-symbolic'); +} + +notebook > header.left > tabs > arrow { + border-left-style: none; +} + +notebook > header.right > tabs > arrow { + border-right-style: none; +} + +notebook > header.left > tabs > arrow, +notebook > header.right > tabs > arrow { + padding-top: 4px; + padding-bottom: 4px; +} + +notebook > header.left > tabs > arrow.down, +notebook > header.right > tabs > arrow.down { + margin-top: 0; + -gtk-icon-source: -gtk-icontheme('pan-up-symbolic'); +} + +notebook > header.left > tabs > arrow.up, +notebook > header.right > tabs > arrow.up { + margin-bottom: 0; + -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); +} + +notebook > header > tabs > arrow { + min-height: 16px; + min-width: 16px; + border-radius: 6px; +} + +notebook > header tab > box { + transition: background-color 75ms cubic-bezier(0, 0, 0.2, 1); + margin: -6px -12px; + padding: 6px 12px; +} + +notebook > header tab > box:drop(active) { + background-color: rgba(192, 202, 245, 0.12); + color: #c0caf5; +} + +notebook > header tab button.flat:last-child { + margin-left: 6px; + margin-right: -6px; +} + +notebook > header tab button.flat:first-child { + margin-left: -6px; + margin-right: 6px; +} + +notebook > header tab button.close-button { + min-width: 24px; + min-height: 24px; +} + +notebook > header.top tabs:not(:only-child):first-child, +notebook > header.bottom tabs:not(:only-child):first-child { + margin-left: 0; +} + +notebook > header.top tabs:not(:only-child):last-child, +notebook > header.bottom tabs:not(:only-child):last-child { + margin-right: 0; +} + +notebook > header.top tabs tab.reorderable-page, +notebook > header.bottom tabs tab.reorderable-page { + border-style: solid; +} + +notebook > header.left tabs:not(:only-child):first-child, +notebook > header.right tabs:not(:only-child):first-child { + margin-top: 0; +} + +notebook > header.left tabs:not(:only-child):last-child, +notebook > header.right tabs:not(:only-child):last-child { + margin-bottom: 0; +} + +notebook > header.left tabs tab.reorderable-page, +notebook > header.right tabs tab.reorderable-page { + border-style: solid; +} + +notebook > header > menubutton > button.image-button { + padding: 3px; + min-width: 24px; + min-height: 24px; + margin-left: 3px; +} + +notebook > stack:not(:only-child) { + background-color: transparent; + border-radius: 6px; +} + +tabbar .box { + min-height: 36px; +} + +tabbar:not(.inline) .box { + border: none; + background-color: transparent; + padding: 0; + margin: 3px; + border-radius: 12px; + box-shadow: none; +} + +tabbar:not(.inline):backdrop .box { + background-color: transparent; +} + +tabbar:not(.inline):backdrop .box > scrolledwindow, +tabbar:not(.inline):backdrop .box > .start-action, +tabbar:not(.inline):backdrop .box > .end-action { + filter: opacity(0.5); +} + +tabbar scrolledwindow:not(.pinned) > tabbox > tabboxchild { + padding: 3px 0; + margin: 0 -3px; +} + +tabbar scrolledwindow:not(.pinned) > tabbox > tabboxchild > tab { + margin: 3px; +} + +tabbar scrolledwindow.pinned > tabbox > tabboxchild { + padding: 3px 0; + margin: 0; +} + +tabbar scrolledwindow.pinned > tabbox > tabboxchild > tab { + margin: 3px; + padding: 3px; +} + +tabbar .start-action, +tabbar .end-action { + padding: 6px; +} + +tabbar .start-action:dir(ltr), +tabbar .end-action:dir(rtl) { + padding-right: 0; +} + +tabbar .start-action:dir(rtl), +tabbar .end-action:dir(ltr) { + padding-left: 0; +} + +dnd tab { + min-height: 24px; + background-color: #1a1b26; + color: #c0caf5; + margin: 24px; + outline: none; + box-shadow: 0 1px 5px 1px rgba(0, 0, 0, 0.09), + 0 2px 14px 3px rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.05); +} + +tabbar tab, +dnd tab { + padding: 6px; +} + +tabbar tab button.image-button, +dnd tab button.image-button { + padding: 0; + margin: 0; + min-width: 24px; + min-height: 24px; + border-radius: 9999px; +} + +tabbar tab indicator, +dnd tab indicator { + min-height: 2px; + border-radius: 2px; + background: alpha(#a9b1d6, 0.5); + transform: translateY(4px); +} + +tabthumbnail { + border-radius: 10px; + transition: box-shadow 200ms cubic-bezier(0, 0, 0.2, 1), + background-color cubic-bezier(0, 0, 0.2, 1); +} + +tabthumbnail > box { + margin: 6px; +} + +tabthumbnail:drop(active) { + box-shadow: inset 0 0 0 2px alpha(#ff7043, 0.4); + background-color: alpha(#ff7043, 0.1); +} + +tabthumbnail .needs-attention:dir(ltr) { + transform: translate(8px, -8px); +} + +tabthumbnail .needs-attention:dir(rtl) { + transform: translate(-8px, -8px); +} + +tabthumbnail .needs-attention > widget { + background: #a9b1d6; + min-width: 12px; + min-height: 12px; + border-radius: 6px; + margin: 3px; + box-shadow: 0 1px 2px alpha(#a9b1d6, 0.4); +} + +tabthumbnail .card { + background: none; + color: inherit; +} + +tabthumbnail .card picture { + outline: none; + border-radius: 6px; +} + +tabthumbnail.pinned .card { + background-color: #1a1b26; + color: #c0caf5; +} + +tabthumbnail .pinned-box { + margin-left: 10px; + margin-right: 10px; +} + +tabthumbnail .icon-title-box { + border-spacing: 6px; +} + +tabthumbnail .tab-unpin-icon { + margin: 6px; + min-width: 24px; + min-height: 24px; +} + +taboverview > .overview.scrolled-to-top headerbar, +taboverview > .overview.scrolled-to-top searchbar > revealer > box { + background: none; + color: inherit; + box-shadow: none; +} + +taboverview > .overview .new-tab-button { + margin: 18px; +} + +tabview:drop(active), +tabbox:drop(active), +tabgrid:drop(active) { + box-shadow: none; +} + +/************** + * Scrollbars * + **************/ +scrollbar { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1); + background-color: #1a1b26; +} + +scrollbar > range > trough { + outline: none; + background: none; + border: none; +} + +scrollbar > range > trough > slider { + transition: background-color 75ms cubic-bezier(0, 0, 0.2, 1); + min-width: 8px; + min-height: 8px; + border: 4px solid transparent; + border-radius: 9999px; + background-clip: padding-box; + background-color: rgba(192, 202, 245, 0.5); + box-shadow: none; + outline: none; +} + +scrollbar > range > trough > slider:hover { + background-color: rgba(192, 202, 245, 0.7); +} + +scrollbar > range > trough > slider:active { + background-color: #c0caf5; +} + +scrollbar > range > trough > slider:disabled { + background-color: rgba(192, 202, 245, 0.3); +} + +scrollbar > range.fine-tune > trough > slider { + min-width: 4px; + min-height: 4px; +} + +scrollbar > range.fine-tune.horizontal > trough > slider { + margin: 2px 0; +} + +scrollbar > range.fine-tune.vertical > trough > slider { + margin: 0 2px; +} + +scrollbar.overlay-indicator:not(.fine-tune) > range > trough > slider { + transition-property: background-color, min-height, min-width; +} + +scrollbar.overlay-indicator:not(.dragging):not(.hovering) { + border-color: transparent; + background-color: transparent; +} + +scrollbar.overlay-indicator:not(.dragging):not(.hovering) + > range + > trough + > slider { + min-width: 4px; + min-height: 4px; + margin: 3px; + border: 1px solid rgba(44, 44, 44, 0.3); +} + +scrollbar.overlay-indicator:not(.dragging):not(.hovering) button { + min-width: 4px; + min-height: 4px; + margin: 3px; + border: 1px solid rgba(44, 44, 44, 0.3); + border-radius: 9999px; + background-color: rgba(192, 202, 245, 0.5); + background-clip: padding-box; + -gtk-icon-source: none; +} + +scrollbar.overlay-indicator:not(.dragging):not(.hovering) button:disabled { + background-color: rgba(192, 202, 245, 0.3); +} + +scrollbar.overlay-indicator.horizontal:not(.dragging):not(.hovering) + > range + > trough + > slider { + min-width: 24px; +} + +scrollbar.overlay-indicator.horizontal:not(.dragging):not(.hovering) button { + min-width: 8px; +} + +scrollbar.overlay-indicator.vertical:not(.dragging):not(.hovering) + > range + > trough + > slider { + min-height: 24px; +} + +scrollbar.overlay-indicator.vertical:not(.dragging):not(.hovering) button { + min-height: 8px; +} + +scrollbar.overlay-indicator.dragging, +scrollbar.overlay-indicator.hovering { + background-color: transparent; +} + +scrollbar.horizontal > range > trough > slider { + min-width: 24px; +} + +scrollbar.vertical > range > trough > slider { + min-height: 24px; +} + +scrollbar button { + min-width: 16px; + min-height: 16px; + padding: 0; + border-radius: 0; +} + +scrollbar.vertical button.down { + -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); +} + +scrollbar.vertical button.up { + -gtk-icon-source: -gtk-icontheme('pan-up-symbolic'); +} + +scrollbar.horizontal button.down { + -gtk-icon-source: -gtk-icontheme('pan-end-symbolic'); +} + +scrollbar.horizontal button.up { + -gtk-icon-source: -gtk-icontheme('pan-start-symbolic'); +} + +/********** + * Switch * + **********/ +switch { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1); + margin: 6px 0; + padding: 0; + border: 2px solid rgba(192, 202, 245, 0.7); + border-radius: 9999px; + background-color: transparent; + background-clip: border-box; + font-size: 0; + color: transparent; +} + +switch:checked { + background-color: #a9b1d6; + border-color: #a9b1d6; +} + +switch:disabled { + opacity: 0.5; +} + +switch image { + margin: -8px; +} + +switch > slider { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1); + min-width: 16px; + min-height: 16px; + margin: 2px; + border-radius: 9999px; + outline: none; + box-shadow: none; + background-color: rgba(192, 202, 245, 0.7); + border: none; +} + +switch:focus > slider { + box-shadow: 0 0 0 10px rgba(192, 202, 245, 0.04); +} + +switch:hover > slider { + box-shadow: 0 0 0 10px rgba(192, 202, 245, 0.12); +} + +switch:focus:hover > slider { + box-shadow: 0 0 0 10px rgba(192, 202, 245, 0.12); +} + +switch:checked > slider { + background-color: #1a1b26; + color: #1a1b26; +} + +/************************* + * Check and Radio items * + *************************/ +checkbutton, +radiobutton { + outline: none; + border-spacing: 4px; +} + +checkbutton.text-button, +radiobutton.text-button { + padding: 2px; +} + +checkbutton.text-button label:not(:only-child), +radiobutton.text-button label:not(:only-child) { + margin: 0 4px; +} + +check, +radio { + min-height: 16px; + min-width: 16px; + -gtk-icon-size: 16px; + padding: 0; + margin: 3px; + border: 2px solid rgba(192, 202, 245, 0.7); + background-clip: border-box; + background-color: transparent; + border-radius: 9999px; + box-shadow: 0 0 0 10px transparent; + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), + background-color 225ms cubic-bezier(0, 0, 0.2, 1), + box-shadow 225ms cubic-bezier(0, 0, 0.2, 1); +} + +check:hover, +radio:hover { + border-color: inherit; + box-shadow: 0 0 0 10px rgba(192, 202, 245, 0.04); +} + +check:active, +radio:active { + border-color: #c0caf5; + box-shadow: 0 0 0 10px rgba(192, 202, 245, 0.12); +} + +check:checked, +check:indeterminate, +radio:checked, +radio:indeterminate { + border-color: transparent; + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); +} + +check:checked:hover, +check:indeterminate:hover, +radio:checked:hover, +radio:indeterminate:hover { + background-color: #9aa5ce; + color: rgba(0, 0, 0, 0.87); +} + +check:checked:active, +check:indeterminate:active, +radio:checked:active, +radio:indeterminate:active { + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); +} + +check:checked:disabled, +check:indeterminate:disabled, +radio:checked:disabled, +radio:indeterminate:disabled { + border-color: transparent; + background-color: rgba(192, 202, 245, 0.3); + color: #1a1b26; +} + +check:disabled, +radio:disabled { + border-color: rgba(192, 202, 245, 0.3); +} + +check:not(:hover):focus, +radio:not(:hover):focus { + box-shadow: none; +} + +popover.menu check, +popover.menu radio { + transition: none; + margin: 0; + padding: 0; +} + +popover.menu check, +popover.menu check:focus, +popover.menu check:hover, +popover.menu check:focus:hover, +popover.menu check:active, +popover.menu check:disabled, +popover.menu radio, +popover.menu radio:focus, +popover.menu radio:hover, +popover.menu radio:focus:hover, +popover.menu radio:active, +popover.menu radio:disabled { + transition: none; + box-shadow: none; + background-image: none; +} + +popover.menu check:not(:checked):not(:indeterminate):not(:disabled):hover, +popover.menu radio:not(:checked):not(:indeterminate):not(:disabled):hover { + border-color: rgba(0, 0, 0, 0.87); + background-color: transparent; +} + +popover.menu check:active, +popover.menu check:checked, +popover.menu check:indeterminate, +popover.menu radio:active, +popover.menu radio:checked, +popover.menu radio:indeterminate { + border-color: transparent; + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); +} + +popover.menu check:active:hover, +popover.menu check:checked:hover, +popover.menu check:indeterminate:hover, +popover.menu radio:active:hover, +popover.menu radio:checked:hover, +popover.menu radio:indeterminate:hover { + border-color: transparent; + background-color: rgba(0, 0, 0, 0.87); + color: #a9b1d6; +} + +popover.menu check:active:disabled, +popover.menu check:checked:disabled, +popover.menu check:indeterminate:disabled, +popover.menu radio:active:disabled, +popover.menu radio:checked:disabled, +popover.menu radio:indeterminate:disabled { + border-color: transparent; + background-color: rgba(192, 202, 245, 0.3); + color: #1a1b26; +} + +popover.menu check, +popover.menu check:hover, +popover.menu check:active, +popover.menu check:disabled, +popover.menu radio, +popover.menu radio:hover, +popover.menu radio:active, +popover.menu radio:disabled { + box-shadow: none; + color: inherit; +} + +popover.menu check:dir(ltr), +popover.menu radio:dir(ltr) { + margin-right: 6px; +} + +popover.menu check:dir(rtl), +popover.menu radio:dir(rtl) { + margin-left: 6px; +} + +check:checked { + -gtk-icon-source: -gtk-scaled( + -gtk-recolor(url('assets/scalable/check-symbolic.svg')), + -gtk-recolor(url('assets/scalable/check-symbolic@2.svg')) + ); +} + +radio:checked { + -gtk-icon-source: -gtk-scaled( + -gtk-recolor(url('assets/scalable/dot-symbolic.svg')), + -gtk-recolor(url('assets/scalable/dot-symbolic@2.svg')) + ); +} + +check:indeterminate, +radio:indeterminate { + -gtk-icon-source: -gtk-scaled( + -gtk-recolor(url('assets/scalable/line-symbolic.svg')), + -gtk-recolor(url('assets/scalable/line-symbolic@2.svg')) + ); +} + +check:not(:checked):active { + -gtk-icon-transform: rotate(90deg); +} + +check:not(:checked):indeterminate:active { + -gtk-icon-transform: scaleX(-1); +} + +checkbutton.theme-selector radio, +checkbutton.theme-selector radio:hover, +checkbutton.theme-selector radio:disabled { + border-color: transparent; + background-color: transparent; +} + +checkbutton.theme-selector + radio:not(:checked):not(:indeterminate):not(:disabled):hover { + border-color: transparent; + background-color: transparent; +} + +checkbutton.theme-selector radio:checked, +checkbutton.theme-selector radio:active, +checkbutton.theme-selector radio:active:hover { + border-color: transparent; + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); + -gtk-icon-source: -gtk-scaled( + -gtk-recolor(url('assets/scalable/check-symbolic.svg')), + -gtk-recolor(url('assets/scalable/check-symbolic@2.svg')) + ); +} + +checkbutton.theme-selector radio:checked:hover { + background-color: #9aa5ce; + color: rgba(0, 0, 0, 0.87); +} + +themeswitcher { + padding: 6px; +} + +themeswitcher .check { + min-height: 16px; + min-width: 16px; + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); + padding: 2px; + border-radius: 9999px; + margin: 3px; + -gtk-icon-size: 20px; + -gtk-icon-source: -gtk-scaled( + -gtk-recolor(url('assets/scalable/check-symbolic.svg')), + -gtk-recolor(url('assets/scalable/check-symbolic@2.svg')) + ); +} + +themeswitcher .check:hover { + background-color: #9aa5ce; + color: rgba(0, 0, 0, 0.87); +} + +themeswitcher checkbutton radio { + padding: 0; + margin: 2px; + min-height: 48px; + min-width: 48px; +} + +themeswitcher checkbutton radio, +themeswitcher checkbutton radio:hover { + outline-color: rgba(192, 202, 245, 0.12); + outline-width: 1px; + outline-offset: -1px; + outline-style: solid; + box-shadow: none; +} + +themeswitcher checkbutton radio, +themeswitcher checkbutton radio:hover, +themeswitcher checkbutton radio:checked, +themeswitcher checkbutton radio:checked:hover { + -gtk-icon-source: none; + transition: none; + border: none; +} + +themeswitcher checkbutton radio:checked, +themeswitcher checkbutton radio:checked:hover { + box-shadow: inset 0 0 0 2px #a9b1d6; + outline: none; +} + +themeswitcher checkbutton.system radio, +themeswitcher checkbutton.system radio:hover, +themeswitcher checkbutton.system radio:checked, +themeswitcher checkbutton.system radio:checked:hover { + background-image: linear-gradient(-45deg, #24283b 49.99%, #c0caf5 50.01%); + background-color: transparent; +} + +themeswitcher checkbutton.light radio, +themeswitcher checkbutton.light radio:hover, +themeswitcher checkbutton.light radio:checked, +themeswitcher checkbutton.light radio:checked:hover { + color: rgba(0, 0, 0, 0.8); + background-color: #c0caf5; +} + +themeswitcher checkbutton.dark radio, +themeswitcher checkbutton.dark radio:hover, +themeswitcher checkbutton.dark radio:checked, +themeswitcher checkbutton.dark radio:checked:hover { + color: #c0caf5; + background-image: image(#24283b); + background-color: transparent; +} + +/************ + * GtkScale * + ************/ +scale { + min-height: 2px; + min-width: 2px; +} + +scale.horizontal { + padding: 17px 12px; +} + +scale.vertical { + padding: 12px 17px; +} + +scale slider { + min-height: 18px; + min-width: 18px; + margin: -8px; +} + +scale.fine-tune.horizontal { + min-height: 4px; + padding-top: 16px; + padding-bottom: 16px; +} + +scale.fine-tune.vertical { + min-width: 4px; + padding-left: 16px; + padding-right: 16px; +} + +scale.fine-tune slider { + margin: -7px; +} + +scale trough { + transition: background-color 75ms cubic-bezier(0, 0, 0.2, 1); + outline: none; + background-color: rgba(192, 202, 245, 0.3); +} + +scale trough:disabled { + background-color: rgba(192, 202, 245, 0.12); +} + +scale highlight { + transition: background-image 75ms cubic-bezier(0, 0, 0.2, 1); + background-image: image(#a9b1d6); +} + +scale highlight:disabled { + background-color: #1a1b26; + background-image: image(rgba(192, 202, 245, 0.3)); +} + +scale fill { + transition: background-color 75ms cubic-bezier(0, 0, 0.2, 1); + background-color: rgba(192, 202, 245, 0.3); +} + +scale fill:disabled { + background-color: transparent; +} + +scale slider { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1); + border-radius: 9999px; + color: #a9b1d6; + background-color: #1a1b26; + box-shadow: inset 0 0 0 2px #a9b1d6; +} + +scale slider:hover { + box-shadow: inset 0 0 0 2px #a9b1d6, 0 0 0 8px rgba(192, 202, 245, 0.12); +} + +scale slider:active { + box-shadow: inset 0 0 0 4px #a9b1d6, 0 0 0 8px rgba(192, 202, 245, 0.12); +} + +scale slider:disabled { + box-shadow: inset 0 0 0 2px rgba(192, 202, 245, 0.3); +} + +scale marks, +scale value { + color: rgba(192, 202, 245, 0.7); +} + +scale indicator { + background-color: rgba(192, 202, 245, 0.3); + color: transparent; +} + +scale.horizontal > marks.top { + margin-bottom: 7px; + margin-top: -15px; +} + +scale.horizontal.fine-tune > marks.top { + margin-bottom: 6px; + margin-top: -14px; +} + +scale.horizontal > marks.bottom { + margin-top: 7px; + margin-bottom: -15px; +} + +scale.horizontal.fine-tune > marks.bottom { + margin-top: 6px; + margin-bottom: -14px; +} + +scale.vertical > marks.top { + margin-right: 7px; + margin-left: -15px; +} + +scale.vertical.fine-tune > marks.top { + margin-right: 6px; + margin-left: -14px; +} + +scale.vertical > marks.bottom { + margin-left: 7px; + margin-right: -15px; +} + +scale.vertical.fine-tune > marks.bottom { + margin-left: 6px; + margin-right: -14px; +} + +scale.horizontal indicator { + min-height: 8px; + min-width: 1px; +} + +scale.vertical indicator { + min-height: 1px; + min-width: 8px; +} + +scale.horizontal.marks-before:not(.marks-after) slider { + transition: background-color 75ms cubic-bezier(0, 0, 0.2, 1), + background-size 300ms cubic-bezier(0, 0, 0.2, 1), + background-image 1200ms cubic-bezier(0, 0, 0.2, 1); + min-height: 32px; + min-width: 32px; + margin: -15px; + border-radius: 50%; + background-size: auto, 1000% 1000%; + background-repeat: no-repeat; + background-position: center center; + background-color: transparent; +} + +scale.horizontal.marks-before:not(.marks-after) slider, +scale.horizontal.marks-before:not(.marks-after) slider:hover, +scale.horizontal.marks-before:not(.marks-after) slider:active, +scale.horizontal.marks-before:not(.marks-after) slider:disabled { + box-shadow: none; +} + +scale.horizontal.marks-before:not(.marks-after) slider:focus { + background-color: alpha(currentColor, 0.08); +} + +scale.horizontal.marks-before:not(.marks-after) slider:hover { + background-color: alpha(currentColor, 0.08); +} + +scale.horizontal.marks-before:not(.marks-after) slider:focus:hover { + background-color: alpha(currentColor, 0.16); +} + +scale.horizontal.marks-before:not(.marks-after) slider:active { + background-size: auto, 0% 0%; + background-color: alpha(currentColor, 0.08); +} + +scale.horizontal.marks-before:not(.marks-after) slider { + background-image: -gtk-scaled( + url('assets/scale-horz-marks-before-slider-dark.png'), + url('assets/scale-horz-marks-before-slider-dark@2.png') + ); +} + +scale.horizontal.marks-before:not(.marks-after) slider:disabled { + background-image: -gtk-scaled( + url('assets/scale-horz-marks-before-slider-disabled-dark.png'), + url('assets/scale-horz-marks-before-slider-disabled-dark@2.png') + ); +} + +scale.horizontal.marks-before:not(.marks-after) slider:active { + background-image: -gtk-scaled( + url('assets/scale-horz-marks-before-slider-dark.png'), + url('assets/scale-horz-marks-before-slider-dark@2.png') + ); +} + +scale.horizontal.marks-after:not(.marks-before) slider { + transition: background-color 75ms cubic-bezier(0, 0, 0.2, 1), + background-size 300ms cubic-bezier(0, 0, 0.2, 1), + background-image 1200ms cubic-bezier(0, 0, 0.2, 1); + min-height: 32px; + min-width: 32px; + margin: -15px; + border-radius: 50%; + background-size: auto, 1000% 1000%; + background-repeat: no-repeat; + background-position: center center; + background-color: transparent; +} + +scale.horizontal.marks-after:not(.marks-before) slider, +scale.horizontal.marks-after:not(.marks-before) slider:hover, +scale.horizontal.marks-after:not(.marks-before) slider:active, +scale.horizontal.marks-after:not(.marks-before) slider:disabled { + box-shadow: none; +} + +scale.horizontal.marks-after:not(.marks-before) slider:focus { + background-color: alpha(currentColor, 0.08); +} + +scale.horizontal.marks-after:not(.marks-before) slider:hover { + background-color: alpha(currentColor, 0.08); +} + +scale.horizontal.marks-after:not(.marks-before) slider:focus:hover { + background-color: alpha(currentColor, 0.16); +} + +scale.horizontal.marks-after:not(.marks-before) slider:active { + background-size: auto, 0% 0%; + background-color: alpha(currentColor, 0.08); +} + +scale.horizontal.marks-after:not(.marks-before) slider { + background-image: -gtk-scaled( + url('assets/scale-horz-marks-after-slider-dark.png'), + url('assets/scale-horz-marks-after-slider-dark@2.png') + ); +} + +scale.horizontal.marks-after:not(.marks-before) slider:disabled { + background-image: -gtk-scaled( + url('assets/scale-horz-marks-after-slider-disabled-dark.png'), + url('assets/scale-horz-marks-after-slider-disabled-dark@2.png') + ); +} + +scale.horizontal.marks-after:not(.marks-before) slider:active { + background-image: -gtk-scaled( + url('assets/scale-horz-marks-after-slider-dark.png'), + url('assets/scale-horz-marks-after-slider-dark@2.png') + ); +} + +scale.vertical.marks-before:not(.marks-after) slider { + transition: background-color 75ms cubic-bezier(0, 0, 0.2, 1), + background-size 300ms cubic-bezier(0, 0, 0.2, 1), + background-image 1200ms cubic-bezier(0, 0, 0.2, 1); + min-height: 32px; + min-width: 32px; + margin: -15px; + border-radius: 50%; + background-size: auto, 1000% 1000%; + background-repeat: no-repeat; + background-position: center center; + background-color: transparent; +} + +scale.vertical.marks-before:not(.marks-after) slider, +scale.vertical.marks-before:not(.marks-after) slider:hover, +scale.vertical.marks-before:not(.marks-after) slider:active, +scale.vertical.marks-before:not(.marks-after) slider:disabled { + box-shadow: none; +} + +scale.vertical.marks-before:not(.marks-after) slider:focus { + background-color: alpha(currentColor, 0.08); +} + +scale.vertical.marks-before:not(.marks-after) slider:hover { + background-color: alpha(currentColor, 0.08); +} + +scale.vertical.marks-before:not(.marks-after) slider:focus:hover { + background-color: alpha(currentColor, 0.16); +} + +scale.vertical.marks-before:not(.marks-after) slider:active { + background-size: auto, 0% 0%; + background-color: alpha(currentColor, 0.08); +} + +scale.vertical.marks-before:not(.marks-after) slider { + background-image: -gtk-scaled( + url('assets/scale-vert-marks-before-slider-dark.png'), + url('assets/scale-vert-marks-before-slider-dark@2.png') + ); +} + +scale.vertical.marks-before:not(.marks-after) slider:disabled { + background-image: -gtk-scaled( + url('assets/scale-vert-marks-before-slider-disabled-dark.png'), + url('assets/scale-vert-marks-before-slider-disabled-dark@2.png') + ); +} + +scale.vertical.marks-before:not(.marks-after) slider:active { + background-image: -gtk-scaled( + url('assets/scale-vert-marks-before-slider-dark.png'), + url('assets/scale-vert-marks-before-slider-dark@2.png') + ); +} + +scale.vertical.marks-after:not(.marks-before) slider { + transition: background-color 75ms cubic-bezier(0, 0, 0.2, 1), + background-size 300ms cubic-bezier(0, 0, 0.2, 1), + background-image 1200ms cubic-bezier(0, 0, 0.2, 1); + min-height: 32px; + min-width: 32px; + margin: -15px; + border-radius: 50%; + background-size: auto, 1000% 1000%; + background-repeat: no-repeat; + background-position: center center; + background-color: transparent; +} + +scale.vertical.marks-after:not(.marks-before) slider, +scale.vertical.marks-after:not(.marks-before) slider:hover, +scale.vertical.marks-after:not(.marks-before) slider:active, +scale.vertical.marks-after:not(.marks-before) slider:disabled { + box-shadow: none; +} + +scale.vertical.marks-after:not(.marks-before) slider:focus { + background-color: alpha(currentColor, 0.08); +} + +scale.vertical.marks-after:not(.marks-before) slider:hover { + background-color: alpha(currentColor, 0.08); +} + +scale.vertical.marks-after:not(.marks-before) slider:focus:hover { + background-color: alpha(currentColor, 0.16); +} + +scale.vertical.marks-after:not(.marks-before) slider:active { + background-size: auto, 0% 0%; + background-color: alpha(currentColor, 0.08); +} + +scale.vertical.marks-after:not(.marks-before) slider { + background-image: -gtk-scaled( + url('assets/scale-vert-marks-after-slider-dark.png'), + url('assets/scale-vert-marks-after-slider-dark@2.png') + ); +} + +scale.vertical.marks-after:not(.marks-before) slider:disabled { + background-image: -gtk-scaled( + url('assets/scale-vert-marks-after-slider-disabled-dark.png'), + url('assets/scale-vert-marks-after-slider-disabled-dark@2.png') + ); +} + +scale.vertical.marks-after:not(.marks-before) slider:active { + background-image: -gtk-scaled( + url('assets/scale-vert-marks-after-slider-dark.png'), + url('assets/scale-vert-marks-after-slider-dark@2.png') + ); +} + +scale.color { + min-height: 0; + min-width: 0; +} + +scale.color.horizontal { + padding: 0 0 12px 0; +} + +scale.color.horizontal slider:dir(ltr), +scale.color.horizontal slider:dir(rtl) { + margin-bottom: -13.5px; + margin-top: 11.5px; +} + +scale.color.vertical:dir(ltr) { + padding: 0 0 0 12px; +} + +scale.color.vertical:dir(ltr) slider { + margin-left: -13.5px; + margin-right: 11.5px; +} + +scale.color.vertical:dir(rtl) { + padding: 0 12px 0 0; +} + +scale.color.vertical:dir(rtl) slider { + margin-right: -13.5px; + margin-left: 11.5px; +} + +/***************** + * Progress bars * + *****************/ +progressbar { + color: rgba(192, 202, 245, 0.7); + font-size: smaller; +} + +progressbar.horizontal trough, +progressbar.horizontal progress { + min-height: 6px; +} + +progressbar.vertical trough, +progressbar.vertical progress { + min-width: 6px; +} + +progressbar trough { + border-radius: 6px; + background-color: rgba(192, 202, 245, 0.12); +} + +progressbar progress { + border-radius: 6px; + background-color: #a9b1d6; +} + +progressbar.osd { + min-width: 6px; + min-height: 6px; + background-color: transparent; + box-shadow: none; + margin: 0; + padding: 0; +} + +progressbar.osd trough { + background-color: transparent; +} + +progressbar.osd progress { + background-color: #a9b1d6; +} + +progressbar trough.empty progress { + all: unset; +} + +/************* + * Level Bar * + *************/ +levelbar.horizontal block { + min-height: 6px; +} + +levelbar.horizontal.discrete block { + min-width: 36px; +} + +levelbar.horizontal.discrete block:not(:last-child) { + margin-right: 2px; +} + +levelbar.vertical block { + min-width: 6px; +} + +levelbar.vertical.discrete block { + min-height: 36px; +} + +levelbar.vertical.discrete block:not(:last-child) { + margin-bottom: 2px; +} + +levelbar trough { + border-radius: 6px; +} + +levelbar block.low { + background-color: #fdd633; +} + +levelbar block.high, +levelbar block:not(.empty) { + background-color: #a9b1d6; +} + +levelbar block.full { + background-color: #81c995; +} + +levelbar block.empty { + background-color: rgba(192, 202, 245, 0.12); +} + +/**************** + * Print dialog * +*****************/ +window.dialog.print drawing { + color: #c0caf5; + background: none; + border: none; + padding: 0; +} + +window.dialog.print drawing paper { + padding: 0; + border: 1px solid rgba(192, 202, 245, 0.12); + background-color: #1a1b26; + color: #c0caf5; +} + +window.dialog.print .dialog-action-box { + margin: 12px; +} + +/********** + * Frames * + **********/ +frame, +.frame { + border: 1px solid rgba(192, 202, 245, 0.12); +} + +frame > list, +.frame > list { + border: none; +} + +frame.view, +.frame.view { + border-radius: 6px; +} + +frame.flat, +.frame.flat { + border-style: none; +} + +frame { + border-radius: 6px; +} + +frame > label { + margin: 4px; +} + +frame.flat > border, +statusbar frame > border { + border: none; +} + +actionbar > revealer > box { + padding: 6px; + border-spacing: 6px; + border-top: 1px solid rgba(192, 202, 245, 0.12); + background-color: #1a1b26; + background-clip: border-box; + box-shadow: none; +} + +statusbar { + padding: 6px 18px; +} + +scrolledwindow viewport.frame { + border: none; +} + +stack scrolledwindow.frame viewport.frame list { + border: none; +} + +overshoot.top { + background-size: 200% 70%; + background-image: radial-gradient( + farthest-side at top, + rgba(169, 177, 214, 0.24) 99%, + rgba(169, 177, 214, 0) 100% + ); + background-repeat: no-repeat; + background-position: center top; + background-color: transparent; + border: none; + box-shadow: none; +} + +overshoot.bottom { + background-size: 200% 70%; + background-image: radial-gradient( + farthest-side at bottom, + rgba(169, 177, 214, 0.24) 99%, + rgba(169, 177, 214, 0) 100% + ); + background-repeat: no-repeat; + background-position: center bottom; + background-color: transparent; + border: none; + box-shadow: none; +} + +overshoot.left { + background-size: 200% 70%; + background-image: radial-gradient( + farthest-side at left, + rgba(169, 177, 214, 0.24) 99%, + rgba(169, 177, 214, 0) 100% + ); + background-repeat: no-repeat; + background-position: left center; + background-color: transparent; + border: none; + box-shadow: none; +} + +overshoot.right { + background-size: 200% 70%; + background-image: radial-gradient( + farthest-side at right, + rgba(169, 177, 214, 0.24) 99%, + rgba(169, 177, 214, 0) 100% + ); + background-repeat: no-repeat; + background-position: right center; + background-color: transparent; + border: none; + box-shadow: none; +} + +junction { + border-style: solid none none solid; + border-width: 1px; + border-color: rgba(192, 202, 245, 0.12); + background-color: #1a1b26; +} + +junction:dir(rtl) { + border-style: solid solid none none; +} + +separator:not(.spacer) { + min-width: 1px; + min-height: 1px; + background-color: rgba(192, 202, 245, 0.12); +} + +stacksidebar + separator.vertical, +stacksidebar separator.horizontal, +button.font separator, +button.file separator { + min-width: 0; + min-height: 0; + background-color: transparent; +} + +/********* + * Lists * + *********/ +listview.boxed-list, +list.boxed-list, +listview.content:not(.conversation-listbox), +list.content:not(.conversation-listbox) { + border-radius: 7px; + box-shadow: none; + border: 1px solid rgba(192, 202, 245, 0.12); +} + +listview.boxed-list > row.expander list > row, +list.boxed-list > row.expander list > row, +listview.boxed-list > row, +list.boxed-list > row, +listview.content:not(.conversation-listbox) > row, +list.content:not(.conversation-listbox) > row { + border-radius: 0; +} + +listview.boxed-list > row.expander list > row:first-child, +list.boxed-list > row.expander list > row:first-child, +listview.boxed-list > row:first-child, +list.boxed-list > row:first-child, +listview.content:not(.conversation-listbox) > row:first-child, +list.content:not(.conversation-listbox) > row:first-child { + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} + +listview.boxed-list > row.expander list > row:last-child, +list.boxed-list > row.expander list > row:last-child, +listview.boxed-list > row:last-child, +list.boxed-list > row:last-child, +listview.content:not(.conversation-listbox) > row:last-child, +list.content:not(.conversation-listbox) > row:last-child { + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; +} + +listview.boxed-list > row.expander list > row:only-child, +list.boxed-list > row.expander list > row:only-child, +listview.boxed-list > row:only-child, +list.boxed-list > row:only-child, +listview.content:not(.conversation-listbox) > row:only-child, +list.content:not(.conversation-listbox) > row:only-child { + border-radius: 6px; +} + +listview.boxed-list > row.expander list > row:not(:last-child), +list.boxed-list > row.expander list > row:not(:last-child), +listview.boxed-list > row:not(:last-child), +list.boxed-list > row:not(:last-child), +listview.content:not(.conversation-listbox) > row:not(:last-child), +list.content:not(.conversation-listbox) > row:not(:last-child) { + border-bottom: 1px solid rgba(192, 202, 245, 0.12); +} + +listview.boxed-list > row.expander list > row:focus, +list.boxed-list > row.expander list > row:focus, +listview.boxed-list > row:focus, +list.boxed-list > row:focus, +listview.content:not(.conversation-listbox) > row:focus, +list.content:not(.conversation-listbox) > row:focus { + box-shadow: inset 0 0 0 1000px alpha(currentColor, 0.08); +} + +listview, +list { + border-color: rgba(192, 202, 245, 0.12); + background-color: #1a1b26; + color: rgba(192, 202, 245, 0.7); +} + +listview row, +list row { + padding: 2px; + color: rgba(192, 202, 245, 0.7); +} + +listview > row.expander, +list > row.expander { + padding: 0px; +} + +listview > row.expander .row-header, +list > row.expander .row-header { + padding: 2px; +} + +listview.boxed-list > row.expander list, +list.boxed-list > row.expander list { + background-color: transparent; + box-shadow: none; + border: none; +} + +list.frame { + border-radius: 6px; +} + +listview.view { + color: #c0caf5; + background-color: transparent; +} + +popover.menu listview.view { + padding: 0; +} + +popover.menu listview.view > row { + margin-left: 0; + margin-right: 0; +} + +popover.menu listview.view > row:first-child, +popover.menu listview.view > row:last-child, +popover.menu listview.view > row { + border-radius: 6px; +} + +row { + color: rgba(192, 202, 245, 0.7); + background-clip: padding-box; +} + +row label.subtitle { + font-size: smaller; +} + +row > box.header { + margin-left: 12px; + margin-right: 12px; + min-height: 48px; +} + +row > box.header > .icon:disabled { + filter: opacity(0.35); +} + +row > box.header > box.title { + margin-top: 6px; + margin-bottom: 6px; + border-spacing: 3px; +} + +columnview.view > header > button, +treeview.view > header > button, +row.activatable { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1); + outline: none; + box-shadow: inset 0 0 0 9999px transparent; +} + +columnview.view > header > button:focus, +treeview.view > header > button:focus, +row.activatable:focus { + box-shadow: inset 0 0 0 9999px alpha(currentColor, 0.08); +} + +columnview.view > header > button:hover, +treeview.view > header > button:hover, +row.activatable:hover { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), box-shadow 0ms; + box-shadow: inset 0 0 0 9999px alpha(currentColor, 0.08); +} + +columnview.view > header > button.has-open-popup, +treeview.view > header > button.has-open-popup, +columnview.view > header > button:active, +treeview.view > header > button:active, +row.activatable.has-open-popup, +row.activatable:active { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: inset 0 0 0 9999px alpha(currentColor, 0.12); +} + +button row.activatable:focus, +button row.activatable:hover, +button row.activatable:active { + box-shadow: none; +} + +button:checked row.activatable { + color: rgba(0, 0, 0, 0.87); +} + +row:selected image, +row:selected label { + color: #c0caf5; +} + +row:selected button image, +row:selected button label { + color: inherit; +} + +row:selected:disabled image, +row:selected:disabled label { + color: rgba(192, 202, 245, 0.5); +} + +treeexpander { + border-spacing: 4px; +} + +columnview row:not(:selected) cell editablelabel:not(.editing):focus-within { + outline: 2px solid alpha(currentColor, 0.06); +} + +columnview row:not(:selected) cell editablelabel.editing:focus-within { + outline: 2px solid #a9b1d6; +} + +columnview row:not(:selected) cell editablelabel.editing text selection { + color: rgba(0, 0, 0, 0.87); + background-color: #a9b1d6; +} + +.rich-list { + /* rich lists usually containing other widgets than just labels/text */ +} + +.rich-list > row { + padding: 9px 12px; + min-height: 32px; + /* should be tall even when only containing a label */ +} + +.rich-list > row > box { + border-spacing: 12px; +} + +/********************* + * App Notifications * + *********************/ +.app-notification { + margin: 8px; + border-spacing: 9px; + padding: 9px; + border: none; +} + +.app-notification button.text-button:not(:disabled) { + color: #a9b1d6; +} + +.app-notification.frame, +.app-notification border { + border-style: none; +} + +/************* + * Expanders * + *************/ +expander { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1); + min-width: 16px; + min-height: 16px; + color: rgba(192, 202, 245, 0.7); + -gtk-icon-source: -gtk-icontheme('pan-end-symbolic'); +} + +expander:dir(rtl) { + -gtk-icon-source: -gtk-icontheme('pan-end-symbolic-rtl'); +} + +expander:hover, +expander:active { + color: #c0caf5; +} + +expander:disabled { + color: rgba(192, 202, 245, 0.3); +} + +expander-widget > box > title { + border-radius: 6px; +} + +expander-widget > box > title:hover > expander { + color: rgba(192, 202, 245, 0.7); +} + +.navigation-sidebar:not(decoration):not(window):drop(active):focus, +.navigation-sidebar:not(decoration):not(window):drop(active), +placessidebar:not(decoration):not(window):drop(active):focus, +placessidebar:not(decoration):not(window):drop(active), +stackswitcher:not(decoration):not(window):drop(active):focus, +stackswitcher:not(decoration):not(window):drop(active), +expander-widget:not(decoration):not(window):drop(active):focus, +expander-widget:not(decoration):not(window):drop(active) { + box-shadow: none; +} + +/************ + * Calendar * + ************/ +calendar { + padding: 0; + border: 1px solid rgba(192, 202, 245, 0.12); + border-radius: 6px; + color: #c0caf5; +} + +calendar:disabled { + color: rgba(192, 202, 245, 0.5); +} + +calendar:selected { + border-radius: 6px; +} + +calendar > header { + padding: 3px; + border-bottom: 1px solid rgba(192, 202, 245, 0.12); +} + +calendar > header > button { + min-height: 24px; +} + +calendar > grid { + margin: 3px; +} + +calendar > grid > label { + border-radius: 9999px; + margin: 0; +} + +calendar > grid > label.today { + box-shadow: none; +} + +calendar > grid > label.today:selected { + box-shadow: none; +} + +calendar > grid > label:focus { + outline-style: none; +} + +calendar > grid > label.day-number { + padding: 9px; +} + +calendar > grid > label.day-number:selected { + color: #c0caf5; + background-color: alpha(currentColor, 0.06); +} + +calendar > grid > label.day-number.other-month { + color: alpha(currentColor, 0.3); +} + +/*********** + * Dialogs * + ***********/ +window.dialog.message.background { + background-color: #292e42; +} + +window.dialog.message box.dialog-vbox.vertical { + border-spacing: 10px; +} + +window.dialog.message .titlebar { + min-height: 24px; + border-style: none; + box-shadow: inset 0 1px rgba(192, 202, 245, 0.1); + background-color: #292e42; + color: #c0caf5; +} + +window.dialog.message .titlebar:backdrop { + background-color: #292e42; + color: rgba(192, 202, 245, 0.7); +} + +window.dialog.message.csd .dialog-action-area { + margin-top: -6px; + padding: 6px; +} + +window.dialog.message.csd .dialog-action-area > button, +window.dialog.message.csd .dialog-action-area > button:first-child, +window.dialog.message.csd .dialog-action-area > button:last-child { + border-radius: 6px; +} + +window.dialog.message.csd .dialog-action-area > button:not(:last-child) { + margin-right: 6px; +} + +window.dialog.message.csd .dialog-action-area > button:not(:disabled) { + color: #a9b1d6; +} + +window.dialog.message.csd + .dialog-action-area + > button.destructive-action:not(:disabled) { + color: #f28b82; +} + +window.background.csd.dialog > headerbar.titlebar { + box-shadow: inset 0 -1px rgba(192, 202, 245, 0.12); +} + +window.aboutdialog.background.csd scrolledwindow.frame, +window.aboutdialog.background.csd scrolledwindow.frame > viewport.view, +window.aboutdialog.background.csd scrolledwindow.frame > textview.view, +window.aboutdialog.background.csd scrolledwindow.frame > textview.view > text { + border-radius: 6px; +} + +filechooser .dialog-action-box { + border-top: 1px solid rgba(192, 202, 245, 0.12); +} + +filechooser #pathbarbox { + border-bottom: 1px solid rgba(192, 202, 245, 0.12); + background-color: #1a1b26; +} + +filechooser stack.view frame > border { + border: none; +} + +filechooserbutton > button > box { + border-spacing: 6px; +} + +filechooserbutton:drop(active) { + box-shadow: none; + border-color: transparent; +} + +/*********** + * Sidebar * + ***********/ +.sidebar { + border-style: none; +} + +.sidebar:not(separator):dir(ltr), +.sidebar.left:not(separator), +.sidebar.left:not(separator):dir(rtl) { + border-right: 1px solid rgba(192, 202, 245, 0.12); + border-left-style: none; +} + +.sidebar:not(separator):dir(rtl), +.sidebar.right:not(separator) { + border-left: 1px solid rgba(192, 202, 245, 0.12); + border-right-style: none; +} + +separator + .sidebar:not(separator):dir(ltr), +separator + .sidebar.left:not(separator), +separator + .sidebar.left:not(separator):dir(rtl), +separator + box > .sidebar:not(separator):dir(ltr), +separator + box > .sidebar.left:not(separator), +separator + box > .sidebar.left:not(separator):dir(rtl) { + border-right: none; +} + +separator + .sidebar:not(separator):dir(rtl), +separator + .sidebar.right:not(separator), +separator + box > .sidebar:not(separator):dir(rtl), +separator + box > .sidebar.right:not(separator) { + border-left: none; +} + +.sidebar listview.view, +.sidebar list { + background-color: transparent; +} + +paned .sidebar.left, +paned .sidebar.right, +paned .sidebar.left:dir(rtl), +paned .sidebar:dir(rtl), +paned .sidebar:dir(ltr), +paned .sidebar { + border-style: none; +} + +leaflet.unfolded > box > stacksidebar.sidebar { + border: none; +} + +stacksidebar list { + padding: 4px 0; +} + +stacksidebar row { + min-height: 24px; + padding: 6px 9px; + border-radius: 6px; + margin: 2px 6px; +} + +stacksidebar row:selected { + font-weight: 500; +} + +stacksidebar row > label { + padding-left: 6px; + padding-right: 6px; + color: inherit; +} + +separator.sidebar { + background-color: rgba(192, 202, 245, 0.12); + border-right: none; +} + +separator.sidebar.selection-mode, +.selection-mode separator.sidebar { + background-color: rgba(192, 202, 245, 0.15); +} + +/********************** + * Navigation Sidebar * + **********************/ +.navigation-sidebar { + border-right: none; + margin: 0 4px; +} + +.navigation-sidebar > row { + min-height: 32px; + padding: 2px 4px; + margin: 1px 0; + border-radius: 6px; +} + +.navigation-sidebar > row:hover, +.navigation-sidebar > row:focus-visible:focus-within { + background-color: alpha(currentColor, 0.16); +} + +.navigation-sidebar > row:selected label, +.navigation-sidebar > row:selected image { + color: #0db9d7; + font-weight: 500; +} + +.navigation-sidebar > row:selected:hover { + background-color: #292e42; +} + +.navigation-sidebar > row:selected:focus-visible:focus-within { + outline: none; + background-color: alpha(currentColor, 0.08); +} + +.navigation-sidebar > row:selected:focus-visible:focus-within:hover { + background-color: alpha(currentColor, 0.16); +} + +.navigation-sidebar > row:disabled { + color: rgba(192, 202, 245, 0.5); +} + +.navigation-sidebar > separator { + margin: 3px 0; +} + +/**************** + * File chooser * + ****************/ +row image.sidebar-icon { + transition: color 75ms cubic-bezier(0, 0, 0.2, 1); + color: rgba(192, 202, 245, 0.7); +} + +row image.sidebar-icon:disabled { + color: rgba(192, 202, 245, 0.3); +} + +placessidebar > viewport.frame { + border-style: none; +} + +placessidebar .navigation-sidebar > row:selected { + font-weight: 500; +} + +placessidebar .navigation-sidebar > row image.sidebar-icon:dir(ltr) { + padding-right: 8px; +} + +placessidebar .navigation-sidebar > row image.sidebar-icon:dir(rtl) { + padding-left: 8px; +} + +placessidebar .navigation-sidebar > row label.sidebar-label { + color: inherit; +} + +placessidebar .navigation-sidebar > row label.sidebar-label:dir(ltr) { + padding-right: 2px; +} + +placessidebar .navigation-sidebar > row label.sidebar-label:dir(rtl) { + padding-left: 2px; +} + +placessidebar .navigation-sidebar > row.sidebar-placeholder-row { + background-color: alpha(currentColor, 0.08); +} + +placessidebar .navigation-sidebar > row.sidebar-new-bookmark-row { + color: #a9b1d6; +} + +placessidebar + .navigation-sidebar + > row.sidebar-new-bookmark-row + image.sidebar-icon { + color: #a9b1d6; +} + +placessidebar .navigation-sidebar > row:drop(active) { + transition: all 75ms cubic-bezier(0, 0, 0.2, 1), box-shadow 0ms; + box-shadow: inset 0 0 0 9999px alpha(currentColor, 0.08); +} + +placesview .server-list-button > image { + transition: 200ms cubic-bezier(0, 0, 0.2, 1); + -gtk-icon-transform: rotate(0turn); +} + +placesview .server-list-button:checked > image { + transition: 200ms cubic-bezier(0, 0, 0.2, 1); + -gtk-icon-transform: rotate(-0.5turn); +} + +placesview > actionbar > revealer > box > label { + border-spacing: 6px; +} + +/********* + * Paned * + *********/ +paned > separator { + min-width: 1px; + min-height: 1px; + -gtk-icon-source: none; + border: none; + box-shadow: none; + background-color: transparent; + background-image: image(#414868); + background-size: 1px 1px; + background-clip: content-box; +} + +paned > separator.wide { + min-width: 6px; + min-height: 6px; + background-color: #1a1b26; + background-image: image(#414868), image(#414868); + background-size: 1px 1px, 1px 1px; +} + +paned.horizontal > separator { + background-repeat: repeat-y; +} + +paned.horizontal > separator:dir(ltr) { + margin: 0 -8px 0 0; + padding: 0 8px 0 0; + background-position: left; +} + +paned.horizontal > separator:dir(rtl) { + margin: 0 0 0 -8px; + padding: 0 0 0 8px; + background-position: right; +} + +paned.horizontal > separator.wide { + margin: 0; + padding: 0; + background-repeat: repeat-y, repeat-y; + background-position: left, right; +} + +paned.vertical > separator { + margin: 0 0 -8px 0; + padding: 0 0 8px 0; + background-repeat: repeat-x; + background-position: top; +} + +paned.vertical > separator.wide { + margin: 0; + padding: 0; + background-repeat: repeat-x, repeat-x; + background-position: bottom, top; +} + +/************ + * GtkVideo * + ************/ +video { + background: black; + border-radius: 6px; +} + +video image.osd { + min-width: 64px; + min-height: 64px; + border-radius: 9999px; + border: none; +} + +/************** + * GtkInfoBar * + **************/ +infobar { + border: none; + margin-bottom: 0; +} + +infobar > revealer > box { + padding: 6px; + border-spacing: 12px; +} + +infobar.info > revealer > box button, +infobar.info > revealer > box button.text-button:not(:disabled), +infobar.info:hover > revealer > box button, +infobar.info:hover > revealer > box button.text-button:not(:disabled), +infobar.info:backdrop > revealer > box button, +infobar.info:backdrop > revealer > box button.text-button:not(:disabled) { + color: #a9b1d6; +} + +infobar.action > revealer > box, +infobar.action:backdrop > revealer > box, +infobar.question > revealer > box, +infobar.question:backdrop > revealer > box { + background-color: #24283b; + color: #a9b1d6; + border-radius: 6px; +} + +infobar.action > revealer > box button, +infobar.action > revealer > box button:hover, +infobar.action > revealer > box button:focus, +infobar.action > revealer > box button:active, +infobar.action > revealer > box button:checked, +infobar.action > revealer > box button.text-button:not(:disabled), +infobar.action:backdrop > revealer > box button, +infobar.action:backdrop > revealer > box button:hover, +infobar.action:backdrop > revealer > box button:focus, +infobar.action:backdrop > revealer > box button:active, +infobar.action:backdrop > revealer > box button:checked, +infobar.action:backdrop > revealer > box button.text-button:not(:disabled), +infobar.question > revealer > box button, +infobar.question > revealer > box button:hover, +infobar.question > revealer > box button:focus, +infobar.question > revealer > box button:active, +infobar.question > revealer > box button:checked, +infobar.question > revealer > box button.text-button:not(:disabled), +infobar.question:backdrop > revealer > box button, +infobar.question:backdrop > revealer > box button:hover, +infobar.question:backdrop > revealer > box button:focus, +infobar.question:backdrop > revealer > box button:active, +infobar.question:backdrop > revealer > box button:checked, +infobar.question:backdrop > revealer > box button.text-button:not(:disabled) { + color: #c0caf5; +} + +infobar.action > revealer > box *:link, +infobar.action:backdrop > revealer > box *:link, +infobar.question > revealer > box *:link, +infobar.question:backdrop > revealer > box *:link { + color: rgba(0, 0, 0, 0.87); +} + +infobar.action:hover > revealer > box, +infobar.question:hover > revealer > box { + background-color: #292e42; + color: #a9b1d6; + border-radius: 6px; +} + +infobar.warning > revealer > box, +infobar.warning:backdrop > revealer > box { + background-color: #fdd633; + color: rgba(0, 0, 0, 0.87); +} + +infobar.warning > revealer > box button, +infobar.warning > revealer > box button:hover, +infobar.warning > revealer > box button:focus, +infobar.warning > revealer > box button:active, +infobar.warning > revealer > box button:checked, +infobar.warning > revealer > box button.text-button:not(:disabled), +infobar.warning:backdrop > revealer > box button, +infobar.warning:backdrop > revealer > box button:hover, +infobar.warning:backdrop > revealer > box button:focus, +infobar.warning:backdrop > revealer > box button:active, +infobar.warning:backdrop > revealer > box button:checked, +infobar.warning:backdrop > revealer > box button.text-button:not(:disabled) { + color: rgba(0, 0, 0, 0.87); +} + +infobar.warning > revealer > box *:link, +infobar.warning:backdrop > revealer > box *:link { + color: rgba(0, 0, 0, 0.87); +} + +infobar.warning:hover > revealer > box { + background-color: #fdd11a; +} + +infobar.error > revealer > box, +infobar.error:backdrop > revealer > box { + background-color: #f28b82; + color: rgba(0, 0, 0, 0.87); +} + +infobar.error > revealer > box button, +infobar.error > revealer > box button:hover, +infobar.error > revealer > box button:focus, +infobar.error > revealer > box button:active, +infobar.error > revealer > box button:checked, +infobar.error > revealer > box button.text-button:not(:disabled), +infobar.error:backdrop > revealer > box button, +infobar.error:backdrop > revealer > box button:hover, +infobar.error:backdrop > revealer > box button:focus, +infobar.error:backdrop > revealer > box button:active, +infobar.error:backdrop > revealer > box button:checked, +infobar.error:backdrop > revealer > box button.text-button:not(:disabled) { + color: rgba(0, 0, 0, 0.87); +} + +infobar.error > revealer > box *:link, +infobar.error:backdrop > revealer > box *:link { + color: rgba(0, 0, 0, 0.87); +} + +infobar.error:hover > revealer > box { + background-color: #f0766b; +} + +/************ + * Tooltips * + ************/ +tooltip { + border: none; + background-clip: padding-box; + padding: 6px 12px; + box-shadow: none; +} + +tooltip.background { + background-color: rgba(25, 25, 25, 0.9); + color: #c0caf5; + box-shadow: 0 2px 2.4px -1px rgba(0, 0, 0, 0.2), + 0 4px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 6px 0 rgba(0, 0, 0, 0.12); + border-radius: 6px; + margin: 2px 6px 8px 6px; +} + +tooltip > box { + border-spacing: 6px; +} + +/***************** + * Color Chooser * + *****************/ +colorswatch.top { + border-top-left-radius: 12px; + border-top-right-radius: 12px; +} + +colorswatch.top overlay { + border-top-left-radius: 12px; + border-top-right-radius: 12px; +} + +colorswatch.bottom { + border-bottom-left-radius: 12px; + border-bottom-right-radius: 12px; +} + +colorswatch.bottom overlay { + border-bottom-left-radius: 12px; + border-bottom-right-radius: 12px; +} + +colorswatch.left, +colorswatch:first-child:not(.top) { + border-top-left-radius: 12px; + border-bottom-left-radius: 12px; +} + +colorswatch.left overlay, +colorswatch:first-child:not(.top) overlay { + border-top-left-radius: 12px; + border-bottom-left-radius: 12px; +} + +colorswatch.right, +colorswatch:last-child:not(.bottom) { + border-top-right-radius: 12px; + border-bottom-right-radius: 12px; +} + +colorswatch.right overlay, +colorswatch:last-child:not(.bottom) overlay { + border-top-right-radius: 12px; + border-bottom-right-radius: 12px; +} + +colorswatch.dark { + color: #c0caf5; +} + +colorswatch.light { + color: rgba(0, 0, 0, 0.87); +} + +colorswatch#add-color-button { + border-radius: 12px 12px 0 0; + color: #c0caf5; +} + +colorswatch#add-color-button:only-child { + border-radius: 12px; +} + +colorswatch#add-color-button overlay { + background-color: #292e42; +} + +colorswatch:disabled { + opacity: 0.5; +} + +colorswatch:disabled overlay { + box-shadow: none; +} + +colorswatch#editor-color-sample { + border-radius: 12px; +} + +colorswatch#editor-color-sample overlay { + border-radius: 12px; +} + +colorchooser .popover.osd { + transition: box-shadow 75ms cubic-bezier(0, 0, 0.2, 1); + border-radius: 6px; + box-shadow: 0 2px 2.4px -1px rgba(0, 0, 0, 0.2), + 0 4px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 6px 0 rgba(0, 0, 0, 0.12), + inset 0 1px rgba(192, 202, 245, 0.1); + background-color: #292e42; +} + +colorchooser .popover.osd:backdrop { + box-shadow: 0 3px 2px -3px rgba(0, 0, 0, 0.3), + 0 2px 2px -1px rgba(0, 0, 0, 0.24), 0 1px 3px 0 rgba(0, 0, 0, 0.12), + inset 0 1px rgba(192, 202, 245, 0.1); +} + +/******** + * Misc * + ********/ +.content-view { + background-color: #1a1b26; +} + +/********************** + * Window Decorations * + **********************/ +window.csd { + transition: box-shadow 75ms cubic-bezier(0, 0, 0.2, 1); + border-radius: 12px; + outline-color: rgba(192, 202, 245, 0.2); + outline-offset: -1px; + outline-style: solid; + outline-width: 1px; + box-shadow: 0 8px 6px -5px rgba(0, 0, 0, 0.2), + 0 16px 15px 2px rgba(0, 0, 0, 0.14), 0 6px 18px 5px rgba(0, 0, 0, 0.12), + 0 0 0 1px rgba(0, 0, 0, 0.75), 0 0 36px transparent; +} + +window.csd { + border-radius: 12px; +} + +window:backdrop { + box-shadow: 0 2px 3px -1px rgba(0, 0, 0, 0.15), + 0 4px 3px 0 rgba(0, 0, 0, 0.18), 0 1px 6px 0 rgba(0, 0, 0, 0.12), + 0 0 0 1px rgba(0, 0, 0, 0.75), 0 0 36px transparent; +} + +window.popup { + border-radius: 12px; + box-shadow: none; +} + +window.dialog.message { + border-radius: 12px; +} + +window.solid-csd { + margin: 0; + padding: 2px; + border-radius: 0; + background-color: #1a1b26; + border: 1px solid #414868; +} + +window.solid-csd:backdrop { + background-color: #1a1b26; +} + +window.maximized, +window.fullscreen, +window.tiled, +window.tiled-top, +window.tiled-right, +window.tiled-bottom, +window.tiled-left { + border-radius: 0; + outline-width: 0; +} + +windowcontrols { + border-spacing: 6px; +} + +windowcontrols.start:not(.empty):dir(ltr), +windowcontrols.end:not(.empty):dir(rtl) { + margin-left: 6px; + margin-right: 6px; +} + +windowcontrols.start:not(.empty):dir(rtl), +windowcontrols.end:not(.empty):dir(ltr) { + margin-left: 6px; + margin-right: 6px; +} + +windowcontrols button:not(.suggested-action):not(.destructive-action) { + min-height: 24px; + min-width: 24px; + padding: 0; + margin: 0 2px; + border-radius: 50%; +} + +windowcontrols button:not(.suggested-action):not(.destructive-action) image { + background: none; +} + +windowcontrols + button.close:not(.suggested-action):not(.destructive-action):hover { + background-color: #0db9d7; + color: #1a1b26; +} + +windowcontrols + button.close:not(.suggested-action):not(.destructive-action):active { + background-color: #ff9e64; + color: #1a1b26; +} + +gridview > child:selected, +row:selected, +calendar:selected { + background-color: alpha(currentColor, 0.06); +} + +.view:selected, +iconview:selected, +flowbox > flowboxchild:selected, +calendar > grid > label.today { + color: #a9b1d6; + background-color: rgba(169, 177, 214, 0.2); +} + +text > selection, +label > selection, +calendar > grid > label.today:selected, +stacksidebar row:selected, +.navigation-sidebar > row:selected { + color: #a9b1d6; + background-color: #24283b; +} + +.monospace { + font-family: monospace; +} + +/********************** + * Touch Copy & Paste * + **********************/ +cursor-handle { + color: #a9b1d6; + -gtk-icon-source: -gtk-recolor( + url('assets/scalable/cursor-handle-symbolic.svg') + ); +} + +cursor-handle.insertion-cursor:dir(ltr), +cursor-handle.insertion-cursor:dir(rtl) { + padding-top: 6px; +} + +shortcuts-section { + margin: 20px; +} + +.shortcuts-search-results { + margin: 20px; + border-spacing: 24px; +} + +shortcut { + border-spacing: 6px; +} + +shortcut > .keycap { + min-width: 12px; + min-height: 26px; + margin-top: 2px; + padding-bottom: 2px; + padding-left: 8px; + padding-right: 8px; + border: solid 1px rgba(192, 202, 245, 0.12); + border-radius: 7px; + box-shadow: inset 0 -2px rgba(192, 202, 245, 0.12); + background-color: #292e42; + color: #c0caf5; + font-size: smaller; +} + +:not(decoration):not(window):drop(active) { + caret-color: #a9b1d6; +} + +stackswitcher { + min-height: 0; + border-radius: 9999px; + padding: 0; + background-color: alpha(currentColor, 0.05); +} + +stackswitcher.linked:not(.vertical) + > button:not(.suggested-action):not(.destructive-action) { + margin: 0 0; +} + +stackswitcher.linked:not(.vertical) + > button:not(.suggested-action):not(.destructive-action):not(:hover):not(:active):not(:checked) { + background-color: transparent; +} + +stackswitcher.linked:not(.vertical) + > button:not(.suggested-action):not(.destructive-action):first-child, +stackswitcher.linked:not(.vertical) + > button:not(.suggested-action):not(.destructive-action):last-child, +stackswitcher.linked:not(.vertical) + > button:not(.suggested-action):not(.destructive-action) { + border-radius: 9999px; +} + +stackswitcher.linked:not(.vertical) + > button.text-button:not(.suggested-action):not(.destructive-action) { + min-width: 100px; +} + +stackswitcher button.text-button { + min-width: 100px; +} + +stackswitcher.circular { + border-spacing: 12px; +} + +stackswitcher.circular button.circular, +stackswitcher.circular button.text-button.circular { + min-width: 36px; + min-height: 36px; + padding: 0; +} + +/************* + * App Icons * + *************/ +.lowres-icon { + -gtk-icon-shadow: none; +} + +.icon-dropshadow { + -gtk-icon-shadow: none; +} + +/********* + * Emoji * + *********/ +popover.emoji-picker { + padding: 0; +} + +popover.emoji-picker > contents { + padding: 0; +} + +.emoji-searchbar { + padding: 6px; + border-spacing: 6px; + border-bottom: 1px solid rgba(192, 202, 245, 0.12); + background: none; +} + +.emoji-searchbar entry text { + background: none; + box-shadow: none; +} + +.emoji-toolbar { + padding: 0; + border-spacing: 3px; + border-top: 1px solid rgba(192, 202, 245, 0.12); + background: none; +} + +button.emoji-section { + margin: 0; + padding: 6px; + border-radius: 6px; +} + +button.emoji-section:checked { + color: #a9b1d6; +} + +popover.emoji-picker emoji { + font-size: x-large; + padding: 6px; + transition: all 75ms cubic-bezier(0, 0, 0.2, 1); + border-radius: 6px; +} + +popover.emoji-picker emoji:focus, +popover.emoji-picker emoji:hover { + background: alpha(currentColor, 0.08); +} + +emoji-completion-row { + min-height: 28px; + padding: 0 12px; +} + +emoji-completion-row > box { + border-spacing: 6px; + padding: 2px 6px; +} + +emoji-completion-row:focus, +emoji-completion-row:hover, +emoji-completion-row emoji:hover, +emoji-completion-row emoji:focus { + background-color: alpha(currentColor, 0.08); + color: #c0caf5; +} + +popover.entry-completion > contents { + padding: 0; +} + +.nautilus-window { + background-color: #1a1b26; +} + +.nautilus-window:backdrop { + background-color: #1a1b26; +} + +.nautilus-window headerbar { + box-shadow: none; +} + +.nautilus-window separator.spacer { + padding-right: 1.5em; +} + +.nautilus-window flap.unfolded > placessidebar { + background-color: transparent; + color: rgba(192, 202, 245, 0.7); + padding: 0 0 0 2px; + margin: 0 0 0 2px; +} + +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar { + background: none; + padding: 0 0 0 2px; + margin: 0 0 0 2px; +} + +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > separator { + background: rgba(192, 202, 245, 0.1); +} + +.nautilus-window .vertical separator { + background: none; +} + +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > row.activatable { + border-radius: 6px; +} + +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > row.activatable, +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > row.activatable + image.sidebar-icon, +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > row.activatable + label.sidebar-label, +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > row.activatable + button.sidebar-button { + color: #c0caf5; +} + +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > row.activatable:hover { + background-color: rgba(192, 202, 245, 0.12); + color: #c0caf5; +} + +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > row.activatable:selected { + background-color: #24283b; + font-weight: 700; + border-left: 3px solid #f7768e; +} + +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > row.activatable:selected, +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > row.activatable:selected + image.sidebar-icon, +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > row.activatable:selected + label.sidebar-label, +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > row.activatable:selected + button.sidebar-button { + color: #0db9d7; +} + +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > row.activatable:disabled, +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > row.activatable:disabled + image.sidebar-icon, +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > viewport + > list.navigation-sidebar + > row.activatable:disabled + label.sidebar-label { + color: rgba(192, 202, 245, 0.3); +} + +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > scrollbar + > range + > though { + background: none; +} + +.nautilus-window + flap.unfolded + > placessidebar + > scrolledwindow + > scrollbar + > range + > though + > slider { + border: none; +} + +.nautilus-window .nautilus-grid-view.view { + margin: 0 6px 6px; +} + +.nautilus-window .unfolded { + background-color: #1a1b26; +} + +.nautilus-window .nautilus-grid-view.view, +.nautilus-window .nautilus-grid-view.view gridview.view { + background-color: #24283b; + border-radius: 12px; +} + +.nautilus-window flap > separator { + background: none; +} + +.nautilus-window placesview label { + color: rgba(192, 202, 245, 0.7); +} + +.nautilus-window infobar { + margin: 3px; +} + +.nautilus-window infobar > revealer > box { + border-radius: 12px; +} + +.nautilus-window label.search-information { + margin: 3px; + border-radius: 6px; +} + +.nautilus-window .floating-bar { + min-height: 32px; + padding: 0; + margin: 6px; + border-style: none; + border-radius: 6px; + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); + box-shadow: 0 3px 2px -2px rgba(0, 0, 0, 0.2), + 0 3px 2.4px 0 rgba(0, 0, 0, 0.14), 0 1px 4.8px 0 rgba(0, 0, 0, 0.12); +} + +.nautilus-window .floating-bar button { + margin: 4px; + color: rgba(0, 0, 0, 0.87); +} + +#NautilusViewCell clamp box { + margin: 0; + border-spacing: 0; +} + +#NautilusQueryEditor > menubutton > button { + min-width: 16px; + min-height: 16px; + margin: 0; +} + +#NautilusQueryEditor > text { + margin: 0; +} + +#NautilusPathBar { + background-color: #24283b; + border-radius: 6px; + margin: 6px 0; +} + +#NautilusPathBar #NautilusPathButton { + margin: 0 3px; + border-radius: 6px; +} + +#NautilusPathBar #NautilusPathButton.current-dir { + color: #0db9d7; +} + +#NautilusPathBar #NautilusPathButton.current-dir:hover, +#NautilusPathBar #NautilusPathButton.current-dir:active { + background: none; + box-shadow: none; +} + +#NautilusPathBar #NautilusPathButton:first-child { + margin-left: 0; +} + +#NautilusPathBar > menubutton { + margin: 0; +} + +#NautilusPathBar > menubutton > button { + border-radius: 9999px; +} + +#NautilusQueryEditorTag { + border-radius: 9999px; +} + +#NautilusQueryEditorTag > button { + margin: 3px; + padding: 0; + min-height: 22px; + min-width: 22px; +} + +window.dialog > box > stack > box > box > notebook.frame { + border-width: 0 0 0 1px; + border-radius: 0; +} + +.history-view { + background-color: #1a1b26; +} + +#displayitem { + border-top: 1px solid rgba(192, 202, 245, 0.12); +} + +.small .card { + border-radius: 0; + box-shadow: none; +} + +.small .card.forecast-card { + border-width: 1px 0; +} + +.small .card.display-container { + border-width: 0 0 1px 0; +} + +leaflet button.number-button { + background-color: rgba(192, 202, 245, 0.1); +} + +leaflet button.number-button:hover { + background-color: rgba(192, 202, 245, 0.2); +} + +leaflet button.number-button:active { + background-color: rgba(192, 202, 245, 0.3); +} + +leaflet button.clear-button.image-button { + border-radius: 6px; +} + +datechooser.view button.flat.pill, +datechooser.view button.circular.day { + min-height: 24px; + min-width: 24px; + padding: 6px; +} + +.contacts-contact-list list.navigation-sidebar { + background: none; +} + +flowboxchild > button.card.category-tile { + padding: 21px; + border: none; + border-radius: 6px; +} + +flowboxchild > button.card.category-tile-iconless { + padding: 9px 15px; +} + +app-context-bar > box:not(:first-child) > button.flat { + border-radius: 0; +} + +app-context-bar > box:not(:first-child) > button.flat:last-child { + border-radius: 0 6px 6px 0; +} + +app-context-bar > box:first-child > button.flat { + border-radius: 0; +} + +app-context-bar > box:first-child > button.flat:first-child { + border-radius: 6px 0 0 6px; +} + +app-context-bar > box > button.flat { + border-left-color: rgba(192, 202, 245, 0.12); +} + +carousel.card { + border: none; +} + +.context-tile-lozenge { + min-height: 28px; + min-width: 28px; + padding: 6px; +} + +.context-tile-lozenge.grey { + color: #c0caf5; + background-color: rgba(192, 202, 245, 0.12); +} + +.context-tile-lozenge.green, +.context-tile-lozenge.details-rating-0 { + color: #4cb168; + background-color: rgba(129, 201, 149, 0.15); +} + +.context-tile-lozenge.blue, +.context-tile-lozenge.details-rating-5 { + color: #2196f3; + background-color: rgba(33, 150, 243, 0.15); +} + +.context-tile-lozenge.yellow, +.context-tile-lozenge.details-rating-12 { + color: #e1b602; + background-color: rgba(253, 214, 51, 0.15); +} + +.context-tile-lozenge.details-rating-15 { + color: #ff9800; + background-color: rgba(255, 152, 0, 0.15); +} + +.context-tile-lozenge.red, +.context-tile-lozenge.details-rating-18 { + color: #eb4b3d; + background-color: rgba(242, 139, 130, 0.15); +} + +screenshot-carousel box.frame.view { + border-width: 1px 0; + border-radius: 0; +} + +/* Styling for specific category buttons. */ +.category-tile.category-create { + background: linear-gradient(180deg, #ce8cd7 0%, #2861c6 100%); + color: #c0caf5; +} + +.category-tile.category-create:hover { + background: linear-gradient( + 180deg, + shade(#ce8cd7, 1.07) 0%, + shade(#2861c6, 1.1) 100% + ); +} + +.category-tile.category-create:active { + background: linear-gradient( + 180deg, + shade(#ce8cd7, 0.95) 0%, + shade(#2861c6, 0.95) 100% + ); +} + +.category-tile.category-develop { + background: #5e5c64; + color: #c0caf5; +} + +.category-tile.category-develop:hover { + background: shade(#5e5c64, 1.2); +} + +.category-tile.category-develop:active { + background-color: shade(#5e5c64, 0.95); +} + +.category-tile.category-learn { + background: linear-gradient(180deg, #2ec27e 30%, #27a66c 100%); + color: #c0caf5; +} + +.category-tile.category-learn:hover { + background: linear-gradient( + 180deg, + shade(#2ec27e, 1.06) 30%, + shade(#27a66c, 1.06) 100% + ); +} + +.category-tile.category-learn:active { + background: linear-gradient( + 180deg, + shade(#2ec27e, 0.95) 30%, + shade(#27a66c, 0.95) 100% + ); +} + +.category-tile.category-play { + background: linear-gradient(75deg, #f9e2a7 0%, #eb5ec3 50%, #6d53e0 100%); + color: #393484; +} + +.category-tile.category-play:hover { + background: linear-gradient( + 75deg, + shade(#f9e2a7, 1.07) 0%, + shade(#eb5ec3, 1.07) 50%, + shade(#6d53e0, 1.07) 100% + ); +} + +.category-tile.category-play:active { + background: linear-gradient( + 75deg, + shade(#f9e2a7, 0.97) 0%, + shade(#eb5ec3, 0.95) 50%, + shade(#6d53e0, 1.07) 100% + ); +} + +.category-tile.category-socialize { + background: linear-gradient(90deg, #ef4e9b 0%, #f77466 100%); + color: rgba(192, 202, 245, 0.7); +} + +.category-tile.category-socialize:hover { + background: linear-gradient( + 90deg, + shade(#ef4e9b, 1.08) 0%, + shade(#f77466, 1.08) 100% + ); +} + +.category-tile.category-socialize:active { + background: linear-gradient( + 90deg, + shade(#ef4e9b, 0.95) 0%, + shade(#f77466, 0.95) 100% + ); +} + +.category-tile.category-work { + padding: 1px; + /* FIXME: work around https://gitlab.gnome.org/GNOME/gtk/-/issues/4324 */ + color: #1c71d8; + background-color: #fdf8d7; + background-image: linear-gradient( + rgba(192, 202, 245, 0.12) 1px, + transparent 1px + ), + linear-gradient(90deg, rgba(192, 202, 245, 0.12) 1px, transparent 1px); + background-size: 10px 10px, 10px 10px; + background-position: -1px -4px, center -1px; +} + +.category-tile.category-work:hover { + background-color: #fefcef; + background-image: linear-gradient( + rgba(192, 202, 245, 0.12) 1px, + transparent 1px + ), + linear-gradient(90deg, rgba(192, 202, 245, 0.12) 1px, transparent 1px); +} + +.category-tile.category-work:active { + background-color: #fcf4bf; + background-image: linear-gradient( + rgba(192, 202, 245, 0.12) 1px, + transparent 1px + ), + linear-gradient(90deg, rgba(192, 202, 245, 0.12) 1px, transparent 1px); +} + +.polari-room-list .sidebar { + background: none; +} + +.polari-room-list .sidebar > row.activatable:selected { + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); +} + +.polari-room-list popover.background > arrow, +.polari-room-list popover.background > contents { + padding: 0; +} + +window.org-gnome-Builder headerbar { + box-shadow: inset 0 -1px rgba(192, 202, 245, 0.12); +} + +window.org-gnome-Builder headerbar splitbutton button { + border-radius: 6px; +} + +window.org-gnome-Builder headerbar splitbutton notification button { + margin: 0; + min-height: 24px; + min-width: 24px; + padding: 0; +} + +window.org-gnome-Builder headerbar menubutton > button { + border-radius: 6px; + padding: 6px 9px; +} + +window.org-gnome-Builder headerbar paneltogglebutton button { + border-radius: 6px; +} + +popover.background.global-search > arrow, +popover.background.global-search > contents { + padding: 0; +} + +panelframeswitcher { + padding: 6px; +} + +.frameheader.header { + min-height: 24px; + background-color: rgba(192, 202, 245, 0.04); +} + +.frameheader.header > button { + border: none; + margin: 0; + padding: 3px; +} + +.frameheader.header tabbar.inline > revealer > box { + min-height: 24px; +} + +.frameheader.header tabbar.inline > revealer > box .start-action { + padding: 0; + border: none; +} + +.frameheader.header tabbar.inline > revealer > box .end-action { + padding: 0; + border-left: 1px solid rgba(192, 202, 245, 0.12); +} + +.frameheader.header + tabbar.inline + > revealer + > box + .end-action + menubutton + > button { + margin: 6px; + min-height: 24px; + min-width: 24px; + padding: 3px; + border-radius: 6px; +} + +.frameheader.header tabbar.inline > revealer > box tabbox { + border: none; + background: none; +} + +panelstatusbar { + background-color: #1a1b26; +} + +panelstatusbar > menubutton > button, +panelstatusbar > paneltogglebutton button.image-button { + border-radius: 0; +} + +.style-variant { + padding: 0 12px; +} + +.style-variant button.toggle { + padding: 0; +} + +.style-variant button.toggle, +.style-variant button.toggle:hover, +.style-variant button.toggle:focus, +.style-variant button.toggle:active, +.style-variant button.toggle:checked { + background: none; + outline: none; + border: none; + box-shadow: none; +} + +.style-variant button.toggle > stylevariantpreview > .wallpaper { + border-radius: 6px; + outline-color: transparent; + outline-width: 3px; + outline-offset: 3px; + outline-style: solid; + box-shadow: none; +} + +.style-variant button.toggle:hover > stylevariantpreview > .wallpaper { + outline-color: rgba(192, 202, 245, 0.04); +} + +.style-variant button.toggle:active > stylevariantpreview > .wallpaper { + outline-color: rgba(192, 202, 245, 0.3); +} + +.style-variant button.toggle:checked > stylevariantpreview > .wallpaper { + outline-color: #a9b1d6; +} + +window.dialog + > .dialog-vbox + > box + > scrolledwindow + > viewport + > widget + > list.boxed-list { + border: none; + border-radius: 0; +} + +window.dialog + > .dialog-vbox + > box + > scrolledwindow + > viewport + > widget + > list.boxed-list + > row:first-child, +window.dialog + > .dialog-vbox + > box + > scrolledwindow + > viewport + > widget + > list.boxed-list + > row:last-child { + border-radius: 0; +} + +avatar { + border-radius: 9999px; + font-weight: bold; +} + +avatar.color1 { + background-image: linear-gradient(#83b6ec, #337fdc); + color: #cfe1f5; +} + +avatar.color2 { + background-image: linear-gradient(#7ad9f1, #0f9ac8); + color: #caeaf2; +} + +avatar.color3 { + background-image: linear-gradient(#8de6b1, #29ae74); + color: #cef8d8; +} + +avatar.color4 { + background-image: linear-gradient(#b5e98a, #6ab85b); + color: #e6f9d7; +} + +avatar.color5 { + background-image: linear-gradient(#f8e359, #d29d09); + color: #f9f4e1; +} + +avatar.color6 { + background-image: linear-gradient(#ffcb62, #d68400); + color: #ffead1; +} + +avatar.color7 { + background-image: linear-gradient(#ffa95a, #ed5b00); + color: #ffe5c5; +} + +avatar.color8 { + background-image: linear-gradient(#f78773, #e62d42); + color: #f8d2ce; +} + +avatar.color9 { + background-image: linear-gradient(#e973ab, #e33b6a); + color: #fac7de; +} + +avatar.color10 { + background-image: linear-gradient(#cb78d4, #9945b5); + color: #e7c2e8; +} + +avatar.color11 { + background-image: linear-gradient(#9e91e8, #7a59ca); + color: #d5d2f5; +} + +avatar.color12 { + background-image: linear-gradient(#e3cf9c, #b08952); + color: #f2eade; +} + +avatar.color13 { + background-image: linear-gradient(#be916d, #785336); + color: #e5d6ca; +} + +avatar.color14 { + background-image: linear-gradient(#c0bfbc, #6e6d71); + color: #d8d7d3; +} + +avatar.contrasted { + color: #c0caf5; +} + +avatar.image { + background: none; +} + +.card { + border-radius: 6px; + box-shadow: none; + border: 1px solid rgba(192, 202, 245, 0.12); + background-clip: border-box; + background-color: #1a1b26; + color: rgba(192, 202, 245, 0.7); +} + +preferencespage > scrolledwindow > viewport > clamp > box { + margin: 24px 12px; + border-spacing: 24px; +} + +preferencesgroup > box, +preferencesgroup > box .labels { + border-spacing: 6px; +} + +preferencesgroup > box > box.header:not(.single-line) { + margin-bottom: 6px; +} + +preferencesgroup > box > box.single-line { + min-height: 34px; +} + +preferencesgroup > box button.background-preview-button.toggle { + padding: 0; + background: none; + box-shadow: none; + outline-color: transparent; + outline-width: 3px; + outline-offset: 3px; + outline-style: solid; +} + +preferencesgroup > box button.background-preview-button.toggle, +preferencesgroup + > box + button.background-preview-button.toggle + > background-preview { + border-radius: 6px; +} + +preferencesgroup > box button.background-preview-button.toggle:hover { + outline-color: rgba(192, 202, 245, 0.04); +} + +preferencesgroup > box button.background-preview-button.toggle:active { + outline-color: rgba(192, 202, 245, 0.3); +} + +preferencesgroup > box button.background-preview-button.toggle:checked { + outline-color: #a9b1d6; +} + +statuspage > scrolledwindow > viewport > box { + margin: 36px 12px; + border-spacing: 36px; +} + +statuspage > scrolledwindow > viewport > box > clamp > box { + border-spacing: 12px; +} + +statuspage > scrolledwindow > viewport > box > clamp > box > .icon { + -gtk-icon-size: 128px; + color: alpha(currentColor, 0.55); +} + +statuspage > scrolledwindow > viewport > box > clamp > box > .icon:disabled { + opacity: 0.35; +} + +statuspage + > scrolledwindow + > viewport + > box + > clamp + > box + > .icon:not(:last-child) { + margin-bottom: 24px; +} + +statuspage.compact > scrolledwindow > viewport > box { + margin: 24px 12px; + border-spacing: 24px; +} + +statuspage.compact > scrolledwindow > viewport > box > clamp > box > .icon { + -gtk-icon-size: 96px; +} + +statuspage.compact + > scrolledwindow + > viewport + > box + > clamp + > box + > .icon:not(:last-child) { + margin-bottom: 12px; +} + +statuspage.compact > scrolledwindow > viewport > box > clamp > box > .title { + font-size: 18pt; +} + +toast { + margin: 12px; + margin-bottom: 24px; + border-radius: 9999px; + border-spacing: 6px; + padding: 6px; + box-shadow: 0 7px 4.8px -4px rgba(0, 0, 0, 0.2), + 0 12px 10.2px 2px rgba(0, 0, 0, 0.14), 0 5px 13.2px 4px rgba(0, 0, 0, 0.12), + inset 0 1px rgba(192, 202, 245, 0.1); + background-color: #16161e; + color: #c0caf5; + border: none; +} + +toast:dir(ltr) { + padding-left: 12px; +} + +toast:dir(rtl) { + padding-right: 12px; +} + +toast > label { + margin: 0 6px; +} + +viewswitcher { + margin: 0; +} + +viewswitcher.wide { + margin-top: 6px; + margin-bottom: 6px; +} + +viewswitcher.wide button.toggle:checked, +viewswitcher.wide button.toggle.flat:checked { + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); +} + +viewswitcher.wide button.toggle:checked:backdrop, +viewswitcher.wide button.toggle.flat:checked:backdrop { + color: rgba(0, 0, 0, 0.38); +} + +viewswitcher.wide + button.toggle:checked + indicatorbin.needs-attention + > indicator, +viewswitcher.wide + button.toggle.flat:checked + indicatorbin.needs-attention + > indicator { + background-color: rgba(0, 0, 0, 0.87); +} + +viewswitcher.wide + button.toggle:checked + indicatorbin.needs-attention + > indicator + > label, +viewswitcher.wide + button.toggle.flat:checked + indicatorbin.needs-attention + > indicator + > label { + color: #a9b1d6; +} + +viewswitcher.narrow button.toggle { + border-radius: 0; + margin: 0; + border: none; +} + +headerbar viewswitcher.narrow button.toggle { + border-radius: 0 0 12px 12px; + margin: 0; + min-width: 120px; + padding: 0; + background-color: transparent; +} + +headerbar viewswitcher.narrow button.toggle:checked { + background-color: #a9b1d6; + color: rgba(0, 0, 0, 0.87); +} + +headerbar viewswitcher.narrow button.toggle:checked indicator { + background: rgba(0, 0, 0, 0.87); +} + +headerbar viewswitcher.narrow button.toggle:checked indicator > label { + color: #a9b1d6; +} + +headerbar viewswitcher.narrow button.toggle:checked:backdrop { + color: rgba(0, 0, 0, 0.38); +} + +headerbar viewswitcher.narrow button.toggle:focus { + box-shadow: none; +} + +viewswitcher button.toggle { + font-weight: bold; + padding: 0; + min-height: 0; + margin: 0; +} + +viewswitcher button.toggle > stack > box.narrow { + font-size: 0.75rem; + padding-top: 7px; + padding-bottom: 5px; + border-spacing: 4px; +} + +viewswitcher button.toggle > stack > box.narrow > stack > label { + padding-left: 8px; + padding-right: 8px; +} + +viewswitcher button.toggle > stack > box.wide { + padding: 0 12px; + border-spacing: 6px; +} + +viewswitcherbar actionbar > revealer > box { + padding: 0; +} + +viewswitchertitle viewswitcher { + margin-left: 12px; + margin-right: 12px; +} + +indicatorbin > indicator, +indicatorbin > mask { + min-width: 6px; + min-height: 6px; + border-radius: 9999px; +} + +indicatorbin > indicator { + margin: 1px; + padding: 0; + background: alpha(currentColor, 0.4); +} + +indicatorbin > indicator > label { + font-size: 0.6rem; + font-weight: bold; + padding: 2px 5px; + color: #c0caf5; +} + +indicatorbin > mask { + padding: 1px; + background: black; +} + +indicatorbin.needs-attention > indicator { + background-color: #a9b1d6; +} + +indicatorbin.needs-attention > indicator > label { + color: rgba(0, 0, 0, 0.87); +} diff --git a/m3ww/.config/gtk-4.0/gtk.css b/m3ww/.config/gtk-4.0/gtk.css new file mode 100755 index 000000000..f993e9387 --- /dev/null +++ b/m3ww/.config/gtk-4.0/gtk.css @@ -0,0 +1,118 @@ +@define-color theme_fg_color #AEE5FA; +@define-color theme_text_color #AEE5FA; +@define-color theme_bg_color #1a1b26; +@define-color theme_base_color #1a1b26; +@define-color theme_selected_bg_color #AEE5FA; +@define-color theme_selected_fg_color rgba(0, 0, 0, 0.87); +@define-color insensitive_bg_color #1a1b26; +@define-color insensitive_fg_color rgba(192, 202, 245, 0.5); +@define-color insensitive_base_color #24283b; +@define-color theme_unfocused_fg_color #AEE5FA; +@define-color theme_unfocused_text_color #c0caf5; +@define-color theme_unfocused_bg_color #1a1b26; +@define-color theme_unfocused_base_color #1a1b26; +@define-color theme_unfocused_selected_bg_color #a9b1d6; +@define-color theme_unfocused_selected_fg_color rgba(0, 0, 0, 0.87); +@define-color unfocused_insensitive_color rgba(192, 202, 245, 0.5); +@define-color borders rgba(192, 202, 245, 0.12); +@define-color unfocused_borders rgba(192, 202, 245, 0.12); +@define-color warning_color #FDD633; +@define-color error_color #F28B82; +@define-color success_color #81C995; +@define-color wm_title #AEE5FA; +@define-color wm_unfocused_title rgba(192, 202, 245, 0.7); +@define-color wm_highlight rgba(192, 202, 245, 0.1); +@define-color wm_bg #1a1b26; +@define-color wm_unfocused_bg #1a1b26; +@define-color wm_button_close_icon #1a1b26; +@define-color wm_button_close_hover_bg #a9b1d6; +@define-color wm_button_close_active_bg #c7c7c7; +@define-color content_view_bg #1a1b26; +@define-color placeholder_text_color silver; +@define-color text_view_bg #1d1d1d; +@define-color budgie_tasklist_indicator_color #90D1F6; +@define-color budgie_tasklist_indicator_color_active #90D1F6; +@define-color budgie_tasklist_indicator_color_active_window #999999; +@define-color budgie_tasklist_indicator_color_attention #FDD633; +@define-color STRAWBERRY_100 #FF9262; +@define-color STRAWBERRY_300 #FF793E; +@define-color STRAWBERRY_500 #F15D22; +@define-color STRAWBERRY_700 #CF3B00; +@define-color STRAWBERRY_900 #AC1800; +@define-color ORANGE_100 #FFDB91; +@define-color ORANGE_300 #FFCA40; +@define-color ORANGE_500 #FAA41A; +@define-color ORANGE_700 #DE8800; +@define-color ORANGE_900 #C26C00; +@define-color BANANA_100 #FFFFA8; +@define-color BANANA_300 #FFFA7D; +@define-color BANANA_500 #FFCE51; +@define-color BANANA_700 #D1A023; +@define-color BANANA_900 #A27100; +@define-color LIME_100 #A2F3BE; +@define-color LIME_300 #8ADBA6; +@define-color LIME_500 #73C48F; +@define-color LIME_700 #479863; +@define-color LIME_900 #1C6D38; +@define-color BLUEBERRY_100 #94A6FF; +@define-color BLUEBERRY_300 #6A7CE0; +@define-color BLUEBERRY_500 #3F51B5; +@define-color BLUEBERRY_700 #213397; +@define-color BLUEBERRY_900 #031579; +@define-color GRAPE_100 #D25DE6; +@define-color GRAPE_300 #B84ACB; +@define-color GRAPE_500 #9C27B0; +@define-color GRAPE_700 #830E97; +@define-color GRAPE_900 #6A007E; +@define-color COCOA_100 #9F9792; +@define-color COCOA_300 #7B736E; +@define-color COCOA_500 #574F4A; +@define-color COCOA_700 #463E39; +@define-color COCOA_900 #342C27; +@define-color SILVER_100 #EEE; +@define-color SILVER_300 #CCC; +@define-color SILVER_500 #AAA; +@define-color SILVER_700 #888; +@define-color SILVER_900 #666; +@define-color SLATE_100 #888; +@define-color SLATE_300 #666; +@define-color SLATE_500 #444; +@define-color SLATE_700 #222; +@define-color SLATE_900 #111; +@define-color BLACK_100 #474341; +@define-color BLACK_300 #403C3A; +@define-color BLACK_500 #393634; +@define-color BLACK_700 #33302F; +@define-color BLACK_900 #2B2928; +@define-color accent_bg_color #68ABE3; +@define-color accent_fg_color rgba(0, 0, 0, 0.87); +@define-color accent_color #68ABE3; +@define-color destructive_bg_color #F28B82; +@define-color destructive_fg_color rgba(0, 0, 0, 0.87); +@define-color destructive_color #F28B82; +@define-color success_bg_color #81C995; +@define-color success_fg_color rgba(0, 0, 0, 0.87); +@define-color warning_bg_color #FDD633; +@define-color warning_fg_color rgba(0, 0, 0, 0.87); +@define-color error_bg_color #F28B82; +@define-color error_fg_color rgba(0, 0, 0, 0.87); +@define-color window_bg_color #1a1b26; +@define-color window_fg_color #90D1F6; +@define-color view_bg_color rgb(30,30,46); +@define-color view_fg_color rgb(192,202,245); +@define-color headerbar_bg_color #1E1E2E; +@define-color headerbar_fg_color #AEE5FA; +@define-color headerbar_border_color rgba(192, 202, 245, 0.12); +@define-color headerbar_backdrop_color @window_bg_color; +@define-color headerbar_shade_color rgba(0, 0, 0, 0.36); +@define-color card_bg_color #1E1E2E; +@define-color card_fg_color #AEE5FA; +@define-color card_shade_color rgba(0, 0, 0, 0.36); +@define-color dialog_bg_color rgb(26,27,38); +@define-color dialog_fg_color #AEE5FA; +@define-color popover_bg_color #2E2F42; +@define-color popover_fg_color #AEE5FA; +@define-color thumbnail_bg_color #1a1b26; +@define-color thumbnail_fg_color #AEE5FA; +@define-color shade_color rgba(0, 0, 0, 0.36); +@define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); diff --git a/m3ww/.config/gtklock/config.ini b/m3ww/.config/gtklock/config.ini new file mode 100755 index 000000000..2e047db88 --- /dev/null +++ b/m3ww/.config/gtklock/config.ini @@ -0,0 +1,3 @@ +[main] +gtk-theme=Tokyonight-Dark-BL-LB +modules=/usr/lib/gtklock/powerbar-module.so diff --git a/m3ww/.config/gtklock/style.css b/m3ww/.config/gtklock/style.css new file mode 100755 index 000000000..556fd7b8b --- /dev/null +++ b/m3ww/.config/gtklock/style.css @@ -0,0 +1,111 @@ +/* This is GTK CSS, not normal CSS */ + +* { + all: unset; + border: 0px; +} + +window { + background: rgba(0, 0, 0, 0.5); + /* background-image: url("background"); */ + 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; +} + +#input-field { + background-color: #474459; + color: #E5DFF9; + border-radius: 999px; + font-size: 1.3rem; + padding: 0.341rem 1.364rem; + margin: 0.477rem; + box-shadow: 2px 2px 4px rgba(22, 22, 30, 0.5); + min-height: 2.727rem; +} + +/* #input-field:focus { + background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0) 96%, #C8BFFF 96%); +} */ + +#unlock-button { + margin: -20rem; + color: transparent; + background-color: transparent; +} + +#error-label { + color: #F38BA8; +} + +#clock-label { + font-family: 'Lexend'; + font-size: 6rem; + border-radius: 1.2rem; + padding: 0.5rem; + margin: 0.6rem; + margin-top: -35rem; + color: #C8BFFF; + text-shadow: 1px 1px 2px rgba(22, 22, 30, 0.5); +} + +#user-image { + /* min-width: 200px; + min-height: 200px; */ +} + +#powerbar-box {} + +#poweroff-button { + background-color: #302F33; + color: #C9C5D0; + min-width: 3rem; + min-height: 3rem; + margin: 10px; + border-radius: 99px; +} + +#suspend-button { + background-color: #302F33; + color: #C9C5D0; + min-width: 3rem; + min-height: 3rem; + margin: 10px; + border-radius: 99px; +} + +#reboot-button { + background-color: #302F33; + color: #C9C5D0; + min-width: 3rem; + min-height: 3rem; + margin: 10px; + border-radius: 99px; +} + +#poweroff-button:hover, +#reboot-button:hover, +#suspend-button:hover { + background: rgba(200, 200, 200, 0.3); +} + +#poweroff-button:active, +#reboot-button:active, +#suspend-button:active { + background: rgba(200, 200, 200, 0.5); +} \ No newline at end of file diff --git a/m3ww/.config/hypr/colors.conf b/m3ww/.config/hypr/colors.conf new file mode 100755 index 000000000..336379037 --- /dev/null +++ b/m3ww/.config/hypr/colors.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(c8bfffFF) 45deg + col.inactive_border = rgba(555555AA) +} diff --git a/m3ww/.config/hypr/colors_default.conf b/m3ww/.config/hypr/colors_default.conf new file mode 100755 index 000000000..09e7115b6 --- /dev/null +++ b/m3ww/.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/m3ww/.config/hypr/dirs/hyprland_HORIZONTAL.conf b/m3ww/.config/hypr/dirs/hyprland_HORIZONTAL.conf new file mode 100755 index 000000000..6708a2a55 --- /dev/null +++ b/m3ww/.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/m3ww/.config/hypr/dirs/hyprland_VERTICAL.conf b/m3ww/.config/hypr/dirs/hyprland_VERTICAL.conf new file mode 100755 index 000000000..41d2d4d06 --- /dev/null +++ b/m3ww/.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/m3ww/.config/hypr/dirs/keybinds_HORIZONTAL.conf b/m3ww/.config/hypr/dirs/keybinds_HORIZONTAL.conf new file mode 100755 index 000000000..9d82e08e6 --- /dev/null +++ b/m3ww/.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/m3ww/.config/hypr/dirs/keybinds_VERTICAL.conf b/m3ww/.config/hypr/dirs/keybinds_VERTICAL.conf new file mode 100755 index 000000000..b4568432a --- /dev/null +++ b/m3ww/.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/m3ww/.config/hypr/env.conf b/m3ww/.config/hypr/env.conf new file mode 100755 index 000000000..c913c75f4 --- /dev/null +++ b/m3ww/.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/m3ww/.config/hypr/execs.conf b/m3ww/.config/hypr/execs.conf new file mode 100755 index 000000000..276f2d0a5 --- /dev/null +++ b/m3ww/.config/hypr/execs.conf @@ -0,0 +1,30 @@ +# Wallpaper +#exec-once = swaybg -i ~/.config/eww/images/wallpaper/wallpaper +exec-once = swww init && swww img ~/.config/eww/images/wallpaper --transition-step 230 --transition-fps 60 --transition-type grow --transition-angle 30 --transition-duration 1 + +# Status bar +exec-once = eww daemon && eww open bar && eww open bgdecor + +# exec-once = ags + +# 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 = swayidle -w timeout 300 'gtklock' before-sleep 'gtklock' & +exec-once = swayidle -w timeout 450 'systemctl suspend' & + +# Clipboard history +exec-once = wl-paste --watch cliphist store & + +# Cursor +exec-once = hyprctl setcursor Bibata-Modern-Classic 24 + +# idk +exec-once = sleep 1 && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP + +# Plugins are a good way to crash Hyprland diff --git a/m3ww/.config/hypr/hypr.conf b/m3ww/.config/hypr/hypr.conf new file mode 100755 index 000000000..9e8af1936 --- /dev/null +++ b/m3ww/.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/m3ww/.config/hypr/hyprland.conf b/m3ww/.config/hypr/hyprland.conf new file mode 100755 index 000000000..54f1a4d44 --- /dev/null +++ b/m3ww/.config/hypr/hyprland.conf @@ -0,0 +1,198 @@ +# 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 + +source=~/.config/hypr/env.conf + +# MONITOR CONFIG +monitor=,highrr,auto,1 +monitor=,addreserved, 40, 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.5 + } + 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 { + max_fps = 75 + # Gaps and border + gaps_in = 4 + gaps_out = 4 + border_size = 1 + + # Fallback colors + col.active_border = rgba(0DB7D4FF) rgba(7AA2F7FF) rgba(9778D0FF) 45deg + col.inactive_border = rgba(04404aaa) + + # Functionality + # resize_on_border = true + no_focus_fallback = true + layout = dwindle + + #focus_to_other_workspaces = true +} + +dwindle { + preserve_split = true # you definitely want this + #no_gaps_when_only = true + smart_resizing = false +} + +decoration { + rounding = 15 + + blur { + enabled = true + xray = true + size = 12 + passes = 4 + new_optimizations = on + + noise = 0.02 + contrast = 1.6 + brightness = 1.1 + + #contrast = 1 + #brightness = 1 + + } + # Shadow + drop_shadow = false + shadow_range = 30 + shadow_render_power = 10 + col.shadow = rgba(2D3031FF) + + # Shader + # screen_shader = ~/.config/hypr/shaders/nothing.frag + # screen_shader = ~/.config/hypr/shaders/vibrance.frag + + # Dim + dim_inactive = false + dim_strength = 0.1 + dim_special = 0 +} + +animations { + enabled = true + # Animation curves + + bezier = md3_standard, 0.2, 0, 0, 1 + 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.1 + bezier = crazyshot, 0.1, 1.5, 0.76, 0.92 + bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0 + bezier = fluent_decel, 0.1, 1, 0, 1 + # Animation configs + animation = windows, 1, 2, md3_decel, popin 80% + animation = border, 1, 10, default + animation = fade, 1, 2, default + animation = workspaces, 1, 3, md3_decel + animation = specialWorkspace, 1, 3, md3_decel, slidevert +} + +misc { + vfr = 1 + vrr = 1 + focus_on_activate = true + animate_manual_resizes = false + animate_mouse_windowdragging = false + #suppress_portal_warnings = true + enable_swallow = true + + disable_hyprland_logo = true + force_hypr_chan = true +} + +debug { + #overlay = true + damage_tracking = 1 + #damage_blink = yes +} + +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:^(Select a File)(.*)$ +windowrule=float,title:^(Choose wallpaper)(.*)$ +windowrule=float,title:^(Open Folder)(.*)$ +windowrule=float,title:^(Save As)(.*)$ +windowrule=float,title:^(Library)(.*)$ + +######## Layer rules ######## +layerrule = noanim, eww +layerrule = blur, eww +layerrule = ignorealpha 0.8, eww +layerrule = noanim, noanim +layerrule = blur, noanim +layerrule = blur, gtk-layer-shell +layerrule = ignorezero, gtk-layer-shell +layerrule = blur, launcher +layerrule = ignorealpha 0.5, launcher +layerrule = noanim, launcher +layerrule = blur, notifications +layerrule = ignorealpha 0.69, notifications +layerrule = noanim, anyrun + +layerrule = noanim, bar +layerrule = blur, bar +layerrule = ignorealpha 0.64, bar +layerrule = blur, cornertl +layerrule = ignorealpha 0.64, cornertl +layerrule = blur, cornertr +layerrule = ignorealpha 0.64, cornertr +layerrule = blur, cornerbl +layerrule = ignorealpha 0.64, cornerbl +layerrule = blur, cornerbr +layerrule = ignorealpha 0.64, cornerbr + + +# Dynamic colors +source=~/.config/hypr/colors.conf + + +bind=,248,exec,notify-send deez nuts +bindr=,248,exec,eww close bar diff --git a/m3ww/.config/hypr/keybinds.conf b/m3ww/.config/hypr/keybinds.conf new file mode 100755 index 000000000..e1c2269b4 --- /dev/null +++ b/m3ww/.config/hypr/keybinds.conf @@ -0,0 +1,302 @@ +########################## Language ############################ +bind = SuperShift, V, exec, ~/.config/eww/scripts/language --switch '{"name":"Vietnamese","name_abbr":"VIE","name_ibus":"Bamboo::Us","name_method":"Vietnamese Telex (Bamboo Engine)"}' & +bind = SuperShift, E, exec, ~/.config/eww/scripts/language --switch '{"name":"English (United States)","name_abbr":"ENG","name_ibus":"xkb:us::eng","name_method":"US"}' & +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 = SuperShiftAlt, T, exec, foot sleep 0.01 && nmtui +bind = SuperAlt, T, exec, wezterm +bind = Super, Return, exec, wezterm +bind = Super, E, exec, nautilus --new-window +bind = SuperAlt, E, exec, thunar +bind = Super, W, exec, firefox +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, XDG_CURRENT_DESKTOP="gnome" gnome-control-center +bind = ControlSuper, V, exec, pavucontrol +bind = ControlShift, Escape, exec, gnome-system-monitor +bind = ControlAltShift, Escape, exec, foot -T 'btop' btop +bind = SuperShift, I, exec, ~/.local/bin/guifetch + + +# Actions +bind = SuperShift, Period, exec, pkill wofi || wofi-emoji +bind = Super, Period, exec, pkill fuzzel || ~/.local/bin/fuzzel-emoji +bind = Super, Q, killactive, +bind = SuperAlt, Space, togglefloating, +bind = ShiftSuperAlt, Q, exec, hyprctl kill +bind = ControlShiftAlt, Delete, exec, pkill wlogout || wlogout -p layer-shell +bind = ControlShiftAltSuper, Delete, exec, systemctl poweroff + +# 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, V, exec, pkill fuzzel || cliphist list | fuzzel --no-fuzzy --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 +bind = ControlSuper, Slash, exec, pkill anyrun || anyrun + +###################################### eww keybinds ##################################### +bindr = ControlSuper, R, exec, pkill eww; pkill bash; pkill notify-receive; eww daemon && eww open bar && eww open bgdecor & +bind = ControlSuper, T, exec, cd ~/.config/eww && scripts/switchwall +bind = SuperAlt, W, exec, ~/.config/eww/scripts/toggle-topbottom.sh +bind = Super, Tab, exec, ~/.config/eww/scripts/toggle-powerview.sh & +bind = Super, M, exec, ~/.config/eww/scripts/toggle-visualizer.sh & +bind = Super, B, exec, ~/.config/eww/scripts/toggle-sideleft.sh & +bind = Super, O, exec, ~/.config/eww/scripts/toggle-sideleft.sh & +bind = Super, G, exec, ~/.config/eww/scripts/toggle-mixer.sh & +bind = Super, Slash, exec, ~/.config/eww/scripts/toggle-cheatsheet.sh +bind = Super, N, exec, ~/.config/eww/scripts/toggle-sideright.sh & +bind = Super, A, exec, ~/.config/eww/scripts/toggle-dashboard.sh & +bind = ControlSuper, mouse:273, exec, ~/.config/eww/scripts/toggle-supercontext.sh & +bind = Super, Menu, exec, ~/.config/eww/scripts/toggle-supercontext.sh & +bindr = Control, Control_R, exec, ~/.config/eww/scripts/toggle-notificationspopup.sh --close && eww update notification_read=$(eww get notifications | gojq 'length') +bindr = Control, Control_R, exec, ~/.config/eww/scripts/toggle-sideleft.sh --close & +bindr = Control, Control_R, exec, ~/.config/eww/scripts/toggle-sideright.sh --close & +bindr = Control, Control_R, exec, ~/.config/eww/scripts/toggle-visualizer.sh --close & + +######### Cheat sheet ######### +bind = Super, Slash, submap, cheatsheet +submap=cheatsheet +bindl =,Print,exec,grim - | wl-copy +bind = Super, Slash, exec, ~/.config/eww/scripts/toggle-cheatsheet.sh --close +bind = , Escape, exec, ~/.config/eww/scripts/toggle-cheatsheet.sh --close +bindr = Control, Control_R, exec, ~/.config/eww/scripts/toggle-cheatsheet.sh --close +bind = Super, Slash, submap, reset +bind = , Escape, submap, reset +bindr = Control, Control_R, submap, reset +submap=reset + +######### Power Menu ######### +bind=CTRLAlt,Delete,exec, eww open --toggle powermenu +bind=CTRLAlt,Delete,submap,powermenu +submap=powermenu +bindl =,Print,exec,grim - | wl-copy +bind = SuperShift, S, exec, grim -g "$(slurp)" - | wl-copy +bind=,Right,exec,VALUE=$(eww get powermenu_option); eww update powermenu_option=$(( VALUE % 3 == 2 || VALUE > 5 ? VALUE : VALUE + 1 )) +bind=,Left,exec,VALUE=$(eww get powermenu_option); eww update powermenu_option=$(( VALUE % 3 == 0 || VALUE > 5 ? VALUE : VALUE - 1 )) +bind=,Up,exec,VALUE=$(eww get powermenu_option); eww update powermenu_option=$(( VALUE > 2 ? VALUE - 3 : VALUE )) +bind=,Down,exec,VALUE=$(eww get powermenu_option); eww update powermenu_option=$(( VALUE < 3 ? VALUE + 3 : 7 )) +bind=,Return,exec,eval $(eww get POWERMENU_COMMANDS | gojq -r ".[$(eww get powermenu_option)]") +bind=,Space,exec,eval $(eww get POWERMENU_COMMANDS | gojq -r ".[$(eww get powermenu_option)]") +bind=,Grave,exec,eval $(eww get POWERMENU_QUICKLAUNCHES | gojq -r ".[0]") && eww update powermenu_option=0 +bind=,1,exec,eval $(eww get POWERMENU_QUICKLAUNCHES | gojq -r ".[1]") && eww update powermenu_option=0 +bind=,2,exec,eval $(eww get POWERMENU_QUICKLAUNCHES | gojq -r ".[2]") && eww update powermenu_option=0 +bind=,3,exec,eval $(eww get POWERMENU_QUICKLAUNCHES | gojq -r ".[3]") && eww update powermenu_option=0 +bind=,4,exec,eval $(eww get POWERMENU_QUICKLAUNCHES | gojq -r ".[4]") && eww update powermenu_option=0 +bind=,4,exec,eval $(eww get POWERMENU_QUICKLAUNCHES | gojq -r ".[5]") && eww update powermenu_option=0 +bind=CTRLAlt,Delete,exec, eww close powermenu && eww update powermenu_option=0 +bind=,Escape,exec, eww close powermenu && eww update powermenu_option=0 +bind=,Space,exec, eww close powermenu && eww update powermenu_option=0 +bind=,Return,exec, eww close powermenu && eww update powermenu_option=0 +bindr=Control,Control_R,exec, eww close powermenu && eww update powermenu_option=0 +bind=CTRLAlt,Delete,submap,reset +bind=,Escape,submap,reset +bind=,Space,submap,reset +bind=,Return,submap,reset +bindr = Control, Control_R, submap, reset +bind = ControlSuper, R, exec, hyprctl dispatch submap reset; pkill eww; pkill bash; pkill notify-receive; eww daemon && eww open bar && eww open bgdecor & +submap=reset +############################# + +######### Powerview ######### +bindr = Super, Super_L, exec, ~/.config/eww/scripts/toggle-powerview.sh --keypress & +submap = powerview +bindl =,Print,exec,grim - | wl-copy +bind = SuperShift, S, exec, grim -g "$(slurp)" - | wl-copy +bind = ControlSuper, right, workspace, +1 +bind = ControlSuper, left, 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 = Super, Tab, exec, ~/.config/eww/scripts/toggle-powerview.sh --close & +bindr = Super, Super_L, exec, ~/.config/eww/scripts/toggle-powerview.sh --close & +bind = , Escape, exec, ~/.config/eww/scripts/toggle-powerview.sh --close & +bind = Super, Tab, submap, reset +bindr = Super, Super_L, submap, reset +bindr = Control, Control_L, submap, reset +bind = , Escape, submap, reset +submap = reset +############################# + +######### Edit mode ######### +submap = editmode +bindm = ,mouse:272, movewindow +bindm = ,mouse:273, resizewindow +bindm = ,mouse:274, movewindow +bind = ,mouse_up, workspace, +1 +bind = ,mouse_down, workspace, -1 +bind = Alt, 1, exec, ~/.config/eww/scripts/dumptows $(hyprctl activeworkspace -j | gojq '.id') 1 +bind = Alt, 2, exec, ~/.config/eww/scripts/dumptows $(hyprctl activeworkspace -j | gojq '.id') 2 +bind = Alt, 3, exec, ~/.config/eww/scripts/dumptows $(hyprctl activeworkspace -j | gojq '.id') 3 +bind = Alt, 4, exec, ~/.config/eww/scripts/dumptows $(hyprctl activeworkspace -j | gojq '.id') 4 +bind = Alt, 5, exec, ~/.config/eww/scripts/dumptows $(hyprctl activeworkspace -j | gojq '.id') 5 +bind = Alt, 6, exec, ~/.config/eww/scripts/dumptows $(hyprctl activeworkspace -j | gojq '.id') 6 +bind = Alt, 7, exec, ~/.config/eww/scripts/dumptows $(hyprctl activeworkspace -j | gojq '.id') 7 +bind = Alt, 8, exec, ~/.config/eww/scripts/dumptows $(hyprctl activeworkspace -j | gojq '.id') 8 +bind = Alt, 9, exec, ~/.config/eww/scripts/dumptows $(hyprctl activeworkspace -j | gojq '.id') 9 +bind = Alt, 0, exec, ~/.config/eww/scripts/dumptows $(hyprctl activeworkspace -j | gojq '.id') 10 +bind = Shift, 1, exec, ~/.config/eww/scripts/swapws $(hyprctl activeworkspace -j | gojq '.id') 1 +bind = Shift, 2, exec, ~/.config/eww/scripts/swapws $(hyprctl activeworkspace -j | gojq '.id') 2 +bind = Shift, 3, exec, ~/.config/eww/scripts/swapws $(hyprctl activeworkspace -j | gojq '.id') 3 +bind = Shift, 4, exec, ~/.config/eww/scripts/swapws $(hyprctl activeworkspace -j | gojq '.id') 4 +bind = Shift, 5, exec, ~/.config/eww/scripts/swapws $(hyprctl activeworkspace -j | gojq '.id') 5 +bind = Shift, 6, exec, ~/.config/eww/scripts/swapws $(hyprctl activeworkspace -j | gojq '.id') 6 +bind = Shift, 7, exec, ~/.config/eww/scripts/swapws $(hyprctl activeworkspace -j | gojq '.id') 7 +bind = Shift, 8, exec, ~/.config/eww/scripts/swapws $(hyprctl activeworkspace -j | gojq '.id') 8 +bind = Shift, 9, exec, ~/.config/eww/scripts/swapws $(hyprctl activeworkspace -j | gojq '.id') 9 +bind = Shift, 0, exec, ~/.config/eww/scripts/swapws $(hyprctl activeworkspace -j | gojq '.id') 10 +bind = , 1, workspace, 1 +bind = , 2, workspace, 2 +bind = , 3, workspace, 3 +bind = , 4, workspace, 4 +bind = , 5, workspace, 5 +bind = , 6, workspace, 6 +bind = , 7, workspace, 7 +bind = , 8, workspace, 8 +bind = , 9, workspace, 9 +bind = , 0, workspace, 10 +bind = , Escape, exec, notify-send 'Edit mode disabled' 'Continue to use your device normally' -a 'Edit mode' & +bind = , Escape, submap, reset +submap = reset + +############################# + +################################### eww keybinds: end ################################# + + +## Testing +bind = SuperAlt, f12, exec, notify-send "Test notification" "$(hyprctl version | head -1)" -a 'Hyprland keybind' +bind = SuperAlt, Equal, exec, notify-send "Urgent notification" "Ah hell no" -u critical -a 'Hyprland keybind' + +############################ 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 + +# 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 = SuperAlt, Page_Down, movetoworkspace, +1 +bind = SuperAlt, Page_Up, movetoworkspace, -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 +bind = SuperAlt, mouse_down, movetoworkspace, -1 +bind = SuperAlt, mouse_up, movetoworkspace, +1 + +# 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, 0 +bind = Super, D, fullscreen, 1 +bind = Super_Alt, F, fakefullscreen, 0 + +# 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/m3ww/.config/hypr/savedcolors/colors_alive.conf b/m3ww/.config/hypr/savedcolors/colors_alive.conf new file mode 100755 index 000000000..101a7d2a1 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_alive.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/Igw7x_q_SY8/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AOn4CLAnBg0FYExCAq5yAvoYoyE3rjhD6w +general { + col.active_border = rgba(D1B043FF) rgba(E9D463FF) rgba(C7B89CFF) 45deg + col.inactive_border = rgba(D1B04366) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_alpha.conf b/m3ww/.config/hypr/savedcolors/colors_alpha.conf new file mode 100755 index 000000000..1dd54a011 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_alpha.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/fjmfM_GhaKE/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAZwkQ3bKm9M6hFMb6vSPULmOR6UQ +general { + col.active_border = rgba(2875C5FF) rgba(5BA6B4FF) rgba(9EA19DFF) 45deg + col.inactive_border = rgba(2875C566) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_amaryllis.conf b/m3ww/.config/hypr/savedcolors/colors_amaryllis.conf new file mode 100755 index 000000000..62c63a4b8 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_amaryllis.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/-aKHRnS1NrY/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLARkaFkCli09IlsqLfdrLkiZrRmNw +general { + col.active_border = rgba(75728AFF) rgba(897A89FF) rgba(8A8592FF) 45deg + col.inactive_border = rgba(75728A66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_androidgreen.conf b/m3ww/.config/hypr/savedcolors/colors_androidgreen.conf new file mode 100755 index 000000000..1fdddaa16 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_androidgreen.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(656B5AFF) rgba(70736BFF) rgba(7C836DFF) 45deg + col.inactive_border = rgba(656B5A66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_andromeda.conf b/m3ww/.config/hypr/savedcolors/colors_andromeda.conf new file mode 100755 index 000000000..24b1503a1 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_andromeda.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-000102218806-ducxb5-t80x80.jpg +general { + col.active_border = rgba(AECD77FF) rgba(3C6D8DFF) rgba(5EB2A8FF) 45deg + col.inactive_border = rgba(AECD7766) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_artemis.conf b/m3ww/.config/hypr/savedcolors/colors_artemis.conf new file mode 100755 index 000000000..2db047817 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_artemis.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-LPvgpz3T7pFKWPBy-ihlbAw-t80x80.jpg +general { + col.active_border = rgba(043094FF) rgba(3E5EA0FF) rgba(0A69CDFF) 45deg + col.inactive_border = rgba(04309466) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_artofquartz.conf b/m3ww/.config/hypr/savedcolors/colors_artofquartz.conf new file mode 100755 index 000000000..dedc62063 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_artofquartz.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/oyuWZ34Aq3o/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBttb3MeiJoN9dSbvemylicQFwceQ +general { + col.active_border = rgba(d8b9ffFF) 45deg + col.inactive_border = rgba(555555AA) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_atermis.conf b/m3ww/.config/hypr/savedcolors/colors_atermis.conf new file mode 100755 index 000000000..2db047817 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_atermis.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-LPvgpz3T7pFKWPBy-ihlbAw-t80x80.jpg +general { + col.active_border = rgba(043094FF) rgba(3E5EA0FF) rgba(0A69CDFF) 45deg + col.inactive_border = rgba(04309466) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_avdan.conf b/m3ww/.config/hypr/savedcolors/colors_avdan.conf new file mode 100755 index 000000000..87393e1f4 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_avdan.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(D4226EFF) rgba(F32563FF) rgba(F32564FF) 45deg + col.inactive_border = rgba(D4226E66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_beach.conf b/m3ww/.config/hypr/savedcolors/colors_beach.conf new file mode 100755 index 000000000..ec36c1a72 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_beach.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(99B5DEFF) rgba(92CBF6FF) rgba(B0E2F7FF) 45deg + col.inactive_border = rgba(99B5DE66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_berightthere.conf b/m3ww/.config/hypr/savedcolors/colors_berightthere.conf new file mode 100755 index 000000000..02aaaeefe --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_berightthere.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi_webp/eXJqyCgVpjc/mqdefault.webp +general { + col.active_border = rgba(955B6CFF) rgba(D36572FF) rgba(DC728FFF) 45deg + col.inactive_border = rgba(955B6C66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_bittersweet.conf b/m3ww/.config/hypr/savedcolors/colors_bittersweet.conf new file mode 100755 index 000000000..bd85d3b93 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_bittersweet.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/5jvVbbai7qk/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AOn4CLDyTWGok8rtpE0Dj6rsAY9n03bhkQ +general { + col.active_border = rgba(C96F95FF) rgba(A7868DFF) rgba(DB9DAAFF) 45deg + col.inactive_border = rgba(C96F9566) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_blessingbeat.conf b/m3ww/.config/hypr/savedcolors/colors_blessingbeat.conf new file mode 100755 index 000000000..5ec9e5a5c --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_blessingbeat.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-000579642002-mq4kgn-t80x80.jpg +general { + col.active_border = rgba(D3A3F8FF) rgba(F3B3FAFF) rgba(B1F6FBFF) 45deg + col.inactive_border = rgba(D3A3F866) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_bluegalaxy.conf b/m3ww/.config/hypr/savedcolors/colors_bluegalaxy.conf new file mode 100755 index 000000000..1ade1d4dd --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_bluegalaxy.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(128D91FF) rgba(269F9BFF) rgba(159CA2FF) 45deg + col.inactive_border = rgba(128D9166) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_bluenation.conf b/m3ww/.config/hypr/savedcolors/colors_bluenation.conf new file mode 100755 index 000000000..9385950b1 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_bluenation.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(60C4F1FF) rgba(9F9BABFF) rgba(A2AECFFF) 45deg + col.inactive_border = rgba(60C4F166) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_bluenation_purple.conf b/m3ww/.config/hypr/savedcolors/colors_bluenation_purple.conf new file mode 100755 index 000000000..39b88d3c6 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_bluenation_purple.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(39B1D7FF) rgba(63A0D4FF) rgba(9BA1CFFF) 45deg + col.inactive_border = rgba(39B1D766) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_blueroar.conf b/m3ww/.config/hypr/savedcolors/colors_blueroar.conf new file mode 100755 index 000000000..9385950b1 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_blueroar.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(60C4F1FF) rgba(9F9BABFF) rgba(A2AECFFF) 45deg + col.inactive_border = rgba(60C4F166) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_breakaway.conf b/m3ww/.config/hypr/savedcolors/colors_breakaway.conf new file mode 100755 index 000000000..d69e5c059 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_breakaway.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/OdasYzoN7TQ/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCYFcwiVGbaXXSPIUCHH7RG7dYbMQ +general { + col.active_border = rgba(C9B0FDFF) rgba(E3BCFEFF) rgba(B1D2FDFF) 45deg + col.inactive_border = rgba(C9B0FD66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_bunnygirl.conf b/m3ww/.config/hypr/savedcolors/colors_bunnygirl.conf new file mode 100755 index 000000000..a8c0df18f --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_bunnygirl.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-000464639244-hzoi9t-t80x80.jpg +general { + col.active_border = rgba(0C30A0FF) rgba(1A50A5FF) rgba(5443D2FF) 45deg + col.inactive_border = rgba(0C30A066) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_bythesunlitwindow.conf b/m3ww/.config/hypr/savedcolors/colors_bythesunlitwindow.conf new file mode 100755 index 000000000..5e1735df6 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_bythesunlitwindow.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/m-imaoaZ9ho/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AOn4CLBkvbpwGwMXwTM2ezepbUGV05pLFg +general { + col.active_border = rgba(9A6BA7FF) rgba(AA7AC3FF) rgba(B786CEFF) 45deg + col.inactive_border = rgba(9A6BA766) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_crystalcave.conf b/m3ww/.config/hypr/savedcolors/colors_crystalcave.conf new file mode 100755 index 000000000..e681c0c13 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_crystalcave.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi_webp/4cFD-5w5cyA/mqdefault.webp +general { + col.active_border = rgba(2A9EE5FF) rgba(4E9DC4FF) rgba(62D9F9FF) 45deg + col.inactive_border = rgba(2A9EE566) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_cutelight.conf b/m3ww/.config/hypr/savedcolors/colors_cutelight.conf new file mode 100755 index 000000000..9170ee665 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_cutelight.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/hcbc09-cQaM/mqdefault.jpg +general { + col.active_border = rgba(A2A1ABFF) rgba(D8B3B1FF) rgba(B1CADBFF) 45deg + col.inactive_border = rgba(A2A1AB66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_cyan.conf b/m3ww/.config/hypr/savedcolors/colors_cyan.conf new file mode 100755 index 000000000..9385950b1 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_cyan.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(60C4F1FF) rgba(9F9BABFF) rgba(A2AECFFF) 45deg + col.inactive_border = rgba(60C4F166) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_cycles.conf b/m3ww/.config/hypr/savedcolors/colors_cycles.conf new file mode 100755 index 000000000..84176f797 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_cycles.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/gmSGmgffLXI/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDoJVlARTVsqnvWgL506qzeguKpdw +general { + col.active_border = rgba(A56E56FF) rgba(E37748FF) rgba(AB8873FF) 45deg + col.inactive_border = rgba(A56E5666) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_decoyworld.conf b/m3ww/.config/hypr/savedcolors/colors_decoyworld.conf new file mode 100755 index 000000000..a9717d592 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_decoyworld.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-000277772429-kb8c52-t80x80.jpg +general { + col.active_border = rgba(4C7192FF) rgba(A575A5FF) rgba(39A6CEFF) 45deg + col.inactive_border = rgba(4C719266) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_default.conf b/m3ww/.config/hypr/savedcolors/colors_default.conf new file mode 100755 index 000000000..9385950b1 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_default.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(60C4F1FF) rgba(9F9BABFF) rgba(A2AECFFF) 45deg + col.inactive_border = rgba(60C4F166) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_disconnectedblue.conf b/m3ww/.config/hypr/savedcolors/colors_disconnectedblue.conf new file mode 100755 index 000000000..d78b61ae0 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_disconnectedblue.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/_z1L9alieOI/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA_0euyiuQSHnE8Gn0l5AECOTvFtQ +general { + col.active_border = rgba(727085FF) rgba(019DB5FF) rgba(5BB8B8FF) 45deg + col.inactive_border = rgba(72708566) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_disconnectedblue_dark.conf b/m3ww/.config/hypr/savedcolors/colors_disconnectedblue_dark.conf new file mode 100755 index 000000000..a6bef6538 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_disconnectedblue_dark.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/_z1L9alieOI/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AOn4CLDk081Hk_24mnKxtawjxKQ64rrQDg +general { + col.active_border = rgba(767C80FF) rgba(039CB7FF) rgba(5EB6B9FF) 45deg + col.inactive_border = rgba(767C8066) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_eclipse.conf b/m3ww/.config/hypr/savedcolors/colors_eclipse.conf new file mode 100755 index 000000000..a81a7a545 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_eclipse.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(F85B13FF) rgba(A05862FF) rgba(7B6985FF) 45deg + col.inactive_border = rgba(F85B1366) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_enjoythistime.conf b/m3ww/.config/hypr/savedcolors/colors_enjoythistime.conf new file mode 100755 index 000000000..70a6a98f2 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_enjoythistime.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/g4ssHIwZDGk/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB26FOCk7yVlaawtjcyH1xE9-ZkxA +general { + col.active_border = rgba(6fdaa8FF) 45deg + col.inactive_border = rgba(555555AA) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_eternalmelody.conf b/m3ww/.config/hypr/savedcolors/colors_eternalmelody.conf new file mode 100755 index 000000000..126951230 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_eternalmelody.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(905772FF) rgba(A35161FF) rgba(A36D8FFF) 45deg + col.inactive_border = rgba(90577266) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_euphoria.conf b/m3ww/.config/hypr/savedcolors/colors_euphoria.conf new file mode 100755 index 000000000..a1165ff17 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_euphoria.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/7Pyt_xftxM8/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB_gmAAtAFigIMCAAQARh_ID0oJDAP&rs=AOn4CLCqLpcalabHrrGdKHYreXbaxo3BMw +general { + col.active_border = rgba(985F2BFF) rgba(AA7133FF) rgba(B78938FF) 45deg + col.inactive_border = rgba(985F2B66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_everythinggoeson.conf b/m3ww/.config/hypr/savedcolors/colors_everythinggoeson.conf new file mode 100755 index 000000000..0a551f846 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_everythinggoeson.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-JgiEcXItFfvrKUZ9-aVqgEw-t80x80.jpg +general { + col.active_border = rgba(BBA7A7FF) rgba(EE91B4FF) rgba(FCB0D0FF) 45deg + col.inactive_border = rgba(BBA7A766) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_finale.conf b/m3ww/.config/hypr/savedcolors/colors_finale.conf new file mode 100755 index 000000000..2e9b539fa --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_finale.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-rs5BJbnE1joHdT19-cy5Ilg-t80x80.jpg +general { + col.active_border = rgba(F8817EFF) rgba(BD8683FF) rgba(F7A49BFF) 45deg + col.inactive_border = rgba(F8817E66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_finalstep.conf b/m3ww/.config/hypr/savedcolors/colors_finalstep.conf new file mode 100755 index 000000000..4fd7dc3f1 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_finalstep.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/v3JExHpJ09s/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAsQ6siv_HQMVyJmfFx_WoSo-ZHkA +general { + col.active_border = rgba(AC16C7FF) rgba(B117DFFF) rgba(C53CC3FF) 45deg + col.inactive_border = rgba(AC16C766) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_flare.conf b/m3ww/.config/hypr/savedcolors/colors_flare.conf new file mode 100755 index 000000000..6f1f444e6 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_flare.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/51k7SJPDUNo/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB1AaAAuADigIMCAAQARh_IE4oGjAP&rs=AOn4CLATHs_fDDtgQN42Gi-Dwj9AvUCnqQ +general { + col.active_border = rgba(696350FF) rgba(92360FFF) rgba(A7683CFF) 45deg + col.inactive_border = rgba(69635066) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_flate.conf b/m3ww/.config/hypr/savedcolors/colors_flate.conf new file mode 100755 index 000000000..6f1f444e6 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_flate.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/51k7SJPDUNo/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgB1AaAAuADigIMCAAQARh_IE4oGjAP&rs=AOn4CLATHs_fDDtgQN42Gi-Dwj9AvUCnqQ +general { + col.active_border = rgba(696350FF) rgba(92360FFF) rgba(A7683CFF) 45deg + col.inactive_border = rgba(69635066) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_flowers.conf b/m3ww/.config/hypr/savedcolors/colors_flowers.conf new file mode 100755 index 000000000..5d6187fde --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_flowers.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(99798CFF) rgba(6A87B1FF) rgba(A39BA5FF) 45deg + col.inactive_border = rgba(99798C66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_forest_bluegreen.conf b/m3ww/.config/hypr/savedcolors/colors_forest_bluegreen.conf new file mode 100755 index 000000000..728cae939 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_forest_bluegreen.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(7B805DFF) rgba(BCBD58FF) rgba(4C748AFF) 45deg + col.inactive_border = rgba(7B805D66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_forever.conf b/m3ww/.config/hypr/savedcolors/colors_forever.conf new file mode 100755 index 000000000..420a55ec8 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_forever.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/8abwtVLP18Y/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLABvuWZHErcUxghiy_4ZuNZFFoXUA +general { + col.active_border = rgba(5322A1FF) rgba(433AA8FF) rgba(691FD5FF) 45deg + col.inactive_border = rgba(5322A166) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_forsythia.conf b/m3ww/.config/hypr/savedcolors/colors_forsythia.conf new file mode 100755 index 000000000..c47631c17 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_forsythia.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(ECD069FF) rgba(AFA892FF) rgba(BAC59CFF) 45deg + col.inactive_border = rgba(ECD06966) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_frostdragon.conf b/m3ww/.config/hypr/savedcolors/colors_frostdragon.conf new file mode 100755 index 000000000..75fe99f81 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_frostdragon.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(3E83A0FF) rgba(4F90ACFF) rgba(6AB2CAFF) 45deg + col.inactive_border = rgba(3E83A066) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_frozenheart.conf b/m3ww/.config/hypr/savedcolors/colors_frozenheart.conf new file mode 100755 index 000000000..f82ea60db --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_frozenheart.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(CDAEB2FF) rgba(CDBFC2FF) rgba(D9CBD2FF) 45deg + col.inactive_border = rgba(CDAEB266) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_genshinbeach.conf b/m3ww/.config/hypr/savedcolors/colors_genshinbeach.conf new file mode 100755 index 000000000..ec36c1a72 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_genshinbeach.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(99B5DEFF) rgba(92CBF6FF) rgba(B0E2F7FF) 45deg + col.inactive_border = rgba(99B5DE66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_godrays.conf b/m3ww/.config/hypr/savedcolors/colors_godrays.conf new file mode 100755 index 000000000..06626dece --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_godrays.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(3C5749FF) rgba(8B7521FF) rgba(9F8F28FF) 45deg + col.inactive_border = rgba(3C574966) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_green.conf b/m3ww/.config/hypr/savedcolors/colors_green.conf new file mode 100755 index 000000000..e95c49b39 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_green.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(5E5A52FF) rgba(8D7253FF) rgba(9B9A61FF) 45deg + col.inactive_border = rgba(5E5A5266) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_heartafire.conf b/m3ww/.config/hypr/savedcolors/colors_heartafire.conf new file mode 100755 index 000000000..da3f8b7e0 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_heartafire.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-000194675612-qt4sr3-t80x80.jpg +general { + col.active_border = rgba(5D2648FF) rgba(6E2A4CFF) rgba(A91D3BFF) 45deg + col.inactive_border = rgba(5D264866) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_ice.conf b/m3ww/.config/hypr/savedcolors/colors_ice.conf new file mode 100755 index 000000000..b63609b43 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_ice.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-000141682356-dsvdol-t80x80.jpg +general { + col.active_border = rgba(4977ACFF) rgba(5F8AB8FF) rgba(849FBFFF) 45deg + col.inactive_border = rgba(4977AC66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_innovation.conf b/m3ww/.config/hypr/savedcolors/colors_innovation.conf new file mode 100755 index 000000000..c99fcca00 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_innovation.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-VzJtkezGcHZPTQwV-sj8hyg-t80x80.jpg +general { + col.active_border = rgba(891A8BFF) rgba(9726ADFF) rgba(D55FD7FF) 45deg + col.inactive_border = rgba(891A8B66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_iswear.conf b/m3ww/.config/hypr/savedcolors/colors_iswear.conf new file mode 100755 index 000000000..3d8e73841 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_iswear.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/pLQGfSQUuCM/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAxjZ9gSU45DvSy7J__T2odBUct4w +general { + col.active_border = rgba(CF8A77FF) rgba(B29890FF) rgba(DAC6AFFF) 45deg + col.inactive_border = rgba(CF8A7766) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_iwillpickyouup.conf b/m3ww/.config/hypr/savedcolors/colors_iwillpickyouup.conf new file mode 100755 index 000000000..4e71e447d --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_iwillpickyouup.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-000058034277-sq9814-t80x80.jpg +general { + col.active_border = rgba(7F7E7EFF) rgba(1BAC6DFF) rgba(02FA97FF) 45deg + col.inactive_border = rgba(7F7E7E66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_kurumi.conf b/m3ww/.config/hypr/savedcolors/colors_kurumi.conf new file mode 100755 index 000000000..2f77a7f87 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_kurumi.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-viSbRZk1zikdSKYq-C4WdAw-t80x80.jpg +general { + col.active_border = rgba(995A5DFF) rgba(DF5A5DFF) rgba(AC7492FF) 45deg + col.inactive_border = rgba(995A5D66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_lazertrack.conf b/m3ww/.config/hypr/savedcolors/colors_lazertrack.conf new file mode 100755 index 000000000..ba280e302 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_lazertrack.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-000499340190-zt5zgv-t80x80.jpg +general { + col.active_border = rgba(A5528AFF) rgba(C36192FF) rgba(A792A0FF) 45deg + col.inactive_border = rgba(A5528A66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_lover.conf b/m3ww/.config/hypr/savedcolors/colors_lover.conf new file mode 100755 index 000000000..e4bce2aa3 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_lover.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/5kJFLc58nWo/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCwudZBZijm8By6VI7WSUnLSlh2gA +general { + col.active_border = rgba(DF7091FF) rgba(7486A9FF) rgba(CEA3B6FF) 45deg + col.inactive_border = rgba(DF709166) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_lullaby.conf b/m3ww/.config/hypr/savedcolors/colors_lullaby.conf new file mode 100755 index 000000000..dc0d1fcb2 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_lullaby.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-cAla9lDzW6P2WRRA-yJp1yg-t80x80.jpg +general { + col.active_border = rgba(174F6AFF) rgba(634F64FF) rgba(D32509FF) 45deg + col.inactive_border = rgba(174F6A66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_meltdown.conf b/m3ww/.config/hypr/savedcolors/colors_meltdown.conf new file mode 100755 index 000000000..100777676 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_meltdown.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/Ym0VhyO0ajM/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AOn4CLAnOkNUJDDk6eA2RagDI-cOWNqthw +general { + col.active_border = rgba(1E649FFF) rgba(106FAFFF) rgba(2B89B4FF) 45deg + col.inactive_border = rgba(1E649F66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_mirror.conf b/m3ww/.config/hypr/savedcolors/colors_mirror.conf new file mode 100755 index 000000000..6edac1c00 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_mirror.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/co1QafXwo4g/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAncOMlDFU5jwlz8_EJITJPz1xaxQ +general { + col.active_border = rgba(5F1DD9FF) rgba(334AC7FF) rgba(924CC2FF) 45deg + col.inactive_border = rgba(5F1DD966) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_moments.conf b/m3ww/.config/hypr/savedcolors/colors_moments.conf new file mode 100755 index 000000000..21e6093d0 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_moments.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/FJerhImwS5E/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDEK86tcWOOWAN7v2kHv4Oy3w-8Jg +general { + col.active_border = rgba(65DBF3FF) rgba(B4B1C3FF) rgba(92EFF7FF) 45deg + col.inactive_border = rgba(65DBF366) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_monster.conf b/m3ww/.config/hypr/savedcolors/colors_monster.conf new file mode 100755 index 000000000..93d6be3d4 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_monster.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/0CuTOGKMWW0/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBkQ9ETNGNv538s2qddDWjrEvW4-A +general { + col.active_border = rgba(059687FF) rgba(02B091FF) rgba(13F3A9FF) 45deg + col.inactive_border = rgba(05968766) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_moonlight.conf b/m3ww/.config/hypr/savedcolors/colors_moonlight.conf new file mode 100755 index 000000000..c46925d3f --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_moonlight.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/zJ9NHv9UIHI/mqdefault.jpg +general { + col.active_border = rgba(E99A71FF) rgba(592D9AFF) rgba(5D57C1FF) 45deg + col.inactive_border = rgba(E99A7166) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_multi.conf b/m3ww/.config/hypr/savedcolors/colors_multi.conf new file mode 100755 index 000000000..24b1503a1 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_multi.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-000102218806-ducxb5-t80x80.jpg +general { + col.active_border = rgba(AECD77FF) rgba(3C6D8DFF) rgba(5EB2A8FF) 45deg + col.inactive_border = rgba(AECD7766) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_neon_bluered.conf b/m3ww/.config/hypr/savedcolors/colors_neon_bluered.conf new file mode 100755 index 000000000..b873308d6 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_neon_bluered.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(E02A29FF) rgba(FAE5A8FF) rgba(50FDFEFF) 45deg + col.inactive_border = rgba(46315F66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_notfound.conf b/m3ww/.config/hypr/savedcolors/colors_notfound.conf new file mode 100755 index 000000000..e23a6798f --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_notfound.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/VPAbyHafVq4/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBPcSDAncsROkuIMYJHgZwUbfZGMg +general { + col.active_border = rgba(E26A78FF) rgba(827590FF) rgba(E57485FF) 45deg + col.inactive_border = rgba(E26A7866) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_nova.conf b/m3ww/.config/hypr/savedcolors/colors_nova.conf new file mode 100755 index 000000000..6ea6b51da --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_nova.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/OnVNcl7mX_Q/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBh9_sgGX3UhmFVI4HmgNskpjRy6w +general { + col.active_border = rgba(32678EFF) rgba(636790FF) rgba(68A5C0FF) 45deg + col.inactive_border = rgba(32678E66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_nowthatitstrue.conf b/m3ww/.config/hypr/savedcolors/colors_nowthatitstrue.conf new file mode 100755 index 000000000..e875b1ca0 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_nowthatitstrue.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-ztgvVI8fjqhzocM1-cFVrJw-t80x80.jpg +general { + col.active_border = rgba(6FAED0FF) rgba(8DAAB7FF) rgba(8FB3CBFF) 45deg + col.inactive_border = rgba(6FAED066) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_osubluegreen.conf b/m3ww/.config/hypr/savedcolors/colors_osubluegreen.conf new file mode 100755 index 000000000..9df0060f2 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_osubluegreen.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(2C6A66FF) rgba(476961FF) rgba(1E7988FF) 45deg + col.inactive_border = rgba(2C6A6666) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_outbreaker.conf b/m3ww/.config/hypr/savedcolors/colors_outbreaker.conf new file mode 100755 index 000000000..9be38c91a --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_outbreaker.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://lh3.googleusercontent.com/mjuSrFmUlV0OV07Jwp8t4djDxzT2NHHTYP5e-lX3Al6GPJU2ZeB42W6zah4PsLaRYyRj0CgLpiKwAYg=w544-h544-l90-rj +general { + col.active_border = rgba(968F71FF) rgba(CCA856FF) rgba(5E8F8BFF) 45deg + col.inactive_border = rgba(968F7166) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_outer.conf b/m3ww/.config/hypr/savedcolors/colors_outer.conf new file mode 100755 index 000000000..a6dd296ed --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_outer.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/JkQ0izNVq6w/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AOn4CLBWz3L9h6QvOBRnl4EQ25BULuM6zg +general { + col.active_border = rgba(465453FF) rgba(57665BFF) rgba(5A8875FF) 45deg + col.inactive_border = rgba(46545366) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_pagoda.conf b/m3ww/.config/hypr/savedcolors/colors_pagoda.conf new file mode 100755 index 000000000..f84422c9a --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_pagoda.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/knIdltn-uf4/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLADTZm2jBfLCa2JY3aoHG9fNviejQ +general { + col.active_border = rgba(587192FF) rgba(6094A6FF) rgba(53BCD5FF) 45deg + col.inactive_border = rgba(58719266) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_piano.conf b/m3ww/.config/hypr/savedcolors/colors_piano.conf new file mode 100755 index 000000000..499d16ee1 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_piano.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(82E6F5FF) rgba(0C9DE0FF) rgba(82E6F5FF) 45deg + col.inactive_border = rgba(40535966) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_purple.conf b/m3ww/.config/hypr/savedcolors/colors_purple.conf new file mode 100755 index 000000000..a2aa43dd3 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_purple.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(e5deffFF) rgba(956CE5FF) rgba(A39AEFFF) 45deg + col.inactive_border = rgba(555555AA) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_purpleplanet.conf b/m3ww/.config/hypr/savedcolors/colors_purpleplanet.conf new file mode 100755 index 000000000..a7b1b7f86 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_purpleplanet.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-000145811820-tdcxea-t80x80.jpg +general { + col.active_border = rgba(6F6BCFFF) rgba(857AD7FF) rgba(9B87BBFF) 45deg + col.inactive_border = rgba(6F6BCF66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_questions.conf b/m3ww/.config/hypr/savedcolors/colors_questions.conf new file mode 100755 index 000000000..b853d4712 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_questions.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/zvuFqUO0lVI/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBBWCjrEnW6fFvusjyR20ghqVkuRQ +general { + col.active_border = rgba(974DECFF) rgba(679AD7FF) rgba(A0A1D9FF) 45deg + col.inactive_border = rgba(974DEC66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_quicksand.conf b/m3ww/.config/hypr/savedcolors/colors_quicksand.conf new file mode 100755 index 000000000..ab2226896 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_quicksand.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/sgfF7QXhNPA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDCzrCG50-ll2-ilsgYtJI-YL8_iw +general { + col.active_border = rgba(62B3D4FF) rgba(6CD0D0FF) rgba(E997AEFF) 45deg + col.inactive_border = rgba(62B3D466) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_raindrops.conf b/m3ww/.config/hypr/savedcolors/colors_raindrops.conf new file mode 100755 index 000000000..98e657bc9 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_raindrops.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/bQPEwCqhBjQ/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AOn4CLC-aefrQSi8LgVWH_FeTG7Yrl7b-g +general { + col.active_border = rgba(505F63FF) rgba(727B84FF) rgba(78838BFF) 45deg + col.inactive_border = rgba(505F6366) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_rebootcode.conf b/m3ww/.config/hypr/savedcolors/colors_rebootcode.conf new file mode 100755 index 000000000..9a129e463 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_rebootcode.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-PkAvHpDy3ypruTdy-C5m8rA-t80x80.jpg +general { + col.active_border = rgba(159DA2FF) rgba(5B9FA2FF) rgba(5ECEBAFF) 45deg + col.inactive_border = rgba(159DA266) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_red.conf b/m3ww/.config/hypr/savedcolors/colors_red.conf new file mode 100755 index 000000000..2b5ab0f10 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_red.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-vz229DA99tPFdm3E-eDLGdQ-t80x80.jpg +general { + col.active_border = rgba(E93B2FFF) rgba(B74037FF) rgba(EA4737FF) 45deg + col.inactive_border = rgba(E93B2F66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_red_material.conf b/m3ww/.config/hypr/savedcolors/colors_red_material.conf new file mode 100755 index 000000000..003a59baf --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_red_material.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(EC6E70FF) rgba(A07A85FF) rgba(F18D8CFF) 45deg + col.inactive_border = rgba(EC6E7066) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_reimugreen.conf b/m3ww/.config/hypr/savedcolors/colors_reimugreen.conf new file mode 100755 index 000000000..1642ed9c5 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_reimugreen.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(dac84eFF) 45deg + col.inactive_border = rgba(555555AA) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_ripples.conf b/m3ww/.config/hypr/savedcolors/colors_ripples.conf new file mode 100755 index 000000000..6707fc8ea --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_ripples.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/iwc8xXoL3WM/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBCdzgc6r9qvldRzSjRoZGX_vCpwg +general { + col.active_border = rgba(31E3F5FF) rgba(54DCF6FF) rgba(CBA6D3FF) 45deg + col.inactive_border = rgba(31E3F566) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_running.conf b/m3ww/.config/hypr/savedcolors/colors_running.conf new file mode 100755 index 000000000..e96092c1a --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_running.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/Crlc6AQr61M/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AOn4CLDdQPef0Ec5x28JLgLCyT4Qa9JeqQ +general { + col.active_border = rgba(8C77B7FF) rgba(718C8FFF) rgba(4ED0C4FF) 45deg + col.inactive_border = rgba(8C77B766) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_s73.conf b/m3ww/.config/hypr/savedcolors/colors_s73.conf new file mode 100755 index 000000000..78f7bc105 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_s73.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-000117563971-vx726i-t80x80.jpg +general { + col.active_border = rgba(A29EA5FF) rgba(E499B3FF) rgba(F79AC3FF) 45deg + col.inactive_border = rgba(A29EA566) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_seethestars.conf b/m3ww/.config/hypr/savedcolors/colors_seethestars.conf new file mode 100755 index 000000000..db6536f51 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_seethestars.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/TYMPpgRonQo/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAaay-LobzXjEY4nR6cRMzjWXPzKA +general { + col.active_border = rgba(4D4658FF) rgba(52546EFF) rgba(A1D51CFF) 45deg + col.inactive_border = rgba(4D465866) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_shelter.conf b/m3ww/.config/hypr/savedcolors/colors_shelter.conf new file mode 100755 index 000000000..345d0808a --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_shelter.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/HQnC1UHBvWA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDHErZfzFhJMeje_Tbpc7nZgAn7Bw +general { + col.active_border = rgba(50B6A3FF) rgba(15E09EFF) rgba(0BFCCBFF) 45deg + col.inactive_border = rgba(50B6A366) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_shiny.conf b/m3ww/.config/hypr/savedcolors/colors_shiny.conf new file mode 100755 index 000000000..afc65c791 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_shiny.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(5C6ADFFF) rgba(B650B9FF) rgba(40C3F0FF) 45deg + col.inactive_border = rgba(5C6ADF66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_skylightz.conf b/m3ww/.config/hypr/savedcolors/colors_skylightz.conf new file mode 100755 index 000000000..432ad4bcb --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_skylightz.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/i7cDLZgrqW4/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCRBvhM7aVv-ZgGz3TeptwLxpkccA +general { + col.active_border = rgba(AF682FFF) rgba(94744EFF) rgba(AB8D5BFF) 45deg + col.inactive_border = rgba(AF682F66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_something.conf b/m3ww/.config/hypr/savedcolors/colors_something.conf new file mode 100755 index 000000000..3722f2474 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_something.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-nL66GQT0mV6xB0sq-VWO0IQ-t80x80.jpg +general { + col.active_border = rgba(C74DD3FF) rgba(D14EEDFF) rgba(47D3F2FF) 45deg + col.inactive_border = rgba(C74DD366) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_space.conf b/m3ww/.config/hypr/savedcolors/colors_space.conf new file mode 100755 index 000000000..1ae5e2440 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_space.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/MFLLM-IlAiA/hqdefault.jpg?sqp=-oaymwE2CNACELwBSFXyq4qpAygIARUAAIhCGAFwAcABBvABAfgBgAqAAtAFigIMCAAQARg6ICUofzAP&rs=AOn4CLCAxEwS6DeTEdj-ZUHlDG4KX9v7gg +general { + col.active_border = rgba(38298CFF) rgba(52329DFF) rgba(693EC2FF) 45deg + col.inactive_border = rgba(38298C66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_spacepark.conf b/m3ww/.config/hypr/savedcolors/colors_spacepark.conf new file mode 100755 index 000000000..edcfd0f94 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_spacepark.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/4a7IQMXRTjo/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AOn4CLAbgVnnrFumMO52CQqoOH07NAAoiw +general { + col.active_border = rgba(D5754AFF) rgba(D29156FF) rgba(A49A98FF) 45deg + col.inactive_border = rgba(D5754A66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_store.conf b/m3ww/.config/hypr/savedcolors/colors_store.conf new file mode 100755 index 000000000..909d9c2b5 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_store.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(AF8D61FF) rgba(CEB153FF) rgba(7B8387FF) 45deg + col.inactive_border = rgba(AF8D6166) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_stray.conf b/m3ww/.config/hypr/savedcolors/colors_stray.conf new file mode 100755 index 000000000..8e9967783 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_stray.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/wmxTC1Ekdl0/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC3jHf2azRr9sX7Uf9X4jkA-WBouw +general { + col.active_border = rgba(2A6D69FF) rgba(4A736AFF) rgba(56A264FF) 45deg + col.inactive_border = rgba(2A6D6966) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_summer-gruv.conf b/m3ww/.config/hypr/savedcolors/colors_summer-gruv.conf new file mode 100755 index 000000000..91a7aeab6 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_summer-gruv.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-vh98Q4s3QFJT23EV-FvvRqg-t80x80.jpg +general { + col.active_border = rgba(265B9DFF) rgba(5363A2FF) rgba(9763B1FF) 45deg + col.inactive_border = rgba(265B9D66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_thinkingaboutyou.conf b/m3ww/.config/hypr/savedcolors/colors_thinkingaboutyou.conf new file mode 100755 index 000000000..91a7aeab6 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_thinkingaboutyou.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-vh98Q4s3QFJT23EV-FvvRqg-t80x80.jpg +general { + col.active_border = rgba(265B9DFF) rgba(5363A2FF) rgba(9763B1FF) 45deg + col.inactive_border = rgba(265B9D66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_towerofheaven.conf b/m3ww/.config/hypr/savedcolors/colors_towerofheaven.conf new file mode 100755 index 000000000..ecfd141e2 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_towerofheaven.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/z-sAl3S5qB8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDzRfHxWNw0j06WF2biOQ-VbcUoTw +general { + col.active_border = rgba(BDB85EFF) rgba(376993FF) rgba(43B9BFFF) 45deg + col.inactive_border = rgba(BDB85E66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_treecity.conf b/m3ww/.config/hypr/savedcolors/colors_treecity.conf new file mode 100755 index 000000000..124ea4017 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_treecity.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(70736BFF) rgba(807E7DFF) rgba(858B79FF) 45deg + col.inactive_border = rgba(70736B66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_ureshii.conf b/m3ww/.config/hypr/savedcolors/colors_ureshii.conf new file mode 100755 index 000000000..6b0dc279a --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_ureshii.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/wbKCxh6Cbas/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBGivzPsRD2wlU0kfKvi78QajjbbQ +general { + col.active_border = rgba(57AED7FF) rgba(ACA5ABFF) rgba(F2B9C6FF) 45deg + col.inactive_border = rgba(57AED766) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_vacuumtrack.conf b/m3ww/.config/hypr/savedcolors/colors_vacuumtrack.conf new file mode 100755 index 000000000..39beef0c3 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_vacuumtrack.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/1pS7H0idJok/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AOn4CLArWcsuqPN1TEVR4A0ipjGuM69bsA +general { + col.active_border = rgba(60A15FFF) rgba(2F728DFF) rgba(9AA8ABFF) 45deg + col.inactive_border = rgba(60A15F66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_valhalla.conf b/m3ww/.config/hypr/savedcolors/colors_valhalla.conf new file mode 100755 index 000000000..93fdfc071 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_valhalla.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/-EDhOHxUYBI/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDwfUPyaJr5NC-mDW_CQfTR2BzQgw +general { + col.active_border = rgba(668C76FF) rgba(A5916FFF) rgba(ABA793FF) 45deg + col.inactive_border = rgba(668C7666) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_vertigo.conf b/m3ww/.config/hypr/savedcolors/colors_vertigo.conf new file mode 100755 index 000000000..eedc5176b --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_vertigo.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/TJB0vBURJu8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBSn25aezZvjIetBF8GVsTMPat0Zw +general { + col.active_border = rgba(9D62AAFF) rgba(B570BEFF) rgba(AE9FD6FF) 45deg + col.inactive_border = rgba(9D62AA66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_viking.conf b/m3ww/.config/hypr/savedcolors/colors_viking.conf new file mode 100755 index 000000000..2b7d84532 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_viking.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-000133005283-3v8p3y-t80x80.jpg +general { + col.active_border = rgba(43807FFF) rgba(3F8181FF) rgba(6FAAA9FF) 45deg + col.inactive_border = rgba(43807F66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_virtuality_yellow.conf b/m3ww/.config/hypr/savedcolors/colors_virtuality_yellow.conf new file mode 100755 index 000000000..364a80be1 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_virtuality_yellow.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-000206124670-565xt2-t80x80.jpg +general { + col.active_border = rgba(64544EFF) rgba(8F6A1EFF) rgba(A39716FF) 45deg + col.inactive_border = rgba(64544E66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_wayfire.conf b/m3ww/.config/hypr/savedcolors/colors_wayfire.conf new file mode 100755 index 000000000..545ad05bf --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_wayfire.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(5D522DFF) rgba(4F4A4BFF) rgba(8E6D47FF) 45deg + col.inactive_border = rgba(5D522D66) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_winglow.conf b/m3ww/.config/hypr/savedcolors/colors_winglow.conf new file mode 100755 index 000000000..6d1c33669 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_winglow.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: [Local wallpaper] +general { + col.active_border = rgba(A33449FF) rgba(941463FF) rgba(63059AFF) 45deg + col.inactive_border = rgba(A3344966) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_wontletyougo.conf b/m3ww/.config/hypr/savedcolors/colors_wontletyougo.conf new file mode 100755 index 000000000..e4bd8308a --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_wontletyougo.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i1.sndcdn.com/artworks-TjOvf5O3gR9APB4i-XDwyyQ-t80x80.jpg +general { + col.active_border = rgba(7B8AD7FF) rgba(8FA5ABFF) rgba(A7A2E4FF) 45deg + col.inactive_border = rgba(7B8AD766) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_yae.conf b/m3ww/.config/hypr/savedcolors/colors_yae.conf new file mode 100755 index 000000000..4fc0d05d2 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_yae.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/_WUbjkbo_68/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD21OKbXXt2noW8DCM03zaAWn4ayw +general { + col.active_border = rgba(A59AA1FF) rgba(EA9EA6FF) rgba(B9AFCBFF) 45deg + col.inactive_border = rgba(A59AA166) +} diff --git a/m3ww/.config/hypr/savedcolors/colors_zoetrope.conf b/m3ww/.config/hypr/savedcolors/colors_zoetrope.conf new file mode 100755 index 000000000..bb2748ac9 --- /dev/null +++ b/m3ww/.config/hypr/savedcolors/colors_zoetrope.conf @@ -0,0 +1,5 @@ +# Auto generated color theme for image at: https://i.ytimg.com/vi/VFQJtOWvLj8/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AOn4CLAhXM1ytyNZdqR6WDnwGXH2ennWHQ +general { + col.active_border = rgba(A9959DFF) rgba(D7A2A6FF) rgba(E3C5BCFF) 45deg + col.inactive_border = rgba(A9959D66) +} diff --git a/m3ww/.config/hypr/shaders/bluefilter.frag b/m3ww/.config/hypr/shaders/bluefilter.frag new file mode 100755 index 000000000..5469af9c6 --- /dev/null +++ b/m3ww/.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/m3ww/.config/hypr/shaders/blur.frag b/m3ww/.config/hypr/shaders/blur.frag new file mode 100755 index 000000000..700dfb21c --- /dev/null +++ b/m3ww/.config/hypr/shaders/blur.frag @@ -0,0 +1,39 @@ +precision mediump float; +varying vec2 v_texcoord; // is in 0-1 +uniform sampler2D tex; +uniform float alpha; + +uniform vec2 topLeft; +uniform vec2 fullSize; +uniform float radius; + +uniform int discardOpaque; +uniform int discardAlpha; +uniform float discardAlphaValue; + +uniform int applyTint; +uniform vec3 tint; + +uniform int primitiveMultisample; + +void main() { + + vec4 pixColor = texture2D(tex, v_texcoord); + + if (discardOpaque == 1 && pixColor[3] * alpha == 1.0) + discard; + + if (discardAlpha == 1 && pixColor[3] <= discardAlphaValue) + discard; + + if (applyTint == 1) { + pixColor[0] = pixColor[0] * tint[0]; + pixColor[1] = pixColor[1] * tint[1]; + pixColor[2] = pixColor[2] * tint[2]; + } + + )#" + + ROUNDED_SHADER_FUNC("pixColor") + R"#( + + gl_FragColor = pixColor * alpha; +} \ No newline at end of file diff --git a/m3ww/.config/hypr/shaders/crt.frag b/m3ww/.config/hypr/shaders/crt.frag new file mode 100755 index 000000000..a37ff9fb2 --- /dev/null +++ b/m3ww/.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/m3ww/.config/hypr/shaders/drugs.frag b/m3ww/.config/hypr/shaders/drugs.frag new file mode 100755 index 000000000..1190ed03c --- /dev/null +++ b/m3ww/.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/m3ww/.config/hypr/shaders/extradark.frag b/m3ww/.config/hypr/shaders/extradark.frag new file mode 100755 index 000000000..089ee8149 --- /dev/null +++ b/m3ww/.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/m3ww/.config/hypr/shaders/nothing.frag b/m3ww/.config/hypr/shaders/nothing.frag new file mode 100755 index 000000000..163e6003a --- /dev/null +++ b/m3ww/.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/m3ww/.config/hypr/shaders/solarized.frag b/m3ww/.config/hypr/shaders/solarized.frag new file mode 100755 index 000000000..1c37f2cc0 --- /dev/null +++ b/m3ww/.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/m3ww/.config/hypr/shaders/vibrance.frag b/m3ww/.config/hypr/shaders/vibrance.frag new file mode 100644 index 000000000..5d3d48809 --- /dev/null +++ b/m3ww/.config/hypr/shaders/vibrance.frag @@ -0,0 +1,39 @@ +// vibrance for hyprland + +precision mediump float; +varying vec2 v_texcoord; +uniform sampler2D tex; + +// see https://github.com/CeeJayDK/SweetFX/blob/a792aee788c6203385a858ebdea82a77f81c67f0/Shaders/Vibrance.fx#L20-L30 +const vec3 VIB_RGB_BALANCE = vec3(1.0, 1.0, 1.0); +const float VIB_VIBRANCE = 0.15; + + +const vec3 VIB_coeffVibrance = VIB_RGB_BALANCE * -VIB_VIBRANCE; + +void main() { + + vec4 pixColor = texture2D(tex, v_texcoord); + + // RGB + vec3 color = vec3(pixColor[0], pixColor[1], pixColor[2]); + + + // vec3 VIB_coefLuma = vec3(0.333333, 0.333334, 0.333333); // was for `if VIB_LUMA == 1` + vec3 VIB_coefLuma = vec3(0.212656, 0.715158, 0.072186); // try both and see which one looks nicer. + + float luma = dot(VIB_coefLuma, color); + + float max_color = max(color[0], max(color[1], color[2])); + float min_color = min(color[0], min(color[1], color[2])); + + float color_saturation = max_color - min_color; + + vec3 p_col = vec3(vec3(vec3(vec3(sign(VIB_coeffVibrance) * color_saturation) - 1.0) * VIB_coeffVibrance) + 1.0); + + pixColor[0] = mix(luma, color[0], p_col[0]); + pixColor[1] = mix(luma, color[1], p_col[1]); + pixColor[2] = mix(luma, color[2], p_col[2]); + + gl_FragColor = pixColor; +} \ No newline at end of file diff --git a/m3ww/.config/mpv/mpv.conf b/m3ww/.config/mpv/mpv.conf new file mode 100644 index 000000000..f7dc66c09 --- /dev/null +++ b/m3ww/.config/mpv/mpv.conf @@ -0,0 +1 @@ +keep-open=yes \ No newline at end of file diff --git a/m3ww/.config/starship.toml b/m3ww/.config/starship.toml new file mode 100755 index 000000000..b0281d3ca --- /dev/null +++ b/m3ww/.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:cyan fg:blue)[$hostname](bg:cyan bold fg:#000000)[ ](bold fg:cyan 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:blue" +truncation_length = 2 +truncation_symbol = "./" +format = '[$path]($style)[🭞](fg:green)' + + +[directory.substitutions] +"Documents" = " " +"/" = "  " +"Downloads" = " " +"Music" = " " +"Pictures" = " " + +[cmd_duration] +min_time = 0 +format = '[🬈🬖🬥🬅 ](bold bg:yellow fg:#000000)[time:$duration](bold bg:yellow fg:#000000)[ 🬖🬥🬔🬗](bold bg:yellow fg:#000000)' diff --git a/m3ww/.config/wlogout/layout b/m3ww/.config/wlogout/layout new file mode 100755 index 000000000..2d79da961 --- /dev/null +++ b/m3ww/.config/wlogout/layout @@ -0,0 +1,36 @@ +{ + "label" : "lock", + "action" : "gtklock", + "text" : "lock", + "keybind" : "l" +} +{ + "label" : "hibernate", + "action" : "systemctl hibernate", + "text" : "save", + "keybind" : "h" +} +{ + "label" : "logout", + "action" : "loginctl terminate-user $USER", + "text" : "logout", + "keybind" : "e" +} +{ + "label" : "shutdown", + "action" : "systemctl poweroff", + "text" : "power_settings_new", + "keybind" : "s" +} +{ + "label" : "suspend", + "action" : "systemctl suspend", + "text" : "bedtime", + "keybind" : "u" +} +{ + "label" : "reboot", + "action" : "systemctl reboot", + "text" : "restart_alt", + "keybind" : "r" +} diff --git a/m3ww/.config/wlogout/noise.png b/m3ww/.config/wlogout/noise.png new file mode 100755 index 000000000..028b188b5 Binary files /dev/null and b/m3ww/.config/wlogout/noise.png differ diff --git a/m3ww/.config/wlogout/style.css b/m3ww/.config/wlogout/style.css new file mode 100755 index 000000000..8b72ccd0e --- /dev/null +++ b/m3ww/.config/wlogout/style.css @@ -0,0 +1,27 @@ +* { + all: unset; + background-image: none; + transition: 400ms cubic-bezier(0.05, 0.7, 0.1, 1); +} + +window { + background: rgba(0, 0, 0, 0.5); + background-image: url('./noise.png'); +} + +button { + font-family: 'Material Symbols Outlined'; + font-size: 10rem; + background-color: rgba(11, 11, 11, 0.4); + color: #FFFFFF; + margin: 2rem; + border-radius: 2rem; + padding: 3rem; +} + +button:focus, +button:active, +button:hover { + background-color: rgba(51, 51, 51, 0.5); + border-radius: 4rem; +} \ No newline at end of file diff --git a/m3ww/.local/bin/record-script-fullscreen.sh b/m3ww/.local/bin/record-script-fullscreen.sh new file mode 100755 index 000000000..51f723a0f --- /dev/null +++ b/m3ww/.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/m3ww/.local/bin/record-script.sh b/m3ww/.local/bin/record-script.sh new file mode 100755 index 000000000..1e38b9ddf --- /dev/null +++ b/m3ww/.local/bin/record-script.sh @@ -0,0 +1,10 @@ +#/usr/bin/bash + +cd /home/end/Videos +if [[ "$(pidof wf-recorder)" == "" ]]; then + notify-send "wf-recorder" "Starting recording" -a 'wf-recorder' + wf-recorder -f './recording_'"$(date '+%Y_%m_%_d..%H.%M')"'.mp4' -t --geometry "$(slurp)" +else + /usr/bin/kill --signal SIGINT wf-recorder + notify-send "wf-recorder" "Recording Stopped" -a 'wf-recorder' +fi \ No newline at end of file diff --git a/m3ww/.local/bin/rubyshot b/m3ww/.local/bin/rubyshot new file mode 100755 index 000000000..8431bd693 --- /dev/null +++ b/m3ww/.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/m3ww/.local/bin/switchrice.sh b/m3ww/.local/bin/switchrice.sh new file mode 100755 index 000000000..5a5581632 --- /dev/null +++ b/m3ww/.local/bin/switchrice.sh @@ -0,0 +1,14 @@ +#!/usr/bin/bash + +if [[ "$2" == "" ]]; then # basic rice switching + notify-send 'Usage: >swr [save name] [load name]' + exit +fi +mkdir -p ~/.config/__enderice/ +mv ~/.config/eww ~/.config/__enderice/eww_"$1" +mv ~/.config/hypr ~/.config/__enderice/hypr_"$1" + +mv ~/.config/__enderice/eww_"$2" ~/.config/eww +mv ~/.config/__enderice/hypr_"$2" ~/.config/hypr + +pkill eww && eww open bar && eww open bgdecor \ No newline at end of file diff --git a/m3ww/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/Cached Theme.pak b/m3ww/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/Cached Theme.pak new file mode 100755 index 000000000..036a8e860 Binary files /dev/null and b/m3ww/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/Cached Theme.pak differ diff --git a/m3ww/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon128.png b/m3ww/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon128.png new file mode 100755 index 000000000..fbe2ed7e2 Binary files /dev/null and b/m3ww/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon128.png differ diff --git a/m3ww/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon16.png b/m3ww/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon16.png new file mode 100755 index 000000000..75e6ced3b Binary files /dev/null and b/m3ww/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon16.png differ diff --git a/m3ww/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon48.png b/m3ww/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon48.png new file mode 100755 index 000000000..c93cfc794 Binary files /dev/null and b/m3ww/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/images/icon48.png differ diff --git a/m3ww/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/manifest.json b/m3ww/Import Manually/chromethemes/Chrome-catppuccin-mocha-Colorful/manifest.json new file mode 100755 index 000000000..0e4fd0f9e --- /dev/null +++ b/m3ww/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/m3ww/Import Manually/chromethemes/EverForest-Dark-B/Cached Theme.pak b/m3ww/Import Manually/chromethemes/EverForest-Dark-B/Cached Theme.pak new file mode 100755 index 000000000..6cb19536f Binary files /dev/null and b/m3ww/Import Manually/chromethemes/EverForest-Dark-B/Cached Theme.pak differ diff --git a/m3ww/Import Manually/chromethemes/EverForest-Dark-B/images/icon128.png b/m3ww/Import Manually/chromethemes/EverForest-Dark-B/images/icon128.png new file mode 100755 index 000000000..fbe2ed7e2 Binary files /dev/null and b/m3ww/Import Manually/chromethemes/EverForest-Dark-B/images/icon128.png differ diff --git a/m3ww/Import Manually/chromethemes/EverForest-Dark-B/images/icon16.png b/m3ww/Import Manually/chromethemes/EverForest-Dark-B/images/icon16.png new file mode 100755 index 000000000..75e6ced3b Binary files /dev/null and b/m3ww/Import Manually/chromethemes/EverForest-Dark-B/images/icon16.png differ diff --git a/m3ww/Import Manually/chromethemes/EverForest-Dark-B/images/icon48.png b/m3ww/Import Manually/chromethemes/EverForest-Dark-B/images/icon48.png new file mode 100755 index 000000000..c93cfc794 Binary files /dev/null and b/m3ww/Import Manually/chromethemes/EverForest-Dark-B/images/icon48.png differ diff --git a/m3ww/Import Manually/chromethemes/EverForest-Dark-B/manifest.json b/m3ww/Import Manually/chromethemes/EverForest-Dark-B/manifest.json new file mode 100755 index 000000000..6f2f5bd69 --- /dev/null +++ b/m3ww/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/m3ww/Import Manually/chromethemes/README.md b/m3ww/Import Manually/chromethemes/README.md new file mode 100644 index 000000000..8c35b6a95 --- /dev/null +++ b/m3ww/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/m3ww/Import Manually/chromethemes/TokyoNight/Cached Theme.pak b/m3ww/Import Manually/chromethemes/TokyoNight/Cached Theme.pak new file mode 100755 index 000000000..72a3c406a Binary files /dev/null and b/m3ww/Import Manually/chromethemes/TokyoNight/Cached Theme.pak differ diff --git a/m3ww/Import Manually/chromethemes/TokyoNight/images/icon128.png b/m3ww/Import Manually/chromethemes/TokyoNight/images/icon128.png new file mode 100755 index 000000000..fbe2ed7e2 Binary files /dev/null and b/m3ww/Import Manually/chromethemes/TokyoNight/images/icon128.png differ diff --git a/m3ww/Import Manually/chromethemes/TokyoNight/images/icon16.png b/m3ww/Import Manually/chromethemes/TokyoNight/images/icon16.png new file mode 100755 index 000000000..75e6ced3b Binary files /dev/null and b/m3ww/Import Manually/chromethemes/TokyoNight/images/icon16.png differ diff --git a/m3ww/Import Manually/chromethemes/TokyoNight/images/icon48.png b/m3ww/Import Manually/chromethemes/TokyoNight/images/icon48.png new file mode 100755 index 000000000..c93cfc794 Binary files /dev/null and b/m3ww/Import Manually/chromethemes/TokyoNight/images/icon48.png differ diff --git a/m3ww/Import Manually/chromethemes/TokyoNight/manifest.json b/m3ww/Import Manually/chromethemes/TokyoNight/manifest.json new file mode 100755 index 000000000..9f9e5ed0a --- /dev/null +++ b/m3ww/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/m3ww/Import Manually/execs (add to path)/lock.sh b/m3ww/Import Manually/execs (add to path)/lock.sh new file mode 100755 index 000000000..df768dd43 --- /dev/null +++ b/m3ww/Import Manually/execs (add to path)/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/m3ww/Import Manually/execs (add to path)/record-script.sh b/m3ww/Import Manually/execs (add to path)/record-script.sh new file mode 100755 index 000000000..2b0bff036 --- /dev/null +++ b/m3ww/Import Manually/execs (add to path)/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/m3ww/Import Manually/execs (add to path)/wofi-emoji b/m3ww/Import Manually/execs (add to path)/wofi-emoji new file mode 100755 index 000000000..938db3afc --- /dev/null +++ b/m3ww/Import Manually/execs (add to path)/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/m3ww/Import Manually/firefox userchrome/chrome/theme/colors/dark-maia.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/colors/dark-maia.css new file mode 100755 index 000000000..49a96f1bb --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/colors/dark-maia.css @@ -0,0 +1,20 @@ +@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +/* Variables that start with --gnome- are added by me and are assigned + * to elements somewhere in this code. The rest of the variables are + * built-in in Firefox, so you need to add an !important if you wanna + * override them. */ +@media (prefers-color-scheme: dark) { + :root { + /* Accent */ + --gnome-accent: #16A085; + + /* Buttons */ + --gnome-button-suggested-action-background: linear-gradient(to top, rgb(36, 235, 195) 2px, #16A085); + --gnome-button-suggested-action-border-color: #16A085; + --gnome-button-suggested-action-border-accent-color: #004b3d; + --gnome-button-suggested-action-hover-background: linear-gradient(to top, rgb(36, 235, 195), #16A085 1px); + --gnome-button-suggested-action-active-background: rgb(16, 129, 107); + --gnome-button-suggested-action-active-border-color: rgb(13, 109, 90); + } +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/colors/dark.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/colors/dark.css new file mode 100755 index 000000000..fe63d6bb2 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/colors/dark.css @@ -0,0 +1,115 @@ +@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +/* Variables that start with --gnome- are added by me and are assigned + * to elements somewhere in this code. The rest of the variables are + * built-in in Firefox, so you need to add an !important if you wanna + * override them. */ +@media (prefers-color-scheme: dark) { + :root { + /* Browser area before a page starts loading */ + --gnome-browser-before-load-background: #191C1C; + + /* Accent */ + --gnome-accent-bg: #C8BFFF; + --gnome-accent: #E5DEFF; + + /* Toolbars */ + --gnome-toolbar-background: var(--gnome-headerbar-background); + --gnome-toolbar-color: #E5DEFF; + --gnome-toolbar-border-color: #191C1C; + --gnome-toolbar-icon-fill: #E5DEFF; + --gnome-inactive-toolbar-color: #757676; + --gnome-inactive-toolbar-background: var(--gnome-inactive-headerbar-background); + --gnome-inactive-toolbar-border-color: var(--gnome-toolbar-border-color); + --gnome-inactive-toolbar-icon-fill: #757676; + + /* Sidebar */ + --gnome-sidebar-background: var(--gnome-toolbar-background); + --gnome-inactive-sidebar-background: var(--gnome-sidebar-background); + + /* Menus */ + --gnome-menu-background: #302F33; + --gnome-menu-border-color: rgba(0, 0, 0, .14); + --gnome-menu-shadow: 0 1px 5px 1px rgba(0,0,0, .09), 0 2px 14px 3px rgba(0,0,0, .05); + --gnome-menu-button-hover-background: var(--gnome-button-background); + --gnome-menu-separator-color: #373A3A; + + /* Header bar */ + --gnome-headerbar-background: #0A0A0B; + --gnome-headerbar-border-color: var(--gnome-toolbar-border-color); + --gnome-inactive-headerbar-background: var(--gnome-browser-before-load-background); + --gnome-inactive-headerbar-border-color: var(--gnome-toolbar-border-color); + + /* Buttons */ + --gnome-button-background: rgba(255, 255, 255, .1); + --gnome-button-hover-background: rgba(255, 255, 255, .15); + --gnome-button-active-background: rgba(255, 255, 255, .3); + --gnome-button-flat-hover-background: rgba(255, 255, 255, .07); + --gnome-button-flat-active-background: rgba(255, 255, 255, .1); + --gnome-button-suggested-action-background: var(--gnome-accent-bg); + --gnome-button-destructive-action-background: #ff6385; + + --gnome-button-close-background: var(--gnome-button-flat-hover-background); + --gnome-button-hover-close-background:var(--gnome-button-hover-background); + --gnome-button-active-close-background: var(--gnome-button-active-background); + + --gnome-toolbar-star-button: #E3C18C; + + /* Entries */ + --gnome-entry-background: #2D3030; + --gnome-entry-color: #E5DEFF; + --gnome-inactive-entry-color: #757676; + --gnome-focused-urlbar-border-color: rgba(229, 222, 255, 0.5); /* Same as --gnome-accent but with opacity*/ + + /* Switch */ + --gnome-switch-background: rgba(255, 255, 255, .15); + --gnome-switch-slider-background: #312927; + --gnome-switch-active-background: var(--gnome-accent-bg); + --gnome-switch-active-slider-background: #292D2D; + + /* Tabs */ + --gnome-tabbar-background: var(--gnome-headerbar-background); + --gnome-tabbar-tab-separator-color: #0A0A0B; + --gnome-tabbar-tab-hover-background: #272A2C; /* Hardcoded color */ + --gnome-tabbar-tab-active-background: #474459; /* Hardcoded color */ + --gnome-tabbar-tab-active-background-contrast: #7A7897; /* Hardcoded color */ + --gnome-tabbar-tab-active-hover-background: #333535; /* Hardcoded color */ + --gnome-inactive-tabbar-background: var(--gnome-inactive-headerbar-background); + --gnome-inactive-tabbar-tab-hover-background: #272A2C; /* Hardcoded color */ + --gnome-inactive-tabbar-tab-active-background: #474459; /* Hardcoded color */ + --gnome-tab-button-background: rgba(0, 0, 0, .5); + --gnome-tab-button-hover-background: rgba(0, 0, 0, .6); + --gnome-tabbar-tab-identity-base-opacity: 0; + --gnome-tabbar-tab-needs-attetion: #E477EE; + } + + /* Private window colors */ + :root { + --gnome-private-accent: #E5DEFF; + + /* Toolbars */ + --gnome-private-toolbar-background: var(--gnome-headerbar-background); + --gnome-private-inactive-toolbar-background: var(--gnome-inactive-headerbar-background); + /* Menus */ + --gnome-private-menu-background: #302F33; + /* Header bar */ + --gnome-private-headerbar-background: #191C1C; + --gnome-private-inactive-headerbar-background: var(--gnome-private-toolbar-background); + /* Tabs */ + --gnome-private-tabbar-tab-hover-background: #343e56; /* Hardcoded color */ + --gnome-private-tabbar-tab-active-background: #343e56; /* Hardcoded color */ + --gnome-private-tabbar-tab-active-background-contrast: #495675; /* Hardcoded color */ + --gnome-private-tabbar-tab-active-hover-background: #414a61; /* Hardcoded color */ + --gnome-private-inactive-tabbar-tab-hover-background: #242c3f; /* Hardcoded color */ + --gnome-private-inactive-tabbar-tab-active-background: #272e41; /* Hardcoded color */ + + /* Text color for Firefox Logo in new private tab */ + --gnome-private-wordmark: #E5DEFF; + + /* New private tab background */ + --gnome-private-in-content-page-background: #242424; + + /* Private browsing info box */ + --gnome-private-text-primary-color: #E5DEFF; + } +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/colors/light-maia.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/colors/light-maia.css new file mode 100755 index 000000000..a1bfe136e --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/colors/light-maia.css @@ -0,0 +1,48 @@ +@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +/* Variables that start with --gnome- are added by me and are assigned + * to elements somewhere in this code. The rest of the variables are + * built-in in Firefox, so you need to add an !important if you wanna + * override them. */ + +:root { + /* Accent */ + --gnome-accent: #16A085; + + /* Buttons */ + --gnome-button-suggested-action-background: linear-gradient(to top, rgb(36, 235, 195) 2px, #16A085); + --gnome-button-suggested-action-border-color: #16A085; + --gnome-button-suggested-action-border-accent-color: #004b3d; + --gnome-button-suggested-action-hover-background: linear-gradient(to top, rgb(36, 235, 195), #16A085 1px); + --gnome-button-suggested-action-active-background: rgb(16, 129, 107); + --gnome-button-suggested-action-active-border-color: rgb(13, 109, 90); + + /* Switch */ + --gnome-switch-active-border-color: #1fdab5; + --gnome-switch-active-slider-border-color: #1fdab5; +} + +/* Recolor some elements that are blue by default */ + +#star-button[starred] { + fill: #16A085 !important; + } + +.tab-throbber[busy]::before { + background-image: url("chrome://global/skin/icons/loading.png") !important; + animation: unset !important; + filter: invert(0.9) sepia(1) saturate(5) hue-rotate(110deg) +} +.tab-throbber[busy]:not([progress])::before { + /* Grays the blue during "Connecting" state */ + filter: grayscale(100%); +} +@media (min-resolution: 2dppx) { + .tab-throbber[busy]::before { + background-image: url("chrome://global/skin/icons/loading@2x.png") !important; + } +} + +#tabbrowser-tabs { + --tab-loading-fill: #16A085! important; +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/colors/light.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/colors/light.css new file mode 100755 index 000000000..7a7160934 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/colors/light.css @@ -0,0 +1,111 @@ +@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +/* Variables that start with --gnome- are added by me and are assigned + * to elements somewhere in this code. The rest of the variables are + * built-in in Firefox, so you need to add an !important if you wanna + * override them. */ + +:root { + /* Browser area before a page starts loading */ + --gnome-browser-before-load-background: #FAFAFA; + /* Accent */ + --gnome-accent-bg: #3584e4; + --gnome-accent: #1c71d8; + + /* Toolbars */ + --gnome-toolbar-background: var(--gnome-headerbar-background); + --gnome-toolbar-color: rgb(46, 52, 54); + --gnome-toolbar-border-color: #dbdbdb; + --gnome-toolbar-icon-fill: #2f2f2f; + --gnome-inactive-toolbar-background: var(--gnome-inactive-headerbar-background); + --gnome-inactive-toolbar-color: #d5d0cc; + --gnome-inactive-toolbar-border-color: #e9e9e9; + --gnome-inactive-toolbar-icon-fill: #969696; + + /* Sidebar */ + --gnome-sidebar-background: var(--gnome-toolbar-background); + --gnome-inactive-sidebar-background: var(--gnome-sidebar-background); + + /* Menu */ + --gnome-menu-background: #ffffff; + --gnome-menu-border-color: rgba(0, 0, 0, .14); + --gnome-menu-shadow: 0 1px 5px 1px rgba(0,0,0, .09), 0 2px 14px 3px rgba(0,0,0, .05); + --gnome-menu-button-hover-background: var(--gnome-button-background); + --gnome-menu-separator-color: rgba(0, 0, 0, 0.1); + + /* Header bar */ + --gnome-headerbar-background: #EBEBEB; + --gnome-headerbar-border-color: var(--gnome-toolbar-border-color); + --gnome-inactive-headerbar-background: var(--gnome-browser-before-load-background); + --gnome-inactive-headerbar-border-color: var(--gnome-inactive-toolbar-border-color); + + /* Buttons */ + --gnome-button-background: rgba(0, 0, 0, .08); + --gnome-button-hover-background: rgba(0, 0, 0, .12); + --gnome-button-active-background: rgba(0, 0, 0, .24); + --gnome-button-flat-hover-background: rgba(0, 0, 0, .056); + --gnome-button-flat-active-background: rgba(0, 0, 0, .128); + --gnome-button-suggested-action-background: var(--gnome-accent-bg); + --gnome-button-destructive-action-background: #e01b24; + + --gnome-button-close-background: var(--gnome-button-background); + --gnome-button-hover-close-background:var(--gnome-button-hover-background); + --gnome-button-active-close-background: var(--gnome-button-active-background); + + --gnome-toolbar-star-button: #ae7b03; + + /* Entries */ + --gnome-entry-background: rgba(0, 0, 0, .08); + --gnome-entry-color: #303030; + --gnome-inactive-entry-color: #303030; + --gnome-focused-urlbar-border-color: rgba(28, 113, 216, .5); + + /* Switch */ + --gnome-switch-background: rgba(0, 0, 0, .12); + --gnome-switch-slider-background: #ffffff; + --gnome-switch-active-background: var(--gnome-accent-bg); + --gnome-switch-active-slider-background: #ffffff; + + /* Tabs */ + --gnome-tabbar-background: var(--gnome-headerbar-background); + --gnome-tabbar-tab-separator-color: var(--gnome-toolbar-border-color); + --gnome-tabbar-tab-hover-background: #dedede; /* Hardcoded color */ + --gnome-tabbar-tab-active-background: #d9d9d9; /* Hardcoded color */ + --gnome-tabbar-tab-active-background-contrast: #c0c0c0; /* Hardcoded color */ + --gnome-tabbar-tab-active-hover-background: #d2d2d2; /* Hardcoded color */ + --gnome-inactive-tabbar-background: var(--gnome-inactive-headerbar-background); + --gnome-inactive-tabbar-tab-hover-background: #f3f3f3; /* Hardcoded color */ + --gnome-inactive-tabbar-tab-active-background: #EFEFEF; /* Hardcoded color */ + --gnome-tabbar-tab-identity-base-opacity: .1; + --gnome-tabbar-tab-needs-attetion: #84AEE2; +} + +/* Private window colors */ +:root { + --gnome-private-accent: #1c71d8; + + /* Toolbars */ + --gnome-private-toolbar-background: var(--gnome-headerbar-background); + --gnome-private-inactive-toolbar-background: var(--gnome-inactive-headerbar-background); + /* Menus */ + --gnome-private-menu-background: #ffffff; + /* Header bar */ + --gnome-private-headerbar-background: #D7E3F0; + --gnome-private-inactive-headerbar-background: var(--gnome-private-toolbar-background); + /* Tabs */ + --gnome-private-tabbar-tab-hover-background: #cbd7e3; /* Hardcoded color */ + --gnome-private-tabbar-tab-active-background: #c6d1dd; /* Hardcoded color */ + --gnome-private-tabbar-tab-active-background-contrast: #a9b6c4; /* Hardcoded color */ + --gnome-private-tabbar-tab-active-hover-background: #c0cbd7; /* Hardcoded color */ + --gnome-private-inactive-tabbar-tab-hover-background: #e4e9f0; /* Hardcoded color */ + --gnome-private-inactive-tabbar-tab-active-background: #e1e7ed; /* Hardcoded color */ + + /* Text color for Firefox Logo in new private tab */ + --gnome-private-wordmark: #20123A; + + /* New private tab background */ + --gnome-private-in-content-page-background: #FAFAFA; + + /* Private browsing info box */ + --gnome-private-text-primary-color: #15141A; +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/extensions/tab-center-reborn.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/extensions/tab-center-reborn.css new file mode 100755 index 000000000..df3084db7 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/extensions/tab-center-reborn.css @@ -0,0 +1,143 @@ +@supports -moz-bool-pref("gnomeTheme.extensions.tabCenterReborn") { + :root { + --delay: 0s; + --transition-time: 0.2s; + --positionX1: 48px; + --positionX2: absolute; + } + + #tabbrowser-tabs { + display: none !important; + } + + #browser { + position: relative; + } + + #sidebar-box:not([lwt-sidebar]){ + appearance: unset !important; + } + + #sidebar-box[sidebarcommand*="tabcenter"] { + z-index: 1; + } + + #sidebar-box[sidebarcommand*="tabcenter"] #sidebar-header { + visibility: collapse; + display: none; + } + + [sidebarcommand*="tabcenter"] #sidebar, #sidebar-box[sidebarcommand*="tabcenter"] { + min-width: 48px !important; + max-width: 48px !important; + } + + #sidebar-box[sidebarcommand*="tabcenter"]:not([hidden]) { + display: block; + position: var(--positionX2); + box-sizing: content-box; + min-width: 48px; + max-width: 48px; + overflow: hidden; + + border-right: 1px solid var(--sidebar-border-color); + z-index: 1; + top: 0; + bottom: 0; + } + + #main-window[inFullscreen] #sidebar-box[sidebarcommand*="tabcenter"]:not([hidden]) { + min-width: 1px; + max-width: 1px; + } + + #sidebar-box[sidebarcommand*="tabcenter"]:hover #sidebar, + #sidebar-box[sidebarcommand*="tabcenter"]:hover { + min-width: 10vw !important; + width: 30vw !important; + max-width: 200px !important; + z-index: 1 !important; + transition: all var(--transition-time) ease var(--delay); + } + + #sidebar-box[sidebarcommand*="tabcenter"]:not(:hover) #sidebar, + #sidebar-box[sidebarcommand*="tabcenter"]:not(:hover) { + transition: all var(--transition-time) ease 0s; + } + + @media (width >= 1200px) { + #sidebar-box[sidebarcommand*="tabcenter"]:hover #sidebar, + #sidebar-box[sidebarcommand*="tabcenter"]:hover { + max-width: 250px !important; + } + } + + [sidebarcommand*="tabcenter"] ~ #sidebar-splitter { + display: none; + } + + [sidebarcommand*="tabcenter"] #sidebar { + max-height: 100%; + height: 100%; + } + + #main-window:not([inFullscreen]) #sidebar-box[sidebarcommand*="tabcenter"]:not([hidden]) ~ #appcontent { + margin-left: var(--positionX1); + } + + #main-window[inFullscreen][inDOMFullscreen] #appcontent { + margin-left: 0; + } + + #main-window[inFullscreen] #sidebar { + height: 100vh; + } + + [sidebarcommand*="tabcenter"] #sidebar-header { + background: #0C0C0D; + border-bottom: none !important; + } + + [sidebarcommand*="tabcenter"] ~ #sidebar-splitter { + border-right-color: #0C0C0D !important; + border-left-color: #0C0C0D !important; + } + + [sidebarcommand*="tabcenter"] #sidebar-switcher-target, + [sidebarcommand*="tabcenter"] #sidebar-close { + filter: invert(100%); + } + + @media (max-width: 630px) { + #urlbar-container { + min-width: 100% !important; + } + + #menubar-items { + display: none !important; + } + } +} + +@supports -moz-bool-pref("gnomeTheme.extensions.tabCenterReborn.alwaysOpen") { + #sidebar-box[sidebarcommand*="tabcenter"] #sidebar, + #sidebar-box[sidebarcommand*="tabcenter"] { + min-width: 10vw !important; + width: 30vw !important; + max-width: 250px !important; + z-index: 1 !important; + transition: all var(--transition-time) ease var(--delay); + } + + #sidebar-box[sidebarcommand*="tabcenter"]:not([hidden]) { + position: relative; + margin-right: -50px; + } + + @media (width >= 1200px) { + #sidebar-box[sidebarcommand*="tabcenter"]:hover #sidebar, + #sidebar-box[sidebarcommand*="tabcenter"]:hover { + max-width: 250px !important; + } + } +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/gnome-theme.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/gnome-theme.css new file mode 100755 index 000000000..5d1e0c168 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/gnome-theme.css @@ -0,0 +1,39 @@ +@import "parts/toolbox.css"; +@import "parts/headerbar.css"; +@import "parts/headerbar-private-window.css"; +@import "parts/csd.css"; +@import "parts/urlbar.css"; +@import "parts/tabsbar.css"; +@import "parts/findbar.css"; +@import "parts/sidebar.css"; +@import "parts/lists.css"; + +@import "parts/buttons.css"; +@import "parts/buttons-fixes.css"; +@import "parts/entries.css"; +@import "parts/controls.css"; +@import "parts/icons.css"; + +@import "parts/popups.css"; +@import "parts/popups-contents.css"; +@import "parts/dialogs.css"; + +@import "parts/remove-white-flash.css"; + +/* Extensions support */ +@import "extensions/tab-center-reborn.css"; + +@import "colors/light.css"; +@import "colors/dark.css"; + +@import "system-icons.css"; +@import "symbolic-tab-icons.css"; +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +/* Set theme version text in customization panel */ +#customization-footer::before { + background: url(../icon.svg) no-repeat; + background-size: contain; + content: "Firefox GNOME theme v112"; + padding: 9px 9px 9px 50px; +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/application-x-addon-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/application-x-addon-symbolic.svg new file mode 100755 index 000000000..67263f4d7 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/application-x-addon-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/applications-engineering-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/applications-engineering-symbolic.svg new file mode 100755 index 000000000..ce6226265 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/applications-engineering-symbolic.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/audio-muted-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/audio-muted-symbolic.svg new file mode 100755 index 000000000..6d14b238d --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/audio-muted-symbolic.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/audio-playing-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/audio-playing-symbolic.svg new file mode 100755 index 000000000..6918282a1 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/audio-playing-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/bullet-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/bullet-symbolic.svg new file mode 100755 index 000000000..897f3f2fb --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/bullet-symbolic.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-clear-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-clear-symbolic.svg new file mode 100755 index 000000000..ef3d71c71 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-clear-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-copy-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-copy-symbolic.svg new file mode 100755 index 000000000..4212c3849 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-copy-symbolic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-cut-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-cut-symbolic.svg new file mode 100755 index 000000000..7e4c3ae5d --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-cut-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-find-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-find-symbolic.svg new file mode 100755 index 000000000..82e433366 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-find-symbolic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-paste-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-paste-symbolic.svg new file mode 100755 index 000000000..0b507f522 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/edit-paste-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/eye-not-looking-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/eye-not-looking-symbolic.svg new file mode 100755 index 000000000..a53c9d00c --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/eye-not-looking-symbolic.svg @@ -0,0 +1,7 @@ + + + Gnome Symbolic Icon Theme + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/firefox-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/firefox-symbolic.svg new file mode 100755 index 000000000..84c30e7ab --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/firefox-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/folder-download-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/folder-download-symbolic.svg new file mode 100755 index 000000000..b1e5ac3a4 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/folder-download-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/folder-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/folder-symbolic.svg new file mode 100755 index 000000000..a8a743a6e --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/folder-symbolic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/general-properties-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/general-properties-symbolic.svg new file mode 100755 index 000000000..f8aa3cfe2 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/general-properties-symbolic.svg @@ -0,0 +1,9 @@ + + + Gnome Symbolic Icon Theme + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/go-down-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/go-down-symbolic.svg new file mode 100755 index 000000000..616ecc558 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/go-down-symbolic.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/go-next-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/go-next-symbolic.svg new file mode 100755 index 000000000..2bc221883 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/go-next-symbolic.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/go-previous-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/go-previous-symbolic.svg new file mode 100755 index 000000000..b4812cdfd --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/go-previous-symbolic.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/go-up-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/go-up-symbolic.svg new file mode 100755 index 000000000..207fa0f37 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/go-up-symbolic.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/info-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/info-symbolic.svg new file mode 100755 index 000000000..3f47dfc54 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/info-symbolic.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/key-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/key-symbolic.svg new file mode 100755 index 000000000..a622d292c --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/key-symbolic.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/list-add-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/list-add-symbolic.svg new file mode 100755 index 000000000..542008ca9 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/list-add-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/mail-unread-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/mail-unread-symbolic.svg new file mode 100755 index 000000000..d61f0dbf4 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/mail-unread-symbolic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/message-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/message-symbolic.svg new file mode 100755 index 000000000..1afe2e49e --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/message-symbolic.svg @@ -0,0 +1 @@ + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/non-starred-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/non-starred-symbolic.svg new file mode 100755 index 000000000..abd203603 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/non-starred-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/open-menu-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/open-menu-symbolic.svg new file mode 100755 index 000000000..6dbb6a9f4 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/open-menu-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/padlock-insecure-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/padlock-insecure-symbolic.svg new file mode 100755 index 000000000..d07c1c462 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/padlock-insecure-symbolic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/padlock-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/padlock-symbolic.svg new file mode 100755 index 000000000..f9baa7887 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/padlock-symbolic.svg @@ -0,0 +1,7 @@ + + + Gnome Symbolic Icon Theme + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/pan-down-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/pan-down-symbolic.svg new file mode 100755 index 000000000..46f8d862a --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/pan-down-symbolic.svg @@ -0,0 +1,7 @@ + + + Gnome Symbolic Icons + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/pan-end-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/pan-end-symbolic.svg new file mode 100755 index 000000000..566182c49 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/pan-end-symbolic.svg @@ -0,0 +1,7 @@ + + + Gnome Symbolic Icons + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/pan-start-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/pan-start-symbolic.svg new file mode 100755 index 000000000..1fad5b246 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/pan-start-symbolic.svg @@ -0,0 +1,7 @@ + + + Gnome Symbolic Icons + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/pan-up-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/pan-up-symbolic.svg new file mode 100755 index 000000000..ea990b292 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/pan-up-symbolic.svg @@ -0,0 +1,7 @@ + + + Gnome Symbolic Icons + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/play-large-disabled-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/play-large-disabled-symbolic.svg new file mode 100755 index 000000000..e918cc525 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/play-large-disabled-symbolic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/preferences-system-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/preferences-system-symbolic.svg new file mode 100755 index 000000000..5689c4ba8 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/preferences-system-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/preferences-system-time-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/preferences-system-time-symbolic.svg new file mode 100755 index 000000000..6289c547c --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/preferences-system-time-symbolic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/printer-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/printer-symbolic.svg new file mode 100755 index 000000000..69087d8c6 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/printer-symbolic.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/process-stop-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/process-stop-symbolic.svg new file mode 100755 index 000000000..fad750b72 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/process-stop-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/process-working-symbolic-black.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/process-working-symbolic-black.svg new file mode 100755 index 000000000..4083d9fd5 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/process-working-symbolic-black.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/process-working-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/process-working-symbolic.svg new file mode 100755 index 000000000..7548638ab --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/process-working-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/reader-mode-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/reader-mode-symbolic.svg new file mode 100755 index 000000000..7accb2e0d --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/reader-mode-symbolic.svg @@ -0,0 +1,6 @@ + + + Gnome Symbolic Icon Theme + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/security-high-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/security-high-symbolic.svg new file mode 100755 index 000000000..4feb3e06b --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/security-high-symbolic.svg @@ -0,0 +1 @@ + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/security-low-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/security-low-symbolic.svg new file mode 100755 index 000000000..db6953456 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/security-low-symbolic.svg @@ -0,0 +1 @@ + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/select-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/select-symbolic.svg new file mode 100755 index 000000000..d94f400ff --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/select-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/settings-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/settings-symbolic.svg new file mode 100755 index 000000000..a096dd203 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/settings-symbolic.svg @@ -0,0 +1,41 @@ + + + + + + image/svg+xml + + Gnome Symbolic Icon Theme + + + + + + + + Gnome Symbolic Icon Theme + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/starred-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/starred-symbolic.svg new file mode 100755 index 000000000..f491ee152 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/starred-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/tab-new-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/tab-new-symbolic.svg new file mode 100755 index 000000000..40f9b6d3b --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/tab-new-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/tab-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/tab-symbolic.svg new file mode 100755 index 000000000..ab788d23a --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/tab-symbolic.svg @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/toggle-right-sidebar-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/toggle-right-sidebar-symbolic.svg new file mode 100755 index 000000000..ead5f3626 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/toggle-right-sidebar-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/toggle-sidebar-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/toggle-sidebar-symbolic.svg new file mode 100755 index 000000000..0e65936e7 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/toggle-sidebar-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/user-home-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/user-home-symbolic.svg new file mode 100755 index 000000000..1b7dd5348 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/user-home-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/view-fullscreen-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/view-fullscreen-symbolic.svg new file mode 100755 index 000000000..b5ef42342 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/view-fullscreen-symbolic.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/view-more-horizontal-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/view-more-horizontal-symbolic.svg new file mode 100755 index 000000000..b3885dae7 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/view-more-horizontal-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/view-refresh-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/view-refresh-symbolic.svg new file mode 100755 index 000000000..c4d10bd52 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/view-refresh-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/view-restore-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/view-restore-symbolic.svg new file mode 100755 index 000000000..6f759cb18 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/view-restore-symbolic.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-close-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-close-symbolic.svg new file mode 100755 index 000000000..b8fc52d94 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-close-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-maximize-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-maximize-symbolic.svg new file mode 100755 index 000000000..37183739c --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-maximize-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-minimize-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-minimize-symbolic.svg new file mode 100755 index 000000000..8fc1f8250 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-minimize-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-new-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-new-symbolic.svg new file mode 100755 index 000000000..c9ee77f26 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-new-symbolic.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-restore-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-restore-symbolic.svg new file mode 100755 index 000000000..60f4ac727 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/window-restore-symbolic.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/zoom-in-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/zoom-in-symbolic.svg new file mode 100755 index 000000000..8e9338f9e --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/zoom-in-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/zoom-out-symbolic.svg b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/zoom-out-symbolic.svg new file mode 100755 index 000000000..90d8e7257 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/icons/zoom-out-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/pages/newtab.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/pages/newtab.css new file mode 100755 index 000000000..1c94e842a --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/pages/newtab.css @@ -0,0 +1,9 @@ +/* about:newtab */ + +@-moz-document url("about:newtab"), url("about:home") { + body { + --newtab-background-color: var(--gnome-browser-before-load-background) !important; + --newtab-background-color-secondary: var(--gnome-menu-background) !important; + --newtab-primary-action-background: var(--gnome-accent) !important; + } +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/pages/privatebrowsing.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/pages/privatebrowsing.css new file mode 100755 index 000000000..e1600ec41 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/pages/privatebrowsing.css @@ -0,0 +1,16 @@ +/* about:privatebrowsing */ + +@-moz-document url("about:privatebrowsing") { + html.private { + --in-content-page-background: var(--gnome-private-in-content-page-background) !important; + + /* Used by headings in promo boxes Firefox shows (like an ad for Firefox Focus) */ + --in-content-text-color: var(--gnome-private-text-primary-color) !important; + } + .wordmark { + fill: var(--gnome-private-wordmark) !important; + } + .showPrivate { + color: var(--gnome-private-text-primary-color); + } +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/buttons-fixes.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/buttons-fixes.css new file mode 100755 index 000000000..61259d26b --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/buttons-fixes.css @@ -0,0 +1,309 @@ +/* Buttons Issues/Glitches fixes */ +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +/* Fix notification dropmarker */ +.popup-notification-dropmarker dropmarker { + display: none !important; +} +.popup-notification-dropmarker > .button-box > hbox { + display: -moz-box !important; +} +.panel-footer button.popup-notification-dropmarker { + padding: 0 1px 0 4px !important; +} + +/* Fix hover background */ +.toolbarbutton-badge-stack:not(#hack), .toolbarbutton-icon:not(#hack), .toolbarbutton-text:not(#hack) { + background: transparent !important; +} + +/* Fix button box */ +.panel-footer.panel-footer-menulike > button > .button-box { + display: -moz-box !important; +} + +/* Fix unified-extensions-item margin */ +toolbar .unified-extensions-item { + margin-inline: 0 3px !important; +} + +/* menulist */ +#label-box:not([native]) { + font-weight: 400 !important; + padding: 0 8px; +} +dropmarker:not([native]) { + margin-right: 8px; +} + +/* Overrides: Make the back button the same as other buttons */ +:root:not([uidensity=compact]) #back-button { + border-radius: var(--toolbarbutton-border-radius) !important; +} +:root:not([uidensity=compact]) #back-button > .toolbarbutton-icon { + background-color: unset !important; + border: unset !important; + width: calc(2 * var(--toolbarbutton-inner-padding) + 16px) !important; + height: calc(2 * var(--toolbarbutton-inner-padding) + 16px) !important; + padding: var(--toolbarbutton-inner-padding) !important; + border-radius: var(--toolbarbutton-border-radius); + box-shadow: none !important; +} +:root:not([uidensity=compact]) #back-button:not([disabled]):not([open]):hover > .toolbarbutton-icon { + background-color: var(--toolbarbutton-hover-background) !important; + box-shadow: unset; + border-color: unset; +} +:root:not([uidensity=compact]) #back-button[open] > .toolbarbutton-icon, +:root:not([uidensity=compact]) #back-button:not([disabled]):hover:active > .toolbarbutton-icon { + background-color: var(--toolbarbutton-active-background) !important; + border-color: unset; +} + +/* Remove the header bar buttons' hover styles */ +#nav-bar { + --toolbarbutton-active-background: transparent !important; + --toolbarbutton-hover-background: transparent !important; +} + +/* Glitch customizing: Cut / Copy / Paste buttons' icons + * :not(#hack) is there just to elevate rule priority */ +:root[customizing] #nav-bar > hbox toolbaritem toolbarbutton image:not(#hack) { + opacity: 1 !important; +} +/* Glitch customizing: Reload and Cut / Copy / Paste buttons */ +:root:-moz-window-inactive[customizing] #nav-bar #stop-reload-button toolbarbutton, +:root:-moz-window-inactive[customizing] #nav-bar #edit-controls toolbarbutton { + background-image: var(--gnome-inactive-button-background); + box-shadow: var(--gnome-inactive-button-box-shadow); +} +/* Glitch customizing: Reload and Cut / Copy / Paste buttons' icons */ +:root:-moz-window-inactive[customizing] #nav-bar #stop-reload-button image.toolbarbutton-icon, +:root:-moz-window-inactive[customizing] #nav-bar #edit-controls image.toolbarbutton-icon { + opacity: .7 !important; +} + +/* Glitch: Overflow and Burger buttons + * :not(#hack) is there just to elevate rule priority */ +:root[customizing] #nav-bar > toolbarbutton[disabled]:not(#hack), +:root[customizing] #nav-bar > toolbaritem > toolbarbutton[disabled]:not(#hack) { + opacity: .5 !important; +} +/* Glitch: Overflow button's icon */ +:root[customizing] #nav-bar toolbarbutton:not(#urlbar-zoom-button)[disabled] image { + fill-opacity: var(--toolbarbutton-icon-fill-opacity) !important; +} + +/* Bookmark buttons */ +#nav-bar toolbarbutton.bookmark-item { + width: auto !important; +} +#nav-bar toolbarbutton.bookmark-item .toolbarbutton-icon { + margin-left: 6px; +} +#nav-bar toolbarbutton.bookmark-item .toolbarbutton-text { + padding-right: 6px; +} + +/* Remove Burger button's left separator */ +#PanelUI-button { + border: 0 !important; + margin: 0 !important; + padding-inline-start: 0 !important; +} + +/* Space main menu button from other headerbar buttons +#nav-bar #PanelUI-menu-button:not(#hack) { + margin-left: 10px !important; +}*/ + +/* Fix library animation */ +#library-animatable-box { + --library-button-height: 46px !important; + --library-icon-x: 1716px !important; + /*--library-icon-x: 1715.9833984375px !important;*/ +} +#library-button[animate] > .toolbarbutton-icon { + fill: transparent !important; +} + +/* Fix toolbars close icons */ +.close-icon:not(.tab-close-button) .toolbarbutton-icon { + height: 16px !important; + width: 16px !important; + margin: 6px !important; + padding: 0 !important; +} +button.close { + margin: 0 !important; +} + +/* */ +#appMenu-popup .panel-banner-item[notificationid="update-restart"]::after { + display: none !important; +} + +/* Identity site popover buttons */ +.identity-popup-preferences-button:not(#hack) { + list-style-image: url("chrome://browser/skin/settings.svg") !important; +} +#tracking-protection-preferences-button > .toolbarbutton-text { + padding-inline-end: 0 !important; +} +.protections-popup-footer-button-label { + margin-inline-start: 3px !important; +} + +/* Fix findbar buttons issues */ +.findbar-container .findbar-find-previous image, +.findbar-container .findbar-find-next image { + margin: 6px !important; + opacity: 1 !important; +} +.findbar-container toolbarbutton:focus { + outline: 0 !important; +} + +/* Sidebar header button reset font size */ +#sidebar-header { + font-size: 1em !important; +} + +/* Sidebar header button arrow opacity */ +#sidebar-switcher-arrow { + opacity: 1 !important; +} + +/* Sidebar history view */ +#viewButton { + margin: 0 !important; + margin-inline-start: 6px !important; +} + +/* Menulist */ +#identity-popup-popup-menulist { + margin-right: 0 !important; +} + +/* Auto complete popup button*/ +.autocomplete-richlistitem[type="loginsFooter"] { + margin: 4px 4px 0 4px !important; +} + +/* Identity popup tracking protection button */ +.tracking-protection-button { + margin-inline-end: 0 !important; +} + +/* Identity popup delete permission button */ +.identity-popup-permission-remove-button { + opacity: 1 !important; +} + +/* Identity popup expander button */ +#identity-popup-security { + -moz-box-align: center; +} +#identity-popup-security-expander { + width: 34px !important; +} +#identity-popup-security-expander .button-icon { + margin: 0 !important; +} + +/* Protections popup */ +#protections-popup-info-button { + margin: 0 !important; + margin-inline-end: 0 !important; +} +.protections-popup-footer-icon { + display: none !important; +} +.protections-popup-footer-button-label { + margin-inline-start: 0 !important; +} +#protections-popup-footer-protection-type-label { + margin-inline-end: 0 !important; + margin-block: 0 !important; +} + +/* Close button */ +.close-icon:not(.tab-close-button) .toolbarbutton-icon { + outline: 0 !important; +} + +/* Downloads button */ +#downloads-indicator-progress-inner { + background: conic-gradient(var(--gnome-toolbar-icon-fill) var(--download-progress-pcent), transparent var(--download-progress-pcent)) !important; + background-color: var(--gnome-button-active-background) !important; +} +#downloads-indicator-progress-outer, +#downloads-indicator-start-image, +#downloads-indicator-finish-image { + border: 0 !important; + padding: 0 !important; + border-radius: 100% !important; +} +#downloads-indicator-progress-outer, +#downloads-indicator-start-image { + background: var(--gnome-toolbar-border-color) !important; +} +#downloads-indicator-finish-image { + background: var(--gnome-toolbar-icon-fill) !important; +} + +#downloads-button[progress="true"] #downloads-indicator-progress-outer { + visibility: visible !important; +} +#downloads-button:not([progress="true"]) #downloads-indicator-icon { + visibility: visible !important; +} + +/* Stop/Reload button */ +#stop-reload-button .toolbarbutton-icon { + margin-top: -2px !important; +} + +/* Toolbar Animations */ +#downloads-button .toolbarbutton-animatable-box { + top: 8px !important; + left: 8px !important; +} +#downloads-button .toolbarbutton-animatable-box, +#downloads-button .toolbarbutton-animatable-image, +#downloads-indicator-progress-inner { + height: 16px !important; + width: 16px !important; +} +#downloads-button .toolbarbutton-animatable-image, +#stop-reload-button .toolbarbutton-animatable-image:not(#hack), +#nav-bar-overflow-button .toolbarbutton-animatable-image:not(#hack) { + --anim-steps: 1 !important; + transform: none !important; + list-style-image: none !important; + display: none !important; +} + +/* Panel banner */ +#appMenu-popup .panel-banner-item { + margin: 0 0 6px !important; +} +#appMenu-popup .panel-banner-item > .toolbarbutton-text { + margin-inline: 0 !important; +} + +/* User menu */ +#fxa-toolbar-menu-button .toolbarbutton-badge-stack { + padding: 0 !important; +} +#fxa-avatar-image { + min-height: 24px !important; + width: 24px !important; +} + +/* OPTIONAL: Hide unified-extensions-button */ +@supports -moz-bool-pref("gnomeTheme.hideUnifiedExtensions") { + #unified-extensions-button { + display: none; + } +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/buttons.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/buttons.css new file mode 100755 index 000000000..e3013831c --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/buttons.css @@ -0,0 +1,327 @@ +/* Buttons */ + +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +/* Hide buttons separator */ +#nav-bar .toolbaritem-combined-buttons separator { + display: none !important; +} +#appMenu-popup .toolbaritem-combined-buttons toolbarseparator { + border: 0 !important; +} + +/* Buttons */ +menulist, +#nav-bar toolbarbutton:not(#urlbar-zoom-button):not(.subviewbutton), +.subviewbutton.panel-subview-footer, +.panel-footer button, +#downloadsPanel-mainView .download-state .downloadButton, +#appMenu-popup .panel-banner-item, +#appMenu-popup .toolbaritem-combined-buttons toolbarbutton:not(#appMenu-fxa-label), +#context-navigation menuitem, +.identity-popup-preferences-button:not(#hack), +.findbar-container toolbarbutton, +#sidebar-switcher-target, +#viewButton, +.close-icon:not(.tab-close-button), +button.close, +.menulist-label-box, +.expander-down, .expander-up, +.notification-button, +#identity-popup-security-expander, +#protections-popup-info-button, +#PanelUI-panic-view-button, +.tracking-protection-button, +.dialog-button, +.autocomplete-richlistitem[type="loginsFooter"], +.dialog-button-box button, +.searchbar-engine-one-off-item, +.permission-popup-permission-remove-button, +.button.connect-device, +#item-choose button, +#editBMPanel_newFolderButton, +.unified-extensions-item-menu-button { + -moz-appearance: none !important; + background: var(--gnome-button-background) !important; + border-radius: 6px !important; + border: 0 !important; + padding: 0 1px !important; + height: 34px !important; + max-height: 34px !important; + min-height: 34px !important; + min-width: 34px !important; + color: var(--gnome-toolbar-color) !important; + outline: 0 !important; + font: menu !important; + -moz-box-align: center !important; + transition: background .3s; +} +.subviewbutton-iconic { + -moz-box-pack: center !important; +} + +/* Flat Buttons */ +#nav-bar toolbarbutton:not(#urlbar-zoom-button):not(.subviewbutton), +.close-icon:not(.tab-close-button), +button.close, +#protections-popup-info-button, +.permission-popup-permission-remove-button, +.unified-extensions-item-menu-button { + background: transparent !important; + transition: background .3s; +} + +/* Buttons with margins */ +#nav-bar toolbarbutton:not(#urlbar-zoom-button):not(.subviewbutton), +.notification-button, +.subviewbutton.panel-subview-footer:not(:only-of-type), +.panel-footer button:not(:only-of-type) { + margin: 0 3px !important; +} +.close-icon:not(.tab-close-button) { + margin-left: 6px !important; +} + +/* Text buttons */ +menulist, +.subviewbutton.panel-subview-footer, +.panel-footer button, +#appMenu-popup .panel-banner-item, +#appMenu-popup #appMenu-zoomReset-button2:not(#hack), +#tracking-protection-preferences-button:not(#hack), +.findbar-container toolbarbutton.findbar-button, +.notification-button, +#PanelUI-panic-view-button, +.tracking-protection-button, +.dialog-button, +.autocomplete-richlistitem[type="loginsFooter"], +.dialog-button-box button, +.toolbaritem-combined-buttons:is(:not([cui-areatype="toolbar"]), [overflowedItem="true"]) > #appMenu-fxa-label2:not(#hack), +.button.connect-device, +#item-choose button, +#editBMPanel_newFolderButton { + padding: 2px 16px !important; +} +.subviewbutton.panel-subview-footer label, +.panel-footer button, +#appMenu-popup .panel-banner-item .toolbarbutton-text, +#appMenu-popup #appMenu-zoomReset-button2:not(#hack), +#tracking-protection-preferences-button:not(#hack), +.findbar-container toolbarbutton.findbar-button, +.notification-button, +#PanelUI-panic-view-button, +.tracking-protection-button, +.dialog-button, +.autocomplete-richlistitem[type="loginsFooter"], +.dialog-button-box button, +.button.connect-device, +#item-choose button { + text-align: center !important; +} + +/* Drop down buttons */ +#sidebar-switcher-target, +#viewButton { + padding: 2px 16px !important; + position: relative; +} +#sidebar-switcher-arrow, +#viewButton .button-menu-dropmarker { /* Arrow position, type b */ + transform: translate(6px, 0) +} +.menulist-label-box { + padding: 2px 26px 2px 16px !important; + position: relative; +} +.menulist-label-box:after { /* Arrow position */ + position: absolute !important; + right: 8px !important; + top: 8px !important; +} +.menulist-label-box:after { /* Create arrow if icon tag no exist */ + content: ""; +} + +/* Hover buttons */ +menulist:hover, +.subviewbutton.panel-subview-footer:hover, +.panel-footer button:hover, +#downloadsPanel-mainView .download-state .downloadButton:hover, +#appMenu-popup .panel-banner-item:hover, +#appMenu-popup .toolbaritem-combined-buttons toolbarbutton:not(#appMenu-fxa-label):not([disabled="true"]):hover, +#context-navigation menuitem:not([disabled="true"]):hover, +.identity-popup-preferences-button:not(#hack):hover, +.findbar-container toolbarbutton:hover, +.findbar-closebutton .toolbarbutton-icon:hover, +#sidebar-switcher-target:hover, +#viewButton:hover, +menulist:hover .menulist-label-box, +.expander-down:hover, .expander-up:hover, +.notification-button:hover, +#identity-popup-security-expander:hover, +.tracking-protection-button:hover, +.dialog-button:hover, +.autocomplete-richlistitem[type="loginsFooter"]:hover, +.dialog-button-box button:not([disabled="true"]):hover, +.searchbar-engine-one-off-item:hover, +.button.connect-device:hover, +#editBMPanel_newFolderButton:hover { + outline: 0 !important; + background: var(--gnome-button-hover-background) !important; +} + +/* Hover flat buttons */ +#nav-bar toolbarbutton:not(#urlbar-zoom-button):not(.subviewbutton):not([open]):not([disabled="true"]):not([checked]):hover, +.close-icon:not(.tab-close-button):hover, +button.close:hover, +#protections-popup-info-button:hover, +.permission-popup-permission-remove-button:hover, +#item-choose button:hover, +.unified-extensions-item-menu-button:hover { + outline: 0 !important; + background: var(--gnome-button-flat-hover-background) !important; +} + +/* Active buttons */ +menulist[open], +.subviewbutton.panel-subview-footer:active, +.panel-footer button:active, +#downloadsPanel-mainView .download-state .downloadButton:active, +#appMenu-popup .panel-banner-item:active, +#appMenu-popup .toolbaritem-combined-buttons toolbarbutton:not([disabled="true"]):not(#appMenu-fxa-label):active, +#context-navigation menuitem:active:not([disabled="true"]), +.identity-popup-preferences-button:not(#hack):active, +.findbar-container toolbarbutton[checked], +.findbar-container toolbarbutton:active, +#sidebar-switcher-target:active, #sidebar-switcher-target.active, +#viewButton[open], +menulist[open] .menulist-label-box, +.expander-down:active, .expander-up:active, +.notification-button:active, +#identity-popup-security-expander:active, +.tracking-protection-button:active, +.dialog-button:active, +.autocomplete-richlistitem[type="loginsFooter"]:active, +.dialog-button-box button:not([disabled="true"]):active, +.button.connect-device:active, +#editBMPanel_newFolderButton:active { + background: var(--gnome-button-active-background) !important; +} + +/* Active flat buttons */ +#nav-bar toolbarbutton:not(#urlbar-zoom-button):not(.subviewbutton):not([disabled="true"]):not(#hack):active, +#nav-bar toolbarbutton:not(#urlbar-zoom-button):not(.subviewbutton):not(.subviewbutton):not([disabled="true"])[open], +#nav-bar toolbarbutton:not(#urlbar-zoom-button):not(.subviewbutton):not([disabled="true"])[checked], +.close-icon:not(.tab-close-button):active, +button.close:active, +#protections-popup-info-button:not(#hack):active, +#protections-popup-info-button:not(#hack)[checked], +.permission-popup-permission-remove-button:active, +#item-choose button:active, +.unified-extensions-item-menu-button:active { + background: var(--gnome-button-flat-active-background) !important; +} + +/* Disabled buttons */ +#nav-bar toolbarbutton:not(#urlbar-zoom-button)[disabled="true"], +#appMenu-popup .toolbaritem-combined-buttons toolbarbutton[disabled="true"], +#context-navigation menuitem[disabled="true"], +.dialog-button-box button[disabled="true"] { + opacity: .5 !important; +} + +/* Inactive window buttons */ +#nav-bar toolbarbutton:not(#urlbar-zoom-button):not(.subviewbutton):-moz-window-inactive, +.findbar-container toolbarbutton:-moz-window-inactive, +#sidebar-switcher-target:-moz-window-inactive, +#viewButton:-moz-window-inactive, +.notification-button:-moz-window-inactive { + background: var(--gnome-inactive-button-background) !important; + box-shadow: var(--gnome-inactive-button-box-shadow) !important; + border-color: var(--gnome-inactive-button-border-color) !important; +} + +/* Circle buttons */ +#downloadsPanel-mainView .download-state .downloadButton, +.permission-popup-permission-remove-button:not(#hack) { + border-radius: 100% !important; +} + +/* Combined buttons */ +#nav-bar .toolbaritem-combined-buttons:not(.unified-extensions-item) toolbarbutton:not(:last-of-type):not(#hack), +#appMenu-popup .toolbaritem-combined-buttons:not(.unified-extensions-item) toolbarbutton:not(:last-of-type):not(#appMenu-zoomEnlarge-button), +#context-navigation menuitem:not(:last-of-type), +.findbar-container toolbarbutton.findbar-find-previous, +.findbar-button:not(:last-of-type), +.search-panel-one-offs .searchbar-engine-one-off-item:not(:last-child) { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; + border-right-width: 0 !important; + margin-right: 0 !important; +} + +#nav-bar .toolbaritem-combined-buttons:not(.unified-extensions-item) toolbarbutton:not(:first-of-type):not(#hack), +#appMenu-popup .toolbaritem-combined-buttons:not(.unified-extensions-item) toolbarbutton:not(:first-of-type):not(#appMenu-fullscreen-button), +#context-navigation menuitem:not(:first-of-type), +.findbar-container toolbarbutton.findbar-find-previous, +.findbar-container toolbarbutton.findbar-find-next, +.findbar-button:not(:first-of-type), +.search-panel-one-offs .searchbar-engine-one-off-item:not(:first-child) { + border-top-left-radius: 0 !important; + border-bottom-left-radius: 0 !important; + margin-left: 0 !important; +} + +#nav-bar .toolbaritem-combined-buttons:not(.unified-extensions-item) { + margin-left: 0 !important; + margin-right: 0 !important; +} + +/* Opaque buttons */ +#appMenu-popup .panel-banner-item[notificationid="update-restart"], +button.popup-notification-primary-button, +#editBookmarkPanelDoneButton, +#tracking-action-block, +.button.connect-device, +#editBookmarkPanelRemoveButton, +#PanelUI-panic-view-button { + color: white !important; + font-weight: bold !important; +} + +/* Buttons with suggested action */ +#appMenu-popup .panel-banner-item[notificationid="update-restart"], +button.popup-notification-primary-button:not(#hack), +#editBookmarkPanelDoneButton, +#tracking-action-block, +.button.connect-device { + background-color: var(--gnome-button-suggested-action-background) !important; +} + +/* Buttons with destructive action */ +#editBookmarkPanelRemoveButton, +#PanelUI-panic-view-button { + background-color: var(--gnome-button-destructive-action-background) !important; +} + +/* Opaque buttons hover */ +#appMenu-popup .panel-banner-item[notificationid="update-restart"]:hover, +button.popup-notification-primary-button:hover, +#editBookmarkPanelDoneButton:hover, +#tracking-action-block:hover, +.button.connect-device:hover, +#editBookmarkPanelRemoveButton:hover, +#PanelUI-panic-view-button:hover { + background-image: linear-gradient(rgba(255, 255, 255, .1), rgba(255, 255, 255, .1)) !important; +} + +/* Opaque buttons active */ +#appMenu-popup .panel-banner-item[notificationid="update-restart"]:active, +button.popup-notification-primary-button:active, +#editBookmarkPanelDoneButton:active, +#tracking-action-block:active, +.button.connect-device:active, +#editBookmarkPanelRemoveButton:active, +#PanelUI-panic-view-button:active { + background-image: linear-gradient(rgba(0, 0, 0, .2), rgba(0, 0, 0, .2)) !important; +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/controls.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/controls.css new file mode 100755 index 000000000..acf30274c --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/controls.css @@ -0,0 +1,46 @@ +/* Controls */ +/* Switchers, Checkboxes, etc. */ + +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +/* Switchers */ +.protections-popup-tp-switch-box { + padding: 0 !important; + -moz-box-pack: start !important; +} +#protections-popup-tp-switch:not([enabled])[showdotindicator]::after { + display: none !important; +} +#protections-popup-tp-switch { + background: var(--gnome-switch-background) !important; + border: 0 !important; + border-radius: 24px !important; + min-width: 48px !important; + width: 48px !important; + min-height: 26px !important; + padding: 0 !important; + position: relative !important; + display: block !important; + margin: 0 !important; +} +#protections-popup-tp-switch::before { + position: absolute !important; + top: 2px; + left: 2px; + background: var(--gnome-switch-slider-background) !important; + box-shadow: 0 2px 4px rgba(0, 0, 0, .2); + border: 0 !important; + border-radius: 24px !important; + height: 22px !important; + width: 22px !important; + transition: left .2s ease; + outline: 0 !important; +} +#protections-popup-tp-switch[enabled] { + background: var(--gnome-switch-active-background) !important; + padding-inline-start: 24px !important; +} +#protections-popup-tp-switch[enabled]::before { + background: var(--gnome-switch-active-slider-background) !important; + left: 24px; +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/csd.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/csd.css new file mode 100755 index 000000000..d05433cdc --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/csd.css @@ -0,0 +1,182 @@ +/* GNOME CSD styles for headerbar on Firefox [tabsintitlebar] */ + +@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +#main-window { + -moz-appearance: -moz-window-titlebar !important; +} + +/* Headerbar top border corners rounded */ +:root[tabsintitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) #nav-bar { + border-radius: env(-moz-gtk-csd-titlebar-radius) env(-moz-gtk-csd-titlebar-radius) 0 0 !important; +} + +/* Window buttons: at least 1 button */ +@media (-moz-gtk-csd-minimize-button), (-moz-gtk-csd-maximize-button), (-moz-gtk-csd-close-button) { + :root { + --gnome-navbar-csd-offset: 43px; + } +} +/* Window buttons: at least 2 buttons */ +@media (-moz-gtk-csd-minimize-button) and (-moz-gtk-csd-maximize-button), + (-moz-gtk-csd-minimize-button) and (-moz-gtk-csd-close-button), + (-moz-gtk-csd-maximize-button) and (-moz-gtk-csd-close-button) { + :root { + --gnome-navbar-csd-offset: 80px; + } +} +/* Window buttons: 3 buttons */ +@media (-moz-gtk-csd-minimize-button) and (-moz-gtk-csd-maximize-button) and (-moz-gtk-csd-close-button) { + :root { + --gnome-navbar-csd-offset: 117px; + } +} + +/* Right window buttons offset by button count */ +:root[tabsintitlebar]:not([inFullscreen]) #nav-bar { + padding-left: 3px !important; + padding-right: var(--gnome-navbar-csd-offset) !important; +} +/* Fullscreen headerbar padding for 1 button */ +:root[tabsintitlebar][inFullscreen] #nav-bar { + padding-right: 43px !important; +} + +/* Left window buttons */ +@media (-moz-gtk-csd-reversed-placement) { + /* Window controls offset by button count */ + :root[tabsintitlebar]:not([inFullscreen]) #nav-bar { + padding-left: var(--gnome-navbar-csd-offset) !important; + padding-right: 3px !important; + } + + /* Window buttons box */ + :root[tabsintitlebar] #titlebar .titlebar-buttonbox-container { + left: 0; + right: auto !important; + } + + /* Fullscreen headerbar padding for 1 button */ + :root[tabsintitlebar][inFullscreen] #nav-bar { + padding-left: 50px !important; + padding-right: 3px !important + } +} + +/* Remove close and minimize buttons from fullscreen buttons */ +:root[tabsintitlebar][inFullscreen] #titlebar .titlebar-buttonbox-container .titlebar-min, +:root[tabsintitlebar][inFullscreen] #titlebar .titlebar-buttonbox-container .titlebar-close { + display: none !important; +} + +/* Force the restore button to appear regardless of maximize button's status */ +:root[tabsintitlebar][inFullscreen] #titlebar .titlebar-buttonbox-container { + visibility: visible !important; +} +:root[tabsintitlebar][inFullscreen]:not([inDOMFullscreen]) #titlebar .titlebar-buttonbox-container .titlebar-restore { + display: inherit !important; +} + +/* Hide window controls when navbar is hidden */ +:root[tabsintitlebar][inFullscreen] #navigator-toolbox[style*='margin-top:'] #titlebar .titlebar-buttonbox-container { + top: -999px; +} + +/* Remove tabsbar titlebar blank spaces */ +:root[tabsintitlebar] #TabsToolbar .titlebar-placeholder { + display: none !important; +} + +/* Prevent menubar from breaking */ +:root[tabsintitlebar] #toolbar-menubar:not([inactive=true]) { + height: 30px !important; + margin-bottom: 8px; +} + +/* Remove default style of titlebar */ +:root[tabsintitlebar] #titlebar { + -moz-appearance: none !important; +} + +/* Fix the issue when dragging tabs */ +:root[tabsintitlebar] #navigator-toolbox[movingtab] #TabsToolbar { + padding-bottom: 0 !important; +} + +/* Window buttons box */ +:root[tabsintitlebar] #titlebar .titlebar-buttonbox-container { + -moz-appearance: none !important; + padding: 5px; + position: absolute !important; + right: 0; + top: 0; + display: block !important; +} +:root[tabsintitlebar] #titlebar .titlebar-buttonbox { + -moz-appearance: none !important; +} + +/* Window buttons style */ +:root[tabsintitlebar] #titlebar .titlebar-button, +:root[tabsintitlebar][inFullscreen] #window-controls toolbarbutton { + -moz-appearance: none !important; + padding: 0 2px !important; + background: var(--gnome-button-close-background); + transition: background 0.3s; +} + +:root[tabsintitlebar] #titlebar .titlebar-button { + border-radius: 100% !important; + height: 24px !important; + margin: 6px 6.5px !important; + width: 24px !important; +} + +:root[tabsintitlebar][inFullscreen] #window-controls toolbarbutton { + border-radius: 6px !important; + height: 34px; + margin: 0 3px !important; + width: 34px; +} + +:root[tabsintitlebar] #titlebar toolbarbutton > .toolbarbutton-icon { + padding: 0 !important; + stroke: none !important; + -moz-context-properties: fill, fill-opacity !important; +} + +:root[tabsintitlebar] #titlebar .titlebar-button .toolbarbutton-icon, +:root[tabsintitlebar][inFullscreen] #window-controls toolbarbutton .toolbarbutton-icon { + width: 16px; +} +:root[tabsintitlebar] #titlebar:-moz-window-inactive .titlebar-button, +:root[tabsintitlebar][inFullscreen] #window-controls:-moz-window-inactive toolbarbutton { + background: var(--gnome-inactive-tabbar-tab-active-background) !important; +} +:root[tabsintitlebar] #titlebar:not(:-moz-window-inactive) .titlebar-button:not([disabled]):hover, +:root[tabsintitlebar][inFullscreen] #window-controls:not(:-moz-window-inactive) toolbarbutton:not([disabled]):hover { + background: var(--gnome-button-hover-background) !important; +} +:root[tabsintitlebar] #titlebar:not(:-moz-window-inactive) .titlebar-button:not([disabled]):active, +:root[tabsintitlebar][inFullscreen] #window-controls:not(:-moz-window-inactive) toolbarbutton:not([disabled]):active { + background: var(--gnome-button-active-close-background) !important; +} + +:root[tabsintitlebar] #titlebar .titlebar-button:where(:hover):not(:hover) { + background: var(--gnome-button-hover-close-background) !important; +} + +/* OPTIONAL: Allow draging the window from headerbar buttons */ +@supports -moz-bool-pref("gnomeTheme.dragWindowHeaderbarButtons") { + :root[tabsintitlebar] #nav-bar *, + :root[tabsintitlebar] #titlebar .titlebar-button, + :root[tabsintitlebar][inFullscreen] #window-controls toolbarbutton { + -moz-window-dragging: drag; + } + + /* Avoid window dragging from urlbar */ + :root[tabsintitlebar] #nav-bar .urlbar-input-box, + :root[tabsintitlebar] #nav-bar .urlbar-input-box * { + -moz-window-dragging: no-drag !important; + } +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/dialogs.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/dialogs.css new file mode 100755 index 000000000..1438b9967 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/dialogs.css @@ -0,0 +1,90 @@ +/* Dialogs */ + +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +window { + padding: 0 !important; +} + +#window-modal-dialog { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; +} + +/* Browser dialog prompts center */ +.dialogOverlay[topmost="true"]:not(.dialogOverlay-window-modal-dialog-subdialog), #window-modal-dialog::backdrop { + background-color: rgba(0, 0, 0, .5) !important; +} + +/* Dialog */ +.dialogBox { + border-radius: 12px !important; + margin-top: 0 !important; +} +.dialogBox[resizable="true"] { + margin-top: 24px !important; +} + +window[role="dialog"] { + background: var(--gnome-toolbar-background) !important; + border: 0 !important; + box-shadow: var(--gnome-menu-shadow) !important; + padding: 0 !important; +} +dialog { + padding: 0 !important; +} +dialog#handling { + display: flex; + flex-direction: column; +} + +/* Content */ +.dialog-content-box { + padding: 24px; + padding-bottom: 0; +} +.box-inherit[part="content-box"] { + padding: 12px 24px 12px 24px; +} +#titleContainer { + justify-content: center !important; +} +.titleIcon { + background-color: transparent !important; +} + +/* Buttons */ +.dialog-button-box { + display: flex !important; + margin-top: auto; +} + +.dialog-button-box button:not(#hack) { + height: auto !important; + max-height: unset !important; + padding: 10px 14px !important; + margin: 0 !important; + border-radius: 0 !important; + flex: 1; + border-bottom: 0 !important; +} + +/* Buttons borders - only suppor for cancel/ok */ +.dialog-button-box button[dlgtype="accept"] { + border-right: 0 !important; + border-left: 0 !important; +} +.dialog-button-box button[dlgtype="cancel"]:not(#hack) { + border-left: 0 !important; +} + +/* Hadler dialog */ +#os-default-handler image { + display: none !important; +} +#os-default-handler .name { + font-weight: normal !important; +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/entries.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/entries.css new file mode 100755 index 000000000..be3397494 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/entries.css @@ -0,0 +1,129 @@ +/* Entries */ + +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +/* Entries */ +#urlbar, +#searchbar, +#search-box, +.findbar-textbox, +#loginTextbox, +#password1Textbox, +.tabsFilter, +#editBMPanel_namePicker, +#editBMPanel_tagsField, +.popup-notification-body input { + -moz-appearance: none !important; + background: var(--gnome-entry-background) !important; + outline: 2px solid transparent !important; + border: 0 !important; + border-radius: 8px !important; + box-shadow: none !important; + color: var(--gnome-entry-color) !important; + height: 34px !important; + max-height: 34px !important; + margin: 0 !important; + padding: 6px !important; + box-sizing: border-box; + transition: outline 0.3s, outline-offset 0.3s; +} + +/* Entries focused */ +#urlbar[breakout][breakout-extend], +#urlbar[focused="true"]:not([suppress-focus-border]), +#searchbar:focus-within, +#search-box[focused], +.findbar-textbox[focused], +.findbar-textbox:focus, +#loginTextbox:focus, +#password1Textbox:focus, +.tabsFilter[focused], +#editBMPanel_namePicker:focus-visible, +#editBMPanel_tagsField:focus-visible, +.popup-notification-body input:focus { + outline: 2px solid var(--gnome-focused-urlbar-border-color) !important; + outline-offset: -2px; + -moz-outline-radius: 5px; +} + +/* Inactive window entries */ +#urlbar:-moz-window-inactive, +#searchbar:-moz-window-inactive, +#search-box:-moz-window-inactive, +.findbar-textbox:-moz-window-inactive, +#loginTextbox:-moz-window-inactive, +#password1Textbox:-moz-window-inactive, +.tabsFilter:-moz-window-inactive { + color: var(--gnome-inactive-entry-color) !important; + outline: 2px solid transparent !important; +} + +/* Entries combined */ +.findbar-textbox:not(.minimal) { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; + border-right-width: 0 !important; +} +.findbar-textbox:not(.minimal)[focused], .findbar-textbox:not(.minimal):focus { + -moz-outline-radius: 5px 0 0 5px !important; +} + +/* Entry button */ +.identity-box-button, +#tracking-protection-icon-container, +#notification-popup-box, +.urlbar-page-action, +.urlbar-icon { + fill-opacity: 0.8 !important; + transition: fill 0.3s, fill-opacity 0.3, opacity 0.3; +} + +.identity-box-button:hover:not([open="true"]), +#tracking-protection-icon-container:hover:not([open="true"]), +#notification-popup-box:hover:not([open="true"]), +.urlbar-page-action:hover:not([open="true"]), +.urlbar-page-action:hover:not([open="true"]) .urlbar-icon, +.urlbar-icon:not([disabled]):hover { + background: none !important; + fill-opacity: 1 !important; +} + +.identity-box-button:hover:active, +.identity-box-button[open=true], +#tracking-protection-icon-container:hover:active, +#tracking-protection-icon-container[open=true], +#notification-popup-box:hover:active, +#notification-popup-box[open=true], +.urlbar-page-action:hover:active, +.urlbar-page-action[open=true], +.urlbar-page-action:hover:active .urlbar-icon, +.urlbar-page-action[open=true] .urlbar-icon { + background: none !important; + fill-opacity: 1 !important; +} + +/* Entries fixes */ +#urlbar-container, #search-container { + padding: 0 !important; + margin: 0 3px !important; +} +#urlbar-input-container { + background: transparent !important; + border: 0 !important; +} +#urlbar, #searchbar { + margin: 0 3px !important; + padding: 0 3px !important; +} +.searchbar-textbox { + border: 0 !important; + padding: 0 !important; + margin: 0 !important; + min-height: auto !important; +} +#searchbar > .searchbar-textbox[focused] .searchbar-search-button:not(#hack) { + margin: 0 !important; +} +#urlbar[focused="true"]:not([suppress-focus-border]) > #urlbar-background { + outline: 0 !important; +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/findbar.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/findbar.css new file mode 100755 index 000000000..60ae3761e --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/findbar.css @@ -0,0 +1,44 @@ +/* Find bar */ + +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +findbar { + padding: 0 !important; + position: relative; +} + +findbar label, findbar description { + color: var(--gnome-toolbar-color) !important; +} + +.findbar-container { + align-items: center; + padding: 6px !important; + display: flex; + justify-content: flex-start; + position: relative; + flex-direction: row; + margin: 0 !important; + width: calc(100% - 42px); + height: auto !important; +} + +hbox[anonid="findbar-textbox-wrapper"] { + display: flex !important; +} + +.findbar-entire-word { + margin-right: auto !important; +} + +.findbar-find-status, .found-matches { + margin-right: 6px !important; +} + +.findbar-closebutton { + margin: 6px 6px 6px 0 !important; +} + +.findbar-container toolbarbutton .toolbarbutton-text { + display: none !important; +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/headerbar-private-window.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/headerbar-private-window.css new file mode 100755 index 000000000..4c8932294 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/headerbar-private-window.css @@ -0,0 +1,44 @@ +/* Private window headerbar */ + +@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +:root[privatebrowsingmode="temporary"] { + --gnome-accent: var(--gnome-private-accent) !important; + --gnome-accent-fg: var(--gnome-private-accent) !important; + /* Toolbars */ + --gnome-toolbar-background: var(--gnome-private-toolbar-background) !important; + --gnome-inactive-toolbar-background: var(--gnome-private-inactive-toolbar-background) !important; + /* Menus */ + --gnome-menu-background: var(--gnome-private-menu-background) !important; + /* Change headerbar colors */ + --gnome-headerbar-background: var(--gnome-private-headerbar-background) !important; + --gnome-inactive-headerbar-background: var(--gnome-private-inactive-headerbar-background) !important; + /* Tabs */ + --gnome-tabbar-tab-hover-background: var(--gnome-private-tabbar-tab-hover-background); + --gnome-tabbar-tab-active-background: var(--gnome-private-tabbar-tab-active-background); + --gnome-tabbar-tab-active-background-contrast: var(--gnome-private-tabbar-tab-active-background-contrast); + --gnome-tabbar-tab-active-hover-background: var(--gnome-private-tabbar-tab-active-hover-background); + --gnome-inactive-tabbar-tab-hover-background: var(--gnome-private-inactive-tabbar-tab-hover-background); + --gnome-inactive-tabbar-tab-active-background: var(--gnome-private-inactive-tabbar-tab-active-background); +} + +/* Add private window headerbar indicator */ +:root[privatebrowsingmode="temporary"] #nav-bar toolbarspring:first-of-type:before { + background: url("../icons/eye-not-looking-symbolic.svg") no-repeat; + background-size: 64px 64px; + content: ""; + display: block; + position: absolute; + width: 64px; + height: 46px; + top: 0; + transform: translate(15px, 0); + fill: var(--gnome-toolbar-color) !important; + fill-opacity: 0.2 !important; + -moz-context-properties: fill, fill-opacity; +} + +/* Hide tabsbar default private browsing indicator */ +#private-browsing-indicator-with-label { + display: none !important; +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/headerbar.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/headerbar.css new file mode 100755 index 000000000..07bbb77a1 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/headerbar.css @@ -0,0 +1,20 @@ +/* Header bar */ +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +/* Headerbar */ +#nav-bar { + padding: 6px 3px !important; +} + +/* Headerbar CSD colors */ +#nav-bar { + background: var(--gnome-headerbar-background) !important; + border: none !important; + border-bottom: 1px solid var(--gnome-headerbar-border-color) !important; + box-shadow: var(--gnome-headerbar-box-shadow) !important; +} +#nav-bar:-moz-window-inactive { + background: var(--gnome-inactive-headerbar-background) !important; + border-bottom-color: var(--gnome-inactive-headerbar-border-color) !important; + box-shadow: var(--gnome-inactive-headerbar-box-shadow) !important; +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/icons.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/icons.css new file mode 100755 index 000000000..ee957ff43 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/icons.css @@ -0,0 +1,550 @@ +/* Replace icons */ + +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +/* Icons color */ +.toolbarbutton-icon, +menuitem:not([class*='identity']) .menu-iconic-left .menu-iconic-icon, +.urlbar-page-action:not([readeractive]), +.button-icon:not(#hack), +.bookmark-item[container], +.notification-anchor-icon, +.protections-popup-category::after, +.protections-popup-footer-icon, +#identity-popup-mainView .subviewbutton-nav::after, +.widget-overflow-list .subviewbutton-nav::after, +.PanelUI-subView .subviewbutton-nav::after, +#identity-popup[connection^="secure"] .identity-popup-security-connection, +.panel-info-button > image, +.menu-right, +.expander-down > .button-box, +#sidebar-switcher-arrow, +#sidebar-icon, +#viewButton .button-menu-dropmarker, +.menulist-label-box:after, +.expander-up > .button-box, +#urlbar:not(.searchButton) > #urlbar-input-container > #identity-box[pageproxystate="invalid"] > #identity-icon, +.searchbar-search-icon, +.textbox-search-sign, +treechildren::-moz-tree-twisty, +treechildren::-moz-tree-image, +.item.client .item-twisty-container, +menuitem[type="checkbox"], +menuitem[type="checkbox"][checked="true"], +menuitem[type="radio"], +menuitem[type="radio"][checked="true"], +.tab-icon-overlay, +.tab-throbber::before, +.tab-icon-stack::before, +.close-icon:not(.tab-close-button), +button.close::before, +#urlbar-search-mode-indicator-close, +#tracking-protection-icon, +#identity-icon, +#permissions-granted-icon, +#downloads-indicator-icon, +.textbox-search-clear, +:root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-close .toolbarbutton-icon, +:root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-max .toolbarbutton-icon, +:root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-restore .toolbarbutton-icon, +:root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-min .toolbarbutton-icon, +:root[tabsintitlebar][inFullscreen] #window-controls #restore-button .toolbarbutton-icon { + fill: var(--gnome-toolbar-icon-fill) !important; + -moz-context-properties: fill, fill-opacity; +} +.toolbarbutton-icon:-moz-window-inactive, +:root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-close:-moz-window-inactive .toolbarbutton-icon, +:root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-max .toolbarbutton-icon:-moz-window-inactive, +:root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-restore .toolbarbutton-icon:-moz-window-inactive, +:root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-min .toolbarbutton-icon:-moz-window-inactive, +:root[tabsintitlebar][inFullscreen] #window-controls #restore-button .toolbarbutton-icon { + fill: var(--gnome-inactive-toolbar-icon-fill) !important; +} + +/* Dimmed icons */ +#urlbar:not(.searchButton) > #urlbar-input-container > #identity-box[pageproxystate="invalid"] > #identity-icon, +.searchbar-search-icon, +.textbox-search-sign, +.textbox-search-clear { + opacity: 0.7 !important; +} +.textbox-search-clear:hover { + opacity: 1 !important; +} + +/* Fix icons sizes */ +.permission-popup-permission-remove-button > .button-box > .button-icon, +.menu-iconic-icon { + height: 16px !important; + width: 16px !important; +} +/* Fix icon color */ +#sidebar-icon { + opacity: 1 !important; +} +treechildren::-moz-tree-twisty, +treechildren::-moz-tree-image { + fill-opacity: 1 !important; +} + +/* Icons active color */ +treechildren::-moz-tree-twisty(selected, focus), +treechildren::-moz-tree-twisty(selected, focus, open), +treechildren::-moz-tree-image(selected, focus), +treechildren::-moz-tree-image(selected, focus, open), +.item.client:focus .item-twisty-container, +.sidebar-panel[lwt-sidebar-brighttext] .sidebar-placesTreechildren::-moz-tree-twisty, +.sidebar-panel[lwt-sidebar-brighttext] .sidebar-placesTreechildren::-moz-tree-twisty(open) { + fill: #fff !important; +} + +/* Fix flat buttons icons aproach */ +button.close::before { + content: ""; + display: block; + background-position: center center; + background-repeat: no-repeat; + height: 100%; + width: 100%; +} + +/* Fix main menu zoom controls icons */ +#appMenu-zoom-controls2 .toolbarbutton-icon { + padding: 0 !important; + padding-block: 0 !important; + padding-inline: 0 !important; +} + +/* Scroll icons */ +#scrollbutton-up { + list-style-image: var(--scrollbutton-icon-name) !important; +} +#scrollbutton-down { + list-style-image: var(--scrollbutton-icon-name) !important; +} +arrowscrollbox { + --scrollbutton-icon-name: url("../icons/pan-down-symbolic.svg"); +} +arrowscrollbox[orient="horizontal"] { + --scrollbutton-icon-name: url("../icons/pan-start-symbolic.svg"); +} + +/* Popovers subview menu arrow */ +#identity-popup-mainView .subviewbutton-nav::after, +.widget-overflow-list .subviewbutton-nav::after, +.PanelUI-subView .subviewbutton-nav::after, +.protections-popup-category::after, +.subviewbutton-back, +.menu-right { + fill-opacity: 1 !important; + opacity: .3; +} +.menu-right { + -moz-appearance: none !important; + list-style-image: url("../icons/go-next-symbolic.svg") !important; + width: 16px !important; + height: 16px !important; +} +#identity-popup-mainView .subviewbutton-nav::after, +.widget-overflow-list .subviewbutton-nav::after, +.PanelUI-subView .subviewbutton-nav::after { + content: "" !important; + background: url("../icons/go-next-symbolic.svg"); + background-size: contain; + height: 16px; + width: 16px; +} +.protections-popup-category::after { + content: url("../icons/go-next-symbolic.svg") !important; +} + +/* Popovers subview back button */ +.subviewbutton-back { + list-style-image: url("../icons/go-previous-symbolic.svg") !important; +} + +/* Arrow down buttons */ +.expander-down > .button-box, +#sidebar-switcher-arrow, +#viewButton .button-menu-dropmarker, +.popup-notification-dropmarker .button-icon { + -moz-appearance: none !important; + list-style-image: url("../icons/pan-down-symbolic.svg") !important; + width: 16px !important; + height: 16px !important; +} +.menulist-label-box:after { + content: url("../icons/pan-down-symbolic.svg") !important; +} + +/* Arrow up buttons */ +.expander-up > .button-box { + -moz-appearance: none !important; + list-style-image: url("../icons/pan-up-symbolic.svg") !important; + width: 16px !important; + height: 16px !important; +} + +/* Search entries */ +#urlbar:not(.searchButton) > #urlbar-input-container > #identity-box[pageproxystate="invalid"] > #identity-icon, +.searchbar-search-icon, +.textbox-search-sign { + list-style-image: url(../icons/edit-find-symbolic.svg) !important; +} +.textbox-search-sign { + margin: 3px 0; + max-height: 16px !important; + width: 16px !important; +} + +/* Findbar */ +.findbar-find-previous { + list-style-image: url("../icons/go-up-symbolic.svg") !important; +} +.findbar-find-next { + list-style-image: url("../icons/go-down-symbolic.svg") !important; +} + +/* Tree views */ +treechildren::-moz-tree-twisty, +.item.client .item-twisty-container { + list-style-image: url("../icons/pan-end-symbolic.svg") !important; + width: 16px !important; + height: 16px !important; +} +.item.client .item-twisty-container { + background-image: url("../icons/pan-end-symbolic.svg") !important; +} +treechildren::-moz-tree-twisty(open) { + list-style-image: url("../icons/pan-down-symbolic.svg") !important; +} +.item.client.closed .item-twisty-container { + background-image: url("../icons/pan-down-symbolic.svg") !important; +} + +treechildren::-moz-tree-image(title, container), +treechildren::-moz-tree-image(title, open) { + list-style-image: url("../icons/folder-symbolic.svg") !important; +} +treechildren::-moz-tree-image(title, query, dayContainer), +treechildren::-moz-tree-image(query, OrganizerQuery_history____v) { + list-style-image: url("../icons/preferences-system-time-symbolic.svg") !important; +} + +/* Menu checkbox */ +menuitem[type="checkbox"] { + list-style-image: none !important; +} +menuitem[type="checkbox"][checked="true"] { + list-style-image: url("../icons/select-symbolic.svg") !important; +} +menuitem[type="checkbox"][disabled="true"] .menu-iconic-icon { + opacity: 0.5; +} + +/* Menu radio */ +menuitem[type="radio"] { + list-style-image: none !important; +} +menuitem[type="radio"][checked="true"] { + list-style-image: url("../icons/bullet-symbolic.svg") !important; +} +menuitem[type="radio"] .menu-iconic-icon { + border-radius: 100%; + border: 1px solid var(--gnome-inactive-toolbar-icon-fill); +} +menuitem[type="radio"][disabled="true"] .menu-iconic-icon { + opacity: 0.5; +} + +/* Close button */ +.close-icon:not(.tab-close-button), +.identity-popup-permission-remove-button .button-icon, +.permission-popup-permission-remove-button > .button-box > .button-icon { + list-style-image: url("../icons/window-close-symbolic.svg") !important; +} +#urlbar-search-mode-indicator-close, +button.close::before { + background-image: url("../icons/window-close-symbolic.svg") !important; +} +@media (prefers-color-scheme: light) { + .notificationbox-stack notification[type="critical"] .close-icon:not(.tab-close-button):not(:hover) { + fill: #fff !important; + } +} +@media (prefers-color-scheme: dark) { + .notificationbox-stack notification[type="warning"] .close-icon:not(.tab-close-button):not(:hover) image { + fill: rgb(46, 52, 54) !important; + } +} + +/* Window buttons */ +:root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-close .toolbarbutton-icon { + list-style-image: url("../icons/window-close-symbolic.svg") !important; +} +:root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-max .toolbarbutton-icon { + list-style-image: url("../icons/window-maximize-symbolic.svg") !important; +} +:root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-restore .toolbarbutton-icon { + list-style-image: url("../icons/window-restore-symbolic.svg") !important; +} +:root[tabsintitlebar][inFullscreen] #titlebar .titlebar-buttonbox .titlebar-restore .toolbarbutton-icon { + list-style-image: url("../icons/view-restore-symbolic.svg") !important; +} +:root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-min .toolbarbutton-icon { + list-style-image: url("../icons/window-minimize-symbolic.svg") !important; +} +:root[tabsintitlebar][inFullscreen] #window-controls #restore-button .toolbarbutton-icon { + list-style-image: url("../icons/view-restore-symbolic.svg") !important; +} + +/* Sound icons */ +.tab-icon-overlay[soundplaying] { + list-style-image: url("../icons/audio-playing-symbolic.svg") !important; +} +.tab-icon-overlay[muted] { + list-style-image: url("../icons/audio-muted-symbolic.svg") !important; +} +.tab-icon-overlay[activemedia-blocked] { + list-style-image: url("../icons/play-large-disabled-symbolic.svg") !important; +} + +/* Firefox View */ +#firefox-view-button { + list-style-image: url("../icons/firefox-symbolic.svg") !important; +} + +/* Private browsing button */ +#privatebrowsing-button { + list-style-image: url("../icons/eye-not-looking-symbolic.svg") !important; +} +/* Sidebar button */ +#sidebar-button:-moz-locale-dir(ltr):not([positionend]) .toolbarbutton-icon, #sidebar-button:-moz-locale-dir(rtl)[positionend] .toolbarbutton-icon { + list-style-image: url("../icons/toggle-sidebar-symbolic.svg") !important; +} +#sidebar-button .toolbarbutton-icon { + list-style-image: url("../icons/toggle-right-sidebar-symbolic.svg"); +} +/* Back button */ +#nav-bar #back-button, +#context-back { + list-style-image: url("../icons/go-previous-symbolic.svg") !important; +} +/* Forward button */ +#nav-bar #forward-button, +#context-forward, +#urlbar-go-button, +.search-go-button { + list-style-image: url("../icons/go-next-symbolic.svg") !important; +} +/* Menu button */ +#PanelUI-menu-button { + list-style-image: url("../icons/open-menu-symbolic.svg") !important; +} +/* New tab button */ +#new-tab-button { + list-style-image: url("../icons/tab-new-symbolic.svg") !important; +} +#tabs-newtab-button, +#TabsToolbar #new-tab-button { + list-style-image: url("../icons/list-add-symbolic.svg") !important; +} +/* Home button */ +#home-button { + list-style-image: url("../icons/user-home-symbolic.svg") !important; +} +/* Preferences button */ +#preferences-button, +.search-setting-button-compact > .button-box > .button-icon, +.unified-extensions-item-menu-button.subviewbutton { + list-style-image: url("../icons/settings-symbolic.svg") !important; +} +/* Tabs sync */ +#sync-button, +#sidebar-box[sidebarcommand="viewTabsSidebar"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon, +.urlbarView-row[source="tabs"] > .urlbarView-row-inner > .urlbarView-no-wrap > .urlbarView-favicon, +#urlbar-engine-one-off-item-tabs { + list-style-image: url("../icons/tab-symbolic.svg") !important; +} +/* Fullscreen button */ +#fullscreen-button, +#appMenu-fullscreen-button2 { + list-style-image: url("../icons/view-fullscreen-symbolic.svg") !important; +} +/* Zoom out button */ +#zoom-out-button, +#appMenu-zoomReduce-button2 { + list-style-image: url("../icons/zoom-out-symbolic.svg") !important; +} +/* Zoom in button */ +#zoom-in-button, +#appMenu-zoomEnlarge-button2 { + list-style-image: url("../icons/zoom-in-symbolic.svg") !important; +} +/* Developer button */ +#developer-button { + list-style-image: url("../icons/applications-engineering-symbolic.svg") !important; +} +/* Email link button */ +#email-link-button { + list-style-image: url("../icons/mail-unread-symbolic.svg") !important; +} +/* Print button */ +#print-button { + list-style-image: url("../icons/printer-symbolic.svg") !important; +} +/* Addons button */ +#unified-extensions-button, +#add-ons-button, +#addons-notification-icon, +.install-icon { + list-style-image: url("../icons/application-x-addon-symbolic.svg") !important; +} +/* Find button */ +#find-button { + list-style-image: url("../icons/edit-find-symbolic.svg") !important; +} +/* New window button */ +#new-window-button { + list-style-image: url("../icons/window-new-symbolic.svg") !important; +} +/* Bookmarks menu button */ +#bookmarks-menu-button, +#sidebar-box[sidebarcommand="viewBookmarksSidebar"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon, +.urlbarView-row[source="bookmarks"] > .urlbarView-row-inner > .urlbarView-no-wrap > .urlbarView-favicon, +#urlbar-engine-one-off-item-bookmarks { + list-style-image: url("../icons/starred-symbolic.svg") !important; +} +#context-bookmarkpage[starred="true"], +#star-button[starred] { + list-style-image: url("../icons/starred-symbolic.svg") !important; +} +#context-bookmarkpage, +#star-button { + list-style-image: url("../icons/non-starred-symbolic.svg") !important; +} +#star-button[starred] { + fill: var(--gnome-toolbar-star-button) !important; +} + +/* History button */ +#history-panelmenu, +#sidebar-box[sidebarcommand="viewHistorySidebar"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon, +.urlbarView-row[source="history"] > .urlbarView-row-inner > .urlbarView-no-wrap > .urlbarView-favicon, +#urlbar-engine-one-off-item-history { + list-style-image: url("../icons/preferences-system-time-symbolic.svg") !important; +} +/* All tabs button */ +#alltabs-button { + list-style-image: url("../icons/pan-down-symbolic.svg") !important; +} +/* Cut button */ +#cut-button, +#appMenu-cut-button { + list-style-image: url("../icons/edit-cut-symbolic.svg") !important; +} +/* Copy button */ +#copy-button, +#appMenu-copy-button { + list-style-image: url("../icons/edit-copy-symbolic.svg") !important; +} +/* Paste button */ +#paste-button, +#appMenu-paste-button { + list-style-image: url("../icons/edit-paste-symbolic.svg") !important; +} +/* Overflow button */ +#nav-bar-overflow-button { + list-style-image: url("../icons/pan-down-symbolic.svg") !important; +} +/* Reload */ +#reload-button, +.downloadIconRetry > .button-box > .button-icon, +#context-reload { + list-style-image: url("../icons/view-refresh-symbolic.svg") !important; +} +/* Stop */ +#stop-button, +.downloadIconCancel > .button-box > .button-icon, +#context-stop { + list-style-image: url("../icons/process-stop-symbolic.svg") !important; +} +/* Downlaod */ +#downloads-button, +#downloads-indicator-icon { + list-style-image: url("../icons/folder-download-symbolic.svg") !important; +} +/* Info */ +.panel-info-button > image, +#identity-icon { + list-style-image: url("../icons/info-symbolic.svg") !important; +} +.tabbrowser-tab[image="chrome://global/skin/icons/info.svg"]:not([busy]):not([progress]) .tab-icon-stack::before { + content: ""; + height: 16px; + width: 16px; + background-image: url("../icons/info-symbolic.svg") !important; +} +/* Password */ +#password-notification-icon { + list-style-image: url("../icons/key-symbolic.svg") !important; +} + +/* Url Bar icons */ +#urlbar:not(.searchButton) > #urlbar-input-container > #identity-box[pageproxystate="invalid"] #identity-icon { + list-style-image: url("../icons/edit-find-symbolic.svg") !important; +} +#urlbar-input-container[pageproxystate="valid"] > #tracking-protection-icon-container > #tracking-protection-icon-box > #tracking-protection-icon { + list-style-image: url("../icons/security-high-symbolic.svg") !important; +} +#urlbar-input-container[pageproxystate="valid"] > #tracking-protection-icon-container > #tracking-protection-icon-box[hasException] > #tracking-protection-icon { + list-style-image: url("../icons/security-low-symbolic.svg") !important; +} +#urlbar-input-container[pageproxystate="valid"] > #tracking-protection-icon-container > #tracking-protection-icon-box:not([hasException])[active] > #tracking-protection-icon { + list-style-image: url("../icons/security-high-symbolic.svg") !important; +} +#identity-box[pageproxystate="valid"].verifiedDomain #identity-icon, +#identity-box[pageproxystate="valid"].mixedActiveBlocked #identity-icon { + list-style-image: url("../icons/padlock-symbolic.svg") !important; +} +#identity-popup[connection^="secure"] .identity-popup-security-connection { + list-style-image: url("../icons/padlock-symbolic.svg") !important; +} +#identity-box[pageproxystate="valid"].notSecure #identity-icon, +#identity-box[pageproxystate="valid"].mixedActiveContent #identity-icon, +#identity-box[pageproxystate="valid"].httpsOnlyErrorPage #identity-icon { + list-style-image: url("../icons/padlock-insecure-symbolic.svg") !important; +} +.identity-popup-security-connection { + list-style-image: url("../icons/padlock-insecure-symbolic.svg") !important; +} +#permissions-granted-icon { + list-style-image: url("../icons/general-properties-symbolic.svg") !important; +} +.popup-notification-icon[popupid="web-notifications"], .desktop-notification-icon { + list-style-image: url("../icons/message-symbolic.svg") !important; +} +#reader-mode-button { + list-style-image: url("../icons/reader-mode-symbolic.svg") !important; +} +.urlbar-icon { + margin: 2px 0 !important; +} + +/* Fix for extensions icons */ +@media (prefers-color-scheme: dark) { + .webextension-browser-action { + list-style-image: var(--webextension-menupanel-image-light, inherit) !important; + } +} + +/* Folder icon */ +.bookmark-item[container], +.downloadIconShow > .button-box > .button-icon { + list-style-image: url("../icons/folder-symbolic.svg") !important; +} + +/* Text clear */ +.textbox-search-clear { + content: url("../icons/edit-clear-symbolic.svg") !important; +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/lists.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/lists.css new file mode 100755 index 000000000..571fbd7ee --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/lists.css @@ -0,0 +1,40 @@ +/* Lists */ + +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +/* TODO: create list color vars */ +/* List container */ +#permission-popup-permission-list, +richlistbox#items { + --in-content-item-selected: var(--gnome-accent-bg) !important; + --in-content-item-selected-text: #fff !important; + background: var(--gnome-menu-background) !important; + border: 1px solid var(--gnome-button-border-color) !important; + border-radius: 12px !important; + padding: 0 !important; + overflow: hidden; +} + +richlistbox#items { + box-shadow: 0 0 0 1px rgba(0, 0, 0, .03), + 0 1px 3px 1px rgba(0, 0, 0, .07), + 0 2px 6px 2px rgba(0, 0, 0, .03); +} + +/* List item */ +.permission-popup-permission-list-anchor, +richlistbox#items richlistitem { + padding: 6px !important; + margin: 0 !important; +} +.permission-popup-permission-list-anchor:not(:last-child), +richlistbox#items richlistitem:not(:last-child) { + border-bottom: 1px solid var(--gnome-menu-separator-color); +} + +/* Fix list buttons on selected state */ +@media (prefers-color-scheme: light) { + richlistbox#items richlistitem[selected=true] button:not(:hover) { + filter: invert() brightness(200%) !important; + } +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/popups-contents.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/popups-contents.css new file mode 100755 index 000000000..cafa3c057 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/popups-contents.css @@ -0,0 +1,341 @@ +/* Popups contents syles */ + +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +/* Main menu fxa */ +#appMenu-fxa-status[fxastatus="signedin"] > #appMenu-fxa-label { + padding-left: 22px !important; + margin-inline-start: -22px !important; +} +#appMenu-fxa-status[fxastatus="signedin"] > #appMenu-fxa-avatar { + margin-inline-start: 5px !important; +} +#appMenu-fxa-status2[fxastatus] > #appMenu-fxa-label2 > vbox > #appMenu-header-description, #appMenu-fxa-text { + font-weight: 400 !important; +} + +/* Style main context menu & buttons */ +#context-navigation { + padding: 0; +} +#context-navigation > menuitem > .menu-iconic-left { + margin: auto !important; +} +#context-navigation menuitem { + --toolbarbutton-active-background: transparent !important; + --toolbarbutton-hover-background: transparent !important; +} + +/* Main menu */ +#appMenu-popup .panel-banner-item:after { + -moz-box-ordinal-group: 0; + margin: 0 8px 0 0 !important; +} +#appMenu-popup .toolbaritem-combined-buttons { + margin-inline-end: 0 !important; +} +#appMenu-popup .toolbaritem-combined-buttons .before-label { + width: 32px !important; +} +.subviewbutton#appMenu-zoom-controls2 { + padding-right: 0 !important; + padding-top: 6px !important; +} + +/* User sync account remove avatar */ +#fxa-menu-avatar { + display: none; +} + +/* Add search engine button remove icon */ +#pageAction-panel-addSearchEngine .toolbarbutton-badge-stack { + display: none !important; +} + +/* All tabs popover */ +.all-tabs-item[selected] { + border-left: 3px solid var(--gnome-tabbar-tab-active-border-bottom-color); + box-shadow: none !important; +} + +.all-tabs-item > .all-tabs-secondary-button label { + margin: 0 !important; +} + +/* Add bookmark */ +#editBookmarkPanelInfoArea { + padding: 0 !important; +} +#editBookmarkPanelRows, +#editBookmarkPanelBottomContent { + padding: 0 !important; +} +#editBookmarkPanelBottomButtons { + margin: 0 !important; +} +#editBookmarkPanelBottomContent { + margin-bottom: 12px !important; +} +#editBookmarkPanelBottomContent, +#editBookmarkPanelRows vbox { + margin: 6px 0; +} + +/* Downloads popover */ +#downloadsPanel-mainView .download-state { + padding: 12px !important; + border: 0 !important; + display: flex; + align-items: center; + height: 64px !important; + margin: 0 !important; +} + +#downloadsPanel-mainView .downloadMainArea { + flex: 1; + display: flex; +} +#downloadsPanel-mainView .downloadMainArea:hover { + background: transparent !important; +} + +#downloadsPanel-mainView .downloadTypeIcon { + margin: 0 !important; + margin-right: 6px !important; +} + +#downloadsPanel-mainView .downloadContainer { + margin-inline-end: 0 !important; + flex: 1; + display: flex; + flex-direction: column; +} + +#downloadsPanel-mainView .download-state .downloadButton .button-box { + padding: 0 !important; + margin: 0 !important; +} +#downloadsPanel-mainView .download-state toolbarseparator { + display: none; +} + +/* Customization overflow menu position */ +#customization-panel-container { + margin-top: 10px; + z-index: 10; +} + +/* Confirmation Hint */ +#confirmation-hint .panel-arrowcontent { + background: var(--gnome-button-suggested-action-background) !important; + border-color: var(--gnome-button-suggested-action-border-color) !important; +} +#confirmation-hint .panel-arrow { + fill: var(--gnome-button-suggested-action-border-color) !important; + stroke: var(--gnome-button-suggested-action-border-color) !important; +} +#confirmation-hint-message { + color: white !important; +} + +/* URLbar popups */ +#identity-popup-mainView, +#permission-popup-mainView, +#protections-popup-mainView, +#identity-popup-mainView-panel-header { + max-width: calc(var(--popup-width) + (var(--gnome-menu-padding) * 2)) !important; + min-width: calc(var(--popup-width) + (var(--gnome-menu-padding) * 2)) !important; +} + +/* Identity popup */ +#identity-popup-security, +.identity-popup-section, +#identity-popup-security-expander .button-box, +.identity-popup-security-content { + border: 0 !important; +} + +.identity-popup-security-content { + padding-inline-end: 0 !important; + padding-inline-start: 0 !important; +} +.identity-popup-security-content { + background-position: 0em 0.8em !important; + background-size: 24px auto; +} +.identity-popup-security-content .identity-popup-headline { + margin-left: 1.4em !important; +} +#identity-popup-security-button { + padding: 3px 0 !important; +} +.identity-popup-security-connection.identity-button:not(#hack) { + width: calc(var(--popup-width) - 30px) !important; +} + +/* Permission popup */ +#permission-popup-permissions-content { + padding: 0 !important; +} + +.permission-popup-permission-item:first-child, #permission-popup-storage-access-permission-list-header { + margin-top: 0 !important; +} +.permission-popup-permission-remove-button { + opacity: 1 !important; +} +.permission-popup-permission-state-label { + display: none !important; +} + +#permission-popup-permission-list-default-anchor:empty { + padding: 0 !important; + border: 0 !important; +} +.permission-popup-permission-list-anchor[anchorfor="3rdPartyStorage"] { + padding: 0 !important; +} +.permission-popup-permission-list-anchor[anchorfor="3rdPartyStorage"] > vbox:only-child { + display: block !important; + height: 0 !important; + overflow: hidden; + visibility: hidden; + margin: 0 !important; + margin-bottom: -1px !important; +} +.permission-popup-permission-item-3rdPartyStorage { + margin-right: 6px; + margin-bottom: 6px !important; +} +#permission-popup-storage-access-permission-list-header { + padding: 6px !important; +} + +/* Protections popup */ +.protections-popup-section, +#protections-popup-not-blocking-section-header { + border: 0 !important; +} +#protections-popup-mainView-panel-header-section { + background: transparent !important; +} +#protections-popup-mainView toolbarseparator { + display: none !important; +} + +#protections-popup-mainView-panel-header { + color: var(--gnome-toolbar-color) !important; +} +#protections-popup[hasException] #protections-popup-mainView-panel-header { + background: none !important; +} +#protections-popup-main-header-label { + height: auto !important; + margin-inline-start: 6px !important; + text-align: left !important; +} +#protections-popup-mainView-panel-header-span { + margin: 0 !important; + margin-inline-start: 0 !important +} +#protections-popup[toast] #protections-popup-mainView-panel-header { + border-bottom-width: 1px !important; + border-radius: 5px !important; + padding: 0px !important; +} +#protections-popup-info-button { + margin: 0 !important; +} + +#protections-popup-message { + background-position: center 12px !important; + background-color: var(--gnome-entry-background); + border: 0 !important; + border-radius: 12px; + color: var(--gnome-toolbar-color) !important; + height: 100% !important; + margin: 0 !important; +} +#protections-popup-message .text-link, +#cfr-protections-panel-link-text { + color: var(--gnome-toolbar-color) !important; +} +.whatsNew-message-body { + padding: 0 6px; +} + +#protections-popup-tp-switch-section { + background: var(--gnome-menu-background); + border: 1px solid var(--gnome-button-border-color) !important; + border-radius: 9px; + padding: 12px 8px !important; + margin: 0 !important; +} + +#protections-popup[hasException] #protections-popup-tp-switch-section { + background: var(--gnome-menu-background) !important; +} +.protections-popup-tp-switch-label-box label { + margin-right: 12px !important; + font-weight: normal !important; +} + +#protections-popup-no-trackers-found-description { + margin: 12px 8px 0 !important; + text-align: left !important; +} + +#protections-popup-blocking-section-header, +#protections-popup-not-found-section-header, +#protections-popup-not-blocking-section-header{ + padding: 0px 5px !important; + margin-top: 20px !important; + height: auto !important; +} + +#protections-popup-category-list { + margin: 0 !important; +} +.protections-popup-category.notFound .protections-popup-category-label { + width: calc(var(--popup-width) - 70px) !important; +} +.protections-popup-category-label { + margin-inline-start: 6px !important; +} +.protections-popup-category-state-label { + opacity: 0.7; +} + +#protections-popup-footer { + display: flex; + justify-content: flex-start; + flex-wrap: wrap; + margin-top: 12px; +} +#protections-popup-show-report-stack, +#protections-popup-settings-button { + width: 100% !important; +} +#protections-popup-show-report-button { + height: 32px !important; +} +#protections-popup-footer-protection-type-label { + margin-left: 6px !important; +} +.protections-popup-description { + border-bottom: 0 !important; +} +.protections-popup-description > description { + margin: 8px !important; +} + +/* Feature recommendation notification, fix width */ +#contextual-feature-recommendation-notification { + width: auto !important; +} + +/* Extensions sometimes assume a white background */ +.webextension-popup-browser { + background-color: #fff !important; +} + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/popups.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/popups.css new file mode 100755 index 000000000..8f52f4068 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/popups.css @@ -0,0 +1,289 @@ +/* Popup menus and context menus */ + +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +/* Style menus */ +menupopup { + -moz-appearance: none !important; + color: var(--gnome-toolbar-color) !important; + padding: 8px !important; +} + +menu menupopup { + margin: -13px 0px 0px 0px !important; +} + +menulist { + padding: 0px !important; +} + +.menupopup-arrowscrollbox { + -moz-appearance: none !important; + background: var(--gnome-menu-background) !important; + border: 1px solid var(--gnome-menu-border-color) !important; + border-radius: 12px !important; + box-shadow: var(--gnome-menu-shadow) !important; + padding: 6px !important; + margin: 0 !important; +} + +menuitem[type="checkbox"] image, menuitem[type="radio"] image { + visibility: visible !important; +} +menuitem[disabled="true"]:hover, menupopup menu[disabled="true"]:hover { + background: transparent !important; +} + +/* Adjust popovers position */ +panel[type=arrow] { + margin-top: 8px !important; +} + +/* Style popovers */ +panel:not([remote]) { + --arrowpanel-background: var(--gnome-menu-background) !important; + --panel-item-hover-bgcolor: var(--gnome-menu-button-hover-background) !important; +} +panel { + --arrowpanel-padding: 0 !important; + --arrowpanel-border-color: var(--gnome-menu-border-color) !important; + --arrowpanel-border-radius: 12px !important; + --gnome-menu-padding: 6px; +} + +/* Padding rules */ +#sidebarMenu-popup { + --arrowpanel-padding: var(--gnome-menu-padding) !important; +} +#downloadsPanel-blockedSubview, +#downloadsPanel-mainView { + padding: var(--gnome-menu-padding) !important; +} +.panel-header, .panel-footer, +.panel-subview-body, +#protections-popup-mainView-panel-header-section, +.permission-popup-section, +.popup-notification-header-container, +.popup-notification-body-container, +.popup-notification-footer-container { + padding: 0 var(--gnome-menu-padding) var(--gnome-menu-padding) !important; +} +:is( + .panel-header, .panel-footer, + .panel-subview-body, + .protections-popup-section, + #protections-popup-mainView-panel-header-section, + .permission-popup-section, + .identity-popup-section, + .popup-notification-header-container, + .popup-notification-body-container, + .popup-notification-footer-container +):first-child:not(:empty) { + padding-top: var(--gnome-menu-padding) !important; +} +#protections-popup-footer, +#identity-popup-clear-sitedata-footer { + padding: 0 var(--gnome-menu-padding) !important; +} +.panel-subview-body > .panel-subview-body { + padding: 0 !important; +} +/* Padding with margign */ +.subviewbutton.panel-subview-footer-button:not(#downloadsHistory) { + margin: var(--gnome-menu-padding) !important; +} +.subviewbutton.panel-subview-footer-button:not(:only-child, #downloadsHistory) { + margin: 0 var(--gnome-menu-padding) !important; +} +.subviewbutton.panel-subview-footer-button:not(:only-child, #downloadsHistory):last-child { + margin-bottom: var(--gnome-menu-padding) !important; +} + +/* No menu */ +#notification-popup, +#permission-popup, +#editBookmarkPanel, +#downloadsPanel { + --gnome-menu-padding: 12px !important; +} + +/* Panel arrow */ +.panel-arrowcontent { + background: var(--arrowpanel-background) !important; + border: 1px solid var(--gnome-menu-border-color) !important; + border-radius: 12px !important; + color: var(--gnome-toolbar-color) !important; +} +.panel-arrow { + fill: var(--arrowpanel-background) !important; + stroke: var(--gnome-menu-border-color) !important; + display: -moz-inline-box !important; +} + +/* Panel header */ +.panel-header { + position: relative !important; +} + +/* Panel footer */ +.panel-footer { + background-color: transparent !important; + margin: 0 !important; +} +.panel-subview-body .panel-footer { + padding: 0 !important; +} +.panel-footer.panel-footer-menulike { + border-top: 0 !important; + margin-top: 8px !important; +} +.panel-footer toolbarseparator { + display: none !important; +} +.proton-zap { + border-image: unset !important; +} +.panel-subview-footer { + margin-top: 10px !important; +} + +/* Remove unwanted separators */ +.panel-header + toolbarseparator, +#identity-popup-mainView-panel-header + toolbarseparator, +#permission-popup-mainView-panel-header + toolbarseparator, +#protections-popup-mainView-panel-header-section + toolbarseparator { + display: none !important; +} + +/* Menu buttons */ +menuitem, menupopup menu, +panelview .subviewbutton:not(#appMenu-fxa-label2, .unified-extensions-item-menu-button), +panelview .toolbarbutton-1, +panelview .unified-extensions-item-action-button, +.protections-popup-footer-button, +.protections-popup-category, +.identity-popup-content-blocking-category, +#PlacesToolbar .bookmark-item, +#downloadsPanel-mainView .download-state { + -moz-appearance: none !important; + border-radius: 6px !important; + color: var(--gnome-toolbar-color) !important; + font: menu !important; + padding: 4px 12px !important; + min-height: 32px !important; +} +.subviewbutton, +.protections-popup-footer-button, +.protections-popup-category, +.identity-popup-content-blocking-category, +#PlacesToolbar menupopup[placespopup="true"] .bookmark-item, +.openintabs-menuitem, +.widget-overflow-list .toolbarbutton-1, +panelview .unified-extensions-item { + margin: 0 !important; +} + +.subviewbutton[shortcut]:after { + opacity: 0.5 !important; +} + +.bookmark-item .menu-right { + fill-opacity: 1 !important; +} + +/* Menu buttons disabled */ +menuitem[disabled="true"], menupopup menu[disabled="true"], +.subviewbutton[disabled="true"], .toolbarbutton-1[disabled="true"], +.protections-popup-category[disabled="true"], +.identity-popup-content-blocking-category[disabled="true"] { + opacity: .5 !important; +} +menuitem[disabled="true"][_moz-menuactive], menupopup menu[disabled="true"][_moz-menuactive] { + background: transparent !important; +} + +/* Menu buttons hover */ +menuitem:not([disabled="true"]):is(:hover, [_moz-menuactive]), +menupopup menu:not([disabled="true"]):is(:hover, [_moz-menuactive]), +.subviewbutton:not([disabled="true"], #appMenu-zoom-controls2, #appMenu-fxa-label2):hover, +.protections-popup-footer-button:not([disabled="true"]):hover, +#protections-popup-show-report-stack:hover .protections-popup-footer-button, +.protections-popup-category:not([disabled="true"]):hover, +.identity-popup-content-blocking-category:not([disabled="true"]):hover, +#PlacesToolbar .bookmark-item:is(:hover, [open], [_moz-menuactive]), +#downloadsPanel-mainView .download-state:hover { + background: var(--gnome-menu-button-hover-background) !important; +} + +/* Menu buttons fix */ +#appMenu-fxa-label2 { + padding: 0 !important; +} +#appMenu-fxa-label2:hover { + background: transparent !important; +} + +/* Menu buttons back */ +.subviewbutton-back { + opacity: 1 !important; + width: 100%; + -moz-box-align: center !important; + -moz-box-pack: start !important; +} +.subviewbutton-back + h1 { + font-weight: bold !important; + left: 0 !important; + padding: 0 !important; + pointer-events: none; + position: absolute !important; + top: 15px !important; + width: 100%; +} + +/* Menu headers */ +.subview-subheader { + font: menu !important; + font-weight: bold !important; + padding-block: 0 !important; + margin: 0 4px !important; +} + +/* Style popover separators */ +toolbarseparator, menuseparator { + appearance: none !important; +} + +#PlacesToolbar menupopup[placespopup="true"] menuseparator { + border-top: 1px solid var(--gnome-menu-separator-color) !important; + padding: 0 !important; + margin: 6px 0 !important; +} +#PlacesToolbar menupopup[placespopup="true"] menuseparator::before { + border: 0 !important; +} + +toolbarseparator:not([orient="vertical"]), menupopup menuseparator { + border-top: 1px solid var(--gnome-menu-separator-color) !important; + margin: 6px 0 !important; +} +toolbarseparator[orient="vertical"] { + margin: 0 6px !important; +} + +.panel-subview-body + toolbarseparator:not([orient="vertical"]) { + margin: 0 0 6px !important; +} +panelview > toolbarseparator:not([orient="vertical"]), +#identity-popup-more-info-footer toolbarseparator:not([orient="vertical"]){ + margin: 6px !important; +} +#identity-popup-clear-sitedata-footer toolbarseparator:not([orient="vertical"]) { + margin-top: 0 !important; +} + +toolbarbutton menupopup[placespopup] menuseparator { + padding: 0 !important; +} +toolbarbutton menupopup[placespopup] menuseparator::before { + display: none !important; +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/remove-white-flash.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/remove-white-flash.css new file mode 100755 index 000000000..7d46d806d --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/remove-white-flash.css @@ -0,0 +1,11 @@ +/* Removes a white flash after you open or close a tab. Affects all variants, + * but it's more visible on dark variants. */ + +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +/* Overrides: Change the flash color */ +#tabbrowser-tabpanels, +#tabbrowser-tabpanels[pendingpaint], +browser { + background-color: var(--gnome-browser-before-load-background) !important; +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/sidebar.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/sidebar.css new file mode 100755 index 000000000..7b462ab30 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/sidebar.css @@ -0,0 +1,34 @@ +/* Sidebar */ + +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +#sidebar-box, .sidebar-panel { + background: var(--gnome-sidebar-background) !important; +} +#sidebar-box:-moz-window-inactive, .sidebar-panel:-moz-window-inactive { + background: var(--gnome-inactive-sidebar-background) !important; +} +#sidebar-box:-moz-window-inactive label, #sidebar-box:-moz-window-inactive image, +.sidebar-panel:-moz-window-inactive label, .sidebar-panel:-moz-window-inactive image, +.sidebar-placesTreechildren:-moz-window-inactive { + opacity: 0.7 !important; +} +#sidebar-splitter { + background: var(--gnome-toolbar-background) !important; + border: 0 !important; + border-right: 1px solid var(--gnome-toolbar-border-color) !important; + width: 0 !important; +} +#sidebar-splitter:-moz-window-inactive { + background: var(--gnome-inactive-toolbar-background) !important; + border-color: var(--gnome-inactive-toolbar-border-color) !important; +} + +#sidebar-header { + padding: 6px !important; + border-bottom: 1px solid var(--gnome-toolbar-border-color) !important; +} +#sidebar-search-container { + padding: 6px !important; +} + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/tabsbar.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/tabsbar.css new file mode 100755 index 000000000..f5186456a --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/tabsbar.css @@ -0,0 +1,619 @@ +/* Tabs bar */ + +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +:root { + --space-above-tabbar: 0 !important; +} + +#TabsToolbar { + --toolbarbutton-inner-padding: var(--toolbarbutton-inner-padding) !important; + background-color: var(--gnome-tabbar-background) !important; + border-bottom: 0 !important; + padding: 0 !important; + position: relative; + z-index: 1; +} + +#TabsToolbar .titlebar-buttonbox-container:not(#hack) { + display: none !important; +} + +#TabsToolbar:-moz-window-inactive { + background-color: var(--gnome-inactive-tabbar-background) !important; +} + +/* Tabs bar height */ +#tabbrowser-tabs, +#tabbrowser-tabs arrowscrollbox { + height: auto !important; + min-height: auto !important; + --tab-min-height: 34px !important; +} + +tab > stack { + height: 34px !important; + width: 34px !important; + min-height: 34px !important; +} + +/* Tabs scroll fade */ +#TabsToolbar { + --gnome-tabbar-fade-background: var(--gnome-tabbar-background); +} +#TabsToolbar:-moz-window-inactive { + --gnome-tabbar-fade-background: var(--gnome-inactive-tabbar-background); +} + +#scrollbutton-up:not([disabled])::after, +#scrollbutton-down:not([disabled])::after { + content: ""; + height: 44px; + position: absolute; + top: -3px; + z-index: -1; + width: 50px; + pointer-events: none; +} + +#scrollbutton-up:not([disabled])::after { + background: linear-gradient(to right, var(--gnome-tabbar-fade-background) 25px, transparent); + +} +#scrollbutton-down:not([disabled])::after { + background: linear-gradient(to left, var(--gnome-tabbar-fade-background) 25px, transparent); + right: 0; +} + +spacer[part=overflow-start-indicator], spacer[part=overflow-end-indicator] { + width: 0 !important; + border: 0 !important; + margin-inline: 0 !important; +} + +#scrollbutton-up, #scrollbutton-down { + position: relative !important; + z-index: 5 !important; +} + +/* Remove hover effects on tab bar buttons */ +#TabsToolbar { + --toolbarbutton-active-background: transparent !important; + --toolbarbutton-hover-background: transparent !important; +} + +/* Tabsbar buttons */ +#TabsToolbar .toolbarbutton-1:not(#hack) { + border-radius: 6px !important; + margin: 5px 3px 6px !important; + padding: 0 9px !important; + min-height: 34px !important; + transition: background 0.3s; +} +#TabsToolbar .toolbarbutton-1:not([disabled]):not(:active):not([open]):hover { + background-color: var(--gnome-tabbar-tab-hover-background) !important; +} +#TabsToolbar .toolbarbutton-1:active, #TabsToolbar .toolbarbutton-1[open] { + background-color: var(--gnome-tabbar-tab-active-background) !important; +} + +/* Fake tabsbar border */ +#TabsToolbar::after { + content: ""; + display: block; + width: 200%; + background: var(--gnome-toolbar-background); + border-bottom: 1px solid var(--gnome-toolbar-border-color); + height: 0; + min-height: 0; + position: absolute; + bottom: 0; + left: 0; + z-index: 6; +} + +/* Tab */ +.tabbrowser-tab { + border-width: 0 !important; + padding: 5px 2px 6px !important; + position: relative; +} +.tabbrowser-tab:not([hidden=true], [pinned]):first-of-type { + padding-left: 5px !important; +} +.tabbrowser-tab:not([hidden="true"]):last-of-type { + padding-right: 5px !important; +} + +#tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]) > #tabbrowser-arrowscrollbox > .tabbrowser-tab[first-visible-unpinned-tab] { + margin-inline-start: 0 !important; +} + +/* Tabs separators */ +.tabbrowser-tab { + border-style: solid !important; + border-left-width: 1px !important; + border-color: transparent !important; +} +.tabbrowser-tab:not(:first-of-type, [selected], :hover) { + --gnome-tabbar-tab-separator-hack0: var(--gnome-tabbar-background); + --gnome-tabbar-tab-separator-hack1: linear-gradient( + to bottom, + var(--gnome-tabbar-tab-separator-hack0) 0, + var(--gnome-tabbar-tab-separator-hack0) 9px, + var(--gnome-tabbar-tab-separator-color) 9px, + var(--gnome-tabbar-tab-separator-color) 35px, + var(--gnome-tabbar-tab-separator-hack0) 35px, + var(--gnome-tabbar-tab-separator-hack0) 45px + ) 1; + border-image: var(--gnome-tabbar-tab-separator-hack1); +} +.tabbrowser-tab:-moz-window-inactive { + --gnome-tabbar-tab-separator-hack0: var(--gnome-inactive-tabbar-background); +} +#tabbrowser-tabs[overflow="true"] .tabbrowser-tab[first-visible-unpinned-tab] { + border-image: none !important; +} +.tabbrowser-tab[selected] ~ .tabbrowser-tab:not([hidden="true"]) { + border-image: none; +} +.tabbrowser-tab[selected] ~ .tabbrowser-tab:not([hidden="true"]) ~ .tabbrowser-tab:not([hidden="true"]) { + border-image: var(--gnome-tabbar-tab-separator-hack1); +} +.tabbrowser-tab:hover ~ .tabbrowser-tab:not([hidden="true"]) { + border-image: none !important; +} +.tabbrowser-tab:hover ~ .tabbrowser-tab:not([hidden="true"]) ~ .tabbrowser-tab:not([hidden="true"]) { + border-image: var(--gnome-tabbar-tab-separator-hack1) !important; +} + +/* Tab labels */ +tab { + color: var(--gnome-toolbar-color) !important; + font-family: Cantarell, inherit; + font-weight: normal; + font-size: 1em; +} + +/* Reset tab background */ +.tab-background { + border-radius: 6px !important; + box-shadow: none !important; + margin-block: 0 !important; + border: 0 !important; + transition: background 0.2s; +} + +/* Center all inside tab */ +.tab-content { + display: flex; + justify-content: center; + align-items: center; + margin-top: -1px; + min-width: 100% !important; + padding: 0 4px !important; +} + +/* Fix custom info tab icon */ +.tabbrowser-tab[image="chrome://global/skin/icons/info.svg"]:not([pinned]):not([busy]):not([progress]) .tab-icon-stack::before { + margin-inline-end: 5.5px; +} +.tabbrowser-tab[image="chrome://global/skin/icons/info.svg"] .tab-icon-image { + display: none !important; +} + +/* Prevent tab icons size breaking */ +.tab-icon-image, .tab-icon-sound, .tab-throbber, .tab-throbber-fallback, .tab-close-button { + min-width: 16px; +} + +/* Center tab icon contents */ +.tabbrowser-tab .tab-icon-stack { + align-items: center; + justify-items: center; +} + +/* Adjust tab label width */ +.tab-label-container { + min-width: 0 !important; +} + +/* Put tab close button to the right */ +.tabbrowser-tab .tab-close-button { + margin-left: auto !important; +} + +/* Force tab favicon to the center */ +.tabbrowser-tab:not([pinned]) .tab-icon-stack { + margin-left: auto !important; +} + +/* Tab icon margin */ +.tabbrowser-tab:not([pinned]) .tab-icon-stack { + margin-right: 2px; +} +.tab-throbber:not([pinned]), .tab-icon-pending:not([pinned]), .tab-icon-image:not([pinned]), .tab-sharing-icon-overlay:not([pinned]), .tab-icon-overlay:not([pinned]) { + margin-inline-end: 0 !important; +} +.tabbrowser-tab:not([soundplaying], [muted], [activemedia-blocked], [crashed]) .tab-icon-stack { + padding: 4px; +} + +/* Hide favicon when mute icon is present */ +.tabbrowser-tab:not([pinned]):is([soundplaying], [muted], [activemedia-blocked], [crashed]) .tab-icon-image:not([sharing]), +.tabbrowser-tab:not([pinned]):is([soundplaying], [muted], [activemedia-blocked], [crashed])[selected] .tab-icon-image { + display: none; +} + +/* Hide secondary label about muting */ +.tabbrowser-tab:is([soundplaying], [muted], [activemedia-blocked], [crashed]) .tab-secondary-label { + display: none; +} + +/* Tab buttons */ +.tab-icon-overlay, +.tab-close-button { + border: 0px solid transparent; + box-sizing: content-box; /* Avoid deformation on flexbox */ + border-radius: 99px !important; + padding: 4px !important; + background-size: 24px; + transition: all 0.2s ease-out !important; +} +:root:not(:-moz-window-inactive) .tab-icon-overlay:hover, +:root:not(:-moz-window-inactive) .tab-close-button:hover { + background: var(--gnome-button-flat-hover-background) !important; +} + +.tab-icon-stack:is([soundplaying], [muted], [activemedia-blocked]) image { + margin: auto !important; +} + +/* Always show the muted icon when poresent */ +#tabbrowser-tabs:not([secondarytext-unsupported]) .tabbrowser-tab:not(:hover) .tab-icon-overlay[indicator-replaces-favicon] { + opacity: 1 !important; +} + +/* Icon overlay smaller */ +.tab-icon-overlay[pinned], .tab-icon-overlay:not([indicator-replaces-favicon="true"], [selected]) { + width: 12px !important; + height: 12px !important; + padding: 2px !important; +} +/* Icon overlay small style */ +.tab-icon-overlay:is([pinned], [sharing]):not([crashed]) { + stroke: unset !important; +} +.tab-icon-overlay:is([pinned]):not([crashed]), +.tab-icon-overlay:is([sharing]):not([crashed], [selected]) { + background: var(--gnome-tab-button-background) !important; +} +.tab-icon-overlay:is([pinned], [sharing]):not([crashed]):hover { + background: var(--gnome-tab-button-hover-background) !important; +} + +/* Fix icon overlay posisition when sharing */ +.tab-icon-overlay:not([crashed], [pinned]):is([sharing])[selected] { + top: 0 !important; + inset-inline-end: 0 !important; +} + +/* Close tab button */ +.tab-close-button { + list-style-image: url("../icons/window-close-symbolic.svg") !important; + fill: var(--gnome-toolbar-color) !important; + fill-opacity: 1 !important; + -moz-context-properties: fill, fill-opacity !important; + height: 16px !important; + margin-right: 0 !important; + opacity: 1 !important; + width: 16px !important; + z-index: 100 !important; +} +:root:-moz-window-inactive .tab-close-button:not(#hack) { + opacity: .18 !important; +} +:root:not(:-moz-window-inactive) .tab-close-button:active { + background-image: var(--gnome-button-active-background) !important; + box-shadow: var(--gnome-button-active-box-shadow) !important; + border-color: var(--gnome-button-active-border-color) !important; + border-bottom-color: var(--gnome-button-active-border-color) !important; + border-top-color: var(--gnome-button-active-border-accent-color) !important; +} + +.tab-close-button:active:not(:hover) { + background-image: none !important; + box-shadow: none !important; +} + +/* Autohide */ +.tabbrowser-tab:not([selected="true"]) .tab-close-button { + visibility: hidden !important; + opacity: 0 !important; +} +.tabbrowser-tab:hover .tab-close-button { + visibility: visible !important; + opacity: 1 !important; +} + +/* Fix close button position */ +.tabbrowser-tab:not([pinned]) .tab-label-container { + margin-right: -16px; +} +.tabbrowser-tab:not([pinned]):is([selected="true"], :hover) .tab-label-container[textoverflow="true"] { + margin-right: 0; +} +#tabbrowser-tabs[closebuttons="activetab"] .tabbrowser-tab:not([pinned]) .tab-close-button { + display: block !important; +} + +/* Close button overlay */ +.tabbrowser-tab:not([pinned]) .tab-content::before { + border-radius: 0 6px 6px 0; + content: ""; + height: 100%; + opacity: 0; + position: absolute; + right: 0; + top: 0; + transition: 0.2s; + width: 55px; +} +.tabbrowser-tab:not([pinned]) .tab-content::before { + background: linear-gradient(to left, var(--gnome-tabbar-tab-close-overlay-bg) 100%); + z-index: 99; +} +.tabbrowser-tab:not([pinned]):is([selected="true"], :hover) .tab-content::before { + opacity: 1; +} +.tabbrowser-tab:not([pinned])[selected="true"] .tab-content::before { + --gnome-tabbar-tab-close-overlay-bg: var(--gnome-tabbar-tab-active-background); +} +.tabbrowser-tab:not([pinned], :-moz-window-inactive)[selected="true"]:hover .tab-content::before { + --gnome-tabbar-tab-close-overlay-bg: var(--gnome-tabbar-tab-active-hover-background); +} +.tabbrowser-tab:not([pinned]):hover .tab-content::before { + --gnome-tabbar-tab-close-overlay-bg: var(--gnome-tabbar-tab-hover-background); +} +.tabbrowser-tab:not([pinned])[selected="true"]:-moz-window-inactive .tab-content::before { + --gnome-tabbar-tab-close-overlay-bg: var(--gnome-inactive-tabbar-tab-active-background); +} +.tabbrowser-tab:not([pinned]):hover:-moz-window-inactive .tab-content::before { + --gnome-tabbar-tab-close-overlay-bg: var(--gnome-inactive-tabbar-tab-hover-background); +} + +/* Tab close button etc. positioning */ +.tab-throbber, .tab-icon-image, .tab-sharing-icon-overlay, .tab-icon-sound, .tab-close-button { + margin-top: 0 !important; +} + +/* Active tab */ +.tab-background[selected=true] { + background: none !important; + border-image: none !important; +} +.tab-background[selected=true] { + background-color: var(--gnome-tabbar-tab-active-background) !important; +} +.tab-background[selected=true]:-moz-window-inactive { + background-color: var(--gnome-inactive-tabbar-tab-active-background) !important; +} + +/* Tab hover */ +.tabbrowser-tab:hover > .tab-stack > .tab-background[selected=true]:not(:-moz-window-inactive) { + background-color: var(--gnome-tabbar-tab-active-hover-background) !important; +} +.tabbrowser-tab:hover > .tab-stack > .tab-background:not([selected=true]), +#TabsToolbar[brighttext] > #tabbrowser-tabs > .tabbrowser-tab:hover > .tab-stack > .tab-background:not([selected=true]), +#TabsToolbar[brighttext] > #tabbrowser-tabs > .tabbrowser-tab:hover > .tab-stack > .tab-background > .tab-line:not([selected=true]) { + background-color: transparent !important; +} +.tabbrowser-tab:hover > .tab-stack > .tab-background:not([selected=true]) { + background-color: var(--gnome-tabbar-tab-hover-background) !important; + border-image: none !important; +} +:root:-moz-window-inactive .tabbrowser-tab:hover > .tab-stack > .tab-background:not([selected=true]) { + background-color: var(--gnome-inactive-tabbar-tab-hover-background) !important; +} + +/* Full width tabs */ +.tabbrowser-tab:not([style^="max-width"]):not([pinned]), +.tabbrowser-tab[style^="max-width: 100px !important;"]:not([pinned]) { + max-width: 100% !important; + --tab-min-width: 131px !important; +} +.tabbrowser-tab:not([style^="max-width"]):not([pinned]):not([fadein]), +.tabbrowser-tab[style^="max-width: 100px !important;"]:not([pinned]):not([fadein]) { + max-width: .1px !important; +} + +/* Remove blank spaces on tabs start and end */ +#TabsToolbar .titlebar-spacer { + display: none !important; +} + +/* Remove container bottom line indicator */ +.tabbrowser-tab[usercontextid] > .tab-stack > .tab-background > .tab-context-line { + display: none; +} + +/* Create new container tab indicator */ +.tabbrowser-tab[class*="identity-color-"] .tab-label-container { + color: var(--identity-tab-color) !important; +} + +/* Needs attetion tab indicator */ +.tabbrowser-tab:is([image], [pinned]) > .tab-stack > .tab-content[attention]:not([selected="true"]), +.tabbrowser-tab > .tab-stack > .tab-content[pinned][titlechanged]:not([selected="true"]) { + background-image: radial-gradient(var(--gnome-tabbar-tab-needs-attetion), var(--gnome-tabbar-tab-needs-attetion) 10px) !important; + background-position: center bottom !important; + background-size: 14px 2px !important; +} + +/* Tab spinner */ +.tab-throbber::before { + animation: gnome-spinner 1s linear infinite !important; + background-image: url("../icons/process-working-symbolic.svg") !important; + width: 16px !important; + opacity: 1 !important; +} +@keyframes gnome-spinner { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +/* Tabs manager menu */ +#alltabs-button { + visibility: collapse; +} +#tabbrowser-tabs[overflow="true"] ~ #alltabs-button { + visibility: visible; +} + +/* Firefox View */ +#TabsToolbar #firefox-view-button .toolbarbutton-icon { + box-shadow: none !important; + fill: var(--gnome-toolbar-icon-fill) !important; + height: 16px !important; + opacity: 1 !important; + width: 16px !important; +} +:root:not([privatebrowsingmode="temporary"]):not([firefoxviewhidden]) :is(#firefox-view-button, #wrapper-firefox-view-button) + #tabbrowser-tabs { + border-inline-start: 0 !important; + padding-inline-start: var(--tab-overflow-pinned-tabs-width) !important; + margin-inline-start: 0 !important; +} + +/* OPTIONAL: Hide single tab */ +@supports -moz-bool-pref("gnomeTheme.hideSingleTab") { + #tabbrowser-tabs tab:only-of-type, + #tabbrowser-tabs tab:only-of-type ~ toolbarbutton, + #tabbrowser-tabs tab:only-of-type ~ #tabbrowser-arrowscrollbox-periphery { + visibility: collapse; + } +} + +/* OPTIONAL: Use normal width tabs */ +@supports -moz-bool-pref("gnomeTheme.normalWidthTabs") { + .tabbrowser-tab:not([style^="max-width"]):not([pinned]), + .tabbrowser-tab[style^="max-width: 100px !important;"]:not([pinned]) { + max-width: 225px !important; + --tab-min-width: inherit !important; + } +} + +/* OPTIONAL: Add more contrast to the active tab */ +@supports -moz-bool-pref("gnomeTheme.activeTabContrast") { + .tab-background[selected=true]:not(#hack), + :root:not(:-moz-window-inactive) .tabbrowser-tab:hover > .tab-stack > .tab-background:not(#hack) { + background: var(--gnome-tabbar-tab-active-background-contrast) !important; + } + .tabbrowser-tab:not([pinned])[selected="true"] .tab-content::before, + :root:not(:-moz-window-inactive) .tabbrowser-tab:hover .tab-content::before { + --gnome-tabbar-tab-close-overlay-bg: var(--gnome-tabbar-tab-active-background-contrast) !important; + } +} + +/* OPTIONAL: Show the close button on the selected tab only */ +@supports -moz-bool-pref("gnomeTheme.closeOnlySelectedTabs") { + /* Hide the close buttons on hover */ + .tabbrowser-tab:not([selected="true"]):hover .tab-close-button { + visibility: hidden !important; + opacity: 0 !important; + } + /* Hide the close button overlay on hover */ + .tabbrowser-tab:not([pinned]):hover .tab-content::before { + --gnome-tabbar-tab-close-overlay-bg: unset; + } + /* Reset the overflow position of the tab label container */ + .tabbrowser-tab:not([pinned]):not([selected="true"]):hover .tab-label-container[textoverflow="true"] { + margin-right: -16px; + } +} + +/* OPTIONAL: Use tabs as headerbar */ +@supports -moz-bool-pref("gnomeTheme.tabsAsHeaderbar") { + /* Rearrange bars */ + #navigator-toolbox #titlebar { + -moz-box-ordinal-group: 0; + } + #navigator-toolbox #titlebar #TabsToolbar { + -moz-box-ordinal-group: 0; + } + #navigator-toolbox #titlebar #toolbar-menubar { + -moz-box-ordinal-group: 1; + } + #navigator-toolbox #nav-bar { + -moz-box-ordinal-group: 1; + } + #navigator-toolbox #PersonalToolbar { + -moz-box-ordinal-group: 2; + } + + /* Remove nav-bar rounding and padding */ + :root[tabsintitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) #nav-bar { + border-radius: 0 !important; + } + :root[tabsintitlebar]:not([inFullscreen]) #nav-bar, + :root[tabsintitlebar][inFullscreen] #nav-bar { + padding-left: 3px !important; + padding-right: 3px !important; + } + + /* Round and pad tab-bar */ + :root[tabsintitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) #TabsToolbar { + border-radius: env(-moz-gtk-csd-titlebar-radius) env(-moz-gtk-csd-titlebar-radius) 0 0 !important + } + :root[tabsintitlebar] #TabsToolbar .toolbar-items { + padding: 0 46px; + } + + /* Hide duplicate window controls from menubar */ + :root[tabsintitlebar] #toolbar-menubar .titlebar-buttonbox-container { + display: none !important; + } + + /* Force displaying controls in tab-bar */ + :root[tabsintitlebar] #TabsToolbar .titlebar-buttonbox-container:not(#hack) { + display: -moz-box !important; + position: static !important; + visibility: visible !important; + } + + /* Blend single tab into whole bar */ + @supports -moz-bool-pref("gnomeTheme.hideSingleTab") { + #tabbrowser-tabs tab[first-visible-tab="true"][last-visible-tab="true"]:not([pinned]), + #tabbrowser-tabs tab[first-visible-tab="true"][last-visible-tab="true"]:not([pinned]) ~ toolbarbutton, + #tabbrowser-tabs tab[first-visible-tab="true"][last-visible-tab="true"]:not([pinned]) ~ #tabbrowser-arrowscrollbox-periphery { + visibility: visible; + } + #tabbrowser-tabs tab[first-visible-tab="true"][last-visible-tab="true"]:not([pinned]) { + -moz-window-dragging: drag; + } + #tabbrowser-tabs tab[first-visible-tab="true"][last-visible-tab="true"]:not([pinned]) .tab-background { + display: none !important + } + #tabbrowser-tabs tab[first-visible-tab="true"][last-visible-tab="true"]:not([pinned]) .tab-close-button { + visibility: hidden !important; + opacity: 0 !important; + } + #tabbrowser-tabs tab[first-visible-tab="true"][last-visible-tab="true"]:not([pinned]) .tab-content::before { + --gnome-tabbar-tab-close-overlay-bg: unset !important; + } + #tabbrowser-tabs tab[first-visible-tab="true"][last-visible-tab="true"]:not([pinned]) .tab-labelk-container[textoverflow="true"] { + margin-right: -16px; + } + /* Override normal width tabs */ + @supports -moz-bool-pref("gnomeTheme.normalWidthTabs") { + #tabbrowser-tabs tab[first-visible-tab="true"][last-visible-tab="true"]:not([pinned]):not([style^="max-width"]), + #tabbrowser-tabs tab[first-visible-tab="true"][last-visible-tab="true"][style^="max-width: 100px !important;"]:not([pinned]) { + max-width: 100% !important; + --tab-min-width: 131px !important; + } + } + } +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/toolbox.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/toolbox.css new file mode 100755 index 000000000..b09a1c1f9 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/toolbox.css @@ -0,0 +1,160 @@ +/* Toolbox, a container for all toolbars (toolbox#navigator-toolbox): + * - menu bar (toolbar#toolbar-menubar) + * - tab bar (toolbar#TabsToolbar) + * - header bar (toolbar#nav-bar) + * - bookmark bar (toolbar#PersonalToolbar) + * - add-ons can add their own toolbars (toolbar) */ + +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +/* Toolbox colors */ +#navigator-toolbox { + border: 0 !important; + background: none !important; +} + +#nav-bar, #PersonalToolbar, #toolbar-menubar, #TabsToolbar, findbar { + appearance: none !important; + border: 0 !important; + background: var(--gnome-toolbar-background) !important; +} +#nav-bar, #PersonalToolbar, #toolbar-menubar:not([inactive=true]), #TabsToolbar { + border-bottom: 1px solid var(--gnome-toolbar-border-color) !important; +} +findbar { + border-top: 1px solid var(--gnome-toolbar-border-color) !important; +} +#nav-bar:-moz-window-inactive, +#PersonalToolbar:-moz-window-inactive, +#toolbar-menubar:-moz-window-inactive, +#TabsToolbar:-moz-window-inactive, +findbar:-moz-window-inactive, +.container.infobar:-moz-window-inactive { + background: var(--gnome-inactive-toolbar-background) !important; + border-color: var(--gnome-inactive-toolbar-border-color) !important; +} + +#navigator-toolbox:-moz-window-inactive label, +#downloads-indicator-anchor:-moz-window-inactive, +findbar:-moz-window-inactive image:not(#hack), +findbar:-moz-window-inactive label, +findbar:-moz-window-inactive description, +#viewButton:-moz-window-inactive dropmarker, +.container.infobar:-moz-window-inactive { + opacity: 0.7 !important; +} + +#toolbar-menubar:not([inactive=true]) { + margin-bottom: 0 !important; +} +#PersonalToolbar { + padding: 2px !important; +} + +/* Overrides: Remove border below the menu bar / above the header bar */ +#TabsToolbar:not([collapsed="true"]) + #nav-bar { + border-top-width: 0 !important; +} +#navigator-toolbox::after { + border-bottom-width: 0 !important; +} + +/* Reorder toolbars */ +#navigator-toolbox #nav-bar { + -moz-box-ordinal-group: 0; +} +#navigator-toolbox #PersonalToolbar { + -moz-box-ordinal-group: 0; +} +#navigator-toolbox #titlebar { + -moz-box-ordinal-group: 1; +} +#navigator-toolbox toolbar { + -moz-box-ordinal-group: 10; +} +#navigator-toolbox #TabsToolbar { + -moz-box-ordinal-group: 100; +} + +/* Overrides: Don't shift other toolbars on tab drag and drop */ +#TabsToolbar[movingtab] { + padding-bottom: 0 !important; +} +#TabsToolbar[movingtab] > .tabbrowser-tabs { + padding-bottom: 0 !important; + margin-bottom: 0 !important; +} +#TabsToolbar[movingtab] + #nav-bar { + margin-top: 0 !important; +} + +/* Content notifications */ +.notificationbox-stack notification-message { + border: 0 !important; + font-size: 1em !important; + padding: 0 !important; + border-radius: 0 !important; + margin: 0 !important; +} +.notificationbox-stack notification-message[style*="margin-top"] { + margin-top: -48px !important; +} + +.container.infobar { + background: var(--gnome-toolbar-background) !important; + box-shadow: none !important; + padding: 6px !important; + border-radius: 0 !important; +} +.container.infobar::before { + display: none !important; +} + +.container.infobar .icon { + height: 16px !important; + width: 16px !important; +} +.notificationbox-stack notification-message[type="warning"] { + background: #ffe900 !important; +} +.notificationbox-stack notification-message[type="critical"] { + background: #d70022 !important; +} + +.notificationbox-stack[notificationside="top"] notification-message { + border-bottom: 1px solid var(--gnome-toolbar-border-color) !important; +} +.notificationbox-stack[notificationside="bottom"] notification-message { + border-top: 1px solid var(--gnome-toolbar-border-color) !important; +} + +/* Bookmarks */ +#PlacesToolbar toolbarseparator { + border-top: 0 !important; +} +#PlacesToolbarItems > toolbarseparator::before { + border-image-source: none !important; + border-color: var(--gnome-tabbar-tab-separator-color) !important; +} + +/* Text link */ +.text-link { + color: var(--gnome-accent) !important; +} + +/* OPTIONAL: Hide WebRTC indicator */ +@supports -moz-bool-pref("gnomeTheme.hideWebrtcIndicator") { + #webrtcIndicator { + display: none; + } +} + +/* OPTIONAL: Move Bookmarks toolbar under tabs */ +@supports -moz-bool-pref("gnomeTheme.bookmarksToolbarUnderTabs") { + #navigator-toolbox #titlebar { + -moz-box-ordinal-group: 1 !important; + } + #navigator-toolbox #PersonalToolbar { + -moz-box-ordinal-group: 2 !important; + } +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/urlbar.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/urlbar.css new file mode 100755 index 000000000..4fed219b9 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/urlbar.css @@ -0,0 +1,196 @@ +/* Header bar's URL bar */ + +@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + +#urlbar { + --urlbar-height: 34.00px; + --urlbar-toolbar-height: 34.00px !important; +} + +#urlbar-container { + --urlbar-container-height: 0 !important; +} + +/* Center the URL bar */ +toolbarspring { + max-width: 10000px !important; +} + +/* URL bar */ +#urlbar { + box-shadow: none !important; +} +#urlbar-background { + box-shadow: var(--gnome-entry-box-shadow) !important; + border: 0 !important; + border-radius: 8px !important; + background: transparent !important; +} + +#urlbar[breakout][breakout-extend] { + left: 0 !important; + top: 0 !important; + width: 100% !important; + z-index: 5 !important; +} + +#urlbar #urlbar-input-container { + padding: 0 !important; +} + +/* URL bar results */ +.urlbarView { + background: transparent !important; + color: var(--gnome-toolbar-color) !important; + margin: 11px 0 0 -3px !important; + width: 100% !important; + position: absolute !important; + box-shadow: var(--gnome-menu-shadow) !important; + border-radius: 12px !important; +} + +/* Search bar result */ +#PopupSearchAutoComplete { + margin-top: 7px !important; +} + +.urlbarView-body-outer { + --item-padding-start: 0 !important; + --item-padding-end: 0 !important; + background: var(--gnome-menu-background) !important; + overflow-x: auto; + padding: 2px 6px !important; + border-radius: 8px 8px 0 0 !important; +} + +.urlbarView-body-inner { + border: 0 !important; +} + +.urlbarView-row-inner, .urlbarView-no-wrap { + align-items: center !important; +} +.urlbarView-row-inner { + padding-block: 5px !important; + border-radius: 5px !important; +} + +.urlbarView-row[selected] .urlbarView-row-inner { + background: var(--gnome-accent-bg) !important; + color: white !important; +} +.urlbarView-row:not([selected]):hover .urlbarView-row-inner { + background: var(--gnome-menu-button-hover-background) !important; +} + +.urlbarView-action { + background: transparent !important; +} + +/* Fix items overflow */ +.urlbarView[actionoverride] .urlbarView-row[has-url] > .urlbarView-row-inner > .urlbarView-no-wrap, +.urlbarView-row[has-url]:not([type$="tab"]) > .urlbarView-row-inner > .urlbarView-no-wrap, .urlbarView-row[has-url]:is([type="remotetab"], +[sponsored]):is(:hover, [selected]) > .urlbarView-row-inner > .urlbarView-no-wrap { + max-width: calc(96% - 2 * (var(--urlbarView-favicon-width) + (6px + 2px))) !important; +} + +/* Search engines buttons */ +.search-one-offs { + padding: 8px !important; + background: var(--gnome-menu-background) !important; + border-top: 1px solid var(--gnome-menu-separator-color) !important; + border-radius: 0 0 8px 8px !important; +} + +.search-one-offs[is_searchbar="true"] { + margin-bottom: -8px !important; +} + +/* URL bar and Search bar */ +#urlbar[focused] .urlbar-textbox-container { + margin: -1px !important; +} +#searchbar > .searchbar-textbox[focused] .searchbar-search-button { + margin-left: -1px !important; +} +#searchbar > .searchbar-textbox[focused] .search-go-button { + margin-right: -1px !important; +} + +/* URL bar and Search bar's icons */ +.urlbar-icon:hover, +.urlbar-icon-wrapper:hover, +.urlbar-icon[open], +.urlbar-icon-wrapper[open], +.urlbar-icon:hover:active, +.urlbar-icon-wrapper:hover:active, +.searchbar-search-button:hover .searchbar-search-icon, +.searchbar-search-button[open] .searchbar-search-icon, +.searchbar-search-button:hover:active .searchbar-search-icon { + background-color: transparent !important; + fill-opacity: 1 !important; +} + +#urlbar .urlbar-icon { + margin: 0 !important; + height: 100% !important; +} +#notification-popup-box { + height: 100% !important; +} + +/* Search mode indicator */ +#urlbar-search-mode-indicator, +#urlbar-label-box, +#urlbar-zoom-button { + background: var(--gnome-button-background) !important; + border: 0 !important; + border-radius: 26px !important; + outline: 0 !important; + margin: 4px 0; +} +#urlbar-search-mode-indicator { + padding-right: 0 !important; +} +#urlbar-search-mode-indicator-title { + color: var(--gnome-toolbar-color); + padding-inline: 4px !important; +} +#urlbar-search-mode-indicator-close { + background-size: 16px !important; + background-position: center; + border-radius: 26px !important; + padding: 5px !important; +} +#urlbar-search-mode-indicator-close:hover { + background-color: var(--gnome-button-hover-background) !important; +} +#urlbar-zoom-button { + opacity: 0.8; +} +#urlbar-zoom-button:hover { + opacity: 1; +} + +/* Firefox identity box */ +#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button, +#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button, +#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button, +#urlbar-label-box { + background-color: transparent !important; +} + +#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button:hover:not([open]), +#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button:hover:not([open]), +#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button:hover:not([open]) { + background-color: hsla(0,0%,70%,.2) !important; +} + +#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button:hover:active, +#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button[open=true], +#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button:hover:active, +#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button[open=true], +#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button:hover:active, +#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button[open=true] { + background-color: hsla(0,0%,70%,.3) !important; +} diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/video-player.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/video-player.css new file mode 100755 index 000000000..bc8a6a033 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/parts/video-player.css @@ -0,0 +1,75 @@ +@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); +@namespace html url("http://www.w3.org/1999/xhtml"); + +/** Video player **/ + +.progressBar::-moz-progress-bar { + background-color: #fff !important; +} + +.scrubber:hover::-moz-range-thumb, +.volumeControl:hover::-moz-range-thumb { + background-color: #ccc !important; +} + +.scrubber:active::-moz-range-thumb, +.volumeControl:active::-moz-range-thumb { + background-color: #bbb !important; +} + +.controlBar { + border-radius: 5px; + margin: auto; + margin-bottom: 5px; + width: 98.5%; + max-width: 800px; + height: 30px !important; + background-color: rgba(20,20,20,0.8) !important; +} + +.controlBar > .button:enabled:hover { + fill: #ccc !important; +} + +.controlBar > .button:enabled:hover:active { + fill: #bbb !important; +} + +.scrubberStack { + margin: 0 10px; +} + +.playButton { + scale: 0.8; +} + + + +/** Vertical Volume Bar **/ +/* I'm to stupid to get this working. Wasn't able to set proper position relative to mute button */ + +/* .muteButton:hover ~ .volumeStack{ + margin-bottom: 129px !important; + } + .volumeStack:hover { + margin-bottom: 129px !important; + } + + .volumeStack { + transform: rotate(270deg); + max-height: 33px !important; + min-width: 100px !important; + position:absolute !important; + margin-bottom: -150px !important; + background-color: rgba(20,20,20,0.8) !important; + border-bottom-right-radius: 5px !important; + border-top-right-radius: 5px !important; + transition-property: margin-bottom; + transition-duration: 0.13s; + transition-timing-function: linear; + } + + .volumeControl{ + width: 92% !important; + margin-left: 5px !important; +} */ diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/symbolic-tab-icons.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/symbolic-tab-icons.css new file mode 100755 index 000000000..a40985723 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/symbolic-tab-icons.css @@ -0,0 +1,19 @@ +@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +/* Icons light/dark fix coloring hack filters */ +:root { + --gnome-convert-icon-to-symbolic-hack-filter: invert(100%) sepia(100%) grayscale(100%) brightness(200%) brightness(85%) invert(100%); +} +@media (prefers-color-scheme: dark) { + :root { + --gnome-convert-icon-to-symbolic-hack-filter: invert(100%) sepia(100%) grayscale(100%) brightness(200%) brightness(85%); + } +} + +/* OPTIONAL: Make all tab icons look kinda like symbolic icons */ +@supports -moz-bool-pref("gnomeTheme.symbolicTabIcons") { + tab .tab-icon-image { + filter: var(--gnome-convert-icon-to-symbolic-hack-filter); + } +} + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/theme/system-icons.css b/m3ww/Import Manually/firefox userchrome/chrome/theme/system-icons.css new file mode 100755 index 000000000..43176ee99 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/theme/system-icons.css @@ -0,0 +1,221 @@ +@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +/* Icons light/dark fix coloring hack filters */ +:root { + --gnome-icons-hack-filter: filter: brightness(0) saturate(100%) invert(37%) sepia(8%) saturate(683%) hue-rotate(183deg) brightness(95%) contrast(84%); + --gnome-window-icons-hack-filter: filter: brightness(0) saturate(100%) invert(37%) sepia(8%) saturate(683%) hue-rotate(183deg) brightness(95%) contrast(84%); +} +@media (prefers-color-scheme: dark) { + :root { + --gnome-icons-hack-filter: brightness(0) saturate(100%) invert(94%) sepia(11%) saturate(362%) hue-rotate(184deg) brightness(95%) contrast(87%); + --gnome-window-icons-hack-filter: brightness(0) saturate(100%) invert(94%) sepia(11%) saturate(362%) hue-rotate(184deg) brightness(95%) contrast(87%); + } +} + +/* OPTIONAL: Use system theme icons instead of Adwaita icons included by theme */ +@supports -moz-bool-pref("gnomeTheme.systemIcons") { + + /* Window buttons */ + :root[tabsintitlebar] #titlebar .titlebar-button .toolbarbutton-icon, + :root[tabsintitlebar][inFullscreen] #window-controls toolbarbutton .toolbarbutton-icon { + filter: var(--gnome-window-icons-hack-filter) !important; + width: 16px; + } + :root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-close .toolbarbutton-icon, + :root[tabsintitlebar] #titlebar #titlebar-close .toolbarbutton-icon { + list-style-image: url("moz-icon://stock/window-close-symbolic?size=dialog") !important; + } + :root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-max .toolbarbutton-icon, + :root[tabsintitlebar] #titlebar #titlebar-max .toolbarbutton-icon { + list-style-image: url("moz-icon://stock/window-maximize-symbolic?size=dialog") !important; + } + :root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-restore .toolbarbutton-icon { + list-style-image: url("moz-icon://stock/window-restore-symbolic?size=dialog") !important; + } + :root[tabsintitlebar] #titlebar .titlebar-buttonbox .titlebar-min .toolbarbutton-icon, + :root[tabsintitlebar] #titlebar #titlebar-min .toolbarbutton-icon { + list-style-image: url("moz-icon://stock/window-minimize-symbolic?size=dialog") !important; + } + :root[tabsintitlebar][inFullscreen] #window-controls #restore-button .toolbarbutton-icon { + list-style-image: url("moz-icon://stock/view-restore-symbolic?size=dialog") !important; + } + + /* Toolbars close button */ + .close-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/window-close-symbolic?size=dialog") !important; + } + + /* Navbar icons */ + + /* Back button */ + #nav-bar #back-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/go-previous-symbolic?size=dialog") !important; + } + /* Forward button */ + #nav-bar #forward-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/go-next-symbolic?size=dialog") !important; + } + /* Menu button */ + #PanelUI-menu-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/open-menu-symbolic?size=dialog") !important; + } + /* New tab button */ + #new-tab-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/tab-new-symbolic?size=dialog") !important; + } + /* Home button */ + #home-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/user-home-symbolic?size=dialog") !important; + } + /* Preferences button */ + #preferences-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/preferences-system-symbolic?size=dialog") !important; + } + /* Fullscreen button */ + #fullscreen-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/view-fullscreen-symbolic?size=dialog") !important; + } + /* Zoom out button */ + #zoom-out-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/zoom-out-symbolic?size=dialog") !important; + } + /* Zoom in button */ + #zoom-in-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/zoom-in-symbolic?size=dialog") !important; + } + /* Developer button */ + #developer-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/applications-engineering-symbolic?size=dialog") !important; + } + /* Email link button */ + #email-link-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/mail-unread-symbolic?size=dialog") !important; + } + /* Print button */ + #print-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/printer-symbolic?size=dialog") !important; + } + /* Addons button */ + #add-ons-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/application-x-addon-symbolic?size=dialog") !important; + } + /* Find button */ + #find-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/edit-find-symbolic?size=dialog") !important; + } + /* New window button */ + #new-window-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/window-new-symbolic?size=dialog") !important; + } + /* Bookmarks menu button */ + #bookmarks-menu-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/starred-symbolic?size=dialog") !important; + } + /* History button */ + #history-panelmenu .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/preferences-system-time-symbolic?size=dialog") !important; + } + /* All tabs button */ + #alltabs-button { + list-style-image: url("moz-icon://stock/pan-down-symbolic?size=dialog") !important; + } + #alltabs-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + } + /* Cut button */ + #cut-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/edit-cut-symbolic?size=dialog") !important; + } + /* Copy button */ + #copy-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/edit-copy-symbolic?size=dialog") !important; + } + /* Paste button */ + #paste-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/edit-paste-symbolic?size=dialog") !important; + } + + /* Reload */ + #reload-button, + #context-reload .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/view-refresh-symbolic?size=dialog") !important; + } + /* Stop */ + #stop-button, + #context-stop .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/process-stop-symbolic?size=dialog") !important; + } + /* Downlaod */ + #downloads-button, + #downloads-indicator-icon .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/folder-download-symbolic?size=dialog") !important; + } + + /* Navbar overflow button */ + #nav-bar-overflow-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/pan-down-symbolic?size=dialog") !important; + } + + /* Context back button */ + #context-back .menu-iconic-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/go-previous-symbolic?size=dialog") !important; + } + /* Context forward button */ + #context-forward .menu-iconic-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/go-next-symbolic?size=dialog") !important; + } + + /* Main menu buttons icons */ + #appMenu-zoomReduce-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/zoom-out-symbolic?size=dialog") !important; + } + #appMenu-zoomEnlarge-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/zoom-in-symbolic?size=dialog") !important; + } + #appMenu-fullscreen-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/view-fullscreen-symbolic?size=dialog") !important; + } + #appMenu-cut-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/edit-cut-symbolic?size=dialog") !important; + } + #appMenu-copy-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/edit-copy-symbolic?size=dialog") !important; + } + #appMenu-paste-button .toolbarbutton-icon { + filter: var(--gnome-icons-hack-filter); + list-style-image: url("moz-icon://stock/edit-paste-symbolic?size=dialog") !important; + } +} + diff --git a/m3ww/Import Manually/firefox userchrome/chrome/userChrome.css b/m3ww/Import Manually/firefox userchrome/chrome/userChrome.css new file mode 100755 index 000000000..c8a72eef6 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/userChrome.css @@ -0,0 +1,9 @@ + +/* Import theme */ +@import "theme/gnome-theme.css"; + +/* Import a custom stylesheet + * Everything you add in your customChrome.css file (it doesn't exist by + * default) will be included here and preserved between updates. + * You can apply your own custom styles in that file. */ +@import "customChrome.css"; /**/ diff --git a/m3ww/Import Manually/firefox userchrome/chrome/userContent.css b/m3ww/Import Manually/firefox userchrome/chrome/userContent.css new file mode 100755 index 000000000..18fe21c80 --- /dev/null +++ b/m3ww/Import Manually/firefox userchrome/chrome/userContent.css @@ -0,0 +1,7 @@ +@import "theme/colors/light.css"; +@import "theme/colors/dark.css"; + +@import "theme/pages/newtab.css"; +@import "theme/pages/privatebrowsing.css"; + +@import "theme/parts/video-player.css"; diff --git a/m3ww/Import Manually/gnome-text-editor themes (Paste to root)/usr/share/gnome-text-editor/styles/catppuccin-frappe.xml b/m3ww/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/m3ww/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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +