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
|
/modules/programs/topgrade.nix @msfjarvis
|
||||||
/tests/modules/programs/topgrade @msfjarvis
|
/tests/modules/programs/topgrade @msfjarvis
|
||||||
|
|
||||||
|
/mdules/programs/watson.nix @polykernel
|
||||||
|
/tests/modules/programs/watson @polykernel
|
||||||
|
|
||||||
/modules/programs/waybar.nix @berbiche
|
/modules/programs/waybar.nix @berbiche
|
||||||
/tests/modules/programs/waybar @berbiche
|
/tests/modules/programs/waybar @berbiche
|
||||||
|
|
||||||
|
|
|
@ -2358,6 +2358,13 @@ in
|
||||||
A new module is available: 'programs.helix'.
|
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/vim.nix
|
||||||
./programs/vscode.nix
|
./programs/vscode.nix
|
||||||
./programs/vscode/haskell.nix
|
./programs/vscode/haskell.nix
|
||||||
|
./programs/watson.nix
|
||||||
./programs/waybar.nix
|
./programs/waybar.nix
|
||||||
./programs/xmobar.nix
|
./programs/xmobar.nix
|
||||||
./programs/z-lua.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/tmux
|
||||||
./modules/programs/topgrade
|
./modules/programs/topgrade
|
||||||
./modules/programs/vscode
|
./modules/programs/vscode
|
||||||
|
./modules/programs/watson
|
||||||
./modules/programs/zplug
|
./modules/programs/zplug
|
||||||
./modules/programs/zsh
|
./modules/programs/zsh
|
||||||
./modules/xresources
|
./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