From 63e77d09a133ac641a0c204e7cfb0c97e133706d Mon Sep 17 00:00:00 2001 From: Austin Horstman Date: Sat, 22 Mar 2025 14:02:25 -0500 Subject: [PATCH] jankyborders: add module (#6677) --- modules/modules.nix | 1 + modules/services/jankyborders.nix | 83 +++++++++++++++++++ tests/default.nix | 2 + .../modules/services/jankyborders/config.nix | 26 ++++++ .../modules/services/jankyborders/default.nix | 1 + .../jankyborders/jankyborders-config-expected | 9 ++ 6 files changed, 122 insertions(+) create mode 100644 modules/services/jankyborders.nix create mode 100644 tests/modules/services/jankyborders/config.nix create mode 100644 tests/modules/services/jankyborders/default.nix create mode 100644 tests/modules/services/jankyborders/jankyborders-config-expected diff --git a/modules/modules.nix b/modules/modules.nix index 17dcdec48..64bca1b5a 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -341,6 +341,7 @@ let ./services/hyprpaper.nix ./services/hyprpolkitagent.nix ./services/imapnotify.nix + ./services/jankyborders.nix ./services/kanshi.nix ./services/kbfs.nix ./services/kdeconnect.nix diff --git a/modules/services/jankyborders.nix b/modules/services/jankyborders.nix new file mode 100644 index 000000000..77e4a5e67 --- /dev/null +++ b/modules/services/jankyborders.nix @@ -0,0 +1,83 @@ +{ config, lib, pkgs, ... }: +let cfg = config.services.jankyborders; +in { + meta.maintainers = [ lib.maintainers.khaneliman ]; + + options.services.jankyborders = { + enable = lib.mkEnableOption "jankyborders"; + + package = lib.mkPackageOption pkgs "jankyborders" { }; + + errorLogFile = lib.mkOption { + type = with lib.types; nullOr (either path str); + defaultText = lib.literalExpression + "\${config.home.homeDirectory}/Library/Logs/jankyborders/err.log"; + example = "/Users/khaneliman/Library/Logs/jankyborders.log"; + description = "Absolute path to log all stderr output."; + }; + + outLogFile = lib.mkOption { + type = with lib.types; nullOr (either path str); + defaultText = lib.literalExpression + "\${config.home.homeDirectory}/Library/Logs/jankyborders/out.log"; + example = "/Users/khaneliman/Library/Logs/jankyborders.log"; + description = "Absolute path to log all stdout output."; + }; + + settings = lib.mkOption { + type = with lib.types; attrsOf anything; + default = { }; + example = lib.literalExpression '' + { + style=round; + width=6.0; + hidpi="off"; + active_color="0xffe2e2e3"; + inactive_color="0xff414550"; + } + ''; + description = '' + Configuration settings to passed to `borders` in + {file}`$XDG_CONFIG_HOME/borders/bordersc`. See + + for the documentation. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + assertions = [ + (lib.hm.assertions.assertPlatform "services.jankyborders" pkgs + lib.platforms.darwin) + ]; + + home.packages = [ cfg.package ]; + + launchd.agents.jankyborders = { + enable = true; + config = { + ProgramArguments = [ (lib.getExe cfg.package) ]; + ProcessType = "Interactive"; + KeepAlive = true; + RunAtLoad = true; + StandardErrorPath = cfg.errorLogFile; + StandardOutPath = cfg.outLogFile; + }; + }; + + services.jankyborders = { + errorLogFile = lib.mkOptionDefault + "${config.home.homeDirectory}/Library/Logs/borders/borders.err.log"; + outLogFile = lib.mkOptionDefault + "${config.home.homeDirectory}/Library/Logs/borders/borders.out.log"; + }; + + xdg.configFile."borders/bordersrc".source = + pkgs.writeShellScript "bordersrc" '' + options=( + ${lib.generators.toKeyValue { indent = " "; } cfg.settings}) + + ${lib.getExe cfg.package} "''${options[@]}" + ''; + }; +} diff --git a/tests/default.nix b/tests/default.nix index e689a99f0..f859425ea 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -111,6 +111,7 @@ let "hyfetch" "i3status" "irssi" + "jankyborders" "jujutsu" "joplin-desktop" "jqp" @@ -418,6 +419,7 @@ in import nmtSrc { ./modules/services/espanso-darwin ./modules/services/git-sync-darwin ./modules/services/imapnotify-darwin + ./modules/services/jankyborders ./modules/services/nix-gc-darwin ./modules/services/macos-remap-keys ./modules/services/ollama/darwin diff --git a/tests/modules/services/jankyborders/config.nix b/tests/modules/services/jankyborders/config.nix new file mode 100644 index 000000000..f802cd675 --- /dev/null +++ b/tests/modules/services/jankyborders/config.nix @@ -0,0 +1,26 @@ +{ pkgs, ... }: { + services.jankyborders = { + enable = true; + settings = { + active_color = "0xffe2e2e3"; + hidpi = "off"; + inactive_color = "0xff414550"; + style = "round"; + width = 6.0; + }; + }; + + nmt.script = '' + configFile=home-files/.config/borders/bordersrc + assertFileExists $configFile + assertFileIsExecutable "$configFile" + # assertFileContent $configFile ${./jankyborders-config-expected} + assertFileContent "$configFile" ${ + pkgs.writeShellScript "bordersrc" + (builtins.readFile ./jankyborders-config-expected) + } + + serviceFile=LaunchAgents/org.nix-community.home.jankyborders.plist + assertFileExists "$serviceFile" + ''; +} diff --git a/tests/modules/services/jankyborders/default.nix b/tests/modules/services/jankyborders/default.nix new file mode 100644 index 000000000..014e4bc42 --- /dev/null +++ b/tests/modules/services/jankyborders/default.nix @@ -0,0 +1 @@ +{ jankyborders-basic-config = ./config.nix; } diff --git a/tests/modules/services/jankyborders/jankyborders-config-expected b/tests/modules/services/jankyborders/jankyborders-config-expected new file mode 100644 index 000000000..ee8e5ec00 --- /dev/null +++ b/tests/modules/services/jankyborders/jankyborders-config-expected @@ -0,0 +1,9 @@ +options=( + active_color=0xffe2e2e3 + hidpi=off + inactive_color=0xff414550 + style=round + width=6.000000 +) + +@JankyBorders@/bin/borders "${options[@]}"