about summary refs log tree commit diff
path: root/modules/i3/conky.nix
diff options
context:
space:
mode:
authoraszlig <aszlig@redmoonstudios.org>2014-05-02 02:27:33 +0200
committeraszlig <aszlig@redmoonstudios.org>2014-05-02 04:01:06 +0200
commit139e36a39353d9821e773743ed4e796d8c96a58d (patch)
treeca338856cf33f476d6f5a9b28991a1fe5a987290 /modules/i3/conky.nix
parent7a99937b12abbceadbdb227f9f661efb09fbe5b2 (diff)
i3: Factor out conky configuration for i3bar.
Now we're generating full conky config files and we now have a new
conky.nix, which generates shell scripts for the left and right screens,
that run conky with the right configuration files.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Diffstat (limited to 'modules/i3/conky.nix')
-rw-r--r--modules/i3/conky.nix84
1 files changed, 84 insertions, 0 deletions
diff --git a/modules/i3/conky.nix b/modules/i3/conky.nix
new file mode 100644
index 00000000..9463ae32
--- /dev/null
+++ b/modules/i3/conky.nix
@@ -0,0 +1,84 @@
+{ pkgs ? import <nixpkgs> {} }:
+
+with pkgs.lib;
+
+let
+  mkConfig = text: pkgs.writeText "conkyrc" ''
+    cpu_avg_samples 2
+    net_avg_samples 2
+    no_buffers yes
+    out_to_console yes
+    out_to_ncurses no
+    out_to_stderr no
+    extra_newline no
+    update_interval 1.0
+    uppercase no
+    use_spacer none
+    pad_percents 3
+    use_spacer left
+    TEXT
+    ${text}
+  '';
+
+  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 ];
+  in "${upspeed} ${downspeed}";
+
+  mkDiskFree = path: let
+    used = cexpr "fs_used" [ path ];
+    size = cexpr "fs_size" [ path ];
+  in "${used}/${size}";
+
+  gpuTemp = "${cexpr "hwmon" [ "0" "temp" "1" ]}C";
+
+  weather = (cexpr "weather" [
+    "http://weather.noaa.gov/pub/data/observations/metar/stations/"
+    "EDMA"
+    "temperature"
+  ]) + "C";
+
+  mkConky = args: let
+    time = cexpr "time" [ "%a %b %d %T %Z %Y" ];
+    text = concatStringsSep " | " (args ++ singleton time);
+    conky = pkgs.conky.override {
+      weatherMetar = true;
+    };
+    cfg = mkConfig text;
+  in pkgs.writeScript "conky-run.sh" ''
+    #!${pkgs.stdenv.shell}
+    ${conky}/bin/conky -c "${cfg}"
+  '';
+
+in {
+  left = mkConky [
+    "CPU: ${mkCpuLoad 8} - ${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}"
+  ];
+}