+@task
+def ensure_env(c, env):
+ envs = f'{HOME}/envs'
+ path = f'{envs}/{env}'
+ if(not os.path.exists(envs)):
+ c.run(f'mkdir -p {envs}')
+
+ if(not os.path.exists(path)):
+ c.run(f'python3 -m venv {path}')
+ reqs = f'{DOTFILES}/reqs/{env}.txt'
+ c.run(f'{path}/bin/pip install -r {reqs}')
+
+ c.run(f'{path}/bin/pip freeze')
+
+@task
+def env_borg(c):
+ ensure_env(c, 'borg')
+
+@task
+def env_ansible(c):
+ ensure_env(c, 'ansible')
+
+
+@task
+def env_jupyter(c):
+ ensure_env(c, 'jupyter')
+
+@task
+def clone(c, path):
+ c.run(f'mkdir -p {HOME}/src')
+ c.run(f'cd {HOME}/src; git clone {path}')
+
+@task
+def clone_minion(c):
+ clone(c, 'ssh://git@codeberg.org/EdTheDev/minion.git')
+
+@task
+def clone_favs(c):
+ clone(c, 'ssh://git@codeberg.org/EdTheDev/down-shift.git')
+ clone(c, 'ssh://git@codeberg.org/EdTheDev/todolist.git')
+ clone(c, 'ssh://git@codeberg.org/EdTheDev/weekend-template.git')
+ clone(c, 'ssh://git@codeberg.org/EdTheDev/invoke-tui.git')
+