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.
- protostar-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +51 -0
- protostar-0.1.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
- protostar-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +24 -0
- protostar-0.1.0/.github/workflows/ci.yml +42 -0
- protostar-0.1.0/.github/workflows/release.yml +42 -0
- protostar-0.1.0/.gitignore +13 -0
- protostar-0.1.0/.markdownlint.yaml +54 -0
- protostar-0.1.0/.pre-commit-config.yaml +31 -0
- protostar-0.1.0/.python-version +1 -0
- protostar-0.1.0/CODE_OF_CONDUCT.md +32 -0
- protostar-0.1.0/LICENSE +21 -0
- protostar-0.1.0/PKG-INFO +168 -0
- protostar-0.1.0/README.md +129 -0
- protostar-0.1.0/pyproject.toml +123 -0
- protostar-0.1.0/src/protostar/__init__.py +0 -0
- protostar-0.1.0/src/protostar/cli.py +137 -0
- protostar-0.1.0/src/protostar/config.py +50 -0
- protostar-0.1.0/src/protostar/manifest.py +39 -0
- protostar-0.1.0/src/protostar/modules/__init__.py +19 -0
- protostar-0.1.0/src/protostar/modules/base.py +40 -0
- protostar-0.1.0/src/protostar/modules/ide_layer.py +48 -0
- protostar-0.1.0/src/protostar/modules/lang_layer.py +132 -0
- protostar-0.1.0/src/protostar/modules/os_layer.py +35 -0
- protostar-0.1.0/src/protostar/orchestrator.py +122 -0
- protostar-0.1.0/src/protostar/presets/__init__.py +0 -0
- protostar-0.1.0/src/protostar/presets/scientific.py +10 -0
- protostar-0.1.0/src/protostar/system.py +35 -0
- protostar-0.1.0/tests/__init__.py +0 -0
- protostar-0.1.0/tests/conftest.py +15 -0
- protostar-0.1.0/tests/test_manifest.py +41 -0
- protostar-0.1.0/tests/test_modules.py +71 -0
- protostar-0.1.0/tests/test_orchestrator.py +90 -0
- protostar-0.1.0/tests/test_system.py +31 -0
- 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,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,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.
|
protostar-0.1.0/LICENSE
ADDED
|
@@ -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.
|
protostar-0.1.0/PKG-INFO
ADDED
|
@@ -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
|
+
[](https://github.com/jacksonfergusondev/protostar/actions/workflows/ci.yml)
|
|
43
|
+
[](https://github.com/jacksonfergusondev/protostar/actions/workflows/release.yml)
|
|
44
|
+
[](https://www.python.org/downloads/)
|
|
45
|
+
[](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
|
+
[](https://github.com/jacksonfergusondev/protostar/actions/workflows/ci.yml)
|
|
4
|
+
[](https://github.com/jacksonfergusondev/protostar/actions/workflows/release.yml)
|
|
5
|
+
[](https://www.python.org/downloads/)
|
|
6
|
+
[](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.
|