1
Fork 0
dots/bin/stow.py
2023-08-21 14:56:16 +05:00

55 lines
1.4 KiB
Python
Executable file

#! /usr/bin/env python3
import os
import re
import shutil
import sys
DOTS = os.getenv("DOTS", os.getcwd())
def stow(pkg, stow_dir):
pkg_path = os.path.join(DOTS, pkg)
for root, dirs, files in os.walk(pkg_path):
files = [f for f in files if not f.startswith(".")]
dirs[:] = [d for d in dirs if not d.startswith(".")]
symlink_dir = root.replace(pkg_path, stow_dir)
if not os.path.exists(symlink_dir):
os.makedirs(symlink_dir)
for file in files:
source = os.path.join(root, file)
target = os.path.join(symlink_dir, re.sub("^dot-", ".", file))
if os.path.exists(target):
os.remove(target)
os.symlink(source, target)
def get_pkgs():
pkgs = []
if len(sys.argv) > 1:
for pkg in sys.argv[1:]:
if os.path.isdir(os.path.join(DOTS, pkg)):
pkgs.append(pkg)
else:
print(f"The package {pkg} is not a valid package.", file=sys.stderr)
else:
pkgs = [d for d in os.listdir(DOTS) if not d.startswith(".")]
return pkgs
def get_stow_dir(pkg):
return os.path.expanduser({
"home" : "~",
"bin" : "~/bin",
"config" : "~/.config"
}.get(pkg, f"~/.config/{pkg}"))
if __name__ == "__main__":
for pkg in get_pkgs():
if pkg in ["docs"]: continue
stow(pkg, get_stow_dir(pkg))