{ config, lib, pkgs, ... }: let cfg = config.editorconfig; iniFormat = pkgs.formats.ini { }; in { meta.maintainers = with lib.maintainers; [ loicreynier ]; options.editorconfig = { enable = lib.mkEnableOption "EditorConfig home configuration file"; settings = lib.mkOption { type = iniFormat.type; default = { }; description = '' Configuration written to {file}`$HOME/.editorconfig`. `root = true` is automatically added to the file, it must not be added here. See for documentation. ''; example = lib.literalExpression '' { "*" = { charset = "utf-8"; end_of_line = "lf"; trim_trailing_whitespace = true; insert_final_newline = true; max_line_width = 78; indent_style = "space"; indent_size = 4; }; }; ''; }; }; config = lib.mkIf (cfg.enable && cfg.settings != { }) { home.file.".editorconfig".text = let renderedSettings = lib.generators.toINIWithGlobalSection { } { globalSection = { root = true; }; sections = cfg.settings; }; in '' # Generated by Home Manager ${renderedSettings} ''; }; }