From 39917e0bf626b947b25d322d176b0aebd551b11d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kier=C3=A1n=20Meinhardt?= Date: Sun, 6 Jun 2021 13:15:01 +0200 Subject: [PATCH] feat(moodle-dl): reintegrate module in niveum --- configs/moodle-dl/borsfaye.nix | 10 +---- configs/moodle-dl/meinhark.nix | 10 +---- modules/moodle-dl.nix | 82 ++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 16 deletions(-) create mode 100644 modules/moodle-dl.nix diff --git a/configs/moodle-dl/borsfaye.nix b/configs/moodle-dl/borsfaye.nix index 97b6df5..f48cb0e 100644 --- a/configs/moodle-dl/borsfaye.nix +++ b/configs/moodle-dl/borsfaye.nix @@ -1,17 +1,11 @@ { config, pkgs, lib, ... }: let - nixpkgs-kmein = builtins.fetchGit { - url = "https://github.com/kmein/nixpkgs"; - ref = "refs/heads/feature/moodle-dl-module"; - rev = "ea2e0387ee946e575f7851ec21debc9179d82ad0"; - }; - - moodle-dl-package = (import nixpkgs-kmein {}).moodle-dl.overrideAttrs (old: old // { + moodle-dl-package = pkgs.moodle-dl.overrideAttrs (old: old // { patches = [ ]; }); in { - imports = [ "${nixpkgs-kmein}/nixos/modules/services/networking/moodle-dl.nix" ]; + imports = [ ]; services.moodle-dl = { enable = true; diff --git a/configs/moodle-dl/meinhark.nix b/configs/moodle-dl/meinhark.nix index c45c710..50765e6 100644 --- a/configs/moodle-dl/meinhark.nix +++ b/configs/moodle-dl/meinhark.nix @@ -1,17 +1,11 @@ { config, pkgs, lib, ... }: let - nixpkgs-kmein = builtins.fetchGit { - url = "https://github.com/kmein/nixpkgs"; - ref = "refs/heads/feature/moodle-dl-module"; - rev = "11e035b133ea9fbf07bc1b6185990b095358ab4f"; - }; - - moodle-dl-package = (import nixpkgs-kmein {}).moodle-dl.overrideAttrs (old: old // { + moodle-dl-package = pkgs.moodle-dl.overrideAttrs (old: old // { patches = [ ]; }); in { - imports = [ "${nixpkgs-kmein}/nixos/modules/services/networking/moodle-dl.nix" ]; + imports = [ ]; services.moodle-dl = { enable = true; diff --git a/modules/moodle-dl.nix b/modules/moodle-dl.nix new file mode 100644 index 0000000..3d6d0ad --- /dev/null +++ b/modules/moodle-dl.nix @@ -0,0 +1,82 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.services.moodle-dl; + json = pkgs.formats.json {}; + moodle-dl-json = json.generate "moodle-dl.json" cfg.settings; + stateDirectoryDefault = "/var/lib/moodle-dl"; +in { + options = { + services.moodle-dl = { + enable = mkEnableOption "moodle-dl, a Moodle downloader"; + + settings = mkOption { + default = {}; + type = json.type; + description = '' + Configuration for moodle-dl. For a full example, see + . + ''; + }; + + notifyOnly = mkOption { + default = false; + type = types.bool; + description = '' + Whether to notify about changes without downloading any files. + ''; + }; + + startAt = mkOption { + type = with types; either str (listOf str); + description = "When to run moodle-dl. See systemd.time(7) for the format."; + }; + + directory = mkOption { + default = stateDirectoryDefault; + type = types.path; + description = '' + The path moodle-dl should download course files to. If left + as the default value this directory will automatically be created before + moodle-dl runs, otherwise the sysadmin is responsible for ensuring + the directory exists with appropriate ownership and permissions. + ''; + }; + + package = mkOption { + default = pkgs.moodle-dl; + type = types.package; + description = "The moodle-dl package to use."; + }; + }; + }; + + config = mkIf cfg.enable { + + users.users.moodle-dl = { + isSystemUser = true; + home = cfg.directory; + }; + + users.groups.moodle-dl = {}; + + systemd.services.moodle-dl = { + description = "A Moodle downloader that downloads course content"; + wants = [ "network-online.target" ]; + serviceConfig = mkMerge [ + { + Type = "oneshot"; + User = config.users.users.moodle-dl.name; + Group = config.users.groups.moodle-dl.name; + WorkingDirectory = cfg.directory; + ExecStart = "${cfg.package}/bin/moodle-dl ${lib.optionalString cfg.notifyOnly "--without-downloading-files"}"; + ExecStartPre = "${pkgs.coreutils}/bin/ln -sfn ${toString moodle-dl-json} ${cfg.directory}/config.json"; + } + (mkIf (cfg.directory == stateDirectoryDefault) { StateDirectory = "moodle-dl"; }) + ]; + inherit (cfg) startAt; + }; + }; + + meta.maintainers = [ maintainers.kmein ]; +}