diff --git a/README.org b/README.org index e9701ab..c0d5a8a 100644 --- a/README.org +++ b/README.org @@ -420,7 +420,7 @@ pulsemixer any-nix-shell wtype xdotool -ydotool +#ydotool wmctrl xcape xclip @@ -499,6 +499,11 @@ Let's also add our own package from my WIP presenter (libsForQt5.callPackage /home/chris/dev/church-presenter {}) #+end_src +#+NAME: ydotool +#+begin_src nix +(callPackage /home/chris/.dotfiles/ydotool {}) +#+end_src + Firefox has it's own setup #+NAME: firefox #+begin_src nix @@ -1040,6 +1045,7 @@ Kaladin is my desktop machine. A powerhouse for the most part with a recent i7 a protonup nvtop # Dev tools + <> <> <> ]; diff --git a/bpytop/btop.conf b/bpytop/btop.conf index b9b96fe..a8011f5 100644 --- a/bpytop/btop.conf +++ b/bpytop/btop.conf @@ -1,4 +1,4 @@ -#? Config file for btop v. 1.2.12 +#? Config file for btop v. 1.2.13 #* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. #* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" @@ -16,7 +16,7 @@ force_tty = False #* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. #* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box. -#* Use withespace " " as separator between different presets. +#* Use whitespace " " as separator between different presets. #* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty" presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty" diff --git a/eww/eww.scss b/eww/eww.scss index e69de29..41d7473 100644 --- a/eww/eww.scss +++ b/eww/eww.scss @@ -0,0 +1,446 @@ +/** EWW.SCSS +Created by saimoom **/ +*{ + all: unset; + font-family: feather; + font-family: DaddyTimeMono NF; +} + +/** 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: 16; + 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; +} + + +.membar { + color: #e0b089; + background-color: #38384d; + border-radius: 10px; +} +.batbar { + color: #afbea2; + background-color: #38384d; + border-radius: 10px; +} +.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-wif { + font-size: 22; + color: #a1bdce; + border-radius: 100%; + margin: 0px 10px 0px 5px; +} + +.iconmem { + color: #e0b089; +} +.iconbat { + color: #afbea2; +} +.iconbat, .iconmem { + 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 { + background-color: #0f0f17; + border-radius: 16px; + margin: 0px 10px 0px 3px; + } +.bat_module { + background-color: #0f0f17; + border-radius: 16px; + margin: 0px 10px 0px 10px; + } + + +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-weight: normal; +margin: 5px 0px 0px 20px; +background-color: #0f0f17; +} + +.0 , .01, .02, .03, .04, .05, .06, +.011, .022, .033, .044, .055, .066{ + margin: 0px 10px 0px 0px; +} + +/* Unoccupied */ +.0 { +color: #3e424f; +} + +/* Occupied */ +.01, .02, .03, .04, .05, .06 { + color: #bfc9db; +} + +/* Focused */ +.011, .022, .033, .044, .055, .066 { + color: #a1bdce; +} + + +.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; + } + } +} + +calender { + color: #bfc9db; +} +calendar:selected { + color: #a1bdce; +} + +calendar.header { +color: #a1bdce; +font-weight: bold; +} + +calendar.button { +color: #afbea2; +} + +calendar.highlight { +color: #a1bdce; +font-weight: bold; +} + +calendar:indeterminate { +color: #bfc9db; +} + + + + + + + +.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; +} diff --git a/eww/eww.yuck b/eww/eww.yuck index aac2b39..f1beebc 100644 --- a/eww/eww.yuck +++ b/eww/eww.yuck @@ -1,23 +1,350 @@ -(defwindow example - :monitor 0 - :geometry (geometry :x "0%" - :y "80px" - :width "20%" - :height "60px" - :anchor "top center") - :stacking "fg" - :windowtype "dialog" - :wm-ignore true - volslider) +;; Variables +(defpoll clock_time :interval "5m" "date +\%I") +(defpoll clock_minute :interval "5s" "date +\%M") +(defpoll clock_date :interval "10h" "date '+%d/%m'") +(defpoll volume_percent :interval "3s" "amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") +(defpoll mic_percent :interval "3s" "amixer -D pulse sget Capture | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") +(defpoll brightness_percent :interval "5s" "brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}' | tr -d '%'") +(defpoll battery :interval "15s" "./scripts/battery --bat") +(defpoll battery_status :interval "1m" "./scripts/battery --bat-st") +(defpoll memory :interval "15s" "scripts/memory") +(defpoll memory_used_mb :interval "2m" "scripts/mem-ad used") +(defpoll memory_total_mb :interval "2m" "scripts/mem-ad total") +(defpoll memory_free_mb :interval "2m" "scripts/mem-ad free") +(defvar vol_reveal false) +(defvar br_reveal false) +(defvar music_reveal false) +(defvar wifi_rev false) +(defvar time_rev false) +(deflisten workspace "scripts/workspace") -(deflisten volume - :initial "getvol" - 'tail -F /tmp/vol') +(defvar eww "$HOME/.local/bin/eww/eww -c $HOME/.config/eww/bar") -;; (defwidget volslider [] -;; (box :orientation "horizontal" -;; :halign "center" -;; volume -;; (scale :value volume -;; :min 0 -;; :max 100))) + +(defpoll COL_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --COL") +(defpoll ESSID_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --ESSID") +(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") + +(defpoll calendar_day :interval "20h" "date '+%d'") +(defpoll calendar_year :interval "20h" "date '+%Y'") + +;; 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 "slideright" + :reveal wifi_rev + :duration "350ms" + (label :class "module_essid" + :text ESSID_WLAN + :orientation "h" + ))))) + + +(defwidget workspaces [] + (literal :content workspace)) + + +(defwidget bat [] + (box :class "bat_module" :vexpand "false" :hexpand "false" + (circular-progress :value battery + :class "batbar" + :thickness 4 + (button + :class "iconbat" + :limit-width 2 + :tooltip "battery on ${battery}%" + :show_truncated false + :onclick "$HOME/.config/eww/bar/scripts/pop system" + :wrap false + "")))) + + +(defwidget mem [] + (box :class "mem_module" :vexpand "false" :hexpand "false" + (circular-progress :value memory + :class "membar" + :thickness 4 + (button + :class "iconmem" + :limit-width 2 + :tooltip "using ${memory}% ram" + :onclick "$HOME/.config/eww/bar/scripts/pop system" + :show_truncated false + :wrap false + "")))) + + + +(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" "") + (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 {}%" ))))) + + + + ;; 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" :wrap "true" :onclick "~/.config/eww/bar/scripts/pop music" song) + (revealer :transition "slideright" + :reveal music_reveal + :duration "350ms" + (box :vexpand "false" :hexpand "false" :oreintation "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" +(bright) +(volume) +(wifi) +(sep) +(bat) +(mem) +(sep) +(clock_module))) + + +(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 bar_1 [] + (box :class "bar_class" + :orientation "h" + (right) + (center) + (left) + )) + +(defwindow bar + :monitor 1 + :geometry (geometry :x "0%" + :y "9px" + :width "98%" + :height "30px" + :anchor "top center") + :stacking "bottom" + :exclusize true + (bar_1)) + +(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 battery + :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 "${battery}%" + :halign "start" + :class "sys_text_bat_sub" + :limit-width 22 + :show_truncated false + :wrap false) + (label :text "${battery_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 memory + :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 "${memory_used_mb} | ${memory_total_mb}mb " + :halign "start" + :class "sys_text_mem_sub" + :limit-width 22 + :show_truncated false + :wrap false) + (label :text "${memory_free_mb}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" + :day calendar_day + :year calendar_year)))) + +(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/eww/images/mic.png b/eww/images/mic.png new file mode 100644 index 0000000..d77f315 Binary files /dev/null and b/eww/images/mic.png differ diff --git a/eww/images/music.png b/eww/images/music.png new file mode 100644 index 0000000..11804f5 Binary files /dev/null and b/eww/images/music.png differ diff --git a/eww/images/profile.png b/eww/images/profile.png new file mode 100644 index 0000000..0190a36 Binary files /dev/null and b/eww/images/profile.png differ diff --git a/eww/images/speaker.png b/eww/images/speaker.png new file mode 100644 index 0000000..79e005b Binary files /dev/null and b/eww/images/speaker.png differ diff --git a/eww/scripts/battery b/eww/scripts/battery new file mode 100755 index 0000000..0540a1b --- /dev/null +++ b/eww/scripts/battery @@ -0,0 +1,17 @@ +#!/bin/bash + +battery() { + BAT=`ls /sys/class/power_supply | grep BAT | head -n 1` + cat /sys/class/power_supply/${BAT}/capacity +} +battery_stat() { + BAT=`ls /sys/class/power_supply | grep BAT | head -n 1` + cat /sys/class/power_supply/${BAT}/status +} + +if [[ "$1" == "--bat" ]]; then + battery +elif [[ "$1" == "--bat-st" ]]; then + battery_stat +fi + diff --git a/eww/scripts/mem-ad b/eww/scripts/mem-ad new file mode 100755 index 0000000..1e4cf89 --- /dev/null +++ b/eww/scripts/mem-ad @@ -0,0 +1,15 @@ +#!/bin/sh + + +total="$(free -m | grep Mem: | awk '{ print $2 }')" +used="$(free -m | grep Mem: | awk '{ print $3 }')" + +free=$(expr $total - $used) + +if [ "$1" = "total" ]; then + echo $total +elif [ "$1" = "used" ]; then + echo $used +elif [ "$1" = "free" ]; then + echo $free +fi diff --git a/eww/scripts/memory b/eww/scripts/memory new file mode 100755 index 0000000..217c834 --- /dev/null +++ b/eww/scripts/memory @@ -0,0 +1,3 @@ +#!/bin/sh + +printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}') diff --git a/eww/scripts/music_info b/eww/scripts/music_info new file mode 100755 index 0000000..ffafe87 --- /dev/null +++ b/eww/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/eww/scripts/pop b/eww/scripts/pop new file mode 100755 index 0000000..aef82e8 --- /dev/null +++ b/eww/scripts/pop @@ -0,0 +1,92 @@ +#!/bin/bash + +calendar() { +LOCK_FILE="$HOME/.cache/eww-calendar.lock" +EWW_BIN="$HOME/.local/bin/eww/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/.local/bin/eww/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/.local/bin/eww/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/.local/bin/eww/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/eww/scripts/wifi b/eww/scripts/wifi new file mode 100755 index 0000000..5d7cc59 --- /dev/null +++ b/eww/scripts/wifi @@ -0,0 +1,26 @@ +#!/bin/bash + +status=$(nmcli g | grep -oE "disconnected") +essid=$(nmcli c | grep wlp2s0 | 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/eww/scripts/workspace b/eww/scripts/workspace new file mode 100755 index 0000000..f202ef1 --- /dev/null +++ b/eww/scripts/workspace @@ -0,0 +1,56 @@ +#!/bin/sh +workspaces() { + +ws1="1" +ws2="2" +ws3="3" +ws4="4" +ws5="5" +ws6="6" + +# Unoccupied +un="0" + +# check if Occupied +o1=$(bspc query -D -d .occupied --names | grep "$ws1" ) +o2=$(bspc query -D -d .occupied --names | grep "$ws2" ) +o3=$(bspc query -D -d .occupied --names | grep "$ws3" ) +o4=$(bspc query -D -d .occupied --names | grep "$ws4" ) +o5=$(bspc query -D -d .occupied --names | grep "$ws5" ) +o6=$(bspc query -D -d .occupied --names | grep "$ws6" ) + +# check if Focused +f1=$(bspc query -D -d focused --names | grep "$ws1" ) +f2=$(bspc query -D -d focused --names | grep "$ws2" ) +f3=$(bspc query -D -d focused --names | grep "$ws3" ) +f4=$(bspc query -D -d focused --names | grep "$ws4" ) +f5=$(bspc query -D -d focused --names | grep "$ws5" ) +f6=$(bspc query -D -d focused --names | grep "$ws6" ) + +ic_1="" +ic_2="" +ic_3="" +ic_4="" +ic_5="" +ic_6="" +if [ $f1 ]; then + ic_1="" +elif [ $f2 ]; then + ic_2="" +elif [ $f3 ]; then + ic_3="" +elif [ $f4 ]; then + ic_4="" +elif [ $f5 ]; then + ic_5="" +elif [ $f6 ]; then + ic_6="" +fi + +echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"bspc desktop -f $ws1\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"bspc desktop -f $ws2\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"bspc desktop -f $ws3\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"bspc desktop -f $ws4\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"bspc desktop -f $ws5\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"bspc desktop -f $ws6\" :class \"$un$o6$f6\" \"$ic_6\"))" + +} +workspaces +bspc subscribe desktop node_transfer | while read -r _ ; do +workspaces +done diff --git a/scripts/kderofi-rbw b/scripts/kderofi-rbw index bcded99..867a937 100755 --- a/scripts/kderofi-rbw +++ b/scripts/kderofi-rbw @@ -69,16 +69,16 @@ fi case ${option} in Password ) echo "${SECRET}" - ydotool type --key-delay 6ms $(rbw get "${SECRET}") + ydotool type --key-delay 2ms $(rbw get "${SECRET}") ;; User ) echo "$(rbw get --full "${SECRET}" | rg Username: | awk '{print $2}')" - ydotool type --key-delay 6ms "$(rbw get --full "${SECRET}" | rg Username: | awk '{print $2}')" + ydotool type --key-delay 2ms "$(rbw get --full "${SECRET}" | rg Username: | awk '{print $2}')" ;; "User and password" ) - ydotool type --key-delay 6ms $(rbw get --full "${SECRET}" | rg Username: | awk '{print $2}') + ydotool type --key-delay 2ms $(rbw get --full "${SECRET}" | rg Username: | awk '{print $2}') ydotool key 15:1 15:0 - ydotool type --key-delay 6ms $(rbw get "${SECRET}") + ydotool type --key-delay 2ms $(rbw get "${SECRET}") ;; "QR-Code" ) if [[ $SECRET =~ wifi$ ]]; then @@ -93,7 +93,7 @@ case ${option} in fi ;; OTP ) - ydotool type --key-delay 6ms $(rbw code "${SECRET}") + ydotool type --key-delay 2ms $(rbw code "${SECRET}") ;; esac diff --git a/system/kaladin/configuration.nix b/system/kaladin/configuration.nix index da6d656..c9451d4 100644 --- a/system/kaladin/configuration.nix +++ b/system/kaladin/configuration.nix @@ -305,7 +305,7 @@ any-nix-shell wtype xdotool - ydotool + #ydotool wmctrl xcape xclip @@ -344,6 +344,7 @@ protonup nvtop # Dev tools + (callPackage /home/chris/.dotfiles/ydotool {}) # android-tools nix-index meson diff --git a/system/syl/configuration.nix b/system/syl/configuration.nix index 4b7b0ec..924de1b 100644 --- a/system/syl/configuration.nix +++ b/system/syl/configuration.nix @@ -324,7 +324,7 @@ any-nix-shell wtype xdotool - ydotool + #ydotool wmctrl xcape xclip diff --git a/ydotool/default.nix b/ydotool/default.nix new file mode 100644 index 0000000..50fb78d --- /dev/null +++ b/ydotool/default.nix @@ -0,0 +1,29 @@ +{ lib, stdenv, fetchFromGitHub, cmake, scdoc, util-linux }: + +stdenv.mkDerivation rec { + pname = "ydotool"; + version = "1.0.2"; + + src = fetchFromGitHub { + owner = "ReimuNotMoe"; + repo = "ydotool"; + rev = "1d5d227e3a6dc9b70147960e99f17695d9f6804e"; + sha256 = "sha256-maXXGCqB8dkGO8956hsKSwM4HQdYn6z1jBFENQ9sKcA="; + }; + + strictDeps = true; + nativeBuildInputs = [ cmake scdoc ]; + + postInstall = '' + substituteInPlace ${placeholder "out"}/lib/systemd/user/ydotool.service \ + --replace /usr/bin/kill "${util-linux}/bin/kill" + ''; + + meta = with lib; { + homepage = "https://github.com/ReimuNotMoe/ydotool"; + description = "Generic Linux command-line automation tool"; + license = licenses.agpl3Plus; + maintainers = with maintainers; [ willibutz kraem ]; + platforms = with platforms; linux; + }; +}