This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

superconfig / 5pkgs / q / default.nix
8.4 kB 286 lines
1{ pkgs, ... }: 2let 3 q-cal = let 4 # XXX 23 is the longest line of cal's output 5 pad = ''{ 6 ${pkgs.gnused}/bin/sed ' 7 # rtrim 8 s/ *$// 9 10 # delete last empty line 11 ''${/^$/d} 12 ' \ 13 | ${pkgs.gawk}/bin/awk '{printf "%-23s\n", $0}' \ 14 | ${pkgs.gnused}/bin/sed ' 15 # colorize header 16 1,2s/.*/&/ 17 18 # colorize week number 19 s/^[ 1-9][0-9]/&/ 20 ' 21 }''; 22 in '' 23 ${pkgs.coreutils}/bin/paste \ 24 <(${pkgs.util-linux}/bin/cal -mw \ 25 $(${pkgs.coreutils}/bin/date +'%m %Y' -d 'last month') \ 26 | ${pad} 27 ) \ 28 <(${pkgs.util-linux}/bin/cal -mw \ 29 | ${pkgs.gnused}/bin/sed ' 30 # colorize day of month 31 s/\(^\| \)'"$(${pkgs.coreutils}/bin/date +%e)"'\>/&/ 32 ' \ 33 | ${pad} 34 ) \ 35 <(${pkgs.util-linux}/bin/cal -mw \ 36 $(${pkgs.coreutils}/bin/date +'%m %Y' -d 'next month') \ 37 | ${pad} 38 ) \ 39 | ${pkgs.gnused}/bin/sed 's/\t/ /g' 40 ''; 41 42 q-isodate = '' 43 ${pkgs.coreutils}/bin/date \ 44 '+%Y-%m-%dT%H:%M:%S%:z' 45 ''; 46 47 q-gitdir = '' 48 if test -d .git; then 49 #git status --porcelain 50 branch=$( 51 ${pkgs.git}/bin/git branch \ 52 | ${pkgs.gnused}/bin/sed -rn 's/^\* (.*)/\1/p' 53 ) 54 echo "± $LOGNAME@''${HOSTNAME-$(${pkgs.nettools}/bin/hostname)}:$PWD .git $branch" 55 fi 56 ''; 57 58 q-intel_backlight = '' 59 cd /sys/class/backlight/intel_backlight 60 </dev/null exec ${pkgs.gawk}/bin/awk ' 61 END { 62 getline actual_brightness < "actual_brightness" 63 getline max_brightness < "max_brightness" 64 getline brightness < "brightness" 65 printf "intel_backlight %d%% %d/%d\n" \ 66 , actual_brightness / max_brightness * 100 \ 67 , actual_brightness \ 68 , max_brightness 69 } 70 ' 71 ''; 72 73 q-power_supply = let 74 power_supply = pkgs.writeBash "power_supply" '' 75 set -efu 76 uevent=$1 77 eval "$(${pkgs.gnused}/bin/sed -n ' 78 s/^\([A-Z_]\+=[0-9A-Za-z_-]*\)$/export \1/p 79 ' $uevent)" 80 case $POWER_SUPPLY_NAME in 81 AC) 82 exit # not battery 83 ;; 84 esac 85 exec </dev/null 86 exec ${pkgs.gawk}/bin/awk ' 87 function die(s) { 88 printf "%s: %s\n", name, s 89 exit 1 90 } 91 92 function print_hm(h, m) { 93 m = (h - int(h)) * 60 94 return sprintf("%dh%dm", h, m) 95 } 96 97 function print_bar(n, r, t1, t2, t_col) { 98 t1 = int(r * n) 99 t2 = n - t1 100 if (r >= .42) t_col = "1;32" 101 else if (r >= 23) t_col = "1;33" 102 else if (r >= 11) t_col = "1;31" 103 else t_col = "5;1;31" 104 return sgr(t_col) strdup("■", t1) sgr(";30") strdup("■", t2) sgr() 105 } 106 107 function sgr(p) { 108 return "\x1b[" p "m" 109 } 110 111 function strdup(s,n,t) { 112 t = sprintf("%"n"s","") 113 gsub(/ /,s,t) 114 return t 115 } 116 117 END { 118 name = ENVIRON["POWER_SUPPLY_NAME"] 119 120 charge_unit = "Ah" 121 charge_now = ENVIRON["POWER_SUPPLY_CHARGE_NOW"] / 10^6 122 charge_full = ENVIRON["POWER_SUPPLY_CHARGE_FULL"] / 10^6 123 124 current_unit = "A" 125 current_now = ENVIRON["POWER_SUPPLY_CURRENT_NOW"] / 10^6 126 127 energy_unit = "Wh" 128 energy_now = ENVIRON["POWER_SUPPLY_ENERGY_NOW"] / 10^6 129 energy_full = ENVIRON["POWER_SUPPLY_ENERGY_FULL"] / 10^6 130 131 power_unit = "W" 132 power_now = ENVIRON["POWER_SUPPLY_POWER_NOW"] / 10^6 133 134 voltage_unit = "V" 135 voltage_now = ENVIRON["POWER_SUPPLY_VOLTAGE_NOW"] / 10^6 136 voltage_min_design = ENVIRON["POWER_SUPPLY_VOLTAGE_MIN_DESIGN"] / 10^6 137 138 #printf "charge_now: %s\n", charge_now 139 #printf "charge_full: %s\n", charge_full 140 #printf "current_now: %s\n", current_now 141 #printf "energy_now: %s\n", energy_now 142 #printf "energy_full: %s\n", energy_full 143 #printf "energy_full: %s\n", ENVIRON["POWER_SUPPLY_ENERGY_FULL"] 144 #printf "energy_full: %s\n", ENVIRON["POWER_SUPPLY_ENERGY_FULL"] / 10^6 145 #printf "power_now: %s\n", power_now 146 #printf "voltage_now: %s\n", voltage_now 147 148 if (current_now == 0 && voltage_now != 0) { 149 current_now = power_now / voltage_now 150 } 151 if (power_now == 0) { 152 power_now = current_now * voltage_now 153 } 154 if (charge_now == 0 && voltage_min_design != 0) { 155 charge_now = energy_now / voltage_min_design 156 } 157 if (energy_now == 0) { 158 energy_now = charge_now * voltage_min_design 159 } 160 if (charge_full == 0 && voltage_min_design != 0) { 161 charge_full = energy_full / voltage_min_design 162 } 163 if (energy_full == 0) { 164 energy_full = charge_full * voltage_min_design 165 } 166 167 if (charge_now == 0 || charge_full == 0) { 168 die("unknown charge") 169 } 170 171 charge_ratio = charge_now / charge_full 172 173 out = out name 174 out = out sprintf(" %s", print_bar(10, charge_ratio)) 175 out = out sprintf(" %d%", charge_ratio * 100) 176 out = out sprintf(" %.2f%s", charge_now, charge_unit) 177 if (current_now != 0) { 178 out = out sprintf("/%.1f%s", current_now, current_unit) 179 } 180 out = out sprintf(" %d%s", energy_full, energy_unit) 181 if (power_now != 0) { 182 out = out sprintf("/%.1f%s", power_now, power_unit) 183 } 184 if (current_now != 0) { 185 out = out sprintf(" %s", print_hm(charge_now / current_now)) 186 } 187 188 print out 189 } 190 ' 191 ''; 192 in '' 193 for uevent in /sys/class/power_supply/*/uevent; do 194 ${power_supply} "$uevent" || : 195 done 196 ''; 197 198 q-virtualization = '' 199 echo "VT: $(${pkgs.systemd}/bin/systemd-detect-virt)" 200 ''; 201 202 q-wireless = '' 203 for dev in $( 204 ${pkgs.iw}/bin/iw dev \ 205 | ${pkgs.gnused}/bin/sed -n 's/^\s*Interface\s\+\([0-9a-z]\+\)$/\1/p' 206 ); do 207 inet=$(${pkgs.iproute2}/bin/ip addr show $dev \ 208 | ${pkgs.gnused}/bin/sed -n ' 209 s/.*inet \([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/p 210 ') \ 211 || unset inet 212 ssid=$(${pkgs.iw}/bin/iw dev $dev link \ 213 | ${pkgs.gnused}/bin/sed -n ' 214 s/.*\tSSID: \(.*\)/\1/p 215 ') \ 216 || unset ssid 217 echo "$dev''${inet+ $inet}''${ssid+ $ssid}" 218 done 219 ''; 220 221 q-online = '' 222 if ${pkgs.curl}/bin/curl -s google.com >/dev/null; then 223 echo 'online' 224 else 225 echo offline 226 fi 227 ''; 228 229 q-thermal_zone = '' 230 for i in /sys/class/thermal/thermal_zone*; do 231 type=$(${pkgs.coreutils}/bin/cat $i/type) 232 temp=$(${pkgs.coreutils}/bin/cat $i/temp) 233 printf '%s %s°C\n' $type $(echo $temp / 1000 | ${pkgs.bc}/bin/bc) 234 done 235 ''; 236 237 q-todo = '' 238 TODO_file=$HOME/TODO 239 if test -e "$TODO_file"; then 240 ${pkgs.coreutils}/bin/cat "$TODO_file" \ 241 | ${pkgs.gawk}/bin/gawk -v now=$(${pkgs.coreutils}/bin/date +%s) ' 242 BEGIN { print "remind=0" } 243 /^[0-9]/{ 244 x = $1 245 gsub(".", "\\\\&", x) 246 rest = substr($0, index($0, " ")) 247 rest = $0 248 sub(" *", "", rest) 249 gsub(".", "\\\\&", rest) 250 print "test $(${pkgs.coreutils}/bin/date +%s -d"x") -lt "now" && \ 251 echo \"\x1b[38;5;208m\""rest esc "\"\x1b[m\" && \ 252 (( remind++ ))" 253 } 254 END { print "test $remind = 0 && echo \"nothing to remind\"" } 255 ' \ 256 | { 257 # bash needed for (( ... )) 258 ${pkgs.bash}/bin/bash 259 } 260 else 261 echo "$TODO_file: no such file or directory" 262 fi 263 ''; 264 265in 266# bash needed for <(...) 267pkgs.writeBashBin "q" '' 268 set -eu 269 export PATH=/var/empty 270 (${q-todo}) || : 271 if [ "$PWD" != "$HOME" ]; then 272 (HOME=$PWD; ${q-todo}) || : 273 fi 274 echo 275 ${q-cal} 276 echo 277 ${q-isodate} 278 (${q-gitdir}) & 279 (${q-intel_backlight}) & 280 (${q-power_supply}) & 281 (${q-virtualization}) & 282 (${q-wireless}) & 283 (${q-online}) & 284 (${q-thermal_zone}) & 285 wait 286''