watson: add module
Watson is a CLI for tracking your time. Two unit tests were added to validate the module behavior for an empty configuration and the example configuration.
This commit is contained in:
parent
32da35f65b
commit
d469b9bf8a
3
.github/CODEOWNERS
vendored
3
.github/CODEOWNERS
vendored
|
@ -224,6 +224,9 @@
|
|||
/modules/programs/topgrade.nix @msfjarvis
|
||||
/tests/modules/programs/topgrade @msfjarvis
|
||||
|
||||
/mdules/programs/watson.nix @polykernel
|
||||
/tests/modules/programs/watson @polykernel
|
||||
|
||||
/modules/programs/waybar.nix @berbiche
|
||||
/tests/modules/programs/waybar @berbiche
|
||||
|
||||
|
|
|
@ -2358,6 +2358,13 @@ in
|
|||
A new module is available: 'programs.helix'.
|
||||
'';
|
||||
}
|
||||
|
||||
{
|
||||
time = "2022-01-22T15:12:20+00:00";
|
||||
message = ''
|
||||
A new module is available: 'programs.watson'.
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -148,6 +148,7 @@ let
|
|||
./programs/vim.nix
|
||||
./programs/vscode.nix
|
||||
./programs/vscode/haskell.nix
|
||||
./programs/watson.nix
|
||||
./programs/waybar.nix
|
||||
./programs/xmobar.nix
|
||||
./programs/z-lua.nix
|
||||
|
|
94
modules/programs/watson.nix
Normal file
94
modules/programs/watson.nix
Normal file
|
@ -0,0 +1,94 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.programs.watson;
|
||||
|
||||
iniFormat = pkgs.formats.ini { };
|
||||
|
||||
configDir = if pkgs.stdenv.hostPlatform.isDarwin then
|
||||
"Library/Application Support"
|
||||
else
|
||||
config.xdg.configHome;
|
||||
|
||||
in {
|
||||
meta.maintainers = [ maintainers.polykernel ];
|
||||
|
||||
options.programs.watson = {
|
||||
enable = mkEnableOption "watson, a wonderful CLI to track your time";
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.watson;
|
||||
defaultText = literalExpression "pkgs.watson";
|
||||
description = "Package providing the <command>watson</command>.";
|
||||
};
|
||||
|
||||
enableBashIntegration = mkEnableOption "watson's bash integration" // {
|
||||
default = true;
|
||||
};
|
||||
|
||||
enableZshIntegration = mkEnableOption "watson's zsh integration" // {
|
||||
default = true;
|
||||
};
|
||||
|
||||
enableFishIntegration = mkEnableOption "watson's fish integration" // {
|
||||
default = true;
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
type = iniFormat.type;
|
||||
default = { };
|
||||
description = ''
|
||||
Configuration written to
|
||||
<filename>$XDG_CONFIG_HOME/watson/config</filename> on Linux or
|
||||
<filename>$HOME/Library/Application Support/watson/config</filename> on Darwin.
|
||||
</para><para>
|
||||
See <link xlink:href="https://github.com/TailorDev/Watson/blob/master/docs/user-guide/configuration.md"/>
|
||||
for an example configuration.
|
||||
'';
|
||||
example = literalExpression ''
|
||||
{
|
||||
backend = {
|
||||
url = "https://api.crick.fr";
|
||||
token = "yourapitoken";
|
||||
};
|
||||
|
||||
options = {
|
||||
stop_on_start = true;
|
||||
stop_on_restart = false;
|
||||
date_format = "%Y.%m.%d";
|
||||
time_format = "%H:%M:%S%z";
|
||||
week_start = "monday";
|
||||
log_current = false;
|
||||
pager = true;
|
||||
report_current = false;
|
||||
reverse_log = true;
|
||||
};
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = [ cfg.package ];
|
||||
|
||||
home.file."${configDir}/watson/config" = mkIf (cfg.settings != { }) {
|
||||
source = iniFormat.generate "watson-config" cfg.settings;
|
||||
};
|
||||
|
||||
programs.bash.initExtra = mkIf cfg.enableBashIntegration ''
|
||||
source ${cfg.package}/share/bash-completion/completions/watson
|
||||
'';
|
||||
|
||||
programs.zsh.initExtra = mkIf cfg.enableZshIntegration ''
|
||||
source ${cfg.package}/share/zsh/site-functions/_watson
|
||||
'';
|
||||
|
||||
programs.fish.shellInit = mkIf cfg.enableFishIntegration ''
|
||||
source ${cfg.package}/share/fish/vendor_completions.d/watson.fish
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -101,6 +101,7 @@ import nmt {
|
|||
./modules/programs/tmux
|
||||
./modules/programs/topgrade
|
||||
./modules/programs/vscode
|
||||
./modules/programs/watson
|
||||
./modules/programs/zplug
|
||||
./modules/programs/zsh
|
||||
./modules/xresources
|
||||
|
|
4
tests/modules/programs/watson/default.nix
Normal file
4
tests/modules/programs/watson/default.nix
Normal file
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
watson-empty-settings = ./empty-settings.nix;
|
||||
watson-example-settings = ./example-settings.nix;
|
||||
}
|
19
tests/modules/programs/watson/empty-settings.nix
Normal file
19
tests/modules/programs/watson/empty-settings.nix
Normal file
|
@ -0,0 +1,19 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
programs.watson = {
|
||||
enable = true;
|
||||
package = config.lib.test.mkStubPackage { };
|
||||
};
|
||||
|
||||
nmt.script = let
|
||||
configDir = if pkgs.stdenv.hostPlatform.isDarwin then
|
||||
"home-files/Library/Application Support"
|
||||
else
|
||||
"home-files/.config";
|
||||
in ''
|
||||
assertPathNotExists ${configDir}/watson/config
|
||||
'';
|
||||
}
|
14
tests/modules/programs/watson/example-settings-expected.ini
Normal file
14
tests/modules/programs/watson/example-settings-expected.ini
Normal file
|
@ -0,0 +1,14 @@
|
|||
[backend]
|
||||
token=yourapitoken
|
||||
url=https://api.crick.fr
|
||||
|
||||
[options]
|
||||
date_format=%Y.%m.%d
|
||||
log_current=false
|
||||
pager=true
|
||||
report_current=false
|
||||
reverse_log=true
|
||||
stop_on_restart=false
|
||||
stop_on_start=true
|
||||
time_format=%H:%M:%S%z
|
||||
week_start=monday
|
40
tests/modules/programs/watson/example-settings.nix
Normal file
40
tests/modules/programs/watson/example-settings.nix
Normal file
|
@ -0,0 +1,40 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
programs.watson = {
|
||||
enable = true;
|
||||
package = config.lib.test.mkStubPackage { };
|
||||
|
||||
settings = {
|
||||
backend = {
|
||||
url = "https://api.crick.fr";
|
||||
token = "yourapitoken";
|
||||
};
|
||||
|
||||
options = {
|
||||
stop_on_start = true;
|
||||
stop_on_restart = false;
|
||||
date_format = "%Y.%m.%d";
|
||||
time_format = "%H:%M:%S%z";
|
||||
week_start = "monday";
|
||||
log_current = false;
|
||||
pager = true;
|
||||
report_current = false;
|
||||
reverse_log = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
nmt.script = let
|
||||
configDir = if pkgs.stdenv.hostPlatform.isDarwin then
|
||||
"home-files/Library/Application Support"
|
||||
else
|
||||
"home-files/.config";
|
||||
in ''
|
||||
assertFileContent \
|
||||
"${configDir}/watson/config" \
|
||||
${./example-settings-expected.ini}
|
||||
'';
|
||||
}
|
Loading…
Reference in a new issue