Skip to content

Commit 53c507d

Browse files
Replace placeholder README with real content (#6)
Replace vague documentation with concrete information: - Add "Deliverable" section defining what Modshells does - Add "Current Status" summary showing working vs stub features - Split "Development Status" into "Working Now" vs "Not Yet Implemented" - Update "Usage" section to distinguish current functionality (v0.0) from planned functionality (v0.1+) - Improve directory structure descriptions Co-authored-by: Claude <noreply@anthropic.com>
1 parent 4efd119 commit 53c507d

1 file changed

Lines changed: 104 additions & 36 deletions

File tree

README.adoc

Lines changed: 104 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,35 +11,58 @@ Written in Ada for safety-critical reliability.
1111

1212
toc::[]
1313

14-
== Overview
14+
== Deliverable
1515

16-
Modshells transforms monolithic shell configuration files (`.bashrc`, `.zshrc`, etc.) into a modular directory structure. Instead of maintaining a single, sprawling configuration file, Modshells organises configurations into logical categories that are automatically sourced.
16+
**Modshells** is a command-line tool that transforms monolithic shell configuration files into a modular, maintainable directory structure. The tool:
1717

18-
=== The Problem
18+
1. **Creates** a standardised directory hierarchy for shell configurations
19+
2. **Detects** installed shells on your system (Bash, Zsh, Fish, Nushell, and 6 others)
20+
3. **Injects** sourcing logic into shell configuration files (with backup)
21+
4. **Ensures idempotency** - safe to run multiple times without side effects
1922

20-
Traditional shell configuration becomes unwieldy:
23+
=== Current Status
2124

22-
* Single files grow to hundreds of lines
23-
* Related configurations scattered throughout
24-
* Difficult to share configurations across shells
25-
* No clear separation of concerns
26-
* Risky manual editing of critical dotfiles
25+
[cols="1,1"]
26+
|===
27+
| Aspect | Status
28+
29+
| Directory creation | Working
30+
| Shell detection | Stub (returns hardcoded list)
31+
| Config backup | Not implemented
32+
| Source injection | Not implemented
33+
|===
2734

28-
=== The Solution
35+
*This is alpha software.* The core architecture is complete, but the primary feature (modularising shell configs) is not yet functional. See <<Development Status>> for details.
2936

30-
Modshells creates a standardised modular structure:
37+
=== What You Get
38+
39+
After running `modshells`, your shell configurations are organised into:
3140

3241
[source]
3342
----
3443
~/.config/nushell/modshells/
35-
├── core/ # Essential shell settings, prompts, paths
36-
├── tools/ # Tool-specific configs (git, fzf, starship)
37-
├── misc/ # Miscellaneous aliases and functions
38-
├── os/ # OS-specific configurations
39-
└── ui/ # Visual customisations, themes
44+
├── core/ # PATH, prompt, history, shell options
45+
├── tools/ # git, fzf, starship, direnv configs
46+
├── misc/ # Custom aliases and functions
47+
├── os/ # Linux vs macOS differences
48+
└── ui/ # Themes and visual settings
4049
----
4150

42-
Each directory contains shell-agnostic or shell-specific configuration snippets that are automatically sourced in order.
51+
Each shell's config file (`.bashrc`, `.zshrc`, etc.) sources these directories automatically. Add a new alias? Drop a file into `misc/`. OS-specific tweak? Put it in `os/`. Done.
52+
53+
== The Problem
54+
55+
Traditional shell configuration becomes unwieldy:
56+
57+
* Single files grow to hundreds of lines
58+
* Related configurations scattered throughout
59+
* Difficult to share configurations across shells
60+
* No clear separation of concerns
61+
* Risky manual editing of critical dotfiles
62+
63+
== The Solution
64+
65+
Modshells creates a standardised modular structure with shell-agnostic or shell-specific configuration snippets that are automatically sourced in order.
4366

4467
== Features
4568

@@ -152,21 +175,43 @@ nix profile install github:hyperpolymath/modshells
152175

153176
== Usage
154177

155-
=== Basic Initialisation
178+
=== Current Functionality (v0.0)
156179

157180
[source,bash]
158181
----
159-
# Initialise modular structure in default location
182+
# Build and run
183+
gprbuild -p -j0 modshells.gpr
184+
./bin/modshells
185+
----
186+
187+
Output:
188+
[source]
189+
----
190+
Starting modshells initialisation...
191+
Configuration path: /home/user/.config/nushell/modshells
192+
Modular directories created idempotently.
193+
----
194+
195+
This creates the directory structure. Shell detection and config injection are not yet functional.
196+
197+
=== Planned Functionality (v0.1+)
198+
199+
[source,bash]
200+
----
201+
# Initialise modular structure and inject into all detected shells
160202
modshells
161203
162204
# Use custom configuration path
163205
export MODSHELLS_CONFIG_PATH="$HOME/.config/shells/modular"
164206
modshells
207+
208+
# Target specific shells only
209+
modshells init --shell=bash,zsh
165210
----
166211

167-
=== Directory Structure
212+
=== Populating Your Configuration
168213

169-
After initialisation, populate directories with configuration snippets:
214+
After initialisation, add configuration snippets:
170215

171216
[source,bash]
172217
----
@@ -219,25 +264,48 @@ core/
219264

220265
Current version: **v0.0 (Alpha)**
221266

222-
=== Implemented
267+
=== Working Now
268+
269+
[cols="1,2"]
270+
|===
271+
| Feature | Description
223272

224-
* [x] Core Ada package structure
225-
* [x] Idempotent directory creation
226-
* [x] Configuration path resolution
227-
* [x] Environment variable support
228-
* [x] Shell type enumeration (10 shells)
229-
* [x] Signature-based modularisation check
230-
* [x] GNAT project build configuration
231-
* [x] CI/CD pipeline (GitHub Actions)
273+
| Directory creation
274+
| Idempotently creates `core/`, `tools/`, `misc/`, `os/`, `ui/` structure
232275

233-
=== In Progress
276+
| Path resolution
277+
| Reads `MODSHELLS_CONFIG_PATH` or defaults to `~/.config/nushell/modshells`
234278

235-
* [ ] Actual shell detection (currently stubbed)
236-
* [ ] Configuration file backup
237-
* [ ] Source injection logic
238-
* [ ] Shell-specific sourcing syntax
279+
| Shell enumeration
280+
| Defines 10 shell types (Bash, Zsh, Fish, Nushell, Ion, Oils, Tcsh, Ksh, Dash, PowerShell)
281+
282+
| Build system
283+
| GPRBuild project files with CI/CD (GitHub Actions)
284+
285+
| Idempotency markers
286+
| Signature-based detection to prevent duplicate injections
287+
|===
288+
289+
=== Not Yet Implemented (Stubs)
290+
291+
[cols="1,2"]
292+
|===
293+
| Feature | Current State
294+
295+
| Shell detection
296+
| Returns hardcoded list (Nushell, Bash, Zsh); needs `which`/`command -v` checks
297+
298+
| Config file backup
299+
| Not implemented; required before modifying dotfiles
300+
301+
| Source injection
302+
| Not implemented; the core feature that modifies `.bashrc`, `.zshrc`, etc.
303+
304+
| Shell-specific syntax
305+
| Not implemented; each shell needs different sourcing syntax
306+
|===
239307

240-
See link:ROADMAP.adoc[ROADMAP.adoc] for detailed development plans.
308+
See link:ROADMAP.adoc[ROADMAP.adoc] for the complete development plan.
241309

242310
== Contributing
243311

0 commit comments

Comments
 (0)