# ---------------------------------------------------------------------------
# Python
# ---------------------------------------------------------------------------
__pycache__/
*.py[cod]
*$py.class
*.so
*.pyd

# ---------------------------------------------------------------------------
# Packaging / build artifacts
#
# /build and /dist are anchored to the repo root on purpose. The vendored
# packages/totalsync_webinterface/totalsync_webinterface/web/webgl-plot/dist/ is checked
# in and is now the only thing left of that tree, so an unanchored `dist/` would erase
# the plotting library the interface loads.
# ---------------------------------------------------------------------------
/build/
/dist/
/sdist/
*.egg-info/
*.egg
.eggs/
MANIFEST
wheels/

# ---------------------------------------------------------------------------
# Virtual environments
#
# uv.lock is deliberately NOT ignored: TotalSync is an application, so the
# lock file is what pins the exact versions the lab machines get.
# ---------------------------------------------------------------------------
.venv/
venv/
env/
ENV/
.python-version

# ---------------------------------------------------------------------------
# Test / type-check / lint caches
# ---------------------------------------------------------------------------
.pytest_cache/
.mypy_cache/
.dmypy.json
.ruff_cache/
.tox/
.nox/
.coverage
.coverage.*
coverage.xml
htmlcov/

# ---------------------------------------------------------------------------
# Recorded data and logs
#
# serial_dump writes <chosen dir>/<timestamp>.b64 (and .bin with -B); the
# fallback when the directory chooser is cancelled is ./DataFile/.
# curses_interface refers to ./LogFile/.
# ---------------------------------------------------------------------------
DataFile/
LogFile/
*.b64

# ---------------------------------------------------------------------------
# Teensy / Arduino build output
# ---------------------------------------------------------------------------
*.hex
*.elf
*.bin
.build/

# ---------------------------------------------------------------------------
# Node
#
# Not needed to build TotalSync: the vendored webgl-plot is trimmed to the prebuilt
# dist/webglplot.esm.js bundle, so there is nothing here to compile. Kept in case
# someone re-vendors it from upstream.
# ---------------------------------------------------------------------------
node_modules/
npm-debug.log*
yarn-error.log*

# ---------------------------------------------------------------------------
# JetBrains IDEs (PyCharm, CLion)
#
# Two projects live in this repo: PyCharm at the root and CLion at firmware/.
# Every pattern is therefore written `**/.idea/...`, not `.idea/...`: a pattern
# containing a slash anywhere but at the end is anchored to the directory of
# the .gitignore that holds it, so the plain form covered the root project only
# and left firmware/.idea/ exposed.
#
# Listed file by file rather than as a blanket `.idea/`, because two things in
# there are deliberately shared: inspectionProfiles/ (the lint settings the
# project agrees on) and vcs.xml (the Git root mapping — firmware/.idea/vcs.xml
# is what points CLion at the repository one level up).
# ---------------------------------------------------------------------------
**/.idea/workspace.xml
**/.idea/tasks.xml
**/.idea/usage.statistics.xml
**/.idea/dictionaries/
**/.idea/shelf/
**/.idea/httpRequests/
**/.idea/queries/
**/.idea/modules.xml
**/.idea/modules/
# The IDE writes its own .idea/.gitignore at project creation; this file
# supersedes it, and having both means the two can disagree.
**/.idea/.gitignore
# Machine-local: PyCharm keeps the interpreter path in misc.xml, CLion the
# PlatformIO linkage; deployment.xml holds SSH targets; editor.xml the CLion
# inspection severities. All four are regenerated by the IDE.
**/.idea/misc.xml
**/.idea/deployment.xml
**/.idea/editor.xml
**/.idea/webResources.xml
**/.idea/**/dataSources/
**/.idea/**/dataSources.ids
**/.idea/**/dataSources.local.xml
**/.idea/**/sqlDataSources.xml
**/.idea/**/dynamic.xml
# Module files, anywhere — covers **/.idea/*.iml too.
*.iml
*.iws
cmake-build-*/

# JetBrains AI Assistant / MCP scratch state, written per developer.
**/.ai/

# ---------------------------------------------------------------------------
# Other editors
# ---------------------------------------------------------------------------
.vscode/
*.sublime-project
*.sublime-workspace
*.swp
*.swo
*~

# ---------------------------------------------------------------------------
# Claude Code (per-developer permissions, not shared)
# ---------------------------------------------------------------------------
.claude/settings.local.json

# ---------------------------------------------------------------------------
# OS cruft — this project is run on Windows, macOS and Linux
# ---------------------------------------------------------------------------
.DS_Store
.AppleDouble
.LSOverride
._*
.Spotlight-V100
.Trashes
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
Desktop.ini
$RECYCLE.BIN/
.directory
.fuse_hidden*
.nfs*

# ---------------------------------------------------------------------------
# Sphinx / ReadTheDocs
# ---------------------------------------------------------------------------
docs/_build/

# Staged by packages/totalsync_utils/hatch_build.py from firmware/ at build time;
# the tree at firmware/ is the source of truth.
/packages/totalsync_utils/totalsync_utils/data/firmware/
