Skip to main content

A powerful symlink-based path manager for developers

Project description

sympath

A powerful, cross-platform symlink-based path manager for developers.

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.

This is how Linux distros manage /usr/local/bin, and now you can do it on any OS.


Why sympath?

Problem sympath's Solution
PATH is thousands of characters long One clean directory in PATH
Duplicate / stale PATH entries Managed symlinks you can list & repair
Package managers fight over PATH You decide what's exposed
Hard to see what tools are available sympath list shows everything
Different projects need different tools Multiple named link folders

Installation

From source (editable / development)

git clone https://github.com/your-user/sympath.git
cd sympath
pip install -e .

Run without installing

python -m sympath --help

Note (Windows): Creating symlinks may require Administrator privileges or Developer Mode enabled.


Quick Start

# 1. Register a link directory
sympath add-folder tools C:\tools\bin

# 2. Add that directory to your system PATH (once, manually)

# 3. Link individual executables
sympath link "C:\Program Files\Neovim\bin\nvim.exe"
sympath link "C:\MinGW\bin\gcc.exe"
sympath link "C:\Python313\python.exe" --name py.exe

# 4. Or link every executable in a folder at once
sympath link-folder "C:\Program Files\LLVM\bin"

# 5. See what you have
sympath list

# 6. Remove a link you no longer need
sympath remove gcc.exe

# 7. Find and report broken links
sympath repair

After this, running nvim, gcc, or py from any terminal will just work — they all resolve through C:\tools\bin.


Commands

sympath add-folder <name> <path>

Register a directory that will hold symlinks. The first folder you register automatically becomes the default.

sympath add-folder tools C:\tools\bin
sympath add-folder dev   C:\dev\bin

sympath set-default <name>

Change which registered folder is used when no --folder flag is given.

sympath set-default dev

sympath link <target> [options]

Create a symlink inside the default (or specified) folder pointing to <target>.

Option Description
--name <alias> Use a custom filename for the symlink instead of the target's basename
--folder <name> Place the link in a specific registered folder
--force Overwrite an existing symlink without prompting
# Basic
sympath link "C:\Program Files\Neovim\bin\nvim.exe"

# Custom name
sympath link "C:\Program Files\Neovim\bin\nvim.exe" --name vim.exe

# Into a specific folder, overwriting if it exists
sympath link "C:\Python313\python.exe" --folder dev --force

sympath link-folder <path> [options]

Scan a directory and create symlinks for every executable found inside it.

Option Description
--folder <name> Target link folder
--force Overwrite existing links

Executable detection:

  • Windows.exe, .cmd, .bat, .ps1, .sh
  • Linux / macOS — any file with the executable permission bit
sympath link-folder "C:\Program Files\LLVM\bin"

sympath remove <name> [--folder <name>]

Delete a managed symlink.

sympath remove gcc.exe
sympath remove gcc.exe --folder dev

sympath list [--folder <name>]

Display all symlinks in a folder with their targets. Broken links are flagged.

sympath list
  python.exe → C:\Python313\python.exe
  gcc.exe    → C:\MinGW\bin\gcc.exe
  nvim.exe   → C:\Program Files\Neovim\bin\nvim.exe  [BROKEN]

sympath repair [--folder <name>]

Scan for symlinks whose targets no longer exist and report them.

sympath repair
  Broken: C:\tools\bin\nvim.exe
  Broken: C:\tools\bin\python.exe

Global Options

Flag Description
-h, --help Show help for any command
-v, --version Print the installed version
sympath --help
sympath link --help
sympath --version

Configuration

sympath stores its state in a single JSON file:

~/.sympath.json

Example contents:

{
  "default": "tools",
  "folders": {
    "tools": "C:\\tools\\bin",
    "dev": "C:\\dev\\bin"
  }
}
Field Type Description
default string Name of the folder used when --folder is omitted
folders object Map of registered name → absolute directory path

Cross-Platform Support

Platform Executable Detection Notes
Windows .exe, .cmd, .bat, .ps1, .sh May require admin or Developer Mode for symlinks
Linux Executable permission bit (chmod +x) Works out of the box
macOS Executable permission bit (chmod +x) Works out of the box

Example Workflow

# One-time setup
sympath add-folder tools C:\tools\bin
# → then add C:\tools\bin to your system PATH

# Day-to-day usage
sympath link "C:\MinGW\bin\gcc.exe"
sympath link "C:\Program Files\Neovim\bin\nvim.exe"
sympath link "C:\Python313\python.exe" --name python.exe
sympath link-folder "C:\Program Files\Git\cmd" --force

# Maintenance
sympath list
sympath repair
sympath remove gcc.exe

Result: your PATH stays clean with a single entry, and all your tools are one sympath link away.


Project Structure

sympath/
├── pyproject.toml       # Package metadata & entry point
├── README.md            # This file
├── vision.md            # Full feature specification
└── sympath/               # Python package
    ├── __init__.py      # Package version
    ├── __main__.py      # python -m sympath support
    ├── cli.py           # Argument parsing & command dispatch
    ├── config.py        # ~/.sympath.json load / save
    ├── manager.py       # Core SymlinkManager class
    └── utils.py         # Executable detection helpers

Roadmap

  • sympath migrate-path — convert existing PATH dirs into managed symlinks
  • sympath scan — discover installed tools on the system
  • sympath use <tool> <version> — version switching
  • sympath profile <name> — environment profiles
  • Plugin system for tool-specific managers

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sympath-0.1.0.tar.gz (10.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sympath-0.1.0-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

Details for the file sympath-0.1.0.tar.gz.

File metadata

  • Download URL: sympath-0.1.0.tar.gz
  • Upload date:
  • Size: 10.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for sympath-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c60fd350904977425f4e1f2e09463180cb2af728666f8df71008b9438307f638
MD5 322c44b5db4a8a04d7032849d8a73e6a
BLAKE2b-256 bc54ef31ea2e83509f41277453a61fa3810af1a3a5b27b7df82135faa9eac032

See more details on using hashes here.

File details

Details for the file sympath-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: sympath-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for sympath-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b9c10bfe3c2f50ccd9b7f8010faf61dd1956fb848f84312d5db8a828e74fab4d
MD5 b38f445a6b734dcd478aa8d4d191861e
BLAKE2b-256 61ae3a95f12657fd52f5857b817cbd46de1bef2591b74328726cea5e55786504

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page