1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-11-08 11:36:05 +01:00
home-manager/modules/programs/qcal.nix
Austin Horstman 86402a17b6 treewide: flatten single file modules
Some files don't need nesting and can be root level again to reduce
conflicts with other PRs.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-06-23 16:20:26 -05:00

77 lines
1.8 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
cfg = config.programs.qcal;
qcalAccounts = lib.attrValues (
lib.filterAttrs (_: a: a.qcal.enable) config.accounts.calendar.accounts
);
filteredAccounts =
let
mkAccount =
account:
lib.filterAttrs (_: v: v != null) (
with account.remote;
{
Url = url;
Username = if userName == null then null else userName;
PasswordCmd = if passwordCommand == null then null else toString passwordCommand;
}
);
in
map mkAccount qcalAccounts;
in
{
meta.maintainers = with lib.maintainers; [ antonmosich ];
options = {
programs.qcal = {
enable = lib.mkEnableOption "qcal, a CLI calendar application";
package = lib.mkPackageOption pkgs "qcal" { nullable = true; };
timezone = lib.mkOption {
type = lib.types.singleLineStr;
default = "Local";
example = "Europe/Vienna";
description = "Timezone to display calendar entries in";
};
defaultNumDays = lib.mkOption {
type = lib.types.ints.positive;
default = 30;
description = "Default number of days to show calendar entries for";
};
};
accounts.calendar.accounts = lib.mkOption {
type =
with lib.types;
attrsOf (submodule {
options.qcal.enable = lib.mkEnableOption "qcal access";
});
};
};
config = lib.mkIf cfg.enable {
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
xdg.configFile."qcal/config.json".source =
let
jsonFormat = pkgs.formats.json { };
in
jsonFormat.generate "qcal.json" {
DefaultNumDays = cfg.defaultNumDays;
Timezone = cfg.timezone;
Calendars = filteredAccounts;
};
};
}