machineconfig 5.0__py3-none-any.whl → 5.11__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of machineconfig might be problematic. Click here for more details.

@@ -12,7 +12,7 @@ app = typer.Typer(help=f"🛠️ DevOps operations @ machineconfig {__version__}
12
12
 
13
13
  app.command(name="install", help="📦 Install essential packages")(installer_entry_point.main)
14
14
  app.command(name="share-terminal", help="📡 Share terminal via web browser")(share_terminal.main)
15
- app.command(name="repos", help="📁 Manage git repositories")(repos.main)
15
+ app.add_typer(repos.app, name="repos", help="📁 Manage git repositories")
16
16
 
17
17
  ssh_app = typer.Typer(help="🔐 SSH operations subcommands", no_args_is_help=True)
18
18
  app.add_typer(ssh_app, name="ssh")
@@ -187,7 +187,7 @@ Set-Service -Name sshd -StartupType 'Automatic'"""
187
187
  if "retrieve_repositories" in selected_options:
188
188
  console.print(Panel("📚 [bold bright_magenta]REPOSITORIES[/bold bright_magenta]\n[italic]Project code retrieval[/italic]", border_style="bright_magenta"))
189
189
  from machineconfig.scripts.python import repos as module
190
- module.main(directory=str(Path.home() / "code"), clone=True, cloud="odg1")
190
+ module.main(directory=str(Path.home() / "code"), capture=True, cloud="odg1")
191
191
 
192
192
  if "retrieve_data" in selected_options:
193
193
  console.print(Panel("💾 [bold bright_cyan]DATA RETRIEVAL[/bold bright_cyan]\n[italic]Backup restoration[/italic]", border_style="bright_cyan"))
@@ -1,4 +1,4 @@
1
- """Repos
1
+ """Repos CLI powered by Typer.
2
2
 
3
3
  # TODO use gh api user --jq '.login' to get the username and use it to clone the repos.
4
4
  in the event that username@github.com is not mentioned in the remote url.
@@ -6,95 +6,214 @@ in the event that username@github.com is not mentioned in the remote url.
6
6
  """
7
7
 
8
8
 
9
- import typer
9
+ from pathlib import Path
10
10
  from typing import Annotated, Optional
11
+
12
+ import typer
13
+
14
+
15
+ from machineconfig.utils.source_of_truth import CONFIG_PATH, DEFAULTS_PATH
11
16
  from pathlib import Path
12
17
 
13
18
 
14
- def analyze_repo_development(repo_path: str = typer.Argument(..., help="Path to the git repository")):
15
- cmd = f"""uv run --python 3.13 --with machineconfig machineconfig.scripts.python.count_lines analyze-over-time {repo_path}"""
16
- from machineconfig.utils.code import run_script
17
- run_script(cmd)
18
-
19
-
20
- def main(
21
- directory: Annotated[Optional[str], typer.Argument(help="📁 Folder containing repos to record or a specs JSON file to follow.")] = None,
22
- push: Annotated[bool, typer.Option("--push", help="🚀 Push changes.")] = False,
23
- pull: Annotated[bool, typer.Option("--pull", help="⬇️ Pull changes.")] = False,
24
- commit: Annotated[bool, typer.Option("--commit", help="💾 Commit changes.")] = False,
25
- all: Annotated[bool, typer.Option("--all", help="🔄 Pull, commit, and push changes.")] = False,
26
- record: Annotated[bool, typer.Option("--record", help="📝 Record repositories.")] = False,
27
- clone: Annotated[bool, typer.Option("--clone", help="📥 Clone repositories from record.")] = False,
28
- checkout: Annotated[bool, typer.Option("--checkout", help="🔀 Check out to versions provided in a JSON file.")] = False,
29
- checkout_to_branch: Annotated[bool, typer.Option("--checkout-to-branch", help="🔀 Check out to the main branch.")] = False,
30
- recursive: Annotated[bool, typer.Option("--recursive", "-r", help="🔍 Recursive flag.")] = False,
31
- no_sync: Annotated[bool, typer.Option("--no-sync", help="🚫 Disable automatic uv sync after pulls.")] = False,
32
- cloud: Annotated[Optional[str], typer.Option("--cloud", "-c", help="☁️ Cloud storage option.")] = None,
33
- analyze: Annotated[bool, typer.Option("--analyze", help="📊 Analyze repository development over time.")] = False,
19
+ def _print_banner() -> None:
20
+ typer.echo("\n" + "=" * 50)
21
+ typer.echo("📂 Welcome to the Repository Manager")
22
+ typer.echo("=" * 50 + "\n")
23
+
24
+
25
+
26
+ app = typer.Typer(help=" Manage development repositories", no_args_is_help=True)
27
+ sync_app = typer.Typer(help=" Manage repository specifications and syncing", no_args_is_help=True)
28
+ app.add_typer(sync_app, name="sync", help=" Sync repositories using saved specs")
29
+
30
+
31
+ DirectoryArgument = Annotated[
32
+ Optional[str],
33
+ typer.Argument(help="📁 Folder containing repos or the specs JSON file to use."),
34
+ ]
35
+ RecursiveOption = Annotated[
36
+ bool,
37
+ typer.Option("--recursive", "-r", help="🔍 Recurse into nested repositories."),
38
+ ]
39
+ NoSyncOption = Annotated[
40
+ bool,
41
+ typer.Option("--no-sync", help="🚫 Disable automatic uv sync after pulls."),
42
+ ]
43
+ CloudOption = Annotated[
44
+ Optional[str],
45
+ typer.Option("--cloud", "-c", help="☁️ Upload to or download from this cloud remote."),
46
+ ]
47
+
48
+
49
+
50
+
51
+ def _resolve_directory(directory: Optional[str]) -> Path:
52
+ if directory is None:
53
+ directory = Path.cwd().as_posix()
54
+ typer.echo(f"📁 Using directory: {directory}")
55
+ return Path(directory).expanduser().absolute()
56
+
57
+
58
+ def _git_operations(
59
+ directory: Optional[str],
60
+ *,
61
+ pull: bool,
62
+ commit: bool,
63
+ push: bool,
64
+ recursive: bool,
65
+ no_sync: bool,
34
66
  ) -> None:
35
- print("\n" + "=" * 50)
36
- print("📂 Welcome to the Repository Manager")
37
- print("=" * 50 + "\n")
38
-
39
- if analyze:
40
- from machineconfig.scripts.python.count_lines_frontend import analyze_repo_development
41
- analyze_repo_development(repo_path=directory if directory is not None else ".")
42
- return
43
- # app.command(name="analyze-repo", help="📊 Analyze code repository over time")(analyze_repo_development)
44
-
45
- from machineconfig.utils.io import read_ini
46
- from machineconfig.utils.source_of_truth import CONFIG_PATH, DEFAULTS_PATH
67
+ _print_banner()
68
+ repos_root = _resolve_directory(directory)
69
+ auto_sync = not no_sync
70
+ from machineconfig.scripts.python.repos_helper_action import perform_git_operations
47
71
  from machineconfig.utils.path_extended import PathExtended
48
- from machineconfig.scripts.python.repos_helper_record import main as record_repos
72
+ perform_git_operations(
73
+ repos_root=PathExtended(repos_root),
74
+ pull=pull,
75
+ commit=commit,
76
+ push=push,
77
+ recursive=recursive,
78
+ auto_sync=auto_sync,
79
+ )
80
+
81
+
82
+ def _resolve_spec_path(directory: Optional[str], cloud: Optional[str]) -> Path:
83
+ repos_root = _resolve_directory(directory)
84
+ from machineconfig.utils.path_extended import PathExtended
85
+ if not repos_root.exists() or repos_root.name != "repos.json":
86
+ candidate = Path(CONFIG_PATH).joinpath("repos").joinpath(PathExtended(repos_root).rel2home()).joinpath("repos.json")
87
+ repos_root = candidate
88
+ if not repos_root.exists():
89
+ cloud_name: Optional[str]
90
+ if cloud is None:
91
+ from machineconfig.utils.io import read_ini
92
+ cloud_name = read_ini(DEFAULTS_PATH)["general"]["rclone_config_name"]
93
+ typer.echo(f"⚠️ Using default cloud: {cloud_name}")
94
+ else:
95
+ cloud_name = cloud
96
+ assert cloud_name is not None, (
97
+ f"Path {repos_root} does not exist and cloud was not passed. You can't clone without one of them."
98
+ )
99
+ from machineconfig.utils.path_extended import PathExtended
100
+ PathExtended(repos_root).from_cloud(cloud=cloud_name, rel2home=True)
101
+ assert repos_root.exists() and repos_root.name == "repos.json", (
102
+ f"Path {repos_root} does not exist and cloud was not passed. You can't clone without one of them."
103
+ )
104
+ return repos_root
105
+
106
+
107
+ def _clone_from_specs(
108
+ directory: Optional[str],
109
+ cloud: Optional[str],
110
+ *,
111
+ checkout_branch_flag: bool,
112
+ checkout_commit_flag: bool,
113
+ ) -> None:
114
+ _print_banner()
115
+ typer.echo("\n📥 Cloning or checking out repositories...")
116
+ spec_path = _resolve_spec_path(directory, cloud)
49
117
  from machineconfig.scripts.python.repos_helper_clone import clone_repos
50
- from machineconfig.scripts.python.repos_helper_action import perform_git_operations
51
118
 
52
- if directory is None:
53
- directory = Path.cwd().as_posix()
54
- print(f"📁 Using directory: {directory}")
55
- repos_root = PathExtended(directory).expanduser().absolute()
56
- auto_sync = not no_sync # Enable auto sync by default, disable with --no-sync
57
- if record:
58
- save_path = record_repos(repos_root=repos_root)
59
- if cloud is not None:
60
- PathExtended(save_path).to_cloud(rel2home=True, cloud=cloud)
61
-
62
- elif clone or checkout or checkout_to_branch:
63
- print("\n📥 Cloning or checking out repositories...")
64
- if not repos_root.exists() or repos_root.name != "repos.json":
65
- repos_root = PathExtended(CONFIG_PATH).joinpath("repos").joinpath(repos_root.rel2home()).joinpath("repos.json")
66
- if not repos_root.exists():
67
- if cloud is None:
68
- cloud_name: str = read_ini(DEFAULTS_PATH)["general"]["rclone_config_name"]
69
- print(f"⚠️ Using default cloud: {cloud_name}")
70
- else:
71
- cloud_name = cloud
72
- assert cloud_name is not None, f"Path {repos_root} does not exist and cloud was not passed. You can't clone without one of them."
73
- repos_root.from_cloud(cloud=cloud_name, rel2home=True)
74
- assert (repos_root.exists() and repos_root.name == "repos.json") or cloud is not None, f"Path {repos_root} does not exist and cloud was not passed. You can't clone without one of them."
75
- clone_repos(spec_path=repos_root, preferred_remote=None, checkout_branch_flag=checkout_to_branch, checkout_commit_flag=checkout)
76
-
77
- elif all or commit or pull or push:
78
- perform_git_operations(
79
- repos_root=repos_root,
80
- pull=pull or all,
81
- commit=commit or all,
82
- push=push or all,
83
- recursive=recursive,
84
- auto_sync=auto_sync
85
- )
86
- else:
87
- # print("❌ No action specified. Try passing --push, --pull, --commit, or --all.")
88
- typer.echo("❌ No action specified. Try passing --push, --pull, --commit, or --all.")
89
- import click
90
- ctx = click.get_current_context()
91
- typer.echo(ctx.get_help())
92
- raise typer.Exit(1)
93
-
94
-
95
- def main_from_parser() -> None:
96
- typer.run(main)
97
-
98
-
99
- if __name__ == "__main__":
100
- main_from_parser()
119
+ clone_repos(
120
+ spec_path=spec_path,
121
+ preferred_remote=None,
122
+ checkout_branch_flag=checkout_branch_flag,
123
+ checkout_commit_flag=checkout_commit_flag,
124
+ )
125
+
126
+
127
+ @app.command()
128
+ def push(
129
+ directory: DirectoryArgument = None,
130
+ recursive: RecursiveOption = False,
131
+ no_sync: NoSyncOption = False,
132
+ ) -> None:
133
+ """🚀 Push changes across repositories."""
134
+ _git_operations(directory, pull=False, commit=False, push=True, recursive=recursive, no_sync=no_sync)
135
+
136
+
137
+ @app.command()
138
+ def pull(
139
+ directory: DirectoryArgument = None,
140
+ recursive: RecursiveOption = False,
141
+ no_sync: NoSyncOption = False,
142
+ ) -> None:
143
+ """⬇️ Pull changes across repositories."""
144
+ _git_operations(directory, pull=True, commit=False, push=False, recursive=recursive, no_sync=no_sync)
145
+
146
+
147
+ @app.command()
148
+ def commit(
149
+ directory: DirectoryArgument = None,
150
+ recursive: RecursiveOption = False,
151
+ no_sync: NoSyncOption = False,
152
+ ) -> None:
153
+ """💾 Commit changes across repositories."""
154
+ _git_operations(directory, pull=False, commit=True, push=False, recursive=recursive, no_sync=no_sync)
155
+
156
+
157
+ @app.command()
158
+ def all(
159
+ directory: DirectoryArgument = None,
160
+ recursive: RecursiveOption = False,
161
+ no_sync: NoSyncOption = False,
162
+ ) -> None:
163
+ """🔄 Pull, commit, and push changes across repositories."""
164
+ _git_operations(directory, pull=True, commit=True, push=True, recursive=recursive, no_sync=no_sync)
165
+
166
+
167
+ @sync_app.command()
168
+ def record(
169
+ directory: DirectoryArgument = None,
170
+ cloud: CloudOption = None,
171
+ ) -> None:
172
+ """📝 Record repositories into a repos.json specification."""
173
+ _print_banner()
174
+ repos_root = _resolve_directory(directory)
175
+ from machineconfig.scripts.python.repos_helper_record import main as record_repos
176
+ save_path = record_repos(repos_root=repos_root)
177
+ from machineconfig.utils.path_extended import PathExtended
178
+ if cloud is not None:
179
+ PathExtended(save_path).to_cloud(rel2home=True, cloud=cloud)
180
+
181
+
182
+ @sync_app.command()
183
+ def capture(
184
+ directory: DirectoryArgument = None,
185
+ cloud: CloudOption = None,
186
+ ) -> None:
187
+ """📥 Clone repositories described by a repos.json specification."""
188
+ _clone_from_specs(directory, cloud, checkout_branch_flag=False, checkout_commit_flag=False)
189
+
190
+
191
+ @sync_app.command(name="checkout")
192
+ def checkout_command(
193
+ directory: DirectoryArgument = None,
194
+ cloud: CloudOption = None,
195
+ ) -> None:
196
+ """🔀 Check out specific commits listed in the specification."""
197
+ _clone_from_specs(directory, cloud, checkout_branch_flag=False, checkout_commit_flag=True)
198
+
199
+
200
+ @sync_app.command(name="checkout-to-branch")
201
+ def checkout_to_branch_command(
202
+ directory: DirectoryArgument = None,
203
+ cloud: CloudOption = None,
204
+ ) -> None:
205
+ """🔀 Check out to the main branch defined in the specification."""
206
+ _clone_from_specs(directory, cloud, checkout_branch_flag=True, checkout_commit_flag=False)
207
+
208
+
209
+ @app.command()
210
+ def analyze(
211
+ directory: DirectoryArgument = None,
212
+ ) -> None:
213
+ """📊 Analyze repository development over time."""
214
+ _print_banner()
215
+ repo_path = directory if directory is not None else "."
216
+ from machineconfig.scripts.python.count_lines_frontend import analyze_repo_development as _analyze
217
+
218
+ _analyze(repo_path=repo_path)
219
+
@@ -1,4 +1,5 @@
1
1
  from machineconfig.utils.path_extended import PathExtended
2
+ from pathlib import Path
2
3
  from machineconfig.utils.schemas.repos.repos_types import GitVersionInfo, RepoRecordDict, RepoRemote
3
4
 
4
5
  from machineconfig.utils.schemas.repos.repos_types import RepoRecordFile
@@ -185,8 +186,9 @@ def record_repos_recursively(repos_root: str, r: bool, progress: Progress | None
185
186
  return res
186
187
 
187
188
 
188
- def main(repos_root: PathExtended):
189
+ def main(repos_root: Path):
189
190
  print("\n📝 Recording repositories...")
191
+ repos_root = PathExtended(repos_root).expanduser().absolute()
190
192
 
191
193
  # Count total directories and repositories for accurate progress tracking
192
194
  print("🔍 Analyzing directory structure...")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machineconfig
3
- Version: 5.0
3
+ Version: 5.11
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -161,6 +161,26 @@ curl https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/ma
161
161
  short `curl bit.ly/cfgcroshelllinux -L | bash`
162
162
 
163
163
 
164
+ ## Repository management CLI
165
+
166
+ The DevOps CLI now exposes rich subcommands for working with git repositories. Run `python -m machineconfig.scripts.python.devops repos --help` to explore the hierarchy:
167
+
168
+ * Top-level actions: `push`, `pull`, `commit`, `all`, and `analyze`.
169
+ * These commands accept `--recursive/-r` and `--no-sync` to control nested repos and automatic `uv sync`.
170
+ * Sync workflows live under `sync`:
171
+ * `record` captures the current machine state into a `repos.json`.
172
+ * `capture` clones repos from a specification without changing commits.
173
+ * `checkout` aligns repositories to commits stored in the spec.
174
+ * `checkout-to-branch` switches repositories to the tracked branch.
175
+ * Each sync subcommand accepts `--cloud/-c` for fetching/saving specs from remote storage.
176
+
177
+ Example:
178
+
179
+ ```bash
180
+ python -m machineconfig.scripts.python.devops repos sync record ~/code --cloud my_remote
181
+ python -m machineconfig.scripts.python.devops repos pull ~/code --recursive
182
+ ```
183
+
164
184
  # Author
165
185
  Alex Al-Saffar. [email](mailto:programmer@usa.com)
166
186
 
@@ -124,7 +124,6 @@ machineconfig/scripts/linux/mount_drive,sha256=zemKofv7hOmRN_V3qK0q580GkfWw3Vdik
124
124
  machineconfig/scripts/linux/mount_nfs,sha256=kpIbAse3igReEGgnXngez2ytWucLwmb_xo6e6KeO_rs,1870
125
125
  machineconfig/scripts/linux/mount_nw_drive,sha256=pNzHc7yZn5YIzn2BkpKvd5530PqbestkzrdoXaChyqY,2338
126
126
  machineconfig/scripts/linux/mount_smb,sha256=7UN5EP1kuxYL_-CnyaH4f9Wuu2CgALDZpJ0mPcdvCiY,94
127
- machineconfig/scripts/linux/repos,sha256=1qbmIemZjkjcPmiL1Bp8pD46E83OXsR5EJ0XQt29Bhc,96
128
127
  machineconfig/scripts/linux/scheduler,sha256=Z9Wu0N9vWRbi4FoRbpcc4ydq4bVaDjZOXESR35ZN0rI,100
129
128
  machineconfig/scripts/linux/sessions,sha256=A4vxUDHnDhyph833iy-tBprgQ7av_DZ5t031PRrbqVQ,98
130
129
  machineconfig/scripts/linux/share_cloud.sh,sha256=75IzCm7Nob1wO-zlfaNyPPod1IjAsVCG5lcMFdXmiI4,3010
@@ -149,7 +148,7 @@ machineconfig/scripts/python/cloud_sync.py,sha256=RWGpAfJ9fnN18yNBSgN44dzA38Hmd4
149
148
  machineconfig/scripts/python/count_lines.py,sha256=aVg91ArHg73swKNGMQzi_WlPnTLEbc8rkNZkCv_qpvI,15894
150
149
  machineconfig/scripts/python/count_lines_frontend.py,sha256=1DQn9YUbl5IYjjJ1fS5qEe60X-5ez6zZiXMQXVTA4-8,359
151
150
  machineconfig/scripts/python/croshell.py,sha256=parFHSL859H00ExDpDBPHBFe_E_DrfVq6P8CpCGVK9A,8571
152
- machineconfig/scripts/python/devops.py,sha256=dPCdg55WdcOXy6NIjIUnkBEpgmy-ooGGYA0x_G30ZKA,3486
151
+ machineconfig/scripts/python/devops.py,sha256=c5URta0jxlxi7fyNpUit5w7eZbQUaXpN59C6ZB_06Xk,3487
153
152
  machineconfig/scripts/python/devops_add_identity.py,sha256=wvjNgqsLmqD2SxbNCW_usqfp0LI-TDvcJJKGOWt2oFw,3775
154
153
  machineconfig/scripts/python/devops_add_ssh_key.py,sha256=BXB-9RvuSZO0YTbnM2azeABW2ngLW4SKhhAGAieMzfw,6873
155
154
  machineconfig/scripts/python/devops_backup_retrieve.py,sha256=JLJHmi8JmZ_qVTeMW-qBEAYGt1fmfWXzZ7Gm-Q-GDcU,5585
@@ -166,16 +165,16 @@ machineconfig/scripts/python/fire_jobs_streamlit_helper.py,sha256=47DEQpj8HBSa-_
166
165
  machineconfig/scripts/python/ftpx.py,sha256=QfQTp-6jQP6yxfbLc5sKxiMtTgAgc8sjN7d17_uLiZc,9400
167
166
  machineconfig/scripts/python/get_zellij_cmd.py,sha256=e35-18hoXM9N3PFbvbizfkNY_-63iMicieWE3TbGcCQ,576
168
167
  machineconfig/scripts/python/gh_models.py,sha256=3BLfW25mBRiPO5VKtVm-nMlKLv-PaZDw7mObajq6F6M,5538
169
- machineconfig/scripts/python/interactive.py,sha256=NHAniZPgEfhgA3higTRD3U76nHIDpZLygWebhKc6ld0,11791
168
+ machineconfig/scripts/python/interactive.py,sha256=Tmqes57K0Z1svEcxM6uOd6nSivwwQCthrupToeubDAo,11793
170
169
  machineconfig/scripts/python/mount_nfs.py,sha256=aECrL64j9g-9rF49sVJAjGmzaoGgcMnl3g9v17kQF4c,3239
171
170
  machineconfig/scripts/python/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
172
171
  machineconfig/scripts/python/mount_ssh.py,sha256=k2fKq3f5dKq_7anrFOlqvJoI_3U4EWNHLRZ1o3Lsy6M,2268
173
172
  machineconfig/scripts/python/onetimeshare.py,sha256=bmGsNnskym5OWfIhpOfZG5jq3m89FS0a6dF5Sb8LaZM,2539
174
173
  machineconfig/scripts/python/pomodoro.py,sha256=SPkfeoZGv8rylGiOyzQ7UK3aXZ3G2FIOuGkSuBUggOI,2019
175
- machineconfig/scripts/python/repos.py,sha256=F6RuAldifnk_t_KUt1d69JT8EqV06Ip27JYljp6-1RY,5196
174
+ machineconfig/scripts/python/repos.py,sha256=QPmtDq1gkzWGMduHpDHPMUe-7qPO_GemjQZLNAU-SYo,7157
176
175
  machineconfig/scripts/python/repos_helper_action.py,sha256=6bQln9x2L_lOnvWwnTM_nJjkugl5LDDGHedVsz2zuI4,13320
177
176
  machineconfig/scripts/python/repos_helper_clone.py,sha256=9vGb9NCXT0lkerPzOJjmFfhU8LSzE-_1LDvjkhgnal0,5461
178
- machineconfig/scripts/python/repos_helper_record.py,sha256=I4CsIPMZR-JcUuKyyinynws0ul0xb2Lb5F1QCnS9HBY,10911
177
+ machineconfig/scripts/python/repos_helper_record.py,sha256=dtnnInQPn00u1cyr0oOgJ_jB12O3bSiNctwzC3W7_3w,10994
179
178
  machineconfig/scripts/python/repos_helper_update.py,sha256=AYyKIB7eQ48yoYmFjydIhRI1lV39TBv_S4_LCa-oKuQ,11042
180
179
  machineconfig/scripts/python/scheduler.py,sha256=rKhssuxkD697EY6qaV6CSdNhxpAQLDWO4fE8GMCQ9FA,3061
181
180
  machineconfig/scripts/python/sessions.py,sha256=e8gL0fVWOZ5WcJsA3ZWfqJBc5c7g-rMlVf0SF63rIaU,8547
@@ -246,7 +245,6 @@ machineconfig/scripts/windows/mount_ssh.ps1,sha256=zvU1737vR0f0S7Si1tXMb3ys_I9KV
246
245
  machineconfig/scripts/windows/nano.ps1,sha256=H1PNN1x3UnOCGwijgMij-K2ZM2E20sfsLTEEap-W5dQ,50
247
246
  machineconfig/scripts/windows/pomodoro.ps1,sha256=9r61cwRy4M2_1A-NFb0fxUuUONxXBLJmLYtY3apkyQA,80
248
247
  machineconfig/scripts/windows/reload_path.ps1,sha256=81hQY18LFApVZWFiUfgMzzPH2pJ1WD1fHInfmicBZFA,217
249
- machineconfig/scripts/windows/repos.ps1,sha256=sjUcrURmYuxdcrdhwLHeWxwByyLgY4k13i8VYSFDKuo,76
250
248
  machineconfig/scripts/windows/scheduler.ps1,sha256=YfOlBxCkPfeQPeyCiNw0g3kIpdbjjf6daLEWuyHSaXY,81
251
249
  machineconfig/scripts/windows/sessions.ps1,sha256=cQdgSS3rVWvhthsUi5lyFI05_GKiRGI-j4FB1SZNKpM,80
252
250
  machineconfig/scripts/windows/share_cloud.cmd,sha256=exD7JCdxw2LqVjw2MKCYHbVZlEqmelXtwnATng-dhJ4,1028
@@ -409,8 +407,8 @@ machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=pTxvLzIpD5RF
409
407
  machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoSpdmTIdgS9LS-RvE-QZ-D260tD3o,1214
410
408
  machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
411
409
  machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
412
- machineconfig-5.0.dist-info/METADATA,sha256=iR23svhxBwVuCPPYQw123XN8KR3K_JufOAnMeJ0tIHk,7060
413
- machineconfig-5.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
414
- machineconfig-5.0.dist-info/entry_points.txt,sha256=LcwklRJPY_uKBvStgtOJn5G_pmFCEdpgRNzUUc6twAQ,1134
415
- machineconfig-5.0.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
416
- machineconfig-5.0.dist-info/RECORD,,
410
+ machineconfig-5.11.dist-info/METADATA,sha256=HPKfljpArui1ViEtQWTnWtLDiyLzZTfrqnopro65cXY,8030
411
+ machineconfig-5.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
412
+ machineconfig-5.11.dist-info/entry_points.txt,sha256=2afE1mw-o4MUlfxyX73SV02XaQI4SV_LdL2r6_CzhPU,1074
413
+ machineconfig-5.11.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
414
+ machineconfig-5.11.dist-info/RECORD,,
@@ -13,7 +13,6 @@ initai = machineconfig.scripts.python.ai.initai:main
13
13
  kill_process = machineconfig.utils.procs:main
14
14
  mount_nfs = machineconfig.scripts.python.mount_nfs:main
15
15
  mount_nw_drive = machineconfig.scripts.python.mount_nw_drive:main
16
- repos = machineconfig.scripts.python.repos:main_from_parser
17
16
  sessions = machineconfig.scripts.python.sessions:main_from_parser
18
17
  start_slidev = machineconfig.scripts.python.start_slidev:arg_parser
19
18
  wifi_conn = machineconfig.scripts.python.wifi_conn:arg_parser
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env bash
2
- uv run --python 3.13 --no-dev --project $HOME/code/machineconfig repos "$@"
@@ -1 +0,0 @@
1
- uv run --python 3.13 --no-dev --project $HOME/code/machineconfig repos $args