{ config, lib, pkgs, ... }: with lib; let cfg = config.editorconfig; iniFormat = pkgs.formats.ini { }; in { meta.maintainers = with maintainers; [ loicreynier ]; options.editorconfig = { enable = mkEnableOption (lib.mdDoc "EditorConfig home configuration file"); settings = mkOption { type = iniFormat.type; default = { }; description = lib.mdDoc '' Configuration written to {file}`$HOME/.editorconfig`. `root = true` is automatically added to the file, it must not be added here. See for documentation. ''; example = 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 = mkIf (cfg.enable && cfg.settings != { }) { home.file.".editorconfig".text = let renderedSettings = generators.toINIWithGlobalSection { } { globalSection = { root = true; }; sections = cfg.settings; }; in '' # Generated by Home Manager ${renderedSettings} ''; }; }