From 2f5819a962489e037a57835f63ed6ff8dbc2d5fb Mon Sep 17 00:00:00 2001 From: Aguirre Matteo <158215792+aguirre-matteo@users.noreply.github.com> Date: Sat, 26 Apr 2025 21:40:10 +0000 Subject: [PATCH] onedrive: add module (#6907) --- modules/modules.nix | 1 + modules/programs/onedrive.nix | 64 +++++++++++++++++++ tests/default.nix | 1 + tests/modules/programs/onedrive/default.nix | 1 + .../modules/programs/onedrive/example-config | 9 +++ .../programs/onedrive/example-config.nix | 22 +++++++ 6 files changed, 98 insertions(+) create mode 100644 modules/programs/onedrive.nix create mode 100644 tests/modules/programs/onedrive/default.nix create mode 100644 tests/modules/programs/onedrive/example-config create mode 100644 tests/modules/programs/onedrive/example-config.nix diff --git a/modules/modules.nix b/modules/modules.nix index 8c1d1b16..0cf60ac1 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -208,6 +208,7 @@ let ./programs/octant.nix ./programs/offlineimap.nix ./programs/oh-my-posh.nix + ./programs/onedrive.nix ./programs/onlyoffice.nix ./programs/opam.nix ./programs/openstackclient.nix diff --git a/modules/programs/onedrive.nix b/modules/programs/onedrive.nix new file mode 100644 index 00000000..80cf956c --- /dev/null +++ b/modules/programs/onedrive.nix @@ -0,0 +1,64 @@ +{ + lib, + pkgs, + config, + ... +}: +let + inherit (lib) + mkIf + mkEnableOption + mkPackageOption + mkOption + types + concatStringsSep + mapAttrsToList + ; + + cfg = config.programs.onedrive; + + generateConfig = lib.generators.toKeyValue { + mkKeyValue = name: value: ''${name} = "${value}"''; + }; +in +{ + meta.maintainers = with lib.hm.maintainers; [ aguirre-matteo ]; + + options.programs.onedrive = { + enable = mkEnableOption "onedrive"; + package = mkPackageOption pkgs "onedrive" { nullable = true; }; + settings = mkOption { + type = with types; attrsOf str; + default = { }; + example = '' + { + check_nomount = "false"; + check_nosync = "false"; + classify_as_big_delete = "1000"; + cleanup_local_files = "false"; + disable_notifications = "false"; + no_remote_delete = "false"; + rate_limit = "0"; + resync = "false"; + skip_dotfiles = "false"; + } + ''; + description = '' + Configuration settings for Onedrive. All available options can be + found at . + ''; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + (lib.hm.assertions.assertPlatform "programs.onedrive" pkgs lib.platforms.linux) + ]; + + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + + xdg.configFile = mkIf (cfg.settings != { }) { + "onedrive/config".text = generateConfig cfg.settings; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 786e3802..cda01b52 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -378,6 +378,7 @@ import nmtSrc { ./modules/programs/mangohud ./modules/programs/ncmpcpp-linux ./modules/programs/nh + ./modules/programs/onedrive ./modules/programs/pqiv ./modules/programs/rbw ./modules/programs/rofi diff --git a/tests/modules/programs/onedrive/default.nix b/tests/modules/programs/onedrive/default.nix new file mode 100644 index 00000000..2d9bd981 --- /dev/null +++ b/tests/modules/programs/onedrive/default.nix @@ -0,0 +1 @@ +{ onedrive-example-config = ./example-config.nix; } diff --git a/tests/modules/programs/onedrive/example-config b/tests/modules/programs/onedrive/example-config new file mode 100644 index 00000000..ed10cdec --- /dev/null +++ b/tests/modules/programs/onedrive/example-config @@ -0,0 +1,9 @@ +check_nomount = "false" +check_nosync = "false" +classify_as_big_delete = "1000" +cleanup_local_files = "false" +disable_notifications = "false" +no_remote_delete = "false" +rate_limit = "0" +resync = "false" +skip_dotfiles = "false" diff --git a/tests/modules/programs/onedrive/example-config.nix b/tests/modules/programs/onedrive/example-config.nix new file mode 100644 index 00000000..43116186 --- /dev/null +++ b/tests/modules/programs/onedrive/example-config.nix @@ -0,0 +1,22 @@ +{ + programs.onedrive = { + enable = true; + settings = { + check_nomount = "false"; + check_nosync = "false"; + classify_as_big_delete = "1000"; + cleanup_local_files = "false"; + disable_notifications = "false"; + no_remote_delete = "false"; + rate_limit = "0"; + resync = "false"; + skip_dotfiles = "false"; + }; + }; + + nmt.script = '' + assertFileExists home-files/.config/onedrive/config + assertFileContent home-files/.config/onedrive/config \ + ${./example-config} + ''; +}