{ pkgs, lib, config, ... }: let unstable = import { }; taskNextWeek = pkgs.writers.writeDash "taskweek" '' ${pkgs.taskwarrior}/bin/task \ export \ status:pending and \( due.before:6days \) \ | ${pkgs.jq}/bin/jq '[.[] | { Day: .due, ID: .id, Description: .description | sub("\n.*";"")} ] | sort_by(.Day)' \ | ${pkgs.miller}/bin/mlr --ijson --opprint put '$Day = strftime(strptime($Day,"%Y%m%dT%H%M%SZ")'$(date +%z)'00,"%a")' ''; activeTasks = pkgs.writers.writeBash "active-tasks" '' ${pkgs.taskwarrior}/bin/task export +checklist status:pending +READY | \ ${pkgs.jq}/bin/jq \ --raw-output ' sort_by(.description) | reverse | .[] | "[ \( .id ) ] \( .description )" ' echo ${pkgs.taskwarrior}/bin/task export \ +ACTIVE status:pending \ | ${pkgs.jq}/bin/jq --raw-output '.[] | "⇒ \(.id) \(.description)"' ''; userHighlight = map ({ user, ... }: user) (builtins.attrValues config.programs.custom.browser.configList); activeUsers = pkgs.writers.writeBash "active-users" '' ${pkgs.procps}/bin/ps -eo user \ | ${pkgs.gnused}/bin/sed '1 d' \ | ${pkgs.coreutils}/bin/sort \ | ${pkgs.coreutils}/bin/uniq \ | ${pkgs.gnugrep}/bin/egrep --color=always '(${ pkgs.lib.concatStringsSep "|" userHighlight })|$' ''; # default settings wtfModule = args@{ height ? 1, width ? 1, top, left, enabled ? true, type, ... }: { enabled = enabled; focusable = false; position.top = top; position.left = left; position.height = height; position.width = width; } // (lib.filterAttrs (key: _: lib.all (x: x != key) [ "height" "width" "top" "left" ]) args); modules = { # command runner module cmdRunner = args@{ cmd, ... }: wtfModule ({ type = "cmdrunner"; focusable = false; refreshInterval = 300; } // args); digitalclock = args@{ top, left, ... }: wtfModule ({ type = "digitalclock"; title = ""; color = "white"; font = "bigfont"; hourFormat = 24; refreshInterval = 1; } // args); clocks = args@{ top, left, ... }: wtfModule ({ type = "clocks"; title = ""; border = false; colors.rows = { even = "white"; odd = "white"; }; locations = { Berlin = "Europe/Berlin"; Wellington = "Pacific/Auckland"; }; sort = "alphabetical"; refreshInterval = 60; } // args); resourceusage = args@{ top, left, ... }: wtfModule ({ type = "resourceusage"; title = ""; cpuCombined = false; refreshInterval = 5; } // args); power = args@{ top, left, ... }: wtfModule ({ type = "power"; title = ""; refreshInterval = 100; } // args); prettyweather = args@{ top, left, ... }: wtfModule ({ type = "prettyweather"; title = ""; city = "Wellington"; unit = "m"; view = 0; language = "en"; refreshInterval = 3600; } // args); }; qJson = { wtf = { term = "rxvt-unicode-256color"; colors.border = { focusable = "darkslateblue"; focused = "orange"; normal = "green"; }; grid = { columns = [ 33 12 28 36 0 ]; rows = [ 9 3 7 6 0 ]; }; refreshInterval = 1; mods = with modules; { digitalclock = digitalclock { top = 0; left = 0; }; clocks = clocks { top = 1; left = 0; }; top = resourceusage { top = 0; left = 1; width = 2; }; power = power { top = 2; left = 0; }; rates = wtfModule { type = "exchangerates"; top = 3; left = 0; title = "rates"; rates.NZD = [ "EUR" ]; rates.EUR = [ "NZD" ]; refreshInterval = 3600; }; weather = prettyweather { top = 0; left = 3; }; calendar = cmdRunner { title = ""; args = [ "-3" "--monday" "--color=never" "-w" ]; cmd = "cal"; top = 1; left = 1; height = 2; width = 3; refreshInterval = 3600; }; uptime = cmdRunner { title = "uptime"; cmd = "uptime"; top = 3; left = 1; height = 1; width = 3; }; active-users = cmdRunner { title = "users"; cmd = activeUsers; top = 0; left = 4; height = 4; width = 1; refreshInterval = 30; }; active-tasks = cmdRunner { title = "active tasks"; cmd = activeTasks; top = 4; left = 2; height = 1; width = 3; refreshInterval = 60; }; next-week-tasks = cmdRunner { title = "upcoming"; cmd = taskNextWeek; top = 4; left = 0; height = 1; width = 2; refreshInterval = 60; }; }; }; }; qConfig = pkgs.writeText "config.yml" (builtins.toJSON qJson); q = pkgs.writers.writeBashBin "q" '' ${unstable.wtf}/bin/wtfutil --config=${toString qConfig} ''; in { services.upower.enable = true; environment.systemPackages = [ unstable.wtf q #activeUsers #activeTasks pkgs.upower ]; }