1
Fork 0
dots/bin/stow.py
2024-12-14 03:42:18 +05:00

51 lines
1.1 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, _, files in os.walk(pkg_path):
symlink_dir = root.replace(pkg_path, stow_dir)
os.makedirs(symlink_dir, exist_ok=True)
for file in files:
source = os.path.join(root, file)
target = os.path.join(symlink_dir, re.sub("^dot-", ".", file))
if os.path.isfile(target) or os.path.islink(target):
os.remove(target)
os.symlink(source, target)
def get_pkgs():
pkgs = []
for file in os.listdir(DOTS):
if file == ".git":
continue
if os.path.isfile(os.path.join(DOTS, file)):
continue
pkgs.append(file)
return pkgs
def get_stow_dir(pkg):
return os.path.expanduser({
"home" : "~",
"bin" : "~/bin",
"config" : "~/.config",
"wallpapers" : "~/pics/wallpapers"
}.get(pkg, f"~/.config/{pkg}"))
if __name__ == "__main__":
for pkg in get_pkgs():
stow(pkg, get_stow_dir(pkg))