New users don't know how to configure concore. Currently, tool paths are scattered across four separate files:
concore.tools - compiler/runtime paths
concore.octave - enables Octave for .m files
concore.mcr - path to MATLAB Compiler Runtime
concore.sudo - Docker executable (e.g., sudo docker vs docker)
There is no single document showing:
- What fields exist in each file?
- What are valid values?
- Which files override which?
- How do they interact?
- What happens if a file is missing?
This creates friction for onboarding and contradicts concore's goal of improving UX.
Current State
From mkconcore.py , I can see the loader reads these files and environment variables, but the logic is implicit in code, not in documentation.
Proposed Solution
Create CONFIG.md documenting the unified and legacy config format.
Legacy Format (still supported)
concore.tools
Purpose: Override compiler and runtime paths
Example:
g++ = /usr/bin/g++
python3 = /opt/python3.11/bin/python3
iverilog = /usr/local/bin/iverilog
concore.octave
Purpose: Treat .m files as Octave (present = enabled, absent = disabled)
concore.mcr
Purpose: Path to MATLAB Compiler Runtime
Example:
/opt/matlab/mcr/v913
concore.sudo
Purpose: Docker executable (default: docker; can be: sudo docker, podman, etc.)
Example:
sudo docker
New Unified Format (concore.toml)
[tools]
g++ = "/usr/bin/g++"
python3 = "/opt/python3.11/bin/python3"
iverilog = "/usr/local/bin/iverilog"
[features]
octave_enabled = true
[matlab]
mcr_path = "/opt/matlab/mcr/v913"
[docker]
executable = "sudo docker"
Precedence (Priority Order)
- Environment variables (highest)
- concore.toml [tools] section
- Legacy concore.tools file
- Auto-detected via shutil.which()
- Defaults (lowest)
Benefits
- Single source of truth for configuration
- Reduces onboarding friction - new users know what to configure
- Unblocks the
concore setup wizard (knows what to write)
- Supports backward compatibility - old files still work
Implementation Tasks
New users don't know how to configure concore. Currently, tool paths are scattered across four separate files:
concore.tools- compiler/runtime pathsconcore.octave- enables Octave for .m filesconcore.mcr- path to MATLAB Compiler Runtimeconcore.sudo- Docker executable (e.g.,sudo dockervsdocker)There is no single document showing:
This creates friction for onboarding and contradicts concore's goal of improving UX.
Current State
From
mkconcore.py, I can see the loader reads these files and environment variables, but the logic is implicit in code, not in documentation.Proposed Solution
Create CONFIG.md documenting the unified and legacy config format.
Legacy Format (still supported)
concore.tools
Purpose: Override compiler and runtime paths
Example:
g++ = /usr/bin/g++
python3 = /opt/python3.11/bin/python3
iverilog = /usr/local/bin/iverilog
concore.octave
Purpose: Treat .m files as Octave (present = enabled, absent = disabled)
concore.mcr
Purpose: Path to MATLAB Compiler Runtime
Example:
/opt/matlab/mcr/v913
concore.sudo
Purpose: Docker executable (default: docker; can be: sudo docker, podman, etc.)
Example:
sudo docker
New Unified Format (concore.toml)
[tools]
g++ = "/usr/bin/g++"
python3 = "/opt/python3.11/bin/python3"
iverilog = "/usr/local/bin/iverilog"
[features]
octave_enabled = true
[matlab]
mcr_path = "/opt/matlab/mcr/v913"
[docker]
executable = "sudo docker"
Precedence (Priority Order)
Benefits
concore setupwizard (knows what to write)Implementation Tasks
docs/CONFIG.mdwith full schema and precedence rulesexample/concore.tomlmkconcore.pyexplaining loader logic