From 375bf796939d7f40f0418c1b1e26626f6a802f87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=9Eahin=20Akkaya?= Date: Fri, 25 Mar 2022 19:10:57 +0300 Subject: [PATCH] Migrate from qtile bar to eww widgets --- .config/eww/bar/eww.scss | 530 ++++++++++++++++++ .config/eww/bar/eww.yuck | 463 +++++++++++++++ .config/eww/bar/images/mic.png | Bin 0 -> 40034 bytes .config/eww/bar/images/music.png | Bin 0 -> 13774 bytes .config/eww/bar/images/speaker.png | Bin 0 -> 16246 bytes .config/eww/bar/scripts/battery | 43 ++ .config/eww/bar/scripts/indicator | 14 + .config/eww/bar/scripts/layout | 9 + .config/eww/bar/scripts/music_info | 98 ++++ .config/eww/bar/scripts/pop | 92 +++ .config/eww/bar/scripts/qtile | 12 + .config/eww/bar/scripts/wifi | 26 + .config/eww/bar/scripts/workspace | 6 + .config/eww/bar/scripts/workspaces.py | 53 ++ .config/qtile/modules/hooks.py | 21 +- .config/qtile/modules/keys.py | 2 +- .config/qtile/modules/screens.py | 162 +----- .gitmodules | 8 +- .../patches/polybar-wireguard/wireguard.patch | 74 ++- .../dontshowmenu.patch | 20 +- scripts/autostart.sh | 4 + scripts/polybar-wireguard | 1 - scripts/rofi-wireguard | 1 + 23 files changed, 1451 insertions(+), 188 deletions(-) create mode 100644 .config/eww/bar/eww.scss create mode 100644 .config/eww/bar/eww.yuck create mode 100644 .config/eww/bar/images/mic.png create mode 100644 .config/eww/bar/images/music.png create mode 100644 .config/eww/bar/images/speaker.png create mode 100755 .config/eww/bar/scripts/battery create mode 100755 .config/eww/bar/scripts/indicator create mode 100755 .config/eww/bar/scripts/layout create mode 100755 .config/eww/bar/scripts/music_info create mode 100755 .config/eww/bar/scripts/pop create mode 100755 .config/eww/bar/scripts/qtile create mode 100755 .config/eww/bar/scripts/wifi create mode 100755 .config/eww/bar/scripts/workspace create mode 100644 .config/eww/bar/scripts/workspaces.py rename GitRepositories/patches/{rofibluetooth => rofi-bluetooth}/dontshowmenu.patch (74%) delete mode 120000 scripts/polybar-wireguard create mode 120000 scripts/rofi-wireguard diff --git a/.config/eww/bar/eww.scss b/.config/eww/bar/eww.scss new file mode 100644 index 0000000..758ac79 --- /dev/null +++ b/.config/eww/bar/eww.scss @@ -0,0 +1,530 @@ +/** EWW.SCSS +Created by saimoom **/ +*{ + all: unset; + font-family: "Iosevka Nerd Font", feather; + // font-family: DaddyTimeMono NF; +} + +// Variable Color's +$background: #1A1B26; +$foreground: #A9B1D6; + +$black: #24283B; +$gray: #565F89; +$red: #F7768E; +$green: #73DACA; +$yellow: #E0AF68; +$blue: #7AA2F7; +$magenta: #BB9AF7; +$cyan: #7DCFFF; +$white: $foreground; +/** General **/ +.bar_class { + background-color: #0f0f17; + border-radius: 16px; +} +.module { + margin: 0px 0px 0px 0px; + border-radius: 10px 16px 0px 10px; +} + +/** tooltip!! **/ +tooltip.background { + background-color: #0f0f17; + font-size: 18; + border-radius: 10px; + color: #bfc9db; +} + +tooltip label { + margin: 6px; +} + + +/** Widgets **/ + +.clock_time_sep { + font-size: 27; + color: #bfc9db; + margin: 0px 4px 1px 4px; +} +.clock_time_class, .clock_minute_class { + font-size: 23; +} +.clock_date_class { + font-size: 18; + margin: 0px 20px 0px -1px; + color: #d7beda; +} +.clock_minute_class { + margin: 0px 20px 0px 3px; + color: #bfc9db; +} + +.clock_time_class { + color: #bfc9db; + font-weight: bold; + margin: 0px 5px 0px 0px; +} + +.diskbar { + color: #AD5C6C; + background-color: #38384d; + border-radius: 10px; +} +.cpubar { + color: #297379; + background-color: #38384d; + border-radius: 10px; +} + +.membar { + color: #e0b089; + background-color: #38384d; + border-radius: 10px; +} + + +.bat{ + // font-family: JetBrainsMono Nerd Font; + font-family: Iosevka Nerd Font; + font-size: 1.2em; + padding-right: .5rem; + color: $blue; +} +.brightbar trough highlight { + background-image: linear-gradient(to right, #e4c9af 30%, #f2cdcd 50%, #e0b089 100% *50); + border-radius: 10px; +} +.volbar trough highlight { + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 10px; +} +.volume_icon { + font-size: 22; + color: #a1bdce; + margin: 0px 10px 0px 10px; +} + +.module_essid { + font-size: 18; + color: #a1bdce; + margin: 0px 10px 0px 0px; +} +.module_vpn { + font-size: 18; + color: #77DD77; + margin: 0px 10px 0px 0px; +} +.module-wif { + font-size: 22; + color: #a1bdce; + border-radius: 100%; + margin: 0px 10px 0px 5px; +} +.iconcpu { + color: #297379; +} + + +.icondisk { + color: #AD5C6C; +} + +.iconmem { + color: #e0b089; +} +.iconbat { + color: #afbea2; +} +.iconbat, .iconmem, .iconcpu, .icondisk { + font-size: 15; + margin: 10px; +} +.bright_icon { + font-size: 22; + color: #e4c9af; + margin: 0px 10px 0px 10px; +} + + +.separ { + color: #3e424f; + font-weight: bold; + font-size: 22px; + margin: 0px 8px 0px 8px; +} + +.mem_module, .cpu_module, .disk_module{ + background-color: #0f0f17; + border-radius: 16px; + margin: 0px 10px 0px 3px; +} +scale trough { + all: unset; + background-color: #22242b; + box-shadow: 0 2px 3px 2px #06060b; + border-radius: 16px; + min-height: 10px; + min-width: 70px; + margin: 0px 10px 0px 0px; +} + +.works { + font-size: 27px; + // font-size: 45px; + font-weight: normal; + font-family: Iosevka Nerd Font; + margin: 5px 0px 0px 20px; + background-color: #0f0f17; +} + +.0 , .01, .02, .03, .04, .05, .06, .07, .08, .09, .00, +.011, .022, .033, .044, .055, .066, .077, .088, .099, .000 { + margin: 0px 10px 0px 0px; +} + +/* Unoccupied */ +.0 { + color:#131d2c; +} + +/* Occupied */ +.01, .02, .03, .04, .05, .06, .07, .08, .09, .00 { + color: #5c6c82; +} + +/* Focused */ +.011, .022, .033, .044, .055, .066, .077, .088, .099, .000 { + color: #e4e6ea +} + +.033.thunderbird { + color: #1E5EBB; +} + +.066.twitter { + color: #1C9CEA; +} + +.firefox.077 { + color: #DF5D00; +} + + +.twitch.088 { + color: #613F9F; +} + +.discord.099 { + color:#5661EF; +} + + +.telegram.000 { + color: #0084C6; +} + +.song_cover_art { + background-size: cover; + background-position: center; + min-height: 24px; + min-width: 24px; + margin: 10px; + border-radius: 100px; +} + +.song { + color: #a1bdce; + font-size : 18px; + font-weight : bold; + margin : 3px 5px 0px 0px; +} + +.song_btn_play { + color: #a1bdce; + font-size : 28px; + margin : 3px 0px 0px 5px; + +} + + +.song_btn_prev, .song_btn_next { + color: #bfc9db; + font-size : 24px; + margin : 3px 0px 0px 5px; + +} +// Calendar +.cal { + background-color: #0f0f17; + font-family: "JetBrainsMono Nerd Font"; + font-size: 18px; + font-weight: normal; + + .cal-in { + padding: 0px 10px 0px 10px; + color: #bfc9db; + + .cal { + &.highlight { + padding: 20px; + } + + padding: 5px 5px 5px 5px; + margin-left: 10px; + } + } +} + + + +calendar:selected { + color: $blue; + font-size: 24px; + background: $background; +} + +calendar.header { + color: $blue; + font-weight: bold; +} + +calendar.button { + color: $magenta; +} + +calendar.highlight { + color: $magenta; + font-weight: bold; +} + +calendar:indeterminate { + color: $background; +} + + + + + + + +.sys_sep { + color: #38384d; + font-size: 18; + margin: 0px 10px 0px 10px; +} +.sys_text_bat_sub, .sys_text_mem_sub { + font-size: 16; + color: #bbc5d7; + margin: 5px 0px 0px 25px; +} +.sys_text_bat, .sys_text_mem { + font-size: 21; + font-weight: bold; + margin: 14px 0px 0px 25px; +} +.sys_icon_bat, .sys_icon_mem { + font-size: 30; + margin: 30px; +} +.sys_win { + background-color: #0f0f17; +} +.sys_bat { + color: #afbea2; + background-color: #38384d; + border-radius: 10px; +} +.sys_mem { + color: #e4c9af; + background-color: #38384d; + border-radius: 10px; +} +.sys_icon_bat, .sys_text_bat { + color: #afbea2; +} +.sys_icon_mem, .sys_text_mem { + color: #e4c9af; +} +.sys_bat_box { + border-radius: 16px; + margin: 15px 10px 10px 20px; +} +.sys_mem_box { + border-radius: 16px; + margin: 10px 10px 15px 20px; +} + +.music_pop { + background-color: #0f0f17; + border-radius: 16px; +} +.music_cover_art { + background-size: cover; + background-position: center; + min-height: 100px; + box-shadow: 5px 5px 5px 5px #06060b; + min-width: 170px; + margin: 20px; + border-radius: 20px; +} + +.music { + color: #a1bdce; + font-size : 20px; + font-weight : bold; + margin : 20px 0px 0px -15px; +} + +.music_artist { + color: #bbc5d7; + font-size : 16px; + font-weight : normal; + margin : 0px 0px 0px 0px; +} + +.music_btn_prev, .music_btn_play, .music_btn_next { + font-family: Iosevka Nerd Font; +} +.music_btn_prev { + color: #bbc5d7; + font-size : 32px; + font-weight : normal; + margin: 0px 0px 0px 0px; +} +.music_btn_play { + color: #a1bdce; + font-size : 48px; + font-weight : normal; + margin: 0px 0px 0px 0px; +} +.music_btn_next { + color: #bbc5d7; + font-size : 32px; + font-weight : normal; + margin: 0px 0px 0px 0px; +} + +.music_bar scale trough highlight { + all: unset; + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 24px; +} +.music_bar scale trough { + all: unset; + background-color: #232232; + box-shadow: 0 6px 5px 2px #06060b; + border-radius: 24px; + min-height: 13px; + min-width: 190px; + margin : -10px 10px 20px 0px; +} + +.audio-box { + background-color: #0f0f17; + border-radius: 16px; +} +.speaker_icon { + background-size: cover; + background-image: url('images/speaker.png'); + background-position: center; + min-height: 70px; + min-width: 75px; + margin: 10px 20px 5px 20px; + border-radius: 12px; +} + +.speaker_text { + color: #a1bdce; + font-size : 26px; + font-weight : bold; + margin: 20px 0px 0px 0px; +} + +.speaker_bar scale trough highlight { + all: unset; + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 24px; +} +.speaker_bar scale trough { + all: unset; + background-color: #232232; + box-shadow: 0 6px 5px 2px #06060b; + border-radius: 24px; + min-height: 13px; + min-width: 120px; + margin : 0px 0px 5px 0px; +} + +.mic_icon { + background-size: cover; + background-image: url('images/mic.png'); + background-position: center; + min-height: 70px; + min-width: 75px; + margin: 5px 20px 20px 20px; + border-radius: 12px; +} + +.mic_text { + color: #a1bdce; + font-size : 26px; + font-weight : bold; + margin: 0px 0px 0px 0px; +} + +.mic_bar scale trough highlight { + all: unset; + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 24px; +} +.mic_bar scale trough { + all: unset; + box-shadow: 0 6px 5px 2px #06060b; + background-color: #232232; + border-radius: 24px; + min-height: 13px; + min-width: 120px; + margin : 0px 0px 20px 0px; +} + +.audio_sep { + color: #38384d; + font-size: 18; + margin : 0px 0px 0px 0px; +} + + +// Powermenu +.powermenu { + font-family: feather; + font-size: 1.3em; + font-weight: bold; +} +.button-qtres, .button-reb, .button-lock, +.button-quit, .button-off{ + padding: .5rem .2rem .5rem .2rem; + // transition: all .2s ease-in-out; +} +.button-off{ + color: $red; +} +.button-qtres:hover, .button-reb:hover, .button-lock:hover, +.button-quit:hover, .button-off:hover{ + font-size: 1.2em; + box-shadow: inset 0 0 0 10em $background; +} +.button-bspres{ + color: $green; +} +.button-reb{ + color: $yellow +} +.button-quit{ + color: $magenta; +} +.button-lock{ + color: $blue; +} diff --git a/.config/eww/bar/eww.yuck b/.config/eww/bar/eww.yuck new file mode 100644 index 0000000..f85085d --- /dev/null +++ b/.config/eww/bar/eww.yuck @@ -0,0 +1,463 @@ +;; Variables +(defpoll clock_time :interval "5s" "date +\%H") +(defpoll clock_minute :interval "5s" "date +\%M") +(defpoll clock_date :interval "5s" "date '+%d/%m'") +(defpoll volume_percent :interval "3s" :run-while vol_reveal "amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") +(defpoll mic_percent :interval "3s" :run-while vol_reveal "amixer -D pulse sget Capture | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") +(defpoll brightness_percent :interval "5s" :run-while br_reveal "brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}' | tr -d '%'") +(defpoll caps_num_scroll_indicator :interval "300ms" "scripts/indicator") +(defvar vol_reveal false) +(defvar bat_rev false) +(defvar cpu_rev false) +(defvar mem_rev false) +(defvar disk_rev false) +(defvar br_reveal false) +(defvar vpn_reveal false) +(defvar bluetooth_rev false) +(defvar music_reveal false) +(defvar wifi_rev false) +(defvar time_rev false) +(defvar power_rev false) +(deflisten workspace "scripts/workspace") + +(deflisten CURRENT_LAYOUT_SYMBOL "scripts/layout") + +(defvar eww "$HOME/scripts/eww -c $HOME/.config/eww/bar") + + +(defpoll COL_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --COL") +(defpoll ESSID_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --ESSID") +(defpoll VPN_NAME :interval "1s" "rofi-wireguard") +(defpoll BLUETOOTHDEV :interval "1s" "rofi-bluetooth --status") +(defpoll WLAN_ICON :interval "1m" "~/.config/eww/bar/scripts/wifi --ICON") + + +(defpoll song :interval "2s" "~/.config/eww/bar/scripts/music_info --song") +(defpoll song_artist :interval "2s" "~/.config/eww/bar/scripts/music_info --artist") +(defpoll current_status :interval "1s" "~/.config/eww/bar/scripts/music_info --time") +(defpoll song_status :interval "2s" "~/.config/eww/bar/scripts/music_info --status") +(defpoll cover_art :interval "2s" "~/.config/eww/bar/scripts/music_info --cover") + + +;; widgets + +(defwidget wifi [] + (eventbox :onhover "${eww} update wifi_rev=true" + :onhoverlost "${eww} update wifi_rev=false" + (box :vexpand "false" :hexpand "false" :space-evenly "false" + (button :class "module-wif" :onclick "networkmanager_dmenu" :wrap "false" :limit-width 12 :style "color: ${COL_WLAN};" WLAN_ICON) + (revealer :transition "slideleft" + :reveal wifi_rev + :duration "350ms" + (label :class "module_essid" + :text ESSID_WLAN + ))))) + + +(defwidget workspaces [] + (literal :content workspace)) + +(defwidget sep [] + (box :class "module-2" :vexpand "false" :hexpand "false" + (label :class "separ" :text "|"))) + +(defwidget clock_module [] + (eventbox :onhover "${eww} update time_rev=true" + :onhoverlost "${eww} update time_rev=false" + (box :class "module" :space-evenly "false" :orientation "h" :spacing "3" + (label :text clock_time :class "clock_time_class" ) + (label :text ":" :class "clock_time_sep" ) + (label :text clock_minute :class "clock_minute_class") + (revealer :transition "slideleft" + :reveal time_rev + :duration "350ms" + (button :class "clock_date_class" + :onclick "$HOME/.config/eww/bar/scripts/pop calendar" clock_date + ) + )))) + +(defwidget volume [] + (eventbox :onhover "${eww} update vol_reveal=true" + :onhoverlost "${eww} update vol_reveal=false" + (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" + (button :onclick "scripts/pop audio" :class "volume_icon" "${BLUETOOTHDEV=="" ? "": ""}") + (revealer :transition "slideleft" + :reveal vol_reveal + :duration "350ms" + (scale :class "volbar" + :value volume_percent + :orientation "h" + :tooltip "${volume_percent}%" + :max 100 + :min 0 + :onchange "amixer -D pulse sset Master {}%" ))))) + +(defwidget bright [] + (eventbox :onhover "${eww} update br_reveal=true" :onhoverlost "${eww} update br_reveal=false" + (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" + (label :text "" :class "bright_icon" :tooltip "brightness") + (revealer :transition "slideleft" + :reveal br_reveal + :duration "350ms" + (scale :class "brightbar" + :value brightness_percent + :orientation "h" + :tooltip "${brightness_percent}%" + :max 100 + :min 0 + :onchange "brightnessctl set {}%" ))))) + +;; Battery Widgets ;; +(defwidget bat [] + (eventbox :onhover "${eww} update bat_rev=true" + :onhoverlost "${eww} update bat_rev=false" + (box :space-evenly "false" + (label :class "bat" + :text battery + :tooltip "Battery: ${EWW_BATTERY["BAT0"].capacity}%") + + (revealer :transition "slideleft" + :reveal bat_rev + :duration "350ms" + :class "bat" + (label :text "${battery==""? "Charging": "Battery"}: ${EWW_BATTERY["BAT0"].capacity}%")) + ))) +(defpoll battery :interval "1s" "scripts/battery icon") + +(defwidget metric [widget widget_rev value tooltip_text] + (eventbox + :onhover "${eww} update ${widget}_rev=true" + :onhoverlost "${eww} update ${widget}_rev=false" + (box :class "${widget}_module" :vexpand "false" :hexpand "false" + (circular-progress + :value value + :class "${widget}bar" + :thickness 4 + (button + :class "icon${widget}" + :limit-width 9 + :tooltip tooltip_text + :onclick "$HOME/.config/eww/bar/scripts/pop system" + :show_truncated false + :wrap false + (revealer + :transition "slideleft" + :reveal widget_rev + :duration "350ms" + :class "icon${widget}" + (label + :text value + :tooltip "${tooltip_text}: ${value}%" + ) + ) + ) + ) + ) + ) + ) + +(defwidget metrics [] + (box :orientation "h" + :space-evenly false + (metric :widget "disk" :widget_rev disk_rev :value "${round((1 - (EWW_DISK["/"].free / EWW_DISK["/"].total)) * 100, 0)}" :tooltip_text "Disk usage") + (metric :widget "cpu" :widget_rev cpu_rev :value "${round(EWW_CPU.avg, 0)}" :tooltip_text "CPU usage") + (metric :widget "mem" :widget_rev mem_rev :value "${round(EWW_RAM.used_mem_perc, 0)}" :tooltip_text "RAM usage") + )) + + +(defwidget keyboard [] + (box :class "volume_icon" + :orientation "v" + (label :text caps_num_scroll_indicator + :style "font-size: 7;" + :valign "end" + ) + (label :text CURRENT_LAYOUT_SYMBOL + :valign "start" + :vexpand false + ) + + )) + + +(defwidget vpn [] + (eventbox :onhover "${eww} update vpn_reveal=true" + :onhoverlost "${eww} update vpn_reveal=false" + (box :vexpand "false" :hexpand "false" :space-evenly "false" + (button :class "module-wif" :timeout "10s" :onclick "rofi-wireguard --toggle" :wrap "false" + :limit-width 12 :style "color: ${VPN_NAME=="" ? "#3e424f": "#77DD77"};" "") + (revealer :transition "slideright" + :reveal vpn_reveal + :duration "350ms" + (button :class "module-wif" :timeout "10s" :onclick "rofi-wireguard --toggle" :wrap "false" + :limit-width 12 :style "color: ${VPN_NAME=="" ? "#3e424f": "#77DD77"};" VPN_NAME) + )))) + +(defwidget bluetooth [] + (eventbox :onhover "${eww} update bluetooth_rev=true" + :onhoverlost "${eww} update bluetooth_rev=false" + (box :vexpand "false" :hexpand "false" :space-evenly "false" + (button :class "module-wif" :timeout "30s" :onclick "rofi-bluetooth" :wrap "false" :limit-width 12 + :style "color: ${BLUETOOTHDEV=="" ? "#3e424f": "#77DD77"};" {BLUETOOTHDEV=="" ? "" : ""}) + (revealer :transition "slideright" + :reveal bluetooth_rev + :duration "350ms" + (button :class "module-wif" :timeout "30s" :onclick "rofi-bluetooth" :wrap "false" :limit-width 12 + :style "color: ${BLUETOOTHDEV=="" ? "#3e424f": "#77DD77"};" BLUETOOTHDEV) + )))) + +(defwidget power [] + (eventbox :onhover "${eww} update power_rev=true" + :onhoverlost "${eww} update power_rev=false" + (box :orientation "h" + :space-evenly "false" + :vexpand "false" + :class "powermenu" + (revealer :transition "slideleft" + :reveal power_rev + :duration "550ms" + (box :orientation "h" + :space-evenly "false" + + (button :class "button-qtres" + :tooltip "Restart qtile" + :onclick "scripts/qtile restart" "" ) + + (button :class "button-reb" + :tooltip "Reboot" + :onclick "reboot" "") + + (button :class "button-quit" + :tooltip "Logout" + :onclick "scripts/qtile shutdown" "") + + (button :class "button-lock" + :tooltip "Lock Screen" + :onclick "lock-screen" ""))) + + (button :class "button-off" + :tooltip "Shutdown" + :onclick "shutdown now" "")))) + + +;; Music +(defwidget music [] + (eventbox :onhover "${eww} update music_reveal=true" + :onhoverlost "${eww} update music_reveal=false" + (box :class "module-2" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false" + (box :class "song_cover_art" :vexpand "false" :hexpand "false" :style "background-image: url('${cover_art}');") + (button :class "song" :onclick "~/.config/eww/bar/scripts/pop music" song) + (revealer :transition "slideright" + :reveal music_reveal + :duration "350ms" + (box :vexpand "false" :hexpand "false" :orientation "h" + (button :class "song_btn_prev" :onclick "~/.config/eww/bar/scripts/music_info --prev" "") + (button :class "song_btn_play" :onclick "~/.config/eww/bar/scripts/music_info --toggle" song_status) + (button :class "song_btn_next" :onclick "~/.config/eww/bar/scripts/music_info --next" "")))))) + + +(defwidget left [] + (box :orientation "h" + :space-evenly false + :halign "end" + :class "left_modules" + (keyboard) + (vpn) + (bluetooth) + (bright) + (volume) + (wifi) + (sep) + (metrics) + (bat) + (sep) + (clock_module) + (power))) + + +(defwidget right [] + (box :orientation "h" + :space-evenly false + :halign "start" + :class "right_modules" + (workspaces))) + + +(defwidget center [] + (box :orientation "h" + :space-evenly false + :halign "center" + :class "center_modules" + (music))) + + +(defwidget topbar [] + (centerbox +:orientation "h" + :class "bar_class" + (right) + (center) + (left) + ) + ) + +(defwindow bar + :monitor 0 + :geometry (geometry :x "0%" + :y "4px" + :width "99%" + :height "50px" + :anchor "top center") + :stacking "fg" + :reserve (struts :distance "58px" :side "top") + :windowtype "dock" + :wm-ignore false + (topbar)) + +(defwidget system [] + (box :class "sys_win" :orientation "v" :space-evenly "false" :hexpand "false" :vexpand "false" :spacing 0 + (box :class "sys_bat_box" :orientation "h" :space-evenly "false" + (circular-progress :value "${EWW_BATTERY["BAT0"].capacity}" + :class "sys_bat" + :thickness 9 + (label :text "" + :class "sys_icon_bat" + :limit-width 2 + :show_truncated false + :wrap false)) + (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" + (label :text "battery" + :halign "start" + :class "sys_text_bat" + :limit-width 9 + :show_truncated false + :wrap false) + (label :text "${EWW_BATTERY["BAT0"].capacity}%" + :halign "start" + :class "sys_text_bat_sub" + :limit-width 22 + :show_truncated false + :wrap false) + (label :text "${EWW_BATTERY["BAT0"].status}" + :halign "start" + :class "sys_text_bat_sub" + :limit-width 22 + :show_truncated false + :wrap false))) + (label :text "" :class "sys_sep" :halign "center") + (box :class "sys_mem_box" :orientation "h" :space-evenly "false" :halign "start" + (circular-progress :value "${round(EWW_RAM.used_mem_perc, 0)}" + :class "sys_mem" + :thickness 9 + (label :text "" + :class "sys_icon_mem" + :limit-width 2 + :show_truncated false + :wrap false + :angle 0.0)) + (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" + (label :text "memory" + :halign "start" + :class "sys_text_mem" + :limit-width 9 + :show_truncated false + :wrap false) + (label :text "${round(EWW_RAM.used_mem/1024, 0)} | ${round(EWW_RAM.total_mem/1024, 0)}mb " + :halign "start" + :class "sys_text_mem_sub" + :limit-width 22 + :show_truncated false + :wrap false) + (label :text "${round(EWW_RAM.free_mem/1024,0)}mb free" + :halign "start" + :class "sys_text_mem_sub" + :limit-width 22 + :show_truncated false + :wrap false))))) + +(defwidget cal [] + (box :class "cal" :orientation "v" + (box :class "cal-in" + (calendar :class "cal" + ; :onclick "echo {} is selected >> /home/sahin/caltest" + :show-day-names true + :show-heading true + :show-details true + :show-week-numbers true + )))) + +(defwindow calendar + :geometry (geometry :x "-20px" + :y "7%" + :anchor "top right" + :width "270px" + :height "60px") + (cal)) + + + +(defwidget audio [] + (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false" + (box :halign "v" :space-evenly "false" :hexpand "false" :vexpand "false" + (box :class "speaker_icon" :orientation "v") + (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" ) + (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false" + (scale :value volume_percent + :space-evenly "false" + :orientation "h" + :onchange "amixer -D pulse sset Master {}%" + :tooltip "volume on ${volume_percent}%" + :max 100 + :min 0)))) + (label :text "" :class "audio_sep" :halign "center") + (box :halign "v" :space-evenly "false" :hexpand "false" :vexpand "false" + (box :class "mic_icon" :orientation "v") + (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + (label :class "mic_text" :text "mic" :valign "center" :halign "left" ) + (box :class "mic_bar" :halign "center" :vexpand "false" :hexpand "false" + (scale :value mic_percent + :space-evenly "false" + :orientation "h" + :tooltip "mic on ${mic_percent}%" + :onchange "amixer -D pulse sset Capture {}%" + :max 100 + :min 0)))))) + +(defwindow audio_ctl + :geometry (geometry :x "-20px" + :y "7%" + :anchor "top right" + :width "280px" + :height "60px") + (audio)) + + +(defwindow system + :geometry (geometry :x "-20px" + :y "7%" + :anchor "top right" + :width "290px" + :height "120px") + (system)) + +;; Music +(defwidget music_pop [] + (box :class "music_pop" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false" + (box :class "music_cover_art" :vexpand "false" :hexpand "false" :style "background-image: url('${cover_art}');") + (box :orientation "v" :spacing 20 :space-evenly "false" :vexpand "false" :hexpand "false" + (label :halign "center" :class "music" :wrap "true" :limit-width 13 :text song) + (label :halign "center" :class "music_artist" :wrap "true" :limit-width 15 :text song_artist) + (box :orientation "h" :spacing 15 :halign "center" :space-evenly "false" :vexpand "false" :hexpand "false" + (button :class "music_btn_prev" :onclick "~/.config/eww/bar/scripts/music_info --prev" "") + (button :class "music_btn_play" :onclick "~/.config/eww/bar/scripts/music_info --toggle" song_status) + (button :class "music_btn_next" :onclick "~/.config/eww/bar/scripts/music_info --next" "")) + (box :class "music_bar" :halign "center" :vexpand "false" :hexpand "false" :space-evenly "false" + (scale :onscroll "mpc -q seek {}" :min 0 :active "true" :max 100 :value current_status))))) + + +;; music +(defwindow music_win :stacking "fg" :focusable "false" :screen 1 + :geometry (geometry :x "0" :y "7%" :width 428 :height 104 :anchor "top center") + (music_pop)) + diff --git a/.config/eww/bar/images/mic.png b/.config/eww/bar/images/mic.png new file mode 100644 index 0000000000000000000000000000000000000000..d77f315ac52ee020c5ad466458fda8f2daf09772 GIT binary patch literal 40034 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 ANdN!< literal 0 HcmV?d00001 diff --git a/.config/eww/bar/images/speaker.png b/.config/eww/bar/images/speaker.png new file mode 100644 index 0000000000000000000000000000000000000000..79e005b7b6be6fb60206777ac70bb0bd21cf266a GIT binary patch literal 16246 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 YEY0e5AZ!bGn*{_@)KDn7Z~5f^0iwb?A^-pY literal 0 HcmV?d00001 diff --git a/.config/eww/bar/scripts/battery b/.config/eww/bar/scripts/battery new file mode 100755 index 0000000..d2ad310 --- /dev/null +++ b/.config/eww/bar/scripts/battery @@ -0,0 +1,43 @@ +#!/bin/sh + +bat=/sys/class/power_supply/BAT0/ +per="$(cat "$bat/capacity")" + +icon() { + +[ $(cat "$bat/status") = Charging ] && echo "" && exit + +if [ "$per" -gt "90" ]; then + icon="" +elif [ "$per" -gt "80" ]; then + icon="" +elif [ "$per" -gt "70" ]; then + icon="" +elif [ "$per" -gt "60" ]; then + icon="" +elif [ "$per" -gt "50" ]; then + icon="" +elif [ "$per" -gt "40" ]; then + icon="" +elif [ "$per" -gt "30" ]; then + icon="" +elif [ "$per" -gt "20" ]; then + icon="" +elif [ "$per" -gt "10" ]; then + icon="" +elif [ "$per" -gt "0" ]; then + icon="" +else + echo  && exit +fi +echo "$icon" +} + +percent() { +echo $per +} + +[ "$1" = "icon" ] && icon && exit +[ "$1" = "percent" ] && percent && exit +exit + diff --git a/.config/eww/bar/scripts/indicator b/.config/eww/bar/scripts/indicator new file mode 100755 index 0000000..3946cf4 --- /dev/null +++ b/.config/eww/bar/scripts/indicator @@ -0,0 +1,14 @@ +#!/bin/bash + +query=$(xset q | grep -Po "(?:Caps|Num|Scroll)\s+Lock:\s*(\w*)" | grep -Po "(off|on)") + + +result="" +for i in $query +do + [ $i = "off" ] && result+="ﰊ "|| result+="ﰉ " +done + +# somehow results are shown reversed. So i am reversing them here to fix it +echo $result | rev | xargs + diff --git a/.config/eww/bar/scripts/layout b/.config/eww/bar/scripts/layout new file mode 100755 index 0000000..780105f --- /dev/null +++ b/.config/eww/bar/scripts/layout @@ -0,0 +1,9 @@ +#!/bin/bash +xprop -spy -root _XKB_RULES_NAMES | while read -r line; do + variant=$(echo $line | cut -d',' -f4 | tr -d '"') + if [[ "$variant" == " cdhpt" ]]; then + echo "" + else + echo "" + fi +done diff --git a/.config/eww/bar/scripts/music_info b/.config/eww/bar/scripts/music_info new file mode 100755 index 0000000..ffafe87 --- /dev/null +++ b/.config/eww/bar/scripts/music_info @@ -0,0 +1,98 @@ +#!/bin/bash +# scripts by adi1090x + +## Get data +STATUS="$(mpc status)" +COVER="/tmp/.music_cover.png" +MUSIC_DIR="$HOME/Music" + +## Get status +get_status() { + if [[ $STATUS == *"[playing]"* ]]; then + echo "" + else + echo "奈" + fi +} + +## Get song +get_song() { + song=`mpc -f %title% current` + if [[ -z "$song" ]]; then + echo "Offline" + else + echo "$song" + fi +} + +## Get artist +get_artist() { + artist=`mpc -f %artist% current` + if [[ -z "$artist" ]]; then + echo "" + else + echo "$artist" + fi +} + +## Get time +get_time() { + time=`mpc status | grep "%)" | awk '{print $4}' | tr -d '(%)'` + if [[ -z "$time" ]]; then + echo "0" + else + echo "$time" + fi +} +get_ctime() { + ctime=`mpc status | grep "#" | awk '{print $3}' | sed 's|/.*||g'` + if [[ -z "$ctime" ]]; then + echo "0:00" + else + echo "$ctime" + fi +} +get_ttime() { + ttime=`mpc -f %time% current` + if [[ -z "$ttime" ]]; then + echo "0:00" + else + echo "$ttime" + fi +} + +## Get cover +get_cover() { + ffmpeg -i "${MUSIC_DIR}/$(mpc current -f %file%)" "${COVER}" -y &> /dev/null + STATUS=$? + + # Check if the file has a embbeded album art + if [ "$STATUS" -eq 0 ];then + echo "$COVER" + else + echo "images/music.png" + fi +} + +## Execute accordingly +if [[ "$1" == "--song" ]]; then + get_song +elif [[ "$1" == "--artist" ]]; then + get_artist +elif [[ "$1" == "--status" ]]; then + get_status +elif [[ "$1" == "--time" ]]; then + get_time +elif [[ "$1" == "--ctime" ]]; then + get_ctime +elif [[ "$1" == "--ttime" ]]; then + get_ttime +elif [[ "$1" == "--cover" ]]; then + get_cover +elif [[ "$1" == "--toggle" ]]; then + mpc -q toggle +elif [[ "$1" == "--next" ]]; then + { mpc -q next; get_cover; } +elif [[ "$1" == "--prev" ]]; then + { mpc -q prev; get_cover; } +fi diff --git a/.config/eww/bar/scripts/pop b/.config/eww/bar/scripts/pop new file mode 100755 index 0000000..cc2f3ca --- /dev/null +++ b/.config/eww/bar/scripts/pop @@ -0,0 +1,92 @@ +#!/bin/bash + +calendar() { +LOCK_FILE="$HOME/.cache/eww-calendar.lock" +EWW_BIN="$HOME/scripts/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open calendar +} + +# Open widgets +if [[ ! -f "$LOCK_FILE" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close system music_win audio_ctl + touch "$LOCK_FILE" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close calendar + rm "$LOCK_FILE" && echo "closed" +fi +} + + +system() { +LOCK_FILE_MEM="$HOME/.cache/eww-system.lock" +EWW_BIN="$HOME/scripts/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open system +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_MEM" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close calendar music_win audio_ctl + touch "$LOCK_FILE_MEM" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close system + rm "$LOCK_FILE_MEM" && echo "closed" +fi +} + + +music() { +LOCK_FILE_SONG="$HOME/.cache/eww-song.lock" +EWW_BIN="$HOME/scripts/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open music_win +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_SONG" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close system calendar + touch "$LOCK_FILE_SONG" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close music_win + rm "$LOCK_FILE_SONG" && echo "closed" +fi +} + + + +audio() { +LOCK_FILE_AUDIO="$HOME/.cache/eww-audio.lock" +EWW_BIN="$HOME/scripts/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open audio_ctl +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close system calendar music + touch "$LOCK_FILE_AUDIO" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close audio_ctl + rm "$LOCK_FILE_AUDIO" && echo "closed" +fi +} + + +if [ "$1" = "calendar" ]; then +calendar +elif [ "$1" = "system" ]; then +system +elif [ "$1" = "music" ]; then +music +elif [ "$1" = "audio" ]; then +audio +fi diff --git a/.config/eww/bar/scripts/qtile b/.config/eww/bar/scripts/qtile new file mode 100755 index 0000000..ad8e24c --- /dev/null +++ b/.config/eww/bar/scripts/qtile @@ -0,0 +1,12 @@ +#!/bin/bash + +case "$1" in + switch) qtile cmd-obj -o group $2 -f toscreen + ;; + restart) qtile cmd-obj -o cmd -f restart + ;; + shutdown) qtile cmd-obj -o cmd -f shutdown + ;; +esac + + diff --git a/.config/eww/bar/scripts/wifi b/.config/eww/bar/scripts/wifi new file mode 100755 index 0000000..024994d --- /dev/null +++ b/.config/eww/bar/scripts/wifi @@ -0,0 +1,26 @@ +#!/bin/bash + +status=$(nmcli g | grep -oE "disconnected") +essid=$(nmcli c | grep wlan0 | awk '{print ($1)}') + +if [ $status ] ; then + icon="" + text="" + col="#575268" + +else + icon="" + text="${essid}" + col="#a1bdce" +fi + + + +if [[ "$1" == "--COL" ]]; then + echo $col +elif [[ "$1" == "--ESSID" ]]; then + echo $text +elif [[ "$1" == "--ICON" ]]; then + echo $icon +fi + diff --git a/.config/eww/bar/scripts/workspace b/.config/eww/bar/scripts/workspace new file mode 100755 index 0000000..ca6747a --- /dev/null +++ b/.config/eww/bar/scripts/workspace @@ -0,0 +1,6 @@ +#!/bin/bash +dir=`dirname $0` +python3 $dir/workspaces.py +tail -F -n1 ~/.cache/workspaces | while read -r; do + python3 $dir/workspaces.py +done diff --git a/.config/eww/bar/scripts/workspaces.py b/.config/eww/bar/scripts/workspaces.py new file mode 100644 index 0000000..082c3c5 --- /dev/null +++ b/.config/eww/bar/scripts/workspaces.py @@ -0,0 +1,53 @@ +from libqtile.command.client import CommandClient +c = CommandClient() + + +groups = {} + +for name, group in c.call('groups').items(): + if name == "scratchpad": + continue + occupied = len(group["windows"]) > 0 + focused = group['screen'] is not None + groups[name] = {"occupied": occupied, "focused": focused} + +output = '(box :class "works" :orientation "h" :spacing 5 :space-evenly "false" ' +for name, prop in groups.items(): + command = f"scripts/qtile switch {name}" + class_ = "0" + focused, occupied = prop['focused'], prop['occupied'] + if focused: + class_ += name * 2 + elif occupied: + class_ += name + + if occupied: + if name == "3": + class_ += " thunderbird" + elif name == "6": + class_ += " twitter" + elif name == "7": + class_ += " firefox" + elif name == "8": + class_ += " twitch" + elif name == "9": + class_ += " discord" + elif name == "0": + class_ += " telegram" + icons = { + "1": "1", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "", + "7": "", + "8": "既", + "9": "ﭮ", + "0": "", + } + icon = icons[name] + output += f'(button :onclick "{command}" :class "{class_}" "{icon}") ' + +output += ')' +print(output) diff --git a/.config/qtile/modules/hooks.py b/.config/qtile/modules/hooks.py index 0eff306..e39b293 100644 --- a/.config/qtile/modules/hooks.py +++ b/.config/qtile/modules/hooks.py @@ -1,7 +1,7 @@ import subprocess +import os from libqtile import hook -from libqtile.command.client import InteractiveCommandClient @hook.subscribe.startup @@ -9,12 +9,19 @@ def autostart(): subprocess.call(["autostart.sh"]) -@hook.subscribe.startup_complete -def focus_group(): - c = InteractiveCommandClient() - c.group["4"].toscreen() - - @hook.subscribe.client_managed def show_window(window): window.group.cmd_toscreen() + + +@hook.subscribe.client_managed +@hook.subscribe.client_urgent_hint_changed +@hook.subscribe.client_killed +@hook.subscribe.setgroup +@hook.subscribe.group_window_add +@hook.subscribe.current_screen_change +@hook.subscribe.changegroup +def hook_response(*args, **kwargs): + file = os.path.expanduser('~/.cache/workspaces') + with open(file, 'a') as f: + print('workspace changed', file=f) diff --git a/.config/qtile/modules/keys.py b/.config/qtile/modules/keys.py index 9e0a668..591d89d 100644 --- a/.config/qtile/modules/keys.py +++ b/.config/qtile/modules/keys.py @@ -50,7 +50,7 @@ keys = [ Key([mod], "l", lazy.layout.right(), desc="Move focus to right"), Key([mod], "j", lazy.layout.down(), desc="Move focus down"), Key([mod], "k", lazy.layout.up(), desc="Move focus up"), - Key([mod], "u", explore, desc="Move focus up"), + Key([mod], "u", explore, desc="Open app related with current group"), Key( [mod], "Tab", diff --git a/.config/qtile/modules/screens.py b/.config/qtile/modules/screens.py index 69ba000..cd3b860 100644 --- a/.config/qtile/modules/screens.py +++ b/.config/qtile/modules/screens.py @@ -1,163 +1,3 @@ -import re -import subprocess - -from subprocess import check_output - -from libqtile import bar, widget from libqtile.config import Screen -from libqtile.command import lazy -# from libqtile.log_utils import logger - - -def create_sep(): - return widget.Sep(foreground="707880", size_percent=60) - - -def run_shell_command(command): - def inner(): - res = check_output(command.split()).decode("utf-8").strip() - return res or " " - - return inner - - -class CapsNumScrollLockIndicator(widget.CapsNumLockIndicator): - def get_indicators(self): - """Return a list with the current state of the keys.""" - try: - output = self.call_process(["xset", "q"]) - except subprocess.CalledProcessError as err: - output = err.output - return [] - indicators = re.findall(r"(?:Caps|Num|Scroll)\s+Lock:\s*(\w*)", output) - return indicators - - def poll(self): - """Poll content for the text box.""" - indicators = self.get_indicators() - on, off = "ﰉ", "ﰊ" - status = " ".join(indicators) - status = status.replace("off", off).replace("on", on)[::-1] - # reversed because it cames backwards somehow. - return status - - -screens = [ - Screen( - top=bar.Bar( - [ - # widget.CurrentLayout(), - widget.GroupBox( - active="62AEEF", # Active group font colour - block_highlight_text_color="62AEFF", # Selected group font colour - disable_drag=True, # Disable dragging and dropping of group names on widget - font="Iosevka Nerd Font", - fontsize=20, - foreground="ff0000", # Foreground colour - highlight_color=[ - "373B41", - # "282828", - ], # Active group highlight color when using 'line' highlight method. - highlight_method="line", # Method of highlighting ('border', 'block', 'text', or 'line')Uses *_border color settings - inactive="707880", # Inactive group font colour - invert_mouse_wheel=True, # Whether to invert mouse wheel group movement - padding_x=8, # X Padding. Overrides 'padding' if set - ), - widget.Prompt(), - create_sep(), - widget.WindowName(), - widget.Chord( - chords_colors={ - "launch": ("#ff0000", "#ffffff"), - }, - name_transform=lambda name: name.upper(), - ), - widget.GenPollText( - func=run_shell_command("wgd"), - fontsize=23, - font="Iosevka Nerd Font", - foreground="62AEEF", - fmt=" {}", - update_interval=1, - mouse_callbacks={"Button1": lazy.spawn("wgd --toggle")}, - ), - create_sep(), - widget.GenPollText( - func=run_shell_command("rofi-bluetooth --status"), - fontsize=18, - font="Iosevka Nerd Font", - foreground="62AEEF", - update_interval=1, - mouse_callbacks={"Button1": lazy.spawn("rofi-bluetooth")}, - ), - create_sep(), - widget.PulseVolume( - emoji=True, - limit_max_volume=True, - step=4, - update_interval=0.1, - fmt='VOL {}', - ), - create_sep(), - widget.KeyboardLayout( - configured_keyboards=["us cdhpt", "us cdhisopt"], - font="Iosevka Nerd Font Mono", - fontsize=23, - display_map={"us cdhpt": "", "us cdhisopt": ""}, - foreground="62AEFF", - ), - CapsNumScrollLockIndicator(update_interval=0.5, foreground="62AEFF"), - create_sep(), - widget.WidgetBox( - widgets=[ - widget.DF( - visible_on_warn=False, - format='{p} {r:.0f}%', - ), - create_sep(), - widget.Memory( - fmt='RAM {}', - format="{MemPercent: .0f}%", - ), - create_sep(), - widget.CPU( - format="{load_percent: .0f}%", - fmt='CPU {}', - ), - create_sep(), - ], - text_closed="[S<]", - text_open="[S>]", - foreground="62AEEF", - close_button_location="right", - ), - widget.WidgetBox( - widgets=[ - widget.Net(interface=["enp3s0"]), - widget.Wlan(format="{essid} {percent:2.0%}"), - create_sep(), - ], - text_closed="[N<]", - text_open="[N>]", - foreground="62AEEF", - close_button_location="right", - ), - widget.Battery(format="{char} {percent:2.0%} {hour:d}:{min:02d}"), - widget.Clock(format="%Y-%m-%d %a %I:%M %p"), - widget.Systray(), - ], - size=30, - background="#282A2E", - border_width=[0, 0, 0, 0], - margin=[4, 4, 4, 4], - border_color=[ - "000000", - "000000", - "000000", - "000000", - ], - opacity=0.95, - ), - ), -] +screens = [Screen()] diff --git a/.gitmodules b/.gitmodules index 3bdbfb9..930fb67 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,9 +4,11 @@ [submodule ".config/nvim"] path = .config/nvim url = https://github.com/Asocia/nvim-config.git -[submodule "GitRepositories/rofi-bluetooth"] - path = GitRepositories/rofi-bluetooth - url = https://github.com/nickclyde/rofi-bluetooth.git [submodule "GitRepositories/polybar-wireguard"] path = GitRepositories/polybar-wireguard url = https://github.com/mil-ad/polybar-wireguard.git + ignore = dirty +[submodule "GitRepositories/rofi-bluetooth"] + path = GitRepositories/rofi-bluetooth + url = https://github.com/nickclyde/rofi-bluetooth.git + ignore = dirty diff --git a/GitRepositories/patches/polybar-wireguard/wireguard.patch b/GitRepositories/patches/polybar-wireguard/wireguard.patch index f1023b0..48dcabc 100644 --- a/GitRepositories/patches/polybar-wireguard/wireguard.patch +++ b/GitRepositories/patches/polybar-wireguard/wireguard.patch @@ -1,18 +1,64 @@ diff --git a/polybar-wireguard b/polybar-wireguard -index 6712185..b770d44 100755 +deleted file mode 100755 +index 6712185..0000000 --- a/polybar-wireguard -+++ b/polybar-wireguard -@@ -6,11 +6,11 @@ - # https://github.com/polybar/polybar/wiki/Formatting#format-tags-inside-polybar-config - green=#55aa55 - ++++ /dev/null +@@ -1,58 +0,0 @@ +-#!/usr/bin/env sh +- +-# Unfortunately it's not easy to directly use Polybar colour values in this +-# script so I have to redefine some of my colours here. See the link below for +-# more details: +-# https://github.com/polybar/polybar/wiki/Formatting#format-tags-inside-polybar-config +-green=#55aa55 +- -configs_path="/PATH/TO/CONF/FILES" -+configs_path="$HOME/.config/wireguard" - connected_interface=$(sudo wg | grep interface | cut -d " " -f2) - - connect() { +-connected_interface=$(sudo wg | grep interface | cut -d " " -f2) +- +-connect() { - selected_config=$(ls $configs_path/*.conf | xargs basename -a -s .conf | dmenu) -+ selected_config=$(ls $configs_path/*.conf | xargs basename -a -s .conf | rofi -i -dmenu -p "Connect to: ") - [[ $selected_config ]] && sudo wg-quick up "$configs_path"/"$selected_config".conf - } - +- [[ $selected_config ]] && sudo wg-quick up "$configs_path"/"$selected_config".conf +-} +- +-disconnect() { +- # Normally we should have a single connected interface but technically +- # there's nothing stopping us from having multiple active intgerfaces so +- # let's do this in a loop: +- for connected_config in $(sudo wg | grep interface | cut -d " " -f2) +- do +- sudo wg-quick down $configs_path/"$connected_config".conf +- done +-} +- +-toggle() { +- if [[ $connected_interface ]] +- then +- disconnect +- else +- connect +- fi +-} +- +-print() { +- if [[ $connected_interface ]] +- then +- echo %{u"$green"}%{+u}%{T4}%{F"$green"}%{T-}%{F-} "$connected_interface" +- else +- echo %{T4}%{T-} +- fi +-} +- +-case "$1" in +- --connect) +- connect +- ;; +- --disconnect) +- disconnect +- ;; +- --toggle) +- toggle +- ;; +- *) +- print +- ;; +-esac diff --git a/GitRepositories/patches/rofibluetooth/dontshowmenu.patch b/GitRepositories/patches/rofi-bluetooth/dontshowmenu.patch similarity index 74% rename from GitRepositories/patches/rofibluetooth/dontshowmenu.patch rename to GitRepositories/patches/rofi-bluetooth/dontshowmenu.patch index af3ad62..1d8e91b 100644 --- a/GitRepositories/patches/rofibluetooth/dontshowmenu.patch +++ b/GitRepositories/patches/rofi-bluetooth/dontshowmenu.patch @@ -1,5 +1,5 @@ diff --git a/rofi-bluetooth b/rofi-bluetooth -index 5c52fd8..cebb5c1 100755 +index 5c52fd8..012e612 100755 --- a/rofi-bluetooth +++ b/rofi-bluetooth @@ -33,7 +33,6 @@ power_on() { @@ -51,3 +51,21 @@ index 5c52fd8..cebb5c1 100755 fi } +@@ -183,8 +175,6 @@ toggle_trust() { + # Useful for status bars like polybar, etc. + print_status() { + if power_on; then +- printf '' +- + mapfile -t paired_devices < <(bluetoothctl paired-devices | grep Device | cut -d ' ' -f 2) + counter=0 + +@@ -202,8 +192,6 @@ print_status() { + fi + done + printf "\n" +- else +- echo "" + fi + } + diff --git a/scripts/autostart.sh b/scripts/autostart.sh index 38cc434..31db8a1 100755 --- a/scripts/autostart.sh +++ b/scripts/autostart.sh @@ -9,7 +9,11 @@ function run { #feh --bg-scale /usr/share/endeavouros/backgrounds/endeavouros-wallpaper.png +rm ~/.cache/workspaces nitrogen --save --set-zoom-fill ~/Pictures/Wallpapers/default.jpg run picom & disown # --experimental-backends --vsync should prevent screen tearing on most setups if needed +eww -c ~/.config/eww/bar/ close-all +eww -c ~/.config/eww/bar/ open bar + /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & disown # start polkit agent from GNOME diff --git a/scripts/polybar-wireguard b/scripts/polybar-wireguard deleted file mode 120000 index 17cb428..0000000 --- a/scripts/polybar-wireguard +++ /dev/null @@ -1 +0,0 @@ -/home/sahin/GitRepositories/polybar-wireguard/polybar-wireguard \ No newline at end of file diff --git a/scripts/rofi-wireguard b/scripts/rofi-wireguard new file mode 120000 index 0000000..c4872d8 --- /dev/null +++ b/scripts/rofi-wireguard @@ -0,0 +1 @@ +/home/sahin/GitRepositories/rofi-wireguard/rofi-wireguard \ No newline at end of file