qcal: add module
This commit is contained in:
parent
ea59b79f31
commit
8eb8c212e5
11 changed files with 186 additions and 0 deletions
66
modules/programs/qcal.nix
Normal file
66
modules/programs/qcal.nix
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
|
||||
cfg = config.programs.qcal;
|
||||
|
||||
qcalAccounts = lib.attrValues
|
||||
(lib.filterAttrs (_: a: a.qcal.enable) config.accounts.calendar.accounts);
|
||||
|
||||
rename = oldname:
|
||||
builtins.getAttr oldname {
|
||||
url = "Url";
|
||||
userName = "Username";
|
||||
passwordCommand = "PasswordCmd";
|
||||
};
|
||||
|
||||
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";
|
||||
|
||||
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 = [ pkgs.qcal ];
|
||||
|
||||
xdg.configFile."qcal/config.json".source =
|
||||
let jsonFormat = pkgs.formats.json { };
|
||||
in jsonFormat.generate "qcal.json" {
|
||||
DefaultNumDays = cfg.defaultNumDays;
|
||||
Timezone = cfg.timezone;
|
||||
Calendars = filteredAccounts;
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue