chore: enforce LF line endings via gitattributes, editorconfig, pre-commit

Introduces a three-layer defence against CRLF/LF drift:

- `.gitattributes` normalizes all text files to LF on commit and checkout;
  Windows-native scripts (*.bat, *.cmd, *.ps1) explicitly keep CRLF.
- `.editorconfig` instructs editors (VS Code, JetBrains, vim, etc.) to save
  with LF by default so the problem is prevented at the source.
- `mixed-line-ending --fix=lf` hook in pre-commit catches anything that
  slips through and auto-fixes it before commit.

No file contents are normalized in this commit — that follows in a
separate `git add --renormalize .` commit for easier review.
This commit is contained in:
Eugene Mikhantyev
2026-04-18 15:20:20 +01:00
parent 03bafce616
commit 2c35ff40a7
3 changed files with 74 additions and 0 deletions

51
.gitattributes vendored Normal file
View File

@@ -0,0 +1,51 @@
# Normalize all text files to LF on commit and checkout.
# Prevents CRLF drift when contributors work on Windows with core.autocrlf=true.
* text=auto eol=lf
# Python and shell — LF everywhere, shebangs require it on Unix.
*.py text eol=lf
*.sh text eol=lf
# Web / config — LF.
*.ts text eol=lf
*.tsx text eol=lf
*.js text eol=lf
*.jsx text eol=lf
*.mjs text eol=lf
*.cjs text eol=lf
*.json text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.toml text eol=lf
*.md text eol=lf
*.html text eol=lf
*.css text eol=lf
# KiCad project files are text (S-expressions / JSON) — LF.
*.kicad_sch text eol=lf
*.kicad_pcb text eol=lf
*.kicad_pro text eol=lf
*.kicad_sym text eol=lf
*.kicad_mod text eol=lf
*.kicad_dru text eol=lf
*.kicad_wks text eol=lf
*.net text eol=lf
# Windows-native scripts — must stay CRLF.
*.bat text eol=crlf
*.cmd text eol=crlf
*.ps1 text eol=crlf
# Binary assets — never touch.
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.pdf binary
*.zip binary
*.gz binary
*.woff binary
*.woff2 binary
*.ttf binary
*.otf binary