From aa5ba177cc55b89aab8622e7dd011f1092cc3bdc Mon Sep 17 00:00:00 2001 From: pacien Date: Thu, 5 Sep 2019 11:18:43 +0200 Subject: [PATCH] xdg-user-dirs: add module --- modules/misc/xdg-user-dirs.nix | 100 +++++++++++++++++++++++++++++++++ modules/modules.nix | 1 + 2 files changed, 101 insertions(+) create mode 100644 modules/misc/xdg-user-dirs.nix diff --git a/modules/misc/xdg-user-dirs.nix b/modules/misc/xdg-user-dirs.nix new file mode 100644 index 000000000..4d034d7fe --- /dev/null +++ b/modules/misc/xdg-user-dirs.nix @@ -0,0 +1,100 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.xdg.userDirs; + +in + +{ + meta.maintainers = with maintainers; [ pacien ]; + + options.xdg.userDirs = { + enable = mkOption { + type = types.bool; + default = false; + description = '' + Whether to manage $XDG_CONFIG_HOME/user-dirs.dirs. + + + The generated file is read-only. + ''; + }; + + # Well-known directory list from + # https://gitlab.freedesktop.org/xdg/xdg-user-dirs/blob/master/man/user-dirs.dirs.xml + + desktop = mkOption { + type = types.str; + default = "$HOME/Desktop"; + description = "The Desktop directory."; + }; + + documents = mkOption { + type = types.str; + default = "$HOME/Documents"; + description = "The Documents directory."; + }; + + download = mkOption { + type = types.str; + default = "$HOME/Downloads"; + description = "The Downloads directory."; + }; + + music = mkOption { + type = types.str; + default = "$HOME/Music"; + description = "The Music directory."; + }; + + pictures = mkOption { + type = types.str; + default = "$HOME/Pictures"; + description = "The Pictures directory."; + }; + + publishShare = mkOption { + type = types.str; + default = "$HOME/Public"; + description = "The Public share directory."; + }; + + templates = mkOption { + type = types.str; + default = "$HOME/Templates"; + description = "The Templates directory."; + }; + + videos = mkOption { + type = types.str; + default = "$HOME/Videos"; + description = "The Videos directory."; + }; + + extraConfig = mkOption { + type = with types; attrsOf str; + default = { }; + example = { XDG_MISC_DIR = "$HOME/Misc"; }; + description = "Other user directories."; + }; + }; + + config = mkIf cfg.enable { + xdg.configFile."user-dirs.dirs".text = generators.toKeyValue {} ( + { + XDG_DESKTOP_DIR = cfg.desktop; + XDG_DOCUMENTS_DIR = cfg.documents; + XDG_DOWNLOAD_DIR = cfg.download; + XDG_MUSIC_DIR = cfg.music; + XDG_PICTURES_DIR = cfg.pictures; + XDG_PUBLICSHARE_DIR = cfg.publishShare; + XDG_TEMPLATES_DIR = cfg.templates; + XDG_VIDEOS_DIR = cfg.videos; + } + // cfg.extraConfig + ); + }; +} diff --git a/modules/modules.nix b/modules/modules.nix index cc38e9e71..0e1879590 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -34,6 +34,7 @@ let (loadModule ./misc/submodule-support.nix { }) (loadModule ./misc/version.nix { }) (loadModule ./misc/xdg.nix { }) + (loadModule ./misc/xdg-user-dirs.nix { condition = hostPlatform.isLinux; }) (loadModule ./programs/afew.nix { }) (loadModule ./programs/alacritty.nix { }) (loadModule ./programs/alot.nix { })