Unverified Commit 10c54292 authored by éclairevoyant's avatar éclairevoyant
Browse files

nixos/davfs2: fix settings option

parent bd4d3465
Loading
Loading
Loading
Loading
+39 −20
Original line number Diff line number Diff line
{ config, lib, pkgs, ... }:

let
  toStr = value:
    if true == value then "yes"
    else if false == value then "no"
    else toString value;

  inherit (lib.attrsets) mapAttrsToList optionalAttrs;
  inherit (lib.attrsets) optionalAttrs;
  inherit (lib.generators) toINIWithGlobalSection;
  inherit (lib.lists) optional;
  inherit (lib.modules) mkIf;
  inherit (lib.options) literalExpression mkEnableOption mkOption;
  inherit (lib.strings) concatLines;
  inherit (lib.types) lines str submodule;
  inherit (lib.strings) escape;
  inherit (lib.types) attrsOf bool int lines oneOf str submodule;

  cfg = config.services.davfs2;
  format = pkgs.formats.toml { };
  configFile = let
    settings = mapAttrsToList (n: v: "${n} = ${toStr v}") cfg.settings;
  in pkgs.writeText "davfs2.conf" ''
    ${concatLines settings}

  escapeString = escape ["\"" "\\"];

  formatValue = value:
    if true == value then "1"
    else if false == value then "0"
    else if builtins.isString value then "\"${escapeString value}\""
    else toString value;

  configFile = pkgs.writeText "davfs2.conf" ''
    ${toINIWithGlobalSection {
      mkSectionName = escapeString;
      mkKeyValue = k: v: "${k} ${formatValue v}";
    } cfg.settings}
    ${cfg.extraConfig}
  '';
in
@@ -71,14 +76,26 @@ in

    settings = mkOption {
      type = submodule {
        freeformType = format.type;
        freeformType = let
          valueTypes = [ bool int str ];
        in
        attrsOf (attrsOf (oneOf (valueTypes ++ [ (attrsOf (oneOf valueTypes)) ] )));
      };
      default = { };
      example = literalExpression ''
        {
          kernel_fs = "coda";
          globalSection = {
            proxy = "foo.bar:8080";
          use_locks = 0;
            use_locks = false;
          };
          sections = {
            "/media/dav" = {
              use_locks = true;
            };
            "/home/otto/mywebspace" = {
              gui_optimize = true;
            };
          };
        }
      '';
      description = ''
@@ -99,9 +116,11 @@ in
    environment.etc."davfs2/davfs2.conf".source = configFile;

    services.davfs2.settings = {
      globalSection = {
        dav_user = cfg.davUser;
        dav_group = cfg.davGroup;
      };
    };

    users.groups = optionalAttrs (cfg.davGroup == "davfs2") {
      davfs2.gid = config.ids.gids.davfs2;