├── README.md ├── eww ├── eww.scss ├── eww.yuck ├── favicon.ico ├── images │ ├── mic.png │ ├── music.png │ ├── profile.png │ └── speaker.png ├── launch_bar ├── notifications.yuck ├── scripts │ ├── appname │ ├── battery │ ├── gpu │ ├── mem-ad │ ├── memory │ ├── music │ ├── music_info │ ├── notifications │ ├── sbvol │ ├── weather │ ├── wifi │ ├── workspace │ └── workspace_bak ├── sidebar.yuck └── system-menu.yuck ├── foot └── foot.ini ├── rofi ├── global │ ├── .gitignore │ ├── icons │ │ ├── ddg.svg │ │ ├── google.svg │ │ ├── history.svg │ │ ├── result.svg │ │ └── suggestion.svg │ ├── rofi-spotlight.sh │ ├── rofi.rasi │ └── web-search.py ├── launcher.rasi ├── list_launcher.rasi ├── powermenu.rasi ├── powermenu.sh └── touch_launcher.rasi ├── scripts ├── default_app ├── flicker ├── swwwpaper ├── wallpaper └── workspace ├── theme.conf ├── theme.toml └── wallpaper ├── 00004-100_k_lms_3028550916_0.00.jpg ├── 00010-100_k_lms_933122385_0.00.jpg ├── 00012-250_k_lms_1468565384_0.00.jpg ├── 101-result.jpg ├── 102-result.jpg ├── 103-result.jpg ├── 104-result.jpg ├── 105-result.jpg ├── 106-result.jpg ├── 107-result.jpg ├── 108-result.jpg ├── 109-result.jpg ├── 11-result.jpg ├── 110-result.jpg ├── 111-result.jpg ├── 112-result.jpg ├── 113-result.jpg ├── 114-result.jpg ├── 115-result.jpg ├── 116-result.jpg ├── 117-result.jpg ├── 118-result.jpg ├── 119-result.jpg ├── 13-result.jpg ├── 14-result.jpg ├── 22-result.jpg ├── 23-result_Composite.jpg ├── 26-result.jpg ├── 28-result.jpg ├── 29-result.jpg ├── 3-result.jpg ├── 30-result.jpg ├── 32-result.jpg ├── 34-result.jpg ├── 35-result.jpg ├── 40-result.jpg ├── 6-result.jpg ├── 8-result.jpg ├── 9-result.jpg ├── laser_neon_barrier_4k.jpg └── snow.jpg /README.md: -------------------------------------------------------------------------------- 1 | # cyber-hyprland-theme 2 | 3 | ## Screenshot 4 | 5 | ![20221201124048_1](https://user-images.githubusercontent.com/36456160/205144772-bc832650-15e6-4304-9c65-fe7ce7f73e83.png) 6 | 7 | 8 | ## Installation 9 | For complete system config, please see https://github.com/taylor85345/hyprland-dotfiles 10 | 11 | 1. Install Hyprland and all Dependencies 12 | 2. `mkdir ~/.config/hypr/themes` 13 | 3. `cd ~/.config/hypr/themes` 14 | 4. `git clone https://github.com/taylor85345/cyber-hyprland-theme cyber` 15 | 5. Add `source=~/.config/hypr/themes/cyber/theme.conf` to the end of your hyprland.conf 16 | 17 | ## Dependencies 18 | 19 | - [hyprland-git](https://github.com/hyprwm/hyprland) - Wayland Compositor/WM 20 | - [eww](https://github.com/elkowar/eww) - Bar and Widgets 21 | - [nerd-fonts-mononoki](https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/Mononoki) - Font for bar text and icons 22 | - [nerd-fonts-jetbrains-mono](https://github.com/ryanoasis/nerd-fonts/blob/master/patched-fonts/JetBrainsMono/) - Font for bar text and icons 23 | - [rofi-wayland](https://github.com/lbonn/rofi) - For search utility, since no Wayland utilities can handle custom Rofi modi (that I know of) 24 | - [dunst](https://github.com/dunst-project/dunst) - Notification Daemon 25 | - [trayer](https://github.com/sargon/trayer-srg) - Systray Utility 26 | - [swww](https://github.com/GhostNaN/mpvpaper) - Wallpaper Daemon 27 | - [macchina](https://github.com/Macchina-CLI/macchina) - (Optional) Fetch Script 28 | - [socat](http://www.dest-unreach.org/socat/) - Socket utility for eww workspace module 29 | - [geticons](https://git.sr.ht/~zethra/geticons) - CLI tool for locating icons 30 | -------------------------------------------------------------------------------- /eww/eww.scss: -------------------------------------------------------------------------------- 1 | /** EWW.SCSS 2 | Created by saimoom **/ 3 | *{ 4 | all: unset; 5 | font-family: feather; 6 | font-family: Inter Nerd Font; 7 | } 8 | 9 | $background: rgba(00, 00, 00, 0.3); 10 | $widget-background: rgba(30, 30, 30, 0.4); 11 | $shadow: rgba(00, 00, 00, 0.4); 12 | $grey: #606060; 13 | 14 | $black: #282A36; 15 | $red: #F37F97; 16 | $green: #5ADECD; 17 | $orange: #F2A272; 18 | $blue: #8897F4; 19 | $purple: #C574DD; 20 | $teal: #79E6F3; 21 | $white: #FDFDFD; 22 | 23 | /** General **/ 24 | .bar_class { 25 | background-color: $shadow; 26 | border-radius: 0px 0px 20px 20px; 27 | margin: 0px 0px 0px 0px; 28 | } 29 | .module { 30 | margin: 0px 0px 0px 0px; 31 | border-radius: 10px 10px 0px 10px; 32 | } 33 | 34 | .rightside{ 35 | background-color: $background; 36 | border-width: 0px; 37 | border-radius: 20px 0px 0px 20px; 38 | padding: 0px 30px 0px 30px; 39 | } 40 | 41 | .leftside{ 42 | background-color: $background; 43 | border-width: 0px; 44 | border-radius: 0px 20px 20px 0px; 45 | padding: 0px 30px 0px 30px; 46 | } 47 | 48 | .center_modules { 49 | margin: 0px 0px 0px 0px; 50 | border-radius: 0px 0px 0px 0px; 51 | } 52 | 53 | /** tooltip!! **/ 54 | tooltip.background { 55 | background-color: $background; 56 | font-size: 18; 57 | border-radius: 10px; 58 | color: $white; 59 | } 60 | 61 | tooltip label { 62 | margin: 6px; 63 | } 64 | 65 | 66 | /** Widgets **/ 67 | 68 | .clock_time_class, .clock_minute_class { 69 | font-size: 28; 70 | } 71 | .clock_date_class { 72 | font-size: 24; 73 | margin: 0px 20px 0px -1px; 74 | color: $red; 75 | } 76 | .clock_time_class { 77 | color: $white; 78 | font-weight: bold; 79 | margin: 0px 20px 0px 5px; 80 | } 81 | 82 | .notif_button { 83 | font-size: 28; 84 | margin: 0px 20px 0px 0px; 85 | color: $white; 86 | } 87 | 88 | .membar { 89 | color: $orange; 90 | background-color: $widget-background; 91 | border-radius: 10px; 92 | } 93 | .batbar { 94 | color: $purple; 95 | background-color: $widget-background; 96 | border-radius: 10px; 97 | } 98 | .brightbar trough highlight { 99 | background-image: linear-gradient(to right, $orange 30%, #f2cdcd 50%, $orange 100% *50); 100 | border-radius: 10px; 101 | } 102 | .volbar trough highlight { 103 | background-image: linear-gradient(to right, #afcee0 30%, #92B6F4 50%, #77a5bf 100% *50); 104 | border-radius: 10px; 105 | } 106 | .volume_icon { 107 | font-size: 22; 108 | color: $blue; 109 | margin: 0px 10px 0px 10px; 110 | } 111 | 112 | 113 | .module_essid { 114 | font-size: 18; 115 | color: $blue; 116 | margin: 0px 10px 0px 0px; 117 | } 118 | .module-wif { 119 | font-size: 22; 120 | color: $blue; 121 | margin: 0px 14px 0px 5px; 122 | } 123 | 124 | .iconlauncher { 125 | color: $white; 126 | font-size: 36px; 127 | margin: 0px 10px 0px 15px; 128 | } 129 | .iconsearch { 130 | color: $white; 131 | font-size: 24px; 132 | } 133 | .iconmem { 134 | color: $orange; 135 | } 136 | .iconbat { 137 | color: $purple; 138 | } 139 | .iconbat, .iconmem { 140 | font-size: 15; 141 | margin: 15px; 142 | } 143 | .bright_icon { 144 | font-size: 22; 145 | color: $orange; 146 | margin: 0px 10px 0px 10px; 147 | } 148 | 149 | 150 | .separ { 151 | color: $grey; 152 | font-weight: bold; 153 | font-size: 32px; 154 | margin: 0px 8px 6px 8px; 155 | } 156 | 157 | .launcher_module { 158 | background-color: rgba(00, 00, 00, 0.0); 159 | } 160 | 161 | .mem_module { 162 | background-color: rgba(00, 00, 00, 0.0); 163 | border-radius: 16px; 164 | margin: 0px 10px 0px 3px; 165 | } 166 | .bat_module { 167 | background-color: rgba(00, 00, 00, 0.0); 168 | border-radius: 16px; 169 | margin: 0px 10px 0px 10px; 170 | } 171 | 172 | .works { 173 | font-size: 28px; 174 | font-weight: normal; 175 | margin: 12px 10px 0px 10px; 176 | background-color: rgba(00, 00, 00, 0.0); 177 | } 178 | 179 | .0 , .00, .01, .02, .03, .04, .05, .06, .07, .08, .09 180 | .000, .011, .022, .033, .044, .055, .066, .077, .088, .099 { 181 | margin: 0px 18px 0px 0px; 182 | } 183 | 184 | /* Unoccupied */ 185 | .0 { 186 | color: $grey; 187 | } 188 | 189 | /* Occupied */ 190 | .00, .01, .02, .03, .04, .05, .06, .07, .08, .09 { 191 | color: $white; 192 | } 193 | 194 | /* Focused */ 195 | .000, .011, .022, .033, .044, .055, .066, .077, .088, .099{ 196 | color: $purple; 197 | } 198 | 199 | 200 | // Calendar 201 | .cal { 202 | background-color: $background; 203 | font-family: mononoki Nerd Font; 204 | font-size: 18px; 205 | font-weight: normal; 206 | border-radius: 25px; 207 | 208 | .cal-in { 209 | padding: 10px 10px 10px 10px; 210 | color: $white; 211 | 212 | .cal { 213 | &.highlight { 214 | padding: 20px; 215 | } 216 | padding: 10px 10px 10px 10px; 217 | margin-left: 10px; 218 | } 219 | } 220 | } 221 | 222 | calender { 223 | color: $blue; 224 | } 225 | calendar:selected { 226 | color: $blue; 227 | } 228 | 229 | calendar.header { 230 | color: $blue; 231 | font-weight: bold; 232 | } 233 | 234 | calendar.button { 235 | color: $green; 236 | } 237 | 238 | calendar.highlight { 239 | color: $blue; 240 | font-weight: bold; 241 | } 242 | 243 | calendar:indeterminate { 244 | color: $black; 245 | } 246 | 247 | 248 | 249 | .sys_sep { 250 | color: $widget-background; 251 | font-size: 18; 252 | margin: 0px 10px 0px 10px; 253 | } 254 | .sys_text_bat_sub, .sys_text_mem_sub { 255 | font-size: 16; 256 | color: $white; 257 | margin: 5px 0px 0px 25px; 258 | } 259 | .sys_text_bat, .sys_text_mem { 260 | font-size: 21; 261 | font-weight: bold; 262 | margin: 14px 0px 0px 25px; 263 | } 264 | .sys_icon_bat, .sys_icon_mem { 265 | font-size: 30; 266 | margin: 30px; 267 | } 268 | .sys_win { 269 | background-color: $background; 270 | border-radius: 25px; 271 | } 272 | .sys_bat { 273 | color: $green; 274 | background-color: $widget-background; 275 | border-radius: 10px; 276 | } 277 | .sys_mem { 278 | color: $orange; 279 | background-color: $widget-background; 280 | border-radius: 10px; 281 | } 282 | .sys_icon_bat, .sys_text_bat { 283 | color: $green; 284 | } 285 | .sys_icon_mem, .sys_text_mem { 286 | color: $orange; 287 | } 288 | .sys_bat_box { 289 | border-radius: 16px; 290 | margin: 15px 10px 10px 20px; 291 | } 292 | .sys_mem_box { 293 | border-radius: 16px; 294 | margin: 10px 10px 15px 20px; 295 | } 296 | 297 | 298 | .app-name { 299 | color: $blue; 300 | font-size : 20px; 301 | font-weight : bold; 302 | margin : 10px 0px 0px 0px; 303 | } 304 | 305 | .app-icon { 306 | margin : 8px 5px 0px 0px; 307 | } 308 | 309 | .app-button { 310 | color: $blue; 311 | font-size : 30px; 312 | font-weight : bold; 313 | margin : 0px 15px 0px 15px; 314 | } 315 | 316 | .launcher-icon { 317 | margin : 5px 0px 10px 15px; 318 | } 319 | 320 | .audio-box { 321 | background-color: $background; 322 | border-radius: 16px; 323 | } 324 | .speaker_icon { 325 | background-size: cover; 326 | background-image: url('images/speaker.png'); 327 | background-position: center; 328 | min-height: 70px; 329 | min-width: 75px; 330 | margin: 10px 20px 5px 20px; 331 | border-radius: 12px; 332 | } 333 | 334 | .speaker_text { 335 | color: $blue; 336 | font-size : 26px; 337 | font-weight : bold; 338 | margin: 20px 0px 0px 0px; 339 | } 340 | 341 | .speaker_bar scale trough highlight { 342 | all: unset; 343 | background-image: linear-gradient(to right, #afcee0 30%, #92B6F4 50%, #77a5bf 100% *50); 344 | border-radius: 24px; 345 | } 346 | .speaker_bar scale trough { 347 | all: unset; 348 | background-color: $widget-background; 349 | box-shadow: 0 6px 5px 2px $shadow; 350 | border-radius: 24px; 351 | min-height: 13px; 352 | min-width: 120px; 353 | margin : 0px 0px 5px 0px; 354 | } 355 | 356 | 357 | 358 | 359 | .mic_icon { 360 | background-size: cover; 361 | background-image: url('images/mic.png'); 362 | background-position: center; 363 | min-height: 70px; 364 | min-width: 75px; 365 | margin: 5px 20px 20px 20px; 366 | border-radius: 12px; 367 | } 368 | 369 | .mic_text { 370 | color: $blue; 371 | font-size : 26px; 372 | font-weight : bold; 373 | margin: 0px 0px 0px 0px; 374 | } 375 | 376 | .mic_bar scale trough highlight { 377 | all: unset; 378 | background-image: linear-gradient(to right, #afcee0 30%, #92B6F4 50%, #77a5bf 100% *50); 379 | border-radius: 24px; 380 | } 381 | .mic_bar scale trough { 382 | all: unset; 383 | box-shadow: 0 6px 5px 2px $shadow; 384 | background-color: $widget-background; 385 | border-radius: 24px; 386 | min-height: 13px; 387 | min-width: 120px; 388 | margin : 0px 0px 20px 0px; 389 | } 390 | 391 | .audio_sep { 392 | color: $black; 393 | font-size: 18; 394 | margin : 0px 0px 0px 0px; 395 | } 396 | 397 | // Music 398 | .music-player { 399 | all: unset; 400 | background-color: $widget-background; 401 | padding: 0px 25px 0px 17px; 402 | border-radius: 12px; 403 | box-shadow: 0px 0px 6px 6px $shadow;} 404 | 405 | .album_art { 406 | background-size: cover; 407 | background-position: center; 408 | border-radius: 12px; 409 | margin: 2rem 1rem 1.5rem 1rem; 410 | padding: 4rem;} 411 | 412 | .song { 413 | font-weight: bold; 414 | color: $white; 415 | font-size : 1.2em; 416 | } 417 | .artist { 418 | font-style: italic; 419 | font-size: 1.1em; 420 | color: $blue; 421 | margin-top: -5px; 422 | } 423 | .btn_prev, .btn_play, .btn_next { 424 | color: $purple; 425 | font-size: 25px; 426 | } 427 | 428 | .metric-player scale trough highlight { 429 | all: unset; 430 | border-radius: 10px; 431 | background-color: $blue; 432 | } 433 | 434 | // weather 435 | .weather { 436 | all: unset; 437 | background-color: $widget-background; 438 | border-radius: 12px; 439 | padding: 23px 37px 20px 37px; 440 | box-shadow: 0px 0px 6px 6px $shadow;} 441 | 442 | .iconweather { 443 | font-size : 44px; 444 | font-weight : normal; 445 | margin : 0px -5px 0px 20px; 446 | } 447 | 448 | .label_temp { 449 | color : $blue; 450 | font-size : 35px; 451 | font-weight : bold; 452 | margin : 0px 0px 0px 0px; 453 | font-family: Furamono Nerd Font; 454 | 455 | } 456 | 457 | .label_stat { 458 | color : $blue; 459 | font-size : 38px; 460 | font-weight : bold; 461 | } 462 | 463 | .label_quote { 464 | color : $blue; 465 | font-size : 18px; 466 | padding-bottom: 10px; 467 | font-weight : normal; 468 | } 469 | 470 | .date { 471 | all: unset; 472 | background-color: $widget-background; 473 | padding: 33px 27px 27px 27px; 474 | border-radius: 12px; 475 | color: $blue; 476 | font-size : 18px; 477 | font-style : italic; 478 | font-family: Cartograph CF; 479 | box-shadow: 0px 0px 6px 6px $shadow;} 480 | 481 | .stats-box { 482 | all: unset; 483 | background-color: $widget-background; 484 | padding: 20px 25px 20px 25px; 485 | border-radius: 12px; 486 | box-shadow: 0px 0px 6px 6px $shadow;} 487 | 488 | .stats-icon { 489 | font-size: 23px; 490 | color: $blue; 491 | } 492 | 493 | 494 | scale trough { 495 | all: unset; 496 | background-color: $widget-background; 497 | box-shadow: 0 2px 3px 2px $shadow; 498 | border-radius: 16px; 499 | min-height: 10px; 500 | min-width: 70px; 501 | margin: 0px 5px 0px 10px; 502 | } 503 | 504 | .scale highlight { 505 | background-image: linear-gradient(to right, #afcee0 30%, #92B6F4 50%, #77a5bf 100% *50); 506 | border-radius: 15px; 507 | } 508 | 509 | .foo { 510 | font-size: 40px; 511 | padding-top: 10px; 512 | } 513 | 514 | .buttons { 515 | opacity: 1; 516 | background-color: $widget-background; 517 | border-radius: 12px; 518 | padding: 15px 0px 15px 0px; 519 | margin-bottom: 30px; 520 | box-shadow: 0px 0px 6px 6px $shadow;} 521 | 522 | .poweroff, .reboot, .firmware, .exit, .restart { 523 | margin: 0px 16px 0px 16px; 524 | padding: 2px 15px 2px 9px; 525 | border-radius: 25px; 526 | font-size: 24px; 527 | color: $black; 528 | } 529 | 530 | .poweroff { 531 | background-color: $red; 532 | } 533 | .reboot { 534 | background-color: $green; 535 | } 536 | .firmware { 537 | background-color: $orange; 538 | } 539 | .exit { 540 | background-color: $purple; 541 | } 542 | .restart { 543 | background-color: $blue; 544 | } 545 | 546 | .fetch { 547 | margin-top: 35px; 548 | font-size: 15px; 549 | border-radius: 12px; 550 | background-color: $widget-background; 551 | padding: 30px 55px 30px 55px; 552 | box-shadow: 0px 0px 6px 6px $shadow;} 553 | 554 | .wm { 555 | font-weight: bold; 556 | color: $red; 557 | } 558 | 559 | .host { 560 | font-weight: bold; 561 | color: $purple; 562 | } 563 | 564 | .uptime { 565 | font-weight: bold; 566 | color: $orange; 567 | } 568 | 569 | .packages { 570 | font-weight: bold; 571 | color: $blue; 572 | } 573 | 574 | .kernal { 575 | font-weight: bold; 576 | color: $green; 577 | } 578 | 579 | .notification { 580 | all: unset; 581 | background-color: $widget-background; 582 | padding: 20px 25px 20px 17px; 583 | margin: 0px 0px 0px 0px; 584 | border-radius: 12px; 585 | border-width: 2px; 586 | border-style: solid; 587 | border-color: $red;} 588 | 589 | .notification-header { 590 | all: unset; 591 | background-color: $widget-background; 592 | padding: 20px 25px 20px 17px; 593 | margin: 20px 0px 10px 0px; 594 | border-radius: 12px; 595 | border-width: 2px; 596 | border-style: solid; 597 | border-color: $green;} 598 | 599 | .notification-icon { 600 | color: $white; 601 | font-size: 36px; 602 | margin: 0px 20px 0px 10px; 603 | } 604 | 605 | .notification-appname { 606 | font-size: 14px; 607 | font-weight: bold; 608 | color: $orange; 609 | } 610 | 611 | .notification-summary { 612 | font-size: 18px; 613 | font-weight: bold; 614 | color: $white; 615 | } 616 | 617 | .notification-body { 618 | font-size: 14px; 619 | color: $white; 620 | } 621 | 622 | .notification-label { 623 | font-size: 30px; 624 | color: $blue; 625 | margin: 0px 50px 0px 0px; 626 | } 627 | .notification-action { 628 | font-size: 36px; 629 | color: $white; 630 | margin: 0px 0px 0px 20px; 631 | } 632 | -------------------------------------------------------------------------------- /eww/eww.yuck: -------------------------------------------------------------------------------- 1 | ;; Variables 2 | 3 | (include "sidebar.yuck") 4 | (include "notifications.yuck") 5 | (include "system-menu.yuck") 6 | 7 | (defpoll monitors :interval "1m" "hyprctl monitors -j | jq -rc '[ .[].id ] | sort_by( . )'") 8 | (defpoll clock_time :interval "5s" "date '+\%l󰇙\%M \%p'") 9 | (defpoll clock_date :interval "1h" "date '+%b %d, %Y'") 10 | (defpoll calendar_day :interval "2h" "date '+%d'") 11 | (defpoll calendar_year :interval "2h" "date '+%Y'") 12 | (defpoll volume_percent :interval "1s" "scripts/sbvol --get") 13 | (defpoll mic_percent :interval "3s" "amixer -D pulse sget Capture | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%' | head -n 1") 14 | (defpoll brightness_percent :interval "5s" "light") 15 | (defpoll COL_WLAN :interval "1m" "scripts/wifi --COL") 16 | (defpoll ESSID_WLAN :interval "1m" "scripts/wifi --ESSID") 17 | (defpoll WLAN_ICON :interval "1m" "scripts/wifi --ICON") 18 | (deflisten workspace "scripts/workspace") 19 | (deflisten appname "scripts/appname") 20 | 21 | (defvar vol_reveal false) 22 | (defvar br_reveal false) 23 | (defvar music_reveal false) 24 | (defvar control_reveal false) 25 | (defvar wifi_rev false) 26 | (defvar time_rev false) 27 | 28 | 29 | ;; widgets 30 | 31 | (defwidget launcher [] 32 | (box 33 | :class "launcher_module" 34 | :orientation "h" 35 | (button 36 | :onclick "rofi -no-lazy-grab -show drun -theme ~/.config/hypr/themes/cyber/rofi/launcher.rasi &" 37 | (image 38 | :class "launcher-icon" 39 | :path "favicon.ico" 40 | :image-width 36)) 41 | (button 42 | :onclick "rofi -show filebrowser &" 43 | :class "iconsearch" "") 44 | )) 45 | 46 | (defwidget workspaces [] 47 | (literal 48 | :content workspace)) 49 | 50 | (defwidget appnames [] 51 | (eventbox 52 | :onhover "${EWW_CMD} update control_reveal=true" 53 | :onhoverlost "${EWW_CMD} update control_reveal=false" 54 | (box 55 | :orientation "h" 56 | :space-evenly "false" 57 | :vexpand "false" 58 | :hexpand "false" 59 | (literal 60 | :content appname) 61 | (revealer 62 | :transition "slideright" 63 | :reveal control_reveal 64 | :duration "350ms" 65 | (box 66 | :vexpand "false" 67 | :hexpand "false" 68 | :orientation "h" 69 | :space-evenly "false" 70 | (button 71 | :class "app-button" 72 | :onclick "hyprctl dispatch togglefloating 1" "") 73 | (button 74 | :class "app-button" 75 | :onclick "hyprctl dispatch fullscreen 1" "") 76 | (button 77 | :class "app-button" 78 | :onclick "hyprctl dispatch killactive 1" "")))))) 79 | 80 | (defwidget bright [] 81 | (eventbox 82 | :onhover "${EWW_CMD} update br_reveal=true" 83 | :onhoverlost "${EWW_CMD} update br_reveal=false" 84 | (box 85 | :class "module" 86 | :space-evenly "false" 87 | :orientation "h" 88 | :spacing "3" 89 | (revealer 90 | :transition "slideright" 91 | :reveal br_reveal 92 | :duration "350ms" 93 | (scale :class "brightbar" 94 | :value brightness_percent 95 | :orientation "h" 96 | :tooltip "${brightness_percent}%" 97 | :max 100 98 | :min 0 99 | :onchange "light -S {}" )) 100 | (label 101 | :text "" 102 | :class "bright_icon" 103 | :tooltip "brightness")))) 104 | 105 | (defwidget volume [] 106 | (eventbox 107 | :onhover "${EWW_CMD} update vol_reveal=true" 108 | :onhoverlost "${EWW_CMD} update vol_reveal=false" 109 | (box 110 | :class "module-2" 111 | :space-evenly "false" 112 | :orientation "h" 113 | :spacing "3" 114 | (revealer 115 | :transition "slideright" 116 | :reveal vol_reveal 117 | :duration "350ms" 118 | (scale 119 | :class "volbar" 120 | :value volume_percent 121 | :orientation "h" 122 | :tooltip "${volume_percent}%" 123 | :max 100 124 | :min 0 125 | :onchange "amixer sset Master {}%" )) 126 | (button 127 | :onclick "${EWW_CMD} open --toggle audio_ctl" 128 | :class "volume_icon" 129 | "墳")))) 130 | 131 | (defwidget wifi [] 132 | (eventbox 133 | :onhover "${EWW_CMD} update wifi_rev=true" 134 | :onhoverlost "${EWW_CMD} update wifi_rev=false" 135 | (box 136 | :vexpand "false" 137 | :hexpand "false" 138 | :space-evenly "false" 139 | (revealer 140 | :transition "slideright" 141 | :reveal wifi_rev 142 | :duration "350ms" 143 | (label 144 | :class "module_essid" 145 | :text ESSID_WLAN)) 146 | (button 147 | :class "module-wif" 148 | :onclick "networkmanager_dmenu" 149 | WLAN_ICON)))) 150 | 151 | (defwidget bat [] 152 | (box 153 | :class "bat_module" 154 | :vexpand "false" 155 | :hexpand "false" 156 | (circular-progress 157 | :value {EWW_BATTERY["BAT0"].capacity} 158 | :class "batbar" 159 | :thickness 4 160 | (button 161 | :onclick "${EWW_CMD} open --toggle system" 162 | :class "iconbat" 163 | :tooltip "battery on ${EWW_BATTERY["BAT0"].capacity}%" 164 | " ")))) 165 | 166 | (defwidget mem [] 167 | (box 168 | :class "mem_module" 169 | :vexpand "false" 170 | :hexpand "false" 171 | (circular-progress 172 | :value {EWW_RAM.used_mem_perc} 173 | :class "membar" 174 | :thickness 4 175 | (button 176 | :onclick "${EWW_CMD} open --toggle system" 177 | :class "iconmem" 178 | :tooltip "using ${EWW_RAM.used_mem_perc}% ram" 179 | " ")))) 180 | 181 | (defwidget clock_module [] 182 | (eventbox 183 | :onhover "${EWW_CMD} update time_rev=true" 184 | :onhoverlost "${EWW_CMD} update time_rev=false" 185 | (box 186 | :class "module" 187 | :space-evenly "false" 188 | :orientation "h" 189 | :spacing "0" 190 | (label 191 | :text clock_time 192 | :class "clock_time_class" ) 193 | (revealer :transition "slideleft" 194 | :reveal time_rev 195 | :duration "350ms" 196 | (button 197 | :class "clock_date_class" 198 | :onclick "${EWW_CMD} open --toggle calendar" clock_date))))) 199 | 200 | (defwidget notif_button [] 201 | (box 202 | :class "notif_button" 203 | :space-evenly "false" 204 | :orientation "h" 205 | (button 206 | :onclick "if ${EWW_CMD} state | grep 'rightside: false' ; then ${EWW_CMD} update rightside=true ; else ${EWW_CMD} update rightside=false ; fi" 207 | (label 208 | :text "")))) 209 | 210 | (defwidget sep [] 211 | (box 212 | :class "module-2" 213 | :vexpand "false" 214 | :hexpand "false" 215 | (label 216 | :class "separ" 217 | :text "|"))) 218 | 219 | (defwidget gap [] 220 | (box 221 | :orientation "h" 222 | :hexpand "false" 223 | :visible "true" 224 | :width "150")) 225 | 226 | 227 | ;;define widget groups 228 | (defwidget left [] 229 | (box 230 | :orientation "h" 231 | :space-evenly false 232 | :halign "start" 233 | :class "left_modules" 234 | (launcher) 235 | (sep) 236 | (workspaces))) 237 | (defwidget center [] 238 | (box 239 | :orientation "h" 240 | :space-evenly false 241 | :halign "center" 242 | :class "center_modules" 243 | (appnames))) 244 | (defwidget right [] 245 | (box 246 | :orientation "h" 247 | :space-evenly false 248 | :halign "end" 249 | :class "right_modules" 250 | (bright) 251 | (volume) 252 | (wifi) 253 | (sep) 254 | (bat) 255 | (mem) 256 | (sep) 257 | (clock_module) 258 | (notif_button) 259 | )) 260 | 261 | (defwidget bar_layout [] 262 | (centerbox 263 | :class "bar_class" 264 | :orientation "h" 265 | (left) 266 | (center) 267 | (right) 268 | )) 269 | (defwindow bar0 270 | :monitor 0 271 | :exclusive false 272 | :geometry (geometry 273 | :x "15px" 274 | :y "0px" 275 | :width "99%" 276 | :height "50px" 277 | :anchor "top center") 278 | :stacking "fg" 279 | :windowtype "dock" 280 | (bar_layout)) 281 | (defwindow bar1 282 | :monitor 1 283 | :exclusive false 284 | :geometry (geometry 285 | :x "15px" 286 | :y "0px" 287 | :width "99%" 288 | :height "50px" 289 | :anchor "top center") 290 | :stacking "fg" 291 | :windowtype "dock" 292 | (bar_layout)) 293 | (defwindow bar2 294 | :monitor 2 295 | :exclusive false 296 | :geometry (geometry 297 | :x "15px" 298 | :y "0px" 299 | :width "99%" 300 | :height "50px" 301 | :anchor "top center") 302 | :stacking "fg" 303 | :windowtype "dock" 304 | (bar_layout)) 305 | 306 | 307 | 308 | (defwidget audio [] 309 | (box 310 | :class "audio-box" 311 | :orientation "v" 312 | :space-evenly "false" 313 | :vexpand "false" 314 | :hexpand "false" 315 | (box 316 | :halign "v" 317 | :space-evenly "false" 318 | :hexpand "false" 319 | :vexpand "false" 320 | (box 321 | :class "speaker_icon" 322 | :orientation "v") 323 | (box 324 | :orientation "v" 325 | :halign "center" 326 | :vexpand "false" 327 | :hexpand "false" 328 | (label 329 | :class "speaker_text" 330 | :text "speaker" 331 | :valign "center" 332 | :halign "left" ) 333 | (box 334 | :class "speaker_bar" 335 | :halign "center" 336 | :vexpand "false" 337 | :hexpand "false" 338 | (scale 339 | :value volume_percent 340 | :orientation "h" 341 | :onchange "amixer -D pulse sset Master {}%" 342 | :tooltip "volume on ${volume_percent}%" 343 | :max 100 344 | :min 0)))) 345 | (label 346 | :text "_____________________________________" 347 | :class "audio_sep" 348 | :halign "center") 349 | (box 350 | :halign "v" 351 | :space-evenly "false" 352 | :hexpand "false" 353 | :vexpand "false" 354 | (box 355 | :class "mic_icon" 356 | :orientation "v") 357 | (box 358 | :orientation "v" 359 | :halign "center" 360 | :vexpand "false" 361 | :hexpand "false" 362 | (label 363 | :class "mic_text" 364 | :text "mic" 365 | :valign "center" 366 | :halign "left" ) 367 | (box 368 | :class "mic_bar" 369 | :halign "center" 370 | :vexpand "false" 371 | :hexpand "false" 372 | (scale 373 | :value mic_percent 374 | :orientation "h" 375 | :tooltip "mic on ${mic_percent}%" 376 | :onchange "amixer -D pulse sset Capture {}%" 377 | :max 100 378 | :min 0)))))) 379 | (defwindow audio_ctl 380 | :stacking "fg" 381 | :focusable "false" 382 | :screen 1 383 | :monitor 0 384 | :geometry (geometry 385 | :x "20" 386 | :y "7%" 387 | :anchor "top right" 388 | :width "280px" 389 | :height "60px") 390 | (audio)) 391 | 392 | 393 | ;;Define System widget 394 | (defwidget system [] 395 | (box 396 | :class "sys_win" 397 | :orientation "v" 398 | :space-evenly "false" 399 | :hexpand "false" 400 | :vexpand "false" 401 | :spacing 0 402 | (box 403 | :class "sys_bat_box" 404 | :orientation "h" 405 | :space-evenly "false" 406 | (circular-progress 407 | :value {EWW_BATTERY["BAT0"].capacity} 408 | :class "sys_bat" 409 | :thickness 9 410 | (label :text "" 411 | :class "sys_icon_bat" 412 | :limit-width 2 413 | :wrap false)) 414 | (box 415 | :orientation "v" 416 | :space-evenly "false" 417 | :spacing 0 418 | :hexpand "false" 419 | :vexpand "false" 420 | (label 421 | :text "battery" 422 | :halign "start" 423 | :class "sys_text_bat" 424 | :limit-width 9 425 | :wrap false) 426 | (label 427 | :text "${EWW_BATTERY["BAT0"].capacity}%" 428 | :halign "start" 429 | :class "sys_text_bat_sub" 430 | :limit-width 22 431 | :wrap false) 432 | (label 433 | :text "${EWW_BATTERY["BAT0"].status}" 434 | :halign "start" 435 | :class "sys_text_bat_sub" 436 | :limit-width 22 437 | :wrap false))) 438 | (label 439 | :text "____________________________________" 440 | :class "sys_sep" 441 | :halign "center") 442 | (box 443 | :class "sys_mem_box" 444 | :orientation "h" 445 | :space-evenly "false" 446 | :halign "start" 447 | (circular-progress 448 | :value {EWW_RAM.used_mem_perc} 449 | :class "sys_mem" 450 | :thickness 9 451 | (label 452 | :text "" 453 | :class "sys_icon_mem" 454 | :limit-width 2 455 | :wrap false 456 | :angle 0.0)) 457 | (box 458 | :orientation "v" 459 | :space-evenly "false" 460 | :spacing 0 461 | :hexpand "false" 462 | :vexpand "false" 463 | (label 464 | :text "memory" 465 | :halign "start" 466 | :class "sys_text_mem" 467 | :limit-width 9 468 | :wrap false) 469 | (label 470 | :text "${round((EWW_RAM.available_mem / 1024), 0)} | ${round((EWW_RAM.total_mem / 1024), 0)}mb " 471 | :halign "start" 472 | :class "sys_text_mem_sub" 473 | :limit-width 22 474 | :wrap false) 475 | (label 476 | :text "${round((EWW_RAM.used_mem / 1024), 0)}mb free" 477 | :halign "start" 478 | :class "sys_text_mem_sub" 479 | :limit-width 22 480 | :wrap false) 481 | )))) 482 | (defwindow system 483 | :stacking "fg" 484 | :focusable "false" 485 | :screen 1 486 | :monitor 0 487 | :geometry 488 | (geometry 489 | :x "20" 490 | :y "7%" 491 | :anchor "top right" 492 | :width "290px" 493 | :height "120px") 494 | (system)) 495 | 496 | 497 | 498 | ;;Calendar Widget 499 | (defwidget cal [] 500 | (box 501 | :class "cal" 502 | :orientation "v" 503 | (box 504 | :class "cal-in" 505 | (calendar 506 | :day calendar_day 507 | :year calendar_year)))) 508 | (defwindow calendar 509 | :stacking "fg" 510 | :focusable "false" 511 | :screen 1 512 | :monitor 0 513 | :geometry (geometry 514 | :x "20" 515 | :y "7%" 516 | :anchor "top right" 517 | :width "270px" 518 | :height "60px") 519 | (cal)) 520 | -------------------------------------------------------------------------------- /eww/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/eww/favicon.ico -------------------------------------------------------------------------------- /eww/images/mic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/eww/images/mic.png -------------------------------------------------------------------------------- /eww/images/music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/eww/images/music.png -------------------------------------------------------------------------------- /eww/images/profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/eww/images/profile.png -------------------------------------------------------------------------------- /eww/images/speaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/eww/images/speaker.png -------------------------------------------------------------------------------- /eww/launch_bar: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Files and cmd 4 | CONF_DIR="$HOME/.config/hypr/themes/cyber/eww" 5 | EWW="eww -c $CONF_DIR" 6 | 7 | ## Refresh Weather Cache 8 | $CONF_DIR/scripts/weather --getdata & 9 | 10 | ## Run eww daemon if not running already 11 | if [[ ! $(pidof eww) ]]; then 12 | ${EWW} daemon 13 | sleep 1 14 | fi 15 | 16 | ## Open widgets 17 | NB_MONITORS=($(hyprctl monitors -j | jq -r '.[] | .id')) 18 | for i in "${!NB_MONITORS[@]}"; do 19 | ${EWW} open bar$i 20 | [[ $i == 0 ]] && ${EWW} open-many sidebar notifications 21 | done 22 | -------------------------------------------------------------------------------- /eww/notifications.yuck: -------------------------------------------------------------------------------- 1 | (defwindow notifications 2 | :geometry (geometry :x "0px" 3 | :y "10px" 4 | :width "2px" 5 | :height "93%" 6 | :anchor "bottom right") 7 | :stacking "fg" 8 | :monitor "0" 9 | (notif-panel)) 10 | 11 | (defwidget notif-panel [] 12 | (eventbox 13 | :halign "start" 14 | :onhoverlost "${EWW_CMD} update rightside=false" 15 | (revealer 16 | :transition "slideleft" 17 | :reveal rightside 18 | :duration "550ms" 19 | (rightside)))) 20 | (defvar rightside false) 21 | 22 | (defwidget rightside [] 23 | (box 24 | :class "rightside" 25 | :orientation "v" 26 | :space-evenly "false" 27 | :spacing "10" 28 | :halign "center" 29 | (box 30 | :class "notification-header" 31 | :orientation "h" 32 | :space-evenly "false" 33 | (label 34 | :class "notification-label" 35 | :halign "start" 36 | :text "Notifications") 37 | (box 38 | :orientation "h" 39 | :space-evenly "false" 40 | :halign "end" 41 | (button 42 | :class "notification-action" 43 | :tooltip "Refresh" 44 | :onclick "dunstctl history > /tmp/dunst-history.json" "") 45 | (button 46 | :class "notification-action" 47 | :tooltip "Pause/Resume Notifications" 48 | :onclick "dunstctl set-paused toggle" "") 49 | (button 50 | :class "notification-action" 51 | :tooltip "Dismiss All" 52 | :onclick "pkill dunst && hyprctl dispatch exec dunst && dunstctl history > /tmp/dunst-history.json" ""))) 53 | (scroll 54 | :vscroll "true" 55 | :hscroll "false" 56 | :height 840 57 | :width 200 58 | (literal 59 | :content notifications) 60 | ))) 61 | 62 | (deflisten notifications "scripts/notifications") 63 | -------------------------------------------------------------------------------- /eww/scripts/appname: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | #define icons for workspaces 1-9 4 | #icontheme=$(geticons -U) 5 | icontheme=$(grep "gtk-icon-theme-name" "$HOME"/.config/gtk-3.0/settings.ini | cut --delimiter="=" -f 2) 6 | 7 | workspaces() { 8 | if [[ ${1:0:14} == "activewindow>>" ]]; then #set focused workspace 9 | string=${1:14} 10 | class="${string/,*/}" 11 | export title=${string/,/ \| } 12 | [[ $title == " | " ]] && unset title 13 | export iconpath=$(geticons "$class" -s 24 -c 1 -t "$icontheme" | head -n 1) 14 | fi 15 | } 16 | 17 | module() { 18 | #output eww widget 19 | echo "(box \ 20 | :orientation \"h\" \ 21 | :halign \"start\" \ 22 | :space-evenly false \ 23 | (image \ 24 | :class \"app-icon\" \ 25 | :path \"$iconpath\" \ 26 | :image-width \"36\") \ 27 | (label \ 28 | :class \"app-name\" \ 29 | :limit-width \"35\" \ 30 | :text \"$title\" \ 31 | :tooltip \"$title\"))" 32 | } 33 | 34 | socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r event; do 35 | workspaces "$event" 36 | module 37 | done 38 | -------------------------------------------------------------------------------- /eww/scripts/battery: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | BAT=`ls /sys/class/power_supply | grep BAT | head -n 1` 4 | 5 | battery() { 6 | cat /sys/class/power_supply/${BAT}/capacity 7 | } 8 | battery_stat() { 9 | cat /sys/class/power_supply/${BAT}/status 10 | } 11 | 12 | case "$1" in 13 | --bat) battery;; 14 | --bat-st) battery_stat;; 15 | esac 16 | -------------------------------------------------------------------------------- /eww/scripts/gpu: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | nvidia-smi dmon -s u | awk 'NR>2 {print $2; fflush()}' 4 | -------------------------------------------------------------------------------- /eww/scripts/mem-ad: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | total="$(free -m | grep Mem: | awk '{ print $2 }')" 5 | used="$(free -m | grep Mem: | awk '{ print $3 }')" 6 | 7 | free=$(expr $total - $used) 8 | 9 | case $1 in 10 | total) echo $total;; 11 | used) echo $used;; 12 | free) echo $free;; 13 | esac 14 | -------------------------------------------------------------------------------- /eww/scripts/memory: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}') 4 | -------------------------------------------------------------------------------- /eww/scripts/music: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ╔╦╗ ╦ ╦ ╔═╗ ╦ ╔═╗ 4 | # ║║║ ║ ║ ╚═╗ ║ ║ 5 | # ╩ ╩ ╚═╝ ╚═╝ ╩ ╚═╝ 6 | 7 | # author Niraj 8 | # github niraj998 9 | 10 | # ┌─┐┌─┐┌┐┌┌─┐┬┌─┐┬ ┬┬─┐┌─┐┌┬┐┬┌─┐┌┐┌┌─┐ 11 | # │ │ ││││├┤ ││ ┬│ │├┬┘├─┤ │ ││ ││││└─┐ 12 | # └─┘└─┘┘└┘└ ┴└─┘└─┘┴└─┴ ┴ ┴ ┴└─┘┘└┘└─┘ 13 | 14 | # uncomment your music players below. 15 | # 16 | 17 | Control="MPD" 18 | # [ -n "$(pgrep spotify)" ] && Control="spotify" 19 | [ -n "$(pgrep brave-bin)" ] && Control="brave-bin" 20 | # [ -n "$(pgrep rhythmbox)" ] && Control="rhythmbox" 21 | # [ -n "$(pgrep audacious)" ] && Control="audacious" 22 | # [ -n "$(pgrep clementine)" ] && Control="clementine" 23 | # [ -n "$(pgrep strawberry)" ] && Control="strawberry" 24 | 25 | 26 | 27 | # saves covers here 28 | Cover=/tmp/cover.png 29 | # if cover not found in metadata use this instead 30 | bkpCover=~/.config/eww/music.png 31 | # mpd music directory 32 | mpddir="$HOME/Music/iTunes Media" 33 | 34 | # ┌─┐┬ ┌─┐┬ ┬┌─┐┬─┐┌─┐┌┬┐┬ ┌─┐┌─┐┬─┐┬┌─┐┌┬┐┌─┐ 35 | # ├─┘│ ├─┤└┬┘├┤ ├┬┘│ │ │ └─┐│ ├┬┘│├─┘ │ └─┐ 36 | # ┴ ┴─┘┴ ┴ ┴ └─┘┴└─└─┘ ┴ ┴─┘ └─┘└─┘┴└─┴┴ ┴ └─┘ 37 | 38 | ########################## Title ########################## 39 | title() { 40 | title=$(playerctl --player=$Control metadata --format {{title}}) 41 | [ -z "$title" ] && title="Play Something" 42 | echo "$title" 43 | } 44 | 45 | ########################## Artist ########################## 46 | artist() { 47 | artist=$(playerctl --player=$Control metadata --format {{artist}}) 48 | [ -z "$artist" ] && artist="Artist" 49 | echo "$artist" 50 | } 51 | 52 | ########################## Album ########################## 53 | album() { 54 | album=$(playerctl --player=$Control metadata --format {{album}}) 55 | [ -z "$album" ] && album="Album" 56 | echo "$album" 57 | } 58 | 59 | ########################## Status ########################## 60 | status() { 61 | status=$(playerctl --player=$Control status) 62 | [ -z "$status" ] && status="Stopped" 63 | echo "$status" 64 | } 65 | 66 | ########################## Time ########################## 67 | ctime() { 68 | time=$(playerctl --player=$Control position --format "{{ duration(position) }}") 69 | [ -z "$time" ] && time="0:00" 70 | echo "$time" 71 | } 72 | 73 | ########################## Length ########################## 74 | length() { 75 | length=$(playerctl --player=$Control metadata --format "{{ duration(mpris:length) }}") 76 | [ -z "$length" ] && length="0:00" 77 | echo "$length" 78 | } 79 | 80 | ########################## trackNumber ########################## 81 | playlist() { 82 | playlist=$(playerctl --player=$Control metadata xesam:trackNumber) 83 | [ -z "$playlist" ] && playlist="0" 84 | echo "$playlist" 85 | } 86 | 87 | ########################## Cover ########################## 88 | cover() { 89 | albumart="$(playerctl --player=$Control metadata mpris:artUrl | sed -e 's/open.spotify.com/i.scdn.co/g')" 90 | [ $(playerctl --player=$Control metadata mpris:artUrl) ] && curl -s "$albumart" --output $Cover || cp $bkpCover $Cover 91 | echo "$Cover" 92 | } 93 | 94 | ########################## Statusicon ########################## 95 | statusicon() { 96 | icon="" 97 | [ $(playerctl --player=$Control status) = "Playing" ] && icon="" 98 | [ $(playerctl --player=$Control status) = "Paused" ] && icon="" 99 | echo "$icon" 100 | } 101 | 102 | ########################## Lyrics ########################## 103 | lyrics() { 104 | Title=$(playerctl --player=$Control metadata --format {{title}}) 105 | Artist=$(playerctl --player=$Control metadata --format {{artist}}) 106 | URL="https://api.lyrics.ovh/v1/$Artist/$Title" 107 | lyrics=$(curl -s "$( echo "$URL" | sed s/" "/%20/g | sed s/"&"/%26/g | sed s/,/%2C/g | sed s/-/%2D/g)" | jq '.lyrics' ) 108 | [ "$lyrics" = "null" ] && lyrics=$( curl -s --get "https://makeitpersonal.co/lyrics" --data-urlencode "artist=$Artist" --data-urlencode "title=$Title") 109 | printf "$lyrics" | less 110 | } 111 | 112 | # ┌┬┐┌─┐┌┬┐ ┌─┐┌─┐┬─┐┬┌─┐┌┬┐┌─┐ 113 | # │││├─┘ ││ └─┐│ ├┬┘│├─┘ │ └─┐ 114 | # ┴ ┴┴ ─┴┘ └─┘└─┘┴└─┴┴ ┴ └─┘ 115 | 116 | ########################## Title ########################## 117 | mpctitle() { 118 | title=$(mpc -f %title% current) 119 | [ -z "$title" ] && title="Play Something" 120 | echo "$title" 121 | } 122 | 123 | ########################## Artist ########################## 124 | mpcartist() { 125 | artist=$(mpc -f %artist% current) 126 | [ -z "$artist" ] && artist="Artist" 127 | echo "$artist" 128 | } 129 | 130 | ########################## Album ########################## 131 | mpcalbum() { 132 | album=$(mpc -f %album% current) 133 | [ -z "$album" ] && album="Album" 134 | echo "$album" 135 | } 136 | 137 | ########################## Cover ########################## 138 | mpccover() { 139 | ffmpeg -i "$mpddir"/"$(mpc current -f %file%)" "${Cover}" -y || cp $bkpCover $Cover 140 | echo "$Cover" && exit 141 | } 142 | 143 | ########################## Time ########################## 144 | mpctime() { 145 | time=$(mpc status %currenttime%) 146 | [ -z "$time" ] && time="0:00" 147 | echo "$time" 148 | } 149 | 150 | ########################## Length ########################## 151 | mpclength() { 152 | length=$(mpc status %totaltime%) 153 | [ -z "$length" ] && length="0:00" 154 | echo "$length" 155 | } 156 | 157 | ########################## Icon ########################## 158 | mpcicon() { 159 | status=$(mpc status | head -2 | tail -1 | cut -c2-7 ) 160 | icon="" 161 | [ "$status" = "playin" ] && icon="" 162 | [ "$status" = "paused" ] && icon="" 163 | echo "$icon" 164 | } 165 | 166 | ########################## Status ########################## 167 | mpcstatus() { 168 | stat=$(mpc status | head -2 | tail -1 | cut -c2-7 ) 169 | status="Stopped" 170 | [ "$stat" = "playin" ] && status="Playing" 171 | [ "$stat" = "paused" ] && status="Paused" 172 | echo "$status" 173 | } 174 | 175 | ########################## Percent ########################## 176 | mpcperc() { 177 | perc=$(mpc status %percenttime%) 178 | [ -z "$perc" ] && perc="0" 179 | echo "$perc" 180 | } 181 | 182 | ########################## Playlist ########################## 183 | mpcsongpos() { 184 | pos=$(mpc status %songpos%) 185 | allsongs=$(mpc status %length%) 186 | playlist="$pos/$allsongs" 187 | [ -z "$pos" ] && playlist="0/0" 188 | echo "$playlist" 189 | } 190 | 191 | ########################## Lyrics ########################## 192 | mpclyrics() { 193 | Title=$(mpc -f %title% current) 194 | Artist=$(mpc -f %artist% current) 195 | URL="https://api.lyrics.ovh/v1/$Artist/$Title" 196 | lyrics=$(curl -s "$( echo "$URL" | sed s/" "/%20/g | sed s/"&"/%26/g | sed s/,/%2C/g | sed s/-/%2D/g)" | jq '.lyrics' ) 197 | [ "$lyrics" = "null" ] && lyrics=$( curl -s --get "https://makeitpersonal.co/lyrics" --data-urlencode "artist=$Artist" --data-urlencode "title=$Title") 198 | printf "$lyrics" | less 199 | } 200 | 201 | # ┬ ┬┌─┐┬ ┌─┐ 202 | # ├─┤├┤ │ ├─┘ 203 | # ┴ ┴└─┘┴─┘┴ 204 | 205 | doc() { 206 | echo "Usage: 207 | music [Options] 208 | 209 | Options: 210 | previous previous song 211 | next next song 212 | toggle toggle between play-pause song 213 | title shows title of current song 214 | album shows album of current song 215 | artist shows artist of current song 216 | status music status (playing/paused/stopped) 217 | statusicon music status icons (playing/paused/stopped) 218 | coverloc saves cover and shows location to cover of current song 219 | showcover opens cover using feh 220 | time shows current time of song 221 | length shows length of song 222 | percent shows percent song 223 | playlist shows playlist position of current song 224 | lyrics shows lyrics" 225 | } 226 | 227 | # ┌─┐┌─┐┌┬┐┬┌─┐┌┐┌┌─┐ 228 | # │ │├─┘ │ ││ ││││└─┐ 229 | # └─┘┴ ┴ ┴└─┘┘└┘└─┘ 230 | 231 | case $Control in 232 | MPD) 233 | case $1 in 234 | next) mpc -q next ;; 235 | previous) mpc -q prev ;; 236 | toggle) mpc -q toggle ;; 237 | title) mpctitle ;; 238 | artist) mpcartist ;; 239 | album) mpcalbum ;; 240 | status) mpcstatus ;; 241 | statusicon) mpcicon ;; 242 | player) echo "$Control" ;; 243 | coverloc) mpccover ;; 244 | showcover) mpccover | xargs feh ;; 245 | time) mpctime ;; 246 | length) mpclength ;; 247 | percent) mpcperc ;; 248 | playlist) mpcsongpos ;; 249 | lyrics) mpclyrics ;; 250 | *) doc ;; 251 | esac 252 | ;; 253 | *) 254 | case $1 in 255 | next) playerctl --player=$Control next ;; 256 | previous) playerctl --player=$Control previous ;; 257 | toggle) playerctl --player=$Control play-pause ;; 258 | title) title ;; 259 | artist) artist ;; 260 | album) album ;; 261 | status) status ;; 262 | statusicon) statusicon ;; 263 | player) echo "$Control" ;; 264 | coverloc) cover ;; 265 | showcover) cover | xargs feh ;; 266 | time) ctime ;; 267 | length) length ;; 268 | percent) echo "0" ;; 269 | playlist) playlist ;; 270 | lyrics) lyrics ;; 271 | *) doc ;; 272 | esac 273 | esac 2>/dev/null 274 | -------------------------------------------------------------------------------- /eww/scripts/music_info: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # scripts by adi1090x 3 | 4 | ## Get data 5 | STATUS="$(mpc status)" 6 | COVER="/tmp/.music_cover.png" 7 | MUSIC_DIR="$HOME/Music/iTunes Media" 8 | 9 | ## Get status 10 | get_status() { 11 | if [[ $STATUS == *"[playing]"* ]]; then 12 | echo "" 13 | else 14 | echo "奈" 15 | fi 16 | } 17 | 18 | ## Get song 19 | get_song() { 20 | song=`mpc -f %title% current` 21 | if [[ -z "$song" ]]; then 22 | echo "Offline" 23 | else 24 | echo "$song" 25 | fi 26 | } 27 | 28 | ## Get artist 29 | get_artist() { 30 | artist=`mpc -f %artist% current` 31 | if [[ -z "$artist" ]]; then 32 | echo "" 33 | else 34 | echo "$artist" 35 | fi 36 | } 37 | 38 | ## Get time 39 | get_time() { 40 | time=`mpc status | grep "%)" | awk '{print $4}' | tr -d '(%)'` 41 | if [[ -z "$time" ]]; then 42 | echo "0" 43 | else 44 | echo "$time" 45 | fi 46 | } 47 | get_ctime() { 48 | ctime=`mpc status | grep "#" | awk '{print $3}' | sed 's|/.*||g'` 49 | if [[ -z "$ctime" ]]; then 50 | echo "0:00" 51 | else 52 | echo "$ctime" 53 | fi 54 | } 55 | get_ttime() { 56 | ttime=`mpc -f %time% current` 57 | if [[ -z "$ttime" ]]; then 58 | echo "0:00" 59 | else 60 | echo "$ttime" 61 | fi 62 | } 63 | 64 | ## Get cover 65 | get_cover() { 66 | ffmpeg -i "${MUSIC_DIR}/$(mpc current -f %file%)" "${COVER}" -y &> /dev/null 67 | STATUS=$? 68 | 69 | # Check if the file has a embbeded album art 70 | if [ "$STATUS" -eq 0 ];then 71 | echo "$COVER" 72 | else 73 | echo "images/music.png" 74 | fi 75 | } 76 | 77 | ## Execute accordingly 78 | if [[ "$1" == "--song" ]]; then 79 | get_song 80 | elif [[ "$1" == "--artist" ]]; then 81 | get_artist 82 | elif [[ "$1" == "--status" ]]; then 83 | get_status 84 | elif [[ "$1" == "--time" ]]; then 85 | get_time 86 | elif [[ "$1" == "--ctime" ]]; then 87 | get_ctime 88 | elif [[ "$1" == "--ttime" ]]; then 89 | get_ttime 90 | elif [[ "$1" == "--cover" ]]; then 91 | get_cover 92 | elif [[ "$1" == "--toggle" ]]; then 93 | mpc -q toggle 94 | elif [[ "$1" == "--next" ]]; then 95 | { mpc -q next; get_cover; } 96 | elif [[ "$1" == "--prev" ]]; then 97 | { mpc -q prev; get_cover; } 98 | fi 99 | -------------------------------------------------------------------------------- /eww/scripts/notifications: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | tmp=/tmp/dunst-history.json 4 | 5 | notif() { 6 | export ids=($(dunstctl history | jq '.data[] | .[].id.data')) 7 | 8 | printf "\n (box \ 9 | :orientation \"v\" \ 10 | :space-evenly \"false\" \ 11 | :spacing \"20\" \ 12 | :halign \"start\" " 13 | 14 | for id in "${ids[@]}"; do 15 | mapfile -t notif < <(jq -r ".data[] | .[] | select(.id.data == $id) | .appname.data, .icon_path.data, .summary.data, .body.data" "$tmp" | sed -r '/^\s*$/d' | sed -e 's/\%/ percent/g') 16 | printf "(eventbox :onclick \"dunstctl history-pop $id && dunstctl action 0 && dunstctl close\" \ 17 | (box \ 18 | :class \"notification\" \ 19 | :orientation \"h\" \ 20 | :width 300 \ 21 | :space-evenly \"false\" \ 22 | (image \ 23 | :class \"notification-icon\" \ 24 | :path \"${notif[1]}\" \ 25 | :image-height 50 \ 26 | :image-width 100) \ 27 | (box \ 28 | :orientation \"v\" \ 29 | :space-evenly \"false\" \ 30 | :valign \"left\" \ 31 | :width 300 \ 32 | :spacing 10 \ 33 | (label \ 34 | :xalign 0 \ 35 | :wrap "true" \ 36 | :class \"notification-appname\" \ 37 | :text \"${notif[0]}\") \ 38 | (label \ 39 | :xalign 0 \ 40 | :wrap "true" \ 41 | :class \"notification-summary\" \ 42 | :text \"${notif[2]}\") \ 43 | (label \ 44 | :xalign 0 \ 45 | :wrap "true" \ 46 | :class \"notification-body\" \ 47 | :text \"${notif[3]}\"))))" 48 | done 49 | printf ") \n" 50 | } 51 | 52 | notif 53 | tail --follow $tmp 2> /dev/null | grep --line-buffered "aa{sv}" | while read -r; do 54 | notif 55 | done 56 | -------------------------------------------------------------------------------- /eww/scripts/sbvol: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Get Volume 4 | get_volume() { 5 | status=`amixer get Master | tail -n1 | grep -wo 'on'` 6 | 7 | if [[ "$status" == "on" ]]; then 8 | volume=`amixer get Master | tail -n1 | awk -F ' ' '{print $5}' | tr -d '[%]'` 9 | echo "$volume" 10 | else 11 | echo "Mute" 12 | fi 13 | } 14 | 15 | # Get icons 16 | get_icon() { 17 | vol="$(get_volume)" 18 | current="${vol%%%}" 19 | status=`amixer get Master | tail -n1 | grep -wo 'on'` 20 | 21 | if [[ "$status" == "on" ]]; then 22 | if [[ "$current" -eq "0" ]]; then 23 | echo "ﱝ" 24 | elif [[ ("$current" -ge "0") && ("$current" -le "30") ]]; then 25 | echo "奄" 26 | elif [[ ("$current" -ge "30") && ("$current" -le "60") ]]; then 27 | echo "奔" 28 | elif [[ ("$current" -ge "60") && ("$current" -le "100") ]]; then 29 | echo "墳" 30 | fi 31 | else 32 | echo "ﱝ" 33 | fi 34 | } 35 | 36 | # Increase Volume 37 | inc_volume() { 38 | amixer -Mq set Master,0 5%+ unmute 39 | } 40 | 41 | # Decrease Volume 42 | dec_volume() { 43 | amixer -Mq set Master,0 5%- unmute 44 | } 45 | 46 | # Toggle Mute 47 | toggle_mute() { 48 | status=`amixer get Master | tail -n1 | grep -wo 'on'` 49 | 50 | if [[ "$status" == "on" ]]; then 51 | amixer set Master toggle 52 | else 53 | amixer set Master toggle 54 | fi 55 | } 56 | 57 | # Execute accordingly 58 | if [[ "$1" == "--get" ]]; then 59 | get_volume 60 | elif [[ "$1" == "--icon" ]]; then 61 | get_icon 62 | elif [[ "$1" == "--inc" ]]; then 63 | inc_volume 64 | elif [[ "$1" == "--dec" ]]; then 65 | dec_volume 66 | elif [[ "$1" == "--toggle" ]]; then 67 | toggle_mute 68 | else 69 | get_volume 70 | fi 71 | -------------------------------------------------------------------------------- /eww/scripts/weather: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Collect data 4 | cache_dir="$HOME/.cache/eww/weather" 5 | cache_weather_stat=${cache_dir}/weather-stat 6 | cache_weather_degree=${cache_dir}/weather-degree 7 | cache_weather_quote=${cache_dir}/weather-quote 8 | cache_weather_hex=${cache_dir}/weather-hex 9 | cache_weather_icon=${cache_dir}/weather-icon 10 | 11 | ## Weather data 12 | KEY=8289fc0cb3cc706f3078a8c86bea911f 13 | ID=5288636 14 | UNIT=imperial # Available options : 'metric' or 'imperial' 15 | 16 | ## Make cache dir 17 | if [[ ! -d "$cache_dir" ]]; then 18 | mkdir -p ${cache_dir} 19 | fi 20 | 21 | ## Get data 22 | get_weather_data() { 23 | weather=`curl -sf "http://api.openweathermap.org/data/2.5/weather?APPID="$KEY"&id="$ID"&units="$UNIT""` 24 | echo ${weather} 25 | 26 | if [ ! -z "$weather" ]; then 27 | weather_temp=`echo "$weather" | jq ".main.temp" | cut -d "." -f 1` 28 | weather_icon_code=`echo "$weather" | jq -r ".weather[].icon" | head -1` 29 | weather_description=`echo "$weather" | jq -r ".weather[].description" | head -1 | sed -e "s/\b\(.\)/\u\1/g"` 30 | 31 | #Big long case statement of doom 32 | case "$weather_icon_code" in 33 | 50d) 34 | weather_icon=" " 35 | weather_quote="Forecast says it's misty \nMake sure you don't get lost on your way..." 36 | weather_hex="#84afdb" 37 | ;; 38 | 50n) 39 | weather_icon=" " 40 | weather_quote="Forecast says it's a misty night \nDon't go anywhere tonight or you might get lost..." 41 | weather_hex="#84afdb" 42 | ;; 43 | 01d) 44 | weather_icon=" " 45 | weather_quote="It's a sunny day, gonna be fun! \nDon't go wandering all by yourself though..." 46 | weather_hex="#ffd86b" 47 | ;; 48 | 01n) 49 | weather_icon=" " 50 | weather_quote="It's a clear night \nYou might want to take a evening stroll to relax..." 51 | weather_hex="#fcdcf6" 52 | ;; 53 | 02d) 54 | weather_icon=" " 55 | weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." 56 | weather_hex="#adadff" 57 | ;; 58 | 02n) 59 | weather_icon=" " 60 | weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" 61 | weather_hex="#adadff" 62 | ;; 63 | 03d) 64 | weather_icon=" " 65 | weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." 66 | weather_hex="#adadff" 67 | ;; 68 | 03n) 69 | weather_icon=" " 70 | weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" 71 | weather_hex="#adadff" 72 | ;; 73 | 04d) 74 | weather_icon=" " 75 | weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." 76 | weather_hex="#adadff" 77 | ;; 78 | 04n) 79 | weather_icon=" " 80 | weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" 81 | weather_hex="#adadff" 82 | ;; 83 | 09d) 84 | weather_icon=" " 85 | weather_quote="It's rainy, it's a great day! \nGet some ramen and watch as the rain falls..." 86 | weather_hex="#6b95ff" 87 | ;; 88 | 09n) 89 | weather_icon=" " 90 | weather_quote=" It's gonna rain tonight it seems \nMake sure your clothes aren't still outside..." 91 | weather_hex="#6b95ff" 92 | ;; 93 | 10d) 94 | weather_icon=" " 95 | weather_quote="It's rainy, it's a great day! \nGet some ramen and watch as the rain falls..." 96 | weather_hex="#6b95ff" 97 | ;; 98 | 10n) 99 | weather_icon=" " 100 | weather_quote=" It's gonna rain tonight it seems \nMake sure your clothes aren't still outside..." 101 | weather_hex="#6b95ff" 102 | ;; 103 | 11d) 104 | weather_icon="" 105 | weather_quote="There's storm for forecast today \nMake sure you don't get blown away..." 106 | weather_hex="#ffeb57" 107 | ;; 108 | 11n) 109 | weather_icon="" 110 | weather_quote="There's gonna be storms tonight \nMake sure you're warm in bed and the windows are shut..." 111 | weather_hex="#ffeb57" 112 | ;; 113 | 13d) 114 | weather_icon=" " 115 | weather_quote="It's gonna snow today \nYou'd better wear thick clothes and make a snowman as well!" 116 | weather_hex="#e3e6fc" 117 | ;; 118 | 13n) 119 | weather_icon=" " 120 | weather_quote="It's gonna snow tonight \nMake sure you get up early tomorrow to see the sights..." 121 | weather_hex="#e3e6fc" 122 | ;; 123 | 40d) 124 | weather_icon=" " 125 | weather_quote="Forecast says it's misty \nMake sure you don't get lost on your way..." 126 | weather_hex="#84afdb" 127 | ;; 128 | 40n) 129 | weather_icon=" " 130 | weather_quote="Forecast says it's a misty night \nDon't go anywhere tonight or you might get lost..." 131 | weather_hex="#84afdb" 132 | ;; 133 | *) 134 | weather_icon=" " 135 | weather_quote="Sort of odd, I don't know what to forecast \nMake sure you have a good time!" 136 | weather_hex="#adadff" 137 | ;; 138 | esac 139 | 140 | echo "$weather_icon" > ${cache_weather_icon} 141 | echo "$weather_description" > ${cache_weather_stat} 142 | echo "$weather_temp""°F" > ${cache_weather_degree} 143 | echo -e "$weather_quote" > ${cache_weather_quote} 144 | echo "$weather_hex" > ${cache_weather_hex} 145 | else 146 | echo "Weather Unavailable" > ${cache_weather_stat} 147 | echo " " > ${cache_weather_icon} 148 | echo -e "Ah well, no weather huh? \nEven if there's no weather, it's gonna be a great day!" > ${cache_weather_quote} 149 | echo "-" > ${cache_weather_degree} 150 | echo "#adadff" > ${tcache_weather_hex} 151 | fi 152 | } 153 | 154 | ## Execute 155 | case $1 in 156 | --getdata) get_weather_data ;; 157 | --icon) cat ${cache_weather_icon} ;; 158 | --temp) cat ${cache_weather_degree} ;; 159 | --hex) cat ${cache_weather_hex} ;; 160 | --stat) cat ${cache_weather_stat} ;; 161 | --quote) cat ${cache_weather_quote} | head -n1 ;; 162 | --quote2) cat ${cache_weather_quote} | tail -n1 ;; 163 | esac 164 | -------------------------------------------------------------------------------- /eww/scripts/wifi: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | status=$(nmcli g | grep -oE "disconnected") 4 | essid=$(nmcli -t -f active,ssid dev wifi | grep '^yes' | cut -d: -f2) 5 | 6 | if [ $status ] ; then 7 | icon="睊" 8 | text="" 9 | col="#575268" 10 | 11 | else 12 | icon="" 13 | text="${essid}" 14 | col="#a1bdce" 15 | fi 16 | 17 | 18 | case $1 in 19 | --COL) echo $col;; 20 | --ESSID) echo $text;; 21 | --ICON) echo $icon;; 22 | esac 23 | 24 | -------------------------------------------------------------------------------- /eww/scripts/workspace: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | #define icons for workspaces 1-9 4 | ic=(0         ) 5 | 6 | #initial check for occupied workspaces 7 | for num in $(hyprctl workspaces | grep " ID" | awk '{print $3}'); do 8 | export o"$num"="$num" 9 | done 10 | 11 | #initial check for focused workspace 12 | for num in $(hyprctl monitors | grep -B 5 "focused: yes" | awk 'NR==1{print $3}'); do 13 | export f"$num"="$num" 14 | export fnum=f"$num" 15 | export mon=$(hyprctl monitors | grep -B 6 "\($num\)" | awk 'NR==1{print $2}') 16 | done 17 | 18 | workspaces() { 19 | if [[ ${1:0:10} == "workspace>" ]] && [[ ${1:11} != "special" ]]; then #set focused workspace 20 | unset -v "$fnum" 21 | num=${1:11} 22 | export f"$num"="$num" 23 | export fnum=f"$num" 24 | 25 | elif [[ ${1:0:11} == "focusedmon>" ]]; then #set focused workspace following monitor focus change 26 | unset -v "$fnum" 27 | string=${1:12} 28 | num=${string##*,} 29 | export mon=${string/,*/} 30 | export f"$num"="$num" 31 | export fnum=f"$num" 32 | 33 | elif [[ ${1:0:14} == "moveworkspace>" ]] && [[ ${1##*,} == "$mon" ]]; then #Set focused workspace following swapactiveworkspace 34 | unset -v "$fnum" 35 | string=${1:15} 36 | num=${string/,*/} 37 | export f"$num"="$num" 38 | export fnum=f"$num" 39 | 40 | elif [[ ${1:0:16} == "createworkspace>" ]]; then #set Occupied workspace 41 | num=${1:17} 42 | export o"$num"="$num" 43 | export onum=o"$num" 44 | 45 | elif [[ ${1:0:17} == "destroyworkspace>" ]]; then #unset unoccupied workspace 46 | num=${1:18} 47 | unset -v o"$num" 48 | fi 49 | } 50 | module() { 51 | #output eww widget 52 | echo "(eventbox :onscroll \"echo {} | sed -e 's/up/-1/g' -e 's/down/+1/g' | xargs hyprctl dispatch workspace\" \ 53 | (box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" :valign \"center\" \ 54 | (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/cyber/scripts/workspace 1\'\" :onrightclick \"hyprctl dispatch workspace 1 && $HOME/.config/hypr/themes/cyber/scripts/default_app\" :class \"0$o1$f1\" \"${ic[1]}\") \ 55 | (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/cyber/scripts/workspace 2\'\" :onrightclick \"hyprctl dispatch workspace 2 && $HOME/.config/hypr/themes/cyber/scripts/default_app\" :class \"0$o2$f2\" \"${ic[2]}\") \ 56 | (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/cyber/scripts/workspace 3\'\" :onrightclick \"hyprctl dispatch workspace 3 && $HOME/.config/hypr/themes/cyber/scripts/default_app\" :class \"0$o3$f3\" \"${ic[3]}\") \ 57 | (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/cyber/scripts/workspace 4\'\" :onrightclick \"hyprctl dispatch workspace 4 && $HOME/.config/hypr/themes/cyber/scripts/default_app\" :class \"0$o4$f4\" \"${ic[4]}\") \ 58 | (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/cyber/scripts/workspace 5\'\" :onrightclick \"hyprctl dispatch workspace 5 && $HOME/.config/hypr/themes/cyber/scripts/default_app\" :class \"0$o5$f5\" \"${ic[5]}\") \ 59 | (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/cyber/scripts/workspace 6\'\" :onrightclick \"hyprctl dispatch workspace 6 && $HOME/.config/hypr/themes/cyber/scripts/default_app\" :class \"0$o6$f6\" \"${ic[6]}\") \ 60 | (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/cyber/scripts/workspace 7\'\" :onrightclick \"hyprctl dispatch workspace 7 && $HOME/.config/hypr/themes/cyber/scripts/default_app\" :class \"0$o7$f7\" \"${ic[7]}\") \ 61 | (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/cyber/scripts/workspace 8\'\" :onrightclick \"hyprctl dispatch workspace 8 && $HOME/.config/hypr/themes/cyber/scripts/default_app\" :class \"0$o8$f8\" \"${ic[8]}\") \ 62 | (button :onclick \"hyprctl dispatch exec \'~/.config/hypr/themes/cyber/scripts/workspace 9\'\" :onrightclick \"hyprctl dispatch workspace 9 && $HOME/.config/hypr/themes/cyber/scripts/default_app\" :class \"0$o9$f9\" \"${ic[9]}\") \ 63 | )\ 64 | )" 65 | } 66 | 67 | module 68 | 69 | socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r event; do 70 | workspaces "$event" 71 | module 72 | done 73 | -------------------------------------------------------------------------------- /eww/scripts/workspace_bak: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | #define icons for workspaces 1-9 4 | ic=(0     輸    ) 5 | 6 | workspaces() { 7 | 8 | unset -v \ 9 | o1 o2 o3 o4 o5 o6 o7 o8 o9 \ 10 | f1 f2 f3 f4 f5 f6 f7 f8 f9 11 | 12 | # check if Occupied 13 | for num in $(hyprctl workspaces | grep ID | awk '{print $3}'); do 14 | export o"$num"="$num" 15 | done 16 | 17 | 18 | #check if Focused 19 | for num in $(hyprctl monitors | grep -B 4 "active: yes" | awk 'NR==1{print $3}'); do 20 | export f"$num"="$num" 21 | done 22 | 23 | echo "(eventbox :onscroll \"echo {} | sed -e 's/up/-1/g' -e 's/down/+1/g' | xargs hyprctl dispatch workspace\" \ 24 | (box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"true\" \ 25 | (button :onclick \"~/.config/hypr/neon/scripts/workspace 1\" :onrightclick \"~/.config/hypr/neon/scripts/workspace 1 && ~/.config/hypr/neon/scripts/default_app\" :class \"0$o1$f1\" \"${ic[1]}\") \ 26 | (button :onclick \"~/.config/hypr/neon/scripts/workspace 2\" :onrightclick \"~/.config/hypr/neon/scripts/workspace 2 && ~/.config/hypr/neon/scripts/default_app\" :class \"0$o2$f2\" \"${ic[2]}\") \ 27 | (button :onclick \"~/.config/hypr/neon/scripts/workspace 3\" :onrightclick \"~/.config/hypr/neon/scripts/workspace 3 && ~/.config/hypr/neon/scripts/default_app\" :class \"0$o3$f3\" \"${ic[3]}\") \ 28 | (button :onclick \"~/.config/hypr/neon/scripts/workspace 4\" :onrightclick \"~/.config/hypr/neon/scripts/workspace 4 && ~/.config/hypr/neon/scripts/default_app\" :class \"0$o4$f4\" \"${ic[4]}\") \ 29 | (button :onclick \"~/.config/hypr/neon/scripts/workspace 5\" :onrightclick \"~/.config/hypr/neon/scripts/workspace 5 && ~/.config/hypr/neon/scripts/default_app\" :class \"0$o5$f5\" \"${ic[5]}\") \ 30 | (button :onclick \"~/.config/hypr/neon/scripts/workspace 6\" :onrightclick \"~/.config/hypr/neon/scripts/workspace 6 && ~/.config/hypr/neon/scripts/default_app\" :class \"0$o6$f6\" \"${ic[6]}\") \ 31 | (button :onclick \"~/.config/hypr/neon/scripts/workspace 7\" :onrightclick \"~/.config/hypr/neon/scripts/workspace 7 && ~/.config/hypr/neon/scripts/default_app\" :class \"0$o7$f7\" \"${ic[7]}\") \ 32 | (button :onclick \"~/.config/hypr/neon/scripts/workspace 8\" :onrightclick \"~/.config/hypr/neon/scripts/workspace 8 && ~/.config/hypr/neon/scripts/default_app\" :class \"0$o8$f8\" \"${ic[8]}\") \ 33 | (button :onclick \"~/.config/hypr/neon/scripts/workspace 9\" :onrightclick \"~/.config/hypr/neon/scripts/workspace 9 && ~/.config/hypr/neon/scripts/default_app\" :class \"0$o9$f9\" \"${ic[9]}\") \ 34 | )\ 35 | )" 36 | } 37 | 38 | workspaces 39 | #tail -f /tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/hyprland.log | grep --line-buffered "Changed to workspace" | while read -r; do 40 | socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r; do 41 | workspaces 42 | done 43 | -------------------------------------------------------------------------------- /eww/sidebar.yuck: -------------------------------------------------------------------------------- 1 | (defwindow sidebar 2 | :geometry (geometry :x "0px" 3 | :y "10px" 4 | :width "2px" 5 | :height "93%" 6 | :anchor "bottom left") 7 | :stacking "fg" 8 | :monitor "0" 9 | (sidebar)) 10 | 11 | (defwidget sidebar [] 12 | (eventbox 13 | :halign "start" 14 | :onhover "${EWW_CMD} update side=true" 15 | :onhoverlost "${EWW_CMD} update side=false" 16 | (revealer 17 | :transition "slideright" 18 | :reveal side 19 | :duration "550ms" 20 | (side)))) 21 | (defvar side false) 22 | 23 | ;; background 24 | (defwidget side [] 25 | (box 26 | :class "leftside" 27 | :orientation "v" 28 | :space-evenly "false" 29 | :spacing "30" 30 | :halign "start" 31 | (fetch) 32 | (top) 33 | (music-side) 34 | (system-side) 35 | (tray)) 36 | ) 37 | 38 | (defwidget top [] 39 | (box 40 | :orientation "h" 41 | :space-evenly "false" 42 | :spacing "30" 43 | :halign "center" 44 | (date) 45 | (weather)) 46 | ) 47 | 48 | ;; Music Widgets 49 | (defwidget music-side [] 50 | (box 51 | :class "music-player" 52 | :orientation "h" 53 | :space-evenly "false" 54 | :spacing 15 55 | :halign "center" 56 | :valign "start" 57 | :hexpand "true" 58 | :width "" 59 | (box 60 | :class "album_art" 61 | :style "background-image: url('${art}');") 62 | (box 63 | :orientation "v" 64 | :space-evenly "false" 65 | :valign "center" 66 | :halign "center" 67 | :spacing 10 68 | (label 69 | :class "song" 70 | :limit-width 15 71 | :text title) 72 | (label 73 | :class "artist" 74 | :limit-width 15 75 | :text artist) 76 | (box 77 | :orientation "h" 78 | :space-evenly "false" 79 | :valign "center" 80 | :halign "center" 81 | :spacing 25 82 | (button :class "btn_prev" :onclick "scripts/music previous" "󰒮") 83 | (button :class "btn_play" :onclick "scripts/music toggle" playpause) 84 | (button :class "btn_next" :onclick "scripts/music next" "󰒭"))))) 85 | 86 | (defpoll art :interval "1s" "scripts/music coverloc") 87 | (defpoll title :interval "1s" "scripts/music title") 88 | (defpoll artist :interval "1s" "scripts/music artist") 89 | (defpoll playpause :interval "1s" "scripts/music statusicon") 90 | 91 | ;; weather 92 | (defwidget weather [] 93 | (box 94 | :class "weather" 95 | :orientation "v" 96 | :spacing -2 97 | :space-evenly "false" 98 | :vexpand "true" 99 | :hexpand "false" 100 | :valign "start" 101 | :halign "center" 102 | (label 103 | :class "iconweather" 104 | :halign "center" 105 | :valign "center" 106 | :style "color: ${HEX};" :text ICON) 107 | (button 108 | :onclick "scripts/weather --getdata && eww reload &" 109 | :class "label_temp" 110 | :valign "center" 111 | :halign "center" 112 | "${TEMP}"))) 113 | 114 | (defwidget date [] 115 | (box :class "date" :orientation "v" :valign "start" :space-evenly "false" :halign "center" 116 | (label 117 | :text DAY) 118 | (label 119 | :text POO) 120 | (label :class "foo" 121 | :text FOO))) 122 | 123 | (defpoll FOO :interval "6h" "date '+%d'") 124 | (defpoll DAY :interval "6h" "date '+%A'") 125 | (defpoll POO :interval "6h" "date '+%B'") 126 | 127 | 128 | ;; Weather vars 129 | (defpoll ICON :interval "15m" `scripts/weather --icon`) 130 | (defpoll TEMP :interval "15m" `scripts/weather --temp`) 131 | (defpoll HEX :interval "15m" `scripts/weather --hex`) 132 | 133 | ;; <-- System --> 134 | (defwidget system-side [] 135 | (box 136 | :class "stats-box" 137 | :space-evenly "false" 138 | :width "300px" 139 | :orientation "v" 140 | :valign "start" 141 | :halign "center" 142 | :spacing 12 143 | (box 144 | :class "stats" 145 | :hexpand "false" 146 | :vexpand "false" 147 | :space-evenly "false" 148 | (label 149 | :tooltip "CPU Usage: ${round(EWW_CPU.avg, 0)}%" 150 | :class "stats-icon" :text "") 151 | (scale 152 | :min 0 153 | :max 101 154 | :active false 155 | :value {EWW_CPU.avg} 156 | :class "scale" 157 | :width 280)) 158 | (box 159 | :class "stats" 160 | :hexpand "false" 161 | :vexpand "false" 162 | :space-evenly "false" 163 | (label 164 | :tooltip "Memory Used: ${round(EWW_RAM.used_mem_perc, 0)}%" 165 | :class "stats-icon" 166 | :text "﬙") 167 | (scale 168 | :min 0 169 | :max 101 170 | :active false 171 | :value {EWW_RAM.used_mem_perc} 172 | :class "scale" 173 | :width 280)) 174 | (box 175 | :class "stats" 176 | :hexpand "false" 177 | :vexpand "false" 178 | :space-evenly "false" 179 | (label 180 | :tooltip "Root Drive: ${round(EWW_DISK["/"].used_perc, 0)}% Full" 181 | :class "stats-icon" 182 | :text "") 183 | (scale 184 | :min 0 185 | :max 101 186 | :active false 187 | :value {(EWW_DISK["/"].used / EWW_DISK["/"].total) * 100} 188 | :class "scale" 189 | :width 280)) 190 | (box 191 | :class "stats" 192 | :hexpand "false" 193 | :vexpand "false" 194 | :space-evenly "false" 195 | (button 196 | :tooltip "Volume: ${volume_percent}%" 197 | :onclick "amixer set Master toggle" 198 | :onrightclick "alsamixer &" 199 | :class "stats-icon" "墳") 200 | (scale 201 | :min 0 202 | :max 101 203 | :active true 204 | :value volume_percent 205 | :class "scale" 206 | :width 280 207 | :onchange "amixer sset Master {}%") 208 | ))) 209 | 210 | 211 | (defwidget tray [] 212 | (box 213 | :class "buttons" 214 | :orientation "h" 215 | :space-evenly "false" 216 | :halign "center" 217 | :valign "start" 218 | :spacing "2" 219 | (button 220 | :class "poweroff" 221 | :halign "center" 222 | :tooltip "Shut Down" 223 | :onclick "kitty poweroff &" "⏻") 224 | (button 225 | :class "reboot" 226 | :halign "center" 227 | :tooltip "Reboot" 228 | :onclick "kitty reboot &" "") 229 | (button 230 | :class "firmware" 231 | :halign "center" 232 | :tooltip "Reboot to EFI" 233 | :onclick "kitty systemctl reboot --firmware &" "󰚗") 234 | (button 235 | :class "exit" 236 | :halign "center" 237 | :tooltip "Quit Hyprland" 238 | :onclick "hyprctl dispatch exit exit" "󰈆") 239 | (button 240 | :class "restart" 241 | :halign "center" 242 | :tooltip "edit Config" 243 | :onclick "footclient nvim ~/.config/hypr/hyprland.conf &" ""))) 244 | 245 | (defpoll uptime :interval "1m" "uptime -p | sed -e 's/up //;s/ hours,/h/;s/ minutes/m/'") 246 | (defpoll packages :interval "5m" `pacman -Q | wc -l`) 247 | (defpoll kernal :interval "5m" `uname -r`) 248 | (defpoll name :interval "5m" `whoami`) 249 | (defpoll host :interval "5m" `uname -n`) 250 | (defpoll wm :interval "5m" `echo $XDG_CURRENT_DESKTOP`) 251 | 252 | (defwidget fetch [] 253 | (box 254 | :class "fetch" 255 | :orientation "v" 256 | :space-evenly "false" 257 | :halign "center" 258 | :valign "start" 259 | :spacing "10" 260 | (label 261 | :class "host" 262 | :halign "start" 263 | :text " : ${name}@${host}") 264 | (label 265 | :class "wm" 266 | :halign "start" 267 | :text " : ${wm}") 268 | (label 269 | :class "uptime" 270 | :halign "start" 271 | :text " : ${uptime}") 272 | (label 273 | :class "packages" 274 | :halign "start" 275 | :text " : ${packages}") 276 | (label 277 | :class "kernal" 278 | :halign "start" 279 | :text " : ${kernal}") 280 | ) 281 | ) 282 | -------------------------------------------------------------------------------- /eww/system-menu.yuck: -------------------------------------------------------------------------------- 1 | (defwidget system-menu [] 2 | (box 3 | :class "system-menu-box" 4 | :space-evenly "false" 5 | :orientation "v" 6 | (box 7 | :class "top-row" 8 | :space-evenly false 9 | (label 10 | :class "time" 11 | :text {clock_time}) 12 | (box 13 | :class "date-box" 14 | :space-evenly "false" 15 | (label 16 | :class "date" 17 | :text {clock_date}))) 18 | 19 | (centerbox 20 | :class "system-row" 21 | (box 22 | :class "wifi-box" 23 | :space-evenly "false" 24 | :orientation "v" 25 | (box 26 | :class "element" 27 | :space-evenly "false" 28 | (button 29 | :class "wifi-button" 30 | :onclick "scripts/net toggle" 31 | {WLAN_ICON}) 32 | (label 33 | :class "separator" 34 | :text "|") 35 | (button 36 | :class "wifi-arrow-btn" 37 | :onclick "eww close system-menu && scripts/launchApps network" 38 | "")) 39 | (label 40 | :text {ESSID_WLAN} 41 | :xalign 0.5 42 | :limit-width 13)) 43 | 44 | (box 45 | :class "bluetooth-box" 46 | :space-evenly "false" 47 | :orientation "v" 48 | (box 49 | :class "element" 50 | :space-evenly "false" 51 | (button 52 | :class "bluetooth-button" 53 | :onclick "scripts/bluetooth toggle" 54 | "") 55 | (label 56 | :class "separator" 57 | :text "|") 58 | (button 59 | :class "bluetooth-arrow-btn" 60 | :onclick "eww close system-menu && blueberry" 61 | "")) 62 | (label 63 | :text "Soundcore life Q35" 64 | :wrap "true" 65 | :xalign "0.0" 66 | )) 67 | 68 | (box 69 | :class "airplane-box" 70 | :space-evenly "false" 71 | :orientation "v" 72 | (box 73 | :class "element" 74 | (button 75 | :class "airplane-button" 76 | :onclick "scripts/airplane toggle" 77 | "")) 78 | (label 79 | :text "Airplane Mode" 80 | :xalign 0.5 81 | :limit-width 14))) 82 | 83 | (box 84 | :class "sliders" 85 | :orientation "v" 86 | (box 87 | :class "volume-slider-box" 88 | :space-evenly "false" 89 | :orientation "h" 90 | (button 91 | :class "volume-icon" 92 | :onclick "scripts/volume setmute" 93 | "") 94 | (scale 95 | :class "volume-bar" 96 | :value {volume_percent} 97 | :tooltip "volume on ${volume_percent}%" 98 | :onchange "scripts/volume setvol SINK {}")) 99 | (box 100 | :class "volume-slider-box" 101 | :space-evenly "false" 102 | :orientation "h" 103 | (button 104 | :class "volume-icon" 105 | :onclick "scripts/volume setmute SOURCE" 106 | "") 107 | (scale 108 | :class "volume-bar" 109 | :value {mic_percent} 110 | :tooltip "mic on ${mic_percent}%" 111 | :onchange "scripts/volume setvol SOURCE {}")) 112 | (box 113 | :orientation "h" 114 | :class "brightness-slider-box" 115 | :space-evenly "false" 116 | (button 117 | :class "brightness-slider-icon" 118 | "") 119 | (scale 120 | :class "brightness-slider" 121 | :value {brightness_percent} 122 | :marks true 123 | :onchange "light -S {}"))) 124 | 125 | (box 126 | :class "system-info-box" 127 | :orientation "v" 128 | 129 | ; cpu 130 | (box 131 | :class "sys-box" 132 | :space-evenly "false" 133 | :halign "start" 134 | (circular-progress 135 | :value "${EWW_CPU.avg}" 136 | :class "sys-cpu" 137 | :thickness "3" 138 | (label 139 | :text "" 140 | :class "sys-icon-cpu")) 141 | (box 142 | :orientation "v" 143 | :vexpand "false" 144 | (label 145 | :text "cpu" 146 | :halign "start" 147 | :class "sys-text-cpu") 148 | (label 149 | :text "${round(EWW_CPU.avg,2)}%" 150 | :halign "start" 151 | :class "sys-text-sub") 152 | (label 153 | :text "${EWW_CPU.cores[0].freq} MHz" 154 | :halign "start" 155 | :class "sys-text-sub"))) 156 | 157 | ; memory 158 | (box 159 | :class "sys-box" 160 | :space-evenly "false" 161 | :halign "start" 162 | (circular-progress 163 | :value {round(EWW_RAM.available_mem / EWW_RAM.total_mem)} 164 | :class "sys-mem" 165 | :thickness "3" 166 | (label 167 | :text "" 168 | :class "sys-icon-mem")) 169 | (box 170 | :orientation "v" 171 | (label 172 | :text "memory" 173 | :halign "start" 174 | :class "sys-text-mem" ) 175 | (label 176 | :text "${round((EWW_RAM.available_mem),0)} | ${round((EWW_RAM.total_mem / 1024),0)}" 177 | :halign "start" 178 | :class "sys-text-sub" ))) 179 | 180 | ; battery 181 | (box 182 | :class "sys-box" 183 | :space-evenly "false" 184 | (circular-progress 185 | :value "${EWW_BATTERY["BAT0"].capacity}" 186 | :class "sys-bat" 187 | :style "color: #FFFFFF;" 188 | :thickness 3 189 | (label 190 | :text "" 191 | :style "color: #FFFFFF;" 192 | :class "sys-icon-bat" )) 193 | (box 194 | :orientation "v" 195 | (label 196 | :text "battery" 197 | :halign "start" 198 | :class "sys-text-bat" ))) 199 | 200 | (box 201 | :class "bottom-row" 202 | (box 203 | :class "battery-box" 204 | :space-evenly "false" 205 | (label 206 | :class "battery-icon" 207 | :text "") 208 | (label 209 | :class "battery-text" 210 | :text {EWW_BATTERY["BAT0"].capacity})) 211 | (box 212 | :class "side-options-box" 213 | :space-evenly "false" 214 | :spacing 5 215 | :halign "end" 216 | (button 217 | :class "power-button" 218 | :onclick "wlogout" "")))))) 219 | 220 | ;; windows 221 | (defwindow system-menu 222 | :stacking "fg" 223 | :windowtype "dock" 224 | :wm-ignore true 225 | :monitor "0" 226 | :geometry (geometry 227 | :x "0" 228 | :y "0" 229 | :width "0%" 230 | :height "0%" 231 | :anchor "right top") 232 | (system-menu)) 233 | -------------------------------------------------------------------------------- /foot/foot.ini: -------------------------------------------------------------------------------- 1 | # -*- conf -*- 2 | 3 | shell=fish 4 | # term=foot (or xterm-256color if built with -Dterminfo=disabled) 5 | term=xterm-256color 6 | # login-shell=no 7 | 8 | # app-id=foot 9 | # title=foot 10 | # locked-title=no 11 | 12 | #font=monospace:size=11 13 | font=Noto Sans Mono:size=12 14 | # font-bold= 15 | # font-italic= 16 | # font-bold-italic= 17 | # line-height= 18 | letter-spacing=1 19 | # horizontal-letter-offset=0 20 | # vertical-letter-offset=0 21 | # underline-offset= 22 | # box-drawings-uses-font-glyphs=no 23 | dpi-aware=no 24 | 25 | # initial-window-size-pixels=700x500 # Or, 26 | # initial-window-size-chars= 27 | # initial-window-mode=windowed 28 | pad=4x4 # optionally append 'center' 29 | # resize-delay-ms=100 30 | 31 | # notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body} 32 | 33 | # bold-text-in-bright=no 34 | # bell=none 35 | # word-delimiters=,│`|:"'()[]{}<> 36 | # selection-target=primary 37 | # workers= 38 | 39 | [bell] 40 | # urgent=no 41 | # notify=no 42 | # command= 43 | # command-focused=no 44 | 45 | [scrollback] 46 | lines=10000 47 | # multiplier=3.0 48 | # indicator-position=relative 49 | # indicator-format= 50 | 51 | [url] 52 | # launch=xdg-open ${url} 53 | # label-letters=sadfjklewcmpgh 54 | # osc8-underline=url-mode 55 | # protocols=http, https, ftp, ftps, file, gemini, gopher 56 | # uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="' 57 | 58 | [cursor] 59 | # style=block 60 | # color=111111 dcdccc 61 | color=282a36 f8f8f2 62 | # blink=no 63 | # beam-thickness=1.5 64 | # underline-thickness= 65 | 66 | [mouse] 67 | # hide-when-typing=no 68 | # alternate-scroll-mode=yes 69 | 70 | #DoomOne Colors 71 | #[colors] 72 | #alpha=0.3 73 | #foreground=bbc2cf 74 | #background=444444 75 | #regular0=282c34 # black 76 | #regular1=ff6c6b # red 77 | #regular2=98be65 # green 78 | #regular3=ecbe7b # yellow 79 | #regular4=51afef # blue 80 | #regular5=c678dd # magenta 81 | #regular6=46d9ff # cyan 82 | #regular7=bfbfbf # white 83 | #bright0=666666 # bright black 84 | #bright1=da8548 # bright red 85 | #bright2=4db5bd # bright green 86 | #bright3=ECBE7B # bright yellow 87 | #bright4=51afef # bright blue 88 | #bright5=c678dd # bright magenta 89 | #bright6=46D9FF # bright cyan 90 | #bright7=dfdfdf # bright white 91 | # 16 = <256-color palette #16> 92 | # ... 93 | # 255 = <256-color palette #255> 94 | # selection-foreground= 95 | # selection-background= 96 | # jump-labels= 97 | # urls= 98 | 99 | ##Dracula Colors 100 | # [colors] 101 | # alpha=0.3 102 | # foreground=f8f8f2 103 | # background=444444 104 | # regular0=000000 # black 105 | # regular1=ff5555 # red 106 | # regular2=50fa7b # green 107 | # regular3=f1fa8c # yellow 108 | # regular4=bd93f9 # blue 109 | # regular5=ff79c6 # magenta 110 | # regular6=8be9fd # cyan 111 | # regular7=bfbfbf # white 112 | # bright0=4d4d4d # bright black 113 | # bright1=ff6e67 # bright red 114 | # bright2=5af78e # bright green 115 | # bright3=f4f99d # bright yellow 116 | # bright4=caa9fa # bright blue 117 | # bright5=ff92d0 # bright magenta 118 | # bright6=9aedfe # bright cyan 119 | # bright7=e6e6e6 # bright white 120 | 121 | ##Floppy Colors 122 | # [colors] 123 | # alpha=0.3 124 | # foreground=f8f8f2 125 | # background=444444 126 | # regular0=3D4C5F # black 127 | # regular1=EE4F84 # red 128 | # regular2=53E2AE # green 129 | # regular3=F1FF52 # yellow 130 | # regular4=6498EF # blue 131 | # regular5=985EFF # magenta 132 | # regular6=24D1E7 # cyan 133 | # regular7=E5E5E5 # white 134 | # bright0=56687E # bright black 135 | # bright1=F48FB1 # bright red 136 | # bright2=A1EFD3 # bright green 137 | # bright3=F1FA8C # bright yellow 138 | # bright4=92B6F4 # bright blue 139 | # bright5=BD99FF # bright magenta 140 | # bright6=87DFEB # bright cyan 141 | # bright7=F8F8F2 # bright white 142 | 143 | ##Lovelace Colors 144 | # [colors] 145 | # alpha=0.3 146 | # foreground=f8f8f2 147 | # background=444444 148 | # regular0=282A36 # black 149 | # regular1=F37F97 # red 150 | # regular2=5ADECD # green 151 | # regular3=F2A272 # yellow 152 | # regular4=8897F4 # blue 153 | # regular5=C574DD # magenta 154 | # regular6=79E6F3 # cyan 155 | # regular7=FDFDFD # white 156 | # bright0=414458 # bright black 157 | # bright1=FF4971 # bright red 158 | # bright2=18E3C8 # bright green 159 | # bright3=FF8037 # bright yellow 160 | # bright4=556FFF # bright blue 161 | # bright5=B043D1 # bright magenta 162 | # bright6=3FDCEE # bright cyan 163 | # bright7=BEBEC1 # bright white 164 | 165 | ##Amarena Colors 166 | # [colors] 167 | # alpha=0.3 168 | # foreground=FFFFFF 169 | # background=1A2026 170 | # regular0=242D35 #black 171 | # regular1=FB6396 #red 172 | # regular2=94CF95 #green 173 | # regular3=F692B2 #yellow 174 | # regular4=6EC1D6 #blue 175 | # regular5=CD84C8 #magenta 176 | # regular6=7FE4D2 #cyan 177 | # regular7=FFFFFF #white 178 | # bright0=526170 #bright black 179 | # bright1=F92D72 #bright red 180 | # bright2=6CCB6E #bright green 181 | # bright3=F26190 #bright yellow 182 | # bright4=4CB9D6 #bright blue 183 | # bright5=C269BC #bright magenta 184 | # bright6=58D6BF #bright cyan 185 | # bright7=F4F5F2 #bright white 186 | 187 | #Catpuccin Frappe 188 | [colors] 189 | alpha=0.3 190 | foreground=c6d0f5 # Text 191 | background=444444 # Base 192 | regular0=51576d # Surface 1 193 | regular1=e78284 # red 194 | regular2=a6d189 # green 195 | regular3=e5c890 # yellow 196 | regular4=8caaee # blue 197 | regular5=f4b8e4 # pink 198 | regular6=81c8be # teal 199 | regular7=b5bfe2 # Subtext 1 200 | bright0=626880 # Surface 2 201 | bright1=e78284 # red 202 | bright2=a6d189 # green 203 | bright3=e5c890 # yellow 204 | bright4=8caaee # blue 205 | bright5=f4b8e4 # pink 206 | bright6=81c8be # teal 207 | bright7=a5adce # Subtext 0 208 | 209 | ##Catpuccin Latte 210 | #[colors] 211 | # alpha=0.3 212 | # foreground=4c4f69 # Text 213 | # background=444444 # Base 214 | # regular0=5c5f77 # Subtext 1 215 | # regular1=d20f39 # red 216 | # regular2=40a02b # green 217 | # regular3=df8e1d # yellow 218 | # regular4=1e66f5 # blue 219 | # regular5=ea76cb # pink 220 | # regular6=179299 # teal 221 | # regular7=acb0be # Surface 2 222 | # bright0=6c6f85 # Subtext 0 223 | # bright1=d20f39 # red 224 | # bright2=40a02b # green 225 | # bright3=df8e1d # yellow 226 | # bright4=1e66f5 # blue 227 | # bright5=ea76cb # pink 228 | # bright6=179299 # teal 229 | # bright7=bcc0cc # Surface 1 230 | 231 | [csd] 232 | # preferred=server 233 | # size=26 234 | # font= 235 | # color= 236 | # button-width=26 237 | # button-color= 238 | # button-minimize-color= 239 | # button-maximize-color= 240 | # button-close-color= 241 | 242 | [key-bindings] 243 | # scrollback-up-page=Shift+Page_Up 244 | # scrollback-up-half-page=none 245 | # scrollback-up-line=none 246 | # scrollback-down-page=Shift+Page_Down 247 | # scrollback-down-half-page=none 248 | # scrollback-down-line=none 249 | # clipboard-copy=Control+Shift+c 250 | # clipboard-paste=Control+Shift+v 251 | # primary-paste=Shift+Insert 252 | # search-start=Control+Shift+r 253 | # font-increase=Control+plus Control+equal Control+KP_Add 254 | # font-decrease=Control+minus Control+KP_Subtract 255 | # font-reset=Control+0 Control+KP_0 256 | # spawn-terminal=Control+Shift+n 257 | # minimize=none 258 | # maximize=none 259 | # fullscreen=none 260 | # pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none 261 | # pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none 262 | # pipe-selected=[xargs -r firefox] none 263 | # show-urls-launch=Control+Shift+u 264 | # show-urls-copy=none 265 | 266 | [search-bindings] 267 | # cancel=Control+g Control+c Escape 268 | # commit=Return 269 | # find-prev=Control+r 270 | # find-next=Control+s 271 | # cursor-left=Left Control+b 272 | # cursor-left-word=Control+Left Mod1+b 273 | # cursor-right=Right Control+f 274 | # cursor-right-word=Control+Right Mod1+f 275 | # cursor-home=Home Control+a 276 | # cursor-end=End Control+e 277 | # delete-prev=BackSpace 278 | # delete-prev-word=Mod1+BackSpace Control+BackSpace 279 | # delete-next=Delete 280 | # delete-next-word=Mod1+d Control+Delete 281 | # extend-to-word-boundary=Control+w 282 | # extend-to-next-whitespace=Control+Shift+w 283 | # clipboard-paste=Control+v Control+y 284 | # primary-paste=Shift+Insert 285 | 286 | [url-bindings] 287 | # cancel=Control+g Control+c Control+d Escape 288 | # toggle-url-visible=t 289 | 290 | [mouse-bindings] 291 | # primary-paste=BTN_MIDDLE 292 | # select-begin=BTN_LEFT 293 | # select-begin-block=Control+BTN_LEFT 294 | # select-extend=BTN_RIGHT 295 | # select-extend-character-wise=Control+BTN_RIGHT 296 | # select-word=BTN_LEFT-2 297 | # select-word-whitespace=Control+BTN_LEFT-2 298 | # select-row=BTN_LEFT-3 299 | -------------------------------------------------------------------------------- /rofi/global/.gitignore: -------------------------------------------------------------------------------- 1 | history.txt 2 | -------------------------------------------------------------------------------- /rofi/global/icons/ddg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 20 | 22 | 23 | 25 | image/svg+xml 26 | 28 | 29 | 30 | 31 | 32 | 34 | 55 | 615 | 616 | -------------------------------------------------------------------------------- /rofi/global/icons/google.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 20 | 22 | 23 | 25 | image/svg+xml 26 | 28 | 29 | 30 | 31 | 32 | 34 | 55 | 365 | 366 | -------------------------------------------------------------------------------- /rofi/global/icons/history.svg: -------------------------------------------------------------------------------- 1 | 2 | 19 | 21 | 22 | 24 | image/svg+xml 25 | 27 | 28 | 29 | 30 | 31 | 33 | 54 | 58 | 66 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /rofi/global/icons/result.svg: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 20 | 22 | image/svg+xml 23 | 25 | 26 | 27 | 28 | 29 | 31 | 52 | 57 | 58 | -------------------------------------------------------------------------------- /rofi/global/icons/suggestion.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /rofi/global/rofi-spotlight.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | TMP_DIR="/tmp/rofi/${USER}/" 4 | 5 | PREV_LOC_FILE="${TMP_DIR}rofi_fb_prevloc" 6 | CURRENT_FILE="${TMP_DIR}rofi_fb_current_file" 7 | 8 | MY_PATH="$(realpath "$0" | xargs dirname)" 9 | HIST_FILE="${MY_PATH}/history.txt" 10 | 11 | OPENER=xdg-open 12 | TERM_EMU=kitty 13 | TEXT_EDITOR=$EDITOR 14 | FILE_MANAGER=xdg-open 15 | BLUETOOTH_SEND=blueman-sendto 16 | 17 | CUR_DIR=$PWD 18 | NEXT_DIR="" 19 | FD_INSTALLED=$(command -v fd) 20 | 21 | SHOW_HIDDEN=false 22 | 23 | # Setup menu options 24 | declare -a OPEN_FILE_LOCATION=( 25 | "Open file location in ${TERM_EMU}" 26 | "Open file location in ${FILE_MANAGER}" 27 | ) 28 | declare -a RUN_COMMANDS=( 29 | "Run" 30 | "Execute in ${TERM_EMU}" 31 | ) 32 | declare -a STANDARD_CONTROLS=( 33 | "Move to trash" 34 | "Delete" 35 | "Back" 36 | ) 37 | declare -a SHELL_NO_X_OPTIONS=( 38 | "Edit" 39 | "${OPEN_FILE_LOCATION[@]}" 40 | "${STANDARD_CONTROLS[@]}" 41 | ) 42 | declare -a SHELL_OPTIONS=( 43 | "${RUN_COMMANDS[@]}" 44 | "${SHELL_NO_X_OPTIONS[@]}" 45 | ) 46 | declare -a BIN_NO_X_OPTIONS=( 47 | "${OPEN_FILE_LOCATION[@]}" 48 | "Back" 49 | ) 50 | declare -a BIN_OPTIONS=( 51 | "${RUN_COMMANDS[@]}" 52 | "${BIN_NO_X_OPTIONS[@]}" 53 | ) 54 | declare -a TEXT_OPTIONS=("${SHELL_NO_X_OPTIONS[@]}") 55 | declare -a HTML_OPTIONS=( 56 | "Open" 57 | "Edit" 58 | "${OPEN_FILE_LOCATION[@]}" 59 | "${STANDARD_CONTROLS[@]}" 60 | ) 61 | declare -a XCF_SVG_OPTIONS=( 62 | "Open" 63 | "${OPEN_FILE_LOCATION[@]}" 64 | "${STANDARD_CONTROLS[@]}" 65 | ) 66 | declare -a IMAGE_OPTIONS=( 67 | "Open" 68 | "Send via Bluetooth" 69 | "${OPEN_FILE_LOCATION[@]}" 70 | "${STANDARD_CONTROLS[@]}" 71 | ) 72 | 73 | declare -a ALL_OPTIONS=() 74 | 75 | # Combine all context menu 76 | COMBINED_OPTIONS=( 77 | "${SHELL_OPTIONS[@]}" 78 | "${IMAGE_OPTIONS[@]}" 79 | ) 80 | 81 | # Remove duplicates 82 | ALL_OPTIONS=("$(printf '%s\n' "${COMBINED_OPTIONS[@]}" | sort -u)") 83 | 84 | # Create tmp dir for rofi 85 | [ ! -d "${TMP_DIR}" ] && mkdir -p "${TMP_DIR}"; 86 | 87 | # Create hist file if it doesn't exist 88 | [ ! -f "${HIST_FILE}" ] && touch "${HIST_FILE}" 89 | 90 | # Help message 91 | if [ -n "$*" ] && [[ "$*" = ":help" ]] 92 | then 93 | echo -en "Rofi Spotlight 94 | A Rofi with file and web searching functionality 95 | 96 | Commands: 97 | :help to print this help message 98 | :h or :hidden to show hidden files/dirs 99 | :sh or :show_hist to show search history 100 | :ch or :clear_hist to clear search history 101 | :xdg to jump to an xdg directory 102 | Examples: 103 | :xdg DOCUMENTS 104 | :xdg DOWNLOADS 105 | Also supports incomplete path: 106 | Examples: 107 | :xdg doc 108 | :xdg down 109 | For more info about XDG dirs, see: 110 | \`man xdg-user-dir\` 111 | 112 | File search syntaxes: 113 | ! to search for a file and web suggestions 114 | ? to search parent directories 115 | Examples: 116 | !half-life 3 117 | ?portal 3 118 | 119 | Web search syntaxes: 120 | ! to gets search suggestions 121 | :web/:w to also to gets search suggestions 122 | :webbro/:wb to search directly from your browser 123 | Examples: 124 | !how to install archlinux 125 | :web how to install gentoo 126 | :w how to make a nuclear fission 127 | :webbro how to install wine in windowsxp 128 | Back\0icon\x1fdraw-arrow-back\n" 129 | 130 | exit 131 | fi 132 | 133 | # Return the icon string 134 | function icon_file_type(){ 135 | icon_name="" 136 | mime_type=$(file --mime-type -b "${1}") 137 | 138 | case "${mime_type}" in 139 | "inode/directory") 140 | case "${1}" in 141 | "Desktop/" ) 142 | icon_name='folder-blue-desktop' 143 | ;; 144 | "Documents/" ) 145 | icon_name='folder-blue-documents' 146 | ;; 147 | "Downloads/" ) 148 | icon_name='folder-blue-downloads' 149 | ;; 150 | "Music/" ) 151 | icon_name='folder-blue-music' 152 | ;; 153 | "Pictures/" ) 154 | icon_name='folder-blue-pictures' 155 | ;; 156 | "Public/" ) 157 | icon_name='folder-blue-public' 158 | ;; 159 | "Templates/" ) 160 | icon_name='folder-blue-templates' 161 | ;; 162 | "Videos/" ) 163 | icon_name='folder-blue-videos' 164 | ;; 165 | "root/" ) 166 | icon_name='folder-root' 167 | ;; 168 | "home/" | "${USER}/") 169 | icon_name='folder-home' 170 | ;; 171 | *"$" ) 172 | icon_name='folder-blue' 173 | ;; 174 | *) 175 | icon_name='folder-blue' 176 | ;; 177 | esac 178 | ;; 179 | "inode/symlink" ) 180 | icon_name='inode-symlink' 181 | ;; 182 | "audio/flac" | "audio/mpeg" ) 183 | icon_name='music' 184 | ;; 185 | "video/mp4" ) 186 | icon_name='video-mp4' 187 | ;; 188 | "video/x-matroska" ) 189 | icon_name=video-x-matroska 190 | ;; 191 | "image/x-xcf" ) 192 | # notify-send '123' 193 | icon_name='image-x-xcf' 194 | ;; 195 | "image/jpeg" | "image/png" | "image/svg+xml") 196 | icon_name="${CUR_DIR}/${1}" 197 | ;; 198 | "image/gif" ) 199 | icon_name='gif' 200 | ;; 201 | "image/vnd.adobe.photoshop" ) 202 | icon_name='image-vnd.adobe.photoshop' 203 | ;; 204 | "image/webp" ) 205 | icon_name='gif' 206 | ;; 207 | "application/x-pie-executable" ) 208 | icon_name='binary' 209 | ;; 210 | "application/pdf" ) 211 | icon_name='pdf' 212 | ;; 213 | "application/zip" ) 214 | icon_name='application-zip' 215 | ;; 216 | "application/x-xz" ) 217 | icon_name='application-x-xz-compressed-tar' 218 | ;; 219 | "application/x-7z-compressed" ) 220 | icon_name='application-x-7zip' 221 | ;; 222 | "application/x-rar" ) 223 | icon_name='application-x-rar' 224 | ;; 225 | "application/octet-stream" | "application/x-iso9660-image" ) 226 | icon_name='application-x-iso' 227 | ;; 228 | "application/x-dosexec" ) 229 | icon_name='application-x-ms-dos-executable' 230 | ;; 231 | "text/plain" ) 232 | icon_name='application-text' 233 | ;; 234 | "text/x-shellscript" ) 235 | icon_name='application-x-shellscript' 236 | ;; 237 | "text/html" ) 238 | icon_name='text-html' 239 | ;; 240 | "font/sfnt" | "application/vnd.ms-opentype" ) 241 | icon_name='application-x-font-ttf' 242 | ;; 243 | * ) 244 | case "${1}" in 245 | *."docx" | *".doc" ) 246 | icon_name='application-msword' 247 | ;; 248 | *."apk" ) 249 | icon_name='android-package-archive' 250 | ;; 251 | * ) 252 | icon_name='unknown' 253 | ;; 254 | esac 255 | ;; 256 | esac 257 | 258 | echo -en "$1\0icon\x1f$icon_name\n" 259 | } 260 | 261 | export -f icon_file_type 262 | 263 | # Pass the argument to python script 264 | function web_search() { 265 | # Pass the search query to web-search script 266 | "${MY_PATH}/web-search.py" "${1}" 267 | exit; 268 | } 269 | 270 | # Handles the web search method 271 | if [ ! -z "$@" ] && ([[ "$@" == ":webbro"* ]] || [[ "$@" == ":wb"* ]]) 272 | then 273 | remove='' 274 | [[ "$*" = ":webbro"* ]] && remove=":webbro" || remove=":wb" 275 | 276 | # Search directly from your web browser 277 | web_search "$(printf '%s\n' "${1//$remove/}")" 278 | exit; 279 | 280 | elif [ ! -z "$@" ] && ([[ "$@" == ":web"* ]] || [[ "$@" == ":w"* ]]) 281 | then 282 | remove='' 283 | [[ "$*" = ":web"* ]] && remove=":web" || remove=":w" 284 | 285 | # Get search suggestions 286 | web_search "!$(printf '%s\n' "${1//$remove/}")" 287 | exit; 288 | fi 289 | 290 | function find_query() { 291 | QUERY=${1} 292 | if [[ ! "${QUERY}" =~ ( |\') ]] 293 | then 294 | if [ -z "$FD_INSTALLED" ]; 295 | then 296 | find "${HOME}" -iname *"${QUERY}"* | sed "s/\/home\/$USER/\~/" | 297 | awk -v MY_PATH="${MY_PATH}" '{print $0"\0icon\x1f"MY_PATH"/icons/result.svg\n"}' 298 | else 299 | fd -H ${QUERY} ${HOME} | sed "s/\/home\/$USER/\~/" | 300 | awk -v MY_PATH="${MY_PATH}" '{print $0"\0icon\x1f"MY_PATH"/icons/result.svg\n"}' 301 | fi 302 | fi 303 | } 304 | 305 | # File and calls to the web search 306 | if [ ! -z "$@" ] && ([[ "$@" == ?(\~)/* ]] || [[ "$@" == \?* ]] || [[ "$@" == \!* ]]) 307 | then 308 | QUERY=$@ 309 | 310 | echo "${QUERY}" >> "${HIST_FILE}" 311 | 312 | if [[ "$@" == ?(\~)/* ]] 313 | then 314 | [[ "$*" = \~* ]] && QUERY="${QUERY//"~"/"$HOME"}" 315 | 316 | coproc ${OPENER} "${QUERY}" > /dev/null 2>&1 317 | exec 1>&- 318 | exit 319 | 320 | elif [[ "$@" == \?* ]] 321 | then 322 | find_query ${QUERY#\?} 323 | 324 | else 325 | # Find the file 326 | find_query ${QUERY#!} 327 | 328 | # Web search 329 | web_search "! ${QUERY#!}" 330 | fi 331 | exit; 332 | fi 333 | 334 | # Create notification if there's an error 335 | function create_notification() { 336 | case "${1}" in 337 | "denied" ) 338 | notify-send -a "Global Search" "Permission denied!" \ 339 | 'You have no permission to access '"${CUR_DIR}!" 340 | ;; 341 | "deleted" ) 342 | notify-send -a "Global Search" "Success!" \ 343 | 'File deleted!' 344 | ;; 345 | "trashed" ) 346 | notify-send -a "Global Search" "Success!" \ 347 | 'The file has been moved to trash!' 348 | ;; 349 | "cleared" ) 350 | notify-send -a "Global Search" "Success!" \ 351 | 'Search history has been successfully cleared!' 352 | ;; 353 | * ) 354 | notify-send -a "Global Search" "Somethings wrong I can feel it!" \ 355 | 'This incident will be reported!' 356 | ;; 357 | esac 358 | } 359 | 360 | # Show the files in the current directory 361 | function navigate_to() { 362 | # process current dir. 363 | if [ -n "${CUR_DIR}" ] 364 | then 365 | CUR_DIR=$(readlink -e "${CUR_DIR}") 366 | if [ ! -d "${CUR_DIR}" ] || [ ! -r "${CUR_DIR}" ] 367 | then 368 | create_notification "denied" 369 | CUR_DIR=$(realpath ${CUR_DIR} | xargs dirname) 370 | echo "${CUR_DIR}" > "${PREV_LOC_FILE}" 371 | else 372 | echo "${CUR_DIR}/" > "${PREV_LOC_FILE}" 373 | fi 374 | pushd "${CUR_DIR}" >/dev/null || exit 375 | fi 376 | 377 | printf "..\0icon\x1fup\n" 378 | 379 | if [[ -z "$FD_INSTALLED" ]] 380 | then 381 | #Group directories 382 | if [[ ${SHOW_HIDDEN} == true ]] 383 | then 384 | for i in .*/ 385 | do 386 | [[ -d "${i}" ]] && ([[ "${i}" != "./" ]] && [[ "${i}" != "../"* ]]) && icon_file_type "${i}" 387 | done 388 | fi 389 | for i in */ 390 | do 391 | [[ -d "${i}" ]] && icon_file_type "${i}" 392 | done 393 | #Group files 394 | if [[ ${SHOW_HIDDEN} = true ]] 395 | then 396 | for i in .* 397 | do 398 | [[ -f "${i}" ]] && icon_file_type "${i}" 399 | done 400 | fi 401 | for i in * 402 | do 403 | [[ -f "${i}" ]] && icon_file_type "${i}" 404 | done 405 | else 406 | THREADS=$(getconf _NPROCESSORS_ONLN) 407 | export CUR_DIR 408 | if [[ ${SHOW_HIDDEN} == true ]] 409 | then 410 | fd -Ht d -d 1 -x bash -c 'icon_file_type "$1/"' _ {} \ | sort -V --parallel=$THREADS 411 | fd -Ht f -d 1 -x bash -c 'icon_file_type "$1"' _ {} \ | sort -V --parallel=$THREADS 412 | else 413 | fd -t d -d 1 -x bash -c 'icon_file_type "$1/"' _ {} \ | sort -V --parallel=$THREADS 414 | fd -t f -d 1 -x bash -c 'icon_file_type "$1"' _ {} \ | sort -V --parallel=$THREADS 415 | fi 416 | fi 417 | } 418 | 419 | # Set XDG dir 420 | function return_xdg_dir() { 421 | target_dir=${1^^} 422 | 423 | if [[ "HOME" == *"${target_dir}"* ]] 424 | then 425 | CUR_DIR=$(xdg-user-dir) 426 | 427 | elif [[ "DESKTOP" == *"${target_dir}"* ]] 428 | then 429 | CUR_DIR=$(xdg-user-dir DESKTOP) 430 | 431 | elif [[ "DOCUMENTS" == *"${target_dir}"* ]] 432 | then 433 | CUR_DIR=$(xdg-user-dir DOCUMENTS) 434 | 435 | elif [[ "DOWNLOADS" == *"${target_dir}"* ]] 436 | then 437 | CUR_DIR=$(xdg-user-dir DOWNLOAD) 438 | 439 | elif [[ "MUSIC" == *"${target_dir}"* ]] 440 | then 441 | CUR_DIR=$(xdg-user-dir MUSIC) 442 | 443 | elif [[ "PICTURES" == *"${target_dir}"* ]] 444 | then 445 | CUR_DIR=$(xdg-user-dir PICTURES) 446 | 447 | elif [[ "PUBLICSHARE" == *"${target_dir}"* ]] 448 | then 449 | CUR_DIR=$(xdg-user-dir PUBLICSHARE) 450 | 451 | elif [[ "TEMPLATES" == *"${target_dir}"* ]] 452 | then 453 | CUR_DIR=$(xdg-user-dir TEMPLATES) 454 | 455 | elif [[ "VIDEOS" == *"${target_dir}"* ]] 456 | then 457 | CUR_DIR=$(xdg-user-dir VIDEOS) 458 | 459 | elif [[ "ROOT" == *"${target_dir}"* ]] 460 | then 461 | CUR_DIR="/" 462 | 463 | else 464 | CUR_DIR="${HOME}" 465 | fi 466 | navigate_to 467 | exit; 468 | } 469 | 470 | # Show and Clear History 471 | if [ ! -z "$@" ] && ([[ "$@" == ":sh" ]] || [[ "$@" == ":show_hist" ]]) 472 | then 473 | hist=$(tac "${HIST_FILE}") 474 | 475 | echo -en "Back\0icon\x1fdraw-arrow-back\n" 476 | [ -z "${hist}" ] && echo -en "No History Yet\0icon\x1ftext-plain\n" 477 | 478 | while IFS= read -r line; 479 | do 480 | echo -en "${line}\0icon\x1f${MY_PATH}/icons/history.svg\n"; 481 | done <<< "${hist}" 482 | 483 | exit; 484 | elif [ ! -z "$@" ] && ([[ "$@" == ":ch" ]] || [[ "$@" == ":clear_hist" ]]) 485 | then 486 | :> "${HIST_FILE}" 487 | create_notification "cleared" 488 | 489 | CUR_DIR="${HOME}" 490 | navigate_to 491 | exit; 492 | fi 493 | 494 | # Accepts XDG command 495 | if [[ ! -z "$@" ]] && [[ "$@" == ":xdg"* ]] 496 | then 497 | NEXT_DIR=${*//":xdg "/} 498 | 499 | [[ -n "$NEXT_DIR" ]] && return_xdg_dir "${NEXT_DIR}" || return_xdg_dir "${HOME}" 500 | fi 501 | 502 | # Read last location, otherwise we default to PWD. 503 | [ -f "${PREV_LOC_FILE}" ] && CUR_DIR=$(< "${PREV_LOC_FILE}") 504 | 505 | if [[ ! -z "$@" ]] && ([[ "$@" == ":h" ]] || [[ "$@" == ":hidden" ]]) 506 | then 507 | SHOW_HIDDEN=true 508 | navigate_to 509 | exit; 510 | fi 511 | 512 | # Handle argument. 513 | [ -n "$*" ] && CUR_DIR="${CUR_DIR}/$*" 514 | 515 | # Context Menu 516 | if [ -n "$*" ] && [[ "${ALL_OPTIONS[*]} " = *"$*"* ]] 517 | then 518 | case "${1}" in 519 | "Run" ) 520 | coproc ( eval "$(< ${CURRENT_FILE})" & > /dev/null 2>&1 ) 521 | kill -9 $(pgrep rofi) 522 | ;; 523 | "Execute in ${TERM_EMU}" ) 524 | coproc ( eval "${TERM_EMU} \"$(< ${CURRENT_FILE})\"" & > /dev/null 2>&1 ) 525 | kill -9 $(pgrep rofi) 526 | ;; 527 | "Open" ) 528 | coproc ( eval "${OPENER} \"$(< ${CURRENT_FILE})\"" & > /dev/null 2>&1 ) 529 | kill -9 $(pgrep rofi) 530 | ;; 531 | "Open file location in ${TERM_EMU}" ) 532 | file_path="$(< ${CURRENT_FILE})" 533 | coproc ( ${TERM_EMU} bash -c "cd ${file_path%/*} ; ${SHELL}" & > /dev/null 2>&1 ) 534 | kill -9 $(pgrep rofi) 535 | ;; 536 | "Open file location in ${FILE_MANAGER}" ) 537 | file_path="$(< "${CURRENT_FILE}")" 538 | coproc ( eval "${FILE_MANAGER} "${file_path%/*}"" & > /dev/null 2>&1 ) 539 | kill -9 $(pgrep rofi) 540 | ;; 541 | "Edit" ) 542 | coproc ( eval "${TERM_EMU} ${TEXT_EDITOR} \"$(< ${CURRENT_FILE})\"" & > /dev/null 2>&1 ) 543 | kill -9 $(pgrep rofi) 544 | ;; 545 | "Move to trash" ) 546 | coproc( gio trash "$(< ${CURRENT_FILE})" & > /dev/null 2>&1 ) 547 | create_notification "trashed" 548 | CUR_DIR="$(dirname "$(< ${CURRENT_FILE})")" 549 | navigate_to 550 | ;; 551 | "Delete" ) 552 | shred "$(< ${CURRENT_FILE})" 553 | rm "$(< ${CURRENT_FILE})" 554 | create_notification "deleted" 555 | CUR_DIR="$(dirname "$(< ${CURRENT_FILE})")" 556 | navigate_to 557 | ;; 558 | "Send via Bluetooth" ) 559 | rfkill unblock bluetooth && bluetoothctl power on 560 | sleep 1 561 | blueman-sendto "$(< ${CURRENT_FILE})" & > /dev/null 2>&1 562 | kill -9 $(pgrep rofi) 563 | ;; 564 | "Back" ) 565 | CUR_DIR="$(< ${PREV_LOC_FILE})" 566 | navigate_to 567 | ;; 568 | esac 569 | exit; 570 | fi 571 | 572 | function context_menu_icons() { 573 | 574 | if [[ "${1}" == "Run" ]] 575 | then 576 | echo '\0icon\x1fsystem-run\n' 577 | 578 | elif [[ "${1}" == "Execute in ${TERM_EMU}" ]] 579 | then 580 | echo "\0icon\x1f${TERM_EMU}\n" 581 | 582 | elif [[ "${1}" == "Open" ]] 583 | then 584 | echo "\0icon\x1futilities-x-terminal\n" 585 | 586 | elif [[ "${1}" == "Open file location in ${TERM_EMU}" ]] 587 | then 588 | echo "\0icon\x1f${TERM_EMU}\n" 589 | 590 | elif [[ "${1}" == "Open file location in ${FILE_MANAGER}" ]] 591 | then 592 | echo "\0icon\x1fblue-folder-open\n" 593 | 594 | elif [[ "${1}" == "Edit" ]] 595 | then 596 | echo "\0icon\x1faccessories-text-editor\n" 597 | 598 | elif [[ "${1}" == "Move to trash" ]] 599 | then 600 | echo "\0icon\x1fapplication-x-trash\n" 601 | 602 | elif [[ "${1}" == "Delete" ]] 603 | then 604 | echo "\0icon\x1findicator-trashindicator\n" 605 | 606 | elif [[ "${1}" == "Send via Bluetooth" ]] 607 | then 608 | echo "\0icon\x1fbluetooth\n" 609 | 610 | elif [[ "${1}" == "Back" ]] 611 | then 612 | echo "\0icon\x1fback\n" 613 | fi 614 | } 615 | 616 | function print_context_menu() { 617 | declare -a arg_arr=("${!1}") 618 | 619 | for menu in "${arg_arr[@]}" 620 | do 621 | printf "$menu$(context_menu_icons "${menu}")\n" 622 | done 623 | } 624 | 625 | function context_menu() { 626 | 627 | type="$(file --mime-type -b "${CUR_DIR}")" 628 | 629 | if [ -w "${CUR_DIR}" ] && [[ "${type}" == "text/x-shellscript" ]] 630 | then 631 | if [ -x "${CUR_DIR}" ]; 632 | then 633 | print_context_menu SHELL_OPTIONS[@] 634 | else 635 | print_context_menu SHELL_NO_X_OPTIONS[@] 636 | fi 637 | 638 | elif [[ "${type}" == "application/x-executable" ]] || [[ "${type}" == "application/x-pie-executable" ]] 639 | then 640 | if [ -x "${CUR_DIR}" ] 641 | then 642 | print_context_menu BIN_OPTIONS[@] 643 | else 644 | print_context_menu BIN_NO_X_OPTIONS[@] 645 | fi 646 | 647 | elif [[ "${type}" == "text/plain" ]] 648 | then 649 | print_context_menu TEXT_OPTIONS[@] 650 | 651 | elif [[ "${type}" == "text/html" ]] 652 | then 653 | print_context_menu HTML_OPTIONS[@] 654 | 655 | elif [[ "${type}" == "image/jpeg" ]] || [[ "${type}" == "image/png" ]] 656 | then 657 | print_context_menu IMAGE_OPTIONS[@] 658 | 659 | elif [[ "${type}" == "image/x-xcf" ]] || [[ "${type}" == "image/svg+xml" ]] 660 | then 661 | print_context_menu XCF_SVG_OPTIONS[@] 662 | 663 | elif [ ! -w "${CUR_DIR}" ] && [[ "${type}" == "text/x-shellscript" ]] 664 | then 665 | coproc ( exec "${CUR_DIR}" & > /dev/null 2>&1 ) 666 | 667 | else 668 | if [ ! -d "${CUR_DIR}" ] && [ ! -f "${CUR_DIR}" ] 669 | then 670 | QUERY="${CUR_DIR//*\/\//}" 671 | 672 | echo "${QUERY}" >> "${HIST_FILE}" 673 | 674 | find_query "${QUERY#!}" 675 | 676 | web_search "!${QUERY}" 677 | else 678 | coproc ( ${OPENER} "${CUR_DIR}" & > /dev/null 2>&1 ) 679 | fi 680 | fi 681 | exit; 682 | } 683 | 684 | # If argument is not a directory/folder 685 | if [ ! -d "${CUR_DIR}" ] 686 | then 687 | echo "${CUR_DIR}" > "${CURRENT_FILE}" 688 | context_menu 689 | exit; 690 | fi 691 | 692 | navigate_to 693 | -------------------------------------------------------------------------------- /rofi/global/rofi.rasi: -------------------------------------------------------------------------------- 1 | configuration { 2 | font: "Inter Nerd Font Regular 10"; 3 | sidebar-mode: true; 4 | show-icons: true; 5 | sorting-method: "fzf"; 6 | fullscreen: false; 7 | threads: 0; 8 | matching: "fuzzy"; 9 | scroll-method: 0; 10 | } 11 | 12 | * { 13 | transparent: #00000000; 14 | foreground: #F2F2F2EE; 15 | foreground-selected: #F2F2F2EE; 16 | foreground-active: #F2F2F2EE; 17 | background-selected: #F2F2F245; 18 | background-active: #F2F2F230; 19 | background-white: #F2F2F211; 20 | background-black: #000000AA; 21 | urgent: #E91E6366; 22 | urgent-selected: #E91E6377; 23 | } 24 | 25 | window { 26 | transparency: "real"; 27 | background-color: @transparent; 28 | text-color: @foreground; 29 | location: northwest; 30 | anchor: northwest; 31 | x-offset: 18; 32 | y-offset: 20; 33 | height: 92%; 34 | width: 600px; 35 | orientation: vertical; 36 | } 37 | 38 | prompt { 39 | enabled: false; 40 | } 41 | 42 | button { 43 | action: "ok"; 44 | str: " "; 45 | font: "FantasqueSansMono Nerd Font 16"; 46 | expand: false; 47 | text-color: @foreground; 48 | background-color: @transparent; 49 | vertical-align: 0.5; 50 | horizontal-align: 0.5; 51 | } 52 | 53 | entry { 54 | font: "Inter Regular 12"; 55 | background-color: @transparent; 56 | text-color: @foreground; 57 | expand: true; 58 | vertical-align: 0.5; 59 | horizontal-align: 0; 60 | placeholder: "Global Search"; 61 | placeholder-color: @foreground; 62 | blink: true; 63 | } 64 | 65 | entry-wrapper { 66 | orientation: horizontal; 67 | margin: 0 12px 0 12px; 68 | spacing: 24px; 69 | vertical-align: 0.5; 70 | background-color: @transparent; 71 | children: [ button, entry ]; 72 | } 73 | 74 | inputbar { 75 | padding: 14px; 76 | margin: 10px 10px 14px 10px; 77 | background-color: @background-white; 78 | text-color: @foreground; 79 | expand: false; 80 | border-radius: 9px; 81 | position: north; 82 | children: [ entry-wrapper ]; 83 | } 84 | 85 | listview { 86 | background-color: @transparent; 87 | spacing: 0; 88 | cycle: true; 89 | dynamic: true; 90 | scrollbar: true; 91 | } 92 | 93 | mainbox { 94 | width: 200px; 95 | expand: true; 96 | spacing: 12px; 97 | padding: 5px; 98 | background-color: @background-black; 99 | children: [ inputbar, listview ]; 100 | } 101 | 102 | scrollbar { 103 | background-color: @background-white; 104 | handle-width: 0; 105 | margin: 0 0 5px 0; 106 | border-radius: 9px; 107 | } 108 | 109 | element { 110 | background-color: @transparent; 111 | text-color: @foreground; 112 | orientation: horizontal; 113 | border: 0; 114 | border-color: @background-white; 115 | border-radius: 6px; 116 | spacing: 24px; 117 | margin: 0px 12px 0px 12px; 118 | padding: 10px 24px 10px 24px; 119 | } 120 | 121 | element-icon { 122 | size: 24px; 123 | border: 0; 124 | border-color: @transparent; 125 | background-color: @transparent; 126 | } 127 | 128 | element-text { 129 | font: "Inter Regular 11"; 130 | background-color: @transparent; 131 | text-color: inherit; 132 | expand: true; 133 | horizontal-align: 0; 134 | vertical-align: 0.5; 135 | } 136 | 137 | element normal.urgent, 138 | element alternate.urgent { 139 | background-color: @urgent; 140 | text-color: @foreground; 141 | border-radius: 9px; 142 | } 143 | 144 | element normal.active, 145 | element alternate.active { 146 | background-color: @background-active; 147 | text-color: @foreground; 148 | } 149 | 150 | element selected { 151 | background-color: @background-selected; 152 | text-color: @foreground; 153 | } 154 | 155 | element selected.urgent { 156 | background-color: @urgent-selected; 157 | text-color: @foreground; 158 | } 159 | 160 | element selected.active { 161 | background-color: @background-active; 162 | color: @foreground-selected; 163 | } 164 | 165 | -------------------------------------------------------------------------------- /rofi/global/web-search.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # MIT License 4 | 5 | # Copyright (c) 2019 Paolo Donadeo 6 | 7 | # Permission is hereby granted, free of charge, to any person obtaining a copy 8 | # of this software and associated documentation files (the "Software"), to deal 9 | # in the Software without restriction, including without limitation the rights 10 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | # copies of the Software, and to permit persons to whom the Software is 12 | # furnished to do so, subject to the following conditions: 13 | 14 | # The above copyright notice and this permission notice shall be included in all 15 | # copies or substantial portions of the Software. 16 | 17 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | 24 | import json 25 | import re 26 | import urllib.parse 27 | import urllib.request 28 | import sys 29 | import os 30 | import datetime 31 | import gzip 32 | 33 | import subprocess as sp 34 | 35 | import html 36 | 37 | 38 | ################################################################################ 39 | ##### C O N F I G U R A T I O N ###### 40 | ################################################################################ 41 | SEARCH_ENGINE = 'google' # or 'duckduckgo' 42 | BROWSER = 'firefox' # or 'firefox', 'chromium', 'brave', 'lynx' 43 | TERMINAL = ['kitty', '--'] # or ['st', '-e'] or something like that 44 | ################################################################################ 45 | 46 | CONFIG = { 47 | 'BROWSER_PATH' : { 48 | 'chrome' : ['google-chrome-stable'], 49 | 'firefox' : ['firefox'], 50 | 'chromium' : ['chromium-browser'], 51 | 'brave' : ['brave-browser'], 52 | 'lynx' : TERMINAL + ['lynx'] 53 | }, 54 | 'USER_AGENT' : { 55 | 'chrome' : 'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', 56 | 'firefox' : 'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0', 57 | 'chromium' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/76.0.3809.100 Chrome/76.0.3809.100 Safari/537.36', 58 | 'brave' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36', 59 | 'lynx' : 'Lynx/2.8.9rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/1.1.1d' 60 | }, 61 | 'SEARCH_ENGINE_NAME' : { 62 | 'google' : 'Google', 63 | 'duckduckgo' : 'DuckDuckGo' 64 | }, 65 | 'SEARCH_URL' : { 66 | 'google' : 'https://www.google.com/search?q=', 67 | 'duckduckgo' : 'https://duckduckgo.com/?q=' 68 | }, 69 | 'SUGGESTION_URL' : { 70 | 'google' : 'https://www.google.com/complete/search?', 71 | 'duckduckgo' : 'https://duckduckgo.com/ac/?' 72 | } 73 | } 74 | 75 | def cleanhtml(txt): 76 | return re.sub(r'<.*?>', '', txt) 77 | 78 | def fetch_suggestions(search_string): 79 | if SEARCH_ENGINE == 'google': 80 | r = { 81 | 'q' : search_string, 82 | 'cp' : '11', 83 | 'client' : 'psy-ab', 84 | 'xssi' : 't', 85 | 'gs_ri' : 'gws-wiz', 86 | 'hl' : 'en-IT', 87 | 'authuser' : '0' 88 | } 89 | url = CONFIG['SUGGESTION_URL'][SEARCH_ENGINE] + urllib.parse.urlencode(r) 90 | headers = { 91 | 'sec-fetch-mode' : 'cors', 92 | 'dnt' : '1', 93 | 'accept-encoding' : 'gzip', 94 | 'accept-language' : 'en-US;q=0.9,en;q=0.8', 95 | 'pragma' : 'no-cache', 96 | 'user-agent' : CONFIG['USER_AGENT'][BROWSER], 97 | 'accept' : '*/*', 98 | 'cache-control' : 'no-cache', 99 | 'authority' : 'www.google.com', 100 | 'referer' : 'https://www.google.com/', 101 | 'sec-fetch-site' : 'same-origin' 102 | } 103 | req = urllib.request.Request(url, headers=headers, method='GET') 104 | 105 | reply_data = gzip.decompress(urllib.request.urlopen(req).read()).split(b'\n')[1] 106 | reply_data = json.loads(reply_data) 107 | return [ cleanhtml(res[0]).strip() for res in reply_data[0] ] 108 | else: # 'duckduckgo' 109 | if search_string.startswith('!'): 110 | bang_search = True 111 | search_string = search_string.lstrip('!') 112 | else: 113 | bang_search = False 114 | r = { 115 | 'q' : search_string, 116 | 'callback' : 'autocompleteCallback', 117 | 'kl' : 'wt-wt', 118 | '_' : str(int((datetime.datetime.now().timestamp())*1000)) 119 | } 120 | url = CONFIG['SUGGESTION_URL'][SEARCH_ENGINE] + urllib.parse.urlencode(r) 121 | if bang_search: 122 | url = url.replace('?q=', '?q=!') 123 | headers = { 124 | 'pragma' : 'no-cache', 125 | 'dnt' : '1', 126 | 'accept-encoding' : 'gzip', 127 | 'accept-language' : 'en-US;q=0.9,en;q=0.8', 128 | 'user-agent' : CONFIG['USER_AGENT'][BROWSER], 129 | 'sec-fetch-mode' : 'no-cors', 130 | 'accept' : '*/*', 131 | 'cache-control' : 'no-cache', 132 | 'authority' : 'duckduckgo.com', 133 | 'referer' : 'https://duckduckgo.com/', 134 | 'sec-fetch-site' : 'same-origin', 135 | } 136 | req = urllib.request.Request(url, headers=headers, method='GET') 137 | reply_data = gzip.decompress(urllib.request.urlopen(req).read()).decode('utf8') 138 | reply_data = json.loads(re.match(r'autocompleteCallback\((.*)\);', reply_data).group(1)) 139 | return [ cleanhtml(res['phrase']).strip() for res in reply_data ] 140 | 141 | def main(): 142 | search_string = html.unescape((' '.join(sys.argv[1:])).strip()) 143 | 144 | path_str = os.path.dirname(os.path.realpath(__file__)) + '/' 145 | icon_path_str = path_str + 'icons/' 146 | icon_name = icon_path_str 147 | 148 | if SEARCH_ENGINE == 'google': 149 | icon_name += 'google.svg' 150 | else: 151 | icon_name += 'ddg.svg' 152 | 153 | if search_string.startswith('!'): 154 | search_string = search_string.rstrip('!').strip() 155 | results = fetch_suggestions(search_string) 156 | for r in results: 157 | print(":wb " + html.unescape(r) + "\0icon\x1f"+icon_name+"\n") 158 | else: 159 | url = CONFIG['SEARCH_URL'][SEARCH_ENGINE] + urllib.parse.quote_plus(search_string) 160 | sp.Popen(CONFIG['BROWSER_PATH'][BROWSER] + [url], stdout=sp.DEVNULL, stderr=sp.DEVNULL, shell=False) 161 | 162 | if __name__ == "__main__": 163 | try: 164 | main() 165 | except Exception as e: 166 | if e: 167 | sys.exit(1) 168 | -------------------------------------------------------------------------------- /rofi/launcher.rasi: -------------------------------------------------------------------------------- 1 | touch_launcher.rasi -------------------------------------------------------------------------------- /rofi/list_launcher.rasi: -------------------------------------------------------------------------------- 1 | configuration { 2 | modi: "drun"; 3 | display-drun: "Applications"; 4 | show-icons: true; 5 | disable-history: false; 6 | fullscreen: false; 7 | hide-scrollbar: true; 8 | sidebar-mode: false; 9 | matching: "fuzzy"; 10 | } 11 | 12 | * { 13 | font: "Inter Nerd Font Semibold 11"; 14 | foreground: #f8f8f2; 15 | foreground-alt: #9c9c9c; 16 | background-color: #00000066; 17 | selected-foreground: #f48fb1; 18 | selected-background: #b2b2b250; 19 | separatorcolor: #7c7c7c; 20 | bordercolor: #ff79c6; 21 | highlightcolor: #8be9fd; 22 | transparent: #00000000; 23 | } 24 | 25 | #window { 26 | background-color: @background-color; 27 | text-color: @foreground; 28 | border: 0; 29 | border-color: @background-color; 30 | border-radius: 8; 31 | height: 70%; 32 | width: 400px; 33 | location: southwest; 34 | anchor: southwest; 35 | x-offset: 8; 36 | y-offset: -60; 37 | } 38 | 39 | #prompt { 40 | background-color: @transparent; 41 | text-color: @foreground; 42 | } 43 | 44 | #button { 45 | action: "ok"; 46 | str: " "; 47 | font: "SauceCodePro Nerd Font Medium 12"; 48 | expand: false; 49 | text-color: @foreground; 50 | background-color: @transparent; 51 | vertical-align: 0; 52 | } 53 | 54 | #entry { 55 | background-color: @transparent; 56 | text-color: @foreground; 57 | placeholder: "Search"; 58 | placeholder-color: @foreground-alt; 59 | expand: true; 60 | vertical-align: 0; 61 | } 62 | 63 | #inputbar { 64 | children: [ button, entry ]; 65 | padding: 10 10 10 15; 66 | background-color: @transparent; 67 | border: 0px 0px 1px dash; 68 | border-color: @separatorcolor; 69 | } 70 | 71 | #listview { 72 | background-color: @transparent; 73 | padding: 0px; 74 | lines: 12; 75 | spacing: 0px; 76 | cycle: true; 77 | dynamic: true; 78 | } 79 | 80 | #element { 81 | background-color: @transparent; 82 | text-color: @foreground; 83 | border-radius: 8; 84 | padding: 10px; 85 | } 86 | 87 | #element-icon { 88 | size: 1.4em; 89 | border: 0px; 90 | } 91 | 92 | #element-text { 93 | highlight: None #8be9fd; 94 | } 95 | 96 | #element.selected { 97 | background-color: @selected-background; 98 | text-color: @selected-foreground; 99 | border: 0; 100 | border-radius: 8; 101 | } 102 | -------------------------------------------------------------------------------- /rofi/powermenu.rasi: -------------------------------------------------------------------------------- 1 | configuration { 2 | show-icons: true; 3 | disable-history: false; 4 | fullscreen: false; 5 | hide-scrollbar: true; 6 | sidebar-mode: false; 7 | } 8 | 9 | * { 10 | font: "Inter Nerd Font Semibold 11"; 11 | foreground: #f8f8f2; 12 | background-color: #00000066; 13 | selected-foreground: #53E2AE; 14 | selected-background: #56687E50; 15 | separatorcolor: #ff79c6; 16 | bordercolor: #ff79c6; 17 | highlightcolor: #8be9fd; 18 | transparent: #00000000; 19 | } 20 | 21 | #window { 22 | background-color: @background; 23 | text-color: @foreground; 24 | border: 0; 25 | border-color: @background; 26 | border-radius: 8; 27 | width: 300px; 28 | location: southeast; 29 | x-offset: -8; 30 | y-offset: -60; 31 | } 32 | 33 | #listview { 34 | background-color: @transparent; 35 | padding: 0px; 36 | columns: 1; 37 | lines: 5; 38 | spacing: 0px; 39 | cycle: true; 40 | dynamic: true; 41 | layout: vertical; 42 | } 43 | 44 | #mainbox { 45 | children: [ listview ]; 46 | background-color: @transparent; 47 | } 48 | 49 | #element { 50 | background-color: @transparent; 51 | text-color: @foreground; 52 | orientation: horizontal; 53 | border-radius: 8; 54 | padding: 10px; 55 | } 56 | 57 | #element.selected { 58 | background-color: @selected-background; 59 | text-color: @selected-foreground; 60 | border: 0; 61 | border-radius: 8; 62 | } 63 | 64 | element-text { 65 | background-color: @transparent; 66 | text-color: inherit; 67 | } 68 | 69 | element-icon { 70 | background-color: @transparent; 71 | text-color: inherit; 72 | } 73 | -------------------------------------------------------------------------------- /rofi/powermenu.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | THEME="$HOME/.config/bspwm/rofi/powermenu.rasi" 4 | 5 | rofi_command="rofi -no-config -theme $THEME" 6 | 7 | # Options 8 | shutdown="Shutdown" 9 | reboot="Restart" 10 | lock="Lock" 11 | suspend="Suspend" 12 | logout="Logout" 13 | 14 | # Variable passed to rofi 15 | options="$lock\n$suspend\n$logout\n$reboot\n$shutdown" 16 | 17 | chosen="$(echo -e "$options" | $rofi_command -dmenu -selected-row 0)" 18 | case $chosen in 19 | $shutdown) 20 | systemctl poweroff 21 | ;; 22 | $reboot) 23 | systemctl reboot 24 | ;; 25 | $lock) 26 | betterlockscreen -l 27 | ;; 28 | $suspend) 29 | systemctl suspend 30 | ;; 31 | $logout) 32 | bspc quit 33 | ;; 34 | esac 35 | -------------------------------------------------------------------------------- /rofi/touch_launcher.rasi: -------------------------------------------------------------------------------- 1 | configuration { 2 | font: "Inter Nerd Font 12"; 3 | show-icons: true; 4 | drun-display-format: "{name}"; 5 | drun-match-fields: "name,generic,categories,keywords"; 6 | threads: 0; 7 | matching: "fuzzy"; 8 | sorting-method: "fzf"; 9 | scroll-method: 0; 10 | disable-history: false; 11 | window-thumbnail: true; 12 | } 13 | 14 | * { 15 | transparent: #00000000; 16 | foreground: #F2F2F2EE; 17 | foreground-selected: #F2F2F2EE; 18 | foreground-active: #F2F2F2EE; 19 | background-selected: #F2F2F245; 20 | background-active: #F2F2F230; 21 | background-white: #F2F2F211; 22 | background-black: #00000066; 23 | urgent: #E91E6366; 24 | urgent-selected: #E91E6377; 25 | } 26 | 27 | window { 28 | transparency: "real"; 29 | background-color: @transparent; 30 | text-color: @foreground; 31 | location: north; 32 | anchor: northwest; 33 | fullscreen: true; 34 | } 35 | 36 | prompt { 37 | enabled: false; 38 | } 39 | 40 | button { 41 | action: "ok"; 42 | str: " "; 43 | font: "Inter Nerd Font 11"; 44 | expand: false; 45 | text-color: @foreground; 46 | background-color: @transparent; 47 | vertical-align: 0.7; 48 | horizontal-align: 0.5; 49 | } 50 | 51 | entry { 52 | font: "Inter Regular 11"; 53 | background-color: @transparent; 54 | text-color: @foreground; 55 | expand: true; 56 | vertical-align: 0.5; 57 | horizontal-align: 0.5; 58 | placeholder: "Type to search"; 59 | placeholder-color: @foreground; 60 | blink: true; 61 | } 62 | 63 | case-indicator { 64 | background-color: @transparent; 65 | text-color: @foreground; 66 | vertical-align: 0.5; 67 | horizontal-align: 0.5; 68 | } 69 | 70 | entry-wrapper { 71 | orientation: horizontal; 72 | vertical-align: 0.5; 73 | spacing: 4px; 74 | background-color: @transparent; 75 | children: [ button, entry, case-indicator ]; 76 | } 77 | 78 | inputbar { 79 | background-color: @background-white; 80 | text-color: @foreground; 81 | expand: false; 82 | border-radius: 6px; 83 | margin: 0px calc((100% - 510px) / 2) 0px calc((100% - 510px) / 2); 84 | padding: 10px 10px 10px 10px; 85 | position: north; 86 | children: [ entry-wrapper ]; 87 | } 88 | 89 | listview { 90 | background-color: @transparent; 91 | columns: 7; 92 | spacing: 5px; 93 | cycle: false; 94 | dynamic: true; 95 | layout: vertical; 96 | } 97 | 98 | mainbox { 99 | background-color: @background-black; 100 | children: [ inputbar, listview ]; 101 | spacing: 25px; 102 | padding: 70px 135px 0 135px; 103 | } 104 | 105 | element { 106 | background-color: @transparent; 107 | text-color: @foreground; 108 | orientation: vertical; 109 | border-radius: 12px; 110 | padding: 25px 0 25px 0; 111 | } 112 | 113 | element-icon { 114 | background-color: @transparent; 115 | horizontal-align: 0.5; 116 | vertical-align: 0.5; 117 | size: 72px; 118 | border: 0; 119 | } 120 | 121 | element-text { 122 | background-color: @transparent; 123 | text-color: @foreground; 124 | expand: true; 125 | horizontal-align: 0.5; 126 | vertical-align: 0.5; 127 | margin: 0 10px 0 10px; 128 | } 129 | 130 | element normal.urgent, 131 | element alternate.urgent { 132 | background-color: @urgent; 133 | text-color: @foreground; 134 | border-radius: 9px; 135 | } 136 | 137 | element normal.active, 138 | element alternate.active { 139 | background-color: @background-active; 140 | text-color: @foreground; 141 | } 142 | 143 | element selected { 144 | background-color: @background-selected; 145 | text-color: @foreground; 146 | } 147 | 148 | element selected.urgent { 149 | background-color: @urgent-selected; 150 | text-color: @foreground; 151 | } 152 | 153 | element selected.active { 154 | background-color: @background-active; 155 | color: @foreground-selected; 156 | } 157 | -------------------------------------------------------------------------------- /scripts/default_app: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | TERM="kitty --single-instance" #Tag 1 3 | BROWSER="brave --enable-features=UseOzonePlatform --ozone-platform=wayland" #Tag 2 4 | DOC=libreoffice #Tag 3 5 | FILE=dolphin #Tag 4 6 | PLAYER=vlc #Tag 5 7 | GAME="steam-native -pipewire" #Tag 6 8 | PHOTO=krita #Tag 7 9 | SANDBOX="mailspring --password-store=gnome-libsecret" #Tag 8 10 | DEV=neovide #Tag 9 11 | 12 | #Lookup Focused tag 13 | TAG=$(hyprctl monitors | grep -B 5 "focused: yes" | awk 'NR==2 {print $1}' RS='(' FS=')') 14 | 15 | #Executes application based on number of focused tag 16 | case "$TAG" in 17 | 1) $TERM &> /dev/null ;; 18 | 2) $BROWSER &> /dev/null ;; 19 | 3) $DOC &> /dev/null ;; 20 | 4) $FILE &> /dev/null ;; 21 | 5) $PLAYER &> /dev/null ;; 22 | 6) $GAME &> /dev/null ;; 23 | 7) $PHOTO &> /dev/null ;; 24 | 8) bash -c "$SANDBOX" &> /dev/null ;; 25 | 9) $DEV &> /dev/null ;; 26 | esac 27 | -------------------------------------------------------------------------------- /scripts/flicker: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | #Active window border flickers periodically 3 | 4 | while pgrep Hyprland; do 5 | delay=$(( RANDOM % 10 + 3 )) #Time between flickers 6 | flicker=$(( RANDOM % 15 + 5 )) #Number of flickers 7 | sleep $delay 8 | while [ $flicker -gt 0 ]; do 9 | hyprctl --batch "keyword decoration:col.shadow 0x55F51D00 ; keyword general:col.active_border 0x66FFF898" 10 | sleep 0.02 11 | hyprctl --batch "keyword decoration:col.shadow 0xFFF51D00 ; keyword general:col.active_border 0x99FFF898" 12 | sleep 0.02 13 | ((flicker=flicker-1)) 14 | done 15 | hyprctl --batch "keyword decoration:col.shadow 0xFFF51D00 ; keyword general:col.active_border 0xFFFFF898" 16 | done 17 | -------------------------------------------------------------------------------- /scripts/swwwpaper: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | SWWW_TRANSITION=random 4 | export stills="$1" 5 | 6 | wallpaper () { 7 | for monitor in "${monitors[@]}"; do swww img --transition-type random --outputs $monitor "$(randstill)"; done 8 | } 9 | 10 | #Function to select a random file from $stills directory 11 | randstill() { 12 | find "$stills" -maxdepth 1 -type f | shuf -n 1 13 | } 14 | 15 | #Switches wallpaper based on charging status 16 | wptoggle () { 17 | #Identify active monitors 18 | monitors=($(hyprctl monitors | awk '{if ($1 ~ "Monitor") print $2}')) 19 | hyprctl keyword decoration:blur_new_optimizations 1 20 | 21 | wallpaper 22 | while pgrep swww; do 23 | sleep 300 24 | wallpaper 25 | done 26 | } 27 | 28 | #perform cleanup and exit 29 | trap 'pkill swww & exit' exit 1 3 15 30 | 31 | swww init 32 | wptoggle 33 | -------------------------------------------------------------------------------- /scripts/wallpaper: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | #set -euo pipefail 4 | 5 | #Check that variables were provided, or exit 6 | if [[ -d $1 && -d $2 ]]; then 7 | export stills="$1" 8 | export videos="$2" 9 | elif [[ $1 == '-h' ]] || [[ $1 == '--help' ]]; then 10 | printf "Valid format is:\n" 11 | printf "./wallpaper " 12 | exit 13 | else 14 | printf "Invalid Directory. Valid format is:\n" 15 | printf "./wallpaper " 16 | exit 17 | fi 18 | 19 | #Check for previous wallpaper processes and kill 20 | pgrep wallpaper | grep -wv $$ | xargs kill -3 2&> /dev/null || true 21 | 22 | #Switches wallpaper based on charging status 23 | wptoggle () { 24 | #Identify active monitors 25 | monitors=($(hyprctl monitors | awk '{if ($1 ~ "Monitor") print $2}')) 26 | 27 | #Run appropriate command based on charging state. 28 | if [[ "$1" == "Discharging" ]] && [[ "$1" != "$laststate" ]]; then 29 | hyprctl keyword decoration:blur_new_optimizations 1 30 | pgrep swaybg || (for monitor in "${monitors[@]}"; do hyprctl dispatch exec "swaybg -m fill -o '$monitor' -i '$(randstill)'"; done) 31 | [[ $laststate != "start" ]] && (sleep 5 && pkill -3 mpvpaper) 32 | elif [[ "$1" != "$laststate" ]]; then 33 | hyprctl keyword decoration:blur_new_optimizations 0 34 | pgrep mpvpaper || (for monitor in "${monitors[@]}"; do mpvpaper -spf -n 1200 -o '--ao=null --reset-on-next-file=loop --loop-playlist --shuffle --panscan=1 --hwdec=auto input-ipc-server=/tmp/mpv-socket' "$monitor" "$videos"; done) 35 | [[ $laststate != "start" ]] && (sleep 5 && pkill -3 swaybg) 36 | fi 37 | 38 | export wpid=($(pgrep mpvpaper || pgrep swaybg)) 39 | 40 | #Test for for active wallpaper process, or trigger re-launch on next execution 41 | if [[ "${#wpid[@]}" == "${#monitors[@]}" ]]; then 42 | export laststate=$1 43 | else 44 | cleanup 45 | export laststate="start" 46 | fi 47 | } 48 | 49 | #Function to select a random file from $stills directory 50 | randstill() { 51 | find "$stills" -maxdepth 1 -type f | shuf -n 1 52 | } 53 | 54 | #Kill forked wallpaper processes 55 | cleanup() { 56 | for pid in "${wpid[@]}"; do 57 | kill -3 "$pid" 58 | done 59 | } 60 | 61 | #perform cleanup and exit 62 | trap 'cleanup && exit' exit 1 3 15 63 | 64 | laststate="start" 65 | bat=$(ls /sys/class/power_supply | grep -m 1 "BAT") 66 | wptoggle "$(cat /sys/class/power_supply/$bat/status)" 67 | sleep 5 68 | while pgrep Hyprland >> /dev/null; do 69 | wptoggle "$(cat /sys/class/power_supply/$bat/status)" 70 | sleep 5 71 | done 72 | -------------------------------------------------------------------------------- /scripts/workspace: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | monitors=/tmp/hypr/monitors_temp 4 | hyprctl monitors > $monitors 5 | 6 | if [[ -z $1 ]]; then 7 | workspace=$(grep -B 5 "focused: no" "$monitors" | awk 'NR==1 {print $3}') 8 | else 9 | workspace=$1 10 | fi 11 | 12 | 13 | activemonitor=$(grep -B 11 "focused: yes" "$monitors" | awk 'NR==1 {print $2}') 14 | passivemonitor=$(grep -B 6 "($workspace)" "$monitors" | awk 'NR==1 {print $2}') 15 | #activews=$(grep -A 2 "$activemonitor" "$monitors" | awk 'NR==3 {print $1}' RS='(' FS=')') 16 | passivews=$(grep -A 6 "$passivemonitor" "$monitors" | awk 'NR==3 {print $1}' RS='(' FS=')') 17 | 18 | if [[ $workspace -eq $passivews ]] && [[ $activemonitor != "$passivemonitor" ]]; then 19 | hyprctl dispatch swapactiveworkspaces "$activemonitor" "$passivemonitor" 20 | echo $activemonitor $passivemonitor 21 | else 22 | hyprctl dispatch moveworkspacetomonitor "$workspace $activemonitor" && hyprctl dispatch workspace "$workspace" 23 | fi 24 | 25 | exit 0 26 | -------------------------------------------------------------------------------- /theme.conf: -------------------------------------------------------------------------------- 1 | $THEME_DIR=$HOME/.config/hypr/themes/cyber 2 | 3 | monitor=,addreserved,55,0,0,0 4 | 5 | general { 6 | border_size=4 7 | col.active_border=0xFFFFECFD 8 | col.inactive_border=0xFFEDFDFF 9 | gaps_in=8 10 | gaps_out=16 11 | } 12 | 13 | decoration { 14 | rounding=12 15 | drop_shadow=1 16 | 17 | shadow_range=30 18 | shadow_render_power=2 19 | shadow_ignore_window=1 20 | shadow_offset= 0 0 21 | col.shadow=0xFFFA0DED 22 | col.shadow_inactive=0xFF3292F3 23 | #screen_shader=/home/taylor/.config/hypr/crt.frag 24 | blur { 25 | enabled=1 26 | size=10 27 | passes=3 28 | new_optimizations=1 29 | noise=0.04 30 | } 31 | } 32 | 33 | layerrule=blur,gtk-layer-shell 34 | layerrule=ignorezero,gtk-layer-shell 35 | layerrule=blur,notifications 36 | layerrule=ignorezero,notifications 37 | layerrule=blur,rofi 38 | layerrule=ignorezero,rofi 39 | 40 | unbind=SUPER,Return 41 | bind=SUPER,Return,exec,footclient 42 | 43 | bind=SUPER,B,exec,eww -c $THEME_DIR/eww/ open --screen 0 --toggle bar0 44 | bind=SUPER,D,exec,rofi -no-lazy-grab -show drun -theme "$THEME_DIR"/rofi/launcher.rasi 45 | bindr=SUPER,Super_L,exec,pkill rofi || rofi -no-lazy-grab -show drun -theme "$THEME_DIR"/rofi/launcher.rasi 46 | bind=SUPERSHIFT,D,exec,GDK_BACKEND=x11 QT_QPA_PLATFORM=xcb SDL_VIDEODRIVER=x11 rofi -drun-show-actions -no-lazy-grab -show drun -theme "$THEME_DIR"/rofi/launcher.rasi 47 | bind=SUPERALT,D,exec,prime-run rofi -drun-show-actions -no-lazy-grab -show drun -theme "$THEME_DIR"/rofi/launcher.rasi 48 | 49 | exec-once=foot --server --config="$THEME_DIR"/foot/foot.ini 50 | exec=pkill -9 swwwpaper ; "$THEME_DIR"/scripts/swwwpaper "$THEME_DIR"/wallpaper/ 51 | exec=killall -3 eww & sleep 1 && "$THEME_DIR"/eww/launch_bar 52 | #exec-once="$THEME_DIR"/scripts/flicker 53 | -------------------------------------------------------------------------------- /theme.toml: -------------------------------------------------------------------------------- 1 | [theme] 2 | name = "cyber" 3 | desc = "A cyberpunk theme with neon glow" 4 | version = "1.0" 5 | author = "BeardWarrior" 6 | git = "https://github.com/taylor85345/neon-hyprland-theme" 7 | config = "theme.conf" 8 | 9 | [kill] 10 | exclude_bar = ["eww"] 11 | exclude_wallpaper = ["swww"] 12 | -------------------------------------------------------------------------------- /wallpaper/00004-100_k_lms_3028550916_0.00.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/00004-100_k_lms_3028550916_0.00.jpg -------------------------------------------------------------------------------- /wallpaper/00010-100_k_lms_933122385_0.00.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/00010-100_k_lms_933122385_0.00.jpg -------------------------------------------------------------------------------- /wallpaper/00012-250_k_lms_1468565384_0.00.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/00012-250_k_lms_1468565384_0.00.jpg -------------------------------------------------------------------------------- /wallpaper/101-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/101-result.jpg -------------------------------------------------------------------------------- /wallpaper/102-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/102-result.jpg -------------------------------------------------------------------------------- /wallpaper/103-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/103-result.jpg -------------------------------------------------------------------------------- /wallpaper/104-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/104-result.jpg -------------------------------------------------------------------------------- /wallpaper/105-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/105-result.jpg -------------------------------------------------------------------------------- /wallpaper/106-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/106-result.jpg -------------------------------------------------------------------------------- /wallpaper/107-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/107-result.jpg -------------------------------------------------------------------------------- /wallpaper/108-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/108-result.jpg -------------------------------------------------------------------------------- /wallpaper/109-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/109-result.jpg -------------------------------------------------------------------------------- /wallpaper/11-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/11-result.jpg -------------------------------------------------------------------------------- /wallpaper/110-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/110-result.jpg -------------------------------------------------------------------------------- /wallpaper/111-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/111-result.jpg -------------------------------------------------------------------------------- /wallpaper/112-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/112-result.jpg -------------------------------------------------------------------------------- /wallpaper/113-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/113-result.jpg -------------------------------------------------------------------------------- /wallpaper/114-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/114-result.jpg -------------------------------------------------------------------------------- /wallpaper/115-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/115-result.jpg -------------------------------------------------------------------------------- /wallpaper/116-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/116-result.jpg -------------------------------------------------------------------------------- /wallpaper/117-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/117-result.jpg -------------------------------------------------------------------------------- /wallpaper/118-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/118-result.jpg -------------------------------------------------------------------------------- /wallpaper/119-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/119-result.jpg -------------------------------------------------------------------------------- /wallpaper/13-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/13-result.jpg -------------------------------------------------------------------------------- /wallpaper/14-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/14-result.jpg -------------------------------------------------------------------------------- /wallpaper/22-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/22-result.jpg -------------------------------------------------------------------------------- /wallpaper/23-result_Composite.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/23-result_Composite.jpg -------------------------------------------------------------------------------- /wallpaper/26-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/26-result.jpg -------------------------------------------------------------------------------- /wallpaper/28-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/28-result.jpg -------------------------------------------------------------------------------- /wallpaper/29-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/29-result.jpg -------------------------------------------------------------------------------- /wallpaper/3-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/3-result.jpg -------------------------------------------------------------------------------- /wallpaper/30-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/30-result.jpg -------------------------------------------------------------------------------- /wallpaper/32-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/32-result.jpg -------------------------------------------------------------------------------- /wallpaper/34-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/34-result.jpg -------------------------------------------------------------------------------- /wallpaper/35-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/35-result.jpg -------------------------------------------------------------------------------- /wallpaper/40-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/40-result.jpg -------------------------------------------------------------------------------- /wallpaper/6-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/6-result.jpg -------------------------------------------------------------------------------- /wallpaper/8-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/8-result.jpg -------------------------------------------------------------------------------- /wallpaper/9-result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/9-result.jpg -------------------------------------------------------------------------------- /wallpaper/laser_neon_barrier_4k.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/laser_neon_barrier_4k.jpg -------------------------------------------------------------------------------- /wallpaper/snow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/cyber-hyprland-theme/df6efa97b0063a0adb1e5244fdfd53afc041997d/wallpaper/snow.jpg --------------------------------------------------------------------------------