about summary refs log tree commit diff
path: root/modules
diff options
context:
space:
mode:
authoraszlig <aszlig@redmoonstudios.org>2014-05-02 04:01:31 +0200
committeraszlig <aszlig@redmoonstudios.org>2014-05-02 04:04:04 +0200
commitacf89574ebc2bed0843fe818bc49a6e8fc994d16 (patch)
tree1cb00e4fa2db4da14a140d9c7fcfe264f54a5070 /modules
parent139e36a39353d9821e773743ed4e796d8c96a58d (diff)
i3/conky: Autodetect CPU load and temperature.
Device ordering is something that can vastly differ from system to
system, so we're detecting the available CPUs on conky startup and pass
the corresponding hwmon/cpu expressions to -t.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Diffstat (limited to 'modules')
-rw-r--r--modules/i3/conky.nix51
1 files changed, 27 insertions, 24 deletions
diff --git a/modules/i3/conky.nix b/modules/i3/conky.nix
index 9463ae32..baee9c6f 100644
--- a/modules/i3/conky.nix
+++ b/modules/i3/conky.nix
@@ -3,7 +3,7 @@
 with pkgs.lib;
 
 let
-  mkConfig = text: pkgs.writeText "conkyrc" ''
+  baseConfig = pkgs.writeText "conkyrc" ''
     cpu_avg_samples 2
     net_avg_samples 2
     no_buffers yes
@@ -17,27 +17,12 @@ let
     pad_percents 3
     use_spacer left
     TEXT
-    ${text}
   '';
 
-  cexpr = name: args: "\${${name} ${concatStringsSep " " args}}";
+  cexpr = name: args: "\\\${${name} ${concatStringsSep " " args}}";
 
   primaryNetInterface = "enp0s25";
 
-  mkCpuLoad = threads: let
-    mkThread = thread: (cexpr "cpu" [ "cpu${toString thread}" ]) + "%";
-    loads = map mkThread (range 1 threads);
-  in concatStringsSep " " loads;
-
-  mkCpuTemp = cores: let
-    mkCore = core: (cexpr "platform" [
-      "coretemp.0"
-      "temp"
-      "${toString (core + 1)}"
-    ]) + "C";
-    temps = map mkCore (range 1 cores);
-  in concatStringsSep " " temps;
-
   mkNetInfo = iface: let
     upspeed = cexpr "upspeed" [ iface ];
     downspeed = cexpr "downspeed" [ iface ];
@@ -62,23 +47,41 @@ let
     conky = pkgs.conky.override {
       weatherMetar = true;
     };
-    cfg = mkConfig text;
   in pkgs.writeScript "conky-run.sh" ''
     #!${pkgs.stdenv.shell}
-    ${conky}/bin/conky -c "${cfg}"
+    PATH="${pkgs.coreutils}/bin"
+    cpuload() {
+      for i in $(seq 1 $(nproc))
+      do
+        [ $i -eq 1 ] || echo -n ' '
+        echo -n "\''${cpu cpu$i}%"
+      done
+    }
+    cputemp_collect() {
+      for i in /sys/bus/platform/devices/coretemp.?/hwmon/hwmon?/temp?_input
+      do
+        [ -e "$i" ] || continue
+        echo "$i" | ${pkgs.gnused}/bin/sed -re \
+          's/^.*hwmon([0-9]+)[^0-9]*([0-9]+).*$/''${hwmon \1 temp \2}/'
+      done
+    }
+    cputemp() {
+      echo $(cputemp_collect)
+    }
+    ${conky}/bin/conky -c "${baseConfig}" -t "${text}"
   '';
 
 in {
   left = mkConky [
-    "CPU: ${mkCpuLoad 8} - ${cexpr "cpu" [ "cpu0" ]}%"
-    "MEM: $mem/$memmax - $memperc%"
-    "SWAP: $swap/$swapmax $swapperc%"
+    "CPU: $(cpuload) - ${cexpr "cpu" [ "cpu0" ]}%"
+    "MEM: \\$mem/\\$memmax - \\$memperc%"
+    "SWAP: \\$swap/\\$swapmax \\$swapperc%"
   ];
 
   right = mkConky [
     "NET: ${mkNetInfo primaryNetInterface}"
     "DF: ${mkDiskFree "/"}"
-    "LAVG: $loadavg"
-    "TEMP - CPU: ${mkCpuTemp 4} - GPU: ${gpuTemp} - OUTSIDE: ${weather}"
+    "LAVG: \\$loadavg"
+    "TEMP - CPU: $(cputemp) - GPU: ${gpuTemp} - OUTSIDE: ${weather}"
   ];
 }