├── README.md ├── Wallpapers ├── Clips │ ├── GoW1.mp4 │ ├── GoW10.mp4 │ ├── GoW11.mp4 │ ├── GoW12.mp4 │ ├── GoW13.mp4 │ ├── GoW14.mp4 │ ├── GoW15.mp4 │ ├── GoW16.mp4 │ ├── GoW17.mp4 │ ├── GoW18.mp4 │ ├── GoW2.mp4 │ ├── GoW3.mp4 │ ├── GoW4.mp4 │ ├── GoW5.mp4 │ ├── GoW6.mp4 │ ├── GoW7.mp4 │ ├── GoW8.mp4 │ └── GoW9.mp4 ├── GOW1.jpg ├── GOW10.jpg ├── GOW11.jpg ├── GOW12.jpg ├── GOW13.jpg ├── GOW14.jpg ├── GOW15.jpg ├── GOW16.jpg ├── GOW17.jpg ├── GOW18.jpg ├── GOW19.jpg ├── GOW19_1.jpg ├── GOW2.jpg ├── GOW20.jpg ├── GOW21.jpg ├── GOW22.jpg ├── GOW23.jpg ├── GOW24.jpg ├── GOW25.jpg ├── GOW26.jpg ├── GOW27.jpg ├── GOW28.jpg ├── GOW29.jpg ├── GOW3.jpg ├── GOW30.jpg ├── GOW31.jpg ├── GOW32.jpg ├── GOW33.jpg ├── GOW34.jpg ├── GOW35.jpg ├── GOW36.jpg ├── GOW37.jpg ├── GOW38.jpg ├── GOW39.jpg ├── GOW4.jpg ├── GOW40.jpg ├── GOW41.jpg ├── GOW42.jpg ├── GOW43.jpg ├── GOW44.jpg ├── GOW45.jpg ├── GOW46.jpg ├── GOW47.jpg ├── GOW48.jpg ├── GOW49.jpg ├── GOW5.jpg ├── GOW50.jpg ├── GOW5_2.jpg ├── GOW6.jpg ├── GOW7.jpg ├── GOW8.jpg └── GOW9.jpg ├── eww ├── eww.scss ├── eww.yuck ├── images │ ├── mic.png │ ├── music.png │ ├── profile.png │ └── speaker.png ├── launch_bar ├── notifications.yuck ├── scripts │ ├── appname │ ├── battery │ ├── gpu │ ├── mem-ad │ ├── memory │ ├── music │ ├── music_info │ ├── notifications │ ├── pop │ ├── sbvol │ ├── weather │ ├── wifi │ ├── workspace │ └── workspace_bak └── sidebar.yuck ├── foot └── foot.ini ├── hyprpaper.conf ├── 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 ├── startup.ogg ├── theme.conf └── theme.toml /README.md: -------------------------------------------------------------------------------- 1 | # garden-hyprland-theme 2 | 3 | ## Screenshot 4 | 5 | https://user-images.githubusercontent.com/36456160/170814674-50c49874-5fd7-419c-ae05-3891adfe2daa.mp4 6 | 7 | ## Installation 8 | For complete system config, please see https://github.com/taylor85345/hyprland-dotfiles 9 | 10 | 1. Install Hyprland and all Dependencies 11 | 2. `mkdir ~/.config/hypr/themes` 12 | 3. `cd ~/.config/hypr/themes` 13 | 4. `git clone https://github.com/taylor85345/garden-hyprland-theme garden` 14 | 5. Add `source=~/.config/hypr/themes/garden/theme.conf` to the end of your hyprland.conf 15 | 16 | ## Dependencies 17 | 18 | - [hyprland-git](https://github.com/vaxerski/hyprland) - Wayland Compositor/WM 19 | - [eww](https://github.com/elkowar/eww) - Bar and Widgets 20 | - [nerd-fonts-inter](https://github.com/rsms/inter) - Font for bar text and icons 21 | - [fuzzel](https://codeberg.org/dnkl/fuzzel) - Rofi-like launcher 22 | - [rofi](https://github.com/davatorium/rofi) - For search utility, since no Wayland utilities can handle custom Rofi modi (that I know of) 23 | - [dunst](https://github.com/dunst-project/dunst) - Notification Daemon 24 | - [trayer](https://github.com/sargon/trayer-srg) - Systray Utility 25 | - [mpvpaper](https://github.com/GhostNaN/mpvpaper) - Video Backgrounds 26 | - [macchina](https://github.com/Macchina-CLI/macchina) - (Optional) Fetch Script 27 | - [socat](http://www.dest-unreach.org/socat/) - Socket utility for eww workspace module 28 | - [geticons](https://git.sr.ht/~zethra/geticons) - CLI tool for locating icons 29 | -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW1.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW1.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW10.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW10.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW11.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW11.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW12.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW12.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW13.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW13.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW14.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW14.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW15.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW15.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW16.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW16.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW17.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW17.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW18.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW18.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW2.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW2.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW3.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW3.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW4.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW4.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW5.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW5.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW6.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW6.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW7.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW7.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW8.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW8.mp4 -------------------------------------------------------------------------------- /Wallpapers/Clips/GoW9.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/Clips/GoW9.mp4 -------------------------------------------------------------------------------- /Wallpapers/GOW1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW1.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW10.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW11.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW12.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW13.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW14.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW15.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW16.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW17.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW18.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW19.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW19_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW19_1.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW2.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW20.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW21.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW22.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW23.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW24.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW25.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW26.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW27.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW28.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW28.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW29.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW29.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW3.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW30.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW31.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW31.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW32.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW33.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW33.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW34.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW34.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW35.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW35.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW36.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW36.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW37.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW38.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW38.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW39.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW39.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW4.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW40.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW40.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW41.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW41.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW42.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW42.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW43.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW43.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW44.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW44.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW45.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW45.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW46.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW46.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW47.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW47.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW48.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW48.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW49.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW5.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW50.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW50.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW5_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW5_2.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW6.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW7.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW8.jpg -------------------------------------------------------------------------------- /Wallpapers/GOW9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/Wallpapers/GOW9.jpg -------------------------------------------------------------------------------- /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: #3D4C5F; 15 | $red: #EE4F84; 16 | $green: #53E2AE; 17 | $orange: #F1FA8C; 18 | $blue: #92B6F4; 19 | $purple: #985EFF; 20 | $teal: #24D1E7; 21 | $white: #E5E5E5; 22 | 23 | /** General **/ 24 | .bar_class { 25 | background-color: rgba(00, 00, 00, 0.55); 26 | border-radius: 16px; 27 | border-style: solid; 28 | border-width: 2; 29 | border-color: $green; 30 | } 31 | .module { 32 | margin: 0px 0px 0px 0px; 33 | border-radius: 10px 10px 0px 10px; 34 | } 35 | 36 | .rightside{ 37 | background-color: $background; 38 | border-radius: 16px; 39 | border-style: solid; 40 | border-width: 2; 41 | border-color: $green; 42 | padding: 0px 30px 0px 30px; 43 | } 44 | 45 | .leftside{ 46 | background-color: $background; 47 | border-radius: 16px; 48 | border-style: solid; 49 | border-width: 2; 50 | border-color: $green; 51 | padding: 0px 30px 0px 30px; 52 | } 53 | 54 | .center_modules { 55 | margin: 0px 0px 0px 0px; 56 | border-radius: 0px 0px 0px 0px; 57 | } 58 | 59 | /** tooltip!! **/ 60 | tooltip.background { 61 | background-color: rgba(00, 00, 00, 0.5); 62 | font-size: 18; 63 | border-radius: 10px; 64 | color: $white; 65 | } 66 | 67 | tooltip label { 68 | margin: 6px; 69 | } 70 | 71 | 72 | /** Widgets **/ 73 | 74 | .clock_date_class { 75 | font-size: 24; 76 | margin: 0px 20px 0px -1px; 77 | color: $red; 78 | } 79 | 80 | .clock_time_class { 81 | color: $white; 82 | font-size: 28; 83 | font-weight: bold; 84 | margin: 0px 20px 0px 5px; 85 | } 86 | 87 | .notif_button { 88 | font-size: 28; 89 | margin: 0px 20px 0px 0px; 90 | color: $white; 91 | } 92 | 93 | .membar { 94 | color: $orange; 95 | background-color: $grey; 96 | border-radius: 10px; 97 | } 98 | .batbar { 99 | color: $green; 100 | background-color: $grey; 101 | border-radius: 5px; 102 | } 103 | .bright_icon { 104 | font-size: 22; 105 | color: $orange; 106 | margin: 0px 10px 0px 5px; 107 | } 108 | .brightbar trough highlight { 109 | background-image: linear-gradient(to right, $orange 30%, #f2cdcd 50%, $orange 100% *50); 110 | border-radius: 10px; 111 | } 112 | .volbar trough highlight { 113 | background-image: linear-gradient(to right, #afcee0 30%, #92B6F4 50%, #77a5bf 100% *50); 114 | border-radius: 10px; 115 | } 116 | .volume_icon { 117 | font-size: 22; 118 | color: $blue; 119 | margin: 0px 10px 0px 5px; 120 | } 121 | 122 | 123 | .module_essid { 124 | font-size: 18; 125 | color: $blue; 126 | margin: 0px 10px 0px 0px; 127 | } 128 | .module-wif { 129 | font-size: 22; 130 | color: $blue; 131 | margin: 0px 14px 0px 5px; 132 | } 133 | 134 | .iconlauncher { 135 | color: $green; 136 | font-size: 36px; 137 | margin: 0px 0px 0px 15px; 138 | } 139 | .iconsearch { 140 | color: $white; 141 | font-size: 24px; 142 | } 143 | .iconmem { 144 | color: $orange; 145 | } 146 | .iconbat { 147 | color: $green; 148 | } 149 | .iconbat, .iconmem { 150 | font-size: 15; 151 | margin: 9px; 152 | padding: 2px 6px 0px 0px; 153 | } 154 | 155 | 156 | .separ { 157 | color: $grey; 158 | font-weight: bold; 159 | font-size: 22px; 160 | margin: 0px 8px 0px 8px; 161 | } 162 | 163 | .launcher_module { 164 | background-color: rgba(00, 00, 00, 0.0); 165 | } 166 | .mem_module { 167 | background-color: rgba(00, 00, 00, 0.0); 168 | border-radius: 16px; 169 | margin: 0px 10px 0px 3px; 170 | } 171 | .bat_module { 172 | background-color: rgba(00, 00, 00, 0.0); 173 | border-radius: 16px; 174 | margin: 0px 10px 0px 10px; 175 | } 176 | 177 | 178 | scale trough { 179 | all: unset; 180 | background-color: #22242b; 181 | box-shadow: 0 2px 3px 2px #06060b; 182 | border-radius: 16px; 183 | min-height: 10px; 184 | min-width: 70px; 185 | margin: 0px 10px 0px 0px; 186 | } 187 | 188 | .works { 189 | font-size: 27px; 190 | font-weight: normal; 191 | margin: 6px 10px 0px 10px; 192 | background-color: rgba(00, 00, 00, 0.0); 193 | } 194 | 195 | .0 , .01, .02, .03, .04, .05, .06, .07, .08, .09, 196 | .011, .022, .033, .044, .055, .066, .077, .088, .099 { 197 | margin: 0px 18px 0px 0px; 198 | } 199 | 200 | /* Unoccupied */ 201 | .0 { 202 | color: $grey; 203 | } 204 | 205 | /* Occupied */ 206 | .01, .02, .03, .04, .05, .06, .07, .08, .09 { 207 | color: $white; 208 | } 209 | 210 | /* Focused */ 211 | .011, .022, .033, .044, .055, .066, .077, .088, .099{ 212 | color: $green; 213 | } 214 | 215 | 216 | .song_cover_art { 217 | background-size: cover; 218 | background-position: center; 219 | min-height: 24px; 220 | min-width: 24px; 221 | margin: 10px; 222 | border-radius: 100px; 223 | } 224 | 225 | .song { 226 | color: $blue; 227 | font-size : 18px; 228 | font-weight : bold; 229 | margin : 3px 5px 0px 0px; 230 | } 231 | 232 | .song_btn_play { 233 | color: $blue; 234 | font-size : 28px; 235 | margin : 3px 0px 0px 5px; 236 | 237 | } 238 | 239 | 240 | .song_btn_prev, .song_btn_next { 241 | color: $blue; 242 | font-size : 24px; 243 | margin : 3px 0px 0px 5px; 244 | 245 | } 246 | // Calendar 247 | .cal { 248 | background-color: rgba(00, 00, 00, 0.6); 249 | border-radius: 16px; 250 | font-family: Inter Nerd Font; 251 | font-size: 18px; 252 | font-weight: normal; 253 | 254 | .cal-in { 255 | padding: 10px 20px 10px 20px; 256 | color: #bfc9db; 257 | 258 | .cal { 259 | &.highlight { 260 | padding: 20px; 261 | } 262 | 263 | padding: 5px 5px 5px 5px; 264 | margin-left: 10px; 265 | } 266 | } 267 | } 268 | 269 | calender { 270 | color: #bfc9db; 271 | } 272 | calendar:selected { 273 | color: $blue; 274 | } 275 | 276 | calendar.header { 277 | color: $blue; 278 | font-weight: bold; 279 | } 280 | 281 | calendar.button { 282 | color: $green; 283 | } 284 | 285 | calendar.highlight { 286 | color: $blue; 287 | font-weight: bold; 288 | } 289 | 290 | calendar:indeterminate { 291 | color: #bfc9db; 292 | } 293 | 294 | 295 | 296 | .sys_sep { 297 | color: $grey; 298 | font-size: 18; 299 | margin: 0px 10px 0px 10px; 300 | } 301 | .sys_text_bat_sub, .sys_text_mem_sub { 302 | font-size: 16; 303 | color: #bbc5d7; 304 | margin: 5px 0px 0px 25px; 305 | } 306 | .sys_text_bat, .sys_text_mem { 307 | font-size: 21; 308 | font-weight: bold; 309 | margin: 14px 0px 0px 25px; 310 | } 311 | .sys_icon_bat, .sys_icon_mem { 312 | font-size: 30; 313 | margin: 30px; 314 | } 315 | .sys_win { 316 | background-color: rgba(00, 00, 00, 0.6); 317 | border-radius: 16px; 318 | } 319 | .sys_bat { 320 | color: $green; 321 | background-color: $grey; 322 | border-radius: 10px; 323 | } 324 | .sys_mem { 325 | color: #F1FA8C; 326 | background-color: $grey; 327 | border-radius: 10px; 328 | } 329 | .sys_icon_bat, .sys_text_bat { 330 | color: $green; 331 | } 332 | .sys_icon_mem, .sys_text_mem { 333 | color: $orange; 334 | } 335 | .sys_bat_box { 336 | border-radius: 16px; 337 | margin: 15px 10px 10px 20px; 338 | } 339 | .sys_mem_box { 340 | border-radius: 16px; 341 | margin: 15px 10px 15px 20px; 342 | } 343 | 344 | 345 | 346 | .app-name { 347 | color: $white; 348 | font-size : 20px; 349 | font-weight: bold; 350 | margin : 6px 0px 0px 0px; 351 | } 352 | 353 | .app-icon { 354 | margin : 3px 5px 0px 0px; 355 | } 356 | 357 | .app-button { 358 | color: $blue; 359 | font-size : 24px; 360 | font-weight : bold; 361 | margin : 0px 15px 0px 15px; 362 | } 363 | 364 | .audio-box { 365 | background-color: rgba(00, 00, 00, 0.6); 366 | border-radius: 16px; 367 | } 368 | .speaker_icon { 369 | background-size: cover; 370 | background-image: url('images/speaker.png'); 371 | background-position: center; 372 | min-height: 70px; 373 | min-width: 75px; 374 | margin: 10px 20px 5px 20px; 375 | border-radius: 12px; 376 | } 377 | 378 | .speaker_text { 379 | color: $blue; 380 | font-size : 26px; 381 | font-weight : bold; 382 | margin: 20px 0px 0px 0px; 383 | } 384 | 385 | .speaker_bar scale trough highlight { 386 | all: unset; 387 | background-image: linear-gradient(to right, #afcee0 30%, #92B6F4 50%, #77a5bf 100% *50); 388 | border-radius: 24px; 389 | } 390 | .speaker_bar scale trough { 391 | all: unset; 392 | background-color: #232232; 393 | box-shadow: 0 6px 5px 2px #06060b; 394 | border-radius: 24px; 395 | min-height: 13px; 396 | min-width: 120px; 397 | margin : 0px 0px 5px 0px; 398 | } 399 | 400 | 401 | 402 | 403 | .mic_icon { 404 | background-size: cover; 405 | background-image: url('images/mic.png'); 406 | background-position: center; 407 | min-height: 70px; 408 | min-width: 75px; 409 | margin: 20px 20px 20px 20px; 410 | border-radius: 12px; 411 | } 412 | 413 | .mic_text { 414 | color: $blue; 415 | font-size : 26px; 416 | font-weight : bold; 417 | margin: 0px 0px 0px 0px; 418 | } 419 | 420 | .mic_bar scale trough highlight { 421 | all: unset; 422 | background-image: linear-gradient(to right, #afcee0 30%, #92B6F4 50%, #77a5bf 100% *50); 423 | border-radius: 24px; 424 | } 425 | .mic_bar scale trough { 426 | all: unset; 427 | box-shadow: 0 6px 5px 2px #06060b; 428 | background-color: #232232; 429 | border-radius: 24px; 430 | min-height: 13px; 431 | min-width: 120px; 432 | margin : 0px 0px 20px 0px; 433 | } 434 | 435 | .audio_sep { 436 | color: #38384d; 437 | font-size: 18; 438 | margin : 0px 0px 0px 0px; 439 | } 440 | 441 | 442 | // Music 443 | .music-player { 444 | all: unset; 445 | background-color: $widget-background; 446 | padding: 0px 25px 0px 17px; 447 | border-radius: 16px; 448 | border-style: solid; 449 | border-width: 2; 450 | border-color: $red; 451 | } 452 | 453 | .album_art { 454 | background-size: cover; 455 | background-position: center; 456 | border-radius: 12px; 457 | margin: 2rem 1rem 1.5rem 1rem; 458 | padding: 4rem;} 459 | 460 | .song { 461 | font-weight: bold; 462 | color: $white; 463 | font-size : 1.2em; 464 | } 465 | .artist { 466 | font-style: italic; 467 | font-size: 1.1em; 468 | color: $blue; 469 | margin-top: -5px; 470 | } 471 | .btn_prev, .btn_play, .btn_next { 472 | color: $purple; 473 | font-size: 25px; 474 | } 475 | 476 | .metric-player scale trough highlight { 477 | all: unset; 478 | border-radius: 10px; 479 | background-color: $blue; 480 | } 481 | 482 | // weather 483 | .weather { 484 | all: unset; 485 | background-color: $widget-background; 486 | border-radius: 16px; 487 | border-style: solid; 488 | border-width: 2; 489 | border-color: $red; 490 | padding: 23px 37px 20px 37px; 491 | } 492 | 493 | .iconweather { 494 | font-size : 44px; 495 | font-weight : normal; 496 | margin : 0px -5px 0px 20px; 497 | } 498 | 499 | .label_temp { 500 | color : $blue; 501 | font-size : 35px; 502 | font-weight : bold; 503 | margin : 0px 0px 0px 0px; 504 | font-family: Furamono Nerd Font; 505 | 506 | } 507 | 508 | .label_stat { 509 | color : $blue; 510 | font-size : 38px; 511 | font-weight : bold; 512 | } 513 | 514 | .label_quote { 515 | color : $blue; 516 | font-size : 18px; 517 | padding-bottom: 10px; 518 | font-weight : normal; 519 | } 520 | 521 | .date { 522 | all: unset; 523 | background-color: $widget-background; 524 | padding: 33px 27px 27px 27px; 525 | border-radius: 16px; 526 | border-style: solid; 527 | border-width: 2; 528 | border-color: $red; 529 | color: $blue; 530 | font-size : 18px; 531 | font-style : italic; 532 | font-family: Cartograph CF; 533 | } 534 | 535 | .stats-box { 536 | all: unset; 537 | background-color: $widget-background; 538 | padding: 20px 25px 20px 25px; 539 | border-radius: 16px; 540 | border-style: solid; 541 | border-width: 2; 542 | border-color: $red; 543 | } 544 | 545 | .stats-icon { 546 | font-size: 23px; 547 | color: $blue; 548 | } 549 | 550 | 551 | scale trough { 552 | all: unset; 553 | background-color: $widget-background; 554 | box-shadow: 0 2px 3px 2px $shadow; 555 | border-radius: 16px; 556 | min-height: 10px; 557 | min-width: 70px; 558 | margin: 0px 5px 0px 10px; 559 | } 560 | 561 | .scale highlight { 562 | background-image: linear-gradient(to right, #afcee0 30%, #92B6F4 50%, #77a5bf 100% *50); 563 | border-radius: 15px; 564 | } 565 | 566 | .foo { 567 | font-size: 40px; 568 | padding-top: 10px; 569 | } 570 | 571 | .buttons { 572 | opacity: 1; 573 | background-color: $widget-background; 574 | border-radius: 16px; 575 | border-style: solid; 576 | border-width: 2; 577 | border-color: $red; 578 | padding: 15px 0px 15px 0px; 579 | margin-bottom: 30px; 580 | } 581 | 582 | .poweroff, .reboot, .firmware, .exit, .restart { 583 | margin: 0px 16px 0px 16px; 584 | padding: 4px 15px 4px 9px; 585 | border-radius: 25px; 586 | font-size: 25px; 587 | color: $black; 588 | } 589 | 590 | .poweroff { 591 | background-color: $red; 592 | } 593 | .reboot { 594 | background-color: $green; 595 | } 596 | .firmware { 597 | background-color: $orange; 598 | } 599 | .exit { 600 | background-color: $purple; 601 | } 602 | .restart { 603 | background-color: $blue; 604 | } 605 | 606 | .fetch { 607 | margin-top: 35px; 608 | font-size: 15px; 609 | border-radius: 16px; 610 | border-style: solid; 611 | border-width: 2; 612 | border-color: $red; 613 | background-color: $widget-background; 614 | padding: 30px 55px 30px 55px; 615 | } 616 | 617 | .wm { 618 | font-weight: bold; 619 | color: $red; 620 | } 621 | 622 | .host { 623 | font-weight: bold; 624 | color: $purple; 625 | } 626 | 627 | .uptime { 628 | font-weight: bold; 629 | color: $orange; 630 | } 631 | 632 | .packages { 633 | font-weight: bold; 634 | color: $blue; 635 | } 636 | 637 | .kernal { 638 | font-weight: bold; 639 | color: $green; 640 | } 641 | 642 | .notification { 643 | all: unset; 644 | background-color: $widget-background; 645 | padding: 20px 25px 20px 17px; 646 | margin: 0px 0px 0px 0px; 647 | border-radius: 12px; 648 | border-width: 2px; 649 | border-style: solid; 650 | border-color: $red;} 651 | 652 | .notification-header { 653 | all: unset; 654 | background-color: $widget-background; 655 | padding: 20px 25px 20px 17px; 656 | margin: 20px 0px 10px 0px; 657 | border-radius: 12px; 658 | border-width: 2px; 659 | border-style: solid; 660 | border-color: $green;} 661 | 662 | .notification-icon { 663 | color: $white; 664 | font-size: 36px; 665 | margin: 0px 20px 0px 10px; 666 | } 667 | 668 | .notification-appname { 669 | font-size: 14px; 670 | font-weight: bold; 671 | color: $orange; 672 | } 673 | 674 | .notification-summary { 675 | font-size: 18px; 676 | font-weight: bold; 677 | color: $white; 678 | } 679 | 680 | .notification-body { 681 | font-size: 14px; 682 | color: $white; 683 | } 684 | 685 | .notification-label { 686 | font-size: 30px; 687 | color: $blue; 688 | margin: 0px 50px 0px 0px; 689 | } 690 | .notification-action { 691 | font-size: 36px; 692 | color: $white; 693 | margin: 0px 0px 0px 20px; 694 | } 695 | -------------------------------------------------------------------------------- /eww/eww.yuck: -------------------------------------------------------------------------------- 1 | ;; Variables 2 | 3 | (include "sidebar.yuck") 4 | (include "notifications.yuck") 5 | 6 | (defpoll monitors :interval "1m" "hyprctl monitors -j | jq -rc '[ .[].id ] | sort_by( . )'") 7 | (defpoll clock_time :interval "5s" "date '+\%l󰇙\%M \%p'") 8 | (defpoll clock_date :interval "10h" "date '+%b %d, %Y'") 9 | (defpoll calendar_day :interval "20h" "date '+%d'") 10 | (defpoll calendar_year :interval "20h" "date '+%Y'") 11 | (defpoll volume_percent :interval "1s" "scripts/sbvol --get") 12 | (defpoll mic_percent :interval "3s" "amixer -D pulse sget Capture | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") 13 | (defpoll brightness_percent :interval "5s" "light") 14 | (defpoll COL_WLAN :interval "1m" "scripts/wifi --COL") 15 | (defpoll ESSID_WLAN :interval "1m" "scripts/wifi --ESSID") 16 | (defpoll WLAN_ICON :interval "1m" "scripts/wifi --ICON") 17 | (deflisten workspace "scripts/workspace") 18 | (deflisten appname "scripts/appname") 19 | 20 | (defvar vol_reveal false) 21 | (defvar br_reveal false) 22 | (defvar music_reveal false) 23 | (defvar control_reveal false) 24 | (defvar wifi_rev false) 25 | (defvar time_rev false) 26 | 27 | 28 | ;; widgets 29 | 30 | (defwidget launcher [] 31 | (box 32 | :class "launcher_module" 33 | :orientation "h" 34 | (button 35 | :onclick "rofi -no-lazy-grab -show drun -theme ~/.config/hypr/themes/garden/rofi/launcher.rasi &" 36 | :class "iconlauncher" "") 37 | (button 38 | :onclick "rofi -show filebrowser &" 39 | :class "iconsearch" "") 40 | )) 41 | 42 | (defwidget workspaces [] 43 | (literal 44 | :content workspace)) 45 | 46 | (defwidget appnames [] 47 | (eventbox 48 | :onhover "${EWW_CMD} update control_reveal=true" 49 | :onhoverlost "${EWW_CMD} update control_reveal=false" 50 | (box 51 | :orientation "h" 52 | :space-evenly "false" 53 | :vexpand "false" 54 | :hexpand "false" 55 | (literal 56 | :content appname) 57 | (revealer 58 | :transition "slideright" 59 | :reveal control_reveal 60 | :duration "350ms" 61 | (box 62 | :vexpand "false" 63 | :hexpand "false" 64 | :orientation "h" 65 | :space-evenly "false" 66 | (button 67 | :class "app-button" 68 | :onclick "hyprctl dispatch togglefloating 1" "") 69 | (button 70 | :class "app-button" 71 | :onclick "hyprctl dispatch fullscreen 1" "") 72 | (button 73 | :class "app-button" 74 | :onclick "hyprctl dispatch killactive 1" "")))))) 75 | 76 | (defwidget bright [] 77 | (eventbox 78 | :onhover "${EWW_CMD} update br_reveal=true" 79 | :onhoverlost "${EWW_CMD} update br_reveal=false" 80 | (box 81 | :class "module" 82 | :space-evenly "false" 83 | :orientation "h" 84 | :spacing "3" 85 | (revealer 86 | :transition "slideright" 87 | :reveal br_reveal 88 | :duration "350ms" 89 | (scale :class "brightbar" 90 | :value brightness_percent 91 | :orientation "h" 92 | :tooltip "${brightness_percent}%" 93 | :max 100 94 | :min 0 95 | :onchange "light -S {}" )) 96 | (label 97 | :text "" 98 | :class "bright_icon" 99 | :tooltip "brightness")))) 100 | 101 | (defwidget volume [] 102 | (eventbox 103 | :onhover "${EWW_CMD} update vol_reveal=true" 104 | :onhoverlost "${EWW_CMD} update vol_reveal=false" 105 | (box 106 | :class "module-2" 107 | :space-evenly "false" 108 | :orientation "h" 109 | :spacing "3" 110 | (revealer 111 | :transition "slideright" 112 | :reveal vol_reveal 113 | :duration "350ms" 114 | (scale 115 | :class "volbar" 116 | :value volume_percent 117 | :orientation "h" 118 | :tooltip "${volume_percent}%" 119 | :max 100 120 | :min 0 121 | :onchange "amixer sset Master {}%" )) 122 | (button 123 | :onclick "${EWW_CMD} open --toggle audio_ctl" 124 | :class "volume_icon" 125 | "墳")))) 126 | 127 | (defwidget wifi [] 128 | (eventbox 129 | :onhover "${EWW_CMD} update wifi_rev=true" 130 | :onhoverlost "${EWW_CMD} update wifi_rev=false" 131 | (box 132 | :vexpand "false" 133 | :hexpand "false" 134 | :space-evenly "false" 135 | (revealer 136 | :transition "slideright" 137 | :reveal wifi_rev 138 | :duration "350ms" 139 | (label 140 | :class "module_essid" 141 | :text ESSID_WLAN 142 | )) 143 | (button 144 | :class "module-wif" 145 | :onclick "networkmanager_dmenu" 146 | WLAN_ICON)))) 147 | 148 | (defwidget bat [] 149 | (box 150 | :class "bat_module" 151 | :vexpand "false" 152 | :hexpand "false" 153 | (circular-progress 154 | :value {EWW_BATTERY["BAT0"].capacity} 155 | :class "batbar" 156 | :thickness 4 157 | (button 158 | :class "iconbat" 159 | :limit-width 2 160 | :tooltip "battery on ${EWW_BATTERY["BAT0"].capacity}%" 161 | :show_truncated false 162 | :onclick "${EWW_CMD} open --toggle system" 163 | :wrap false 164 | "")))) 165 | 166 | (defwidget mem [] 167 | (box :class "mem_module" :vexpand "false" :hexpand "false" 168 | (circular-progress 169 | :value {EWW_RAM.used_mem_perc} 170 | :class "membar" 171 | :thickness 4 172 | (button 173 | :class "iconmem" 174 | :limit-width 2 175 | :tooltip "using ${EWW_RAM.used_mem_perc}% ram" 176 | :onclick "${EWW_CMD} open --toggle system" 177 | :show_truncated false 178 | :wrap false 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 :orientation "h" 239 | :space-evenly false 240 | :halign "center" 241 | :class "center_modules" 242 | (appnames))) 243 | (defwidget right [] 244 | (box 245 | :orientation "h" 246 | :space-evenly false 247 | :halign "end" 248 | :class "right_modules" 249 | (bright) 250 | (volume) 251 | (wifi) 252 | (sep) 253 | (bat) 254 | (mem) 255 | (sep) 256 | (clock_module) 257 | (notif_button) 258 | )) 259 | 260 | ;;Define bar 261 | (defwidget bar_layout [] 262 | (centerbox 263 | :class "bar_class" 264 | :orientation "h" 265 | (left) 266 | (center) 267 | (right) 268 | )) 269 | (defwindow bar0 270 | :exclusive false 271 | :monitor 0 272 | :geometry (geometry 273 | :x "15px" 274 | :y "9px" 275 | :width "98%" 276 | :height "30px" 277 | :anchor "top center") 278 | :stacking "fg" 279 | :windowtype "dock" 280 | (bar_layout)) 281 | (defwindow bar1 282 | :exclusive false 283 | :monitor 1 284 | :geometry (geometry 285 | :x "15px" 286 | :y "9px" 287 | :width "98%" 288 | :height "30px" 289 | :anchor "top center") 290 | :stacking "bg" 291 | :windowtype "dock" 292 | (bar_layout)) 293 | (defwindow bar2 294 | :exclusive false 295 | :monitor 2 296 | :geometry (geometry 297 | :x "15px" 298 | :y "9px" 299 | :width "98%" 300 | :height "30px" 301 | :anchor "top center") 302 | :stacking "bg" 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 | :space-evenly "false" 341 | :orientation "h" 342 | :onchange "amixer -D pulse sset Master {}%" 343 | :tooltip "volume on ${volume_percent}%" 344 | :max 100 345 | :min 0)))) 346 | (label 347 | :text "_____________________________________" 348 | :class "audio_sep" 349 | :halign "center") 350 | (box 351 | :halign "v" 352 | :space-evenly "false" 353 | :hexpand "false" 354 | :vexpand "false" 355 | (box 356 | :class "mic_icon" 357 | :orientation "v") 358 | (box 359 | :orientation "v" 360 | :halign "center" 361 | :vexpand "false" 362 | :hexpand "false" 363 | (label 364 | :class "mic_text" 365 | :text "mic" 366 | :valign "center" 367 | :halign "left" ) 368 | (box 369 | :class "mic_bar" 370 | :halign "center" 371 | :vexpand "false" 372 | :hexpand "false" 373 | (scale 374 | :value mic_percent 375 | :space-evenly "false" 376 | :orientation "h" 377 | :tooltip "mic on ${mic_percent}%" 378 | :onchange "amixer -D pulse sset Capture {}%" 379 | :max 100 380 | :min 0)))))) 381 | (defwindow audio_ctl 382 | :stacking "fg" 383 | :focusable "false" 384 | :screen 1 385 | :monitor 0 386 | :geometry (geometry 387 | :x "20" 388 | :y "7%" 389 | :anchor "top right" 390 | :width "280px" 391 | :height "60px") 392 | (audio)) 393 | 394 | 395 | ;;Define System widget 396 | (defwidget system [] 397 | (box 398 | :class "sys_win" 399 | :orientation "v" 400 | :space-evenly "false" 401 | :hexpand "false" 402 | :vexpand "false" 403 | :spacing 0 404 | (box 405 | :class "sys_bat_box" 406 | :orientation "h" 407 | :space-evenly "false" 408 | (circular-progress 409 | :value {EWW_BATTERY["BAT0"].capacity} 410 | :class "sys_bat" 411 | :thickness 9 412 | (label :text "" 413 | :class "sys_icon_bat" 414 | :limit-width 2 415 | :show_truncated false 416 | :wrap false)) 417 | (box 418 | :orientation "v" 419 | :space-evenly "false" 420 | :spacing 0 421 | :hexpand "false" 422 | :vexpand "false" 423 | (label 424 | :text "battery" 425 | :halign "start" 426 | :class "sys_text_bat" 427 | :limit-width 9 428 | :show_truncated false 429 | :wrap false) 430 | (label 431 | :text "${EWW_BATTERY["BAT0"].capacity}%" 432 | :halign "start" 433 | :class "sys_text_bat_sub" 434 | :limit-width 22 435 | :show_truncated false 436 | :wrap false) 437 | (label 438 | :text "${EWW_BATTERY["BAT0"].status}" 439 | :halign "start" 440 | :class "sys_text_bat_sub" 441 | :limit-width 22 442 | :show_truncated false 443 | :wrap false))) 444 | (label 445 | :text "____________________________________" 446 | :class "sys_sep" 447 | :halign "center") 448 | (box 449 | :class "sys_mem_box" 450 | :orientation "h" 451 | :space-evenly "false" 452 | :halign "start" 453 | (circular-progress 454 | :value {EWW_RAM.used_mem_perc} 455 | :class "sys_mem" 456 | :thickness 9 457 | (label 458 | :text "" 459 | :class "sys_icon_mem" 460 | :limit-width 2 461 | :show_truncated false 462 | :wrap false 463 | :angle 0.0)) 464 | (box 465 | :orientation "v" 466 | :space-evenly "false" 467 | :spacing 0 468 | :hexpand "false" 469 | :vexpand "false" 470 | (label 471 | :text "memory" 472 | :halign "start" 473 | :class "sys_text_mem" 474 | :limit-width 9 475 | :show_truncated false 476 | :wrap false) 477 | (label 478 | :text "${round((EWW_RAM.available_mem / 1024), 0)} | ${round((EWW_RAM.total_mem / 1024), 0)}mb " 479 | :halign "start" 480 | :class "sys_text_mem_sub" 481 | :limit-width 22 482 | :show_truncated false 483 | :wrap false) 484 | (label 485 | :text "${round((EWW_RAM.used_mem / 1024), 0)}mb free" 486 | :halign "start" 487 | :class "sys_text_mem_sub" 488 | :limit-width 22 489 | :wrap false) 490 | )))) 491 | (defwindow system 492 | :stacking "fg" 493 | :focusable "false" 494 | :screen 1 495 | :monitor 0 496 | :geometry (geometry 497 | :x "20" 498 | :y "7%" 499 | :anchor "top right" 500 | :width "290px" 501 | :height "120px") 502 | (system)) 503 | 504 | 505 | 506 | ;;Calendar Widget 507 | (defwidget cal [] 508 | (box 509 | :class "cal" 510 | :orientation "v" 511 | (box 512 | :class "cal-in" 513 | (calendar 514 | :day calendar_day 515 | :year calendar_year)))) 516 | (defwindow calendar 517 | :stacking "fg" 518 | :focusable "false" 519 | :screen 1 520 | :monitor 0 521 | :geometry (geometry 522 | :x "20" 523 | :y "7%" 524 | :anchor "top right" 525 | :width "270px" 526 | :height "60px") 527 | (cal)) 528 | -------------------------------------------------------------------------------- /eww/images/mic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/eww/images/mic.png -------------------------------------------------------------------------------- /eww/images/music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/eww/images/music.png -------------------------------------------------------------------------------- /eww/images/profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/eww/images/profile.png -------------------------------------------------------------------------------- /eww/images/speaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/eww/images/speaker.png -------------------------------------------------------------------------------- /eww/launch_bar: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Files and cmd 4 | CONF_DIR="$HOME/.config/hypr/themes/garden/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/pop: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | EWW_BIN="/usr/bin/eww -c $HOME/.config/hypr/themes/garden/eww" 3 | WIDGET=$1 4 | 5 | # Open widgets 6 | if ${EWW_BIN} windows | grep ^$WIDGET$ ; then 7 | ${EWW_BIN} close system audio_ctl calendar 8 | ${EWW_BIN} open "$WIDGET" 9 | elif ${EWW_BIN} windows | grep ^\*$WIDGET$ ; then 10 | ${EWW_BIN} close "$WIDGET" 11 | else exit 12 | fi 13 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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=000000 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 | -------------------------------------------------------------------------------- /hyprpaper.conf: -------------------------------------------------------------------------------- 1 | preload = ~/Pictures/Neon Wallpaper/Neon_Circle.jpg 2 | preload = ~/Pictures/Neon Wallpaper/Neon_Leaves.jpg 3 | 4 | wallpaper = eDP-2,~/Pictures/Neon Wallpaper/Neon_Leaves.jpg 5 | wallpaper = eDP-1,~/Pictures/Neon Wallpaper/Neon_Leaves.jpg 6 | wallpaper = DP-1,~/Pictures/Neon Wallpaper/Neon_Leaves.jpg 7 | 8 | #preload = ~/Pictures/GoW/GOW1.png 9 | #preload = ~/Pictures/GoW/GOW2.png 10 | #preload = ~/Pictures/GoW/GOW3.png 11 | #preload = ~/Pictures/GoW/GOW4.png 12 | #preload = ~/Pictures/GoW/GOW5.png 13 | #preload = ~/Pictures/GoW/GOW5_2.png 14 | #preload = ~/Pictures/GoW/GOW6.png 15 | #preload = ~/Pictures/GoW/GOW7.png 16 | #preload = ~/Pictures/GoW/GOW8.png 17 | #preload = ~/Pictures/GoW/GOW9.png 18 | #preload = ~/Pictures/GoW/GOW10.png 19 | #preload = ~/Pictures/GoW/GOW11.png 20 | #preload = ~/Pictures/GoW/GOW12.png 21 | #preload = ~/Pictures/GoW/GOW13.png 22 | #preload = ~/Pictures/GoW/GOW14.png 23 | #preload = ~/Pictures/GoW/GOW15.png 24 | #preload = ~/Pictures/GoW/GOW16.png 25 | #preload = ~/Pictures/GoW/GOW17.png 26 | #preload = ~/Pictures/GoW/GOW18.png 27 | #preload = ~/Pictures/GoW/GOW19_1.png 28 | #preload = ~/Pictures/GoW/GOW20.png 29 | #preload = ~/Pictures/GoW/GOW21.png 30 | #preload = ~/Pictures/GoW/GOW22.png 31 | #preload = ~/Pictures/GoW/GOW23.png 32 | #preload = ~/Pictures/GoW/GOW24.png 33 | #preload = ~/Pictures/GoW/GOW25.png 34 | #preload = ~/Pictures/GoW/GOW26.png 35 | #preload = ~/Pictures/GoW/GOW27.png 36 | #preload = ~/Pictures/GoW/GOW28.png 37 | #preload = ~/Pictures/GoW/GOW29.png 38 | #preload = ~/Pictures/GoW/GOW30.png 39 | #preload = ~/Pictures/GoW/GOW31.png 40 | #preload = ~/Pictures/GoW/GOW32.png 41 | #preload = ~/Pictures/GoW/GOW33.png 42 | #preload = ~/Pictures/GoW/GOW34.png 43 | #preload = ~/Pictures/GoW/GOW35.png 44 | #preload = ~/Pictures/GoW/GOW36.png 45 | #preload = ~/Pictures/GoW/GOW37.png 46 | #preload = ~/Pictures/GoW/GOW38.png 47 | #preload = ~/Pictures/GoW/GOW39.png 48 | #preload = ~/Pictures/GoW/GOW40.png 49 | #preload = ~/Pictures/GoW/GOW41.png 50 | #preload = ~/Pictures/GoW/GOW42.png 51 | #preload = ~/Pictures/GoW/GOW43.png 52 | #preload = ~/Pictures/GoW/GOW44.png 53 | #preload = ~/Pictures/GoW/GOW45.png 54 | #preload = ~/Pictures/GoW/GOW46.png 55 | #preload = ~/Pictures/GoW/GOW47.png 56 | #preload = ~/Pictures/GoW/GOW48.png 57 | #preload = ~/Pictures/GoW/GOW49.png 58 | #preload = ~/Pictures/GoW/GOW50.png 59 | -------------------------------------------------------------------------------- /rofi/global/.gitignore: -------------------------------------------------------------------------------- 1 | history.txt 2 | -------------------------------------------------------------------------------- /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: #000000CC; 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 --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 | -------------------------------------------------------------------------------- /startup.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taylor85345/garden-hyprland-theme/8ff954f23ae66a05e3dc1a038a09cf863a84df65/startup.ogg -------------------------------------------------------------------------------- /theme.conf: -------------------------------------------------------------------------------- 1 | $THEME_DIR=$HOME/.config/hypr/themes/garden 2 | 3 | monitor=,addreserved,55,0,0,0 4 | 5 | general { 6 | col.active_border=0xFF53E2AE 7 | col.inactive_border=0xFFF48FB1 8 | border_size=2 9 | 10 | gaps_in=8 11 | gaps_out=20 12 | } 13 | 14 | decoration { 15 | rounding=13 16 | 17 | drop_shadow=1 18 | shadow_range=20 19 | shadow_render_power=2 20 | shadow_ignore_window=1 21 | shadow_offset= 8 8 22 | col.shadow=0x44000000 23 | blur { 24 | enabled=1 25 | size=5 26 | passes=2 27 | } 28 | } 29 | 30 | layerrule=blur,gtk-layer-shell 31 | layerrule=ignorezero,gtk-layer-shell 32 | layerrule=blur,notifications 33 | layerrule=ignorezero,notifications 34 | layerrule=blur,rofi 35 | layerrule=ignorezero,rofi 36 | 37 | 38 | unbind=SUPER,Return 39 | bind=SUPER,Return,exec,footclient 40 | 41 | bind=SUPER,B,exec,eww -c ~/.config/hypr/themes/garden/eww/ open --toggle bar0 42 | bind=SUPER,D,exec,rofi -no-lazy-grab -show drun -theme "$THEME_DIR"/rofi/launcher.rasi 43 | bindr=SUPER,Super_L,exec,pkill rofi || rofi -no-lazy-grab -show drun -theme "$THEME_DIR"/rofi/launcher.rasi 44 | 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 45 | bind=SUPERALT,D,exec,prime-run rofi -drun-show-actions -no-lazy-grab -show drun -theme "$THEME_DIR"/rofi/launcher.rasi 46 | 47 | exec-once=foot --server --config="$THEME_DIR"/foot/foot.ini 48 | exec="$THEME_DIR"/scripts/wallpaper "$THEME_DIR"/Wallpapers/ "$THEME_DIR"/Wallpapers/Clips 49 | exec=killall -3 eww & sleep 1 && "$THEME_DIR"/eww/launch_bar 50 | -------------------------------------------------------------------------------- /theme.toml: -------------------------------------------------------------------------------- 1 | [theme] 2 | name = "garden" 3 | desc = "A relaxing nature rice inspired by the movie Garden of Words" 4 | version = "1.0" 5 | author = "BeardWarrior" 6 | git = "https://github.com/taylor85345/garden-hyprland-theme" 7 | config = "theme.conf" 8 | 9 | [kill] 10 | exclude_bar = ["eww"] 11 | exclude_wallpaper = ["swaybg,mpvpaper"] 12 | --------------------------------------------------------------------------------