# =============================================================================
#  armor — 文本/二进制归属与行尾（CRLF/LF）策略
# -----------------------------------------------------------------------------
#  规则：仓库里一律存 LF；工作区只在 Windows 原生脚本上使用 CRLF。
#  目的：
#    * 避免不同机器（core.autocrlf 开着/关着）之间产生"整文件假改动"；
#    * 让 diff / blame / 合并只在真正改动的行上出现；
#    * .ps1/.bat/.cmd 保持 CRLF，兼容 cmd.exe 与习惯 Windows 的工具链。
#
#  注意：.gitattributes 的 text/eol 属性优先级高于 core.autocrlf。
#        本文件用 "* text=auto eol=lf" 覆盖了所有路径，所以无论别人本机
#        core.autocrlf 是 true / false / 未设置，入库结果都完全一致（已实测）。
#        若想改成"工作区也全用 LF"（含 .ps1），只需把第 1 节的
#        eol=crlf 全部改成 eol=lf，其余规则不用动。
#
#  核对命令：
#    git check-attr -a -- <路径>     查看某路径最终生效的属性
#    git ls-files --eol              查看已入库文件的 i/(索引) w/(工作区) 行尾
# =============================================================================

# 默认：内容自动判定是否为文本；文本一律在索引与工作区使用 LF
* text=auto eol=lf


# =============================================================================
# 1. Windows 原生脚本 —— 工作区保持 CRLF
# =============================================================================

# cmd.exe 对纯 LF 的 .bat/.cmd 处理有坑（尤其是带 label/goto 的脚本），
# 必须 CRLF；.ps1/.psm1 按 Windows 惯例也保持 CRLF。
*.ps1   text eol=crlf
*.psm1  text eol=crlf
*.bat   text eol=crlf
*.cmd   text eol=crlf


# =============================================================================
# 2. 源码与文本配置 —— 显式声明为文本，工作区 LF
# =============================================================================

# 固件源码（main/ 下的 C/C++ 与官方 RMT 编码器）
*.c     text eol=lf
*.h     text eol=lf
*.cpp   text eol=lf
*.hpp   text eol=lf
*.cc    text eol=lf
*.hh    text eol=lf

# 构建系统
CMakeLists.txt     text eol=lf
*.cmake            text eol=lf
Kconfig            text eol=lf
Kconfig.projbuild  text eol=lf

# ESP-IDF 配置：sdkconfig 由工具生成（已忽略），defaults 是入库的那份
sdkconfig           text eol=lf
sdkconfig.old       text eol=lf
sdkconfig.defaults  text eol=lf
sdkconfig.ci*       text eol=lf

# 文档与数据
*.md    text eol=lf
*.rst   text eol=lf
*.txt   text eol=lf
*.csv   text eol=lf
*.json  text eol=lf
*.yml   text eol=lf
*.yaml  text eol=lf

# 本仓库自身的元文件与工程级工具配置
.gitignore      text eol=lf
.gitattributes  text eol=lf
.clangd         text eol=lf


# =============================================================================
# 3. 二进制 —— 禁止任何行尾转换与文本合并
# =============================================================================

# 固件/构建产物（已被 .gitignore 排除，这里再兜一层，防止被强制入库时被破坏）
*.bin   binary
*.elf   binary
*.hex   binary
*.a     binary
*.o     binary

# 图片与压缩包
*.png   binary
*.jpg   binary
*.jpeg  binary
*.gif   binary
*.ico   binary
*.bmp   binary
*.svg   binary
*.zip   binary
*.gz    binary
*.tar   binary
*.7z    binary

# 密钥与证书：绝不能因为行尾转换而改变字节
*.pem   binary
*.key   binary
*.der   binary
*.crt   binary
*.p12   binary
*.pfx   binary
