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

Files changed (39) hide show
  1. machineconfig/cluster/sessions_managers/ffile.py +4 -0
  2. machineconfig/jobs/installer/custom/gh.py +2 -15
  3. machineconfig/jobs/installer/custom_dev/alacritty.py +41 -26
  4. machineconfig/jobs/installer/custom_dev/brave.py +42 -28
  5. machineconfig/jobs/installer/custom_dev/bypass_paywall.py +30 -19
  6. machineconfig/jobs/installer/custom_dev/code.py +29 -20
  7. machineconfig/jobs/installer/custom_dev/espanso.py +64 -41
  8. machineconfig/jobs/installer/custom_dev/goes.py +41 -36
  9. machineconfig/jobs/installer/custom_dev/lvim.py +49 -33
  10. machineconfig/jobs/installer/custom_dev/nerdfont.py +71 -47
  11. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +25 -10
  12. machineconfig/jobs/installer/custom_dev/redis.py +51 -33
  13. machineconfig/jobs/installer/installer_data.json +17 -0
  14. machineconfig/jobs/installer/package_groups.py +271 -102
  15. machineconfig/jobs/python/python_cargo_build_share.py +0 -1
  16. machineconfig/jobs/python/python_ve_symlink.py +23 -15
  17. machineconfig/jobs/python/vscode/api.py +16 -8
  18. machineconfig/jobs/python/vscode/sync_code.py +42 -27
  19. machineconfig/scripts/python/cloud_repo_sync.py +8 -4
  20. machineconfig/scripts/python/devops_devapps_install.py +34 -26
  21. machineconfig/scripts/python/fire_jobs_args_helper.py +9 -0
  22. machineconfig/scripts/python/helpers/helpers4.py +2 -68
  23. machineconfig/scripts/python/helpers/repo_sync_helpers.py +4 -2
  24. machineconfig/scripts/python/interactive.py +24 -23
  25. machineconfig/scripts/python/mount_nfs.py +3 -6
  26. machineconfig/scripts/python/mount_ssh.py +3 -4
  27. machineconfig/scripts/python/sessions.py +10 -9
  28. machineconfig/scripts/python/start_slidev.py +14 -4
  29. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +36 -22
  30. machineconfig/utils/code.py +11 -2
  31. machineconfig/utils/installer.py +15 -9
  32. machineconfig/utils/path_extended.py +49 -7
  33. machineconfig/utils/ssh.py +22 -12
  34. machineconfig/utils/terminal.py +66 -92
  35. {machineconfig-4.94.dist-info → machineconfig-4.97.dist-info}/METADATA +1 -1
  36. {machineconfig-4.94.dist-info → machineconfig-4.97.dist-info}/RECORD +39 -38
  37. {machineconfig-4.94.dist-info → machineconfig-4.97.dist-info}/WHEEL +0 -0
  38. {machineconfig-4.94.dist-info → machineconfig-4.97.dist-info}/entry_points.txt +0 -0
  39. {machineconfig-4.94.dist-info → machineconfig-4.97.dist-info}/top_level.txt +0 -0
@@ -115,8 +115,17 @@ def run_script(program: str):
115
115
  console.print(Panel(Syntax(code=program, lexer=lexer), title=f"📄script @ {temp_script_path}", subtitle="shell code"), style="bold red")
116
116
  if platform.system() == "Windows":
117
117
  import subprocess
118
- subprocess.run(["powershell", "-ExecutionPolicy", "Bypass", "-File", str(temp_script_path)], check=True, shell=True)
118
+ subprocess.run(f'powershell -ExecutionPolicy Bypass -File "{temp_script_path}"', check=True, shell=True)
119
119
  elif platform.system() == "Linux" or platform.system() == "Darwin":
120
120
  import subprocess
121
- subprocess.run(["bash", str(temp_script_path)], check=True, shell=True)
121
+ subprocess.run(f"bash {str(temp_script_path)}", check=True, shell=True)
122
122
  temp_script_path.unlink(missing_ok=True)
123
+ # def run_command(command: str, description: str) -> bool:
124
+ # """Execute a shell command and return success status."""
125
+ # console.print(f"\n🔧 {description}", style="bold cyan")
126
+ # try:
127
+ # result = subprocess.run(command, shell=True, check=True, capture_output=False)
128
+ # return result.returncode == 0
129
+ # except subprocess.CalledProcessError as e:
130
+ # console.print(f"❌ Error executing command: {e}", style="bold red")
131
+ # return False
@@ -12,7 +12,7 @@ from machineconfig.utils.path_extended import PathExtended as PathExtended
12
12
  from machineconfig.utils.source_of_truth import INSTALL_VERSION_ROOT, LINUX_INSTALL_PATH, LIBRARY_ROOT
13
13
  from machineconfig.utils.io import read_json
14
14
 
15
- from typing import Any
15
+ from typing import Any, Optional
16
16
  import platform
17
17
  from joblib import Parallel, delayed
18
18
 
@@ -93,18 +93,24 @@ def get_installed_cli_apps():
93
93
  return apps
94
94
 
95
95
 
96
- def get_installers(os: OPERATING_SYSTEMS, arch: CPU_ARCHITECTURES, which_cats: list[PACKAGE_GROUPS]) -> list[InstallerData]:
96
+ def get_installers(os: OPERATING_SYSTEMS, arch: CPU_ARCHITECTURES, which_cats: Optional[list[PACKAGE_GROUPS]]) -> list[InstallerData]:
97
97
  print(f"\n{'=' * 80}\n🔍 LOADING INSTALLER CONFIGURATIONS 🔍\n{'=' * 80}")
98
98
  res_all = get_all_installer_data_files()
99
- acceptable_apps_names: list[str] = []
100
- for cat in which_cats:
101
- acceptable_apps_names += PACKAGE_GROUP2NAMES[cat]
99
+ acceptable_apps_names: list[str] | None = None
100
+ if which_cats is not None:
101
+ acceptable_apps_names = []
102
+ for cat in which_cats:
103
+ acceptable_apps_names += PACKAGE_GROUP2NAMES[cat]
104
+ else:
105
+ acceptable_apps_names = None
102
106
  all_installers: list[InstallerData] = []
103
107
  for installer_data in res_all:
104
- if installer_data["appName"] in acceptable_apps_names:
105
- if installer_data["fileNamePattern"][arch][os] is None:
108
+ if acceptable_apps_names is not None:
109
+ if installer_data["appName"] not in acceptable_apps_names:
106
110
  continue
107
- all_installers.append(installer_data)
111
+ if installer_data["fileNamePattern"][arch][os] is None:
112
+ continue
113
+ all_installers.append(installer_data)
108
114
  print(f"✅ Loaded {len(all_installers)} installer configurations\n{'=' * 80}")
109
115
  return all_installers
110
116
 
@@ -142,7 +148,7 @@ def get_installers_system_groups():
142
148
  return res_final
143
149
 
144
150
 
145
- def install_all(installers_data: list[InstallerData], safe: bool = False, jobs: int = 10, fresh: bool = False):
151
+ def install_bulk(installers_data: list[InstallerData], safe: bool = False, jobs: int = 10, fresh: bool = False):
146
152
  print(f"\n{'=' * 80}\n🚀 BULK INSTALLATION PROCESS 🚀\n{'=' * 80}")
147
153
  if fresh:
148
154
  print("🧹 Fresh install requested - clearing version cache...")
@@ -5,9 +5,12 @@ import time
5
5
  from pathlib import Path
6
6
  import sys
7
7
  import subprocess
8
+ import os
8
9
  from platform import system
9
10
  from typing import Any, Optional, Union, Callable, TypeAlias, Literal
10
11
 
12
+ from machineconfig.utils.terminal import Response
13
+
11
14
 
12
15
  OPLike: TypeAlias = Union[str, "PathExtended", Path, None]
13
16
  PLike: TypeAlias = Union[str, "PathExtended", Path]
@@ -15,6 +18,44 @@ FILE_MODE: TypeAlias = Literal["r", "w", "x", "a"]
15
18
  SHUTIL_FORMATS: TypeAlias = Literal["zip", "tar", "gztar", "bztar", "xztar"]
16
19
 
17
20
 
21
+ def _is_user_admin() -> bool:
22
+ if os.name == "nt":
23
+ try:
24
+ return __import__("ctypes").windll.shell32.IsUserAnAdmin()
25
+ except Exception: # noqa: BLE001
26
+ import traceback
27
+
28
+ traceback.print_exc()
29
+ print("Admin check failed, assuming not an admin.")
30
+ return False
31
+ return os.getuid() == 0
32
+
33
+
34
+ def _run_shell_command(
35
+ command: str,
36
+ shell_name: str,
37
+ *,
38
+ stdout: Optional[int] = subprocess.PIPE,
39
+ stderr: Optional[int] = subprocess.PIPE,
40
+ stdin: Optional[int] = None,
41
+ check: bool = False,
42
+ ) -> subprocess.CompletedProcess[str]:
43
+ if shell_name in {"powershell", "pwsh"} and sys.platform == "win32":
44
+ args: list[str] = [shell_name, "-Command", command]
45
+ return subprocess.run(args, check=check, text=True, stdout=stdout, stderr=stderr, stdin=stdin)
46
+ executable = "/bin/bash" if shell_name == "bash" and sys.platform != "win32" else None
47
+ return subprocess.run(
48
+ command,
49
+ check=check,
50
+ text=True,
51
+ stdout=stdout,
52
+ stderr=stderr,
53
+ stdin=stdin,
54
+ shell=True,
55
+ executable=executable,
56
+ )
57
+
58
+
18
59
  def pwd2key(password: str, salt: Optional[bytes] = None, iterations: int = 10) -> bytes: # Derive a secret key from a given password and salt"""
19
60
  import base64
20
61
 
@@ -392,9 +433,7 @@ class PathExtended(type(Path()), Path): # type: ignore # pylint: disable=E0241
392
433
  assert target_obj.exists(), f"Target path `{target}` (aka `{target_obj}`) doesn't exist. This will create a broken link."
393
434
  if overwrite and (self.is_symlink() or self.exists()):
394
435
  self.delete(sure=True, verbose=verbose)
395
- from machineconfig.utils.terminal import Terminal
396
-
397
- if system() == "Windows" and not Terminal.is_user_admin(): # you cannot create symlink without priviliages.
436
+ if system() == "Windows" and not _is_user_admin(): # you cannot create symlink without priviliages.
398
437
  import win32com.shell.shell # type: ignore # pylint: disable=E0401
399
438
 
400
439
  _proce_info = win32com.shell.shell.ShellExecuteEx(lpVerb="runas", lpFile=sys.executable, lpParameters=f" -c \"from pathlib import Path; Path(r'{self.expanduser()}').symlink_to(r'{str(target_obj)}')\"")
@@ -884,8 +923,9 @@ class PathExtended(type(Path()), Path): # type: ignore # pylint: disable=E0241
884
923
  if verbose:
885
924
  print("🔗 SHARING FILE")
886
925
  shell_to_use = "powershell" if sys.platform == "win32" else "bash"
887
- from machineconfig.utils.terminal import Terminal
888
- res = Terminal().run(f"""rclone link '{cloud}:{rp.as_posix()}'""", shell=shell_to_use).capture()
926
+ command = f"rclone link '{cloud}:{rp.as_posix()}'"
927
+ completed = _run_shell_command(command, shell_to_use)
928
+ res = Response.from_completed_process(completed).capture()
889
929
  tmp = res.op2path(strict_err=False, strict_returncode=False)
890
930
  if tmp is None:
891
931
  res.print()
@@ -955,11 +995,13 @@ class PathExtended(type(Path()), Path): # type: ignore # pylint: disable=E0241
955
995
 
956
996
  rclone_cmd += f" --progress --transfers={transfers} --verbose"
957
997
  rclone_cmd += " --delete-during" if delete else ""
958
- from machineconfig.utils.terminal import Terminal
959
998
  if verbose:
960
999
  print(rclone_cmd)
961
1000
  shell_to_use = "powershell" if sys.platform == "win32" else "bash"
962
- res = Terminal(stdout=None if verbose else subprocess.PIPE).run(rclone_cmd, shell=shell_to_use)
1001
+ stdout_target: Optional[int] = None if verbose else subprocess.PIPE
1002
+ stderr_target: Optional[int] = None if verbose else subprocess.PIPE
1003
+ completed = _run_shell_command(rclone_cmd, shell_to_use, stdout=stdout_target, stderr=stderr_target)
1004
+ res = Response.from_completed_process(completed)
963
1005
  success = res.is_successful(strict_err=False, strict_returcode=True)
964
1006
  if not success:
965
1007
  res.print(capture=False, desc="Cloud Storage Operation")
@@ -2,12 +2,31 @@ from typing import Optional, Any, Union, List
2
2
  import os
3
3
  from dataclasses import dataclass
4
4
  import rich.console
5
- from machineconfig.utils.terminal import Terminal, Response, MACHINE
5
+ from machineconfig.utils.terminal import Response, MACHINE
6
6
  from machineconfig.utils.path_extended import PathExtended, PLike, OPLike
7
7
  from machineconfig.utils.accessories import pprint
8
8
  # from machineconfig.utils.ve import get_ve_activate_line
9
9
 
10
10
 
11
+ def get_header(wdir: OPLike, toolbox: bool):
12
+ if toolbox:
13
+ toobox_code = """
14
+ try:
15
+ from crocodile.toolbox import *
16
+ except ImportError:
17
+ print("Crocodile not found, skipping import.")
18
+ pass
19
+ """
20
+ else:
21
+ toobox_code = "# No toolbox import."
22
+ return f"""
23
+ # >> Code prepended
24
+ {toobox_code}
25
+ {'''sys.path.insert(0, r'{wdir}') ''' if wdir is not None else "# No path insertion."}
26
+ # >> End of header, start of script passed
27
+ """
28
+
29
+
11
30
  @dataclass
12
31
  class Scout:
13
32
  source_full: PathExtended
@@ -217,7 +236,7 @@ class SSH: # inferior alternative: https://github.com/fabric/fabric
217
236
  assert '"' not in cmd, 'Avoid using `"` in your command. I dont know how to handle this when passing is as command to python in pwsh command.'
218
237
  if not return_obj:
219
238
  return self.run(
220
- cmd=f"""uv run --no-dev --project $HOME/code/machineconfig -c "{Terminal.get_header(wdir=None, toolbox=True)}{cmd}\n""" + '"',
239
+ cmd=f"""uv run --no-dev --project $HOME/code/machineconfig -c "{get_header(wdir=None, toolbox=True)}{cmd}\n""" + '"',
221
240
  desc=desc or f"run_py on {self.get_remote_repr()}",
222
241
  verbose=verbose,
223
242
  strict_err=strict_err,
@@ -349,13 +368,4 @@ class SSH: # inferior alternative: https://github.com/fabric/fabric
349
368
  target = target.unzip(inplace=True, content=True)
350
369
  self.run_py(f"P(r'{source.as_posix()}').delete(sure=True)", desc="Cleaning temp zip files @ remote.", strict_returncode=True, strict_err=True)
351
370
  print("\n")
352
- return target
353
-
354
- # def print_summary(self):
355
- # import polars as pl
356
- # df = pl.DataFrame(List(self.terminal_responses).apply(lambda rsp: dict(desc=rsp.desc, err=rsp.err, returncode=rsp.returncode)).list)
357
- # print("\nSummary of operations performed:")
358
- # print(df.to_pandas().to_markdown())
359
- # if ((df.select('returncode').to_series().to_list()[2:] == [None] * (len(df) - 2)) and (df.select('err').to_series().to_list()[2:] == [''] * (len(df) - 2))): print("\nAll operations completed successfully.\n")
360
- # else: print("\nSome operations failed. \n")
361
- # return df
371
+ return target
@@ -1,9 +1,6 @@
1
- from machineconfig.utils.path_extended import PathExtended, OPLike
1
+ from machineconfig.utils.path_extended import PathExtended
2
2
  import subprocess
3
3
  from typing import Any, BinaryIO, Optional, Union
4
- import platform
5
- import sys
6
- import os
7
4
  from typing import Literal, TypeAlias
8
5
  from dataclasses import dataclass
9
6
 
@@ -102,11 +99,7 @@ class Response:
102
99
  return self
103
100
 
104
101
 
105
- # DEPRECATED: Use subprocess.run directly instead of Terminal class.
106
- # The Terminal class has been replaced with inline subprocess calls to underlying primitives.
107
- # This file is kept for reference but should not be used.
108
-
109
-
102
+ '''
110
103
  class Terminal:
111
104
  def __init__(self, stdout: Optional[int] = subprocess.PIPE, stderr: Optional[int] = subprocess.PIPE, stdin: Optional[int] = subprocess.PIPE, elevated: bool = False):
112
105
  self.machine: str = platform.system()
@@ -116,13 +109,13 @@ class Terminal:
116
109
  self.stdin = stdin
117
110
 
118
111
  # def set_std_system(self): self.stdout = sys.stdout; self.stderr = sys.stderr; self.stdin = sys.stdin
119
- def set_std_pipe(self):
120
- self.stdout = subprocess.PIPE
121
- self.stderr = subprocess.PIPE
122
- self.stdin = subprocess.PIPE
112
+ # def set_std_pipe(self):
113
+ # self.stdout = subprocess.PIPE
114
+ # self.stderr = subprocess.PIPE
115
+ # self.stdin = subprocess.PIPE
123
116
 
124
- def set_std_null(self):
125
- self.stdout, self.stderr, self.stdin = subprocess.DEVNULL, subprocess.DEVNULL, subprocess.DEVNULL # Equivalent to `echo 'foo' &> /dev/null`
117
+ # def set_std_null(self):
118
+ # self.stdout, self.stderr, self.stdin = subprocess.DEVNULL, subprocess.DEVNULL, subprocess.DEVNULL # Equivalent to `echo 'foo' &> /dev/null`
126
119
 
127
120
  def run(self, *cmds: str, shell: Optional[SHELLS] = "default", check: bool = False, ip: Optional[str] = None) -> Response: # Runs SYSTEM commands like subprocess.run
128
121
  """Blocking operation. Thus, if you start a shell via this method, it will run in the main and won't stop until you exit manually IF stdin is set to sys.stdin, otherwise it will run and close quickly. Other combinations of stdin, stdout can lead to funny behaviour like no output but accept input or opposite.
@@ -138,64 +131,7 @@ class Terminal:
138
131
  resp: subprocess.CompletedProcess[str] = subprocess.run(my_list, stderr=self.stderr, stdin=self.stdin, stdout=self.stdout, text=True, shell=True, check=check, input=ip)
139
132
  else:
140
133
  resp = __import__("ctypes").windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
141
- return Response.from_completed_process(resp)
142
-
143
- def run_script(self, script: str, shell: SHELLS = "default", verbose: bool = False):
144
- if self.machine == "Linux":
145
- script = "#!/bin/bash" + "\n" + script # `source` is only available in bash.
146
- script_file = PathExtended.tmpfile(name="tmp_shell_script", suffix=".ps1" if self.machine == "Windows" else ".sh", folder="tmp_scripts")
147
- script_file.write_text(script, newline={"Windows": None, "Linux": "\n"}[self.machine])
148
- if shell == "default":
149
- if self.machine == "Windows":
150
- start_cmd = "powershell" # default shell on Windows is cmd which is not very useful. (./source is not available)
151
- full_command: Union[list[str], str] = [start_cmd, str(script_file)] # shell=True will cause this to be a string anyway (with space separation)
152
- else:
153
- start_cmd = "bash"
154
- full_command = f"{start_cmd} {script_file}" # full_command = [start_cmd, str(script_file)]
155
- else:
156
- full_command = f"{shell} {script_file}" # full_command = [shell, str(tmp_file)]
157
- if verbose:
158
- desc = "Script to be executed:"
159
- if platform.system() == "Windows":
160
- lexer = "powershell"
161
- elif platform.system() == "Linux":
162
- lexer = "sh"
163
- elif platform.system() == "Darwin":
164
- lexer = "sh" # macOS uses similar shell to Linux
165
- else:
166
- raise NotImplementedError(f"Platform {platform.system()} not supported.")
167
- from rich.console import Console
168
- from rich.panel import Panel
169
- from rich.syntax import Syntax
170
- import rich.progress as pb
171
-
172
- console = Console()
173
- console.print(Panel(Syntax(code=script, lexer=lexer), title=f"📄 {desc}"), style="bold red")
174
- with pb.Progress(transient=True) as progress:
175
- _task = progress.add_task(f"Running Script @ {script_file}", total=None)
176
- resp = subprocess.run(full_command, stderr=self.stderr, stdin=self.stdin, stdout=self.stdout, text=True, shell=True, check=False)
177
- else:
178
- resp = subprocess.run(full_command, stderr=self.stderr, stdin=self.stdin, stdout=self.stdout, text=True, shell=True, check=False)
179
- return Response.from_completed_process(resp)
180
-
181
- def run_py(self, script: str, wdir: OPLike = None, interactive: bool = True, ipython: bool = True, shell: Optional[str] = None, terminal: str = "", new_window: bool = True, header: bool = True): # async run, since sync run is meaningless.
182
- script = (Terminal.get_header(wdir=wdir, toolbox=True) if header else "") + script + ("\nDisplayData.set_pandas_auto_width()\n" if terminal in {"wt", "powershell", "pwsh"} else "")
183
- py_script = PathExtended.tmpfile(name="tmp_python_script", suffix=".py", folder="tmp_scripts/terminal")
184
- py_script.write_text(f"""print(r'''{script}''')""" + "\n" + script)
185
- print(f"""🚀 [ASYNC PYTHON SCRIPT] Script URI:
186
- {py_script.absolute().as_uri()}""")
187
- print("Script to be executed asyncronously: ", py_script.absolute().as_uri())
188
- shell_script = f"""
189
- {f"cd {wdir}" if wdir is not None else ""}
190
- {"ipython" if ipython else "python"} {"-i" if interactive else ""} {py_script}
191
- """
192
- shell_path = PathExtended.tmpfile(name="tmp_shell_script", suffix=".sh" if self.machine == "Linux" else ".ps1", folder="tmp_scripts/shell")
193
- shell_path.write_text(shell_script)
194
- if shell is None and self.machine == "Windows":
195
- shell = "pwsh"
196
- window = "start" if new_window and self.machine == "Windows" else ""
197
- os.system(f"{window} {terminal} {shell} {shell_script}")
198
-
134
+ return Response.from_completed_process(resp)
199
135
  @staticmethod
200
136
  def is_user_admin() -> bool: # adopted from: https://stackoverflow.com/questions/19672352/how-to-run-script-with-elevated-privilege-on-windows"""
201
137
  if os.name == "nt":
@@ -209,6 +145,63 @@ class Terminal:
209
145
  return False
210
146
  else:
211
147
  return os.getuid() == 0 # Check for root on Posix
148
+ '''
149
+
150
+ # def run_script(self, script: str, shell: SHELLS = "default", verbose: bool = False):
151
+ # if self.machine == "Linux":
152
+ # script = "#!/bin/bash" + "\n" + script # `source` is only available in bash.
153
+ # script_file = PathExtended.tmpfile(name="tmp_shell_script", suffix=".ps1" if self.machine == "Windows" else ".sh", folder="tmp_scripts")
154
+ # script_file.write_text(script, newline={"Windows": None, "Linux": "\n"}[self.machine])
155
+ # if shell == "default":
156
+ # if self.machine == "Windows":
157
+ # start_cmd = "powershell" # default shell on Windows is cmd which is not very useful. (./source is not available)
158
+ # full_command: Union[list[str], str] = [start_cmd, str(script_file)] # shell=True will cause this to be a string anyway (with space separation)
159
+ # else:
160
+ # start_cmd = "bash"
161
+ # full_command = f"{start_cmd} {script_file}" # full_command = [start_cmd, str(script_file)]
162
+ # else:
163
+ # full_command = f"{shell} {script_file}" # full_command = [shell, str(tmp_file)]
164
+ # if verbose:
165
+ # desc = "Script to be executed:"
166
+ # if platform.system() == "Windows":
167
+ # lexer = "powershell"
168
+ # elif platform.system() == "Linux":
169
+ # lexer = "sh"
170
+ # elif platform.system() == "Darwin":
171
+ # lexer = "sh" # macOS uses similar shell to Linux
172
+ # else:
173
+ # raise NotImplementedError(f"Platform {platform.system()} not supported.")
174
+ # from rich.console import Console
175
+ # from rich.panel import Panel
176
+ # from rich.syntax import Syntax
177
+ # import rich.progress as pb
178
+
179
+ # console = Console()
180
+ # console.print(Panel(Syntax(code=script, lexer=lexer), title=f"📄 {desc}"), style="bold red")
181
+ # with pb.Progress(transient=True) as progress:
182
+ # _task = progress.add_task(f"Running Script @ {script_file}", total=None)
183
+ # resp = subprocess.run(full_command, stderr=self.stderr, stdin=self.stdin, stdout=self.stdout, text=True, shell=True, check=False)
184
+ # else:
185
+ # resp = subprocess.run(full_command, stderr=self.stderr, stdin=self.stdin, stdout=self.stdout, text=True, shell=True, check=False)
186
+ # return Response.from_completed_process(resp)
187
+
188
+ # def run_py(self, script: str, wdir: OPLike = None, interactive: bool = True, ipython: bool = True, shell: Optional[str] = None, terminal: str = "", new_window: bool = True, header: bool = True): # async run, since sync run is meaningless.
189
+ # script = (Terminal.get_header(wdir=wdir, toolbox=True) if header else "") + script + ("\nDisplayData.set_pandas_auto_width()\n" if terminal in {"wt", "powershell", "pwsh"} else "")
190
+ # py_script = PathExtended.tmpfile(name="tmp_python_script", suffix=".py", folder="tmp_scripts/terminal")
191
+ # py_script.write_text(f"""print(r'''{script}''')""" + "\n" + script)
192
+ # print(f"""🚀 [ASYNC PYTHON SCRIPT] Script URI:
193
+ # {py_script.absolute().as_uri()}""")
194
+ # print("Script to be executed asyncronously: ", py_script.absolute().as_uri())
195
+ # shell_script = f"""
196
+ # {f"cd {wdir}" if wdir is not None else ""}
197
+ # {"ipython" if ipython else "python"} {"-i" if interactive else ""} {py_script}
198
+ # """
199
+ # shell_path = PathExtended.tmpfile(name="tmp_shell_script", suffix=".sh" if self.machine == "Linux" else ".ps1", folder="tmp_scripts/shell")
200
+ # shell_path.write_text(shell_script)
201
+ # if shell is None and self.machine == "Windows":
202
+ # shell = "pwsh"
203
+ # window = "start" if new_window and self.machine == "Windows" else ""
204
+ # os.system(f"{window} {terminal} {shell} {shell_script}")
212
205
 
213
206
  # @staticmethod
214
207
  # def run_as_admin(file: PLike, params: Any, wait: bool = False):
@@ -216,22 +209,3 @@ class Terminal:
216
209
  # # TODO update PATH for this to take effect immediately.
217
210
  # if wait: time.sleep(1)
218
211
  # return proce_info
219
-
220
- @staticmethod
221
- def get_header(wdir: OPLike, toolbox: bool):
222
- if toolbox:
223
- toobox_code = """
224
- try:
225
- from crocodile.toolbox import *
226
- except ImportError:
227
- print("Crocodile not found, skipping import.")
228
- pass
229
- """
230
- else:
231
- toobox_code = "# No toolbox import."
232
- return f"""
233
- # >> Code prepended
234
- {toobox_code}
235
- {'''sys.path.insert(0, r'{wdir}') ''' if wdir is not None else "# No path insertion."}
236
- # >> End of header, start of script passed
237
- """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machineconfig
3
- Version: 4.94
3
+ Version: 4.97
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -11,6 +11,7 @@ machineconfig/cluster/remote/remote_machine.py,sha256=xRuoHKNsIT0-FTFSvF1q7scnGK
11
11
  machineconfig/cluster/remote/script_execution.py,sha256=4U70FDtjOh6A6C2Ei-Xh90S888q64VhRPbExoEbdepk,9980
12
12
  machineconfig/cluster/remote/script_notify_upon_completion.py,sha256=GRxnnbnOl1-hTovTN-zI_M9wdV7x293yA77_mou9I1o,2032
13
13
  machineconfig/cluster/sessions_managers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ machineconfig/cluster/sessions_managers/ffile.py,sha256=QzkBU5Ysnah9SxlzODsGprx4Q_VskWntChoejaOCEdw,52
14
15
  machineconfig/cluster/sessions_managers/wt_local.py,sha256=cnLAcyVUr2d2ZPh0dEEr-LHrLiwTMVu7YWXM21IS7_4,17507
15
16
  machineconfig/cluster/sessions_managers/wt_local_manager.py,sha256=BaJNOOY5rAfssreJm8Nmr4we_PCxMkmQqzUMdimNwaM,24565
16
17
  machineconfig/cluster/sessions_managers/wt_remote.py,sha256=XmZV9rLubwxND5UYAS15mAcpzDdXvm4KyubVGYkVBmo,8743
@@ -42,22 +43,22 @@ machineconfig/cluster/templates/run_remote.py,sha256=vCc56t8BUAUJp7tyb0PFfwy5hlm
42
43
  machineconfig/cluster/templates/utils.py,sha256=5lHgjHvodoSPBD31AwluHBBNgwimwThUsDNWGN8iH9I,1647
43
44
  machineconfig/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
45
  machineconfig/jobs/installer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- machineconfig/jobs/installer/installer_data.json,sha256=sOfqIPU4uarxbuD4HBRs3tXfIKx5tUtNQQdALygwk2o,71545
46
- machineconfig/jobs/installer/package_groups.py,sha256=SayXJYkgYZiUyAT2YLWrDBXB1YYJbuHe0D_eFQQIQn8,2505
47
- machineconfig/jobs/installer/custom/gh.py,sha256=hic8Z1ZdncbljY6hgHzl2rmOLOcb6imIUstMALSS3-Y,3082
46
+ machineconfig/jobs/installer/installer_data.json,sha256=tBf8X6TEfdhRrvTbp5qyKUs0nEYxE62C8XgDkPCJnfc,72128
47
+ machineconfig/jobs/installer/package_groups.py,sha256=hG9-RLfEXlGg5u7-8x9PrNLr9mNtuoVLVrfDN9hqzQ0,6735
48
+ machineconfig/jobs/installer/custom/gh.py,sha256=iZZI4ND87eiWlj-Y5uJ7LuN8ln2QkqjJyeOMFZ0o-YA,2963
48
49
  machineconfig/jobs/installer/custom/hx.py,sha256=FrUD0mlhWG2GxrnarccVIaW_sHJ5mxeF6yyzbBWyx6w,5840
49
50
  machineconfig/jobs/installer/custom_dev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- machineconfig/jobs/installer/custom_dev/alacritty.py,sha256=6AXpnERkjq3CxJUIWwDRd7YNr3ASlqjAc2HVsxpSjsQ,2029
51
- machineconfig/jobs/installer/custom_dev/brave.py,sha256=XvOTOKTVWaXJ2xV1DZXnUnRskZopSaVuqZUhWa5EByY,2204
52
- machineconfig/jobs/installer/custom_dev/bypass_paywall.py,sha256=dnVZ6uc9qVAW90nIwV2vBpGEl6YpSOpmUUQVlQPfrhM,1496
53
- machineconfig/jobs/installer/custom_dev/code.py,sha256=g9ChNFImxoenVwerWT0Dnkp4GngsOLrYOJfIrdRUSBw,1936
51
+ machineconfig/jobs/installer/custom_dev/alacritty.py,sha256=dQJ7EZ-23N3UOeWwccC-HTbrpfKDRxrzdmfqeIPKwQE,2738
52
+ machineconfig/jobs/installer/custom_dev/brave.py,sha256=6-jsdvvVEQDkqHbhnEubitF6fy7AXBB9Q-GLgIEOLoM,2987
53
+ machineconfig/jobs/installer/custom_dev/bypass_paywall.py,sha256=2DHZtMKjeH6BBVBaZKsup3PwzPfl4Cxmn9xlR7fzAkg,1904
54
+ machineconfig/jobs/installer/custom_dev/code.py,sha256=0Hb4ToMLQX4WWyG4xfUEJMTwN01ad5VZGogu3Llqtbc,2480
54
55
  machineconfig/jobs/installer/custom_dev/cursor.py,sha256=3xoFAYFdZqurSHXeEG-vbG0KU1TNQpBMaMgL1eW6X4k,4326
55
- machineconfig/jobs/installer/custom_dev/espanso.py,sha256=VthTX-L6gJ38OBnGWHe-wD8YGfIGXIgYbwYXR4UyFXU,2832
56
- machineconfig/jobs/installer/custom_dev/goes.py,sha256=jBnKoOVDbA2zMvKRmZ033lionoS725vNiGOm2EjM0i4,1784
57
- machineconfig/jobs/installer/custom_dev/lvim.py,sha256=AjAtn-sEJe7r6oRLxsj53seT3uSBXxf4affEvBjHYfY,2220
58
- machineconfig/jobs/installer/custom_dev/nerdfont.py,sha256=oOYC5BpukZIA_pGSDRMZmuksWdYHiVQJmwsoFc3StQA,2900
59
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py,sha256=sdgbHCbu_6d8VotLRvpL_GrwpEoxY4dupOyRUjtpaYA,5554
60
- machineconfig/jobs/installer/custom_dev/redis.py,sha256=KjqJkCKZi8fbdW6IhIZjmA4pdo8oZF84Fflij_7dVbg,2291
56
+ machineconfig/jobs/installer/custom_dev/espanso.py,sha256=H1rZb4xnjs72lL0_mB0M4d7NrDyVv1sAG3NOkOrCB64,4137
57
+ machineconfig/jobs/installer/custom_dev/goes.py,sha256=SIRkpzkCeWMof0BnPuoEJy3KHNkVZs8J5DnoZJXb9TY,2130
58
+ machineconfig/jobs/installer/custom_dev/lvim.py,sha256=2-wbh_IClTFcFkSYk9EsRiv88-isSNIVX6dNZ1L5m8Q,2985
59
+ machineconfig/jobs/installer/custom_dev/nerdfont.py,sha256=dsPmiqP9AJCack7mNeJ8Qzo4dSOwC0bsupH0Hn3gqSg,4149
60
+ machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py,sha256=6IRg95ToIfw1oGNxZNZPwsjrwgJgbjQHE6My8rTe36o,6073
61
+ machineconfig/jobs/installer/custom_dev/redis.py,sha256=bReDLsgy37eJyTU4TXE7FQpKFi-_usQC7bwhfXvZuBU,3259
61
62
  machineconfig/jobs/installer/custom_dev/wezterm.py,sha256=BuTVRqV5WQUS2C7FpWMU4pQWgkPt4p3VVGcE6fTVG-0,2311
62
63
  machineconfig/jobs/installer/custom_dev/winget.py,sha256=gLdwM20jKMf2bMV3BAcOg4MkuzwF09CU5OhXvLkPoHo,5738
63
64
  machineconfig/jobs/installer/linux_scripts/brave.sh,sha256=m01xquA4YZW3YrhJiTCvTZuLliELmRI1avYFyuE5-Ws,2119
@@ -80,11 +81,11 @@ machineconfig/jobs/linux/msc/network.sh,sha256=dmISsh0hioDheinqee3qHfo2k7ClFx6G_
80
81
  machineconfig/jobs/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
82
  machineconfig/jobs/python/check_installations.py,sha256=ksuENfJg0NAo1mWLRnsj1MpZw7Ee7eKw1nWyUQeO7fg,11096
82
83
  machineconfig/jobs/python/create_bootable_media.py,sha256=KKtcPk0rFLQc4eNVP6nbeYX-P7Gpqi0HvfIcUM6rVVs,827
83
- machineconfig/jobs/python/python_cargo_build_share.py,sha256=RDe1QiTH3vLQ1wjN0kE5NxMIqwB-_WHz6O3svyuH_VE,2133
84
- machineconfig/jobs/python/python_ve_symlink.py,sha256=SgLPZGtnhZ8L5ms2zEohQkJAzPeBkI3mB4DBHjAmzN0,850
84
+ machineconfig/jobs/python/python_cargo_build_share.py,sha256=vy1v32-7Tui4NK4wG5XC5hxavQ4BeMpKprUtqzBjut0,2081
85
+ machineconfig/jobs/python/python_ve_symlink.py,sha256=HYVkNLIOm4Zk6zX8cNOKNLSKA7un9hXiZfBjq8vcwRs,1156
85
86
  machineconfig/jobs/python/tasks.py,sha256=hrBDQOnBmcXtauTkicVgC8J2AOGcfdFfyx0K8eI6Coc,150
86
- machineconfig/jobs/python/vscode/api.py,sha256=QNZz6zqquAk4Bd-Zz5Id0qvOM6uFB5LyyKlGcHdcIJA,1631
87
- machineconfig/jobs/python/vscode/sync_code.py,sha256=b7vhebl3TH0wDBJ_eRg3DhY7veMqdqBA-rCkGZxSf5o,1898
87
+ machineconfig/jobs/python/vscode/api.py,sha256=Et0G-VUj13D1rshYMdDrw_CUYSO7Q6XRrEQO0WjVIKU,1683
88
+ machineconfig/jobs/python/vscode/sync_code.py,sha256=f9hxMg_nkIsC0xvfQMboJbc-Jhap9YQrV7k7a5YSI1c,2333
88
89
  machineconfig/jobs/windows/start_terminal.ps1,sha256=wy0fGwgb4U7xaHsONDrR4V5u9JEkG5vtt4NZUBx0ro8,473
89
90
  machineconfig/jobs/windows/startup_file.cmd,sha256=qOqDwL0MmRB-fHauJKjOO0mhczyA3-cdRUyY1p7NCok,95
90
91
  machineconfig/jobs/windows/archive/archive_pygraphviz.ps1,sha256=XBMaFurdY8smiLdeP3iAm2p1x4Ui_F3Ty9lHikKSfUk,708
@@ -144,14 +145,14 @@ machineconfig/scripts/python/choose_wezterm_theme.py,sha256=Hlu_EOQhLM6wYdAdY25j
144
145
  machineconfig/scripts/python/cloud_copy.py,sha256=_pxA8o3ar5vH9DkrAdwafHcZMiqNCbY_IfNzKCOMJ5k,8395
145
146
  machineconfig/scripts/python/cloud_manager.py,sha256=YN0DYLzPKtMBaks-EAVwFmkCu3XeHWMr1D21uqX5dDk,3429
146
147
  machineconfig/scripts/python/cloud_mount.py,sha256=RFMzRUep2D5HtVXANIi-pab3EkI-W8P1IJ32k1W7xQA,6756
147
- machineconfig/scripts/python/cloud_repo_sync.py,sha256=GBhdUu9BJwhLYmhxxtvqJGLy7xKdQcnH9kkL4jcbzEE,9502
148
+ machineconfig/scripts/python/cloud_repo_sync.py,sha256=PTZ4gyhMFwW77DxE86GyNQK0JDFLcMUSF69AM80SvxY,9781
148
149
  machineconfig/scripts/python/cloud_sync.py,sha256=RWGpAfJ9fnN18yNBSgN44dzA38Hmd4879JL5r2pcyrM,3514
149
150
  machineconfig/scripts/python/croshell.py,sha256=wYi8xWkzYzpfg8YNppmu22mvx0Gxtbs979ERO3kZS2w,8587
150
151
  machineconfig/scripts/python/devops.py,sha256=fTEut6gTDfmNqzS8-gRyRAsmWJYPGGIt8X35Irj7Cl8,3434
151
152
  machineconfig/scripts/python/devops_add_identity.py,sha256=JfN3ZrYMCgmt4ks_VCfnV9BIIHAsOYO3E0W0wZ15FR8,3791
152
153
  machineconfig/scripts/python/devops_add_ssh_key.py,sha256=KaoX83KltBsmutfKhSfZjd7nP_R1hJ2OLAWRhbswO7o,6889
153
154
  machineconfig/scripts/python/devops_backup_retrieve.py,sha256=jZe5Vki7E2GCMG8hvqUZeOONFC4cNzISoGzq_dMG4GA,5601
154
- machineconfig/scripts/python/devops_devapps_install.py,sha256=T4h1ydHljQJrNBrye2q-FHUX9iAZnkCa889GgBjHZCE,9103
155
+ machineconfig/scripts/python/devops_devapps_install.py,sha256=2MZsR5aOY_z7dhgrdeffxVhq1i3kxeuthtHLpKmCA18,9333
155
156
  machineconfig/scripts/python/devops_update_repos.py,sha256=c5qBc9cuTGDEqDHufkjDT4d_vvJsswv3tlqk9MAulYk,8063
156
157
  machineconfig/scripts/python/dotfile.py,sha256=SRcX-9Ak1jRvF-killBTTm2IWcsNxfiLucH6ZsytAFA,2202
157
158
  machineconfig/scripts/python/fire_agents_help_launch.py,sha256=1ymWiszfjCyPv3ofinWzfOmbzLEt3d7ntac_afLh-V4,5017
@@ -159,16 +160,16 @@ machineconfig/scripts/python/fire_agents_help_search.py,sha256=qIfSS_su2YJ1Gb0_l
159
160
  machineconfig/scripts/python/fire_agents_helper_types.py,sha256=zKu8Vr6iucaGSkCm_Tkt_WrYU7-6Nript3coYyzTXzY,295
160
161
  machineconfig/scripts/python/fire_agents_load_balancer.py,sha256=mpqx3uaQdBXYieuvhdK-qsvLepf9oIMo3pwPj9mSEDI,1079
161
162
  machineconfig/scripts/python/fire_jobs.py,sha256=CqtFt4VGtdEP0tbmRRZ-qU5G232jQj0umlS8C_qtQRM,15911
162
- machineconfig/scripts/python/fire_jobs_args_helper.py,sha256=VZIQ6ShZBt2WLcqa1fpl1419AGa0k7Xg-EzzrKpDIqw,4029
163
+ machineconfig/scripts/python/fire_jobs_args_helper.py,sha256=-gl5I-26Op12nToIpAA-YEpvn8MMkNlI5XjhUbj50I0,4273
163
164
  machineconfig/scripts/python/fire_jobs_route_helper.py,sha256=EFWsg6F9TeSAtYQec57WtPopUbm2euGZTUZv6J4RhNE,3026
164
165
  machineconfig/scripts/python/fire_jobs_streamlit_helper.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
166
  machineconfig/scripts/python/ftpx.py,sha256=l_gdJS0QB2wVZErubtZvm4HJD9HZAJxSP68sbY73xwo,10278
166
167
  machineconfig/scripts/python/get_zellij_cmd.py,sha256=e35-18hoXM9N3PFbvbizfkNY_-63iMicieWE3TbGcCQ,576
167
168
  machineconfig/scripts/python/gh_models.py,sha256=3BLfW25mBRiPO5VKtVm-nMlKLv-PaZDw7mObajq6F6M,5538
168
- machineconfig/scripts/python/interactive.py,sha256=AM2jPIAHbXppVj-lA9iYcOTGWmOMWZtIaJIz9K5FxK8,11983
169
- machineconfig/scripts/python/mount_nfs.py,sha256=c8pWXimDWdgCkSskcnPgT-8ESPosil6Cvy2hGSaIBJE,3359
169
+ machineconfig/scripts/python/interactive.py,sha256=W0NIGTZb0RFyoJIcp02pToRUv_WP5F7-67AOX5N46G4,11797
170
+ machineconfig/scripts/python/mount_nfs.py,sha256=5HmtsAelFSVzl8o_F9mBoKiuVNIyRHjvdqKzFJR1P64,3376
170
171
  machineconfig/scripts/python/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
171
- machineconfig/scripts/python/mount_ssh.py,sha256=rGY2pgtlnWMi0Rrge1aCdjtfbULrj2cyaStDoX-y2w4,2236
172
+ machineconfig/scripts/python/mount_ssh.py,sha256=7dYCBtkJE43rwuvhxiYzyTlJ230RFQbZOA29veYQbuU,2284
172
173
  machineconfig/scripts/python/onetimeshare.py,sha256=bmGsNnskym5OWfIhpOfZG5jq3m89FS0a6dF5Sb8LaZM,2539
173
174
  machineconfig/scripts/python/pomodoro.py,sha256=SPkfeoZGv8rylGiOyzQ7UK3aXZ3G2FIOuGkSuBUggOI,2019
174
175
  machineconfig/scripts/python/repos.py,sha256=Mz-d0ubynOZaKwC6YXKiZq9ojMnKFi4J6n0UbiJYZyY,4449
@@ -177,10 +178,10 @@ machineconfig/scripts/python/repos_helper_clone.py,sha256=xW5YZEoNt3k7h9NIULhUhO
177
178
  machineconfig/scripts/python/repos_helper_record.py,sha256=YEEQORfEiLddOIIgePo5eEkyQUFruFg3kc8npMvRL-o,10927
178
179
  machineconfig/scripts/python/repos_helper_update.py,sha256=AYyKIB7eQ48yoYmFjydIhRI1lV39TBv_S4_LCa-oKuQ,11042
179
180
  machineconfig/scripts/python/scheduler.py,sha256=rKhssuxkD697EY6qaV6CSdNhxpAQLDWO4fE8GMCQ9FA,3061
180
- machineconfig/scripts/python/sessions.py,sha256=-pKyA3oOC8ynHNE8Rcos5w0OEDT6t1O81EZWJo-rOU0,8377
181
+ machineconfig/scripts/python/sessions.py,sha256=moLdAPHMn90zd6blugplQ2V__xurOcMBH2WRYqRf-hA,8415
181
182
  machineconfig/scripts/python/share_terminal.py,sha256=biuG35YiknTMVr3Mzs4bBZwEq53JcuBRlzMTp6eY90M,5009
182
183
  machineconfig/scripts/python/snapshot.py,sha256=aDvKeoniZaeTSNv9zWBUajaj2yagAxVdfuvO1_tgq5Y,1026
183
- machineconfig/scripts/python/start_slidev.py,sha256=U5ujAL7R5Gd5CzFReTsnF2SThjY91aFBg0Qz_MMl6U4,4573
184
+ machineconfig/scripts/python/start_slidev.py,sha256=0rVK7uQL70FAYvVk1SQ-tKRlT1fEj-5wIKCLAnM4-9M,4913
184
185
  machineconfig/scripts/python/start_terminals.py,sha256=DRWbMZumhPmL0DvvsCsbRNFL5AVQn1SgaziafTio3YQ,6149
185
186
  machineconfig/scripts/python/t4.py,sha256=cZ45iWzS254V5pmVvq8wCw7jAuDhzr8G2Arzay76saU,316
186
187
  machineconfig/scripts/python/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
@@ -217,9 +218,9 @@ machineconfig/scripts/python/ai/solutions/opencode/opencode.py,sha256=AbpHGcgLb-
217
218
  machineconfig/scripts/python/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
218
219
  machineconfig/scripts/python/helpers/cloud_helpers.py,sha256=GA-bxXouUmknk9fyQAsPT-Xl3RG9-yBed71a2tu9Pig,4914
219
220
  machineconfig/scripts/python/helpers/helpers2.py,sha256=ZdqeF1MLlaBRwoqsQAqnHi4b8rW0byFCBnbyCrPKkoA,7336
220
- machineconfig/scripts/python/helpers/helpers4.py,sha256=Iot8Pb9LeaxpSw1uZzx0m3Aswa30QV-tGLrtJtwiGmQ,7635
221
+ machineconfig/scripts/python/helpers/helpers4.py,sha256=rwAy7HK1CbKQZORzQMQULSKNHj0i4jo7KbUXj3qLG9I,4765
221
222
  machineconfig/scripts/python/helpers/helpers5.py,sha256=dPBvA9Tcyx9TMgM6On49A1CueGMhBdRzikDnlJGf3J0,1123
222
- machineconfig/scripts/python/helpers/repo_sync_helpers.py,sha256=39Q3XV8Zx0Y6_iWUtbwDIQI8riqLPSZ008zjqx-Gd-g,5328
223
+ machineconfig/scripts/python/helpers/repo_sync_helpers.py,sha256=umN6ktxjddkraC_h8w50D72olxHcyT4kn-CUq6_C_xI,5448
223
224
  machineconfig/scripts/windows/agents.ps1,sha256=DqdrC_Xc2rwQ6kGzT0xh5CJz4B_0p5ZwB7s8XE6rPCM,77
224
225
  machineconfig/scripts/windows/choose_wezterm_theme.ps1,sha256=LiXJ0a4LKjb6E-oH_bAg6DjegV4SqDUdiMp_svGCFlI,95
225
226
  machineconfig/scripts/windows/cloud_copy.ps1,sha256=llTFhN2uInZTcoZYZuuhJcf5Ifo5MF226I5MpOzvc3A,82
@@ -376,23 +377,23 @@ machineconfig/setup_windows/web_shortcuts/croshell.ps1,sha256=cTQnegGLGYhuFY3Yuu
376
377
  machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=-76toOluRnxtgo6NuAHgHWMnZQT3zroeCBBLkMTd13g,522
377
378
  machineconfig/setup_windows/web_shortcuts/ssh.ps1,sha256=Tj9axEugJE7I3AQ0w1eUGLPb8ufME5jvU5S7VUjlLJE,424
378
379
  machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
379
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=rZZJamy3YxAeJhdMIFR6IWtjgn1u1HUdbk1J24NtryE,6116
380
+ machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=D_U_q31sqyzR7QRi_FUFMYuOgVbp15VBlKc51VbFjp0,6807
380
381
  machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
381
382
  machineconfig/utils/accessories.py,sha256=W_9dLzjwNTW5JQk_pe3B2ijQ1nA2-8Kdg2r7VBtzgQs,4340
382
- machineconfig/utils/code.py,sha256=zsJ8jG6ESC6cAiHJHdEDso_V0wFuXtGpYtb0zRBxv4c,5197
383
- machineconfig/utils/installer.py,sha256=Aoq93RMOQFmv1iYJS90sxrBHeG_K6N5DtIthYffcIOU,9743
383
+ machineconfig/utils/code.py,sha256=5W6kP9SMWdApbFDq0fklI_31RWt7E9ByioxU7XX00HE,5662
384
+ machineconfig/utils/installer.py,sha256=p2Mr5GQ8ZsUriV9qatXDwllBqGvYNfI-TQEKXwA8gcA,9961
384
385
  machineconfig/utils/io.py,sha256=ZXB3aataS1IZ_0WMcCRSmoN1nbkvEO-bWYcs-TpngqU,2872
385
386
  machineconfig/utils/links.py,sha256=riNUrG8aGElRszdOPOic4M2AyOcpdcth_-y8JEiZpJ4,10253
386
387
  machineconfig/utils/notifications.py,sha256=vvdsY5IX6XEiILTnt5lNyHxhCi0ljdGX2T_67VRfrG4,9009
387
388
  machineconfig/utils/options.py,sha256=8pG-apcc28xxJ5BQiACsGNTKwWtkQyH3hCtzBEhokK8,8366
388
- machineconfig/utils/path_extended.py,sha256=nTETtTxzNaxdrapIH3WzkR__b-1k6Lx7SpRAXqmIJN4,51793
389
+ machineconfig/utils/path_extended.py,sha256=0Ev2BgkiruTDAYFHxsGzPvQ9EU3OGCGzx5ozZpO6UU8,53129
389
390
  machineconfig/utils/path_helper.py,sha256=jqOf3TAlw5cqSp4HBAlOqjAR_bzC8_fvjA-_-CooI6Y,8030
390
391
  machineconfig/utils/procs.py,sha256=Bm-yopmj19yiBO9tywJHEcs9rZmeRyJqbgTSe216LTU,11349
391
392
  machineconfig/utils/scheduler.py,sha256=bUHDviS_HE9_6LaA1k9Nnfz5rr2FJIfrk5qO2FJ-oUs,15119
392
393
  machineconfig/utils/scheduling.py,sha256=RF1iXJpqf4Dg18jdZWtBixz97KAHC6VKYqTFSpdLWuc,11188
393
394
  machineconfig/utils/source_of_truth.py,sha256=GnjcVkKm11RyZFHGnPbne5YDEBYoZ5yryBNkpfGC7O4,854
394
- machineconfig/utils/ssh.py,sha256=zkNUGeijrdoZYkp56DDC8m8LFqPmxQCDNTv5Ns5B7rk,21096
395
- machineconfig/utils/terminal.py,sha256=IXYhZ5a0qA6X9CdMT9S7IEKQtJXrDzmiDUGd4C85-oE,12436
395
+ machineconfig/utils/ssh.py,sha256=KTUp42nT4Vuh350_EvArQoR2N5iVXrc2BFld93fRUX4,20919
396
+ machineconfig/utils/terminal.py,sha256=Jqojb1xta_SLftUIXmWK7Mn87e1NJXavC5Hbf3fRT-I,11795
396
397
  machineconfig/utils/upgrade_packages.py,sha256=H96zVJEWXJW07nh5vhjuSCrPtXGqoUb7xeJsFYYdmCI,3330
397
398
  machineconfig/utils/ve.py,sha256=L-6PBXnQGXThiwWgheJMQoisAZOZA6SVCbGw2J-GFnI,2414
398
399
  machineconfig/utils/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -407,8 +408,8 @@ machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=pTxvLzIpD5RF
407
408
  machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoSpdmTIdgS9LS-RvE-QZ-D260tD3o,1214
408
409
  machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
409
410
  machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
410
- machineconfig-4.94.dist-info/METADATA,sha256=1OGor4zIf7weP_BjiCtbh8ObObGacnY9kMIMYUeakIA,7061
411
- machineconfig-4.94.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
412
- machineconfig-4.94.dist-info/entry_points.txt,sha256=LcwklRJPY_uKBvStgtOJn5G_pmFCEdpgRNzUUc6twAQ,1134
413
- machineconfig-4.94.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
414
- machineconfig-4.94.dist-info/RECORD,,
411
+ machineconfig-4.97.dist-info/METADATA,sha256=TASblKhYFS5DONxX0YvajOjOzNPHg_WvLeSXnkgAmFI,7061
412
+ machineconfig-4.97.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
413
+ machineconfig-4.97.dist-info/entry_points.txt,sha256=LcwklRJPY_uKBvStgtOJn5G_pmFCEdpgRNzUUc6twAQ,1134
414
+ machineconfig-4.97.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
415
+ machineconfig-4.97.dist-info/RECORD,,