meta: add install/uninstall system

This commit is contained in:
2026-01-17 17:44:55 +00:00
parent 33b5c9ddac
commit 847549267a
5 changed files with 108 additions and 0 deletions

8
meta/components.json Normal file
View File

@@ -0,0 +1,8 @@
[
{
"name": "zsh",
"link-files": [
{ "source": "init.zsh", "dest": ".zshrc" }
]
}
]

39
meta/install.py Normal file
View File

@@ -0,0 +1,39 @@
import sys
import os
import json
import pathlib
dotfile_dir = sys.argv[1]
home_dir = str(pathlib.Path.home())
def install_component(comp):
print('Installing configuration: {}...'.format(comp['name']))
comp_dir = os.path.join(dotfile_dir, comp['name'])
if 'link-files' in comp:
link_files = comp['link-files']
for f in link_files:
source_path = os.path.join(comp_dir, f['source'])
dest_path = os.path.join(home_dir, f['dest'])
if not os.path.exists(dest_path):
print(' linking {} -> {}'.format(dest_path, source_path))
os.symlink(source_path, dest_path)
if 'link-dirs' in comp:
link_dirs = comp['link-dirs']
for f in link_dirs:
source_path = os.path.join(comp_dir, f['source'])
dest_path = os.path.join(home_dir, f['dest'])
if not os.path.exists(dest_path):
print(' linking {} -> {}'.format(dest_path, source_path))
os.symlink(source_path, dest_path)
components_path = os.path.join(dotfile_dir, 'meta', 'components.json')
components = None
with open(components_path, 'r') as f:
components = json.load(f)
for comp in components:
install_component(comp)

39
meta/uninstall.py Normal file
View File

@@ -0,0 +1,39 @@
import sys
import os
import json
import pathlib
dotfile_dir = sys.argv[1]
home_dir = str(pathlib.Path.home())
def uninstall_component(comp):
print('Uninstalling component: {}...'.format(comp['name']))
comp_dir = os.path.join(dotfile_dir, comp['name'])
if 'link-files' in comp:
link_files = comp['link-files']
for f in link_files:
source_path = os.path.join(comp_dir, f['source'])
dest_path = os.path.join(home_dir, f['dest'])
if os.path.exists(dest_path):
print(' removing link {}'.format(dest_path))
os.unlink(dest_path)
if 'link-dirs' in comp:
link_dirs = comp['link-dirs']
for f in link_dirs:
source_path = os.path.join(comp_dir, f['source'])
dest_path = os.path.join(home_dir, f['dest'])
if not os.path.exists(dest_path):
print(' removing link {} -> {}'.format(dest_path))
os.unlink(dest_path)
components_path = os.path.join(dotfile_dir, 'meta', 'components.json')
components = None
with open(components_path, 'r') as f:
components = json.load(f)
for comp in components:
uninstall_component(comp)