machineconfig 5.20__py3-none-any.whl → 5.21__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.

@@ -453,17 +453,15 @@ def created_zellij_layout(layout_config: LayoutConfig, output_dir: Optional[str]
453
453
 
454
454
 
455
455
  def run_zellij_layout(layout_config: LayoutConfig):
456
- layout_path = created_zellij_layout(layout_config, None)
456
+ layout_path = created_zellij_layout(layout_config=layout_config, output_dir=None)
457
457
  session_name = layout_config["layoutName"]
458
458
  try:
459
459
  from machineconfig.cluster.sessions_managers.utils.enhanced_command_runner import enhanced_zellij_session_start
460
-
461
460
  enhanced_zellij_session_start(session_name, layout_path)
462
461
  except ImportError:
463
462
  # Fallback to original implementation
464
463
  cmd = f"zellij delete-session --force {session_name}; zellij --layout {layout_path} a -b {session_name}"
465
464
  import subprocess
466
-
467
465
  subprocess.run(cmd, shell=True, check=True)
468
466
  console.print(f"[bold green]🚀 Zellij layout is running[/bold green] [yellow]@[/yellow] [bold cyan]{session_name}[/bold cyan]")
469
467
 
@@ -9,12 +9,6 @@ from rich.panel import Panel
9
9
  from machineconfig.utils.schemas.installer.installer_types import InstallerData
10
10
 
11
11
 
12
- # config_dict: InstallerData = {
13
- # "appName": "Brave",
14
- # "repoURL": "CMD",
15
- # "doc": "Privacy-focused web browser with built-in ad blocking",
16
- # }
17
-
18
12
 
19
13
  def main(installer_data: InstallerData, version: Optional[str]) -> None:
20
14
  console = Console()
@@ -75,8 +75,6 @@ PACKAGES_DOC_CONVERSION = [
75
75
  "mermaid-cli",
76
76
  "html2markdown",
77
77
  "pandoc",
78
- "cpz",
79
- "rmz",
80
78
  ]
81
79
 
82
80
  # Media & Entertainment - Music players and media tools
@@ -90,6 +88,8 @@ PACKAGES_MEDIA = [
90
88
 
91
89
  # File Sharing & Cloud - File sharing, transfer, backup, sync, and QR tools
92
90
  PACKAGES_FILE_SHARING = [
91
+ "cpz",
92
+ "rmz",
93
93
  "ffsend",
94
94
  "portal",
95
95
  "qrcp",
@@ -104,6 +104,7 @@ PACKAGES_FILE_SHARING = [
104
104
  "restic",
105
105
  "syncthing",
106
106
  "cloudreve",
107
+ "ots",
107
108
  ]
108
109
 
109
110
 
@@ -121,11 +122,11 @@ PACKAGES_DEV_UTILS = [
121
122
  "rust-analyzer",
122
123
  "evcxr",
123
124
  "geckodriver",
124
- "hyperfine",
125
125
  ]
126
126
 
127
127
  # Code Analysis, Git & Docs - Code analysis, statistics, documentation, and Git tools
128
128
  PACKAGES_CODE_ANALYSIS = [
129
+ "hyperfine",
129
130
  "kondo",
130
131
  "tokei",
131
132
  "navi",
@@ -142,9 +143,6 @@ PACKAGES_PRODUCTIVITY = [
142
143
  "openpomodoro-cli",
143
144
  "just",
144
145
  "rustdesk",
145
- "ots",
146
- "lolcatjs",
147
- "figlet-cli",
148
146
  ]
149
147
 
150
148
  # Miscellaneous Tools - Other tools
@@ -237,8 +235,14 @@ PACKAGES_TERMINAL_SHELL = [
237
235
  "mprocs",
238
236
  "mcfly",
239
237
  "starship",
238
+ "lolcatjs",
239
+ "figlet-cli",
240
+ ]
241
+ # Web Sharing - Share terminal over web
242
+ PACKAGES_WEB_TERMINAL = [
243
+ "gotty",
244
+ "ttyd",
240
245
  ]
241
-
242
246
 
243
247
 
244
248
  # Cloud & Utilities - Cloud storage, file watching, web terminal, and presentation tools
@@ -250,11 +254,7 @@ PACKAGES_CLOUD_UTILS = [
250
254
  "speedtest",
251
255
  ]
252
256
 
253
- # Web Sharing - Share terminal over web
254
- PACKAGES_WEB_TERMINAL = [
255
- "gotty",
256
- "ttyd",
257
- ]
257
+
258
258
 
259
259
 
260
260
  # Main ESSENTIAL package list - combines all subgroups
@@ -1,11 +1,11 @@
1
1
  """devops with emojis"""
2
2
 
3
+ import typer
4
+ from typing import Literal, Annotated, Optional, get_args
5
+
3
6
  import machineconfig.scripts.python.share_terminal as share_terminal
4
7
  import machineconfig.scripts.python.repos as repos
5
8
  from machineconfig.jobs.installer.package_groups import PACKAGE_GROUPS
6
- # import machineconfig.scripts.python.dotfile as dotfile_module
7
- import typer
8
- from typing import Literal, Annotated, Optional, get_args
9
9
 
10
10
 
11
11
  app = typer.Typer(help="🛠️ DevOps operations", no_args_is_help=True)
@@ -75,10 +75,14 @@ def public(method: Literal["symlink", "copy"] = typer.Option(..., "--method", "-
75
75
  import machineconfig.profile.create_frontend as create_frontend
76
76
  create_frontend.main_public_from_parser(method=method, on_conflict=on_conflict, which=which, interactive=interactive)
77
77
 
78
- # @config_apps.command(no_args_is_help=True)
79
- # def dotfile():
80
- # """🔗 Manage dotfiles."""
81
- # dotfile_module.main()
78
+ @config_apps.command(no_args_is_help=True)
79
+ def dotfile(file: Annotated[str, typer.Argument(help="file/folder path.")],
80
+ overwrite: Annotated[bool, typer.Option("--overwrite", "-o", help="Overwrite.")] = False,
81
+ dest: Annotated[str, typer.Option("--dest", "-d", help="destination folder")] = "",
82
+ ):
83
+ """🔗 Manage dotfiles."""
84
+ import machineconfig.scripts.python.dotfile as dotfile_module
85
+ dotfile_module.main(file=file, overwrite=overwrite, dest=dest)
82
86
 
83
87
 
84
88
  @config_apps.command(no_args_is_help=True)
@@ -237,11 +237,9 @@ def main(verbose: bool = True, allow_password_prompt: bool = False) -> None:
237
237
  padding=(1, 2),
238
238
  )
239
239
  )
240
-
241
240
  # Run uv sync for repositories where pyproject.toml changed but sync wasn't run yet
242
241
  for repo_path in repos_with_changes:
243
242
  run_uv_sync(repo_path)
244
-
245
243
  # Generate and display summary
246
244
  _display_summary(results)
247
245
 
@@ -7,17 +7,13 @@ fire
7
7
 
8
8
  """
9
9
 
10
- from machineconfig.scripts.python.fire_jobs_route_helper import get_command_streamlit
11
- from machineconfig.scripts.python.helpers.helpers4 import search_for_files_of_interest
12
- from machineconfig.scripts.python.helpers.helpers4 import parse_pyfile
13
- from machineconfig.scripts.python.helpers.helpers4 import get_import_module_code
14
10
  from machineconfig.utils.ve import get_ve_activate_line, get_ve_path_and_ipython_profile
15
11
  from machineconfig.utils.options import choose_from_options
16
12
  from machineconfig.utils.path_helper import match_file_name, sanitize_path
17
-
18
13
  from machineconfig.utils.path_extended import PathExtended
19
14
  from machineconfig.utils.accessories import get_repo_root, randstr
20
15
  from machineconfig.scripts.python.fire_jobs_args_helper import FireJobArgs, extract_kwargs, parse_fire_args_from_context
16
+
21
17
  import platform
22
18
  from typing import Optional, Annotated
23
19
  from pathlib import Path
@@ -30,6 +26,7 @@ def route(args: FireJobArgs, fire_args: str = "") -> None:
30
26
  suffixes = {".py", ".sh", ".ps1"}
31
27
  choice_file = match_file_name(sub_string=args.path, search_root=PathExtended.cwd(), suffixes=suffixes)
32
28
  elif path_obj.is_dir():
29
+ from machineconfig.scripts.python.helpers.helpers4 import search_for_files_of_interest
33
30
  print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
34
31
  files = search_for_files_of_interest(path_obj)
35
32
  print(f"🔍 Got #{len(files)} results.")
@@ -37,12 +34,16 @@ def route(args: FireJobArgs, fire_args: str = "") -> None:
37
34
  choice_file = PathExtended(choice_file)
38
35
  else:
39
36
  choice_file = path_obj
37
+
38
+
40
39
  repo_root = get_repo_root(Path(choice_file))
41
40
  print(f"💾 Selected file: {choice_file}.\nRepo root: {repo_root}")
42
41
  ve_root_from_file, ipy_profile = get_ve_path_and_ipython_profile(choice_file)
43
42
  if ipy_profile is None:
44
43
  ipy_profile = "default"
45
44
 
45
+
46
+ # ========================= preparing kwargs_dict
46
47
  if choice_file.suffix == ".py":
47
48
  kwargs_dict = extract_kwargs(args) # This now returns empty dict, but kept for compatibility
48
49
  activate_ve_line = get_ve_activate_line(ve_root=args.ve or ve_root_from_file or "$HOME/code/machineconfig/.venv")
@@ -50,41 +51,17 @@ def route(args: FireJobArgs, fire_args: str = "") -> None:
50
51
  activate_ve_line = ""
51
52
  kwargs_dict = {}
52
53
 
54
+
53
55
  # ========================= choosing function to run
54
56
  choice_function: Optional[str] = None # Initialize to avoid unbound variable
55
- if args.choose_function or args.submit_to_cloud:
56
- if choice_file.suffix == ".py":
57
- options, func_args = parse_pyfile(file_path=str(choice_file))
58
- choice_function_tmp = choose_from_options(msg="Choose a function to run", options=options, fzf=True, multi=False)
59
- assert isinstance(choice_function_tmp, str), f"choice_function must be a string. Got {type(choice_function_tmp)}"
60
- choice_index = options.index(choice_function_tmp)
61
- choice_function = choice_function_tmp.split(" -- ")[0]
62
- choice_function_args = func_args[choice_index]
63
-
64
- if choice_function == "RUN AS MAIN":
65
- choice_function = None
66
- if len(choice_function_args) > 0 and len(kwargs_dict) == 0:
67
- for item in choice_function_args:
68
- kwargs_dict[item.name] = input(f"Please enter a value for argument `{item.name}` (type = {item.type}) (default = {item.default}) : ") or item.default
69
- elif choice_file.suffix == ".sh": # in this case, we choos lines.
70
- options = []
71
- for line in choice_file.read_text(encoding="utf-8").splitlines():
72
- if line.startswith("#"):
73
- continue
74
- if line == "":
75
- continue
76
- if line.startswith("echo"):
77
- continue
78
- options.append(line)
79
- chosen_lines = choose_from_options(msg="Choose a line to run", options=options, fzf=True, multi=True)
80
- choice_file = PathExtended.tmpfile(suffix=".sh")
81
- choice_file.parent.mkdir(parents=True, exist_ok=True)
82
- choice_file.write_text("\n".join(chosen_lines), encoding="utf-8")
83
- choice_function = None
57
+ if args.choose_function:
58
+ from machineconfig.scripts.python.fire_jobs_route_helper import choose_function_or_lines
59
+ choice_function, choice_file, kwargs_dict = choose_function_or_lines(choice_file, kwargs_dict)
84
60
  else:
85
61
  choice_function = args.function
86
62
 
87
63
  if choice_file.suffix == ".py":
64
+ from machineconfig.scripts.python.fire_jobs_route_helper import get_command_streamlit
88
65
  if args.streamlit: exe = get_command_streamlit(choice_file, args.environment, repo_root)
89
66
  elif args.interactive is False: exe = "python"
90
67
  elif args.jupyter: exe = "jupyter-lab"
@@ -95,6 +72,7 @@ def route(args: FireJobArgs, fire_args: str = "") -> None:
95
72
 
96
73
  if args.module or (args.debug and args.choose_function): # because debugging tools do not support choosing functions and don't interplay with fire module. So the only way to have debugging and choose function options is to import the file as a module into a new script and run the function of interest there and debug the new script.
97
74
  assert choice_file.suffix == ".py", f"File must be a python file to be imported as a module. Got {choice_file}"
75
+ from machineconfig.scripts.python.helpers.helpers4 import get_import_module_code
98
76
  import_line = get_import_module_code(str(choice_file))
99
77
  if repo_root is not None:
100
78
  repo_root_add = f"""sys.path.append(r'{repo_root}')"""
@@ -160,11 +138,9 @@ except ImportError as _ex:
160
138
  elif args.cmd:
161
139
  command = rf""" cd /d {choice_file.parent} & {exe} {choice_file.name} """
162
140
  else:
163
- if choice_file.suffix == "":
164
- command = f"{exe} {choice_file} {fire_args}"
165
- else:
166
- # command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {PathExtended.cwd()}"
167
- command = f"{exe} {choice_file} "
141
+ if choice_file.suffix == "": command = f"{exe} {choice_file} {fire_args}"
142
+ else: command = f"{exe} {choice_file} "
143
+
168
144
  if not args.cmd: command = f"{activate_ve_line}\n{command}"
169
145
  else:
170
146
  new_line = "\n"
@@ -176,14 +152,6 @@ python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
176
152
  if choice_function is not None:
177
153
  command += f"--function {choice_function} "
178
154
 
179
- if args.Nprocess > 1:
180
- from machineconfig.cluster.sessions_managers.zellij_local import run_zellij_layout
181
- from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
182
- layout: LayoutConfig = {"layoutName": "fireNprocess", "layoutTabs": []}
183
- for an_arg in range(args.Nprocess):
184
- layout["layoutTabs"].append({"tabName": f"tab{an_arg}", "startDir": str(PathExtended.cwd()), "command": f"uv run -m fire {choice_file} {choice_function} --idx={an_arg} --idx_max={args.Nprocess}"})
185
- run_zellij_layout(layout_config=layout)
186
- return None
187
155
  if args.optimized:
188
156
  command = command.replace("python ", "python -OO ")
189
157
  from rich.panel import Panel
@@ -245,7 +213,6 @@ def main(
245
213
  PathExport: Annotated[bool, typer.Option("--PathExport", "-P", help="Augment the PYTHONPATH with repo root")] = False,
246
214
  git_pull: Annotated[bool, typer.Option("--git_pull", "-g", help="Start by pulling the git repo")] = False,
247
215
  optimized: Annotated[bool, typer.Option("--optimized", "-O", help="Run the optimized version of the function")] = False,
248
- Nprocess: Annotated[int, typer.Option("--Nprocess", "-p", help="Number of processes to use")] = 1,
249
216
  zellij_tab: Annotated[Optional[str], typer.Option("--zellij_tab", "-z", help="Open in a new zellij tab")] = None,
250
217
  watch: Annotated[bool, typer.Option("--watch", "-w", help="Watch the file for changes")] = False,
251
218
  ) -> None:
@@ -273,7 +240,6 @@ def main(
273
240
  PathExport=PathExport,
274
241
  git_pull=git_pull,
275
242
  optimized=optimized,
276
- Nprocess=Nprocess,
277
243
  zellij_tab=zellij_tab,
278
244
  watch=watch,
279
245
  )
@@ -303,5 +269,4 @@ def main_from_parser():
303
269
 
304
270
 
305
271
  if __name__ == "__main__":
306
- # options, func_args = parse_pyfile(file_path="C:/Users/aalsaf01/code/machineconfig/myresources/crocodile/core.py")
307
272
  main_from_parser()
@@ -6,6 +6,52 @@ import tomllib
6
6
  from pathlib import Path
7
7
  from machineconfig.utils.accessories import randstr
8
8
  from machineconfig.utils.path_extended import PathExtended
9
+ from machineconfig.utils.options import choose_from_options
10
+
11
+
12
+ def choose_function_or_lines(choice_file: PathExtended, kwargs_dict: dict[str, object]) -> tuple[Optional[str], PathExtended, dict[str, object]]:
13
+ """
14
+ Choose a function to run from a Python file or lines from a shell script.
15
+
16
+ Returns:
17
+ tuple: (choice_function, choice_file, kwargs_dict)
18
+ - choice_function: The selected function name or None
19
+ - choice_file: The file path (potentially modified for shell scripts)
20
+ - kwargs_dict: Updated kwargs dictionary with user-provided arguments
21
+ """
22
+ choice_function: Optional[str] = None
23
+
24
+ if choice_file.suffix == ".py":
25
+ from machineconfig.scripts.python.helpers.helpers4 import parse_pyfile
26
+ options, func_args = parse_pyfile(file_path=str(choice_file))
27
+ choice_function_tmp = choose_from_options(msg="Choose a function to run", options=options, fzf=True, multi=False)
28
+ assert isinstance(choice_function_tmp, str), f"choice_function must be a string. Got {type(choice_function_tmp)}"
29
+ choice_index = options.index(choice_function_tmp)
30
+ choice_function = choice_function_tmp.split(" -- ")[0]
31
+ choice_function_args = func_args[choice_index]
32
+
33
+ if choice_function == "RUN AS MAIN":
34
+ choice_function = None
35
+ if len(choice_function_args) > 0 and len(kwargs_dict) == 0:
36
+ for item in choice_function_args:
37
+ kwargs_dict[item.name] = input(f"Please enter a value for argument `{item.name}` (type = {item.type}) (default = {item.default}) : ") or item.default
38
+ elif choice_file.suffix == ".sh":
39
+ options = []
40
+ for line in choice_file.read_text(encoding="utf-8").splitlines():
41
+ if line.startswith("#"):
42
+ continue
43
+ if line == "":
44
+ continue
45
+ if line.startswith("echo"):
46
+ continue
47
+ options.append(line)
48
+ chosen_lines = choose_from_options(msg="Choose a line to run", options=options, fzf=True, multi=True)
49
+ choice_file = PathExtended.tmpfile(suffix=".sh")
50
+ choice_file.parent.mkdir(parents=True, exist_ok=True)
51
+ choice_file.write_text("\n".join(chosen_lines), encoding="utf-8")
52
+ choice_function = None
53
+
54
+ return choice_function, choice_file, kwargs_dict
9
55
 
10
56
 
11
57
  def get_command_streamlit(choice_file: Path, environment: str, repo_root: Optional[Path]) -> str:
@@ -2,7 +2,7 @@
2
2
  from pathlib import Path
3
3
  from typing import Optional, Literal
4
4
  import typer
5
-
5
+ from machineconfig.scripts.python.sessions_multiprocess import create_from_function
6
6
 
7
7
  def balance_load(layout_path: Path = typer.Argument(..., help="Path to the layout.json file"),
8
8
  max_thresh: int = typer.Option(..., help="Maximum tabs per layout"),
@@ -69,7 +69,7 @@ def find_layout_file(layout_path: str, ) -> Path:
69
69
  return choice_file
70
70
 
71
71
 
72
- def launch(ctx: typer.Context,
72
+ def run(ctx: typer.Context,
73
73
  layout_path: Optional[str] = typer.Argument(None, help="Path to the layout.json file"),
74
74
  max_tabs: int = typer.Option(10, help="A Sanity checker that throws an error if any layout exceeds the maximum number of tabs to launch."),
75
75
  max_layouts: int = typer.Option(10, help="A Sanity checker that throws an error if the total number of layouts exceeds this number."),
@@ -133,14 +133,11 @@ def launch(ctx: typer.Context,
133
133
 
134
134
 
135
135
  def main_from_parser():
136
- layouts_app = typer.Typer(help="Layouts management subcommands")
137
- layouts_app.command("run")(launch)
138
- layouts_app.command("balance-load")(balance_load)
139
- import sys
140
- if len(sys.argv) == 1:
141
- layouts_app(["--help"])
142
- else:
143
- layouts_app()
136
+ layouts_app = typer.Typer(help="Layouts management subcommands", no_args_is_help=True)
137
+ layouts_app.command("create-from-function", no_args_is_help=True)(create_from_function)
138
+ layouts_app.command("run", no_args_is_help=True)(run)
139
+ layouts_app.command("balance-load", no_args_is_help=True)(balance_load)
140
+ layouts_app()
144
141
 
145
142
 
146
143
  if __name__ == "__main__":
@@ -0,0 +1,56 @@
1
+
2
+
3
+ from typing import Optional
4
+ from pathlib import Path
5
+ import typer
6
+
7
+
8
+ def create_from_function(
9
+ num_process: int = typer.Option(..., "--num-process", "-n", help="Number of parallel processes to run"),
10
+ path: str = typer.Option(".", "--path", "-p", help="Path to a Python or Shell script file or a directory containing such files"),
11
+ function: Optional[str] = typer.Option(None, "--function", "-f", help="Function to run from the Python file. If not provided, you will be prompted to choose."),
12
+ ):
13
+ from machineconfig.utils.ve import get_ve_activate_line, get_ve_path_and_ipython_profile
14
+ from machineconfig.utils.options import choose_from_options
15
+ from machineconfig.utils.path_helper import match_file_name, sanitize_path
16
+ from machineconfig.utils.path_extended import PathExtended
17
+ from machineconfig.utils.accessories import get_repo_root
18
+
19
+ path_obj = sanitize_path(path)
20
+ if not path_obj.exists():
21
+ suffixes = {".py"}
22
+ choice_file = match_file_name(sub_string=path, search_root=PathExtended.cwd(), suffixes=suffixes)
23
+ elif path_obj.is_dir():
24
+ from machineconfig.scripts.python.helpers.helpers4 import search_for_files_of_interest
25
+ print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
26
+ files = search_for_files_of_interest(path_obj)
27
+ print(f"🔍 Got #{len(files)} results.")
28
+ choice_file = choose_from_options(multi=False, options=files, fzf=True, msg="Choose one option")
29
+ choice_file = PathExtended(choice_file)
30
+ else:
31
+ choice_file = path_obj
32
+
33
+
34
+ repo_root = get_repo_root(Path(choice_file))
35
+ print(f"💾 Selected file: {choice_file}.\nRepo root: {repo_root}")
36
+ ve_root_from_file, ipy_profile = get_ve_path_and_ipython_profile(choice_file)
37
+ if ipy_profile is None:
38
+ ipy_profile = "default"
39
+
40
+ _activate_ve_line = get_ve_activate_line(ve_root=ve_root_from_file or "$HOME/code/machineconfig/.venv")
41
+
42
+ # ========================= choosing function to run
43
+ if function is None or function.strip() == "":
44
+ from machineconfig.scripts.python.fire_jobs_route_helper import choose_function_or_lines
45
+ choice_function, choice_file, _kwargs_dict = choose_function_or_lines(choice_file, kwargs_dict={})
46
+ else:
47
+ choice_function = function
48
+
49
+ from machineconfig.cluster.sessions_managers.zellij_local import run_zellij_layout
50
+ from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
51
+ layout: LayoutConfig = {"layoutName": "fireNprocess", "layoutTabs": []}
52
+ for an_arg in range(num_process):
53
+ layout["layoutTabs"].append({"tabName": f"tab{an_arg}", "startDir": str(PathExtended.cwd()), "command": f"uv run -m fire {choice_file} {choice_function} --idx={an_arg} --idx_max={num_process}"})
54
+ print(layout)
55
+ run_zellij_layout(layout_config=layout)
56
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machineconfig
3
- Version: 5.20
3
+ Version: 5.21
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -19,7 +19,7 @@ machineconfig/cluster/sessions_managers/wt_local.py,sha256=stmRrJj8jLS9-tEnx6LA9
19
19
  machineconfig/cluster/sessions_managers/wt_local_manager.py,sha256=h7hK2qwaXBPLnjMY5VUYDbL8YlCZaBv9zrMrq-_1sgU,24645
20
20
  machineconfig/cluster/sessions_managers/wt_remote.py,sha256=XmZV9rLubwxND5UYAS15mAcpzDdXvm4KyubVGYkVBmo,8743
21
21
  machineconfig/cluster/sessions_managers/wt_remote_manager.py,sha256=lcYHp3LO_pERAP7vaLwgBDArUaT_4GyfA0VclO0joUc,19844
22
- machineconfig/cluster/sessions_managers/zellij_local.py,sha256=T2wXkW9ug1nzdnhlD-1G2HPlBpBaNw6rdM9rk4KKeHQ,26137
22
+ machineconfig/cluster/sessions_managers/zellij_local.py,sha256=oieD_YnbRzNm6lUbvli7OYQWDn_SpZRYSt0rJnD6pas,26160
23
23
  machineconfig/cluster/sessions_managers/zellij_local_manager.py,sha256=jjxeItH7RIjvTywSj9iOjdSCDn5FJwRbj4wNKQRo2bk,24044
24
24
  machineconfig/cluster/sessions_managers/zellij_remote.py,sha256=3gz-wgqVW7B-4CgvJq0fiDh8691h4yeK3Xh3CfSPc2s,8749
25
25
  machineconfig/cluster/sessions_managers/zellij_remote_manager.py,sha256=T-j1KMV7mDTeGSHC5To0_JmqNtjSR_LVZT9VanP4lyI,8313
@@ -43,12 +43,12 @@ machineconfig/cluster/templates/cli_trogon.py,sha256=PFWGy8SFYIhT9r3ZV4oIEYfImsQ
43
43
  machineconfig/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
44
  machineconfig/jobs/installer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
45
  machineconfig/jobs/installer/installer_data.json,sha256=K6B6EPD8IXIeOzkY7sIIpphBmDVwnV_tczULAx-Y2ps,72114
46
- machineconfig/jobs/installer/package_groups.py,sha256=VuI4WZEDpgApBptxqu7mbfKxrQ99JY52L1n2devP-y0,6822
46
+ machineconfig/jobs/installer/package_groups.py,sha256=7LLrbs_yc4dkttIhZ5cR3zAZHMuBV5Gt0zN6t3J_jqg,6822
47
47
  machineconfig/jobs/installer/custom/gh.py,sha256=gn7TUSrsLx7uqFqj1Z-iYglS0EYBSgtJ9jWHxaJIfXM,4119
48
48
  machineconfig/jobs/installer/custom/hx.py,sha256=ahtnne0zLvnBDjbKPaEk987R_mub8KJhwWpe4fe0kCU,5824
49
49
  machineconfig/jobs/installer/custom_dev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
50
  machineconfig/jobs/installer/custom_dev/alacritty.py,sha256=dQJ7EZ-23N3UOeWwccC-HTbrpfKDRxrzdmfqeIPKwQE,2738
51
- machineconfig/jobs/installer/custom_dev/brave.py,sha256=6-jsdvvVEQDkqHbhnEubitF6fy7AXBB9Q-GLgIEOLoM,2987
51
+ machineconfig/jobs/installer/custom_dev/brave.py,sha256=kHgGRwgKrvpIlGzmdnWO6HJnSrnj8RlBEV_1Zz4s_Hw,2829
52
52
  machineconfig/jobs/installer/custom_dev/bypass_paywall.py,sha256=ZF8yF2srljLChe1tOw_fEsalOkts4RpNwlzX9GtWh2g,1888
53
53
  machineconfig/jobs/installer/custom_dev/code.py,sha256=0Hb4ToMLQX4WWyG4xfUEJMTwN01ad5VZGogu3Llqtbc,2480
54
54
  machineconfig/jobs/installer/custom_dev/cursor.py,sha256=3xoFAYFdZqurSHXeEG-vbG0KU1TNQpBMaMgL1eW6X4k,4326
@@ -146,19 +146,19 @@ machineconfig/scripts/python/cloud_sync.py,sha256=RWGpAfJ9fnN18yNBSgN44dzA38Hmd4
146
146
  machineconfig/scripts/python/count_lines.py,sha256=ZexMRsV70pe9fhLbGuens9EP5gCf078EwTDRHRZo5A0,15960
147
147
  machineconfig/scripts/python/count_lines_frontend.py,sha256=HlzPLU9_oJYqPNbnoQ0Hm4CuYy1UUlkZPcE5tFBSEbo,545
148
148
  machineconfig/scripts/python/croshell.py,sha256=zHUhOqWG81AOTeawZoDkpURnV1fAisY2lyZ0apvlmVY,6547
149
- machineconfig/scripts/python/devops.py,sha256=GeHPeRvQGajtgWZZ4U1itF4bPh0tFTQ49YYg7iPnLCk,6767
149
+ machineconfig/scripts/python/devops.py,sha256=zPLNigp8jeINJUS6THHLOLQb1Rp9WTtXgYoZkLWI_ao,7053
150
150
  machineconfig/scripts/python/devops_add_identity.py,sha256=wvjNgqsLmqD2SxbNCW_usqfp0LI-TDvcJJKGOWt2oFw,3775
151
151
  machineconfig/scripts/python/devops_add_ssh_key.py,sha256=BXB-9RvuSZO0YTbnM2azeABW2ngLW4SKhhAGAieMzfw,6873
152
152
  machineconfig/scripts/python/devops_backup_retrieve.py,sha256=JLJHmi8JmZ_qVTeMW-qBEAYGt1fmfWXzZ7Gm-Q-GDcU,5585
153
- machineconfig/scripts/python/devops_update_repos.py,sha256=8c58RDyIOelUfxaY7CEhuV53KL9QMlFl2QCWqHuZqww,9427
153
+ machineconfig/scripts/python/devops_update_repos.py,sha256=X5_qUlEj8O8qgk9hcXs45krP6_c9D1rC2StGrPjpCp8,9425
154
154
  machineconfig/scripts/python/dotfile.py,sha256=9W9i8Qbs6i2NfTq0knywB3StvE_sHaZYZ0RslTyoVz8,2734
155
155
  machineconfig/scripts/python/fire_agents_help_launch.py,sha256=1ymWiszfjCyPv3ofinWzfOmbzLEt3d7ntac_afLh-V4,5017
156
156
  machineconfig/scripts/python/fire_agents_help_search.py,sha256=qIfSS_su2YJ1Gb0_lu4cbjlJlYMBw0v52NTGiSrGjk8,2991
157
157
  machineconfig/scripts/python/fire_agents_helper_types.py,sha256=zKu8Vr6iucaGSkCm_Tkt_WrYU7-6Nript3coYyzTXzY,295
158
158
  machineconfig/scripts/python/fire_agents_load_balancer.py,sha256=mpqx3uaQdBXYieuvhdK-qsvLepf9oIMo3pwPj9mSEDI,1079
159
- machineconfig/scripts/python/fire_jobs.py,sha256=VIZZOjnE0u1g7U1jmYN3YUTFsLt8MM4_z67U951oEm4,15907
159
+ machineconfig/scripts/python/fire_jobs.py,sha256=r_iJbjdktxpgtQV7N4Smc1MMw6ssYUByIlQDNyIrW5A,13413
160
160
  machineconfig/scripts/python/fire_jobs_args_helper.py,sha256=-gl5I-26Op12nToIpAA-YEpvn8MMkNlI5XjhUbj50I0,4273
161
- machineconfig/scripts/python/fire_jobs_route_helper.py,sha256=EFWsg6F9TeSAtYQec57WtPopUbm2euGZTUZv6J4RhNE,3026
161
+ machineconfig/scripts/python/fire_jobs_route_helper.py,sha256=9zGuh_bMkQgfMS0nnFoa2oIWdmLAkSNtlEH4H-FprmM,5373
162
162
  machineconfig/scripts/python/fire_jobs_streamlit_helper.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
163
  machineconfig/scripts/python/ftpx.py,sha256=QfQTp-6jQP6yxfbLc5sKxiMtTgAgc8sjN7d17_uLiZc,9400
164
164
  machineconfig/scripts/python/get_zellij_cmd.py,sha256=e35-18hoXM9N3PFbvbizfkNY_-63iMicieWE3TbGcCQ,576
@@ -176,7 +176,8 @@ machineconfig/scripts/python/repos_helper_clone.py,sha256=9vGb9NCXT0lkerPzOJjmFf
176
176
  machineconfig/scripts/python/repos_helper_record.py,sha256=dtnnInQPn00u1cyr0oOgJ_jB12O3bSiNctwzC3W7_3w,10994
177
177
  machineconfig/scripts/python/repos_helper_update.py,sha256=AYyKIB7eQ48yoYmFjydIhRI1lV39TBv_S4_LCa-oKuQ,11042
178
178
  machineconfig/scripts/python/scheduler.py,sha256=rKhssuxkD697EY6qaV6CSdNhxpAQLDWO4fE8GMCQ9FA,3061
179
- machineconfig/scripts/python/sessions.py,sha256=e8gL0fVWOZ5WcJsA3ZWfqJBc5c7g-rMlVf0SF63rIaU,8547
179
+ machineconfig/scripts/python/sessions.py,sha256=oCNGhhAYxr5DFyGCkL7jup3hPb4qCdBome2Qr9Evwao,8694
180
+ machineconfig/scripts/python/sessions_multiprocess.py,sha256=HLfVpPnlMdqehfK3_p1WCpVWMQldVWoGziSZ-Fb_7uY,2893
180
181
  machineconfig/scripts/python/share_terminal.py,sha256=-SNCDrQHBDUZw2cNNrEw3K3owzmZASBjd5deBKB49YY,5358
181
182
  machineconfig/scripts/python/snapshot.py,sha256=aDvKeoniZaeTSNv9zWBUajaj2yagAxVdfuvO1_tgq5Y,1026
182
183
  machineconfig/scripts/python/start_slidev.py,sha256=FAJ1_WkAQ7KcbRZ3cSN_72NDgV_flRrwxmXv1imyulI,4897
@@ -417,8 +418,8 @@ machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=pTxvLzIpD5RF
417
418
  machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoSpdmTIdgS9LS-RvE-QZ-D260tD3o,1214
418
419
  machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
419
420
  machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
420
- machineconfig-5.20.dist-info/METADATA,sha256=1nL_AlCqeKOVeHhyQXWYzCUg6dXrutMRVaYqL6bbE2I,8030
421
- machineconfig-5.20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
422
- machineconfig-5.20.dist-info/entry_points.txt,sha256=2afE1mw-o4MUlfxyX73SV02XaQI4SV_LdL2r6_CzhPU,1074
423
- machineconfig-5.20.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
424
- machineconfig-5.20.dist-info/RECORD,,
421
+ machineconfig-5.21.dist-info/METADATA,sha256=o9KOmpOSq1ZegBwvgyFbvyhqp-dt4dJHpSPzYqnignE,8030
422
+ machineconfig-5.21.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
423
+ machineconfig-5.21.dist-info/entry_points.txt,sha256=2afE1mw-o4MUlfxyX73SV02XaQI4SV_LdL2r6_CzhPU,1074
424
+ machineconfig-5.21.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
425
+ machineconfig-5.21.dist-info/RECORD,,