Advanced
Parallel sync
By default, repos-manager syncs 4 repos at a time. Adjust with:
repos-manager sync --all --parallel 8 Or set it in your config file:
{ "parallel": 8 } For large organizations (100+ repos), higher parallelism helps. For slow connections, lower it to avoid timeouts.
Concurrent sync protection
repos-manager uses a lockfile (BASE_DIR/.repos-manager.lock) to prevent multiple syncs from running at the same time on the same directory. If a previous sync was interrupted, the lockfile is automatically cleaned up when the holding process is no longer running.
Self-update
repos-manager can update itself:
repos-manager update If running from a git clone, it fetches and fast-forward pulls from origin/main. If installed via make install, it clones the latest version to a temp directory and reinstalls.
Background update banner
You don't have to run update to know a new version is out. On every invocation (except update, version and help), repos-manager spawns a detached background curl that fetches the latest VERSION from main and caches it under ${XDG_CACHE_HOME:-~/.cache}/repos-manager/latest-version. The cache has a 24h TTL and is compared against the running binary on the next run. When a newer release is available, a one-line yellow banner is printed on stderr before the command runs:
⬆ repos-manager 0.6.0 available (current 0.5.0), run: repos-manager update The check is non-blocking (the background job is detached with redirected fds), silent when nothing new is available or when curl is missing, and disabled when:
REPOS_MANAGER_NO_UPDATE_CHECK=1is set in the environment, orcheck_updates: falseis set in~/.config/repos-manager/config.json.
Tune the cache location with REPOS_MANAGER_UPDATE_CACHE and the refresh interval with REPOS_MANAGER_UPDATE_TTL (seconds).
Fast status on large workspaces
repos-manager status is built to stay responsive even when base_dir contains hundreds of repos and large dependency trees. Three things make it fast:
- Heavy directory pruning.
findskipsnode_modules,.venv,venv,__pycache__,target,vendor,dist,build,.nextand.cachebefore descending, so vendored libraries never bloat the walk. - Network / FUSE mount skip.
statusparses/proc/self/mountinfoand prunes every mount point underbase_dirwhose filesystem type isfuse,fuse.*,nfs,cifs,smb*,smbfs,afs,cephordavfs. Cloud drives (kDrive, Dropbox, sshfs) are the number one cause of apparent hangs onstatus, and pruning them by default turns a multi-minute freeze into a sub-second scan. See the Configuration page, Network-mount scanning, to opt in if you really host repos on a reliable network share. - Streaming progress indicator. Each repo found by
findis inspected as it streams in (nosortbuffering), and a[N] provider/owner/repoline is updated in place on stderr so you always see where the scan is. The indicator auto-disables when stderr is not a TTY or when--quietis set.
Auto-generated sourceme files
After each sync, repos-manager generates sourceme, sourceme.zsh, and sourceme.fish files in each host directory. These provide the repos-manager function and full tab completions (providers, commands, flags) when you cd into the directory.
Combined with a sourceme auto-loader, the function loads and unloads automatically as you navigate your workspace.
Security
The config directory (~/.config/repos-manager/) is created with chmod 700 (owner-only access). Bitbucket API credentials stored in bitbucket-creds are set to chmod 600.
Nix flake
repos-manager ships as a Nix flake for reproducible environments:
# Run directly
nix run github:Dxsk/repos-manager -- github sync
# Use as a template workspace
mkdir ~/my-repos && cd ~/my-repos
nix flake init -t github:Dxsk/repos-manager
nix develop The dev shell provides repos-manager with all dependencies and sets BASE_DIR to the current directory.
Dotenv integration
If you use Dxsk/dotenv (GNU Stow-based dotfiles), repos-manager integrates via scripts/projects.conf:
git@github.com:Dxsk/repos-manager.git make install The dotenv install script clones and installs repos-manager automatically on new machines.