70 lines
1.6 KiB
Python
Executable File
70 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
home = Path.home().resolve().absolute()
|
|
dotdir = Path(__file__).parent.resolve().absolute()
|
|
|
|
simple = [
|
|
"gitconfig",
|
|
"ideavimrc",
|
|
"lein",
|
|
"tmux.conf",
|
|
"vimrc",
|
|
]
|
|
|
|
targeted = {
|
|
"doom": ".doom.d",
|
|
"kitty": ".config/kitty",
|
|
"compton.conf": ".config/compton.conf",
|
|
"xonsh/rc.xsh": ".xonshrc",
|
|
}
|
|
|
|
|
|
def deploy(source_name, target_name, dry_run=False):
|
|
source = dotdir.joinpath(source_name)
|
|
target = home.joinpath(target_name)
|
|
|
|
if not source.exists():
|
|
raise FileNotFoundError(
|
|
f"Asked to link {source_name}, which doesn't exist in {dotdir}."
|
|
)
|
|
|
|
if target.exists():
|
|
if target.samefile(source):
|
|
print(f"{target}->{source} already linked.")
|
|
return
|
|
|
|
backup_path = target.parent.joinpath(f"{target.name}.bak")
|
|
|
|
print(f"{target} moves to {backup_path}")
|
|
if not dry_run:
|
|
target.replace(backup_path)
|
|
|
|
if not target.parent.exists():
|
|
print(f"making parent directories of {target}")
|
|
if not dry_run:
|
|
target.parent.mkdir(parents=True)
|
|
|
|
print(f"linking {target} to {source}")
|
|
if not dry_run:
|
|
target.symlink_to(source)
|
|
|
|
|
|
def main(dry_run=True):
|
|
for source in simple:
|
|
target = f".{source}"
|
|
deploy(source, target, dry_run=dry_run)
|
|
|
|
for source, target in targeted.items():
|
|
deploy(source, target, dry_run=dry_run)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
main(False)
|
|
except FileNotFoundError as e:
|
|
print(e)
|
|
sys.exit(1)
|