about summary refs log tree commit diff
path: root/modules/i3
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/i3
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/i3')
-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}"
   ];
 }