{ home ? throw "home argument is required", }: { config, lib, ... }: let cfg = config.xdg; in { options.xdg = with lib; with types; { relativeCacheHome = mkOption { type = str; readOnly = true; default = ".cache"; description = "Relative path to directory holding application caches."; }; relativeConfigHome = mkOption { type = str; readOnly = true; default = ".config"; description = "Relative path to directory holding application configurations."; }; relativeDataHome = mkOption { type = str; readOnly = true; default = ".local/share"; description = "Relative path to directory holding application data."; }; relativeStateHome = mkOption { type = str; readOnly = true; default = ".local/state"; description = "Relative path to directory holding application states."; }; userDirs = { relativeDesktop = mkOption { type = str; readOnly = true; default = "Desktop"; description = "Relative path to the Desktop directory."; }; relativeDocuments = mkOption { type = str; readOnly = true; default = "Documents"; description = "Relative path to the Documents directory."; }; relativeDownload = mkOption { type = str; readOnly = true; default = "Downloads"; description = "Relative path to the Downloads directory."; }; relativeMusic = mkOption { type = str; readOnly = true; default = "Music"; description = "Relative path to the Music directory."; }; relativePictures = mkOption { type = str; readOnly = true; default = "Pictures"; description = "Relative path to the Pictures directory."; }; relativeTemplates = mkOption { type = str; readOnly = true; default = "Templates"; description = "Relative path to the Templates directory."; }; relativeVideos = mkOption { type = str; readOnly = true; default = "Videos"; description = "Relative path to the Videos directory."; }; }; }; config.xdg = with lib; with cfg; { cacheHome = mkDefault "${home}/${relativeCacheHome}"; configHome = mkDefault "${home}/${relativeConfigHome}"; dataHome = mkDefault "${home}/${relativeDataHome}"; stateHome = mkDefault "${home}/${relativeStateHome}"; userDirs = with userDirs; { desktop = mkDefault "${home}/${relativeDesktop}"; documents = mkDefault "${home}/${relativeDocuments}"; download = mkDefault "${home}/${relativeDownload}"; music = mkDefault "${home}/${relativeMusic}"; pictures = mkDefault "${home}/${relativePictures}"; templates = mkDefault "${home}/${relativeTemplates}"; videos = mkDefault "${home}/${relativeVideos}"; }; }; }