├── README.md ├── dot_config ├── deadd │ ├── deadd.css │ └── deadd.yml ├── eww │ ├── assets │ │ ├── avatar.jpg │ │ ├── avatar2.jpg │ │ ├── powermenu │ │ │ ├── lock.png │ │ │ ├── logout.png │ │ │ ├── reboot.png │ │ │ ├── shutdown.png │ │ │ ├── suspend.png │ │ │ └── svg │ │ │ │ ├── lock.svg │ │ │ │ ├── logout.svg │ │ │ │ ├── reboot.svg │ │ │ │ ├── shutdown.svg │ │ │ │ └── suspend.svg │ │ └── wallpaper.png │ ├── eww.scss │ ├── eww.yuck │ ├── scripts │ │ ├── bat │ │ ├── bluetooth │ │ ├── brightness │ │ ├── init │ │ ├── launcher │ │ ├── media │ │ ├── media_pos │ │ ├── network │ │ ├── night_light │ │ ├── notifications │ │ ├── osd │ │ ├── player │ │ ├── todo │ │ ├── volume │ │ ├── weather │ │ └── window │ ├── scss │ │ ├── colors.scss │ │ ├── colors_dark.scss │ │ ├── colors_light.scss │ │ ├── common.scss │ │ ├── datemenu.scss │ │ ├── desktop.scss │ │ ├── osd.scss │ │ ├── panel.scss │ │ ├── powermenu.scss │ │ ├── quicksettings.scss │ │ └── variables.scss │ ├── wallpapers │ │ ├── FoolMoon.png │ │ └── Kurz.png │ └── yuck │ │ ├── datemenu.yuck │ │ ├── desktop.yuck │ │ ├── osd.yuck │ │ ├── panel.yuck │ │ ├── powermenu.yuck │ │ ├── quicksettings.yuck │ │ ├── vars.yuck │ │ └── windows.yuck ├── foot │ └── foot.ini ├── gtk-3.0 │ ├── bookmarks │ ├── gtk.css │ └── settings.ini ├── gtk-4.0 │ ├── gtk.css │ └── settings.ini ├── gtklock │ ├── config.ini │ ├── style-dark.css │ ├── style-light.css │ ├── style.css │ └── style.scss ├── hypr │ └── hyprland.conf ├── neofetch │ └── config.conf ├── tofi │ ├── config │ └── config.defaults ├── waybar │ ├── config │ └── style.css └── xaskpass │ └── xaskpass.toml ├── dot_local ├── bin │ ├── hlwrapped │ ├── wallpaper_fool │ └── wallpaper_kurz └── share │ └── applications │ ├── FoolMoon.desktop │ └── Kurz.desktop └── extras └── wrapped.desktop /README.md: -------------------------------------------------------------------------------- 1 | # HORRENDOUSLY outdated. Check out [Aylur](https://github.com/Aylur/dotfiles) instead 2 | 3 | # Dotfiles 4 | [Video Demo](https://youtu.be/TZMfpNfRKUQ) 5 | 6 | ## Features 7 | | Software | Name | 8 | |---|---| 9 | | Window Manager | [Hyprland](https://hyprland.org/) | 10 | | Display Manager | [SDDM](https://github.com/sddm/sddm) | 11 | | Wallpaper | [swww](https://github.com/Horus645/swww) | 12 | | Text Editor | [NvChad](https://nvchad.com/) & [Neovide](https://neovide.dev/) | 13 | | Font | [JetBrainsMono](https://www.jetbrains.com/lp/mono/) & [Iosevka Nerd Font](https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/Iosevka) | 14 | | Terminal Emulator | [foot](https://codeberg.org/dnkl/foot) | 15 | | Launcher | [tofi](https://github.com/philj56/tofi) | 16 | | Notifications | [deadd](https://github.com/phuhl/linux_notification_center) | 17 | | Bar and Widgets | [waybar](https://github.com/Alexays/Waybar) & [eww](https://github.com/elkowar/eww) | 18 | | Screenlock | [GTKlock](https://github.com/jovanlanik/gtklock) | 19 | 20 | 21 | ## Extras 22 | Software required for widgets to work: 23 | 24 | * **playerctl** - control media 25 | 26 | * **grep & awk & jq & socat & gjs** - script functionality 27 | 28 | * **brightnessctl** - control brightness 29 | 30 | * **wlsunset** - blue light filter 31 | 32 | * **blueberry** - bluetooth gui 33 | 34 | ## Install Guide 35 | DISCLAIMER: These dotfiles are held together with duct tape and saftey pins so installing may require troubleshooting outside of the guide. Furthermore, this guide assumes you are using Arch Linux. 36 | 37 | ### Dependencies 38 | ``` 39 | wayland hyprland sddm foot neovide waybar-hyprland-git qjackctl deadd-notification-center-bin eww-wayland tofi gtklock-git gtk3 gtk4 playerctl gjs grep awk jq socat swww-git hyprpicker-git pipewire wireplumber pipewire-alsa pipewire-jack pipewire-pulse pipewire-audio wlsunset blueberry brightnessctl 40 | ``` 41 | ### In case swww compile fails, run 42 | ``` 43 | rustup default stable 44 | ``` 45 | 46 | ### Copy repository 47 | ``` 48 | git clone https://github.com/PoobToo/dotfiles.git 49 | ``` 50 | 51 | ### Copy configs 52 | ``` 53 | cp -r dotfiles/dot_local/* .local 54 | cp -r dotfiles/dot_config/* .config 55 | cp dotfiles/extras/wrapped.desktop /usr/share/wayland-sessions/ 56 | ``` 57 | ### Install NvChad Configs following their [guide](https://nvchad.com/docs/quickstart/install) 58 | 59 | ### Install JetBrainsMono Nerd Font and Iosevka Nerd Font. I reccommend using [getnf](https://github.com/ronniedroid/getnf) 60 | 61 | ### Ensure script permissions 62 | ``` 63 | chmod +x .local/bin/* 64 | chmod +x .config/eww/scripts/* 65 | ``` 66 | 67 | ### Enable sddm using ```systemctl enable sddm.service``` if you have not already 68 | 69 | ### Now just make sure you chose HyprWrapped when logging in on sddm! 70 | 71 | ## Credits 72 | [@Aylur](https://github.com/Aylur/dotfiles) for most of the bar 73 | 74 | [@flick0](https://github.com/flick0/dotfiles/tree/aurora) for workspaces widget 75 | 76 | [Crayola](https://shop.crayola.com/color-and-draw/crayons) for their nutritional sustenance 77 | -------------------------------------------------------------------------------- /dot_config/deadd/deadd.css: -------------------------------------------------------------------------------- 1 | 2 | /* Notification center */ 3 | 4 | .blurredBG, #main_window, .blurredBG.low, .blurredBG.normal { 5 | background: rgba(24, 24, 24, 1); 6 | } 7 | 8 | .noti-center.time { 9 | font-size: 32px; 10 | } 11 | 12 | /* Notifications */ 13 | 14 | .title { 15 | font-weight: bold; 16 | font-size: 16px; 17 | } 18 | 19 | .appname { 20 | font-size: 12px; 21 | } 22 | 23 | .time { 24 | font-size: 12px; 25 | } 26 | 27 | .blurredBG.notification { 28 | background: rgba(24, 24, 24, 1); 29 | } 30 | 31 | .blurredBG.notification.critical { 32 | background: rgba(24, 24, 24, 1); 33 | } 34 | 35 | .notificationInCenter.critical { 36 | background: rgba(155, 0, 20, 1); 37 | } 38 | 39 | /* Labels */ 40 | 41 | label { 42 | color: #EEEEEE; 43 | } 44 | 45 | label.notification { 46 | color: #EEEEEE; 47 | } 48 | 49 | label.critical { 50 | color: #F66151; 51 | } 52 | .notificationInCenter label.critical { 53 | color: #F66151; 54 | } 55 | 56 | 57 | /* Buttons */ 58 | 59 | button { 60 | background: transparent; 61 | color: #322; 62 | border-radius: 3px; 63 | border-width: 0px; 64 | background-position: 0px 0px; 65 | text-shadow: none; 66 | } 67 | 68 | button:hover { 69 | border-radius: 3px; 70 | background: rgba(0, 20, 20, 0.2); 71 | border-width: 0px; 72 | border-top: transparent; 73 | border-color: #f00; 74 | color: #fee; 75 | } 76 | 77 | 78 | /* Custom Buttons */ 79 | 80 | .userbutton { 81 | background: rgba(20,0,0, 0.15); 82 | } 83 | 84 | .userbuttonlabel { 85 | color: #222; 86 | font-size: 12px; 87 | } 88 | 89 | .userbutton:hover { 90 | background: rgba(20, 0, 0, 0.2); 91 | } 92 | 93 | .userbuttonlabel:hover { 94 | color: #111; 95 | } 96 | 97 | button.buttonState1 { 98 | background: rgba(20,0,0,0.5); 99 | } 100 | 101 | .userbuttonlabel.buttonState1 { 102 | color: #fff; 103 | } 104 | 105 | button.buttonState1:hover { 106 | background: rgba(20,0,0, 0.4); 107 | } 108 | 109 | .userbuttonlabel.buttonState1:hover { 110 | color: #111; 111 | } 112 | 113 | button.buttonState2 { 114 | background: rgba(255,255,255,0.3); 115 | } 116 | 117 | .userbuttonlabel.buttonState2 { 118 | color: #111; 119 | } 120 | 121 | button.buttonState2:hover { 122 | background: rgba(20,0,0, 0.3); 123 | } 124 | 125 | .userbuttonlabel.buttonState2:hover { 126 | color: #000; 127 | } 128 | 129 | 130 | /* Images */ 131 | 132 | image.deadd-noti-center.notification.image { 133 | margin-left: 20px; 134 | } 135 | 136 | -------------------------------------------------------------------------------- /dot_config/deadd/deadd.yml: -------------------------------------------------------------------------------- 1 | ### Margins for notification-center/notifications 2 | margin-top: 0 3 | margin-right: 0 4 | 5 | ### Margins for notification-center 6 | margin-bottom: 0 7 | 8 | ### Width of the notification center/notifications in pixels. 9 | width: 500 10 | 11 | ### Command to run at startup. This can be used to setup 12 | ### button states. 13 | # startup-command: deadd-notification-center-startup 14 | 15 | ### Monitor on which the notification center/notifications will be 16 | ### printed. If "follow-mouse" is set true, this does nothing. 17 | monitor: 0 18 | 19 | ### If true, the notification center/notifications will open on the 20 | ### screen, on which the mouse is. Overrides the "monitor" setting. 21 | follow-mouse: false 22 | 23 | notification-center: 24 | ### Margin at the top/right/bottom of the notification center in 25 | ### pixels. This can be used to avoid overlap between the notification 26 | ### center and bars such as polybar or i3blocks. 27 | # margin-top: 0 28 | # margin-right: 0 29 | margin-bottom: 50 30 | 31 | ### Width of the notification center in pixels. 32 | # width: 500 33 | 34 | ### Monitor on which the notification center will be printed. If 35 | ### "follow-mouse" is set true, this does nothing. 36 | # monitor: 0 37 | 38 | ### If true, the notification center will open on the screen, on which 39 | ### the mouse is. Overrides the "monitor" setting. 40 | # follow-mouse: false 41 | 42 | ### Notification center closes when the mouse leaves it 43 | hide-on-mouse-leave: true 44 | 45 | ### If newFirst is set to true, newest notifications appear on the top 46 | ### of the notification center. Else, notifications stack, from top to 47 | ### bottom. 48 | new-first: true 49 | 50 | ### If true, the transient field in notifications will be ignored, 51 | ### thus the notification will be persisted in the notification 52 | ### center anyways 53 | ignore-transient: false 54 | 55 | ### Custom buttons in notification center 56 | buttons: 57 | ### Numbers of buttons that can be drawn on a row of the notification 58 | ### center. 59 | # buttons-per-row: 5 60 | 61 | ### Height of buttons in the notification center (in pixels). 62 | # button-height: 60 63 | 64 | ### Horizontal and vertical margin between each button in the 65 | ### notification center (in pixels). 66 | # button-margin: 2 67 | 68 | ### Button actions and labels. For each button you must specify a 69 | ### label and a command. 70 | actions: 71 | # - label: VPN 72 | # command: "sudo vpnToggle" 73 | # - label: Bluetooth 74 | # command: bluetoothToggle 75 | # - label: Wifi 76 | # command: wifiToggle 77 | # - label: Screensaver 78 | # command: screensaverToggle 79 | # - label: Keyboard 80 | # command: keyboardToggle 81 | 82 | notification: 83 | ### If true, markup (, , , ) will be displayed properly 84 | use-markup: true 85 | 86 | ### If true, html entities (& for &, % for %, etc) will be 87 | ### parsed properly. This is useful for chromium-based apps, which 88 | ### tend to send these in notifications. 89 | parse-html-entities: true 90 | 91 | dbus: 92 | 93 | ### If noti-closed messages are enabled, the sending application 94 | ### will know that a notification was closed/timed out. This can 95 | ### be an issue for certain applications, that overwrite 96 | ### notifications on status updates (e.g. Spotify on each 97 | ### song). When one of these applications thinks, the notification 98 | ### has been closed/timed out, they will not overwrite existing 99 | ### notifications but send new ones. This can lead to redundant 100 | ### notifications in the notification center, as the close-message 101 | ### is send regardless of the notification being persisted. 102 | send-noti-closed: false 103 | 104 | app-icon: 105 | 106 | ### If set to true: If no icon is passed by the app_icon parameter 107 | ### and no application "desktop-entry"-hint is present, deadd will 108 | ### try to guess the icon from the application name (if present). 109 | guess-icon-from-name: true 110 | 111 | ### The display size of the application icons in the notification 112 | ### pop-ups and in the notification center 113 | icon-size: 20 114 | 115 | image: 116 | 117 | ### The maximal display size of images that are part of 118 | ### notifications for notification pop-ups and in the notification 119 | ### center 120 | size: 100 121 | 122 | ### The margin around the top, bottom, left, and right of 123 | ### notification images. 124 | margin-top: 15 125 | margin-bottom: 15 126 | margin-left: 15 127 | margin-right: 0 128 | 129 | ### Apply modifications to certain notifications: 130 | ### Each modification rule needs a "match" and either a "modify" or 131 | ### a "script" entry. 132 | modifications: 133 | ### Match: 134 | ### Matches the notifications against these rules. If all of the 135 | ### values (of one modification rule) match, the "modify"/"script" 136 | ### part is applied. 137 | # - match: 138 | ### Possible match criteria: 139 | # title: "Notification title" 140 | # body: "Notification body" 141 | # time: "12:44" 142 | # app-name: "App name" 143 | 144 | # modify: 145 | ### Possible modifications 146 | # title: "abc" 147 | # body: "abc" 148 | # app-name: "abc" 149 | # app-icon: "file:///abc.png" 150 | ### The timeout has three special values: 151 | ### timeout: 0 -> don't time out at all 152 | ### timeout: -1 -> use default timeout 153 | ### timeout: 1 -> don't show as pop-up 154 | ### timeout: >1 -> milliseconds until timeout 155 | # timeout: 1 156 | # margin-right: 10 157 | # margin-top: 10 158 | # image: "file:///abc.png" 159 | # image-size: 10 160 | # transient: true 161 | # send-noti-closed: false 162 | ### Remove action buttons from notifications 163 | # remove-actions: true 164 | ### Add a class-name to the notification container, that can be 165 | ### used for specific styling of notifications using the 166 | ### deadd.css file 167 | # class-name: "abc" 168 | 169 | # - match: 170 | # app-name: "Chromium" 171 | 172 | ### Instead of modifying a notification directly, a script can be 173 | ### run, which will receive the notification as JSON on STDIN. It 174 | ### is expected to return JSON/YAML configuration that defines the 175 | ### modifications that should be applied. Minimum complete return 176 | ### value must be '{"modify": {}, "match": {}}'. Always leave the "match" 177 | ### object empty (technical reasons, i.e. I am lazy). 178 | # script: "linux-notification-center-parse-chromium" 179 | - match: 180 | app-name: "Spotify" 181 | modify: 182 | image-size: 80 183 | timeout: 1000 184 | send-noti-closed: true 185 | class-name: "Spotify" 186 | # - match: 187 | # title: Bildschirmhelligkeit 188 | # modify: 189 | # image-size: 60 190 | popup: 191 | 192 | ### Default timeout used for notifications in milli-seconds. This can 193 | ### be overwritten with the "-t" option (or "--expire-time") of the 194 | ### notify-send command. 195 | default-timeout: 5000 196 | 197 | ### Margin above/right/between notifications (in pixels). This can 198 | ### be used to avoid overlap between notifications and a bar such as 199 | ### polybar or i3blocks. 200 | margin-top: 50 201 | margin-right: 50 202 | margin-between: 20 203 | 204 | ### Defines after how many lines of text the body will be truncated. 205 | ### Use 0 if you want to disable truncation. 206 | max-lines-in-body: 3 207 | 208 | ### Monitor on which the notifications will be 209 | ### printed. If "follow-mouse" is set true, this does nothing. 210 | # monitor: 0 211 | 212 | ### If true, the notifications will open on the 213 | ### screen, on which the mouse is. Overrides the "monitor" setting. 214 | # follow-mouse: false 215 | 216 | click-behavior: 217 | 218 | ### The mouse button for dismissing a popup. Must be either "mouse1", 219 | ### "mouse2", "mouse3", "mouse4", or "mouse5" 220 | dismiss: mouse1 221 | 222 | ### The mouse button for opening a popup with the default action. 223 | ### Must be either "mouse1", "mouse2", "mouse3", "mouse4", or "mouse5" 224 | default-action: mouse3 225 | -------------------------------------------------------------------------------- /dot_config/eww/assets/avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sotoleo/dotfiles/bfd26c6a68cecf65c5a39e68b293014d14f8966c/dot_config/eww/assets/avatar.jpg -------------------------------------------------------------------------------- /dot_config/eww/assets/avatar2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sotoleo/dotfiles/bfd26c6a68cecf65c5a39e68b293014d14f8966c/dot_config/eww/assets/avatar2.jpg -------------------------------------------------------------------------------- /dot_config/eww/assets/powermenu/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sotoleo/dotfiles/bfd26c6a68cecf65c5a39e68b293014d14f8966c/dot_config/eww/assets/powermenu/lock.png -------------------------------------------------------------------------------- /dot_config/eww/assets/powermenu/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sotoleo/dotfiles/bfd26c6a68cecf65c5a39e68b293014d14f8966c/dot_config/eww/assets/powermenu/logout.png -------------------------------------------------------------------------------- /dot_config/eww/assets/powermenu/reboot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sotoleo/dotfiles/bfd26c6a68cecf65c5a39e68b293014d14f8966c/dot_config/eww/assets/powermenu/reboot.png -------------------------------------------------------------------------------- /dot_config/eww/assets/powermenu/shutdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sotoleo/dotfiles/bfd26c6a68cecf65c5a39e68b293014d14f8966c/dot_config/eww/assets/powermenu/shutdown.png -------------------------------------------------------------------------------- /dot_config/eww/assets/powermenu/suspend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sotoleo/dotfiles/bfd26c6a68cecf65c5a39e68b293014d14f8966c/dot_config/eww/assets/powermenu/suspend.png -------------------------------------------------------------------------------- /dot_config/eww/assets/powermenu/svg/lock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dot_config/eww/assets/powermenu/svg/logout.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /dot_config/eww/assets/powermenu/svg/reboot.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dot_config/eww/assets/powermenu/svg/shutdown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dot_config/eww/assets/powermenu/svg/suspend.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dot_config/eww/assets/wallpaper.png: -------------------------------------------------------------------------------- 1 | /home/demeter/.config/background -------------------------------------------------------------------------------- /dot_config/eww/eww.scss: -------------------------------------------------------------------------------- 1 | * { 2 | all: unset; 3 | font-size: 14px; 4 | font-family: 'Ubuntu Nerd Font'; 5 | transition: 200ms; 6 | } 7 | $mono_font: 'mononoki NF'; 8 | 9 | @import "./scss/colors.scss"; 10 | @import "./scss/variables.scss"; 11 | @import "./scss/common.scss"; 12 | @import "./scss/panel.scss"; 13 | @import "./scss/datemenu.scss"; 14 | @import "./scss/quicksettings.scss"; 15 | @import "./scss/powermenu.scss"; 16 | @import "./scss/desktop.scss"; 17 | @import "./scss/osd.scss"; 18 | tooltip{ @include tooltip } 19 | -------------------------------------------------------------------------------- /dot_config/eww/eww.yuck: -------------------------------------------------------------------------------- 1 | (defvar main_monitor 0) 2 | (defvar real_name "Ryan Wattson") 3 | (defvar user_name "Poob") 4 | (defvar profile_picture "assets/avatar.jpg") 5 | 6 | (include "./yuck/vars.yuck") 7 | (include "./yuck/panel.yuck") 8 | (include "./yuck/osd.yuck") 9 | (include "./yuck/powermenu.yuck") 10 | (include "./yuck/datemenu.yuck") 11 | (include "./yuck/quicksettings.yuck") 12 | (include "./yuck/desktop.yuck") 13 | (include "./yuck/windows.yuck") 14 | -------------------------------------------------------------------------------- /dot_config/eww/scripts/bat: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env gjs 2 | 'use strict' 3 | 4 | const { GObject, Gio, GLib, UPowerGlib: UPower } = imports.gi; 5 | 6 | const PowerManagerProxy = Gio.DBusProxy.makeProxyWrapper( 7 | ` 8 | 9 | 10 | 11 | 12 | 13 | ` 14 | ); 15 | 16 | const Battery = GObject.registerClass( 17 | class Battery extends GObject.Object{ 18 | _init(){ 19 | super._init(); 20 | 21 | this._proxy = new PowerManagerProxy( 22 | Gio.DBus.system, 23 | 'org.freedesktop.UPower', 24 | '/org/freedesktop/UPower/devices/DisplayDevice', 25 | () => { 26 | this._proxy.connect( 27 | 'g-properties-changed', () => this._sync() ); 28 | this._sync(); 29 | } 30 | ); 31 | } 32 | 33 | _sync(){ 34 | if(!this._proxy.IsPresent) return; 35 | 36 | let percent = this._proxy.Percentage; 37 | let charging = this._proxy.State === UPower.DeviceState.CHARGING; 38 | let charged = 39 | this._proxy.State === UPower.DeviceState.FULLY_CHARGED || 40 | (this._proxy.State === UPower.DeviceState.CHARGING && percent === 100); 41 | 42 | 43 | let icons = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']; 44 | let charging_icons = ['󰢜', '󰂆', '󰂇', '󰂈', '󰢝', '󰂉', '󰢞', '󰂊', '󰂋', '󰂅']; 45 | let i = Math.round(percent / 10)-1; 46 | if(i < 0) i = 0; 47 | 48 | let icon; 49 | if(charged) icon = '󰂄'; 50 | else if(charging) icon = charging_icons[i]; 51 | else if(percent < 10) icon = '󱃍'; 52 | else icon = icons[i]; 53 | 54 | let state = ''; 55 | if(charged) state = 'charged'; 56 | else if(charging) state = 'charging'; 57 | else if(percent < 30) state = 'low'; 58 | 59 | print(JSON.stringify({ 60 | icon, 61 | percent, 62 | state 63 | })) 64 | } 65 | }); 66 | 67 | const media = new Battery(); 68 | const mainLoop = new GLib.MainLoop(null, false); 69 | mainLoop.run(); 70 | -------------------------------------------------------------------------------- /dot_config/eww/scripts/bluetooth: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function state { 4 | STATE=$(bluetoothctl show | grep 'Powered' | awk '{print $2}') 5 | if [[ $STATE == 'yes' ]]; then echo 'on' 6 | else echo 'off'; fi 7 | } 8 | 9 | function toggle { 10 | if [[ $(state) = 'on' ]]; then bluetoothctl power off 11 | else bluetoothctl power on; fi 12 | } 13 | 14 | function icon { 15 | if [[ $(state) = 'on' ]]; then echo '󰂯' 16 | else echo '󰂲'; fi 17 | } 18 | 19 | function connected { 20 | echo $(bluetoothctl devices Connected | awk '{print $3}') 21 | } 22 | 23 | if [[ $1 == 'state' ]]; then state; fi 24 | if [[ $1 == 'icon' ]]; then icon; fi 25 | if [[ $1 == 'toggle' ]]; then toggle; fi 26 | if [[ $1 == 'connected' ]]; then connected; fi -------------------------------------------------------------------------------- /dot_config/eww/scripts/brightness: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function screen_icon { 4 | ARRAY=( '󰛩' '󱩎' '󱩏' '󱩐' '󱩑' '󱩒' '󱩓' '󱩔' '󱩕' '󱩖' '󰛨' ) 5 | IND=$(( $(screen_level) / 10)) 6 | echo ${ARRAY[$IND]} 7 | } 8 | 9 | function kbd_icon { 10 | ARRAY=( '󰛩' '󱩎' '󱩏' '󱩐' '󱩑' '󱩒' '󱩓' '󱩔' '󱩕' '󱩖' '󰛨' ) 11 | IND=$(( $(kbd_level) / 10)) 12 | echo ${ARRAY[$IND]} 13 | } 14 | 15 | function screen_level { 16 | echo $(brightnessctl info | grep Current | awk '{print $4}' | tr '%' ' ' | tr '(' ' ' | tr ')' ' ') 17 | } 18 | 19 | function kbd_level { 20 | echo $(brightnessctl -d asus::kbd_backlight info | grep Current | awk '{print $4}' | tr '%' ' ' | tr '(' ' ' | tr ')' ' ') 21 | } 22 | 23 | function raise_screen { 24 | brightnessctl set 5%+ -q 25 | update_screen 26 | } 27 | 28 | function lower_screen { 29 | brightnessctl set 5%- -q 30 | update_screen 31 | } 32 | 33 | function raise_kbd { 34 | brightnessctl -d asus::kbd_backlight set +1 -q 35 | update_kbd 36 | } 37 | 38 | function lower_kbd { 39 | brightnessctl -d asus::kbd_backlight set 1- -q 40 | update_kbd 41 | } 42 | 43 | function update_kbd { 44 | eww update kbd_level=$(kbd_level) 45 | eww update kbd_icon=$(kbd_icon) 46 | ~/.config/eww/scripts/./osd $(kbd_icon) $(kbd_level) 47 | } 48 | 49 | function update_screen { 50 | eww update screen_level=$(screen_level) 51 | eww update screen_icon=$(screen_icon) 52 | ~/.config/eww/scripts/./osd $(screen_icon) $(screen_level) 53 | } 54 | 55 | function set_screen { 56 | echo "screen: "$1 57 | brightnessctl set $1"%" -q 58 | eww update screen_level=$(screen_level) 59 | eww update screen_icon=$(screen_icon) 60 | } 61 | 62 | if [[ $1 == 'kbd_level' ]]; then echo $(kbd_level); fi 63 | if [[ $1 == 'screen_level' ]]; then echo $(screen_level); fi 64 | if [[ $1 == 'kbd_icon' ]]; then echo $(kbd_icon); fi 65 | if [[ $1 == 'screen_icon' ]]; then echo $(screen_icon); fi 66 | if [[ $1 == 'kbd' ]] && [[ $2 == 'up' ]]; then raise_kbd; fi 67 | if [[ $1 == 'kbd' ]] && [[ $2 == 'down' ]]; then lower_kbd; fi 68 | if [[ $1 == 'screen' ]] && [[ $2 == 'up' ]]; then raise_screen; fi 69 | if [[ $1 == 'screen' ]] && [[ $2 == 'down' ]]; then lower_screen; fi 70 | if [[ $1 == 'set_screen' ]]; then set_screen $2; fi 71 | -------------------------------------------------------------------------------- /dot_config/eww/scripts/init: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | pkill eww 4 | eww daemon 5 | 6 | eww open bar0 7 | eww open desktop0 8 | eww update main_monitor=0 9 | 10 | waybar 11 | -------------------------------------------------------------------------------- /dot_config/eww/scripts/launcher: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function toggle_menu { 4 | MAIN=$(eww get main_monitor) 5 | hyprctl keyword blurls "remove,gtk-layer-shell" 6 | STATE=$(eww windows | grep $1$MAIN | awk '{print substr ($0, 0, 1)}') 7 | if [[ $STATE == '*' ]]; then 8 | if [[ $1 == 'powermenu' ]]; then 9 | hyprctl keyword blurls "remove,gtk-layer-shell" 10 | fi 11 | eww close $1$MAIN; 12 | else 13 | if [[ $1 == 'powermenu' ]]; then 14 | hyprctl keyword blurls "gtk-layer-shell" 15 | fi 16 | eww open $1$MAIN; 17 | fi 18 | } 19 | 20 | function close_osd { 21 | notify-send asd 22 | } 23 | 24 | picker() { 25 | COLOR=$(distrobox-enter -n Arch -- hyprpicker -n | grep "#") && 26 | wl-copy --trim-newline $COLOR 27 | notify-send -i color-select-symbolic -a "Color Picker" $(wl-paste) 28 | echo $COLOR 29 | } 30 | 31 | function colorpicker { 32 | bash $HOME/.config/eww/scripts/launcher picker 33 | } 34 | 35 | function network { 36 | foot nmcli d wifi list 37 | } 38 | 39 | function screenlock { 40 | STATE0=$(eww windows | grep powermenu0 | awk '{print substr ($0, 0, 1)}') 41 | STATE1=$(eww windows | grep powermenu1 | awk '{print substr ($0, 0, 1)}') 42 | if [[ $STATE0 == '*' ]]; then eww close powermenu0; fi 43 | if [[ $STATE1 == '*' ]]; then eww close powermenu1; fi 44 | 45 | hyprctl keyword blurls "gtk-layer-shell" 46 | gtklock -s $HOME/.config/gtklock/style.css 47 | } 48 | 49 | function notifications { 50 | kill -s USR1 $(pidof deadd-notification-center) 51 | } 52 | 53 | function config { 54 | lvim $HOME/.config/hypr 55 | } 56 | 57 | function screenshot { 58 | DIR="$HOME/Pictures/Screenshots" 59 | mkdir -p $DIR 60 | 61 | if [[ $1 == 'screen' ]]; then 62 | distrobox-enter -n Arch -- hyprshot -m output -o $DIR 63 | else 64 | distrobox-enter -n Arch -- hyprshot -m region -o $DIR 65 | fi 66 | } 67 | 68 | if [[ $1 == 'applauncher' ]]; then tofi-drun --drun-launch=true; fi 69 | if [[ $1 == 'pavu' ]]; then pavucontrol; fi 70 | if [[ $1 == 'network' ]]; then network; fi 71 | if [[ $1 == 'qctl' ]]; then qjackctl; fi 72 | if [[ $1 == 'brightness' ]]; then wl-gammactl; fi 73 | if [[ $1 == 'bluetooth' ]]; then blueberry; fi 74 | if [[ $1 == 'powermenu' ]]; then powermenu; fi 75 | if [[ $1 == 'notifications' ]]; then notifications; fi 76 | if [[ $1 == 'toggle_menu' ]]; then toggle_menu $2; fi 77 | if [[ $1 == 'close_menu' ]]; then close_menu $2; fi 78 | if [[ $1 == 'close_osd' ]]; then close_osd; fi 79 | if [[ $1 == 'close_calendar' ]]; then close_calendar; fi 80 | if [[ $1 == 'colorpicker' ]]; then colorpicker; fi 81 | if [[ $1 == 'picker' ]]; then hyprpicker; fi 82 | if [[ $1 == 'screenlock' ]]; then screenlock; fi 83 | if [[ $1 == 'config' ]]; then config; fi 84 | if [[ $1 == 'screenshot' ]]; then screenshot $2; fi 85 | -------------------------------------------------------------------------------- /dot_config/eww/scripts/media: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env gjs 2 | 'use strict'; 3 | 4 | const { GObject, Gio, GLib } = imports.gi; 5 | const CACHE_PATH = GLib.get_user_config_dir() + '/eww/cache/'; 6 | const PREFERRED_PLAYER = 'spotify' 7 | const TICK_INTERVAL = 2000; //in ms 8 | 9 | const PlayerIcons = { 10 | 'deafult': ' ', 11 | 'spotify': ' ', 12 | 'firefox.instance2': '󰈹 ', 13 | 'mpv': ' ' 14 | } 15 | 16 | const MprisPlayerProxy = Gio.DBusProxy.makeProxyWrapper( 17 | ` 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | ` 32 | ); 33 | const DBusProxy = Gio.DBusProxy.makeProxyWrapper( 34 | ` 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | ` 46 | ); 47 | 48 | const MprisPlayer = GObject.registerClass({ 49 | Signals: { 'changed' : {}, 'closed': {}, 'ready': {} } 50 | }, 51 | class MprisPlayer extends GObject.Object { 52 | _init(busName) { 53 | super._init(); 54 | 55 | this._proxy = new MprisPlayerProxy(Gio.DBus.session, busName, 56 | '/org/mpris/MediaPlayer2', 57 | this._onPlayerProxyReady.bind(this)); 58 | 59 | this._player = busName.substring(23); 60 | this._playerIcon = PlayerIcons?.[this._player] || PlayerIcons.deafult || ''; 61 | this._trackArtists = []; 62 | this._trackTitle = ''; 63 | this._trackCoverUrl = ''; 64 | this._coverPath = ''; 65 | this._playBackStatus = ''; 66 | this._canGoNext = false; 67 | this._canGoPrev = false; 68 | this._canPlay = false; 69 | this._shuffle = false; 70 | this._loopStatus = ''; 71 | this._volume = -1; 72 | this._length = -1; 73 | this._position = -1; 74 | } 75 | 76 | close() { 77 | this._proxy.disconnect(this._playerBinding1); 78 | this._proxy.disconnect(this._playerBinding2); 79 | this._proxy = null; 80 | 81 | this.emit('closed'); 82 | } 83 | 84 | _onPlayerProxyReady() { 85 | this._playerBinding1 = this._proxy.connect('notify::g-name-owner', () => { 86 | if (!this._proxy.g_name_owner) 87 | this.close(); 88 | }) 89 | this._playerBinding2 = this._proxy.connect( 90 | 'g-properties-changed', () => { 91 | this._updateState(); 92 | this._cacheCoverArt(); 93 | this.emit('changed'); 94 | } 95 | ); 96 | if (!this._proxy.g_name_owner) 97 | this.close(); 98 | 99 | this._updateState(); 100 | this._cacheCoverArt(); 101 | this.emit('ready'); 102 | } 103 | 104 | _updateState() { 105 | let metadata = {}; 106 | for (let prop in this._proxy.Metadata) 107 | metadata[prop] = this._proxy.Metadata[prop].deep_unpack(); 108 | 109 | this._trackArtists = metadata['xesam:artist']; 110 | if (!Array.isArray(this._trackArtists) || 111 | !this._trackArtists.every(artist => typeof artist === 'string')) 112 | this._trackArtists = ["Unknown artist"]; 113 | 114 | this._trackTitle = metadata['xesam:title']; 115 | if (typeof this._trackTitle !== 'string') 116 | this._trackTitle = "Unknown title"; 117 | 118 | this._trackCoverUrl = metadata['mpris:artUrl']; 119 | if (typeof this._trackCoverUrl !== 'string') 120 | this._trackCoverUrl = ''; 121 | 122 | this._length = metadata['mpris:length']; 123 | if (typeof this._length !== 'number') 124 | this._length = -1; 125 | else 126 | this._length = Number.parseInt(`${this._length}`.substring(0, 3)); 127 | 128 | this._position = this._proxy.Position; 129 | if (typeof this._position !== 'number') 130 | this._position = -1; 131 | else 132 | this._position = this._position/1000000; 133 | 134 | this._playBackStatus = this._proxy.PlaybackStatus; 135 | this._canGoNext = this._proxy.CanGoNext; 136 | this._canGoPrev = this._proxy.CanGoPrevious; 137 | this._canPlay = this._proxy.CanPlay; 138 | 139 | this._shuffle = this._proxy.Shuffle; 140 | if (typeof this._shuffle !== 'boolean') { 141 | this._shuffle = null; 142 | } 143 | this._loopStatus = this._proxy.LoopStatus; 144 | if (typeof this._loopStatus !== 'string') { 145 | this._loopStatus = null; 146 | } 147 | this._volume = this._proxy.Volume; 148 | if(typeof this._volume !== 'number'){ 149 | this._volume = -1; 150 | } 151 | } 152 | 153 | _cacheCoverArt(){ 154 | this._coverPath = CACHE_PATH + `${this._trackArtists.join(', ')}_${this._trackTitle}` 155 | .replace(/[\*\?\"\<\>\|\#\:\?\/\']/g, ''); 156 | 157 | if(this._trackCoverUrl === '') return; 158 | if(this._coverPath === '_') return; 159 | if(GLib.file_test(this._coverPath, GLib.FileTest.EXISTS)) return; 160 | 161 | if(!GLib.file_test(CACHE_PATH, GLib.FileTest.EXISTS)) 162 | Gio.File.new_for_path(CACHE_PATH).make_directory(null); 163 | 164 | // Gio.File.new_for_uri(this._trackCoverUrl).copy_async( 165 | // Gio.File.new_for_path(this._coverPath), 166 | // Gio.FileCopyFlags.OVERWRITE, 167 | // GLib.PRIORITY_DEFAULT, 168 | // null, 169 | // null, 170 | // (source, result) => { 171 | // try { source.copy_finish(result) } 172 | // catch (e) { log(e) } 173 | // } 174 | // ); 175 | 176 | Gio.File.new_for_uri(this._trackCoverUrl).copy( 177 | Gio.File.new_for_path(this._coverPath), 178 | Gio.FileCopyFlags.OVERWRITE, 179 | null, null 180 | ); 181 | } 182 | 183 | get json() { 184 | return { 185 | player: this._player, //busName 186 | icon: this._playerIcon, 187 | artist: this._trackArtists.join(', '), 188 | title: this._trackTitle, 189 | cover: this._coverPath, 190 | status: this._playBackStatus, 191 | canNext: this._canGoNext, 192 | canPrev: this._canGoPrev, 193 | canPlay: this._canPlay, 194 | shuffle: this._shuffle, 195 | loop: this._loopStatus, 196 | volume: this._volume*100, 197 | length: this._length, 198 | lengthStr: `${Math.floor(this._length / 60)}:${Math.floor(this._length % 60) < 10 ? "0" : ""}${Math.floor(this._length % 60)}`, 199 | position: this._position, 200 | }; 201 | } 202 | }); 203 | class Media{ 204 | constructor() { 205 | this._players = new Map(); 206 | this._proxy = new DBusProxy(Gio.DBus.session, 207 | 'org.freedesktop.DBus', 208 | '/org/freedesktop/DBus', 209 | this._onProxyReady.bind(this)); 210 | } 211 | 212 | _addPlayer(busName) { 213 | let name = busName.substring(23); 214 | if (this._players.get(name)) 215 | return; 216 | 217 | let player = new MprisPlayer(busName); 218 | player.connect('closed', () => { 219 | this._players.delete(name); 220 | this.print(); 221 | }); 222 | player.connect('changed', () => { 223 | this.print(); 224 | }); 225 | player.connect('ready', () => { 226 | this.print(); 227 | }); 228 | this._players.set(name, player); 229 | } 230 | 231 | _onProxyReady() { 232 | this._proxy.ListNamesRemote(([names]) => { 233 | names.forEach(name => { 234 | if (name.startsWith('org.mpris.MediaPlayer2.')) 235 | this._addPlayer(name); 236 | }); 237 | }); 238 | this._proxy.connectSignal('NameOwnerChanged', 239 | this._onNameOwnerChanged.bind(this)); 240 | } 241 | 242 | _onNameOwnerChanged(proxy, sender, [name, oldOwner, newOwner]) { 243 | if (!name.startsWith('org.mpris.MediaPlayer2.')) 244 | return; 245 | 246 | if (newOwner && !oldOwner) 247 | this._addPlayer(name); 248 | } 249 | 250 | print(){ 251 | let players = []; 252 | if (this._players.get(PREFERRED_PLAYER)) 253 | players.push(this._players.get(PREFERRED_PLAYER).json); 254 | 255 | for (const [name, player] of this._players) { 256 | if(name !== PREFERRED_PLAYER) 257 | players.push(player.json); 258 | } 259 | 260 | print(JSON.stringify(players)); 261 | } 262 | 263 | //for some reason the Position value of an MprisPlayer instance 264 | //never updates, so every tick we need a new one. 265 | loopPrint(){ 266 | let playersReady = 0; 267 | let playersArray = []; 268 | for (const [name, player] of this._players) { 269 | let mprisPlayer = new MprisPlayer('org.mpris.MediaPlayer2.'+name); 270 | mprisPlayer.connect('ready', () => { 271 | playersArray.push(mprisPlayer.json); 272 | playersReady++ 273 | 274 | if(playersReady === this._players.size) 275 | print(JSON.stringify( playersArray.sort().sort((a, b) => { 276 | if(a.player.includes(PREFERRED_PLAYER)) 277 | return -1; 278 | 279 | return 1; 280 | })) 281 | ); 282 | 283 | mprisPlayer.close(); 284 | }) 285 | } 286 | } 287 | } 288 | 289 | const media = new Media(); 290 | const mainLoop = new GLib.MainLoop(null, false); 291 | // GLib.timeout_add( 292 | // GLib.PRIORITY_DEFAULT, 293 | // TICK_INTERVAL, 294 | // () => { media.loopPrint(); return true; } 295 | // ); 296 | mainLoop.run(); 297 | -------------------------------------------------------------------------------- /dot_config/eww/scripts/media_pos: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env gjs 2 | 'use strict'; 3 | 4 | //for some reason the Position value of an MprisPlayer instance 5 | //never updates, so every tick we need a new one. 6 | // 7 | //though it is a better idea to have a different deflisten 8 | //for the ticking properties so eww doesn't have to rerender 9 | //the widgets every tick 10 | 11 | const { GObject, Gio, GLib } = imports.gi; 12 | const PREFERRED_PLAYER = 'spotify' 13 | const TICK_INTERVAL = 1000; //ms 14 | 15 | const MprisPlayerProxy = Gio.DBusProxy.makeProxyWrapper( 16 | ` 17 | 18 | 19 | 20 | ` 21 | ); 22 | 23 | const DBusProxy = Gio.DBusProxy.makeProxyWrapper( 24 | ` 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | ` 36 | ); 37 | 38 | class Media{ 39 | constructor() { 40 | this._players = new Map(); 41 | this._proxy = new DBusProxy( 42 | Gio.DBus.session, 43 | 'org.freedesktop.DBus', 44 | '/org/freedesktop/DBus', 45 | this._onProxyReady.bind(this) 46 | ); 47 | } 48 | 49 | _addPlayer(busName) { 50 | let name = busName.substring(23); 51 | if (this._players.get(busName)) 52 | return; 53 | 54 | this._players.set(busName, name); 55 | } 56 | 57 | _onProxyReady() { 58 | this._proxy.ListNamesRemote(([names]) => { 59 | names.forEach(name => { 60 | if (name.startsWith('org.mpris.MediaPlayer2.')) 61 | this._addPlayer(name); 62 | }); 63 | }); 64 | this._proxy.connectSignal('NameOwnerChanged', 65 | this._onNameOwnerChanged.bind(this)); 66 | } 67 | 68 | _onNameOwnerChanged(proxy, sender, [name, oldOwner, newOwner]) { 69 | if (!name.startsWith('org.mpris.MediaPlayer2.')) 70 | return; 71 | 72 | if (newOwner && !oldOwner) 73 | this._addPlayer(name); 74 | } 75 | 76 | print(){ 77 | let playersReady = 0; 78 | let playersArray = {}; 79 | for (const [busName, name] of this._players) { 80 | 81 | this._proxy = new MprisPlayerProxy( 82 | Gio.DBus.session, 83 | busName, 84 | '/org/mpris/MediaPlayer2', 85 | () => { 86 | let pos = Math.floor(this._proxy.Position / 1000000); 87 | playersArray[name] = { 88 | position: pos, 89 | positionStr: `${Math.floor(pos / 60)}:${Math.floor(pos % 60) < 10 ? "0" : ""}${Math.floor(pos % 60)}` 90 | }; 91 | playersReady++ 92 | 93 | if(playersReady === this._players.size) 94 | print(JSON.stringify( playersArray )); 95 | } 96 | ); 97 | } 98 | } 99 | } 100 | 101 | const media = new Media(); 102 | const mainLoop = new GLib.MainLoop(null, false); 103 | GLib.timeout_add( 104 | GLib.PRIORITY_DEFAULT, 105 | TICK_INTERVAL, 106 | () => { media.print(); return true; } 107 | ); 108 | mainLoop.run(); -------------------------------------------------------------------------------- /dot_config/eww/scripts/network: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function strength { 4 | WIFI_STRENGTH=$(awk 'NR==3 {printf("%.0f",$3*10/7)}' /proc/net/wireless) 5 | echo $WIFI_STRENGTH 6 | } 7 | 8 | function wifi_icon { 9 | CONNECTIVITY=$(nmcli networking connectivity) 10 | WIFI_STATUS=$(nmcli device | grep -E "^wlp1s0" | awk '{print $3}') 11 | WIFI_STRENGTH=$(strength) 12 | 13 | if [[ $WIFI_STATUS != 'connected' ]]; then echo '󰤮'; return; fi 14 | if [[ $CONNECTIVITY == 'none' ]]; then echo '󰪎'; return; fi 15 | if [[ $CONNECTIVITY == 'unknown' ]]; then echo '󰤭'; return; fi 16 | if [[ $CONNECTIVITY == 'portal' ]]; then echo '󰤪'; return; fi 17 | if [[ $CONNECTIVITY == 'limited' ]]; then echo '󰪎'; return; fi 18 | if [[ $CONNECTIVITY == 'full' ]]; then 19 | if [[ $WIFI_STRENGTH -ge 80 ]]; then echo '󰤨 '; return; fi 20 | if [[ $WIFI_STRENGTH -ge 60 ]]; then echo '󰤥 '; return; fi 21 | if [[ $WIFI_STRENGTH -ge 40 ]]; then echo '󰤢 '; return; fi 22 | if [[ $WIFI_STRENGTH -ge 20 ]]; then echo '󰤟 '; return; fi 23 | if [[ $WIFI_STRENGTH -ge 0 ]]; then echo '󰤯 '; return; fi 24 | fi 25 | } 26 | 27 | function icon { 28 | CONNECTIVITY=$(nmcli networking connectivity) 29 | WIRED_STATUS=$(nmcli device | grep enp2s0 | awk '{print $3}') 30 | 31 | if [[ $WIRED_STATUS == 'connected' ]]; then 32 | if [[ $CONNECTIVITY == 'none' ]]; then echo '󰪎'; return; fi 33 | if [[ $CONNECTIVITY == 'unknown' ]]; then echo '󰲜'; return; fi 34 | if [[ $CONNECTIVITY == 'portal' ]]; then echo '󰲛'; return; fi 35 | if [[ $CONNECTIVITY == 'limited' ]]; then echo '󰪎'; return; fi 36 | if [[ $CONNECTIVITY == 'full' ]]; then echo '󰛳'; return; fi 37 | fi 38 | 39 | wifi_icon 40 | } 41 | 42 | function ssid { 43 | WIRED_STATUS=$(nmcli device | grep enp2s0 | awk '{print $3}') 44 | WIFI_STATUS=$(nmcli device | grep -E "^wlp1s0" | awk '{print $3}') 45 | 46 | if [[ $WIRED_STATUS == 'connected' ]]; then echo 'Wired' 47 | elif [[ $WIFI_STATUS == 'connected' ]]; then 48 | echo $(nmcli device | grep wlp3s0 | awk '{print $4}') 49 | else 50 | echo 'Not Connected' 51 | fi 52 | } 53 | 54 | function state { 55 | CONNECTIVITY=$(nmcli networking connectivity) 56 | if [[ $CONNECTIVITY == 'none' ]]; then echo 'off' 57 | else echo 'on'; fi 58 | } 59 | 60 | function toggle { 61 | STATE=$(nmcli radio wifi) 62 | if [[ $STATE == 'enabled' ]]; then nmcli radio wifi off 63 | else nmcli radio wifi on; fi 64 | eww update network_icon=$(icon) 65 | eww update network_status=$(state) 66 | } 67 | 68 | if [[ $1 == 'wifi_icon' ]]; then wifi_icon; fi 69 | if [[ $1 == 'icon' ]]; then icon; fi 70 | if [[ $1 == 'ssid' ]]; then ssid; fi 71 | if [[ $1 == 'strength' ]]; then strength; fi 72 | if [[ $1 == 'state' ]]; then state; fi 73 | if [[ $1 == 'toggle' ]]; then toggle; fi 74 | -------------------------------------------------------------------------------- /dot_config/eww/scripts/night_light: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function state { 4 | STATE=$(pgrep wlsunset) 5 | if [[ -z $STATE ]]; then echo 'off' 6 | else echo 'on'; fi 7 | } 8 | 9 | function icon { 10 | echo '󰖨' 11 | } 12 | 13 | function toggle { 14 | STATE=$(state) 15 | if [[ $STATE == 'on' ]]; then 16 | eww update night_light_icon=$(icon) 17 | eww update night_light_state=off 18 | pkill wlsunset 19 | else 20 | eww update night_light_icon=$(icon) 21 | eww update night_light_state=on 22 | wlsunset -t 3400 23 | fi 24 | } 25 | 26 | if [[ $1 == 'toggle' ]]; then toggle; fi 27 | if [[ $1 == 'state' ]]; then state; fi 28 | if [[ $1 == 'icon' ]]; then icon; fi -------------------------------------------------------------------------------- /dot_config/eww/scripts/notifications: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function toggle_on { 4 | notify-send.py a --hint boolean:deadd-notification-center:true \ 5 | string:type:unpausePopups 6 | echo "on" 7 | } 8 | 9 | function toggle_off { 10 | notify-send.py a --hint boolean:deadd-notification-center:true string:type:pausePopups 11 | echo "off" 12 | } 13 | 14 | function icon { 15 | echo '󰂚' 16 | } 17 | function state { 18 | #working on making the state dynamic 19 | echo "on" 20 | } 21 | 22 | if [[ $1 == 'toggle_on' ]]; then toggle_on; fi 23 | if [[ $1 == 'toggle_off' ]]; then toggle_off; fi 24 | if [[ $1 == 'icon' ]]; then icon; fi 25 | if [[ $1 == 'state' ]]; then state; fi 26 | if [[ $1 == 'count' ]]; then swaync-client --count; fi 27 | if [[ $1 == 'open' ]]; then swaync-client --open-panel; fi 28 | -------------------------------------------------------------------------------- /dot_config/eww/scripts/osd: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | STATE0=$(eww windows | grep osd0 | awk '{print substr ($0, 0, 1)}') 4 | STATE1=$(eww windows | grep osd1 | awk '{print substr ($0, 0, 1)}') 5 | 6 | if [[ $1 == 'close' ]]; then 7 | if [[ $STATE0 == '*' ]]; then eww close osd0; fi 8 | if [[ $STATE1 == '*' ]]; then eww close osd1; fi 9 | else 10 | eww update osd_icon=$1 11 | eww update osd_value=$2 12 | 13 | if [[ $STATE0 != '*' ]]; then eww open osd0; fi 14 | if [[ $STATE1 != '*' ]]; then eww open osd1; fi 15 | 16 | sleep 4 17 | 18 | if [[ $STATE0 == '*' ]]; then eww close osd0; fi 19 | if [[ $STATE1 == '*' ]]; then eww close osd1; fi 20 | fi -------------------------------------------------------------------------------- /dot_config/eww/scripts/player: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function loop { 4 | LOOPSTATUS=$(playerctl -p $1 loop) 5 | if [[ $LOOPSTATUS == 'None' ]]; then playerctl -p $1 loop Track; fi 6 | if [[ $LOOPSTATUS == 'Track' ]]; then playerctl -p $1 loop Playlist; fi 7 | if [[ $LOOPSTATUS == 'Playlist' ]]; then playerctl -p $1 loop None; fi 8 | } 9 | 10 | if [[ $2 == 'up' ]]; then playerctl -p $1 next; fi 11 | if [[ $2 == 'down' ]]; then playerctl -p $1 previous; fi 12 | if [[ $2 == 'next' ]]; then playerctl -p $1 next; fi 13 | if [[ $2 == 'prev' ]]; then playerctl -p $1 previous; fi 14 | if [[ $2 == 'play-pause' ]]; then playerctl -p $1 play-pause; fi 15 | if [[ $2 == 'loop' ]]; then loop $1; fi 16 | if [[ $2 == 'shuffle' ]]; then playerctl -p $1 shuffle Toggle; fi 17 | if [[ $2 == 'volume' ]]; then playerctl -p $1 volume "0.$3"; fi 18 | if [[ $2 == 'position' && ! -z $3 ]]; then playerctl -p $1 position $3; fi -------------------------------------------------------------------------------- /dot_config/eww/scripts/todo: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env gjs 2 | 'use strict' 3 | 4 | const { Gio, GLib } = imports.gi; 5 | const SUBSTITUTES_PATH = GLib.get_home_dir()+'/.local/share/todo/substitutes.json'; 6 | const TASKS_PATH = GLib.get_home_dir()+'/Documents/tasks.json'; 7 | const TERMINAL_WIDTH = 50; 8 | 9 | function getSubstitutes(){ 10 | try { 11 | let file = Gio.File.new_for_path(SUBSTITUTES_PATH); 12 | let [, contents, ] = file.load_contents(null); 13 | return JSON.parse(new TextDecoder().decode(contents)); 14 | } 15 | catch{ 16 | return { days: [], months: [] }; 17 | } 18 | } 19 | 20 | function getTasks(){ 21 | try{ 22 | let file = Gio.File.new_for_path(TASKS_PATH); 23 | let [, contents, ] = file.load_contents(null); 24 | let list = JSON.parse(new TextDecoder().decode(contents)); 25 | let tasks = []; 26 | list.forEach(t => tasks.push(new Task(t))); 27 | return tasks; 28 | } 29 | catch{ 30 | return []; 31 | } 32 | } 33 | 34 | function writeFile(tasks){ 35 | let file = Gio.File.new_for_path(TASKS_PATH); 36 | if(!GLib.file_test(TASKS_PATH, GLib.FileTest.EXISTS)) 37 | file.create(Gio.FileCreateFlags.NONE, null); 38 | 39 | file.replace_contents( 40 | JSON.stringify(tasks, null, 4), 41 | null, false, 42 | Gio.FileCreateFlags.REPLACE_DESTINATION, null 43 | ); 44 | } 45 | 46 | class Date{ 47 | constructor(p){ 48 | this.year = p?.year; 49 | this.month = p?.month; 50 | this.day = p?.day; 51 | this.hour = p?.hour; 52 | this.minutes = p?.minutes; 53 | this.asap = p?.asap || false; 54 | 55 | if(typeof p === 'string') 56 | this.fromString(p); 57 | } 58 | 59 | isEmpty(){ 60 | return !this.year && !this.month && !this.day && !this.hour && !this.minutes 61 | } 62 | 63 | isLate(){ 64 | let d = GLib.DateTime.new_now_local(); 65 | if(this.compare(new Date({ 66 | year: d.get_year(), 67 | month: d.get_month(), 68 | day: d.get_day_of_month(), 69 | hour: d.get_hour(), 70 | minutes: d.get_minute() 71 | })) < 0){ 72 | return true; 73 | } 74 | return false; 75 | } 76 | 77 | isToday(){ 78 | let now = GLib.DateTime.new_now_local(); 79 | return this.month === now.get_month() && 80 | this.day === now.get_day_of_month(); 81 | } 82 | 83 | toString(){ 84 | if(this.asap) 85 | return ' asap! '; 86 | 87 | let m, d, h, min, md, hm; 88 | if(this.month) 89 | m = `${this.month < 10 ? `0${this.month}` : this.month }` 90 | else m = '--'; 91 | 92 | if(this.day) 93 | d = `${this.day < 10 ? `0${this.day}` : this.day }`; 94 | else d = '--'; 95 | 96 | if(this.hour) 97 | h = `${this.hour < 10 ? `0${this.hour}` : this.hour }` 98 | else h = '--'; 99 | 100 | if(this.minutes) 101 | min = `${this.minutes < 10 ? `0${this.minutes}` : this.minutes }` 102 | else min = '00'; 103 | 104 | md = `${m}/${d}`; 105 | hm = `${h}:${min}` 106 | if(!this.month && !this.day) md = ' '; 107 | if(!this.hour && !this.minutes) hm = ' '; 108 | if(md === ' ' && (this.hour || this.minutes)) md = 'today'; 109 | if(this.isToday()) md = 'today'; 110 | 111 | return `${md} ${hm}`; 112 | } 113 | 114 | valid(){ 115 | let now = GLib.DateTime.new_now_local(); 116 | let year = this?.year || now.get_year(); 117 | let month = this?.month || now.get_month(); 118 | let day = this?.day || now.get_day_of_month(); 119 | let hour = this?.hour || now.get_hour(); 120 | let minutes = this?.minutes || now.get_minute(); 121 | return GLib.DateTime.new_local(year, month, day, hour, minutes, 0); 122 | } 123 | 124 | compare(d2){ 125 | if(this.asap) return -1; 126 | if(d2.asap) return 1; 127 | if(this.isEmpty() && d2.isEmpty()) return 0; 128 | if(this.isEmpty()) return 1; 129 | if(d2.isEmpty()) return -1; 130 | 131 | if (this.year > d2.year) 132 | return 1; 133 | else if (this.year < d2.year) 134 | return -1 135 | else if (this.month > d2.month) 136 | return 1; 137 | else if (this.month < d2.month) 138 | return -1 139 | else if (this.day > d2.day) 140 | return 1; 141 | else if (this.day < d2.day) 142 | return -1; 143 | else if (this.hour > d2.hour) 144 | return 1; 145 | else if (this.hour < d2.hour) 146 | return -1; 147 | else if (this.minutes > d2.minutes) 148 | return 1; 149 | else if (this.minutes < d2.minutes) 150 | return -1; 151 | 152 | return 0; 153 | } 154 | 155 | fromString(str){ 156 | let substitutes = getSubstitutes(); 157 | let days = substitutes.days; 158 | let months = substitutes.months; 159 | 160 | str.split(' ').forEach(e => { 161 | if(e.toLowerCase() === 'asap') this.asap = true; 162 | if(days[e]) this.day = days[e]; 163 | if(months[e]) this.month = months[e]; 164 | let md = e.split('/'); 165 | if(md.length === 2){ 166 | this.month = Number(md[0]); 167 | this.day = Number(md[1]); 168 | } 169 | let hm = e.split(':') 170 | if(hm.length === 2){ 171 | this.hour = Number(hm[0]); 172 | this.minutes = Number(hm[1]); 173 | } 174 | let ymd = e.split('/'); 175 | if(ymd.length === 3){ 176 | this.year = Number(md[0]); 177 | this.month = Number(md[1]); 178 | this.day = Number(md[2]); 179 | } 180 | if(e.toLowerCase() === "today"){ 181 | let now = GLib.DateTime.new_now_local(); 182 | this.month = now.get_month(); 183 | this.day = now.get_day_of_month(); 184 | } 185 | }) 186 | 187 | if(this.year == NaN) this.year = undefined; 188 | if(this.month == NaN) this.month = undefined; 189 | if(this.day == NaN) this.day = undefined; 190 | if(this.hour == NaN) this.hour = undefined; 191 | if(this.minutes == NaN) this.minutes = undefined; 192 | 193 | if(!this.valid()){ throw new Error('Wrong date') } 194 | 195 | return this; 196 | } 197 | } 198 | 199 | class Task{ 200 | constructor(p){ 201 | this.title = p?.title, 202 | this.desc = p?.desc, 203 | this.date = new Date(p?.date) 204 | } 205 | 206 | parseDate(date){ this.date.fromString(date); } 207 | } 208 | 209 | function add(input = {}){ 210 | if(!input.title) throw new Error('Needs a title'); 211 | let tasks = getTasks(); 212 | tasks.push(new Task(input)); 213 | tasks.sort((a, b) => a.date.compare(b.date)); 214 | writeFile(tasks); 215 | } 216 | 217 | function remove(input = {}){ 218 | let tasks = getTasks(); 219 | input.remove.split(' ').forEach(i => { 220 | if(!tasks[i-1]) throw new Error('Index not found.'); 221 | tasks[i-1] = null 222 | }); 223 | writeFile(tasks.filter(t => t != null)); 224 | } 225 | 226 | function mod(input = {}){ 227 | let tasks = getTasks(); 228 | 229 | if(isNaN(Number(input.mod)) || !tasks[Number(input.mod)-1]) 230 | throw new Error('Index not found.'); 231 | 232 | let task = tasks[Number(input.mod)-1] 233 | if(input.title) task.title = input.title; 234 | if(input.date) task.date = (new Date()).fromString(input.date); 235 | if(input.desc) task.desc = input.desc; 236 | tasks.sort((a, b) => a.date.compare(b.date)); 237 | writeFile(tasks); 238 | } 239 | 240 | function printTasks(input = {}){ 241 | let width = input.terminal_width || TERMINAL_WIDTH 242 | let sepLine = '', sepSpace = ''; 243 | for(let i=0; i t.id = id++); 279 | tasks.filter(t => t.date.month || t.date.day || t.date.hour || t.date.asap ) 280 | .forEach(t => out.push({ 281 | asap: t.date.asap || t.date.isLate(), 282 | date: t.date.toString(), 283 | title: t.title, 284 | id: t.id 285 | })) 286 | 287 | print(JSON.stringify(out, null, 3)); 288 | } 289 | 290 | function getDesc(input = {}){ 291 | let tasks = getTasks(); 292 | if(!tasks[input.get_desc-1]) throw new Error('Index not found.'); 293 | 294 | let width = input.terminal_width || TERMINAL_WIDTH 295 | let sepLine = '', sepSpace = ''; 296 | for(let i=0; i>' | stdbuf -o0 awk -F '>>|,' '{print $2}' 6 | } 7 | 8 | function title { 9 | hyprctl activewindow -j | jq --raw-output .title 10 | socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | stdbuf -o0 grep '^activewindow>>' | stdbuf -o0 awk -F '>>|,' '{print $3}' 11 | } 12 | 13 | if [[ $1 == 'title' ]]; then title; fi 14 | if [[ $1 == 'class' ]]; then class; fi -------------------------------------------------------------------------------- /dot_config/eww/scss/colors.scss: -------------------------------------------------------------------------------- 1 | $theme: 'dark'; 2 | 3 | $red: #f66151; 4 | $green: #57e389; 5 | $blue: #62a0ea; 6 | $yellow: #f6d32d; 7 | $magenta: #c061cb; 8 | $teal: #5bc8aF; 9 | $orange: #ffa348; 10 | 11 | $bg_color: #181818; 12 | $fg_color: #eee; 13 | $hover_fg: #eee; 14 | $accent_fg: #181818; 15 | $red_gradient:radial-gradient(circle, rgba(246,97,81,1) 15%, rgba(246,97,81,1) 30%, rgba(24,24,24,1) 40%, rgba(24,24,24,1) 60%, rgba(246,97,81,1) 74%, rgba(246,97,81,1) 100%); 16 | 17 | -------------------------------------------------------------------------------- /dot_config/eww/scss/colors_dark.scss: -------------------------------------------------------------------------------- 1 | $theme: 'dark'; 2 | 3 | $red: #f66151; 4 | $green: #57e389; 5 | $blue: #62a0ea; 6 | $yellow: #f6d32d; 7 | $magenta: #c061cb; 8 | $teal: #5bc8aF; 9 | $orange: #ffa348; 10 | 11 | $bg_color: #181818; 12 | $fg_color: #eee; 13 | $hover_fg: #eee; 14 | $accent_fg: #181818; 15 | $red_gradient:radial-gradient(circle, rgba(246,97,81,1) 15%, rgba(246,97,81,1) 30%, rgba(24,24,24,1) 40%, rgba(24,24,24,1) 60%, rgba(246,97,81,1) 74%, rgba(246,97,81,1) 100%); 16 | 17 | -------------------------------------------------------------------------------- /dot_config/eww/scss/colors_light.scss: -------------------------------------------------------------------------------- 1 | $theme: 'light'; 2 | 3 | $red: #ed333b; 4 | $green: #33d17a; 5 | $blue: #3584e4; 6 | $yellow: #f6d32d; 7 | $magenta: #9141ac; 8 | $teal: #33b2a4; 9 | $orange: #ffa348; 10 | 11 | $bg_color: #FFFFFF; 12 | $fg_color: #1f1f1f; 13 | $hover_fg: #1f1f1f; 14 | $accent_fg: #1f1f1f; 15 | $red_gradient:radial-gradient(circle, rgba(246,97,81,1) 15%, rgba(246,97,81,1) 30%, rgba(24,24,24,1) 40%, rgba(24,24,24,1) 60%, rgba(246,97,81,1) 74%, rgba(246,97,81,1) 100%); 16 | 17 | -------------------------------------------------------------------------------- /dot_config/eww/scss/common.scss: -------------------------------------------------------------------------------- 1 | 2 | @keyframes gradient_f { 3 | 0% { 4 | background-position: 0% 200%; 5 | } 6 | 50% { 7 | background-position: 200% 0%; 8 | } 9 | 100% { 10 | background-position: 400% 200%; 11 | } 12 | } 13 | 14 | 15 | @mixin widget($radii: $widget_radius){ 16 | border-radius: $radii; 17 | color: $fg_color; 18 | background-color: $widget_bg; 19 | box-shadow: inset 0 0 0 $border_width $border_color; 20 | } 21 | 22 | @mixin button($flat: false, $interactive: true, $radii: $radii){ 23 | border-radius: $radii; 24 | color: $fg_color; 25 | @if $flat{ 26 | background-color: transparent; 27 | background-image: none; 28 | box-shadow: none; 29 | }@else{ 30 | background-color: $button_bg; 31 | box-shadow: inset 0 0 0 $border_width $border_color; 32 | } 33 | @if $interactive{ 34 | &:hover{ 35 | box-shadow: inset 0 0 0 $border_width $border_color; 36 | background-color: $hover; 37 | color: $hover_fg; 38 | } 39 | &:active{ 40 | box-shadow: inset 0 0 0 $border_width $border_color; 41 | background-color: $accent; 42 | color: $accent_fg; 43 | } 44 | } 45 | } 46 | 47 | @mixin floating_widget($shadow: true, $padding: $popover_padding){ 48 | @if $shadow { 49 | box-shadow: 0 0 8px 0 rgba(0,0,0,0.8), 50 | inset 0 0 0 $border_width $popover_border_color; 51 | } @else { 52 | box-shadow: inset 0 0 0 $border_width $popover_border_color; 53 | } 54 | border-radius: $popover_radius; 55 | margin: max($wm_gaps, 14px); 56 | background-color: $bg_color; 57 | color: $fg_color; 58 | padding: $padding; 59 | } 60 | 61 | @mixin slider($width: .4em, $color: $accent, $slider: true){ 62 | trough{ 63 | border-radius: $button_radius; 64 | border: $border; 65 | background-color: $button_bg; 66 | min-height: $width; 67 | min-width: $width; 68 | highlight, progress{ 69 | border-radius: $button_radius; 70 | background-color: $color; 71 | min-height: $width; 72 | min-width: $width; 73 | } 74 | slider{ 75 | @if $slider{ 76 | background-color: $fg_color; 77 | border-radius: $button_radius; 78 | border: $border; 79 | min-height: $width; 80 | min-width: $width; 81 | } 82 | } 83 | } 84 | &:hover{ 85 | trough{ 86 | background-color: $hover; 87 | } 88 | } 89 | } 90 | 91 | @mixin darkened($radii: 0){ 92 | border-radius: $radii*0.8; 93 | @if $theme == 'dark' { 94 | box-shadow: inset 0 0 3em 1em transparentize($bg_color, 0.1); 95 | } 96 | @if $theme == 'light' { 97 | background-color: transparentize($bg_color, 0.5); 98 | } 99 | } 100 | 101 | @mixin tooltip{ 102 | > * > *{ 103 | background-color: $bg_color; 104 | border-radius: $button_radius; 105 | border: $border_width solid $popover_border_color; 106 | color: $fg_color; 107 | padding: 8px; 108 | margin: 4px; 109 | box-shadow: 0 0 3px 0 rgba(0,0,0,0.4); 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /dot_config/eww/scss/datemenu.scss: -------------------------------------------------------------------------------- 1 | $spacing: $popover_padding*0.5; 2 | 3 | .datemenu{ 4 | @include floating_widget; 5 | 6 | .module{ 7 | @include widget; 8 | margin: $spacing; 9 | padding: 12px; 10 | } 11 | 12 | .clock *{ 13 | margin-top: $spacing; 14 | text-shadow: $text_shadow; 15 | font-size: 7em; 16 | } 17 | 18 | .uptime{ 19 | margin-bottom: $spacing*2; 20 | font-size: 1.1em; 21 | text-shadow: $text_shadow; 22 | color: transparentize($fg_color, 0.3) 23 | } 24 | 25 | .calendar-bin{ 26 | padding: .6em 2em 0 2em; 27 | calendar{ 28 | &.button{ 29 | @include button($flat: true); 30 | margin: 1em; 31 | } 32 | &:selected{ 33 | box-shadow: inset 0 -8px 0 0 transparentize($accent, 0.5), 34 | inset 0 0 0 1px $accent; 35 | border-radius: $button_radius; 36 | } 37 | &.header{ 38 | background-color: transparent; 39 | border: none; 40 | color: transparentize($fg_color, 0.5); 41 | } 42 | &.highlight{ 43 | background-color: transparent; 44 | color: transparentize($accent, 0.5); 45 | } 46 | &:indeterminate { 47 | color: transparentize($fg_color, 0.9); 48 | } 49 | font-size: 1.2em; 50 | padding: .2em; 51 | } 52 | } 53 | 54 | .events{ 55 | padding: 0; 56 | .box-title{ 57 | padding: 12px; 58 | padding-bottom: 6px; 59 | border-bottom: $border_width solid transparentize($fg_color, 0.92); 60 | } 61 | .events-box{ 62 | padding: 12px; 63 | .event{ 64 | label{ font-size: 1.2em;} 65 | .date{ 66 | color: transparentize($fg_color, 0.5); 67 | font-family: $mono_font; 68 | } 69 | .title{ 70 | button label{ color: transparent; } 71 | &:hover button{ 72 | label{ 73 | @include button(); 74 | background-color: $bg_color; 75 | color: transparentize($fg_color, 0.3); 76 | } 77 | &:hover label{ color: $fg_color } 78 | } 79 | } 80 | &.urgent{ 81 | .date{ 82 | color: transparentize(mix($fg_color, $red, 30%), 0.5); 83 | } 84 | .title{ 85 | color: mix($fg_color, $red, 30%); 86 | } 87 | } 88 | } 89 | } 90 | } 91 | 92 | .weather{ 93 | .info{ 94 | label:first-child{ font-size: 1.2em; } 95 | label:last-child{ color: transparentize($fg_color, 0.3); } 96 | } 97 | .icon{ 98 | font-size: 2.6em; 99 | font-family: $mono_font; 100 | 101 | &.clear.d{ color: transparentize($yellow, 0.6); } 102 | &.clear.n{ color: transparentize($blue, 0.6); } 103 | 104 | &.clouds.d{ color: transparentize($fg_color, 0.6); } 105 | &.clouds.n{ color: transparentize($blue, 0.6); } 106 | 107 | &.rain{ color: transparentize($blue, 0.6); } 108 | &.thunderstorm{ color: transparentize($yellow, 0.6); } 109 | &.snow{ color: transparentize($fg_color, 0.6); } 110 | &.mist{ color: transparentize($teal, 0.6); } 111 | } 112 | } 113 | 114 | .wallpaper{ 115 | min-height: 13em; 116 | background-image: url($assets+'wallpaper.png'); 117 | background-size: cover; 118 | } 119 | } -------------------------------------------------------------------------------- /dot_config/eww/scss/desktop.scss: -------------------------------------------------------------------------------- 1 | .desktop{ 2 | background-image: url($wallpaper); 3 | background-size: cover; 4 | .clock{ 5 | color: white; 6 | text-shadow: 4px 4px 4px black; 7 | .hour, .minutes, .separator{ 8 | font-size: 10em; 9 | font-family: $mono_font; 10 | } 11 | .date{ font-size: 2em; } 12 | } 13 | } -------------------------------------------------------------------------------- /dot_config/eww/scss/osd.scss: -------------------------------------------------------------------------------- 1 | .osd{ 2 | @include floating_widget; 3 | padding: .3em; 4 | .icon{ 5 | font-size: 40px; 6 | color: $accent_fg; 7 | min-width: 30px; 8 | min-height: 30px; 9 | } 10 | .scale{ 11 | min-height: 14em; 12 | @include slider($width: 3em); 13 | trough{ 14 | background-color: transparent; 15 | border: none; 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /dot_config/eww/scss/panel.scss: -------------------------------------------------------------------------------- 1 | .panel { 2 | min-height: 2.2em; 3 | border-radius: $panel_radius; 4 | font-weight: bold; 5 | font-size: 1.1em; 6 | color: $fg_color; 7 | text-shadow: $text_shadow; 8 | margin-bottom: 10px; 9 | 10 | background-color: transparent; 11 | @if $theme == 'dark' { 12 | background-color: $bg_color; 13 | border-bottom: $border_width solid $popover_border_color; 14 | box-shadow: 0 0 6px 0 rgba(0,0,0,0.8); 15 | } 16 | 17 | .active{color: $blue; } 18 | .inactive{color: $fg_color; } 19 | 20 | .button-bin{ 21 | margin: 3px 2px; 22 | &.launcher{ margin-left: 4px } 23 | &.powermenu{ margin-right: 4px } 24 | } 25 | 26 | .button{ 27 | .icon{ font-size: 1.2em;} 28 | @include button($flat: true, $radii: $panel_button_radius); 29 | > * { padding: 0 .7em } 30 | 31 | &.launcher{ color: $blue; } 32 | &.powermenu{ color: $red; } 33 | &.window{ @include button($flat: true, $interactive: false) } 34 | &.system-indicators{ 35 | .icon{ font-size: 1.3em; } 36 | .battery{ 37 | .low{ color: $destructive; } 38 | .charging{ color: $succes; } 39 | .charged{ color: $succes; } 40 | } 41 | } 42 | 43 | &.media{ 44 | .icon{ 45 | margin-right: .2em; 46 | &.spotify{ color: $green; } 47 | &.firefox\.instance2{ color: $orange; } 48 | &.mpv{ color: $magenta; } 49 | } 50 | } 51 | } 52 | 53 | .sliders-bin{ 54 | min-width: 220px; 55 | margin-right: 4px; 56 | .slider{ 57 | @include slider($width: 1.2em, $slider: false); 58 | .icon{ 59 | margin-left: 3px; 60 | color: $accent_fg; 61 | } 62 | } 63 | .separator{ 64 | min-width: 2px; 65 | min-height: 1em; 66 | margin: 0 4px; 67 | background-color: $fg_color; 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /dot_config/eww/scss/powermenu.scss: -------------------------------------------------------------------------------- 1 | .powermenu1, 2 | .powermenu0{ 3 | background-color: rgba(0,0,0,0.5); 4 | .content{ 5 | @include floating_widget; 6 | .user{ 7 | .image{ 8 | background-image: url($assets+'avatar.jpg'); 9 | background-size: cover; 10 | background-repeat: no-repeat; 11 | min-width: 120px; 12 | min-height: 120px; 13 | border-radius: 24px; 14 | margin-bottom: 12px; 15 | } 16 | font-size: 1.2em; 17 | text-shadow: $text_shadow; 18 | 19 | } 20 | .clock{ 21 | text-shadow: $text_shadow; 22 | margin-bottom: 2.2em; 23 | .hour *{ font-size: 9em } 24 | .date{ font-size: 2em } 25 | } 26 | .power-menu{ 27 | border-radius: $radii*3; 28 | padding: 15px; 29 | } 30 | .button-bin{ 31 | margin: 15px; 32 | margin-bottom: 0; 33 | .button{ 34 | @include button; 35 | border-radius: $radii*2.4; 36 | font-size: 60px; 37 | min-width: 130px; 38 | min-height: 130px; 39 | .icon{ 40 | background-size: contain; 41 | margin: 24px; 42 | @if $theme == 'light' { 43 | &.shutdown{ background-image: url('assets/powermenu/light-shutdown.png'); } 44 | &.reboot{ background-image: url($assets+'powermenu/light-reboot.png'); } 45 | &.logout{ background-image: url($assets+'powermenu/light-logout.png'); } 46 | &.suspend{ background-image: url($assets+'powermenu/light-suspend.png'); } 47 | &.lock{ background-image: url($assets+'powermenu/light-lock.png'); } 48 | }@else{ 49 | &.shutdown{ background-image: url('assets/powermenu/shutdown.png'); } 50 | &.reboot{ background-image: url('assets/powermenu/reboot.png'); } 51 | &.logout{ background-image: url('assets/powermenu/logout.png'); } 52 | &.suspend{ background-image: url('assets/powermenu/suspend.png'); } 53 | &.lock{ background-image: url('assets/powermenu/lock.png'); } 54 | } 55 | } 56 | } 57 | .label{ 58 | font-size: 20px; 59 | margin: 8px 0; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /dot_config/eww/scss/quicksettings.scss: -------------------------------------------------------------------------------- 1 | $spacing: $popover_padding*0.5; 2 | .quick-settings{ 3 | @include floating_widget; 4 | 5 | .module{ 6 | @include widget; 7 | margin: $spacing; 8 | padding: $spacing; 9 | } 10 | 11 | .user{ 12 | .profile-picture{ 13 | padding: 0; 14 | min-height: 10em; 15 | min-width: 10em; 16 | background-size: cover; 17 | .darkened{ 18 | @include darkened($radii: $button_radius); 19 | padding: .3em; 20 | label{ 21 | text-shadow: $text_shadow; 22 | &:first-child{ 23 | color: transparentize($fg_color, 0.1); 24 | font-size: 1.3em; 25 | } 26 | &:last-child{ 27 | color: transparentize($fg_color, 0.3); 28 | font-size: 1.1em; 29 | } 30 | } 31 | } 32 | } 33 | .sysactions{ 34 | button{ 35 | @include button($radii: 40%); 36 | margin: $spacing; 37 | padding: .4em; 38 | label{ font-size: 2.4em } 39 | &.power{ 40 | border: none; 41 | border-radius: 15px; 42 | background: $red_gradient; 43 | background-size: 400% 400%; 44 | animation: gradient_f linear infinite; 45 | animation-delay: 0s; 46 | animation-fill-mode: forwards; 47 | animation-duration: 10.0s; 48 | } 49 | } 50 | .uptime{ 51 | font-size: 1.3em; 52 | color: transparentize($fg_color, 0.5); 53 | } 54 | } 55 | } 56 | 57 | .sliders{ 58 | .slider{ @include slider($width: .8em, $slider: false);} 59 | .percent{ 60 | margin: $spacing; 61 | min-width: 2.6em; 62 | } 63 | .icon{ 64 | margin: $spacing; 65 | &:first-child{ font-size: 1.4em; } 66 | } 67 | button{ 68 | @include button($flat: true); 69 | margin-right: $spacing; 70 | .icon{ margin: 0; } 71 | } 72 | } 73 | 74 | .system{ 75 | .module{ 76 | padding: 8px; 77 | min-width: 4.4em; 78 | min-height: 4.4em; 79 | } 80 | circular-progress{ 81 | background-color: $bg_color; 82 | color: $accent; 83 | &.battery{ 84 | &.low{ color: $red } 85 | } 86 | .icon{ font-size: 1.8em; } 87 | } 88 | } 89 | 90 | $toggle_radius: 19px; 91 | .toggles .toggle{ 92 | @include button($radii: $toggle_radius); 93 | &.small{ @include button($radii: 40%); } 94 | margin: $spacing; 95 | .separator{ 96 | background-color: $fg_color; 97 | min-width: 2px; 98 | min-height: 1.4em; 99 | } 100 | .half{ 101 | @include button($flat: true); 102 | min-height: 3.4em; 103 | &:first-child{ border-radius: $toggle_radius 0 0 $toggle_radius } 104 | &:last-child{ border-radius: 0 $toggle_radius $toggle_radius 0 } 105 | &:hover{ background-color: $hover } 106 | } 107 | &.active{ 108 | * { color: $accent_fg; } 109 | background-color: $accent; 110 | .separator{ background-color: $accent_fg; } 111 | &:hover *{ color: $hover_fg } 112 | } 113 | .icon{ 114 | font-size: 2em; 115 | &.arrow{ font-size: 1.8em; } 116 | } 117 | } 118 | 119 | .media{ 120 | min-height: 12em; 121 | padding: 0; 122 | text-shadow: $text_shadow; 123 | .cover{ 124 | @include widget; 125 | background-size: cover; 126 | background-position: center; 127 | .darkened{ 128 | @include darkened($radii: $button_radius); 129 | } 130 | .slider{ 131 | @include slider($width: .4em, $slider: false, $color: transparentize($fg_color, 0.3)); 132 | scale > contents{ 133 | trough{ 134 | border-radius: 0; 135 | border: 0; 136 | highlight{ 137 | border-radius: 0; 138 | } 139 | } 140 | } 141 | } 142 | .box{ margin: $spacing; } 143 | .artist{ font-size: 1.2em; } 144 | .title, .position{ color: transparentize($fg_color, 0.2);} 145 | .icon.player{ 146 | font-size: 1.4em; 147 | margin-left: .6em; 148 | } 149 | .controls{ 150 | margin: $spacing; 151 | button{ 152 | label{ font-size: 2em; } 153 | &.loop, &.shuffle{ 154 | label{ font-size: 1.2em; } 155 | } 156 | color: transparentize($fg_color, 0.3); 157 | &:hover{ color: $fg_color; } 158 | &.active{ color: $accent; } 159 | &.inactive{ 160 | color: transparentize($fg_color, 0.7); 161 | text-shadow: none; 162 | } 163 | &.loop{ 164 | &.Playlist{ color: transparentize($accent, 0.2); } 165 | &.Track{ color: $accent; } 166 | } 167 | } 168 | } 169 | } 170 | .sidebar{ 171 | .slider{ @include slider($width: .6em, $slider: false); } 172 | margin: $spacing*2; 173 | } 174 | 175 | &.spotify{ 176 | .icon.player{ color: $green; } 177 | .sidebar .slider{ 178 | @include slider($width: .6em, $slider: false, $color: $green); 179 | } 180 | .controls button{ 181 | &.active{ color: $green; } 182 | &.loop{ 183 | &.Playlist{ color: transparentize($green, 0.2); } 184 | &.Track{ color: $green; } 185 | } 186 | } 187 | } 188 | 189 | &.firefox\.instance2{ 190 | .icon.player{ color: $orange; } 191 | } 192 | 193 | &.mpv{ 194 | .icon.player{ color: $magenta; } 195 | .sidebar .slider{ 196 | @include slider($width: .6em, $slider: false, $color: $magenta); 197 | } 198 | .controls button{ 199 | &.active{ color: $magenta; } 200 | &.loop{ 201 | &.Playlist{ color: transparentize($magenta, 0.2); } 202 | &.Track{ color: $magenta; } 203 | } 204 | } 205 | } 206 | } 207 | } 208 | -------------------------------------------------------------------------------- /dot_config/eww/scss/variables.scss: -------------------------------------------------------------------------------- 1 | $assets: '.config/eww/assets/'; 2 | $wallpaper: $assets+'wallpaper.png'; 3 | $avatar: $assets+'avatar.jpg'; 4 | 5 | //red //swaync, powermenu 6 | //green //panel .charging 7 | //blue //datemenu .night 8 | //yellow //datemenu .clear 9 | //magenta //quicksettings .mpv 10 | //teal //datemenu .mist 11 | //orange //quicksettings.firefox 12 | 13 | $hover: transparentize($fg_color, 0.84); 14 | $accent: $blue; 15 | 16 | $wm_gaps: 18px; 17 | $destructive: $red; 18 | $succes: $green; 19 | $radii: 7px; 20 | 21 | $widget_bg: transparentize($fg_color, 0.94); 22 | $widget_radius: $radii; 23 | 24 | $button_bg: transparentize($fg_color, 0.92); 25 | $button_radius: $radii; 26 | 27 | $panel_radius: $radii * 0; 28 | $panel_button_radius: $radii * 0.9; 29 | 30 | $border_color: rgba(255, 255, 255, 0.002); 31 | $border_width: 1px; 32 | $border: $border_width solid $border_color; 33 | 34 | $text_shadow: 2px 2px 2px rgba(0,0,0,0.5); 35 | 36 | $popover_radius: $radii * 1.8; 37 | $popover_border_color: rgba(255,255,255,0.02); 38 | $popover_padding: 14px; 39 | -------------------------------------------------------------------------------- /dot_config/eww/wallpapers/FoolMoon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sotoleo/dotfiles/bfd26c6a68cecf65c5a39e68b293014d14f8966c/dot_config/eww/wallpapers/FoolMoon.png -------------------------------------------------------------------------------- /dot_config/eww/wallpapers/Kurz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sotoleo/dotfiles/bfd26c6a68cecf65c5a39e68b293014d14f8966c/dot_config/eww/wallpapers/Kurz.png -------------------------------------------------------------------------------- /dot_config/eww/yuck/datemenu.yuck: -------------------------------------------------------------------------------- 1 | (defwidget datemenu_weather [place] (box 2 | :class "weather" 3 | :space-evenly false 4 | (box 5 | :class "info module" 6 | :orientation "h" 7 | :hexpand true 8 | :space-evenly false 9 | (box 10 | :orientation "v" 11 | (label :text {place.city} :halign "START" ) 12 | (label :text "feels like ${place.feels}°" :halign "START") 13 | ) 14 | (box 15 | :orientation "v" 16 | :hexpand true 17 | :halign "END" 18 | (label :text "${place.temp}°" :halign "END") 19 | (label :text {place.desc} :halign "END") 20 | ) 21 | ) 22 | (label 23 | :class "icon module ${place.class}" 24 | :text {place.icon} 25 | :halign "center" 26 | ) 27 | )) 28 | 29 | (defwidget datemenu_events [] (box 30 | :class "events module" 31 | :orientation "v" 32 | :space-evenly false 33 | :visible {arraylength(events) > 0} 34 | (box 35 | :class "box-title" 36 | (label :text "Todo" :halign "START") 37 | (label :text "Deadline" :halign "END") 38 | ) 39 | (box 40 | :class "events-box" 41 | :orientation "v" 42 | (for event in events 43 | (box 44 | :space-evenly false 45 | :class "event ${event.asap ? "urgent" : ""}" 46 | (eventbox 47 | :hexpand true 48 | :class "title" 49 | (overlay 50 | (label 51 | :halign "START" 52 | :limit-width 21 ;wrap doesn't work? 53 | :text {event.title} 54 | ) 55 | (button 56 | :halign "END" 57 | :class "done" 58 | :onclick "${EWW_CONFIG_DIR}/scripts/todo -r ${event.id}" 59 | (label :text "" :class "icon") 60 | ) 61 | ) 62 | ) 63 | (label 64 | :class "date" 65 | :text {event.date} 66 | ) 67 | ) 68 | ) 69 | ) 70 | )) 71 | 72 | (defwidget datemenu [] (eventbox 73 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu calendar" 74 | (box 75 | :valign "START" 76 | :halign "START" 77 | :orientation "v" 78 | :class "datemenu" 79 | :space-evenly false 80 | (box 81 | :halign "center" 82 | :space-evenly false 83 | :class "clock" 84 | (label :text hour) 85 | (label :text ":") 86 | (label :text minutes) 87 | ) 88 | (label 89 | :class "uptime" 90 | :text "uptime: ${uptime}" 91 | :valign "start" 92 | ) 93 | (box 94 | :class "calendar-bin module" 95 | (calendar) 96 | ) 97 | (datemenu_events) 98 | (box 99 | :class "weather-box" 100 | :orientation "v" 101 | (for place in weather 102 | (datemenu_weather :place place) 103 | ) 104 | ) 105 | (box :class "wallpaper module") 106 | ) 107 | )) -------------------------------------------------------------------------------- /dot_config/eww/yuck/desktop.yuck: -------------------------------------------------------------------------------- 1 | (defwidget desktop_clock [] (box 2 | :class "clock" 3 | :space-evenly false 4 | :orientation "v" 5 | :valign "center" 6 | :halign "center" 7 | (box 8 | :space-evenly false 9 | (label :class "hour" :text hour) 10 | (label :class "separator" :text ":") 11 | (label :class "minutes" :text minutes) 12 | ) 13 | (label :class "date" :text date) 14 | )) 15 | 16 | (defwidget desktop [] (box 17 | :class "desktop" 18 | (desktop_clock) 19 | )) -------------------------------------------------------------------------------- /dot_config/eww/yuck/osd.yuck: -------------------------------------------------------------------------------- 1 | (defvar osd_icon "󰕾") 2 | (defvar osd_value 50) 3 | 4 | (defwidget osd [] (eventbox 5 | :onclick "${EWW_CONFIG_DIR}/scripts/osd close" 6 | (box :class "osd" 7 | (overlay 8 | (progress 9 | :class "scale" 10 | :value osd_value 11 | :valign "CENTER" 12 | :halign "CENTER" 13 | :orientation "v" 14 | :flipped true 15 | ) 16 | (label 17 | :text osd_icon 18 | :valign "END" 19 | :halign "CENTER" 20 | :class "icon" 21 | ) 22 | ) 23 | ) 24 | )) -------------------------------------------------------------------------------- /dot_config/eww/yuck/panel.yuck: -------------------------------------------------------------------------------- 1 | (defwidget panel_launcher [] (box :class "button-bin launcher" 2 | (button 3 | :class "button launcher" 4 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher applauncher" 5 | (label :class "icon" :text " " :halign "center") 6 | ) 7 | )) 8 | 9 | (defwidget panel_clock [] (box :class "button-bin" 10 | (button 11 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu calendar" 12 | :class "button clock" 13 | (label :text panel_clock) 14 | ) 15 | )) 16 | 17 | 18 | 19 | 20 | (defwidget panel_window [] (box :class "button-bin" 21 | (button :class "button window" 22 | (label 23 | :visible {window != "null" ? true : false} 24 | :text window) 25 | ) 26 | )) 27 | 28 | (defwidget panel_media [] (box :class "button-bin" 29 | (eventbox 30 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${media[0].player} play-pause" 31 | :onscroll "${EWW_CONFIG_DIR}/scripts/player ${media[0].player} {}" 32 | :class "button media" 33 | (box 34 | :visible {arraylength(media) > 0 ? true : false} 35 | :space-evenly false 36 | (label :class "icon ${media[0].player}" :text {media[0].icon}) 37 | (label 38 | :text "${media[0].artist} - ${media[0].title}") 39 | ) 40 | ) 41 | )) 42 | 43 | 44 | (defvar panel_sliders false) 45 | (defwidget panel_sliders [] (box :class "button-bin" (eventbox 46 | :onhover "${EWW_CMD} update panel_sliders=true" 47 | :onhoverlost "${EWW_CMD} update panel_sliders=false" 48 | (box :space-evenly false 49 | (revealer 50 | :transition "slideright" 51 | :duration "300ms" 52 | :reveal panel_sliders (box 53 | :class "sliders-bin" 54 | :space-evenly false 55 | (eventbox 56 | :class "slider" 57 | :hexpand true 58 | (overlay 59 | (scale :value screen_level 60 | :onchange "${EWW_CONFIG_DIR}/scripts/brightness set_screen {}") 61 | (label :valign "center" 62 | :class "icon" 63 | :halign "START" 64 | :text "󰃠"))) 65 | (box :class "separator" :valign "center" ) 66 | (eventbox 67 | :class "slider" 68 | :hexpand true 69 | (overlay 70 | (scale :value volume_level 71 | :onchange "${EWW_CONFIG_DIR}/scripts/volume set {}") 72 | (label :valign "center" 73 | :class "icon" 74 | :halign "START" 75 | :text speaker_type_icon))) 76 | )) 77 | (label :class "icon" :text "" :valign "center") 78 | )))) 79 | 80 | (defwidget panel_colorpicker [] (box :class "button-bin" 81 | (button 82 | :class "button colorpicker" 83 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher colorpicker" 84 | (label :class "icon" :text "󰈊") 85 | ) 86 | )) 87 | 88 | (defwidget panel_system-indicators [] (box :class "button-bin" 89 | (button 90 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu quicksettings" 91 | :class "button system-indicators" 92 | (box 93 | :space-evenly false 94 | :spacing 6 95 | (label :class "icon bt-headphones" 96 | :text speaker_type_icon 97 | :visible {speaker_type_icon != "󰓃"}) 98 | (eventbox :onscroll "${EWW_CONFIG_DIR}/scripts/volume {}" 99 | (label :class "volume icon" 100 | :tooltip "Level: ${volume_level}%" 101 | :text volume_icon)) 102 | (label :class "bluetooth icon" 103 | :text bluetooth_icon 104 | :tooltip bluetooth_connected 105 | :visible {bluetooth_state == "on"}) 106 | (label :class "network icon ${network_status}" 107 | :tooltip "${wifi_strength}% ${wifi_ssid}" 108 | :text network_icon) 109 | (box :class "battery" 110 | :tooltip "Battery: ${battery.percent}%" 111 | :space-evenly false 112 | (label :class "icon ${battery.state}" 113 | :text {battery.icon}) 114 | (label :text "${battery.percent}%" 115 | :visible {battery.state != "charged" && battery.state != "charging"})) 116 | ) 117 | ) 118 | )) 119 | 120 | (defwidget panel_notifications [] (box :class "button-bin" 121 | (button 122 | :class "button notifications" 123 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher notifications" 124 | (box 125 | :space-evenly false 126 | (label :class "icon" :text dnd_icon) 127 | (label :text notification_count ) 128 | ) 129 | ) 130 | )) 131 | 132 | (defwidget panel_powermenu [] (box :class "button-bin powermenu" (button 133 | :class "button powermenu" 134 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu powermenu" 135 | (label :class "icon" :text "") 136 | ))) 137 | 138 | (defwidget bar [] (centerbox 139 | :class "panel" 140 | (box 141 | :class "leftBar" 142 | :space-evenly false 143 | (panel_launcher) 144 | (panel_clock) 145 | (panel_window) 146 | (panel_media) 147 | ) 148 | (box 149 | :valign "center" 150 | :halign "end" 151 | :class "centerBar" 152 | 153 | ) 154 | (box 155 | :class "righBar" 156 | :space-evenly false 157 | :halign "end" 158 | :hexpand true 159 | (panel_colorpicker) 160 | (panel_system-indicators) 161 | (panel_notifications) 162 | (panel_powermenu) 163 | ) 164 | )) 165 | -------------------------------------------------------------------------------- /dot_config/eww/yuck/powermenu.yuck: -------------------------------------------------------------------------------- 1 | (defwidget powermenu_clock [] (box 2 | :orientation "v" 3 | :class "clock" 4 | :space-evenly false 5 | :halign "center" 6 | :valign "center" 7 | :hexpand true 8 | (box :class "hour" 9 | :space-evenly false 10 | (label :text hour) 11 | (label :text ":") 12 | (label :text minutes)) 13 | (label :class "date" :text date) 14 | (label :class "uptime" :text "uptime: ${uptime}") 15 | )) 16 | 17 | (defwidget powermenu_user [] (box 18 | :orientation "v" 19 | :class "user" 20 | :space-evenly false 21 | :halign "center" 22 | :valign "center" 23 | :hexpand true 24 | (box :class "image") 25 | (label :text "Demeter") 26 | (label :text "GoodBye!") 27 | )) 28 | 29 | (defwidget powerbutton [action icon label] (box 30 | :orientation "v" 31 | :space-evenly false 32 | :tooltip label 33 | :class "button-bin" 34 | (button 35 | :class "button" 36 | :onclick action 37 | (box :class "icon ${icon}" ) 38 | ) 39 | (label :class "label" :text label) 40 | )) 41 | 42 | (defwidget powermenu [] (eventbox 43 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu powermenu" 44 | (box 45 | :class "content" 46 | :halign "center" 47 | :valign "center" 48 | :orientation "v" 49 | :space-evenly false 50 | ; (box :orientation "h" 51 | ; :space-evenly false 52 | ; (powermenu_user) 53 | ; (powermenu_clock)) 54 | (box 55 | :class "power-menu" 56 | :space-evenly false 57 | :orientation "h" 58 | (powerbutton :action "${EWW_CONFIG_DIR}/scripts/launcher screenlock" :icon "lock" :label "Lock Screen") 59 | (powerbutton :action "systemctl suspend" :icon "suspend" :label "Suspend") 60 | (powerbutton :action "systemctl reboot" :icon "reboot" :label "Restart") 61 | (powerbutton :action "loginctl kill-user $(whoami)" :icon "logout" :label "Log Out") 62 | (powerbutton :action "shutdown now" :icon "shutdown" :label "Shutdown") 63 | ) 64 | ))) -------------------------------------------------------------------------------- /dot_config/eww/yuck/quicksettings.yuck: -------------------------------------------------------------------------------- 1 | (defwidget small_toggle [state icon toggle_action] (button 2 | :class "toggle small ${state == "on" ? "active" : ""}" 3 | :onclick toggle_action 4 | (overlay (box) (label :class "icon" :valign "center" :text icon)) 5 | )) 6 | 7 | (defwidget arrow_toggle [state icon toggle_action arrow_action] (box 8 | :class "toggle arrow ${state == "on" ? "active" : ""}" 9 | :orientation "h" 10 | :valign "center" 11 | :space-evenly false 12 | (button :class "half" 13 | :onclick toggle_action 14 | :hexpand true 15 | (overlay (box)(label :class "icon indicator" :valign "center" :text icon))) 16 | (box :class "separator" :valign "center") 17 | (button :class "half" 18 | :onclick arrow_action 19 | :hexpand true 20 | (overlay (box) (label :class "icon arrow" :valign "center" :text ""))) 21 | )) 22 | 23 | (defwidget notif_toggle [state icon toggle_action arrow_action] (box 24 | :class "toggle arrow ${state == "on" ? "active" : ""}" 25 | :orientation "h" 26 | :valign "center" 27 | :space-evenly false 28 | (button :class "half" 29 | :onclick toggle_action 30 | :hexpand true 31 | (overlay (box)(label :class "icon indicator" :valign "center" :text icon))) 32 | (box :class "separator" :valign "center") 33 | (button :class "half" 34 | :onclick arrow_action 35 | :hexpand true 36 | (overlay (box) (label :class "icon arrow" :valign "center" :text "󰂛"))) 37 | )) 38 | 39 | 40 | (defwidget quick_toggles [] (box 41 | :class "module toggles arrow" 42 | (arrow_toggle 43 | :state network_state 44 | :icon wifi_icon 45 | :arrow_action "${EWW_CONFIG_DIR}/scripts/launcher network" 46 | :toggle_action "${EWW_CONFIG_DIR}/scripts/network toggle") 47 | (arrow_toggle 48 | :state bluetooth_state 49 | :icon bluetooth_icon 50 | :arrow_action "${EWW_CONFIG_DIR}/scripts/launcher bluetooth" 51 | :toggle_action "${EWW_CONFIG_DIR}/scripts/bluetooth toggle") 52 | (arrow_toggle 53 | :state "on" 54 | :icon '󱡫' 55 | :arrow_action "${EWW_CONFIG_DIR}/scripts/launcher qctl" 56 | :toggle_action " ") 57 | )) 58 | 59 | (defwidget quick_toggles_grid [] (box 60 | :class "module toggles small" 61 | :orientation "v" 62 | (box 63 | :orientation "h" 64 | (notif_toggle 65 | :state dnd_state 66 | :icon "󰂚" 67 | :toggle_action "${EWW_CONFIG_DIR}/scripts/notifications toggle_on" 68 | :arrow_action "${EWW_CONFIG_DIR}/scripts/notifications toggle_off") 69 | ) 70 | (box 71 | :orientation "h" 72 | (small_toggle 73 | :state mute_state 74 | :icon mute_icon 75 | :toggle_action "${EWW_CONFIG_DIR}/scripts/volume mute_toggle") 76 | (small_toggle 77 | :state night_light_state 78 | :icon night_light_icon 79 | :toggle_action "${EWW_CONFIG_DIR}/scripts/night_light toggle") 80 | ) 81 | )) 82 | 83 | (defwidget quick_sliders [] (box 84 | :class "module sliders" 85 | :orientation "v" 86 | (box 87 | :space-evenly false 88 | (label 89 | :class "icon" 90 | :text speaker_type_icon) 91 | (eventbox 92 | :hexpand true 93 | :valign "CENTER" 94 | :class "slider" 95 | (scale 96 | :value volume_level 97 | :onchange "${EWW_CONFIG_DIR}/scripts/volume set {}")) 98 | (box 99 | :space-evenly false 100 | :class "percent" 101 | (label 102 | :hexpand true 103 | :halign "END" 104 | :text "${volume_level}%") 105 | ) 106 | ) 107 | (box 108 | :space-evenly false 109 | (label 110 | :class "icon" 111 | :text "󰃠") 112 | (eventbox 113 | :hexpand true 114 | :valign "CENTER" 115 | :class "slider" 116 | (scale 117 | :value screen_level 118 | :onchange "${EWW_CONFIG_DIR}/scripts/brightness set_screen {}")) 119 | (box 120 | :space-evenly false 121 | :class "percent" 122 | (label 123 | :hexpand true 124 | :halign "END" 125 | :text "${screen_level}%") 126 | ) 127 | ) 128 | )) 129 | 130 | (defwidget sysprogress [data icon css tip] (box 131 | :class "module ${css}" (circular-progress 132 | :class css 133 | :value data 134 | :start-at 75 135 | :clockwise false 136 | :thickness 11 137 | :tooltip tip 138 | (overlay 139 | :valign "center" 140 | (label :class "icon" :text icon) 141 | ; (label :text "${round(data, 0)}%") 142 | ) 143 | ))) 144 | 145 | (defwidget syslevels [] (box 146 | :class "system" 147 | :orientation "v" 148 | (box :orientation "h" 149 | (sysprogress 150 | :css "cpu" 151 | :tip "CPU ${round(EWW_CPU.avg,0)}%" 152 | :data {EWW_CPU.avg} 153 | :icon "﬙" 154 | ) 155 | (sysprogress 156 | :css "ram" 157 | :tip "RAM ${round(EWW_RAM.used_mem / EWW_RAM.total_mem * 100, 0)}%" 158 | :data {EWW_RAM.used_mem / EWW_RAM.total_mem * 100} 159 | :icon "󰍛" 160 | ) 161 | ) 162 | (box :orientation "h" 163 | (sysprogress 164 | :css "temp" 165 | :tip "Temperature: ${EWW_TEMPS["ACPITZ_TEMP1"]}°" 166 | :data {EWW_TEMPS["ACPITZ_TEMP1"]} 167 | :icon "󰈸" 168 | ) 169 | (sysprogress 170 | :css "temp" 171 | :tip "Battery ${battery.percent}%" 172 | :data {battery.percent} 173 | :icon "" 174 | ) 175 | ) 176 | )) 177 | 178 | (defwidget quick_user [] (box 179 | :class "user" 180 | :space-evenly false 181 | (box 182 | :class "profile-picture module" 183 | :style "background-image: url('${EWW_CONFIG_DIR}/${profile_picture}')" 184 | (box 185 | :class "darkened" 186 | :orientation "v" 187 | :space-evenly false 188 | (label 189 | :valign "START" 190 | :halign "START" 191 | :text real_name 192 | ) 193 | (label 194 | :vexpand true 195 | :valign "END" 196 | :halign "START" 197 | :text user_name 198 | ) 199 | ) 200 | ) 201 | (box 202 | :class "sysactions module" 203 | :orientation "v" 204 | :space-evenly false 205 | :hexpand true 206 | (box 207 | (button :onclick "${EWW_CONFIG_DIR}/scripts/launcher config" 208 | :class "settings" (label :text "")) 209 | (button :onclick "${EWW_CONFIG_DIR}/scripts/launcher screenlock" 210 | :class "lock" (label :text "")) 211 | (button :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu powermenu" 212 | :class "power" (label :text "")) 213 | ) 214 | (label 215 | :valign "END" 216 | :vexpand true 217 | :class "uptime" 218 | :halign "END" 219 | :text "uptime: ${uptime}" 220 | ) 221 | ) 222 | )) 223 | 224 | (defwidget media_player [player] (box 225 | :class "media module ${player.player}" 226 | :space-evenly false 227 | (box 228 | :class "cover" 229 | :style "background-image: url('${player.cover}');" 230 | :space-evenly false 231 | :hexpand true 232 | (box 233 | :class "darkened" 234 | :orientation "v" 235 | :hexpand true 236 | (box 237 | :orientation "v" 238 | :valign "START" 239 | :class "box" 240 | :space-evenly false 241 | (label 242 | :class "artist" 243 | :text {player.artist} 244 | :halign "START" 245 | :limit-width 42) 246 | (label 247 | :class "title" 248 | :text {player.title} 249 | :halign "START" 250 | :limit-width 42) 251 | ) 252 | (box 253 | :space-evenly false 254 | :orientation "v" 255 | :valign "END" 256 | (eventbox 257 | :visible {player.length > 0} 258 | :class "slider" 259 | :hexpand true 260 | (scale 261 | :value {media_pos[player.player].position} 262 | :min 0 263 | :max {player.length} 264 | :onchange "${EWW_CONFIG_DIR}/scripts/player ${player.player} position {}" 265 | )) 266 | (box 267 | :hexpand true 268 | :space-evenly false 269 | (box 270 | :space-evenly false 271 | (label 272 | :class "icon player" 273 | :valign "CENTER" 274 | :text {player.icon} 275 | ) 276 | (label 277 | :class "box position" 278 | :visible {player.length > 0} 279 | :text "${media_pos[player.player].positionStr} / ${player.lengthStr}" 280 | :halign "START") 281 | ) 282 | (box 283 | :class "controls" 284 | :space-evenly false 285 | :halign "END" 286 | :hexpand true 287 | (button 288 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${player.player} shuffle" 289 | :class "shuffle ${player.shuffle == "true" ? "active" : ""}" 290 | :visible {player.shuffle != "null"} 291 | (label :class "icon" :text "󰒟")) 292 | (button 293 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${player.player} prev" 294 | :class "prev ${player.canPrev ? "" : "inactive"}" 295 | :active {player.canPrev} 296 | (label :class "icon" :text "󰒮")) 297 | (button 298 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${player.player} play-pause" 299 | :class "play-pause" 300 | :active {player.canPlay} 301 | (label :class "icon" :text "${player.status == "Playing" ? "󰏦" : "󰐍"}" )) 302 | (button 303 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${player.player} next" 304 | :class "next ${player.canNext ? "" : "inactive"}" 305 | :active {player.canNext} 306 | (label :class "icon" :text "󰒭")) 307 | (button 308 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${player.player} loop" 309 | :class "loop ${player.loop}" 310 | :visible {player.loop != "null"} 311 | (label :class "icon" :text "ﯩ")) 312 | ) 313 | ) 314 | ) 315 | ) 316 | ) 317 | (box 318 | :class "sidebar" 319 | :visible {player.volume < 0 ? false : true} 320 | :orientation "v" 321 | :space-evenly false 322 | (eventbox 323 | :class "slider" 324 | :vexpand true 325 | (scale 326 | :flipped true 327 | :orientation "v" 328 | :min 0 329 | :max 100 330 | :value {player.volume} 331 | :onchange "${EWW_CONFIG_DIR}/scripts/player ${player.player} volume {}" 332 | ) 333 | ) 334 | ) 335 | )) 336 | 337 | (defwidget quicksettings [] (box 338 | :space-evenly false 339 | (eventbox 340 | :hexpand true 341 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu quicksettings" 342 | ) 343 | (box 344 | :space-evenly false 345 | :orientation "v" 346 | (box 347 | :valign "START" 348 | :halign "END" 349 | :class "quick-settings" 350 | :orientation "v" 351 | :space-evenly false 352 | (quick_user) 353 | (quick_sliders) 354 | (quick_toggles) 355 | (box 356 | (quick_toggles_grid) 357 | (syslevels) 358 | ) 359 | (label :text media_pos :visible false) ;so it is active 360 | (for player in media 361 | (media_player :player player )) 362 | ) 363 | (eventbox 364 | :vexpand true 365 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu quicksettings") 366 | ) 367 | )) 368 | -------------------------------------------------------------------------------- /dot_config/eww/yuck/vars.yuck: -------------------------------------------------------------------------------- 1 | (deflisten window :initial "-" `scripts/window class`) 2 | 3 | (deflisten media_pos :initial "[]" `scripts/media_pos`) 4 | (deflisten media :initial "[]" `scripts/media`) 5 | 6 | (deflisten battery :initial "{}" `scripts/bat`) 7 | 8 | (defpoll network_icon :interval "5s" `scripts/network icon`) 9 | (defpoll network_status :interval "5s" `scripts/network status`) 10 | (defpoll network_state :interval "5s" `scripts/network state`) 11 | (defpoll wifi_ssid :interval "5s" `scripts/network ssid`) 12 | (defpoll wifi_strength :interval "5s" `scripts/network strength`) 13 | (defpoll wifi_icon :interval "5s" `scripts/network wifi_icon`) 14 | 15 | (defpoll volume_icon :interval "3s" `scripts/volume icon`) 16 | (defpoll volume_level :interval "3s" :initial "99" `scripts/volume level`) 17 | (defpoll speaker_type_icon :interval "3s" :initial "󰓃" `scripts/volume type_icon`) 18 | 19 | (defpoll mute_icon :interval "3s" `scripts/volume mute_icon`) 20 | (defpoll mute_state :interval "3s" `scripts/volume mute_state`) 21 | 22 | (defpoll night_light_state :interval "3s" `scripts/night_light state`) 23 | (defpoll night_light_icon :interval "3s" `scripts/night_light icon`) 24 | 25 | (defpoll kbd_icon :interval "3s" `scripts/brightness kbd_icon`) 26 | (defpoll kbd_level :interval "3s" :initial "100" `scripts/brightness kbd_level`) 27 | (defpoll screen_icon :interval "3s" `scripts/brightness screen_icon`) 28 | (defpoll screen_level :interval "3s" :initial "99" `scripts/brightness screen_level`) 29 | 30 | (defpoll bluetooth_state :interval "3s" `scripts/bluetooth state`) 31 | (defpoll bluetooth_icon :interval "3s" `scripts/bluetooth icon`) 32 | (defpoll bluetooth_connected :interval "3s" `scripts/bluetooth connected`) 33 | 34 | (defpoll notification_count :interval "3s" `scripts/notifications count`) 35 | (defpoll dnd_icon :interval "3s" `scripts/notifications icon`) 36 | (defpoll dnd_state :interval "3s" `scripts/notifications state`) 37 | 38 | (defpoll panel_clock :interval "5s" `date "+%H:%M | %b. %d. %A"`) 39 | (defpoll hour :interval "5s" `date "+%H"`) 40 | (defpoll minutes :interval "5s" `date "+%M"`) 41 | (defpoll date :interval "5s" `date "+%b. %d. %A"`) 42 | (defpoll uptime :interval "60s" "uptime | awk '{print $3}' | tr ',' ' '") 43 | 44 | (defpoll events :interval "3s" :initial "[]" `scripts/todo --eww`) 45 | (defpoll weather :interval "3m" :initial "[]" `scripts/weather`) 46 | -------------------------------------------------------------------------------- /dot_config/eww/yuck/windows.yuck: -------------------------------------------------------------------------------- 1 | (defwindow secondarybar 2 | :monitor 0 3 | :exclusive false 4 | :stacking "fg" 5 | :geometry (geometry :width "100%" 6 | :height "1%" 7 | :anchor "top center")(secondarybar)) 8 | 9 | (defwindow bar0 10 | :monitor 0 11 | :exclusive false 12 | :stacking "fg" 13 | :geometry (geometry :width "100%" 14 | :height "3%" 15 | :anchor "top center")(bar)) 16 | 17 | (defwindow osd0 18 | :monitor 0 19 | :stacking "fg" 20 | :geometry (geometry :width "1%" 21 | :height "1%" 22 | :anchor "center right")(osd)) 23 | 24 | (defwindow powermenu0 25 | :monitor 0 26 | :stacking "fg" 27 | :geometry (geometry :width "100%" 28 | :height "100%" 29 | :anchor "center center")(powermenu)) 30 | 31 | (defwindow calendar0 32 | :monitor 0 33 | :stacking "fg" 34 | :geometry (geometry :x "0%" 35 | :y "3%" 36 | :width "100%" 37 | :height "100%" 38 | :anchor "top left")(datemenu)) 39 | 40 | (defwindow quicksettings0 41 | :monitor 0 42 | :stacking "fg" 43 | :geometry (geometry :x "0%" 44 | :y "3%" 45 | :width "100%" 46 | :height "100%" 47 | :anchor "top right")(quicksettings)) 48 | 49 | (defwindow desktop0 50 | :monitor 0 51 | :stacking "bottom" 52 | :geometry (geometry :width "100%" 53 | :height "100%" 54 | :anchor "bottom right")(desktop)) 55 | 56 | 57 | ;;;;;;;;; 58 | ;;;;;;;;; 59 | ;;;;;;;;; 60 | 61 | (defwindow bar1 62 | :monitor 1 63 | :exclusive true 64 | :stacking "fg" 65 | :geometry (geometry :width "100%" 66 | :height "1%" 67 | :anchor "top center")(bar)) 68 | 69 | (defwindow osd1 70 | :monitor 1 71 | :stacking "fg" 72 | :geometry (geometry :width "1%" 73 | :height "1%" 74 | :anchor "center right")(osd)) 75 | 76 | (defwindow powermenu1 77 | :monitor 1 78 | :stacking "fg" 79 | :geometry (geometry :width "100%" 80 | :height "120%" 81 | :anchor "center center")(powermenu)) 82 | 83 | (defwindow calendar1 84 | :monitor 1 85 | :stacking "fg" 86 | :geometry (geometry :width "100%" 87 | :height "100%" 88 | :anchor "top left")(datemenu)) 89 | 90 | (defwindow quicksettings1 91 | :monitor 1 92 | :stacking "fg" 93 | :geometry (geometry :width "100%" 94 | :height "100%" 95 | :anchor "top right")(quicksettings)) 96 | 97 | (defwindow desktop1 98 | :monitor 1 99 | :stacking "bottom" 100 | :geometry (geometry :width "100%" 101 | :height "100%" 102 | :anchor "bottom right")(desktop)) 103 | -------------------------------------------------------------------------------- /dot_config/foot/foot.ini: -------------------------------------------------------------------------------- 1 | # -*- conf -*- 2 | 3 | # shell=$SHELL (if set, otherwise user's default shell from /etc/passwd) 4 | # term=foot (or xterm-256color if built with -Dterminfo=disabled) 5 | # login-shell=no 6 | 7 | # app-id=foot 8 | # title=foot 9 | # locked-title=no 10 | 11 | font=Iosevka Term Nerd Font Medium:size=9 12 | #font-bold=Nerd Font 13 | #font-italic=JetBrains Mono Italic Nerd Font 14 | #font-bold-italic=JetBrains Mono Bold Italic Nerd Font 15 | # font-size-adjustment=0.5 16 | # line-height= 17 | # letter-spacing=0 18 | # horizontal-letter-offset=0 19 | # vertical-letter-offset=0 20 | # underline-offset= 21 | # underline-thickness= 22 | # box-drawings-uses-font-glyphs=no 23 | #dpi-aware=auto 24 | 25 | # initial-window-size-pixels=700x500 # Or, 26 | # initial-window-size-chars= 27 | # initial-window-mode=windowed 28 | pad=15x15 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 | # word-delimiters=,│`|:"'()[]{}<> 35 | # selection-target=primary 36 | # workers= 37 | # utempter=/usr/lib/utempter/utempter 38 | 39 | [environment] 40 | # name=value 41 | 42 | [bell] 43 | # urgent=no 44 | # notify=no 45 | # command= 46 | # command-focused=no 47 | 48 | [scrollback] 49 | # lines=1000 50 | # multiplier=3.0 51 | # indicator-position=relative 52 | # indicator-format="" 53 | 54 | [url] 55 | # launch=xdg-open ${url} 56 | # label-letters=sadfjklewcmpgh 57 | # osc8-underline=url-mode 58 | # protocols=http, https, ftp, ftps, file, gemini, gopher 59 | # uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[] 60 | 61 | [cursor] 62 | style=underline 63 | # color= 64 | blink=yes 65 | beam-thickness=3 66 | # underline-thickness= 67 | 68 | [mouse] 69 | # hide-when-typing=no 70 | # alternate-scroll-mode=yes 71 | 72 | [colors] 73 | foreground=cdd6f4 # Text 74 | background=1e1e2e # Base 75 | 76 | regular0=45475a # Surface 1 77 | regular1=f38ba8 # red 78 | regular2=a6e3a1 # green 79 | regular3=f9e2af # yellow 80 | regular4=89b4fa # blue 81 | regular5=f5c2e7 # pink 82 | regular6=94e2d5 # teal 83 | regular7=bac2de # Subtext 1 84 | 85 | bright0=585b70 # Surface 2 86 | bright1=f38ba8 # red 87 | bright2=a6e3a1 # green 88 | bright3=f9e2af # yellow 89 | bright4=89b4fa # blue 90 | bright5=f5c2e7 # pink 91 | bright6=94e2d5 # teal 92 | bright7=a6adc8 # Subtext 0 93 | 94 | ## dimmed colors (see foot.ini(5) man page) 95 | # dim0= 96 | # ... 97 | # dim7= 98 | 99 | ## The remaining 256-color palette 100 | # 16 = <256-color palette #16> 101 | # ... 102 | # 255 = <256-color palette #255> 103 | 104 | ## Misc colors 105 | # selection-foreground= 106 | # selection-background= 107 | # jump-labels= # black-on-yellow 108 | # scrollback-indicator= # black-on-bright-blue 109 | # search-box-no-match= # black-on-red 110 | # search-box-match= # black-on-yellow 111 | # urls= 112 | 113 | [csd] 114 | # preferred=server 115 | # size=26 116 | # font= 117 | # color= 118 | # hide-when-typing=no 119 | # border-width=0 120 | # border-color= 121 | # button-width=26 122 | # button-color= 123 | # button-minimize-color= 124 | # button-maximize-color= 125 | # button-close-color= 126 | 127 | [key-bindings] 128 | # scrollback-up-page=Shift+Page_Up 129 | # scrollback-up-half-page=none 130 | # scrollback-up-line=none 131 | # scrollback-down-page=Shift+Page_Down 132 | # scrollback-down-half-page=none 133 | # scrollback-down-line=none 134 | # clipboard-copy=Control+Shift+c XF86Copy 135 | # clipboard-paste=Control+Shift+v XF86Paste 136 | # primary-paste=Shift+Insert 137 | # search-start=Control+Shift+r 138 | # font-increase=Control+plus Control+equal Control+KP_Add 139 | # font-decrease=Control+minus Control+KP_Subtract 140 | # font-reset=Control+0 Control+KP_0 141 | # spawn-terminal=Control+Shift+n 142 | # minimize=none 143 | # maximize=none 144 | # fullscreen=none 145 | # pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none 146 | # pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none 147 | # pipe-selected=[xargs -r firefox] none 148 | # show-urls-launch=Control+Shift+u 149 | # show-urls-copy=none 150 | # show-urls-persistent=none 151 | # prompt-prev=Control+Shift+z 152 | # prompt-next=Control+Shift+x 153 | # unicode-input=none 154 | # noop=none 155 | 156 | [search-bindings] 157 | # cancel=Control+g Control+c Escape 158 | # commit=Return 159 | # find-prev=Control+r 160 | # find-next=Control+s 161 | # cursor-left=Left Control+b 162 | # cursor-left-word=Control+Left Mod1+b 163 | # cursor-right=Right Control+f 164 | # cursor-right-word=Control+Right Mod1+f 165 | # cursor-home=Home Control+a 166 | # cursor-end=End Control+e 167 | # delete-prev=BackSpace 168 | # delete-prev-word=Mod1+BackSpace Control+BackSpace 169 | # delete-next=Delete 170 | # delete-next-word=Mod1+d Control+Delete 171 | # extend-to-word-boundary=Control+w 172 | # extend-to-next-whitespace=Control+Shift+w 173 | # clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste 174 | # primary-paste=Shift+Insert 175 | # unicode-input=none 176 | 177 | [url-bindings] 178 | # cancel=Control+g Control+c Control+d Escape 179 | # toggle-url-visible=t 180 | 181 | [text-bindings] 182 | # \x03=Mod4+c # Map Super+c -> Ctrl+c 183 | 184 | [mouse-bindings] 185 | # selection-override-modifiers=Shift 186 | # primary-paste=BTN_MIDDLE 187 | # select-begin=BTN_LEFT 188 | # select-begin-block=Control+BTN_LEFT 189 | # select-extend=BTN_RIGHT 190 | # select-extend-character-wise=Control+BTN_RIGHT 191 | # select-word=BTN_LEFT-2 192 | # select-word-whitespace=Control+BTN_LEFT-2 193 | # select-row=BTN_LEFT-3 194 | 195 | # vim: ft=dosini 196 | 197 | -------------------------------------------------------------------------------- /dot_config/gtk-3.0/bookmarks: -------------------------------------------------------------------------------- 1 | file:///home/demeter/Documents 2 | file:///home/demeter/Music 3 | file:///home/demeter/Pictures 4 | file:///home/demeter/Videos 5 | file:///home/demeter/Downloads 6 | file:///home/demeter/Projects Projects 7 | file:///home/demeter/School School 8 | -------------------------------------------------------------------------------- /dot_config/gtk-3.0/gtk.css: -------------------------------------------------------------------------------- 1 | .background.csd, 2 | headerbar{ border-radius: 0px; } 3 | 4 | .nautilus-window .sidebar { 5 | background-color: @view_bg_color; 6 | } 7 | 8 | .nautilus-window .sidebar:backdrop { 9 | background-color: @window_bg_color; 10 | } 11 | -------------------------------------------------------------------------------- /dot_config/gtk-3.0/settings.ini: -------------------------------------------------------------------------------- 1 | [Settings] 2 | gtk-application-prefer-dark-theme=1 3 | -------------------------------------------------------------------------------- /dot_config/gtk-4.0/gtk.css: -------------------------------------------------------------------------------- 1 | .background.csd{ border-radius: 6px; } 2 | 3 | .nautilus-window .sidebar { 4 | background-color: @view_bg_color; 5 | } 6 | 7 | .nautilus-window .sidebar:backdrop { 8 | background-color: @window_bg_color; 9 | } 10 | -------------------------------------------------------------------------------- /dot_config/gtk-4.0/settings.ini: -------------------------------------------------------------------------------- 1 | [Settings] 2 | gtk-application-prefer-dark-theme=1 3 | -------------------------------------------------------------------------------- /dot_config/gtklock/config.ini: -------------------------------------------------------------------------------- 1 | [main] 2 | gtk-theme=Adwaita-dark 3 | style=.config/gtklock/style.css -------------------------------------------------------------------------------- /dot_config/gtklock/style-dark.css: -------------------------------------------------------------------------------- 1 | * { 2 | all: unset; } 3 | 4 | .background { 5 | background-color: rgba(0, 0, 0, 0.5); } 6 | 7 | #window-box { 8 | box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px rgba(255, 255, 255, 0.02); 9 | border-radius: 12.6px; 10 | margin: 18px; 11 | background-color: #181818; 12 | color: #eee; 13 | padding: 14px; 14 | padding: 50px; } 15 | #window-box #clock-label { 16 | font-size: 6em; 17 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); } 18 | #window-box #unlock-button { 19 | border-radius: 7px; 20 | color: #eee; 21 | background-color: rgba(238, 238, 238, 0.08); 22 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 23 | padding: 6px 12px; } 24 | #window-box #unlock-button:hover { 25 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 26 | background-color: rgba(238, 238, 238, 0.16); 27 | color: #eee; } 28 | #window-box #unlock-button:active { 29 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 30 | background-color: #62a0ea; 31 | color: #181818; } 32 | #window-box #input-field { 33 | border-radius: 7px; 34 | color: #eee; 35 | background-color: rgba(238, 238, 238, 0.08); 36 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 37 | box-shadow: none; 38 | min-height: 32px; 39 | padding-left: 0.4em; 40 | border: 1px solid rgba(255, 255, 255, 0.002); } 41 | #window-box #input-field:hover { 42 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 43 | background-color: rgba(238, 238, 238, 0.16); 44 | color: #eee; } 45 | #window-box #input-field:active { 46 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 47 | background-color: #62a0ea; 48 | color: #181818; } 49 | #window-box #input-field:focus { 50 | border-color: #62a0ea; } 51 | #window-box #warning-label { 52 | color: #f6d32d; } 53 | #window-box #error-label { 54 | color: #f66151; } 55 | -------------------------------------------------------------------------------- /dot_config/gtklock/style-light.css: -------------------------------------------------------------------------------- 1 | * { 2 | all: unset; } 3 | 4 | .background { 5 | background-color: rgba(0, 0, 0, 0.5); } 6 | 7 | #window-box { 8 | box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px rgba(255, 255, 255, 0.02); 9 | border-radius: 12.6px; 10 | margin: 18px; 11 | background-color: #fff; 12 | color: #1f1f1f; 13 | padding: 14px; 14 | padding: 50px; } 15 | #window-box #clock-label { 16 | font-size: 6em; 17 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); } 18 | #window-box #unlock-button { 19 | border-radius: 7px; 20 | color: #1f1f1f; 21 | background-color: rgba(31, 31, 31, 0.08); 22 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 23 | padding: 6px 12px; } 24 | #window-box #unlock-button:hover { 25 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 26 | background-color: rgba(31, 31, 31, 0.16); 27 | color: #1f1f1f; } 28 | #window-box #unlock-button:active { 29 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 30 | background-color: #3584e4; 31 | color: #1f1f1f; } 32 | #window-box #input-field { 33 | border-radius: 7px; 34 | color: #1f1f1f; 35 | background-color: rgba(31, 31, 31, 0.08); 36 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 37 | box-shadow: none; 38 | min-height: 32px; 39 | padding-left: 0.4em; 40 | border: 1px solid rgba(255, 255, 255, 0.002); } 41 | #window-box #input-field:hover { 42 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 43 | background-color: rgba(31, 31, 31, 0.16); 44 | color: #1f1f1f; } 45 | #window-box #input-field:active { 46 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 47 | background-color: #3584e4; 48 | color: #1f1f1f; } 49 | #window-box #input-field:focus { 50 | border-color: #3584e4; } 51 | #window-box #warning-label { 52 | color: #f6d32d; } 53 | #window-box #error-label { 54 | color: #ed333b; } 55 | -------------------------------------------------------------------------------- /dot_config/gtklock/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | all: unset; } 3 | 4 | .background { 5 | background-color: rgba(0, 0, 0, 0.5); } 6 | 7 | #window-box { 8 | box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px rgba(255, 255, 255, 0.02); 9 | border-radius: 12.6px; 10 | margin: 18px; 11 | background-color: #181818; 12 | color: #eee; 13 | padding: 14px; 14 | padding: 50px; } 15 | #window-box #clock-label { 16 | font-size: 6em; 17 | text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5); } 18 | #window-box #unlock-button { 19 | border-radius: 7px; 20 | color: #eee; 21 | background-color: rgba(238, 238, 238, 0.08); 22 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 23 | padding: 6px 12px; } 24 | #window-box #unlock-button:hover { 25 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 26 | background-color: rgba(238, 238, 238, 0.16); 27 | color: #eee; } 28 | #window-box #unlock-button:active { 29 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 30 | background-color: #62a0ea; 31 | color: #181818; } 32 | #window-box #input-field { 33 | border-radius: 7px; 34 | color: #eee; 35 | background-color: rgba(238, 238, 238, 0.08); 36 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 37 | box-shadow: none; 38 | min-height: 32px; 39 | padding-left: 0.4em; 40 | border: 1px solid rgba(255, 255, 255, 0.002); } 41 | #window-box #input-field:hover { 42 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 43 | background-color: rgba(238, 238, 238, 0.16); 44 | color: #eee; } 45 | #window-box #input-field:active { 46 | box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.002); 47 | background-color: #62a0ea; 48 | color: #181818; } 49 | #window-box #input-field:focus { 50 | border-color: #62a0ea; } 51 | #window-box #warning-label { 52 | color: #f6d32d; } 53 | #window-box #error-label { 54 | color: #f66151; } 55 | -------------------------------------------------------------------------------- /dot_config/gtklock/style.scss: -------------------------------------------------------------------------------- 1 | * { all: unset; } 2 | 3 | @import "./../eww/scss/colors.scss"; 4 | @import "./../eww/scss/variables.scss"; 5 | @import "./../eww/scss/common.scss"; 6 | 7 | .background{ background-color: rgba(0,0,0,0.5); } 8 | 9 | #window-box{ 10 | @include floating_widget; 11 | padding: 50px; 12 | #clock-label{ 13 | font-size: 6em; 14 | text-shadow: $text_shadow; 15 | } 16 | #unlock-button{ 17 | @include button; 18 | padding: 6px 12px; 19 | } 20 | #input-field{ 21 | @include button; 22 | box-shadow: none; 23 | min-height: 32px; 24 | padding-left: 0.4em; 25 | border: $border; 26 | &:focus{ border-color: $accent; } 27 | } 28 | #warning-label{ color: $yellow; } 29 | #error-label{ color: $red; } 30 | } -------------------------------------------------------------------------------- /dot_config/hypr/hyprland.conf: -------------------------------------------------------------------------------- 1 | # Shoutouts to simpleflips 2 | # Please note not all available settings / options are set here. 3 | # For a full list, see the wiki 4 | 5 | 6 | #startup 7 | exec-once = ~/.local/bin/wallpaper_kurz 8 | exec-once = .config/eww/scripts/init 9 | exec-once = deadd-notification-center 10 | 11 | monitor=,prefered,auto,1 12 | #reserving space so waybar workspaces overlaps eww bar 13 | #replace "eDP-1" with your monitor. execute: hyprctl monitors 14 | monitor = eDP-1, addreserved, 40, 0, 0, 0 15 | 16 | 17 | 18 | #Fixes Neovide not tiling after WINIT export for neovide to work (see hlwrapped in bin) 19 | windowrulev2 = tile,class:^(neovide)$ 20 | 21 | #windowrules dont let you stack multiple rules so heres this mess just for notifications 22 | windowrulev2 = pin,class:^(deadd-notification-center)$ 23 | windowrulev2 = rounding 0,class:^(deadd-notification-center)$ 24 | windowrulev2 = nofocus,class:^(deadd-notification-center)$ 25 | windowrulev2 = move 73.5% 4%,class:^(deadd-notification-center)$ 26 | 27 | #windows opened from quicksettings should float 28 | windowrulev2 = float,class:^(blueberry.py) 29 | windowrulev2 = float,class:^(QjackCtl) 30 | 31 | # For all categories, see https://wiki.hyprland.org/Configuring/Variables/ 32 | input { 33 | kb_layout = us 34 | kb_variant = 35 | kb_model = 36 | kb_options = 37 | kb_rules = 38 | 39 | follow_mouse = 1 40 | 41 | touchpad { 42 | natural_scroll = no 43 | } 44 | 45 | sensitivity = 0 # -1.0 - 1.0, 0 means no modification. 46 | 47 | touchpad { 48 | natural_scroll = true 49 | 50 | } 51 | } 52 | 53 | general { 54 | # See https://wiki.hyprland.org/Configuring/Variables/ for more 55 | 56 | gaps_in = 5 57 | gaps_out = 10 58 | border_size = 2 59 | col.active_border = rgb(8aadf4) rgb(24273A) rgb(24273A) rgb(8aadf4) 45deg 60 | col.inactive_border = rgb(24273A) rgb(24273A) rgb(24273A) rgb(27273A) 45deg 61 | layout = dwindle 62 | } 63 | 64 | decoration { 65 | # See https://wiki.hyprland.org/Configuring/Variables/ for more 66 | 67 | rounding = 10 68 | blur = yes 69 | blur_size = 5 70 | blur_passes = 1 71 | blur_new_optimizations = on 72 | 73 | drop_shadow = yes 74 | shadow_range = 4 75 | shadow_render_power = 3 76 | col.shadow = rgba(1a1a1aee) 77 | active_opacity = 1 78 | inactive_opacity = 1 79 | dim_inactive = false 80 | dim_strength = 0.4 81 | } 82 | 83 | animations { 84 | enabled = yes 85 | 86 | # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more 87 | 88 | bezier=overshot,0.05,0.9,0.1,1.05 89 | bezier=exit,0.9,-.2,0.95,0.05 90 | 91 | animation = windows, 1, 5, overshot, slide 92 | animation = windowsOut, 1, 5, exit, slide 93 | animation = border, 1, 10, default 94 | animation = borderangle, 1, 8, default 95 | animation = fade, 1, 12, default 96 | animation = workspaces, 1, 6, default 97 | } 98 | 99 | dwindle {1, 0.02, 0.48, 0.4 100 | # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more 101 | pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below 102 | preserve_split = yes # you probably want this 103 | } 104 | 105 | master { 106 | # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more 107 | new_is_master = true 108 | } 109 | 110 | gestures { 111 | # See https://wiki.hyprland.org/Configuring/Variables/ for more 112 | # Laptop three finger gesture 113 | workspace_swipe = on 114 | workspace_swipe_distance = 500 115 | workspace_swipe_min_speed_to_force = 100 116 | workspace_swipe_cancel_ratio = 0.1 117 | 118 | } 119 | 120 | # Example per-device config 121 | # See https://wiki.hyprland.org/Configuring/Keywords/#executing for more 122 | device:epic mouse V1 { 123 | sensitivity = -0.5 124 | } 125 | 126 | # Example windowrule v1 127 | # windowrule = float, ^(kitty)$ 128 | # Example windowrule v2 129 | # windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ 130 | # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more 131 | 132 | 133 | # See https://wiki.hyprland.org/Configuring/Keywords/ for more 134 | $mainMod = SUPER 135 | 136 | # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more 137 | bind = $mainMod, Return, exec, foot 138 | bind = $mainMod, Q, killactive, 139 | bind = $mainMod, M, exit, 140 | bind = $mainMod, S, exec, hyprshot -m region 141 | bind = $mainMod, V, togglefloating, 142 | bind = $mainMod, R, exec, tofi-drun --drun-launch=true 143 | bind = $mainMod, P, pseudo, # dwindle 144 | bind = $mainMod, J, togglesplit, # dwindle 145 | bind = $mainMod, h, exec, hyprpicker -a 146 | bind = $mainMod, f, fullscreen 147 | 148 | # Move focus with mainMod + arrow keys 149 | bind = $mainMod, left, movefocus, l 150 | bind = $mainMod, right, movefocus, r 151 | bind = $mainMod, up, movefocus, u 152 | bind = $mainMod, down, movefocus, d 153 | 154 | # Switch workspaces with mainMod + [0-9] 155 | bind = $mainMod, 1, workspace, 1 156 | bind = $mainMod, 2, workspace, 2 157 | bind = $mainMod, 3, workspace, 3 158 | bind = $mainMod, 4, workspace, 4 159 | bind = $mainMod, 5, workspace, 5 160 | bind = $mainMod, 6, workspace, 6 161 | bind = $mainMod, 7, workspace, 7 162 | bind = $mainMod, 8, workspace, 8 163 | bind = $mainMod, 9, workspace, 9 164 | bind = $mainMod, 0, workspace, 10 165 | 166 | # Move active window to a workspace with mainMod + SHIFT + [0-9] 167 | bind = $mainMod SHIFT, 1, movetoworkspace, 1 168 | bind = $mainMod SHIFT, 2, movetoworkspace, 2 169 | bind = $mainMod SHIFT, 3, movetoworkspace, 3 170 | bind = $mainMod SHIFT, 4, movetoworkspace, 4 171 | bind = $mainMod SHIFT, 5, movetoworkspace, 5 172 | bind = $mainMod SHIFT, 6, movetoworkspace, 6 173 | bind = $mainMod SHIFT, 7, movetoworkspace, 7 174 | bind = $mainMod SHIFT, 8, movetoworkspace, 8 175 | bind = $mainMod SHIFT, 9, movetoworkspace, 9 176 | bind = $mainMod SHIFT, 0, movetoworkspace, 10 177 | 178 | # Scroll through existing workspaces with arrow keys 179 | bind = $mainMod, right, workspace, e+1 180 | bind = $mainMod, left, workspace, e-1 181 | 182 | # Move/resize windows with mainMod + LMB/RMB and dragging 183 | bindm = $mainMod, mouse:272, movewindow 184 | bindm = $mainMod, mouse:273, resizewindow 185 | -------------------------------------------------------------------------------- /dot_config/neofetch/config.conf: -------------------------------------------------------------------------------- 1 | # See this wiki page for more info: 2 | # https://github.com/dylanaraps/neofetch/wiki/Customizing-Info 3 | print_info() { 4 | info title 5 | info underline 6 | 7 | info "OS" distro 8 | info "Host" model 9 | info "Kernel" kernel 10 | info "Uptime" uptime 11 | info "Packages" packages 12 | #info "Shell" shell 13 | info "Resolution" resolution 14 | info "DE" de 15 | info "WM" wm 16 | #info "WM Theme" wm_theme 17 | #info "Theme" theme 18 | #info "Icons" icons 19 | info "Terminal" term 20 | #info "Terminal Font" term_font 21 | info "CPU" cpu 22 | info "GPU" gpu 23 | info "Memory" memory 24 | 25 | # info "GPU Driver" gpu_driver # Linux/macOS only 26 | # info "CPU Usage" cpu_usage 27 | # info "Disk" disk 28 | # info "Battery" battery 29 | # info "Font" font 30 | # info "Song" song 31 | # [[ "$player" ]] && prin "Music Player" "$player" 32 | # info "Local IP" local_ip 33 | # info "Public IP" public_ip 34 | # info "Users" users 35 | # info "Locale" locale # This only works on glibc systems. 36 | 37 | info cols 38 | } 39 | 40 | # Title 41 | 42 | 43 | # Hide/Show Fully qualified domain name. 44 | # 45 | # Default: 'off' 46 | # Values: 'on', 'off' 47 | # Flag: --title_fqdn 48 | title_fqdn="off" 49 | 50 | 51 | # Kernel 52 | 53 | 54 | # Shorten the output of the kernel function. 55 | # 56 | # Default: 'on' 57 | # Values: 'on', 'off' 58 | # Flag: --kernel_shorthand 59 | # Supports: Everything except *BSDs (except PacBSD and PC-BSD) 60 | # 61 | # Example: 62 | # on: '4.8.9-1-ARCH' 63 | # off: 'Linux 4.8.9-1-ARCH' 64 | kernel_shorthand="on" 65 | 66 | 67 | # Distro 68 | 69 | 70 | # Shorten the output of the distro function 71 | # 72 | # Default: 'off' 73 | # Values: 'on', 'tiny', 'off' 74 | # Flag: --distro_shorthand 75 | # Supports: Everything except Windows and Haiku 76 | distro_shorthand="off" 77 | 78 | # Show/Hide OS Architecture. 79 | # Show 'x86_64', 'x86' and etc in 'Distro:' output. 80 | # 81 | # Default: 'on' 82 | # Values: 'on', 'off' 83 | # Flag: --os_arch 84 | # 85 | # Example: 86 | # on: 'Arch Linux x86_64' 87 | # off: 'Arch Linux' 88 | os_arch="on" 89 | 90 | 91 | # Uptime 92 | 93 | 94 | # Shorten the output of the uptime function 95 | # 96 | # Default: 'on' 97 | # Values: 'on', 'tiny', 'off' 98 | # Flag: --uptime_shorthand 99 | # 100 | # Example: 101 | # on: '2 days, 10 hours, 3 mins' 102 | # tiny: '2d 10h 3m' 103 | # off: '2 days, 10 hours, 3 minutes' 104 | uptime_shorthand="on" 105 | 106 | 107 | # Memory 108 | 109 | 110 | # Show memory pecentage in output. 111 | # 112 | # Default: 'off' 113 | # Values: 'on', 'off' 114 | # Flag: --memory_percent 115 | # 116 | # Example: 117 | # on: '1801MiB / 7881MiB (22%)' 118 | # off: '1801MiB / 7881MiB' 119 | memory_percent="off" 120 | 121 | # Change memory output unit. 122 | # 123 | # Default: 'mib' 124 | # Values: 'kib', 'mib', 'gib' 125 | # Flag: --memory_unit 126 | # 127 | # Example: 128 | # kib '1020928KiB / 7117824KiB' 129 | # mib '1042MiB / 6951MiB' 130 | # gib: ' 0.98GiB / 6.79GiB' 131 | memory_unit="mib" 132 | 133 | 134 | # Packages 135 | 136 | 137 | # Show/Hide Package Manager names. 138 | # 139 | # Default: 'tiny' 140 | # Values: 'on', 'tiny' 'off' 141 | # Flag: --package_managers 142 | # 143 | # Example: 144 | # on: '998 (pacman), 8 (flatpak), 4 (snap)' 145 | # tiny: '908 (pacman, flatpak, snap)' 146 | # off: '908' 147 | package_managers="on" 148 | 149 | 150 | # Shell 151 | 152 | 153 | # Show the path to $SHELL 154 | # 155 | # Default: 'off' 156 | # Values: 'on', 'off' 157 | # Flag: --shell_path 158 | # 159 | # Example: 160 | # on: '/bin/bash' 161 | # off: 'bash' 162 | shell_path="off" 163 | 164 | # Show $SHELL version 165 | # 166 | # Default: 'on' 167 | # Values: 'on', 'off' 168 | # Flag: --shell_version 169 | # 170 | # Example: 171 | # on: 'bash 4.4.5' 172 | # off: 'bash' 173 | shell_version="on" 174 | 175 | 176 | # CPU 177 | 178 | 179 | # CPU speed type 180 | # 181 | # Default: 'bios_limit' 182 | # Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'. 183 | # Flag: --speed_type 184 | # Supports: Linux with 'cpufreq' 185 | # NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value. 186 | speed_type="bios_limit" 187 | 188 | # CPU speed shorthand 189 | # 190 | # Default: 'off' 191 | # Values: 'on', 'off'. 192 | # Flag: --speed_shorthand 193 | # NOTE: This flag is not supported in systems with CPU speed less than 1 GHz 194 | # 195 | # Example: 196 | # on: 'i7-6500U (4) @ 3.1GHz' 197 | # off: 'i7-6500U (4) @ 3.100GHz' 198 | speed_shorthand="off" 199 | 200 | # Enable/Disable CPU brand in output. 201 | # 202 | # Default: 'on' 203 | # Values: 'on', 'off' 204 | # Flag: --cpu_brand 205 | # 206 | # Example: 207 | # on: 'Intel i7-6500U' 208 | # off: 'i7-6500U (4)' 209 | cpu_brand="on" 210 | 211 | # CPU Speed 212 | # Hide/Show CPU speed. 213 | # 214 | # Default: 'on' 215 | # Values: 'on', 'off' 216 | # Flag: --cpu_speed 217 | # 218 | # Example: 219 | # on: 'Intel i7-6500U (4) @ 3.1GHz' 220 | # off: 'Intel i7-6500U (4)' 221 | cpu_speed="on" 222 | 223 | # CPU Cores 224 | # Display CPU cores in output 225 | # 226 | # Default: 'logical' 227 | # Values: 'logical', 'physical', 'off' 228 | # Flag: --cpu_cores 229 | # Support: 'physical' doesn't work on BSD. 230 | # 231 | # Example: 232 | # logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores) 233 | # physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores) 234 | # off: 'Intel i7-6500U @ 3.1GHz' 235 | cpu_cores="logical" 236 | 237 | # CPU Temperature 238 | # Hide/Show CPU temperature. 239 | # Note the temperature is added to the regular CPU function. 240 | # 241 | # Default: 'off' 242 | # Values: 'C', 'F', 'off' 243 | # Flag: --cpu_temp 244 | # Supports: Linux, BSD 245 | # NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable 246 | # coretemp kernel module. This only supports newer Intel processors. 247 | # 248 | # Example: 249 | # C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]' 250 | # F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]' 251 | # off: 'Intel i7-6500U (4) @ 3.1GHz' 252 | cpu_temp="off" 253 | 254 | 255 | # GPU 256 | 257 | 258 | # Enable/Disable GPU Brand 259 | # 260 | # Default: 'on' 261 | # Values: 'on', 'off' 262 | # Flag: --gpu_brand 263 | # 264 | # Example: 265 | # on: 'AMD HD 7950' 266 | # off: 'HD 7950' 267 | gpu_brand="on" 268 | 269 | # Which GPU to display 270 | # 271 | # Default: 'all' 272 | # Values: 'all', 'dedicated', 'integrated' 273 | # Flag: --gpu_type 274 | # Supports: Linux 275 | # 276 | # Example: 277 | # all: 278 | # GPU1: AMD HD 7950 279 | # GPU2: Intel Integrated Graphics 280 | # 281 | # dedicated: 282 | # GPU1: AMD HD 7950 283 | # 284 | # integrated: 285 | # GPU1: Intel Integrated Graphics 286 | gpu_type="all" 287 | 288 | 289 | # Resolution 290 | 291 | 292 | # Display refresh rate next to each monitor 293 | # Default: 'off' 294 | # Values: 'on', 'off' 295 | # Flag: --refresh_rate 296 | # Supports: Doesn't work on Windows. 297 | # 298 | # Example: 299 | # on: '1920x1080 @ 60Hz' 300 | # off: '1920x1080' 301 | refresh_rate="off" 302 | 303 | 304 | # Gtk Theme / Icons / Font 305 | 306 | 307 | # Shorten output of GTK Theme / Icons / Font 308 | # 309 | # Default: 'off' 310 | # Values: 'on', 'off' 311 | # Flag: --gtk_shorthand 312 | # 313 | # Example: 314 | # on: 'Numix, Adwaita' 315 | # off: 'Numix [GTK2], Adwaita [GTK3]' 316 | gtk_shorthand="off" 317 | 318 | 319 | # Enable/Disable gtk2 Theme / Icons / Font 320 | # 321 | # Default: 'on' 322 | # Values: 'on', 'off' 323 | # Flag: --gtk2 324 | # 325 | # Example: 326 | # on: 'Numix [GTK2], Adwaita [GTK3]' 327 | # off: 'Adwaita [GTK3]' 328 | gtk2="on" 329 | 330 | # Enable/Disable gtk3 Theme / Icons / Font 331 | # 332 | # Default: 'on' 333 | # Values: 'on', 'off' 334 | # Flag: --gtk3 335 | # 336 | # Example: 337 | # on: 'Numix [GTK2], Adwaita [GTK3]' 338 | # off: 'Numix [GTK2]' 339 | gtk3="on" 340 | 341 | 342 | # IP Address 343 | 344 | 345 | # Website to ping for the public IP 346 | # 347 | # Default: 'http://ident.me' 348 | # Values: 'url' 349 | # Flag: --ip_host 350 | public_ip_host="http://ident.me" 351 | 352 | # Public IP timeout. 353 | # 354 | # Default: '2' 355 | # Values: 'int' 356 | # Flag: --ip_timeout 357 | public_ip_timeout=2 358 | 359 | 360 | # Desktop Environment 361 | 362 | 363 | # Show Desktop Environment version 364 | # 365 | # Default: 'on' 366 | # Values: 'on', 'off' 367 | # Flag: --de_version 368 | de_version="on" 369 | 370 | 371 | # Disk 372 | 373 | 374 | # Which disks to display. 375 | # The values can be any /dev/sdXX, mount point or directory. 376 | # NOTE: By default we only show the disk info for '/'. 377 | # 378 | # Default: '/' 379 | # Values: '/', '/dev/sdXX', '/path/to/drive'. 380 | # Flag: --disk_show 381 | # 382 | # Example: 383 | # disk_show=('/' '/dev/sdb1'): 384 | # 'Disk (/): 74G / 118G (66%)' 385 | # 'Disk (/mnt/Videos): 823G / 893G (93%)' 386 | # 387 | # disk_show=('/'): 388 | # 'Disk (/): 74G / 118G (66%)' 389 | # 390 | disk_show=('/') 391 | 392 | # Disk subtitle. 393 | # What to append to the Disk subtitle. 394 | # 395 | # Default: 'mount' 396 | # Values: 'mount', 'name', 'dir', 'none' 397 | # Flag: --disk_subtitle 398 | # 399 | # Example: 400 | # name: 'Disk (/dev/sda1): 74G / 118G (66%)' 401 | # 'Disk (/dev/sdb2): 74G / 118G (66%)' 402 | # 403 | # mount: 'Disk (/): 74G / 118G (66%)' 404 | # 'Disk (/mnt/Local Disk): 74G / 118G (66%)' 405 | # 'Disk (/mnt/Videos): 74G / 118G (66%)' 406 | # 407 | # dir: 'Disk (/): 74G / 118G (66%)' 408 | # 'Disk (Local Disk): 74G / 118G (66%)' 409 | # 'Disk (Videos): 74G / 118G (66%)' 410 | # 411 | # none: 'Disk: 74G / 118G (66%)' 412 | # 'Disk: 74G / 118G (66%)' 413 | # 'Disk: 74G / 118G (66%)' 414 | disk_subtitle="mount" 415 | 416 | # Disk percent. 417 | # Show/Hide disk percent. 418 | # 419 | # Default: 'on' 420 | # Values: 'on', 'off' 421 | # Flag: --disk_percent 422 | # 423 | # Example: 424 | # on: 'Disk (/): 74G / 118G (66%)' 425 | # off: 'Disk (/): 74G / 118G' 426 | disk_percent="on" 427 | 428 | 429 | # Song 430 | 431 | 432 | # Manually specify a music player. 433 | # 434 | # Default: 'auto' 435 | # Values: 'auto', 'player-name' 436 | # Flag: --music_player 437 | # 438 | # Available values for 'player-name': 439 | # 440 | # amarok 441 | # audacious 442 | # banshee 443 | # bluemindo 444 | # clementine 445 | # cmus 446 | # deadbeef 447 | # deepin-music 448 | # dragon 449 | # elisa 450 | # exaile 451 | # gnome-music 452 | # gmusicbrowser 453 | # gogglesmm 454 | # guayadeque 455 | # io.elementary.music 456 | # iTunes 457 | # juk 458 | # lollypop 459 | # mocp 460 | # mopidy 461 | # mpd 462 | # muine 463 | # netease-cloud-music 464 | # olivia 465 | # playerctl 466 | # pogo 467 | # pragha 468 | # qmmp 469 | # quodlibet 470 | # rhythmbox 471 | # sayonara 472 | # smplayer 473 | # spotify 474 | # strawberry 475 | # tauonmb 476 | # tomahawk 477 | # vlc 478 | # xmms2d 479 | # xnoise 480 | # yarock 481 | music_player="auto" 482 | 483 | # Format to display song information. 484 | # 485 | # Default: '%artist% - %album% - %title%' 486 | # Values: '%artist%', '%album%', '%title%' 487 | # Flag: --song_format 488 | # 489 | # Example: 490 | # default: 'Song: Jet - Get Born - Sgt Major' 491 | song_format="%artist% - %album% - %title%" 492 | 493 | # Print the Artist, Album and Title on separate lines 494 | # 495 | # Default: 'off' 496 | # Values: 'on', 'off' 497 | # Flag: --song_shorthand 498 | # 499 | # Example: 500 | # on: 'Artist: The Fratellis' 501 | # 'Album: Costello Music' 502 | # 'Song: Chelsea Dagger' 503 | # 504 | # off: 'Song: The Fratellis - Costello Music - Chelsea Dagger' 505 | song_shorthand="off" 506 | 507 | # 'mpc' arguments (specify a host, password etc). 508 | # 509 | # Default: '' 510 | # Example: mpc_args=(-h HOST -P PASSWORD) 511 | mpc_args=() 512 | 513 | 514 | # Text Colors 515 | 516 | 517 | # Text Colors 518 | # 519 | # Default: 'distro' 520 | # Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' 521 | # Flag: --colors 522 | # 523 | # Each number represents a different part of the text in 524 | # this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info' 525 | # 526 | # Example: 527 | # colors=(distro) - Text is colored based on Distro colors. 528 | # colors=(4 6 1 8 8 6) - Text is colored in the order above. 529 | colors=(distro) 530 | 531 | 532 | # Text Options 533 | 534 | 535 | # Toggle bold text 536 | # 537 | # Default: 'on' 538 | # Values: 'on', 'off' 539 | # Flag: --bold 540 | bold="on" 541 | 542 | # Enable/Disable Underline 543 | # 544 | # Default: 'on' 545 | # Values: 'on', 'off' 546 | # Flag: --underline 547 | underline_enabled="on" 548 | 549 | # Underline character 550 | # 551 | # Default: '-' 552 | # Values: 'string' 553 | # Flag: --underline_char 554 | underline_char="-" 555 | 556 | 557 | # Info Separator 558 | # Replace the default separator with the specified string. 559 | # 560 | # Default: ':' 561 | # Flag: --separator 562 | # 563 | # Example: 564 | # separator="->": 'Shell-> bash' 565 | # separator=" =": 'WM = dwm' 566 | separator=":" 567 | 568 | 569 | # Color Blocks 570 | 571 | 572 | # Color block range 573 | # The range of colors to print. 574 | # 575 | # Default: '0', '15' 576 | # Values: 'num' 577 | # Flag: --block_range 578 | # 579 | # Example: 580 | # 581 | # Display colors 0-7 in the blocks. (8 colors) 582 | # neofetch --block_range 0 7 583 | # 584 | # Display colors 0-15 in the blocks. (16 colors) 585 | # neofetch --block_range 0 15 586 | block_range=(0 15) 587 | 588 | # Toggle color blocks 589 | # 590 | # Default: 'on' 591 | # Values: 'on', 'off' 592 | # Flag: --color_blocks 593 | color_blocks="on" 594 | 595 | # Color block width in spaces 596 | # 597 | # Default: '3' 598 | # Values: 'num' 599 | # Flag: --block_width 600 | block_width=3 601 | 602 | # Color block height in lines 603 | # 604 | # Default: '1' 605 | # Values: 'num' 606 | # Flag: --block_height 607 | block_height=1 608 | 609 | # Color Alignment 610 | # 611 | # Default: 'auto' 612 | # Values: 'auto', 'num' 613 | # Flag: --col_offset 614 | # 615 | # Number specifies how far from the left side of the terminal (in spaces) to 616 | # begin printing the columns, in case you want to e.g. center them under your 617 | # text. 618 | # Example: 619 | # col_offset="auto" - Default behavior of neofetch 620 | # col_offset=7 - Leave 7 spaces then print the colors 621 | col_offset="auto" 622 | 623 | # Progress Bars 624 | 625 | 626 | # Bar characters 627 | # 628 | # Default: '-', '=' 629 | # Values: 'string', 'string' 630 | # Flag: --bar_char 631 | # 632 | # Example: 633 | # neofetch --bar_char 'elapsed' 'total' 634 | # neofetch --bar_char '-' '=' 635 | bar_char_elapsed="-" 636 | bar_char_total="=" 637 | 638 | # Toggle Bar border 639 | # 640 | # Default: 'on' 641 | # Values: 'on', 'off' 642 | # Flag: --bar_border 643 | bar_border="on" 644 | 645 | # Progress bar length in spaces 646 | # Number of chars long to make the progress bars. 647 | # 648 | # Default: '15' 649 | # Values: 'num' 650 | # Flag: --bar_length 651 | bar_length=15 652 | 653 | # Progress bar colors 654 | # When set to distro, uses your distro's logo colors. 655 | # 656 | # Default: 'distro', 'distro' 657 | # Values: 'distro', 'num' 658 | # Flag: --bar_colors 659 | # 660 | # Example: 661 | # neofetch --bar_colors 3 4 662 | # neofetch --bar_colors distro 5 663 | bar_color_elapsed="distro" 664 | bar_color_total="distro" 665 | 666 | 667 | # Info display 668 | # Display a bar with the info. 669 | # 670 | # Default: 'off' 671 | # Values: 'bar', 'infobar', 'barinfo', 'off' 672 | # Flags: --cpu_display 673 | # --memory_display 674 | # --battery_display 675 | # --disk_display 676 | # 677 | # Example: 678 | # bar: '[---=======]' 679 | # infobar: 'info [---=======]' 680 | # barinfo: '[---=======] info' 681 | # off: 'info' 682 | cpu_display="off" 683 | memory_display="off" 684 | battery_display="off" 685 | disk_display="off" 686 | 687 | 688 | # Backend Settings 689 | 690 | 691 | # Image backend. 692 | # 693 | # Default: 'ascii' 694 | # Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off', 695 | # 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty' 696 | # Flag: --backend 697 | image_backend="ascii" 698 | 699 | # Image Source 700 | # 701 | # Which image or ascii file to display. 702 | # 703 | # Default: 'auto' 704 | # Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/' 705 | # 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")' 706 | # Flag: --source 707 | # 708 | # NOTE: 'auto' will pick the best image source for whatever image backend is used. 709 | # In ascii mode, distro ascii art will be used and in an image mode, your 710 | # wallpaper will be used. 711 | image_source="auto" 712 | 713 | 714 | 715 | # Ascii Options 716 | 717 | 718 | # Ascii distro 719 | # Which distro's ascii art to display. 720 | # 721 | # Default: 'auto' 722 | # Values: 'auto', 'distro_name' 723 | # Flag: --ascii_distro 724 | # NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, "AOSC OS", 725 | # "AOSC OS/Retro", Apricity, ArcoLinux, ArchBox, ARCHlabs, 726 | # ArchStrike, XFerience, ArchMerge, Arch, Artix, Arya, Bedrock, 727 | # Bitrig, BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD, 728 | # BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS, 729 | # Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover, 730 | # Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin, 731 | # DesaOS, Devuan, DracOS, DarkOs, DragonFly, Drauger, Elementary, 732 | # EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD, 733 | # FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo, 734 | # gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra, 735 | # Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion, 736 | # Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite, 737 | # LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva, 738 | # Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib, 739 | # Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner, 740 | # NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, openmamba, 741 | # OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, OS Elbrus, PacBSD, 742 | # Parabola, Pardus, Parrot, Parsix, TrueOS, PCLinuxOS, Peppermint, 743 | # popos, Porteus, PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix, 744 | # Raspbian, Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan, 745 | # Regata, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific, 746 | # Septor, SereneLinux, SharkLinux, Siduction, Slackware, SliTaz, 747 | # SmartOS, Solus, Source_Mage, Sparky, Star, SteamOS, SunOS, 748 | # openSUSE_Leap, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails, 749 | # Trisquel, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio, 750 | # Ubuntu, Venom, Void, Obarun, windows10, Windows7, Xubuntu, Zorin, 751 | # and IRIX have ascii logos 752 | # NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants. 753 | # Use '{distro name}_old' to use the old logos. 754 | # NOTE: Ubuntu has flavor variants. 755 | # Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME, 756 | # Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors. 757 | # NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu, 758 | # CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android, 759 | # Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola, 760 | # Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS, 761 | # Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian, 762 | # postmarketOS, and Void have a smaller logo variant. 763 | # Use '{distro name}_small' to use the small variants. 764 | ascii_distro="auto" 765 | 766 | # Ascii Colors 767 | # 768 | # Default: 'distro' 769 | # Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' 770 | # Flag: --ascii_colors 771 | # 772 | # Example: 773 | # ascii_colors=(distro) - Ascii is colored based on Distro colors. 774 | # ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors. 775 | ascii_colors=(4 4) 776 | 777 | # Bold ascii logo 778 | # Whether or not to bold the ascii logo. 779 | # 780 | # Default: 'on' 781 | # Values: 'on', 'off' 782 | # Flag: --ascii_bold 783 | ascii_bold="on" 784 | 785 | 786 | # Image Options 787 | 788 | 789 | # Image loop 790 | # Setting this to on will make neofetch redraw the image constantly until 791 | # Ctrl+C is pressed. This fixes display issues in some terminal emulators. 792 | # 793 | # Default: 'off' 794 | # Values: 'on', 'off' 795 | # Flag: --loop 796 | image_loop="off" 797 | 798 | # Thumbnail directory 799 | # 800 | # Default: '~/.cache/thumbnails/neofetch' 801 | # Values: 'dir' 802 | thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch" 803 | 804 | # Crop mode 805 | # 806 | # Default: 'normal' 807 | # Values: 'normal', 'fit', 'fill' 808 | # Flag: --crop_mode 809 | # 810 | # See this wiki page to learn about the fit and fill options. 811 | # https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F 812 | crop_mode="normal" 813 | 814 | # Crop offset 815 | # Note: Only affects 'normal' crop mode. 816 | # 817 | # Default: 'center' 818 | # Values: 'northwest', 'north', 'northeast', 'west', 'center' 819 | # 'east', 'southwest', 'south', 'southeast' 820 | # Flag: --crop_offset 821 | crop_offset="center" 822 | 823 | # Image size 824 | # The image is half the terminal width by default. 825 | # 826 | # Default: 'auto' 827 | # Values: 'auto', '00px', '00%', 'none' 828 | # Flags: --image_size 829 | # --size 830 | image_size="100px" 831 | 832 | # Gap between image and text 833 | # 834 | # Default: '3' 835 | # Values: 'num', '-num' 836 | # Flag: --gap 837 | gap=3 838 | 839 | # Image offsets 840 | # Only works with the w3m backend. 841 | # 842 | # Default: '0' 843 | # Values: 'px' 844 | # Flags: --xoffset 845 | # --yoffset 846 | yoffset=0 847 | xoffset=0 848 | 849 | # Image background color 850 | # Only works with the w3m backend. 851 | # 852 | # Default: '' 853 | # Values: 'color', 'blue' 854 | # Flag: --bg_color 855 | background_color= 856 | 857 | 858 | # Misc Options 859 | 860 | # Stdout mode 861 | # Turn off all colors and disables image backend (ASCII/Image). 862 | # Useful for piping into another command. 863 | # Default: 'off' 864 | # Values: 'on', 'off' 865 | stdout="off" 866 | -------------------------------------------------------------------------------- /dot_config/tofi/config: -------------------------------------------------------------------------------- 1 | width = 100% 2 | height = 100% 3 | border-width = 0 4 | outline-width = 0 5 | padding-left = 35% 6 | padding-top = 35% 7 | result-spacing = 25 8 | num-results = 5 9 | font = ".local/share/fonts/JetBrains Mono SemiBold Nerd Font Complete.ttf" 10 | background-color = #000A 11 | selection-color = #62A0EA 12 | 13 | -------------------------------------------------------------------------------- /dot_config/tofi/config.defaults: -------------------------------------------------------------------------------- 1 | # Default config for tofi 2 | # 3 | # Copy this file to ~/.config/tofi/config and get customising! 4 | # 5 | # A complete reference of available options can be found in `man 5 tofi`. 6 | 7 | # 8 | ### Fonts 9 | # 10 | # Font to use, either a path to a font file or a name. 11 | # 12 | # If a path is given, tofi will startup much quicker, but any 13 | # characters not in the chosen font will fail to render. 14 | # 15 | # Otherwise, fonts are interpreted in Pango format. 16 | font = "/home/leo/.local/share/fonts/JetBrains Mono SemiBold Nerd Font Complete.ttf" 17 | 18 | # Point size of text. 19 | font-size = 12 20 | 21 | # Comma separated list of OpenType font feature settings to apply, 22 | # if supported by the chosen font. The format is similar to the CSS 23 | # "font-feature-settings" property. 24 | # 25 | # Examples: 26 | # 27 | # font-features = "smcp, c2sc" (all small caps) 28 | # font-features = "liga 0" (disable ligatures) 29 | font-features = "" 30 | 31 | # Comma separated list of OpenType font variation settings to apply 32 | # to variable fonts. The format is similar to the CSS 33 | # "font-variation-settings" property. 34 | # 35 | # Examples: 36 | # 37 | # font-variations = "wght 900" (Extra bold) 38 | # font-variations = "wdth 25, slnt -10" (Narrow and slanted) 39 | font-variations = "" 40 | 41 | # Perform font hinting. Only applies when a path to a font has been 42 | # specified via `font`. Disabling font hinting speeds up text 43 | # rendering appreciably, but will likely look poor at small font pixel 44 | # sizes. 45 | hint-font = true 46 | 47 | # 48 | ### Text theming 49 | # 50 | # Default text color 51 | # 52 | # All text defaults to this color if not otherwise specified. 53 | text-color = #FFFFFF 54 | 55 | # All pieces of text have the same theming attributes available: 56 | # 57 | # *-color 58 | # Foreground color 59 | # 60 | # *-background 61 | # Background color 62 | # 63 | # *-background-padding 64 | # Background padding in pixels (comma-delimited, CSS-style list). 65 | # See "DIRECTIONAL VALUES" under `man 5 tofi` for more info. 66 | # 67 | # *-background-corner-radius 68 | # Radius of background box corners in pixels 69 | 70 | # Prompt text theme 71 | # prompt-color = #FFFFFF 72 | prompt-background = #00000000 73 | prompt-background-padding = 0 74 | prompt-background-corner-radius = 0 75 | 76 | # Placeholder text theme 77 | placeholder-color = #62A0EA 78 | placeholder-background = #00000000 79 | placeholder-background-padding = 0 80 | placeholder-background-corner-radius = 0 81 | 82 | # Input text theme 83 | # input-color = #FFFFFF 84 | input-background = #00000000 85 | input-background-padding = 0 86 | input-background-corner-radius = 0 87 | 88 | # Default result text theme 89 | # default-result-color = #FFFFFF 90 | default-result-background = #00000000 91 | default-result-background-padding = 0 92 | default-result-background-corner-radius = 0 93 | 94 | # Alternate (even-numbered) result text theme 95 | # 96 | # If unspecified, these all default to the corresponding 97 | # default-result-* attribute. 98 | # 99 | # alternate-result-color = #FFFFFF 100 | # alternate-result-background = #00000000 101 | # alternate-result-background-padding = 0 102 | # alternate-result-background-corner-radius = 0 103 | 104 | # Selection text 105 | selection-color = #62A0EA 106 | selection-background = #00000000 107 | selection-background-padding = 0 108 | selection-background-corner-radius = 0 109 | 110 | # Matching portion of selection text 111 | selection-match-color = #00000000 112 | 113 | 114 | # 115 | ### Text cursor theme 116 | # 117 | # Style of the optional text cursor. 118 | # 119 | # Supported values: bar, block, underscore 120 | text-cursor-style = bar 121 | 122 | # Color of the text cursor 123 | # 124 | # If unspecified, defaults to the same as input-color 125 | # text-cursor-color = #FFFFFF 126 | 127 | # Color of text behind the text cursor when text-cursor-style = block 128 | # 129 | # If unspecified, defaults to the same as background-color 130 | # text-cursor-background = #000000 131 | 132 | # Corner radius of the text cursor 133 | text-cursor-corner-radius = 0 134 | 135 | # Thickness of the bar and underscore text cursors. 136 | # 137 | # If unspecified, defaults to a font-dependent value when 138 | # text-cursor-style = underscore, or to 2 otherwise. 139 | # text-cursor-thickness = 2 140 | 141 | # 142 | ### Text layout 143 | # 144 | # Prompt to display. 145 | prompt-text = "run: " 146 | 147 | # Extra horizontal padding between prompt and input. 148 | prompt-padding = 0 149 | 150 | # Placeholder input text. 151 | placeholder-text = "" 152 | 153 | # Maximum number of results to display. 154 | # If 0, tofi will draw as many results as it can fit in the window. 155 | num-results = 0 156 | 157 | # Spacing between results in pixels. Can be negative. 158 | result-spacing = 0 159 | 160 | # List results horizontally. 161 | horizontal = false 162 | 163 | # Minimum width of input in horizontal mode. 164 | min-input-width = 0 165 | 166 | # 167 | ### Window theming 168 | # 169 | # Width and height of the window. Can be pixels or a percentage. 170 | width = 1280 171 | height = 720 172 | 173 | # Window background color 174 | background-color = #1B1D1E 175 | 176 | # Width of the border outlines in pixels. 177 | outline-width = 4 178 | 179 | # Border outline color 180 | outline-color = #080800 181 | 182 | # Width of the border in pixels. 183 | border-width = 12 184 | 185 | # Border color 186 | border-color = #F92672 187 | 188 | # Radius of window corners in pixels. 189 | corner-radius = 0 190 | 191 | # Padding between borders and text. Can be pixels or a percentage. 192 | padding-top = 8 193 | padding-bottom = 8 194 | padding-left = 8 195 | padding-right = 8 196 | 197 | # Whether to clip text drawing to be within the specified padding. This 198 | # is mostly important for allowing text to be inset from the border, 199 | # while still allowing text backgrounds to reach right to the edge. 200 | clip-to-padding = true 201 | 202 | # Whether to scale the window by the output's scale factor. 203 | scale = true 204 | 205 | # 206 | ### Window positioning 207 | # 208 | # The name of the output to appear on. An empty string will use the 209 | # default output chosen by the compositor. 210 | output = "" 211 | 212 | # Location on screen to anchor the window to. 213 | # 214 | # Supported values: top-left, top, top-right, right, bottom-right, 215 | # bottom, bottom-left, left, center. 216 | anchor = center 217 | 218 | # Set the size of the exclusive zone. 219 | # 220 | # A value of -1 means ignore exclusive zones completely. 221 | # A value of 0 will move tofi out of the way of other windows' zones. 222 | # A value greater than 0 will set that much space as an exclusive zone. 223 | # 224 | # Values greater than 0 are only meaningful when tofi is anchored to a 225 | # single edge. 226 | exclusive-zone = -1 227 | 228 | # Window offset from edge of screen. Only has an effect when anchored 229 | # to the relevant edge. Can be pixels or a percentage. 230 | margin-top = 0 231 | margin-bottom = 0 232 | margin-left = 0 233 | margin-right = 0 234 | 235 | # 236 | ### Behaviour 237 | # 238 | # Hide the mouse cursor. 239 | hide-cursor = false 240 | 241 | # Show a text cursor in the input field. 242 | text-cursor = false 243 | 244 | # Sort results by number of usages in run and drun modes. 245 | history = true 246 | 247 | # Specify an alternate file to read and store history information 248 | # from / to. This shouldn't normally be needed, and is intended to 249 | # facilitate the creation of custom modes. 250 | # history-file = /path/to/histfile 251 | 252 | # Use fuzzy matching for searches. 253 | fuzzy-match = false 254 | 255 | # If true, require a match to allow a selection to be made. If false, 256 | # making a selection with no matches will print input to stdout. 257 | # In drun mode, this is always true. 258 | require-match = true 259 | 260 | # If true, typed input will be hidden, and what is displayed (if 261 | # anything) is determined by the hidden-character option. 262 | hide-input = false 263 | 264 | # Replace displayed input characters with a character. If the empty 265 | # string is given, input will be completely hidden. 266 | # This option only has an effect when hide-input is set to true. 267 | hidden-character = "*" 268 | 269 | # If true, directly launch applications on selection when in drun mode. 270 | # Otherwise, just print the command line to stdout. 271 | drun-launch = false 272 | 273 | # The terminal to run terminal programs in when in drun mode. 274 | # This option has no effect if drun-launch is set to true. 275 | # Defaults to the value of the TERMINAL environment variable. 276 | # terminal = foot 277 | 278 | # Delay keyboard initialisation until after the first draw to screen. 279 | # This option is experimental, and will cause tofi to miss keypresses 280 | # for a short time after launch. The only reason to use this option is 281 | # performance on slow systems. 282 | late-keyboard-init = false 283 | 284 | # If true, allow multiple simultaneous processes. 285 | # If false, create a lock file on startup to prevent multiple instances 286 | # from running simultaneously. 287 | multi-instance = false 288 | 289 | # Assume input is plain ASCII, and disable some Unicode handling 290 | # functions. This is faster, but means e.g. a search for "e" will not 291 | # match "é". 292 | ascii-input = false 293 | 294 | # 295 | ### Inclusion 296 | # 297 | # Configs can be split between multiple files, and then included 298 | # within each other. 299 | # include = /path/to/config 300 | 301 | -------------------------------------------------------------------------------- /dot_config/waybar/config: -------------------------------------------------------------------------------- 1 | { 2 | "layer": "top", // Waybar at top layer 3 | "position": "top", // Waybar position (top|bottom|left|right) 4 | "height": 41, // Waybar height (to be removed for auto height) 5 | // "width": 1280, // Waybar width 6 | "spacing": 0, // Gaps between modules (4px) 7 | // Choose the order of the modules 8 | // "margin-left":25, 9 | // "margin-right":25, 10 | "margin-bottom":0, 11 | "margin-top":0, 12 | "modules-center": ["wlr/workspaces"], 13 | "exclusive": false, 14 | "mode": "overlay" 15 | }, 16 | "wlr/workspaces": { 17 | "format": "{icon}", 18 | "on-click": "activate", 19 | "sort-by-number": true 20 | } 21 | 22 | -------------------------------------------------------------------------------- /dot_config/waybar/style.css: -------------------------------------------------------------------------------- 1 | *{ 2 | font-family: JetBrainsMono Nerd Font; 3 | font-size: 13px; 4 | } 5 | 6 | 7 | window#waybar { 8 | background-color: transparent; 9 | } 10 | 11 | 12 | 13 | #workspaces button label{ 14 | color: #EDEDED ; 15 | font-weight: bolder; 16 | } 17 | 18 | #workspaces button.active label{ 19 | color: #181818; 20 | font-weight: bolder; 21 | } 22 | 23 | #workspaces{ 24 | background-color: transparent; 25 | margin-top: 3px; 26 | margin-bottom: 10px; 27 | margin-right: 10px; 28 | margin-left: 25px; 29 | } 30 | #workspaces button{ 31 | box-shadow: rgba(0, 0, 0, 0.116) 2 2 5 2px; 32 | background-color: #181818 ; 33 | border-color: #181818 ; 34 | border-radius: 15px; 35 | margin-right: 10px; 36 | padding: 10px; 37 | padding-top: 1px; 38 | padding-bottom: 1px; 39 | font-weight: bolder; 40 | color: #FFFFFF ; 41 | transition: all 0.5s cubic-bezier(.55,-0.68,.48,1.68); 42 | } 43 | 44 | #workspaces button.active{ 45 | padding-right: 20px; 46 | box-shadow: rgba(0, 0, 0, 0.288) 2 2 5 2px; 47 | padding-left: 20px; 48 | padding-bottom: 0px; 49 | background: rgb(203,166,247); 50 | background: radial-gradient(circle, rgba(181,255,233,1) 0%, rgba(99,161,233,1) 50%, rgba(170,120,166,1) 100%); 51 | background-size: 400% 400%; 52 | animation: gradient 5s linear infinite; 53 | transition: all 0.3s cubic-bezier(.55,-0.68,.48,1.682); 54 | } 55 | 56 | @keyframes gradient { 57 | 0% { 58 | background-position: 0% 50%; 59 | } 60 | 50% { 61 | background-position: 100% 30%; 62 | } 63 | 100% { 64 | background-position: 0% 50%; 65 | } 66 | } 67 | 68 | @keyframes gradient_f { 69 | 0% { 70 | background-position: 0% 200%; 71 | } 72 | 50% { 73 | background-position: 200% 0%; 74 | } 75 | 100% { 76 | background-position: 400% 200%; 77 | } 78 | } 79 | 80 | @keyframes gradient_f_nh { 81 | 0% { 82 | background-position: 0% 200%; 83 | } 84 | 100% { 85 | background-position: 200% 200%; 86 | } 87 | } 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /dot_config/xaskpass/xaskpass.toml: -------------------------------------------------------------------------------- 1 | # Default configuration imitating the look of gtk Arc theme. 2 | # By default sizes are pixels when screen height <= 1080. Otherwise they are 1/1080 of the 3 | # screen height. This can be changed with dialog.scale. 4 | 5 | title = 'Enter Password' 6 | # Try to grab keyboard but back off if it cannot be done. 7 | grab_keyboard = false 8 | show_hostname = false 9 | resizable = false 10 | # setting this to other than 32 uses the root depth 11 | depth = 32 12 | 13 | [dialog] 14 | # set to 'none' to use pango default font and size. Use mono to keep ssh 15 | # fingerprint formatting. 16 | font = 'JetBrainsMono Nerd Font' 17 | #font = 'sans serif 11' 18 | # To force the use of a specific font file. Improves the startup time a lot. 19 | #font_file = '/usr/share/fonts/TTF/DejaVuSansMono.ttf' 20 | font_file = 'none' 21 | # one of 'Ltr', 'Rtl', 'Neutral', 'WeakLtr', 'WeakRtl' or 'none' to derive from 22 | # keymap 23 | direction = 'none' 24 | foreground = '#CDD6F4' 25 | background = '#1E1E2E' 26 | # affected by label text direction 27 | alignment = 'Left' 28 | # the default label when none is given as an argument 29 | label = 'Please enter your authentication passphrase:' 30 | # set to 'none' to disable timeout 31 | input_timeout = 30 32 | indicator_label = 'Secret:' 33 | indicator_label_foreground = '#5c616c' 34 | scale = 'none' 35 | 36 | [dialog.layout_opts] 37 | # one of Center, TopRight, BottomLeft, MiddleCompact 38 | layout = 'Center' 39 | # Sizes are in pixels. Fractional numbers can be used instead of integers but these 40 | # might result in blurry lines. 'none' to calculate from font height. 41 | horizontal_spacing = 'none' 42 | vertical_spacing = 'none' 43 | # set to 'none' to disable wrapping 44 | text_width = 'none' 45 | 46 | [dialog.ok_button] 47 | label = 'OK' 48 | horizontal_spacing = 'none' 49 | vertical_spacing = 'none' 50 | border_width = 1.0 51 | # set both to 0 to disable rounding 52 | radius_x = 2.0 53 | radius_y = 2.0 54 | # 3D look: 55 | pressed_adjustment_x = 1.0 56 | pressed_adjustment_y = 1.0 57 | foreground = '#CDD6F4' 58 | border_color = '#87AAF0' 59 | border_color_pressed = '#b7c0d3' 60 | background = '#1E1E2E' 61 | # set to a color for a linear gradient 62 | background_stop = 'none' 63 | background_pressed = '#1E1E2E' 64 | background_pressed_stop = 'none' 65 | background_hover = '#292940' 66 | background_hover_stop = 'none' 67 | 68 | [dialog.cancel_button] 69 | label = 'Cancel' 70 | horizontal_spacing = 'none' 71 | vertical_spacing = 'none' 72 | border_width = 1.0 73 | # set both to 0 to disable rounding 74 | radius_x = 2.0 75 | radius_y = 2.0 76 | # 3D look: 77 | pressed_adjustment_x = 1.0 78 | pressed_adjustment_y = 1.0 79 | foreground = '#CDD6F4' 80 | border_color = '#87AAF0' 81 | border_color_pressed = '#b7c0d3' 82 | background = '#1E1E2E' 83 | background_stop = 'none' 84 | background_pressed = '##1E1E2E' 85 | background_pressed_stop = 'none' 86 | background_hover = '#292940' 87 | background_hover_stop = 'none' 88 | 89 | [dialog.clipboard_button] 90 | horizontal_spacing = 'none' 91 | vertical_spacing = 'none' 92 | border_width = 1.0 93 | # set both to 0 to disable rounding 94 | radius_x = 2.0 95 | radius_y = 2.0 96 | # 3D look: 97 | pressed_adjustment_x = 1.0 98 | pressed_adjustment_y = 1.0 99 | foreground = '#CDD6F4' 100 | border_color = '#cfd6e6' 101 | border_color_pressed = '#b7c0d3' 102 | background = '#1E1E2E' 103 | background_stop = 'none' 104 | background_pressed = '#1E1E2E' 105 | background_pressed_stop = 'none' 106 | background_hover = '#292940' 107 | background_hover_stop = 'none' 108 | 109 | [dialog.plaintext_button] 110 | label = '*' 111 | horizontal_spacing = 'none' 112 | vertical_spacing = 'none' 113 | border_width = 1.0 114 | # set both to 0 to disable rounding 115 | radius_x = 2.0 116 | radius_y = 2.0 117 | # 3D look: 118 | pressed_adjustment_x = 1.0 119 | pressed_adjustment_y = 1.0 120 | foreground = '#CDD6F4' 121 | border_color = '#cfd6e6' 122 | border_color_pressed = '#b7c0d3' 123 | background = '#1e1e2e' 124 | background_stop = 'none' 125 | background_pressed = '1e1e2e' 126 | background_pressed_stop = 'none' 127 | background_hover = '#292940' 128 | background_hover_stop = 'none' 129 | 130 | [dialog.indicator] 131 | border_width = 1.0 132 | foreground = '#CDD6F4' 133 | background = '#1e1e2e' 134 | background_stop = 'none' 135 | border_color = '#cfd6e6' 136 | border_color_focused = '#5294e2' 137 | indicator_color = '#d3d8e2' 138 | indicator_color_stop = 'none' 139 | # only implemented for circle for now 140 | blink = true 141 | # One of 'Classic', 'Circle' or 'Strings' 142 | type = 'Strings' 143 | 144 | [dialog.indicator.classic] 145 | min_count = 3 146 | max_count = 3 147 | # set to 0 to disable rounding 148 | radius_x = 2 149 | radius_y = 2 150 | # Set to 'none' to derive from text height 151 | horizontal_spacing = 'none' 152 | element_height = 'none' 153 | element_width = 'none' 154 | 155 | [dialog.indicator.circle] 156 | # 'none' to derive from text width 157 | diameter = 'none' 158 | light_up = true 159 | rotate = true 160 | rotation_speed_start = 0.10 161 | rotation_speed_gain = 1.05 162 | # angle in radians 163 | spacing_angle = 0.5 164 | indicator_count = 3 165 | # 'none' to derive from diameter 166 | indicator_width = 'none' 167 | lock_color = '#ffffff' 168 | 169 | [dialog.indicator.strings] 170 | radius_x = 2.0 171 | radius_y = 2.0 172 | horizontal_spacing = 'none' 173 | vertical_spacing = 'none' 174 | # one of 'Custom', 'Disco' or 'Asterisk' 175 | strings = 'Disco' 176 | 177 | [dialog.indicator.strings.disco] 178 | min_count = 2 179 | max_count = 2 180 | # to use three states to differentiate between adding a letter and deleting one 181 | three_states = true 182 | 183 | [dialog.indicator.strings.custom] 184 | # one of 'Left', 'Center' or 'Right' 185 | alignment = 'Center' 186 | justify = false 187 | randomize = true 188 | # to differentiate between different states specify at least 3 or 4 strings 189 | # first string indicates paste 190 | strings = [ 191 | 'pasted 🤯', 192 | '(っ-̶●̃益●̶̃)っ ,︵‿ ', 193 | '(⊙.⊙(☉̃ₒ☉)⊙.⊙)', 194 | 'ʕ•́ᴥ•̀ʔっ', 195 | 'ヽ(´ー`)人(´∇`)人(`Д´)ノ', 196 | ] 197 | 198 | [dialog.indicator.strings.asterisk] 199 | asterisk = "*" 200 | # one of 'Left', 'Center' or 'Right' 201 | alignment = 'Center' 202 | min_count = 10 203 | max_count = 20 204 | 205 | -------------------------------------------------------------------------------- /dot_local/bin/hlwrapped: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export GDK_SCALE=1 4 | export XCURSOR_SIZE=16 5 | export WINIT_UNIX_BACKEND=x11 neovide 6 | export MOZ_ENABLE_WAYLAND=1 7 | 8 | exec Hyprland 9 | -------------------------------------------------------------------------------- /dot_local/bin/wallpaper_fool: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | function load_wp(){ 4 | swww img .config/eww/wallpapers/FoolMoon.png -t wipe --transition-wave 0.0,0.0,1.0,1.0 --transition-duration .8 --transition-step 255 --transition-fps 60 5 | } 6 | 7 | #perform cleanup and exit 8 | if ! swww query; then 9 | swww init 10 | fi 11 | 12 | load_wp 13 | -------------------------------------------------------------------------------- /dot_local/bin/wallpaper_kurz: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | function load_wp(){ 4 | swww img .config/eww/wallpapers/Kurz.png -t wipe --transition-wave 0.0,0.0,1.0,1.0 --transition-duration .8 --transition-step 255 --transition-fps 60 5 | } 6 | 7 | #perform cleanup and exit 8 | if ! swww query; then 9 | swww init 10 | fi 11 | 12 | load_wp 13 | -------------------------------------------------------------------------------- /dot_local/share/applications/FoolMoon.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Exec=.local/bin/wallpaper_fool 4 | Name=FoolMoon 5 | -------------------------------------------------------------------------------- /dot_local/share/applications/Kurz.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Exec=.local/bin/wallpaper_kurz 4 | Name=Kurz 5 | -------------------------------------------------------------------------------- /extras/wrapped.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=HyprWrapped 3 | Comment=An intelligent dynamic tiling Wayland compositor 4 | Exec=.local/bin/hlwrapped 5 | Type=Application 6 | --------------------------------------------------------------------------------