website/content/posts/2023-03-24-managing-mutable-files-in-nixos/assets/patches/0002-fetch-mutable-files-add-file-submodule.patch

55 lines
1.7 KiB
Diff
Raw Normal View History

diff --git a/modules/home-manager/fetch-mutable-files.nix b/modules/home-manager/fetch-mutable-files.nix
index 9c66e05..aa00cac 100644
--- a/modules/home-manager/fetch-mutable-files.nix
+++ b/modules/home-manager/fetch-mutable-files.nix
@@ -2,12 +2,47 @@
let
cfg = config.home.mutableFiles;
- file = { config, name, ... }: {
+ file = baseDir: { config, name, ... }: {
+ options = {
+ url = lib.mkOption {
+ type = lib.types.str;
+ description = lib.mkDoc ''
+ The URL of the file to be fetched.
+ '';
+ example = "https://github.com/foo-dogsquared/dotfiles.git";
+ };
+
+ path = lib.mkOption {
+ type = lib.types.str;
+ description = lib.mkDoc ''
+ Output path of the resource relative to ${baseDir}.
+ '';
+ default = name;
+ apply = p:
+ if lib.hasPrefix "/" p then p else "${baseDir}/${p}";
+ };
+
+ type = lib.mkOption {
+ type = lib.types.enum [ "git" "fetch" ];
+ description = lib.mkDoc ''
+ Type that configures the behavior for fetching the URL.
+
+ This accept only certain keywords.
+
+ - For `fetch`, the file will be fetched with `curl`.
+ - For `git`, it will be fetched with `git clone`.
+
+ The default type is `fetch`.
+ '';
+ default = "fetch";
+ example = "git";
+ };
+ };
};
in
{
options.home.mutableFile = lib.mkOption {
- type = with lib.types; attrsOf (submodule file);
+ type = with lib.types; attrsOf (submodule (file config.home.homeDirectory));
default = { };
description = lib.mkDoc ''
An attribute set of mutable files and directories to be fetched into the