editorconfig: add module (#3204)

Add a module to generate `~/.editorconfig` configuration file.

Co-authored-by: Robert Helgesson <robert@rycee.net>
Co-authored-by: Sumner Evans <me@sumnerevans.com>
This commit is contained in:
Loïc Reynier 2022-09-06 15:50:36 +02:00 committed by GitHub
parent 583a99f016
commit de94878b6b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 109 additions and 0 deletions

3
.github/CODEOWNERS vendored
View file

@ -18,6 +18,9 @@ Makefile @thiagokokada
/modules/misc/dconf.nix @rycee /modules/misc/dconf.nix @rycee
/modules/misc/editorconfig.nix @loicreynier
/test/modules/misc/editorconfig @loicreynier
/modules/misc/fontconfig.nix @rycee /modules/misc/fontconfig.nix @rycee
/tests/modules/misc/fontconfig @rycee /tests/modules/misc/fontconfig @rycee

View file

@ -0,0 +1,53 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.editorconfig;
iniFormat = pkgs.formats.ini { };
in {
meta.maintainers = with maintainers; [ loicreynier ];
options.editorconfig = {
enable = mkEnableOption "EditorConfig home configuration file";
settings = mkOption {
type = iniFormat.type;
default = { };
description = ''
Configuration written to <filename>$HOME/.editorconfig</filename>.
<code>root = true</code> is automatically added to the file,
it must not be added here.
See <link xlink:href="https://editorconfig.org"/> 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}
'';
};
}

View file

@ -668,6 +668,13 @@ in
A new module is available: 'programs.btop'. A new module is available: 'programs.btop'.
''; '';
} }
{
time = "2022-09-05T11:05:25+00:00";
message = ''
A new module is available: 'editorconfig'.
'';
}
]; ];
}; };
} }

View file

@ -24,6 +24,7 @@ let
./manual.nix ./manual.nix
./misc/dconf.nix ./misc/dconf.nix
./misc/debug.nix ./misc/debug.nix
./misc/editorconfig.nix
./misc/fontconfig.nix ./misc/fontconfig.nix
./misc/gtk.nix ./misc/gtk.nix
./misc/lib.nix ./misc/lib.nix

View file

@ -127,6 +127,7 @@ import nmt {
./modules/config/i18n ./modules/config/i18n
./modules/i18n/input-method ./modules/i18n/input-method
./modules/misc/debug ./modules/misc/debug
./modules/misc/editorconfig
./modules/misc/gtk ./modules/misc/gtk
./modules/misc/numlock ./modules/misc/numlock
./modules/misc/pam ./modules/misc/pam

View file

@ -0,0 +1 @@
{ editorconfig-simple-config = ./editorconfig-simple-config.nix; }

View file

@ -0,0 +1,15 @@
# Generated by Home Manager
root=true
[*]
charset=utf-8
end_of_line=lf
indent_style=space
insert_final_newline=true
max_line_width=78
trim_trailing_whitespace=true
[*.md]
indent_size=unset
trim_trailing_whitespace=false

View file

@ -0,0 +1,28 @@
{ ... }:
{
editorconfig = {
enable = true;
settings = {
"*" = {
charset = "utf-8";
end_of_line = "lf";
trim_trailing_whitespace = true;
insert_final_newline = true;
max_line_width = 78;
indent_style = "space";
};
"*.md" = {
indent_size = "unset";
trim_trailing_whitespace = false;
};
};
};
nmt.script = ''
assertFileExists home-files/.editorconfig
assertFileContent home-files/.editorconfig ${
./editorconfig-simple-config-expected
}
'';
}