sympath 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.
- sympath-0.1.0/PKG-INFO +294 -0
- sympath-0.1.0/README.md +272 -0
- sympath-0.1.0/pyproject.toml +33 -0
- sympath-0.1.0/setup.cfg +4 -0
- sympath-0.1.0/sympath/__init__.py +3 -0
- sympath-0.1.0/sympath/__main__.py +5 -0
- sympath-0.1.0/sympath/cli.py +295 -0
- sympath-0.1.0/sympath/config.py +26 -0
- sympath-0.1.0/sympath/manager.py +144 -0
- sympath-0.1.0/sympath/utils.py +15 -0
- sympath-0.1.0/sympath.egg-info/PKG-INFO +294 -0
- sympath-0.1.0/sympath.egg-info/SOURCES.txt +13 -0
- sympath-0.1.0/sympath.egg-info/dependency_links.txt +1 -0
- sympath-0.1.0/sympath.egg-info/entry_points.txt +2 -0
- sympath-0.1.0/sympath.egg-info/top_level.txt +1 -0
sympath-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: sympath
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A powerful symlink-based path manager for developers
|
|
5
|
+
License: MIT
|
|
6
|
+
Keywords: symlink,path,cli,developer-tools,environment
|
|
7
|
+
Classifier: Development Status :: 3 - Alpha
|
|
8
|
+
Classifier: Environment :: Console
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: System :: Systems Administration
|
|
19
|
+
Classifier: Topic :: Utilities
|
|
20
|
+
Requires-Python: >=3.9
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
23
|
+
# sympath
|
|
24
|
+
|
|
25
|
+
**A powerful, cross-platform symlink-based path manager for developers.**
|
|
26
|
+
|
|
27
|
+
sympath lets you stop cluttering your system `PATH` with dozens of directories. Instead, maintain **one folder** full of symlinks that point to the real executables — and only add that single folder to `PATH`.
|
|
28
|
+
|
|
29
|
+
This is how Linux distros manage `/usr/local/bin`, and now you can do it on any OS.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Why sympath?
|
|
34
|
+
|
|
35
|
+
| Problem | sympath's Solution |
|
|
36
|
+
| --------------------------------------- | -------------------------------------- |
|
|
37
|
+
| `PATH` is thousands of characters long | One clean directory in `PATH` |
|
|
38
|
+
| Duplicate / stale `PATH` entries | Managed symlinks you can list & repair |
|
|
39
|
+
| Package managers fight over `PATH` | You decide what's exposed |
|
|
40
|
+
| Hard to see what tools are available | `sympath list` shows everything |
|
|
41
|
+
| Different projects need different tools | Multiple named link folders |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Installation
|
|
46
|
+
|
|
47
|
+
### From source (editable / development)
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
git clone https://github.com/your-user/sympath.git
|
|
51
|
+
cd sympath
|
|
52
|
+
pip install -e .
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Run without installing
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
python -m sympath --help
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
> **Note (Windows):** Creating symlinks may require **Administrator** privileges or Developer Mode enabled.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Quick Start
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# 1. Register a link directory
|
|
69
|
+
sympath add-folder tools C:\tools\bin
|
|
70
|
+
|
|
71
|
+
# 2. Add that directory to your system PATH (once, manually)
|
|
72
|
+
|
|
73
|
+
# 3. Link individual executables
|
|
74
|
+
sympath link "C:\Program Files\Neovim\bin\nvim.exe"
|
|
75
|
+
sympath link "C:\MinGW\bin\gcc.exe"
|
|
76
|
+
sympath link "C:\Python313\python.exe" --name py.exe
|
|
77
|
+
|
|
78
|
+
# 4. Or link every executable in a folder at once
|
|
79
|
+
sympath link-folder "C:\Program Files\LLVM\bin"
|
|
80
|
+
|
|
81
|
+
# 5. See what you have
|
|
82
|
+
sympath list
|
|
83
|
+
|
|
84
|
+
# 6. Remove a link you no longer need
|
|
85
|
+
sympath remove gcc.exe
|
|
86
|
+
|
|
87
|
+
# 7. Find and report broken links
|
|
88
|
+
sympath repair
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
After this, running `nvim`, `gcc`, or `py` from any terminal will just work — they all resolve through `C:\tools\bin`.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Commands
|
|
96
|
+
|
|
97
|
+
### `sympath add-folder <name> <path>`
|
|
98
|
+
|
|
99
|
+
Register a directory that will hold symlinks. The first folder you register automatically becomes the default.
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
sympath add-folder tools C:\tools\bin
|
|
103
|
+
sympath add-folder dev C:\dev\bin
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### `sympath set-default <name>`
|
|
107
|
+
|
|
108
|
+
Change which registered folder is used when no `--folder` flag is given.
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
sympath set-default dev
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### `sympath link <target> [options]`
|
|
115
|
+
|
|
116
|
+
Create a symlink inside the default (or specified) folder pointing to `<target>`.
|
|
117
|
+
|
|
118
|
+
| Option | Description |
|
|
119
|
+
| ----------------- | ---------------------------------------------------------------------- |
|
|
120
|
+
| `--name <alias>` | Use a custom filename for the symlink instead of the target's basename |
|
|
121
|
+
| `--folder <name>` | Place the link in a specific registered folder |
|
|
122
|
+
| `--force` | Overwrite an existing symlink without prompting |
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# Basic
|
|
126
|
+
sympath link "C:\Program Files\Neovim\bin\nvim.exe"
|
|
127
|
+
|
|
128
|
+
# Custom name
|
|
129
|
+
sympath link "C:\Program Files\Neovim\bin\nvim.exe" --name vim.exe
|
|
130
|
+
|
|
131
|
+
# Into a specific folder, overwriting if it exists
|
|
132
|
+
sympath link "C:\Python313\python.exe" --folder dev --force
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### `sympath link-folder <path> [options]`
|
|
136
|
+
|
|
137
|
+
Scan a directory and create symlinks for **every executable** found inside it.
|
|
138
|
+
|
|
139
|
+
| Option | Description |
|
|
140
|
+
| ----------------- | ------------------------ |
|
|
141
|
+
| `--folder <name>` | Target link folder |
|
|
142
|
+
| `--force` | Overwrite existing links |
|
|
143
|
+
|
|
144
|
+
Executable detection:
|
|
145
|
+
|
|
146
|
+
- **Windows** — `.exe`, `.cmd`, `.bat`, `.ps1`, `.sh`
|
|
147
|
+
- **Linux / macOS** — any file with the executable permission bit
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
sympath link-folder "C:\Program Files\LLVM\bin"
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### `sympath remove <name> [--folder <name>]`
|
|
154
|
+
|
|
155
|
+
Delete a managed symlink.
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
sympath remove gcc.exe
|
|
159
|
+
sympath remove gcc.exe --folder dev
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### `sympath list [--folder <name>]`
|
|
163
|
+
|
|
164
|
+
Display all symlinks in a folder with their targets. Broken links are flagged.
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
sympath list
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
python.exe → C:\Python313\python.exe
|
|
172
|
+
gcc.exe → C:\MinGW\bin\gcc.exe
|
|
173
|
+
nvim.exe → C:\Program Files\Neovim\bin\nvim.exe [BROKEN]
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### `sympath repair [--folder <name>]`
|
|
177
|
+
|
|
178
|
+
Scan for symlinks whose targets no longer exist and report them.
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
sympath repair
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
Broken: C:\tools\bin\nvim.exe
|
|
186
|
+
Broken: C:\tools\bin\python.exe
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Global Options
|
|
190
|
+
|
|
191
|
+
| Flag | Description |
|
|
192
|
+
| ----------------- | --------------------------- |
|
|
193
|
+
| `-h`, `--help` | Show help for any command |
|
|
194
|
+
| `-v`, `--version` | Print the installed version |
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
sympath --help
|
|
198
|
+
sympath link --help
|
|
199
|
+
sympath --version
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Configuration
|
|
205
|
+
|
|
206
|
+
sympath stores its state in a single JSON file:
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
~/.sympath.json
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Example contents:
|
|
213
|
+
|
|
214
|
+
```json
|
|
215
|
+
{
|
|
216
|
+
"default": "tools",
|
|
217
|
+
"folders": {
|
|
218
|
+
"tools": "C:\\tools\\bin",
|
|
219
|
+
"dev": "C:\\dev\\bin"
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
| Field | Type | Description |
|
|
225
|
+
| --------- | -------- | -------------------------------------------------- |
|
|
226
|
+
| `default` | `string` | Name of the folder used when `--folder` is omitted |
|
|
227
|
+
| `folders` | `object` | Map of registered name → absolute directory path |
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Cross-Platform Support
|
|
232
|
+
|
|
233
|
+
| Platform | Executable Detection | Notes |
|
|
234
|
+
| ----------- | -------------------------------------- | ------------------------------------------------ |
|
|
235
|
+
| **Windows** | `.exe`, `.cmd`, `.bat`, `.ps1`, `.sh` | May require admin or Developer Mode for symlinks |
|
|
236
|
+
| **Linux** | Executable permission bit (`chmod +x`) | Works out of the box |
|
|
237
|
+
| **macOS** | Executable permission bit (`chmod +x`) | Works out of the box |
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Example Workflow
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
# One-time setup
|
|
245
|
+
sympath add-folder tools C:\tools\bin
|
|
246
|
+
# → then add C:\tools\bin to your system PATH
|
|
247
|
+
|
|
248
|
+
# Day-to-day usage
|
|
249
|
+
sympath link "C:\MinGW\bin\gcc.exe"
|
|
250
|
+
sympath link "C:\Program Files\Neovim\bin\nvim.exe"
|
|
251
|
+
sympath link "C:\Python313\python.exe" --name python.exe
|
|
252
|
+
sympath link-folder "C:\Program Files\Git\cmd" --force
|
|
253
|
+
|
|
254
|
+
# Maintenance
|
|
255
|
+
sympath list
|
|
256
|
+
sympath repair
|
|
257
|
+
sympath remove gcc.exe
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Result:** your `PATH` stays clean with a single entry, and all your tools are one `sympath link` away.
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## Project Structure
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
sympath/
|
|
268
|
+
├── pyproject.toml # Package metadata & entry point
|
|
269
|
+
├── README.md # This file
|
|
270
|
+
├── vision.md # Full feature specification
|
|
271
|
+
└── sympath/ # Python package
|
|
272
|
+
├── __init__.py # Package version
|
|
273
|
+
├── __main__.py # python -m sympath support
|
|
274
|
+
├── cli.py # Argument parsing & command dispatch
|
|
275
|
+
├── config.py # ~/.sympath.json load / save
|
|
276
|
+
├── manager.py # Core SymlinkManager class
|
|
277
|
+
└── utils.py # Executable detection helpers
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Roadmap
|
|
283
|
+
|
|
284
|
+
- [ ] `sympath migrate-path` — convert existing PATH dirs into managed symlinks
|
|
285
|
+
- [ ] `sympath scan` — discover installed tools on the system
|
|
286
|
+
- [ ] `sympath use <tool> <version>` — version switching
|
|
287
|
+
- [ ] `sympath profile <name>` — environment profiles
|
|
288
|
+
- [ ] Plugin system for tool-specific managers
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## License
|
|
293
|
+
|
|
294
|
+
MIT
|
sympath-0.1.0/README.md
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# sympath
|
|
2
|
+
|
|
3
|
+
**A powerful, cross-platform symlink-based path manager for developers.**
|
|
4
|
+
|
|
5
|
+
sympath lets you stop cluttering your system `PATH` with dozens of directories. Instead, maintain **one folder** full of symlinks that point to the real executables — and only add that single folder to `PATH`.
|
|
6
|
+
|
|
7
|
+
This is how Linux distros manage `/usr/local/bin`, and now you can do it on any OS.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Why sympath?
|
|
12
|
+
|
|
13
|
+
| Problem | sympath's Solution |
|
|
14
|
+
| --------------------------------------- | -------------------------------------- |
|
|
15
|
+
| `PATH` is thousands of characters long | One clean directory in `PATH` |
|
|
16
|
+
| Duplicate / stale `PATH` entries | Managed symlinks you can list & repair |
|
|
17
|
+
| Package managers fight over `PATH` | You decide what's exposed |
|
|
18
|
+
| Hard to see what tools are available | `sympath list` shows everything |
|
|
19
|
+
| Different projects need different tools | Multiple named link folders |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Installation
|
|
24
|
+
|
|
25
|
+
### From source (editable / development)
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
git clone https://github.com/your-user/sympath.git
|
|
29
|
+
cd sympath
|
|
30
|
+
pip install -e .
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Run without installing
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
python -m sympath --help
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
> **Note (Windows):** Creating symlinks may require **Administrator** privileges or Developer Mode enabled.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Quick Start
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# 1. Register a link directory
|
|
47
|
+
sympath add-folder tools C:\tools\bin
|
|
48
|
+
|
|
49
|
+
# 2. Add that directory to your system PATH (once, manually)
|
|
50
|
+
|
|
51
|
+
# 3. Link individual executables
|
|
52
|
+
sympath link "C:\Program Files\Neovim\bin\nvim.exe"
|
|
53
|
+
sympath link "C:\MinGW\bin\gcc.exe"
|
|
54
|
+
sympath link "C:\Python313\python.exe" --name py.exe
|
|
55
|
+
|
|
56
|
+
# 4. Or link every executable in a folder at once
|
|
57
|
+
sympath link-folder "C:\Program Files\LLVM\bin"
|
|
58
|
+
|
|
59
|
+
# 5. See what you have
|
|
60
|
+
sympath list
|
|
61
|
+
|
|
62
|
+
# 6. Remove a link you no longer need
|
|
63
|
+
sympath remove gcc.exe
|
|
64
|
+
|
|
65
|
+
# 7. Find and report broken links
|
|
66
|
+
sympath repair
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
After this, running `nvim`, `gcc`, or `py` from any terminal will just work — they all resolve through `C:\tools\bin`.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Commands
|
|
74
|
+
|
|
75
|
+
### `sympath add-folder <name> <path>`
|
|
76
|
+
|
|
77
|
+
Register a directory that will hold symlinks. The first folder you register automatically becomes the default.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
sympath add-folder tools C:\tools\bin
|
|
81
|
+
sympath add-folder dev C:\dev\bin
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### `sympath set-default <name>`
|
|
85
|
+
|
|
86
|
+
Change which registered folder is used when no `--folder` flag is given.
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
sympath set-default dev
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### `sympath link <target> [options]`
|
|
93
|
+
|
|
94
|
+
Create a symlink inside the default (or specified) folder pointing to `<target>`.
|
|
95
|
+
|
|
96
|
+
| Option | Description |
|
|
97
|
+
| ----------------- | ---------------------------------------------------------------------- |
|
|
98
|
+
| `--name <alias>` | Use a custom filename for the symlink instead of the target's basename |
|
|
99
|
+
| `--folder <name>` | Place the link in a specific registered folder |
|
|
100
|
+
| `--force` | Overwrite an existing symlink without prompting |
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# Basic
|
|
104
|
+
sympath link "C:\Program Files\Neovim\bin\nvim.exe"
|
|
105
|
+
|
|
106
|
+
# Custom name
|
|
107
|
+
sympath link "C:\Program Files\Neovim\bin\nvim.exe" --name vim.exe
|
|
108
|
+
|
|
109
|
+
# Into a specific folder, overwriting if it exists
|
|
110
|
+
sympath link "C:\Python313\python.exe" --folder dev --force
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### `sympath link-folder <path> [options]`
|
|
114
|
+
|
|
115
|
+
Scan a directory and create symlinks for **every executable** found inside it.
|
|
116
|
+
|
|
117
|
+
| Option | Description |
|
|
118
|
+
| ----------------- | ------------------------ |
|
|
119
|
+
| `--folder <name>` | Target link folder |
|
|
120
|
+
| `--force` | Overwrite existing links |
|
|
121
|
+
|
|
122
|
+
Executable detection:
|
|
123
|
+
|
|
124
|
+
- **Windows** — `.exe`, `.cmd`, `.bat`, `.ps1`, `.sh`
|
|
125
|
+
- **Linux / macOS** — any file with the executable permission bit
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
sympath link-folder "C:\Program Files\LLVM\bin"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### `sympath remove <name> [--folder <name>]`
|
|
132
|
+
|
|
133
|
+
Delete a managed symlink.
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
sympath remove gcc.exe
|
|
137
|
+
sympath remove gcc.exe --folder dev
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### `sympath list [--folder <name>]`
|
|
141
|
+
|
|
142
|
+
Display all symlinks in a folder with their targets. Broken links are flagged.
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
sympath list
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
python.exe → C:\Python313\python.exe
|
|
150
|
+
gcc.exe → C:\MinGW\bin\gcc.exe
|
|
151
|
+
nvim.exe → C:\Program Files\Neovim\bin\nvim.exe [BROKEN]
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### `sympath repair [--folder <name>]`
|
|
155
|
+
|
|
156
|
+
Scan for symlinks whose targets no longer exist and report them.
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
sympath repair
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
Broken: C:\tools\bin\nvim.exe
|
|
164
|
+
Broken: C:\tools\bin\python.exe
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Global Options
|
|
168
|
+
|
|
169
|
+
| Flag | Description |
|
|
170
|
+
| ----------------- | --------------------------- |
|
|
171
|
+
| `-h`, `--help` | Show help for any command |
|
|
172
|
+
| `-v`, `--version` | Print the installed version |
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
sympath --help
|
|
176
|
+
sympath link --help
|
|
177
|
+
sympath --version
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Configuration
|
|
183
|
+
|
|
184
|
+
sympath stores its state in a single JSON file:
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
~/.sympath.json
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Example contents:
|
|
191
|
+
|
|
192
|
+
```json
|
|
193
|
+
{
|
|
194
|
+
"default": "tools",
|
|
195
|
+
"folders": {
|
|
196
|
+
"tools": "C:\\tools\\bin",
|
|
197
|
+
"dev": "C:\\dev\\bin"
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
| Field | Type | Description |
|
|
203
|
+
| --------- | -------- | -------------------------------------------------- |
|
|
204
|
+
| `default` | `string` | Name of the folder used when `--folder` is omitted |
|
|
205
|
+
| `folders` | `object` | Map of registered name → absolute directory path |
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Cross-Platform Support
|
|
210
|
+
|
|
211
|
+
| Platform | Executable Detection | Notes |
|
|
212
|
+
| ----------- | -------------------------------------- | ------------------------------------------------ |
|
|
213
|
+
| **Windows** | `.exe`, `.cmd`, `.bat`, `.ps1`, `.sh` | May require admin or Developer Mode for symlinks |
|
|
214
|
+
| **Linux** | Executable permission bit (`chmod +x`) | Works out of the box |
|
|
215
|
+
| **macOS** | Executable permission bit (`chmod +x`) | Works out of the box |
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Example Workflow
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# One-time setup
|
|
223
|
+
sympath add-folder tools C:\tools\bin
|
|
224
|
+
# → then add C:\tools\bin to your system PATH
|
|
225
|
+
|
|
226
|
+
# Day-to-day usage
|
|
227
|
+
sympath link "C:\MinGW\bin\gcc.exe"
|
|
228
|
+
sympath link "C:\Program Files\Neovim\bin\nvim.exe"
|
|
229
|
+
sympath link "C:\Python313\python.exe" --name python.exe
|
|
230
|
+
sympath link-folder "C:\Program Files\Git\cmd" --force
|
|
231
|
+
|
|
232
|
+
# Maintenance
|
|
233
|
+
sympath list
|
|
234
|
+
sympath repair
|
|
235
|
+
sympath remove gcc.exe
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Result:** your `PATH` stays clean with a single entry, and all your tools are one `sympath link` away.
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Project Structure
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
sympath/
|
|
246
|
+
├── pyproject.toml # Package metadata & entry point
|
|
247
|
+
├── README.md # This file
|
|
248
|
+
├── vision.md # Full feature specification
|
|
249
|
+
└── sympath/ # Python package
|
|
250
|
+
├── __init__.py # Package version
|
|
251
|
+
├── __main__.py # python -m sympath support
|
|
252
|
+
├── cli.py # Argument parsing & command dispatch
|
|
253
|
+
├── config.py # ~/.sympath.json load / save
|
|
254
|
+
├── manager.py # Core SymlinkManager class
|
|
255
|
+
└── utils.py # Executable detection helpers
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Roadmap
|
|
261
|
+
|
|
262
|
+
- [ ] `sympath migrate-path` — convert existing PATH dirs into managed symlinks
|
|
263
|
+
- [ ] `sympath scan` — discover installed tools on the system
|
|
264
|
+
- [ ] `sympath use <tool> <version>` — version switching
|
|
265
|
+
- [ ] `sympath profile <name>` — environment profiles
|
|
266
|
+
- [ ] Plugin system for tool-specific managers
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## License
|
|
271
|
+
|
|
272
|
+
MIT
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "sympath"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "A powerful symlink-based path manager for developers"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = { text = "MIT" }
|
|
11
|
+
requires-python = ">=3.9"
|
|
12
|
+
keywords = ["symlink", "path", "cli", "developer-tools", "environment"]
|
|
13
|
+
classifiers = [
|
|
14
|
+
"Development Status :: 3 - Alpha",
|
|
15
|
+
"Environment :: Console",
|
|
16
|
+
"Intended Audience :: Developers",
|
|
17
|
+
"License :: OSI Approved :: MIT License",
|
|
18
|
+
"Operating System :: OS Independent",
|
|
19
|
+
"Programming Language :: Python :: 3",
|
|
20
|
+
"Programming Language :: Python :: 3.9",
|
|
21
|
+
"Programming Language :: Python :: 3.10",
|
|
22
|
+
"Programming Language :: Python :: 3.11",
|
|
23
|
+
"Programming Language :: Python :: 3.12",
|
|
24
|
+
"Programming Language :: Python :: 3.13",
|
|
25
|
+
"Topic :: System :: Systems Administration",
|
|
26
|
+
"Topic :: Utilities",
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
[project.scripts]
|
|
30
|
+
sympath = "sympath.cli:main"
|
|
31
|
+
|
|
32
|
+
[tool.setuptools.packages.find]
|
|
33
|
+
include = ["sympath*"]
|
sympath-0.1.0/setup.cfg
ADDED