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 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
@@ -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*"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,3 @@
1
+ """Sympath — a powerful symlink-based path manager."""
2
+
3
+ __version__ = "0.1.0"
@@ -0,0 +1,5 @@
1
+ """Allow running sympath as ``python -m sympath``."""
2
+
3
+ from sympath.cli import main
4
+
5
+ main()