protostar 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. protostar-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +51 -0
  2. protostar-0.1.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
  3. protostar-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +24 -0
  4. protostar-0.1.0/.github/workflows/ci.yml +42 -0
  5. protostar-0.1.0/.github/workflows/release.yml +42 -0
  6. protostar-0.1.0/.gitignore +13 -0
  7. protostar-0.1.0/.markdownlint.yaml +54 -0
  8. protostar-0.1.0/.pre-commit-config.yaml +31 -0
  9. protostar-0.1.0/.python-version +1 -0
  10. protostar-0.1.0/CODE_OF_CONDUCT.md +32 -0
  11. protostar-0.1.0/LICENSE +21 -0
  12. protostar-0.1.0/PKG-INFO +168 -0
  13. protostar-0.1.0/README.md +129 -0
  14. protostar-0.1.0/pyproject.toml +123 -0
  15. protostar-0.1.0/src/protostar/__init__.py +0 -0
  16. protostar-0.1.0/src/protostar/cli.py +137 -0
  17. protostar-0.1.0/src/protostar/config.py +50 -0
  18. protostar-0.1.0/src/protostar/manifest.py +39 -0
  19. protostar-0.1.0/src/protostar/modules/__init__.py +19 -0
  20. protostar-0.1.0/src/protostar/modules/base.py +40 -0
  21. protostar-0.1.0/src/protostar/modules/ide_layer.py +48 -0
  22. protostar-0.1.0/src/protostar/modules/lang_layer.py +132 -0
  23. protostar-0.1.0/src/protostar/modules/os_layer.py +35 -0
  24. protostar-0.1.0/src/protostar/orchestrator.py +122 -0
  25. protostar-0.1.0/src/protostar/presets/__init__.py +0 -0
  26. protostar-0.1.0/src/protostar/presets/scientific.py +10 -0
  27. protostar-0.1.0/src/protostar/system.py +35 -0
  28. protostar-0.1.0/tests/__init__.py +0 -0
  29. protostar-0.1.0/tests/conftest.py +15 -0
  30. protostar-0.1.0/tests/test_manifest.py +41 -0
  31. protostar-0.1.0/tests/test_modules.py +71 -0
  32. protostar-0.1.0/tests/test_orchestrator.py +90 -0
  33. protostar-0.1.0/tests/test_system.py +31 -0
  34. protostar-0.1.0/uv.lock +885 -0
@@ -0,0 +1,51 @@
1
+ name: Bug Report
2
+ description: Report a reproducible issue with environment scaffolding.
3
+ title: "bug: <short description>"
4
+ labels: ["bug"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ **Thank you for reporting an issue.** To help reduce debugging entropy, please provide the exact state of your environment.
10
+ - type: input
11
+ id: version
12
+ attributes:
13
+ label: Protostar Version
14
+ description: What version of Protostar are you running?
15
+ placeholder: "e.g., 0.1.0"
16
+ validations:
17
+ required: true
18
+ - type: dropdown
19
+ id: os
20
+ attributes:
21
+ label: Operating System
22
+ options:
23
+ - macOS
24
+ - Linux
25
+ - Windows (WSL)
26
+ - Other
27
+ validations:
28
+ required: true
29
+ - type: input
30
+ id: command
31
+ attributes:
32
+ label: Command Executed
33
+ description: What exact command did you run?
34
+ placeholder: "protostar --python --scientific"
35
+ validations:
36
+ required: true
37
+ - type: textarea
38
+ id: expected
39
+ attributes:
40
+ label: Expected Behavior
41
+ description: What did you expect to happen?
42
+ validations:
43
+ required: true
44
+ - type: textarea
45
+ id: actual
46
+ attributes:
47
+ label: Actual Behavior / Traceback
48
+ description: What actually happened? Paste any error output here.
49
+ render: shell
50
+ validations:
51
+ required: true
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: GitHub Discussions
4
+ url: https://github.com/jacksonfergusondev/protostar/discussions
5
+ about: Please ask questions and discuss ideas here before opening an issue.
@@ -0,0 +1,24 @@
1
+ name: Feature Request
2
+ description: Propose a new language module, IDE integration, or preset.
3
+ title: "feat: <short description>"
4
+ labels: ["enhancement"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ **Proposing an addition to the Accretion Engine**
10
+ Protostar thrives on vertical integration. If you are proposing a new language or framework, please outline the exact files/commands it requires.
11
+ - type: textarea
12
+ id: problem
13
+ attributes:
14
+ label: The Problem (Logistical Entropy)
15
+ description: What manual configuration are you constantly doing that Protostar should automate?
16
+ validations:
17
+ required: true
18
+ - type: textarea
19
+ id: solution
20
+ attributes:
21
+ label: Proposed Implementation
22
+ description: What specific CLI commands (e.g., `cargo init`) and ignores (e.g., `node_modules/`) does this require?
23
+ validations:
24
+ required: true
@@ -0,0 +1,42 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ "main" ]
6
+ pull_request:
7
+ branches: [ "main" ]
8
+
9
+ jobs:
10
+ build:
11
+ name: Test on ${{ matrix.os }} / Python ${{ matrix.python-version }}
12
+ runs-on: ${{ matrix.os }}
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ os: [ubuntu-latest, macos-latest]
17
+ python-version: ["3.12", "3.14"]
18
+
19
+ steps:
20
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
21
+
22
+ - name: Install uv
23
+ uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7
24
+ with:
25
+ python-version: ${{ matrix.python-version }}
26
+
27
+ - name: Install dependencies
28
+ run: uv sync --all-extras --dev
29
+
30
+ - name: Lint with Ruff
31
+ run: |
32
+ uv run ruff check .
33
+ uv run ruff format --check .
34
+
35
+ - name: Lint Markdown
36
+ run: npx --yes markdownlint-cli "**/*.md" --ignore ".venv"
37
+
38
+ - name: Type check with Mypy
39
+ run: uv run mypy .
40
+
41
+ - name: Run tests
42
+ run: uv run pytest
@@ -0,0 +1,42 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*.*.*"
7
+
8
+ jobs:
9
+ build-n-publish:
10
+ name: Build and publish to PyPI
11
+ runs-on: ubuntu-latest
12
+ environment: release
13
+ permissions:
14
+ contents: read
15
+ id-token: write
16
+
17
+ steps:
18
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
19
+
20
+ - name: Install uv
21
+ uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7
22
+ with:
23
+ python-version: "3.14"
24
+
25
+ - name: Build distribution
26
+ run: uv build
27
+
28
+ - name: Publish to PyPI
29
+ uses: pypa/gh-action-pypi-publish@release/v1
30
+
31
+ update-homebrew:
32
+ needs: build-n-publish
33
+ runs-on: ubuntu-latest
34
+ steps:
35
+ - name: Update Homebrew Formula
36
+ uses: mislav/bump-homebrew-formula-action@v3
37
+ with:
38
+ formula-name: protostar
39
+ homebrew-tap: JacksonFergusonDev/homebrew-tap
40
+ download-url: https://github.com/JacksonFergusonDev/protostar/archive/refs/tags/${{ github.ref_name }}.tar.gz
41
+ env:
42
+ COMMITTER_TOKEN: ${{ secrets.TAP_GITHUB_TOKEN }}
@@ -0,0 +1,13 @@
1
+ __pycache__/
2
+ *.pyc
3
+ .DS_Store
4
+ dist/
5
+ build/
6
+ *.egg-info/
7
+ .env
8
+ .coverage
9
+ .pytest_cache/
10
+ htmlcov/
11
+ .hypothesis/
12
+ .ipynb_checkpoints/
13
+ .mypy_cache/
@@ -0,0 +1,54 @@
1
+ # .markdownlint.yaml
2
+
3
+ # Inherit default rules
4
+ default: true
5
+
6
+ # --- Disabled Rules ---
7
+
8
+ # MD013: Line length
9
+ # Rationale: Hard-wrapping text disrupts IDE reading flow, breaks URLs, and creates arbitrary diff churn.
10
+ MD013: false
11
+
12
+ # MD033: Inline HTML
13
+ # Rationale: Required for layout elements unsupported by strict Markdown (e.g., <details> blocks, complex tables).
14
+ MD033: false
15
+
16
+ # --- Refined Rules ---
17
+
18
+ # MD024: Multiple headings with the same content
19
+ # Rationale: Allows duplicate subheadings (e.g., "Parameters") under different primary function headings.
20
+ MD024:
21
+ siblings_only: true
22
+
23
+ # --- AST/Parser Enforcement ---
24
+
25
+ # MD031: Fenced code blocks should be surrounded by blank lines
26
+ # Rationale: Prevents strict parsers from rendering backticks as raw text instead of <pre><code> blocks.
27
+ MD031: true
28
+
29
+ # MD032: Lists should be surrounded by blank lines
30
+ # Rationale: Prevents contiguous text from merging into lists, ensuring correct AST generation.
31
+ MD032: true
32
+
33
+ # --- Structural Consistency ---
34
+
35
+ # MD003: Heading style
36
+ # Rationale: Enforces ATX style (# Heading) exclusively.
37
+ MD003:
38
+ style: "atx"
39
+
40
+ # MD004: Unordered list style
41
+ # Rationale: Enforces dash markers for consistency across the syntax tree.
42
+ MD004:
43
+ style: "dash"
44
+
45
+ # MD009: Trailing spaces
46
+ # Rationale: Allows exactly two spaces for hard line breaks; flags arbitrary whitespace.
47
+ MD009:
48
+ br_spaces: 2
49
+ strict: false
50
+
51
+ # MD029: Ordered list item prefix
52
+ # Rationale: Enforces the "one" style (1., 1., 1.) to minimize Git diff noise when rearranging list items.
53
+ MD029:
54
+ style: "one"
@@ -0,0 +1,31 @@
1
+ repos:
2
+ # 1. Generic hooks (configured to IGNORE Python)
3
+ - repo: https://github.com/pre-commit/pre-commit-hooks
4
+ rev: v6.0.0
5
+ hooks:
6
+ - id: trailing-whitespace
7
+ exclude: \.py$
8
+ - id: end-of-file-fixer
9
+ exclude: \.py$
10
+ - id: check-yaml
11
+ - id: check-added-large-files
12
+
13
+ # 2. Python-specific toolchain
14
+ - repo: https://github.com/astral-sh/ruff-pre-commit
15
+ rev: v0.14.11
16
+ hooks:
17
+ - id: ruff-format
18
+ - id: ruff
19
+ args: [ --fix ]
20
+
21
+ - repo: https://github.com/pre-commit/mirrors-mypy
22
+ rev: v1.19.1
23
+ hooks:
24
+ - id: mypy
25
+
26
+ # 3. Markdown linting
27
+ - repo: https://github.com/igorshubovych/markdownlint-cli
28
+ rev: v0.47.0
29
+ hooks:
30
+ - id: markdownlint
31
+ args: ["--fix"] # Automatically resolves formatting deviations
@@ -0,0 +1 @@
1
+ 3.14
@@ -0,0 +1,32 @@
1
+ # Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in our
6
+ community a harassment-free experience for everyone, regardless of age, body
7
+ size, visible or invisible disability, ethnicity, sex characteristics, gender
8
+ identity and expression, level of experience, education, socio-economic status,
9
+ nationality, personal appearance, race, caste, religion, or sexual identity
10
+ and orientation.
11
+
12
+ We pledge to act and interact in ways that contribute to an open, welcoming,
13
+ diverse, inclusive, and healthy community.
14
+
15
+ ## Our Standards
16
+
17
+ Examples of behavior that contributes to a positive environment for our
18
+ community include:
19
+
20
+ - Demonstrating empathy and kindness toward other people
21
+ - Being respectful of differing opinions, viewpoints, and experiences
22
+ - Giving and gracefully accepting constructive feedback
23
+ - Accepting responsibility and apologizing to those affected by our mistakes,
24
+ and learning from the experience
25
+ - Focusing on what is best not just for us as individuals, but for the
26
+ overall community
27
+
28
+ ## Enforcement
29
+
30
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
31
+ reported to the project maintainers. All complaints will be reviewed and
32
+ investigated promptly and fairly.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jackson Ferguson
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,168 @@
1
+ Metadata-Version: 2.4
2
+ Name: protostar
3
+ Version: 0.1.0
4
+ Summary: High-velocity, zero-friction environment scaffolding.
5
+ Project-URL: Repository, https://github.com/jacksonfergusondev/protostar
6
+ Project-URL: Issues, https://github.com/jacksonfergusondev/protostar/issues
7
+ Author-email: jackson.ferguson0@gmail.com
8
+ License: MIT License
9
+
10
+ Copyright (c) 2026 Jackson Ferguson
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+ License-File: LICENSE
30
+ Classifier: Operating System :: MacOS
31
+ Classifier: Operating System :: POSIX :: Linux
32
+ Classifier: Programming Language :: Python :: 3
33
+ Classifier: Programming Language :: Python :: 3.12
34
+ Classifier: Programming Language :: Python :: 3.13
35
+ Classifier: Programming Language :: Python :: 3.14
36
+ Requires-Python: >=3.12
37
+ Requires-Dist: rich>=14.2.0
38
+ Description-Content-Type: text/markdown
39
+
40
+ # 🌟 Protostar (v0.1.0)
41
+
42
+ [![CI](https://github.com/jacksonfergusondev/protostar/actions/workflows/ci.yml/badge.svg)](https://github.com/jacksonfergusondev/protostar/actions/workflows/ci.yml)
43
+ [![Release](https://github.com/jacksonfergusondev/protostar/actions/workflows/release.yml/badge.svg)](https://github.com/jacksonfergusondev/protostar/actions/workflows/release.yml)
44
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
45
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
46
+
47
+ **A modular CLI tool for quickly scaffolding software environments.**
48
+
49
+ Setting up a new project often requires the same manual steps: configuring linters, writing `.gitignore` files, setting up virtual environments, and linking IDEs. Protostar automates this boilerplate so you can skip the setup and get straight to writing code.
50
+
51
+ ---
52
+
53
+ ## 💡 Design Philosophy
54
+
55
+ While Protostar is a lightweight utility, it was built around two specific structural concepts:
56
+
57
+ ### 1. Deterministic Execution
58
+
59
+ Most bootstrapping scripts run a sequence of shell commands and fail unpredictably if a dependency is missing. Protostar separates state definition from execution. It uses an internal `EnvironmentManifest` where modules (Python, Rust, Linux, etc.) append their requirements. Disk I/O and subprocesses only occur at the very end, ensuring the environment is generated safely without clobbering existing files.
60
+
61
+ ### 2. Signal vs. Noise
62
+
63
+ Project configuration is necessary noise; writing logic is the signal. By vertically integrating the OS, IDE, and Language strata into a single command, Protostar attempts to reduce the logistical entropy of starting a new repository.
64
+
65
+ ---
66
+
67
+ ## 📦 Installation
68
+
69
+ ### macOS (Homebrew)
70
+
71
+ If you are on macOS, you can install via Homebrew:
72
+
73
+ ```bash
74
+ brew tap jacksonfergusondev/tap
75
+ brew install protostar
76
+ ```
77
+
78
+ ### Universal (uv)
79
+
80
+ For isolated CLI tool installation on any OS, `uv` is recommended:
81
+
82
+ ```bash
83
+ uv tool install protostar
84
+ ```
85
+
86
+ ### Universal (pip)
87
+
88
+ You can also install it into your active environment using standard pip:
89
+
90
+ ```bash
91
+ pip install protostar
92
+ ```
93
+
94
+ ---
95
+
96
+ ## 🚀 Usage
97
+
98
+ Protostar is designed to be run right after you `mkdir` a new project.
99
+
100
+ ### Basic Scaffolding
101
+
102
+ Navigate to your empty directory and specify the languages you are using. The OS and IDE configurations are automatically inferred from your system and global settings.
103
+
104
+ ```bash
105
+ mkdir orbital-mechanics-sim
106
+ cd orbital-mechanics-sim
107
+ protostar --python --cpp
108
+ ```
109
+
110
+ *Result: Initializes `uv`, scaffolds a Python environment, configures C++ build exclusions, and generates your `.vscode/settings.json`.*
111
+
112
+ ### The Scientific Preset
113
+
114
+ If you are building a data analysis pipeline, use the scientific preset to pre-load a standard analytical stack.
115
+
116
+ ```bash
117
+ protostar --python --scientific
118
+ ```
119
+
120
+ *Result: Installs the Python scientific stack (`numpy`, `scipy`, `pandas`, `matplotlib`, `seaborn`, `ipykernel`) into the new environment.*
121
+
122
+ ---
123
+
124
+ ## 🛠 Command Reference
125
+
126
+ | Flag / Command | Description |
127
+ | :--- | :--- |
128
+ | `--python` | Scaffolds a Python environment using `uv`. Ignores caches and venvs. |
129
+ | `--rust` | Scaffolds a Rust environment using `cargo`. Ignores targets. |
130
+ | `--node` | Scaffolds a Node.js/TypeScript environment. Ignores `node_modules`. |
131
+ | `--cpp` | Configures a C/C++ footprint (ignores `build/`, `*.o`, `compile_commands.json`). |
132
+ | `--latex` | Configures a LaTeX footprint (ignores `*.aux`, `*.log`, `*.synctex.gz`). |
133
+ | `--scientific` | Injects foundational computational and statistical libraries (Python only). |
134
+
135
+ ---
136
+
137
+ ## ⚙️ Configuration
138
+
139
+ You can set global defaults in `~/.config/protostar/config.toml` so you don't have to specify your IDE or package manager preferences manually.
140
+
141
+ ```toml
142
+ [env]
143
+ # Options: "vscode", "cursor", "jetbrains", "none"
144
+ ide = "vscode"
145
+
146
+ # Options: "npm", "pnpm", "yarn"
147
+ node_package_manager = "npm"
148
+ ```
149
+
150
+ ---
151
+
152
+ ## 🤝 Collaboration & Extension
153
+
154
+ This tool uses a decoupled `BootstrapModule` architecture. Adding support for a new language or framework requires writing a single class that appends rules to the `EnvironmentManifest`. Feel free to open an issue or pull request if you'd like to see a specific toolchain supported.
155
+
156
+ ## 📧 Contact
157
+
158
+ ### Jackson Ferguson
159
+
160
+ - **GitHub:** [@JacksonFergusonDev](https://github.com/JacksonFergusonDev)
161
+ - **LinkedIn:** [Jackson Ferguson](https://www.linkedin.com/in/jackson--ferguson/)
162
+ - **Email:** <jackson.ferguson0@gmail.com>
163
+
164
+ ---
165
+
166
+ ## 📄 License
167
+
168
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
@@ -0,0 +1,129 @@
1
+ # 🌟 Protostar (v0.1.0)
2
+
3
+ [![CI](https://github.com/jacksonfergusondev/protostar/actions/workflows/ci.yml/badge.svg)](https://github.com/jacksonfergusondev/protostar/actions/workflows/ci.yml)
4
+ [![Release](https://github.com/jacksonfergusondev/protostar/actions/workflows/release.yml/badge.svg)](https://github.com/jacksonfergusondev/protostar/actions/workflows/release.yml)
5
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
7
+
8
+ **A modular CLI tool for quickly scaffolding software environments.**
9
+
10
+ Setting up a new project often requires the same manual steps: configuring linters, writing `.gitignore` files, setting up virtual environments, and linking IDEs. Protostar automates this boilerplate so you can skip the setup and get straight to writing code.
11
+
12
+ ---
13
+
14
+ ## 💡 Design Philosophy
15
+
16
+ While Protostar is a lightweight utility, it was built around two specific structural concepts:
17
+
18
+ ### 1. Deterministic Execution
19
+
20
+ Most bootstrapping scripts run a sequence of shell commands and fail unpredictably if a dependency is missing. Protostar separates state definition from execution. It uses an internal `EnvironmentManifest` where modules (Python, Rust, Linux, etc.) append their requirements. Disk I/O and subprocesses only occur at the very end, ensuring the environment is generated safely without clobbering existing files.
21
+
22
+ ### 2. Signal vs. Noise
23
+
24
+ Project configuration is necessary noise; writing logic is the signal. By vertically integrating the OS, IDE, and Language strata into a single command, Protostar attempts to reduce the logistical entropy of starting a new repository.
25
+
26
+ ---
27
+
28
+ ## 📦 Installation
29
+
30
+ ### macOS (Homebrew)
31
+
32
+ If you are on macOS, you can install via Homebrew:
33
+
34
+ ```bash
35
+ brew tap jacksonfergusondev/tap
36
+ brew install protostar
37
+ ```
38
+
39
+ ### Universal (uv)
40
+
41
+ For isolated CLI tool installation on any OS, `uv` is recommended:
42
+
43
+ ```bash
44
+ uv tool install protostar
45
+ ```
46
+
47
+ ### Universal (pip)
48
+
49
+ You can also install it into your active environment using standard pip:
50
+
51
+ ```bash
52
+ pip install protostar
53
+ ```
54
+
55
+ ---
56
+
57
+ ## 🚀 Usage
58
+
59
+ Protostar is designed to be run right after you `mkdir` a new project.
60
+
61
+ ### Basic Scaffolding
62
+
63
+ Navigate to your empty directory and specify the languages you are using. The OS and IDE configurations are automatically inferred from your system and global settings.
64
+
65
+ ```bash
66
+ mkdir orbital-mechanics-sim
67
+ cd orbital-mechanics-sim
68
+ protostar --python --cpp
69
+ ```
70
+
71
+ *Result: Initializes `uv`, scaffolds a Python environment, configures C++ build exclusions, and generates your `.vscode/settings.json`.*
72
+
73
+ ### The Scientific Preset
74
+
75
+ If you are building a data analysis pipeline, use the scientific preset to pre-load a standard analytical stack.
76
+
77
+ ```bash
78
+ protostar --python --scientific
79
+ ```
80
+
81
+ *Result: Installs the Python scientific stack (`numpy`, `scipy`, `pandas`, `matplotlib`, `seaborn`, `ipykernel`) into the new environment.*
82
+
83
+ ---
84
+
85
+ ## 🛠 Command Reference
86
+
87
+ | Flag / Command | Description |
88
+ | :--- | :--- |
89
+ | `--python` | Scaffolds a Python environment using `uv`. Ignores caches and venvs. |
90
+ | `--rust` | Scaffolds a Rust environment using `cargo`. Ignores targets. |
91
+ | `--node` | Scaffolds a Node.js/TypeScript environment. Ignores `node_modules`. |
92
+ | `--cpp` | Configures a C/C++ footprint (ignores `build/`, `*.o`, `compile_commands.json`). |
93
+ | `--latex` | Configures a LaTeX footprint (ignores `*.aux`, `*.log`, `*.synctex.gz`). |
94
+ | `--scientific` | Injects foundational computational and statistical libraries (Python only). |
95
+
96
+ ---
97
+
98
+ ## ⚙️ Configuration
99
+
100
+ You can set global defaults in `~/.config/protostar/config.toml` so you don't have to specify your IDE or package manager preferences manually.
101
+
102
+ ```toml
103
+ [env]
104
+ # Options: "vscode", "cursor", "jetbrains", "none"
105
+ ide = "vscode"
106
+
107
+ # Options: "npm", "pnpm", "yarn"
108
+ node_package_manager = "npm"
109
+ ```
110
+
111
+ ---
112
+
113
+ ## 🤝 Collaboration & Extension
114
+
115
+ This tool uses a decoupled `BootstrapModule` architecture. Adding support for a new language or framework requires writing a single class that appends rules to the `EnvironmentManifest`. Feel free to open an issue or pull request if you'd like to see a specific toolchain supported.
116
+
117
+ ## 📧 Contact
118
+
119
+ ### Jackson Ferguson
120
+
121
+ - **GitHub:** [@JacksonFergusonDev](https://github.com/JacksonFergusonDev)
122
+ - **LinkedIn:** [Jackson Ferguson](https://www.linkedin.com/in/jackson--ferguson/)
123
+ - **Email:** <jackson.ferguson0@gmail.com>
124
+
125
+ ---
126
+
127
+ ## 📄 License
128
+
129
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.