{ config, lib, ... }: with lib; let cfg = config.nixfiles.modules.editorconfig; in { options.nixfiles.modules.editorconfig.enable = mkEnableOption "Editorconfig"; config = mkIf cfg.enable { hm.editorconfig = { enable = true; settings = { "*" = { charset = "utf-8"; end_of_line = "lf"; indent_size = 2; indent_style = "space"; insert_final_newline = true; max_line_length = 80; trim_trailing_whitespace = true; }; # https://google.github.io/styleguide/cppguide.html#Spaces_vs._Tabs "*.{c,cc,cpp,cxx,h,hh,hpp,hxx}" = { indent_size = 2; indent_style = "space"; }; # https://go.dev/doc/effective_go#formatting "{*.go,go.mod}" = { indent_size = 2; indent_style = "tab"; }; # https://google.github.io/styleguide/pyguide.html#s3.4-indentation # https://peps.python.org/pep-0008/#indentation "*.py" = { indent_size = 4; indent_style = "space"; }; # https://google.github.io/styleguide/shellguide.html#s5-formatting "*.{sh,bash}" = { indent_size = 2; indent_style = "space"; }; # https://www.haskell.org/onlinereport/haskell2010/haskellch10.html#x17-17800010.3 # https://en.wikibooks.org/wiki/Haskell/Indentation "*.hs" = { indent_size = 2; indent_style = "space"; }; # https://google.github.io/styleguide/lispguide.xml#Formatting "*.{lisp,cl,rkt,scm,el}" = { indent_size = 2; indent_style = "space"; }; "*.{asm,s,S}" = { indent_size = 4; indent_style = "spaces"; }; # https://www.gnu.org/software/make/manual/html_node/Rule-Syntax.html "{Makefile*,*.mk}" = { indent_size = 4; indent_style = "tab"; }; # https://cmake-format.readthedocs.io/en/latest/configopts.html#tab-size # https://cmake-format.readthedocs.io/en/latest/configopts.html#use-tabchars "{CMakeLists.txt,*.cmake}" = { indent_size = 2; indent_style = "space"; }; # https://github.com/NixOS/rfcs/pull/166 "*.nix" = { indent_size = 2; indent_style = "space"; }; # https://nickel-lang.org/user-manual/syntax "*.ncl" = { indent_size = 2; indent_style = "space"; }; # https://developer.hashicorp.com/terraform/language/syntax/style "*.{tf,hcl}" = { indent_size = 2; indent_style = "space"; }; "*.{json,jsn}" = { indent_size = 2; indent_style = "space"; }; # https://yaml.org/spec/1.2.2/#61-indentation-spaces "*.{yaml,yml}" = { indent_size = 2; indent_style = "space"; }; "*.{toml,tml}" = { indent_size = 2; indent_style = "space"; }; # https://google.github.io/styleguide/htmlcssguide.html#Indentation "*.{html,css}" = { indent_size = 2; indent_style = "space"; }; # https://latexindentpl.readthedocs.io/en/latest/sec-default-user-local.html "*.{tex,cls}" = { indent_size = 4; indent_style = "tab"; }; }; }; }; }