NixOS: добавление под существующим атрибутом - PullRequest
1 голос
/ 04 октября 2019

Я пишу небольшой почтовый модуль NixOS, который настраивает mutt, mbsync, msmtp и т. Д. Для предоставленных учетных записей. Я хочу, чтобы он был объявлен для определенных пользователей, поскольку созданные файлы должны принадлежать этому пользователю и в каталогах XDG для этого пользователя. То есть что-то вроде (в configuration.nix):

users.extraUsers.me = {
  ...
  email = {
    enable = true;
    accounts = [{
      host = "mail.service.com";
      user = "me@service.com";
      ...}
      ...];
  }
}

Я знаю, как создать службу с определенным путем (например, services.email). Однако модуль должен знать, какое имя пользователя, и должен вписываться в любого пользователя. Есть ли способ сделать это - добавить опции к существующему атрибуту? Если да, то как?

1 Ответ

1 голос
/ 05 октября 2019

Я думаю, что вам лучше всего использовать mutt, mbsync и все остальное как системные сервисы пользователя. Технически вы можете использовать субмодули для создания схемы модуля, аналогичной users.users.<name>, однако, поскольку NixOS не управляет домашним каталогом пользователей, вы не сможете размещать файлы конфигурации и создавать каталоги.

Служба пользователяшаблоны должны решить вашу проблему, и вы все равно можете инкапсулировать их в свой модуль

примерно так:

config = {
  systemd.user.services."mutt@" = {
    # template unit declaration
    ...
  };
  ... 
}

Таким образом, вы можете использовать функции шаблона systemd для получения текущего пользователя и его пути, еслинеобходимо.

...