{ lib, config, pkgs, flakeRoot, ... }: let username = config.defaultUser or "henrov"; homeDir = "${config.home.homeDirectory or "/home/${username}"}/MyStuff"; # Absolute path to the assets folder assetPath = "${flakeRoot}/assets/copy_2_home"; # Helper function to recursively list files in a directory recursiveFiles = path: let entries = builtins.attrNames (builtins.readDir path); in lib.concatMap (name: let full = "${path}/${name}"; in if builtins.isDir full then recursiveFiles full else [ full ] ) entries; # All files in assets folder allFiles = recursiveFiles assetPath; # Map files to home.file entries homeFiles = lib.genAttrs allFiles (f: let relative = lib.replaceStrings [ "${assetPath}/" ] [ "" ] f; in { name = relative; value = { source = f; }; }); in { _module.args.hmUsers = { ${username} = { home.file = lib.mkMerge [ homeFiles ]; }; }; }{ lib, config, pkgs, flakeRoot, ... }: let username = config.defaultUser or "henrov"; # Destination base directory in the user's home homeDir = "${config.home.homeDirectory or "/home/${username}"}/MyStuff"; # Absolute path to your assets folder assetPath = "${flakeRoot}/assets/copy_2_home"; # Recursively list all files and directories in assetPath recursiveFiles = path: let entries = builtins.attrNames (builtins.readDir path); in lib.concatMap (name: let full = "${path}/${name}"; in if builtins.isDir full then recursiveFiles full else [ full ] ) entries; allFiles = recursiveFiles assetPath; # Map files to home.file entries using writable symlinks homeFiles = lib.genAttrs allFiles (f: let # Relative path inside assetPath relative = lib.replaceStrings [ "${assetPath}/" ] [ "" ] f; target = "${homeDir}/${relative}"; in { name = target; value = { source = lib.makeOutOfStoreSymlink f; }; } ); in { _module.args.hmUsers = { ${username} = { home.file = lib.mkMerge [ homeFiles ]; }; }; }