From 6d3b6dc9222c12b951169becdf4b0592ee9576ef Mon Sep 17 00:00:00 2001 From: Kaleo Date: Wed, 27 Dec 2023 20:00:49 +0800 Subject: [PATCH] conky: add module --- modules/misc/news.nix | 12 +++++ modules/modules.nix | 1 + modules/services/conky.nix | 53 +++++++++++++++++++ tests/default.nix | 1 + .../services/conky/basic-configuration.conf | 7 +++ .../services/conky/basic-configuration.nix | 30 +++++++++++ tests/modules/services/conky/default.nix | 1 + 7 files changed, 105 insertions(+) create mode 100644 modules/services/conky.nix create mode 100644 tests/modules/services/conky/basic-configuration.conf create mode 100644 tests/modules/services/conky/basic-configuration.nix create mode 100644 tests/modules/services/conky/default.nix diff --git a/modules/misc/news.nix b/modules/misc/news.nix index b189fb008..92d3e9f54 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1572,6 +1572,18 @@ in { your habits being tracked. See https://freetubeapp.io/ for more. ''; } + + { + time = "2024-04-30T21:57:23+00:00"; + condition = hostPlatform.isLinux; + message = '' + A new module is available: 'services.conky'. + + Conky is a system monitor for X. Conky can display just about + anything, either on your root desktop or in its own window. See + https://conky.cc/ for more. + ''; + } ]; }; } diff --git a/modules/modules.nix b/modules/modules.nix index e14c26d52..7c81102a9 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -279,6 +279,7 @@ let ./services/clipman.nix ./services/clipmenu.nix ./services/comodoro.nix + ./services/conky.nix ./services/copyq.nix ./services/darkman.nix ./services/devilspie2.nix diff --git a/modules/services/conky.nix b/modules/services/conky.nix new file mode 100644 index 000000000..bf7eeea8b --- /dev/null +++ b/modules/services/conky.nix @@ -0,0 +1,53 @@ +{ config, lib, pkgs, ... }: + +let + + cfg = config.services.conky; + +in with lib; { + meta.maintainers = [ hm.maintainers.kaleo ]; + + options = { + services.conky = { + enable = mkEnableOption "Conky, a light-weight system monitor"; + + package = mkPackageOption pkgs "conky" { }; + + extraConfig = lib.mkOption { + type = types.lines; + default = ""; + description = '' + Configuration used by the Conky daemon. Check + for + options. If not set, the default configuration, as described by + {command}`conky --print-config`, will be used. + ''; + }; + }; + }; + + config = mkIf cfg.enable { + assertions = + [ (hm.assertions.assertPlatform "services.conky" pkgs platforms.linux) ]; + + home.packages = [ cfg.package ]; + + systemd.user.services.conky = { + Unit = { + Description = "Conky - Lightweight system monitor"; + After = [ "graphical-session.target" ]; + }; + + Service = { + Restart = "always"; + RestartSec = "3"; + ExecStart = toString ([ "${pkgs.conky}/bin/conky" ] + ++ optional (cfg.extraConfig != "") + "--config ${pkgs.writeText "conky.conf" cfg.extraConfig}"); + }; + + Install.WantedBy = [ "graphical-session.target" ]; + }; + }; +} + diff --git a/tests/default.nix b/tests/default.nix index 7f92c2bd3..7b714581d 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -225,6 +225,7 @@ in import nmtSrc { ./modules/services/cliphist ./modules/services/clipman ./modules/services/comodoro + ./modules/services/conky ./modules/services/darkman ./modules/services/devilspie2 ./modules/services/dropbox diff --git a/tests/modules/services/conky/basic-configuration.conf b/tests/modules/services/conky/basic-configuration.conf new file mode 100644 index 000000000..010eac374 --- /dev/null +++ b/tests/modules/services/conky/basic-configuration.conf @@ -0,0 +1,7 @@ +conky.text = [[ + S Y S T E M I N F O + $hr + Host:$alignr $nodename + Uptime:$alignr $uptime + RAM:$alignr $mem/$memmax +]] diff --git a/tests/modules/services/conky/basic-configuration.nix b/tests/modules/services/conky/basic-configuration.nix new file mode 100644 index 000000000..479a19239 --- /dev/null +++ b/tests/modules/services/conky/basic-configuration.nix @@ -0,0 +1,30 @@ +{ config, pkgs, ... }: + +{ + services.conky = { + enable = true; + extraConfig = '' + conky.text = [[ + S Y S T E M I N F O + $hr + Host:$alignr $nodename + Uptime:$alignr $uptime + RAM:$alignr $mem/$memmax + ]] + ''; + }; + + test.stubs.conky = { }; + + nmt.script = '' + serviceFile="$TESTED/home-files/.config/systemd/user/conky.service" + + assertFileExists $serviceFile + assertFileRegex "$serviceFile" \ + 'ExecStart=@conky@/bin/conky --config .*conky.conf' + + configFile="$(grep -o '/nix.*conky.conf' "$serviceFile")" + assertFileContent "$configFile" \ + ${./basic-configuration.conf} + ''; +} diff --git a/tests/modules/services/conky/default.nix b/tests/modules/services/conky/default.nix new file mode 100644 index 000000000..e4ca38e06 --- /dev/null +++ b/tests/modules/services/conky/default.nix @@ -0,0 +1 @@ +{ conky-basic-configuration = ./basic-configuration.nix; }