From ecb216242293f8a31c5426b40190700e5b3686fd Mon Sep 17 00:00:00 2001 From: Alex Hamilton <1622250+Aehmlo@users.noreply.github.com> Date: Sat, 10 May 2025 20:21:35 -0400 Subject: [PATCH] numbat: add module Numbat is a scientific calculator with full support for physical units. --- modules/misc/news/2025-05-10_21-08-48.nix | 7 +++ modules/modules.nix | 1 + modules/programs/numbat.nix | 50 +++++++++++++++++++ tests/default.nix | 1 + tests/modules/programs/numbat/default.nix | 4 ++ .../modules/programs/numbat/empty-config.nix | 18 +++++++ .../programs/numbat/example-config.nix | 34 +++++++++++++ 7 files changed, 115 insertions(+) create mode 100644 modules/misc/news/2025-05-10_21-08-48.nix create mode 100644 modules/programs/numbat.nix create mode 100644 tests/modules/programs/numbat/default.nix create mode 100644 tests/modules/programs/numbat/empty-config.nix create mode 100644 tests/modules/programs/numbat/example-config.nix diff --git a/modules/misc/news/2025-05-10_21-08-48.nix b/modules/misc/news/2025-05-10_21-08-48.nix new file mode 100644 index 000000000..1587f1241 --- /dev/null +++ b/modules/misc/news/2025-05-10_21-08-48.nix @@ -0,0 +1,7 @@ +{ + time = "2025-05-11T01:08:48+00:00"; + condition = true; + message = '' + A new module is available: 'programs.numbat'. + ''; +} diff --git a/modules/modules.nix b/modules/modules.nix index aaf24dc29..2d18bd205 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -208,6 +208,7 @@ let ./programs/nnn.nix ./programs/noti.nix ./programs/notmuch.nix + ./programs/numbat.nix ./programs/nushell.nix ./programs/obs-studio.nix ./programs/octant.nix diff --git a/modules/programs/numbat.nix b/modules/programs/numbat.nix new file mode 100644 index 000000000..0823c34e1 --- /dev/null +++ b/modules/programs/numbat.nix @@ -0,0 +1,50 @@ +{ + lib, + config, + pkgs, + ... +}: + +let + inherit (lib) mkIf; + cfg = config.programs.numbat; + tomlFormat = pkgs.formats.toml { }; + configDir = + if pkgs.stdenv.hostPlatform.isDarwin then + "Library/Application Support/numbat" + else + "${config.xdg.configHome}/numbat"; +in +{ + meta.maintainers = with lib.hm.maintainers; [ + Aehmlo + ]; + + options.programs.numbat = { + enable = lib.mkEnableOption "Numbat"; + + package = lib.mkPackageOption pkgs "numbat" { nullable = true; }; + + settings = lib.mkOption { + type = tomlFormat.type; + default = { }; + example = { + intro-banner = "short"; + prompt = "> "; + exchange-rates.fetching-policy = "on-first-use"; + }; + description = '' + Options to add to {file}`config.toml`. See + for options. + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + + home.file."${configDir}/config.toml" = mkIf (cfg.settings != { }) { + source = tomlFormat.generate "numbat-config" cfg.settings; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 25638ba26..afa98fc7a 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -257,6 +257,7 @@ import nmtSrc { ./modules/programs/nix-init ./modules/programs/nix-your-shell ./modules/programs/nnn + ./modules/programs/numbat ./modules/programs/nushell ./modules/programs/oh-my-posh ./modules/programs/onlyoffice diff --git a/tests/modules/programs/numbat/default.nix b/tests/modules/programs/numbat/default.nix new file mode 100644 index 000000000..86fa48f6a --- /dev/null +++ b/tests/modules/programs/numbat/default.nix @@ -0,0 +1,4 @@ +{ + numbat-example-config = ./example-config.nix; + numbat-empty-config = ./empty-config.nix; +} diff --git a/tests/modules/programs/numbat/empty-config.nix b/tests/modules/programs/numbat/empty-config.nix new file mode 100644 index 000000000..2fc52c2ff --- /dev/null +++ b/tests/modules/programs/numbat/empty-config.nix @@ -0,0 +1,18 @@ +{ + pkgs, + ... +}: +let + configDir = + if pkgs.stdenv.hostPlatform.isDarwin then + "Library/Application Support/numbat" + else + ".config/numbat"; +in +{ + programs.numbat.enable = true; + + nmt.script = '' + assertPathNotExists 'home-files/${configDir}/config.toml' + ''; +} diff --git a/tests/modules/programs/numbat/example-config.nix b/tests/modules/programs/numbat/example-config.nix new file mode 100644 index 000000000..1432a0fef --- /dev/null +++ b/tests/modules/programs/numbat/example-config.nix @@ -0,0 +1,34 @@ +{ + config, + pkgs, + ... +}: +let + configDir = + if pkgs.stdenv.hostPlatform.isDarwin then + "Library/Application Support/numbat" + else + ".config/numbat"; +in +{ + programs.numbat = { + enable = true; + package = config.lib.test.mkStubPackage { }; + settings = { + intro-banner = "short"; + prompt = "> "; + exchange-rates.fetching-policy = "on-first-use"; + }; + }; + + nmt.script = '' + assertFileExists 'home-files/${configDir}/config.toml' + assertFileContent $(normalizeStorePaths 'home-files/${configDir}/config.toml') \ + ${builtins.toFile "expected.toml" '' + intro-banner = "short" + prompt = "> " + [exchange-rates] + fetching-policy = "on-first-use" + ''} + ''; +}