machineconfig 4.96__py3-none-any.whl → 4.98__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 (38) hide show
  1. machineconfig/jobs/installer/custom/gh.py +2 -15
  2. machineconfig/jobs/installer/custom_dev/alacritty.py +41 -26
  3. machineconfig/jobs/installer/custom_dev/brave.py +42 -28
  4. machineconfig/jobs/installer/custom_dev/bypass_paywall.py +30 -19
  5. machineconfig/jobs/installer/custom_dev/code.py +29 -20
  6. machineconfig/jobs/installer/custom_dev/espanso.py +64 -41
  7. machineconfig/jobs/installer/custom_dev/goes.py +41 -36
  8. machineconfig/jobs/installer/custom_dev/lvim.py +49 -33
  9. machineconfig/jobs/installer/custom_dev/nerdfont.py +71 -47
  10. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +25 -10
  11. machineconfig/jobs/installer/custom_dev/redis.py +51 -33
  12. machineconfig/jobs/installer/installer_data.json +18 -1
  13. machineconfig/jobs/installer/package_groups.py +272 -102
  14. machineconfig/jobs/python/python_cargo_build_share.py +0 -1
  15. machineconfig/jobs/python/python_ve_symlink.py +23 -15
  16. machineconfig/jobs/python/vscode/api.py +16 -8
  17. machineconfig/jobs/python/vscode/sync_code.py +42 -27
  18. machineconfig/scripts/python/cloud_repo_sync.py +8 -4
  19. machineconfig/scripts/python/devops.py +1 -1
  20. machineconfig/scripts/python/helpers/repo_sync_helpers.py +4 -2
  21. machineconfig/scripts/python/interactive.py +25 -24
  22. machineconfig/scripts/python/mount_nfs.py +3 -6
  23. machineconfig/scripts/python/mount_ssh.py +3 -4
  24. machineconfig/scripts/python/sessions.py +10 -9
  25. machineconfig/scripts/python/share_terminal.py +1 -1
  26. machineconfig/scripts/python/start_slidev.py +14 -4
  27. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +36 -22
  28. machineconfig/utils/code.py +11 -2
  29. machineconfig/utils/installer.py +15 -9
  30. machineconfig/{scripts/python/devops_devapps_install.py → utils/installer_utils/installer.py} +36 -29
  31. machineconfig/utils/path_extended.py +51 -7
  32. machineconfig/utils/ssh.py +22 -12
  33. machineconfig/utils/terminal.py +66 -92
  34. {machineconfig-4.96.dist-info → machineconfig-4.98.dist-info}/METADATA +1 -1
  35. {machineconfig-4.96.dist-info → machineconfig-4.98.dist-info}/RECORD +38 -38
  36. {machineconfig-4.96.dist-info → machineconfig-4.98.dist-info}/WHEEL +0 -0
  37. {machineconfig-4.96.dist-info → machineconfig-4.98.dist-info}/entry_points.txt +0 -0
  38. {machineconfig-4.96.dist-info → machineconfig-4.98.dist-info}/top_level.txt +0 -0
@@ -5,6 +5,7 @@ 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
 
@@ -15,6 +16,44 @@ FILE_MODE: TypeAlias = Literal["r", "w", "x", "a"]
15
16
  SHUTIL_FORMATS: TypeAlias = Literal["zip", "tar", "gztar", "bztar", "xztar"]
16
17
 
17
18
 
19
+ def _is_user_admin() -> bool:
20
+ if os.name == "nt":
21
+ try:
22
+ return __import__("ctypes").windll.shell32.IsUserAnAdmin()
23
+ except Exception: # noqa: BLE001
24
+ import traceback
25
+
26
+ traceback.print_exc()
27
+ print("Admin check failed, assuming not an admin.")
28
+ return False
29
+ return os.getuid() == 0
30
+
31
+
32
+ def _run_shell_command(
33
+ command: str,
34
+ shell_name: str,
35
+ *,
36
+ stdout: Optional[int] = subprocess.PIPE,
37
+ stderr: Optional[int] = subprocess.PIPE,
38
+ stdin: Optional[int] = None,
39
+ check: bool = False,
40
+ ) -> subprocess.CompletedProcess[str]:
41
+ if shell_name in {"powershell", "pwsh"} and sys.platform == "win32":
42
+ args: list[str] = [shell_name, "-Command", command]
43
+ return subprocess.run(args, check=check, text=True, stdout=stdout, stderr=stderr, stdin=stdin)
44
+ executable = "/bin/bash" if shell_name == "bash" and sys.platform != "win32" else None
45
+ return subprocess.run(
46
+ command,
47
+ check=check,
48
+ text=True,
49
+ stdout=stdout,
50
+ stderr=stderr,
51
+ stdin=stdin,
52
+ shell=True,
53
+ executable=executable,
54
+ )
55
+
56
+
18
57
  def pwd2key(password: str, salt: Optional[bytes] = None, iterations: int = 10) -> bytes: # Derive a secret key from a given password and salt"""
19
58
  import base64
20
59
 
@@ -392,9 +431,7 @@ class PathExtended(type(Path()), Path): # type: ignore # pylint: disable=E0241
392
431
  assert target_obj.exists(), f"Target path `{target}` (aka `{target_obj}`) doesn't exist. This will create a broken link."
393
432
  if overwrite and (self.is_symlink() or self.exists()):
394
433
  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.
434
+ if system() == "Windows" and not _is_user_admin(): # you cannot create symlink without priviliages.
398
435
  import win32com.shell.shell # type: ignore # pylint: disable=E0401
399
436
 
400
437
  _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 +921,11 @@ class PathExtended(type(Path()), Path): # type: ignore # pylint: disable=E0241
884
921
  if verbose:
885
922
  print("🔗 SHARING FILE")
886
923
  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()
924
+ command = f"rclone link '{cloud}:{rp.as_posix()}'"
925
+ completed = _run_shell_command(command, shell_to_use)
926
+ from machineconfig.utils.terminal import Response
927
+
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,15 @@ 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
+ from machineconfig.utils.terminal import Response
1005
+
1006
+ res = Response.from_completed_process(completed)
963
1007
  success = res.is_successful(strict_err=False, strict_returcode=True)
964
1008
  if not success:
965
1009
  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.96
3
+ Version: 4.98
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -43,22 +43,22 @@ machineconfig/cluster/templates/run_remote.py,sha256=vCc56t8BUAUJp7tyb0PFfwy5hlm
43
43
  machineconfig/cluster/templates/utils.py,sha256=5lHgjHvodoSPBD31AwluHBBNgwimwThUsDNWGN8iH9I,1647
44
44
  machineconfig/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
45
  machineconfig/jobs/installer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- machineconfig/jobs/installer/installer_data.json,sha256=sOfqIPU4uarxbuD4HBRs3tXfIKx5tUtNQQdALygwk2o,71545
47
- machineconfig/jobs/installer/package_groups.py,sha256=SayXJYkgYZiUyAT2YLWrDBXB1YYJbuHe0D_eFQQIQn8,2505
48
- machineconfig/jobs/installer/custom/gh.py,sha256=hic8Z1ZdncbljY6hgHzl2rmOLOcb6imIUstMALSS3-Y,3082
46
+ machineconfig/jobs/installer/installer_data.json,sha256=K6B6EPD8IXIeOzkY7sIIpphBmDVwnV_tczULAx-Y2ps,72114
47
+ machineconfig/jobs/installer/package_groups.py,sha256=VuI4WZEDpgApBptxqu7mbfKxrQ99JY52L1n2devP-y0,6822
48
+ machineconfig/jobs/installer/custom/gh.py,sha256=iZZI4ND87eiWlj-Y5uJ7LuN8ln2QkqjJyeOMFZ0o-YA,2963
49
49
  machineconfig/jobs/installer/custom/hx.py,sha256=FrUD0mlhWG2GxrnarccVIaW_sHJ5mxeF6yyzbBWyx6w,5840
50
50
  machineconfig/jobs/installer/custom_dev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
- machineconfig/jobs/installer/custom_dev/alacritty.py,sha256=6AXpnERkjq3CxJUIWwDRd7YNr3ASlqjAc2HVsxpSjsQ,2029
52
- machineconfig/jobs/installer/custom_dev/brave.py,sha256=XvOTOKTVWaXJ2xV1DZXnUnRskZopSaVuqZUhWa5EByY,2204
53
- machineconfig/jobs/installer/custom_dev/bypass_paywall.py,sha256=dnVZ6uc9qVAW90nIwV2vBpGEl6YpSOpmUUQVlQPfrhM,1496
54
- 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
55
55
  machineconfig/jobs/installer/custom_dev/cursor.py,sha256=3xoFAYFdZqurSHXeEG-vbG0KU1TNQpBMaMgL1eW6X4k,4326
56
- machineconfig/jobs/installer/custom_dev/espanso.py,sha256=VthTX-L6gJ38OBnGWHe-wD8YGfIGXIgYbwYXR4UyFXU,2832
57
- machineconfig/jobs/installer/custom_dev/goes.py,sha256=jBnKoOVDbA2zMvKRmZ033lionoS725vNiGOm2EjM0i4,1784
58
- machineconfig/jobs/installer/custom_dev/lvim.py,sha256=AjAtn-sEJe7r6oRLxsj53seT3uSBXxf4affEvBjHYfY,2220
59
- machineconfig/jobs/installer/custom_dev/nerdfont.py,sha256=oOYC5BpukZIA_pGSDRMZmuksWdYHiVQJmwsoFc3StQA,2900
60
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py,sha256=sdgbHCbu_6d8VotLRvpL_GrwpEoxY4dupOyRUjtpaYA,5554
61
- 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
62
62
  machineconfig/jobs/installer/custom_dev/wezterm.py,sha256=BuTVRqV5WQUS2C7FpWMU4pQWgkPt4p3VVGcE6fTVG-0,2311
63
63
  machineconfig/jobs/installer/custom_dev/winget.py,sha256=gLdwM20jKMf2bMV3BAcOg4MkuzwF09CU5OhXvLkPoHo,5738
64
64
  machineconfig/jobs/installer/linux_scripts/brave.sh,sha256=m01xquA4YZW3YrhJiTCvTZuLliELmRI1avYFyuE5-Ws,2119
@@ -81,11 +81,11 @@ machineconfig/jobs/linux/msc/network.sh,sha256=dmISsh0hioDheinqee3qHfo2k7ClFx6G_
81
81
  machineconfig/jobs/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
82
  machineconfig/jobs/python/check_installations.py,sha256=ksuENfJg0NAo1mWLRnsj1MpZw7Ee7eKw1nWyUQeO7fg,11096
83
83
  machineconfig/jobs/python/create_bootable_media.py,sha256=KKtcPk0rFLQc4eNVP6nbeYX-P7Gpqi0HvfIcUM6rVVs,827
84
- machineconfig/jobs/python/python_cargo_build_share.py,sha256=RDe1QiTH3vLQ1wjN0kE5NxMIqwB-_WHz6O3svyuH_VE,2133
85
- 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
86
86
  machineconfig/jobs/python/tasks.py,sha256=hrBDQOnBmcXtauTkicVgC8J2AOGcfdFfyx0K8eI6Coc,150
87
- machineconfig/jobs/python/vscode/api.py,sha256=QNZz6zqquAk4Bd-Zz5Id0qvOM6uFB5LyyKlGcHdcIJA,1631
88
- 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
89
89
  machineconfig/jobs/windows/start_terminal.ps1,sha256=wy0fGwgb4U7xaHsONDrR4V5u9JEkG5vtt4NZUBx0ro8,473
90
90
  machineconfig/jobs/windows/startup_file.cmd,sha256=qOqDwL0MmRB-fHauJKjOO0mhczyA3-cdRUyY1p7NCok,95
91
91
  machineconfig/jobs/windows/archive/archive_pygraphviz.ps1,sha256=XBMaFurdY8smiLdeP3iAm2p1x4Ui_F3Ty9lHikKSfUk,708
@@ -145,14 +145,13 @@ machineconfig/scripts/python/choose_wezterm_theme.py,sha256=Hlu_EOQhLM6wYdAdY25j
145
145
  machineconfig/scripts/python/cloud_copy.py,sha256=_pxA8o3ar5vH9DkrAdwafHcZMiqNCbY_IfNzKCOMJ5k,8395
146
146
  machineconfig/scripts/python/cloud_manager.py,sha256=YN0DYLzPKtMBaks-EAVwFmkCu3XeHWMr1D21uqX5dDk,3429
147
147
  machineconfig/scripts/python/cloud_mount.py,sha256=RFMzRUep2D5HtVXANIi-pab3EkI-W8P1IJ32k1W7xQA,6756
148
- machineconfig/scripts/python/cloud_repo_sync.py,sha256=GBhdUu9BJwhLYmhxxtvqJGLy7xKdQcnH9kkL4jcbzEE,9502
148
+ machineconfig/scripts/python/cloud_repo_sync.py,sha256=PTZ4gyhMFwW77DxE86GyNQK0JDFLcMUSF69AM80SvxY,9781
149
149
  machineconfig/scripts/python/cloud_sync.py,sha256=RWGpAfJ9fnN18yNBSgN44dzA38Hmd4879JL5r2pcyrM,3514
150
150
  machineconfig/scripts/python/croshell.py,sha256=wYi8xWkzYzpfg8YNppmu22mvx0Gxtbs979ERO3kZS2w,8587
151
- machineconfig/scripts/python/devops.py,sha256=fTEut6gTDfmNqzS8-gRyRAsmWJYPGGIt8X35Irj7Cl8,3434
151
+ machineconfig/scripts/python/devops.py,sha256=C2aHrYJqXcvgTOam1zucWflLjUYZnNwpFrZ7ccltqXk,3428
152
152
  machineconfig/scripts/python/devops_add_identity.py,sha256=JfN3ZrYMCgmt4ks_VCfnV9BIIHAsOYO3E0W0wZ15FR8,3791
153
153
  machineconfig/scripts/python/devops_add_ssh_key.py,sha256=KaoX83KltBsmutfKhSfZjd7nP_R1hJ2OLAWRhbswO7o,6889
154
154
  machineconfig/scripts/python/devops_backup_retrieve.py,sha256=jZe5Vki7E2GCMG8hvqUZeOONFC4cNzISoGzq_dMG4GA,5601
155
- machineconfig/scripts/python/devops_devapps_install.py,sha256=T4h1ydHljQJrNBrye2q-FHUX9iAZnkCa889GgBjHZCE,9103
156
155
  machineconfig/scripts/python/devops_update_repos.py,sha256=c5qBc9cuTGDEqDHufkjDT4d_vvJsswv3tlqk9MAulYk,8063
157
156
  machineconfig/scripts/python/dotfile.py,sha256=SRcX-9Ak1jRvF-killBTTm2IWcsNxfiLucH6ZsytAFA,2202
158
157
  machineconfig/scripts/python/fire_agents_help_launch.py,sha256=1ymWiszfjCyPv3ofinWzfOmbzLEt3d7ntac_afLh-V4,5017
@@ -166,10 +165,10 @@ machineconfig/scripts/python/fire_jobs_streamlit_helper.py,sha256=47DEQpj8HBSa-_
166
165
  machineconfig/scripts/python/ftpx.py,sha256=l_gdJS0QB2wVZErubtZvm4HJD9HZAJxSP68sbY73xwo,10278
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=AM2jPIAHbXppVj-lA9iYcOTGWmOMWZtIaJIz9K5FxK8,11983
170
- machineconfig/scripts/python/mount_nfs.py,sha256=c8pWXimDWdgCkSskcnPgT-8ESPosil6Cvy2hGSaIBJE,3359
168
+ machineconfig/scripts/python/interactive.py,sha256=NHAniZPgEfhgA3higTRD3U76nHIDpZLygWebhKc6ld0,11791
169
+ machineconfig/scripts/python/mount_nfs.py,sha256=5HmtsAelFSVzl8o_F9mBoKiuVNIyRHjvdqKzFJR1P64,3376
171
170
  machineconfig/scripts/python/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
172
- machineconfig/scripts/python/mount_ssh.py,sha256=rGY2pgtlnWMi0Rrge1aCdjtfbULrj2cyaStDoX-y2w4,2236
171
+ machineconfig/scripts/python/mount_ssh.py,sha256=7dYCBtkJE43rwuvhxiYzyTlJ230RFQbZOA29veYQbuU,2284
173
172
  machineconfig/scripts/python/onetimeshare.py,sha256=bmGsNnskym5OWfIhpOfZG5jq3m89FS0a6dF5Sb8LaZM,2539
174
173
  machineconfig/scripts/python/pomodoro.py,sha256=SPkfeoZGv8rylGiOyzQ7UK3aXZ3G2FIOuGkSuBUggOI,2019
175
174
  machineconfig/scripts/python/repos.py,sha256=Mz-d0ubynOZaKwC6YXKiZq9ojMnKFi4J6n0UbiJYZyY,4449
@@ -178,10 +177,10 @@ machineconfig/scripts/python/repos_helper_clone.py,sha256=xW5YZEoNt3k7h9NIULhUhO
178
177
  machineconfig/scripts/python/repos_helper_record.py,sha256=YEEQORfEiLddOIIgePo5eEkyQUFruFg3kc8npMvRL-o,10927
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
- machineconfig/scripts/python/sessions.py,sha256=-pKyA3oOC8ynHNE8Rcos5w0OEDT6t1O81EZWJo-rOU0,8377
182
- machineconfig/scripts/python/share_terminal.py,sha256=biuG35YiknTMVr3Mzs4bBZwEq53JcuBRlzMTp6eY90M,5009
180
+ machineconfig/scripts/python/sessions.py,sha256=moLdAPHMn90zd6blugplQ2V__xurOcMBH2WRYqRf-hA,8415
181
+ machineconfig/scripts/python/share_terminal.py,sha256=lBZgfFH34P9dfcy3eZNjFUR5OsR6sVfq1vV2eiqQYxQ,5003
183
182
  machineconfig/scripts/python/snapshot.py,sha256=aDvKeoniZaeTSNv9zWBUajaj2yagAxVdfuvO1_tgq5Y,1026
184
- machineconfig/scripts/python/start_slidev.py,sha256=U5ujAL7R5Gd5CzFReTsnF2SThjY91aFBg0Qz_MMl6U4,4573
183
+ machineconfig/scripts/python/start_slidev.py,sha256=0rVK7uQL70FAYvVk1SQ-tKRlT1fEj-5wIKCLAnM4-9M,4913
185
184
  machineconfig/scripts/python/start_terminals.py,sha256=DRWbMZumhPmL0DvvsCsbRNFL5AVQn1SgaziafTio3YQ,6149
186
185
  machineconfig/scripts/python/t4.py,sha256=cZ45iWzS254V5pmVvq8wCw7jAuDhzr8G2Arzay76saU,316
187
186
  machineconfig/scripts/python/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
@@ -220,7 +219,7 @@ machineconfig/scripts/python/helpers/cloud_helpers.py,sha256=GA-bxXouUmknk9fyQAs
220
219
  machineconfig/scripts/python/helpers/helpers2.py,sha256=ZdqeF1MLlaBRwoqsQAqnHi4b8rW0byFCBnbyCrPKkoA,7336
221
220
  machineconfig/scripts/python/helpers/helpers4.py,sha256=rwAy7HK1CbKQZORzQMQULSKNHj0i4jo7KbUXj3qLG9I,4765
222
221
  machineconfig/scripts/python/helpers/helpers5.py,sha256=dPBvA9Tcyx9TMgM6On49A1CueGMhBdRzikDnlJGf3J0,1123
223
- machineconfig/scripts/python/helpers/repo_sync_helpers.py,sha256=39Q3XV8Zx0Y6_iWUtbwDIQI8riqLPSZ008zjqx-Gd-g,5328
222
+ machineconfig/scripts/python/helpers/repo_sync_helpers.py,sha256=umN6ktxjddkraC_h8w50D72olxHcyT4kn-CUq6_C_xI,5448
224
223
  machineconfig/scripts/windows/agents.ps1,sha256=DqdrC_Xc2rwQ6kGzT0xh5CJz4B_0p5ZwB7s8XE6rPCM,77
225
224
  machineconfig/scripts/windows/choose_wezterm_theme.ps1,sha256=LiXJ0a4LKjb6E-oH_bAg6DjegV4SqDUdiMp_svGCFlI,95
226
225
  machineconfig/scripts/windows/cloud_copy.ps1,sha256=llTFhN2uInZTcoZYZuuhJcf5Ifo5MF226I5MpOzvc3A,82
@@ -377,23 +376,23 @@ machineconfig/setup_windows/web_shortcuts/croshell.ps1,sha256=cTQnegGLGYhuFY3Yuu
377
376
  machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=-76toOluRnxtgo6NuAHgHWMnZQT3zroeCBBLkMTd13g,522
378
377
  machineconfig/setup_windows/web_shortcuts/ssh.ps1,sha256=Tj9axEugJE7I3AQ0w1eUGLPb8ufME5jvU5S7VUjlLJE,424
379
378
  machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
380
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=rZZJamy3YxAeJhdMIFR6IWtjgn1u1HUdbk1J24NtryE,6116
379
+ machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=D_U_q31sqyzR7QRi_FUFMYuOgVbp15VBlKc51VbFjp0,6807
381
380
  machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
382
381
  machineconfig/utils/accessories.py,sha256=W_9dLzjwNTW5JQk_pe3B2ijQ1nA2-8Kdg2r7VBtzgQs,4340
383
- machineconfig/utils/code.py,sha256=zsJ8jG6ESC6cAiHJHdEDso_V0wFuXtGpYtb0zRBxv4c,5197
384
- machineconfig/utils/installer.py,sha256=Aoq93RMOQFmv1iYJS90sxrBHeG_K6N5DtIthYffcIOU,9743
382
+ machineconfig/utils/code.py,sha256=5W6kP9SMWdApbFDq0fklI_31RWt7E9ByioxU7XX00HE,5662
383
+ machineconfig/utils/installer.py,sha256=p2Mr5GQ8ZsUriV9qatXDwllBqGvYNfI-TQEKXwA8gcA,9961
385
384
  machineconfig/utils/io.py,sha256=ZXB3aataS1IZ_0WMcCRSmoN1nbkvEO-bWYcs-TpngqU,2872
386
385
  machineconfig/utils/links.py,sha256=riNUrG8aGElRszdOPOic4M2AyOcpdcth_-y8JEiZpJ4,10253
387
386
  machineconfig/utils/notifications.py,sha256=vvdsY5IX6XEiILTnt5lNyHxhCi0ljdGX2T_67VRfrG4,9009
388
387
  machineconfig/utils/options.py,sha256=8pG-apcc28xxJ5BQiACsGNTKwWtkQyH3hCtzBEhokK8,8366
389
- machineconfig/utils/path_extended.py,sha256=nTETtTxzNaxdrapIH3WzkR__b-1k6Lx7SpRAXqmIJN4,51793
388
+ machineconfig/utils/path_extended.py,sha256=Xjdn2AVnB8p1jfNMNe2kJutVa5zGnFFJVGZbw-Bp_hg,53200
390
389
  machineconfig/utils/path_helper.py,sha256=jqOf3TAlw5cqSp4HBAlOqjAR_bzC8_fvjA-_-CooI6Y,8030
391
390
  machineconfig/utils/procs.py,sha256=Bm-yopmj19yiBO9tywJHEcs9rZmeRyJqbgTSe216LTU,11349
392
391
  machineconfig/utils/scheduler.py,sha256=bUHDviS_HE9_6LaA1k9Nnfz5rr2FJIfrk5qO2FJ-oUs,15119
393
392
  machineconfig/utils/scheduling.py,sha256=RF1iXJpqf4Dg18jdZWtBixz97KAHC6VKYqTFSpdLWuc,11188
394
393
  machineconfig/utils/source_of_truth.py,sha256=GnjcVkKm11RyZFHGnPbne5YDEBYoZ5yryBNkpfGC7O4,854
395
- machineconfig/utils/ssh.py,sha256=zkNUGeijrdoZYkp56DDC8m8LFqPmxQCDNTv5Ns5B7rk,21096
396
- machineconfig/utils/terminal.py,sha256=IXYhZ5a0qA6X9CdMT9S7IEKQtJXrDzmiDUGd4C85-oE,12436
394
+ machineconfig/utils/ssh.py,sha256=KTUp42nT4Vuh350_EvArQoR2N5iVXrc2BFld93fRUX4,20919
395
+ machineconfig/utils/terminal.py,sha256=Jqojb1xta_SLftUIXmWK7Mn87e1NJXavC5Hbf3fRT-I,11795
397
396
  machineconfig/utils/upgrade_packages.py,sha256=H96zVJEWXJW07nh5vhjuSCrPtXGqoUb7xeJsFYYdmCI,3330
398
397
  machineconfig/utils/ve.py,sha256=L-6PBXnQGXThiwWgheJMQoisAZOZA6SVCbGw2J-GFnI,2414
399
398
  machineconfig/utils/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -402,14 +401,15 @@ machineconfig/utils/cloud/onedrive/setup_oauth.py,sha256=ZTVkqgrwbV_EoPvyT8dyOTU
402
401
  machineconfig/utils/cloud/onedrive/transaction.py,sha256=m-aNcnWj_gfZVvJOSpkdIqjZxU_3nXx2CA-qKbQgP3I,26232
403
402
  machineconfig/utils/installer_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
404
403
  machineconfig/utils/installer_utils/github_release_bulk.py,sha256=WJf_qZlF02SmIc6C7o1h4Gy4gAaJAfeAS8O9s2Itj-k,6535
404
+ machineconfig/utils/installer_utils/installer.py,sha256=_XcatwArhwRepMYfaGYpjd-lqNGfijnjeZB8l4uKd-c,9266
405
405
  machineconfig/utils/installer_utils/installer_abc.py,sha256=MRVfkjCPlPgCQQcSxXdVJMVnr_9CC3SQbFVDJxWy1zI,10813
406
406
  machineconfig/utils/installer_utils/installer_class.py,sha256=6IQswaC9mxIdeaMG-rOt-vqyKGYibBRMvC0UglZ_3mI,20268
407
407
  machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=pTxvLzIpD5RF508lUUBBkWcc4V1B10J4ylvVgVGkcM0,2037
408
408
  machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoSpdmTIdgS9LS-RvE-QZ-D260tD3o,1214
409
409
  machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
410
410
  machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
411
- machineconfig-4.96.dist-info/METADATA,sha256=9UWC2rvt9CEmexbqBn9bBY39SnI54J7X_cv49wKr4mI,7061
412
- machineconfig-4.96.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
413
- machineconfig-4.96.dist-info/entry_points.txt,sha256=LcwklRJPY_uKBvStgtOJn5G_pmFCEdpgRNzUUc6twAQ,1134
414
- machineconfig-4.96.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
415
- machineconfig-4.96.dist-info/RECORD,,
411
+ machineconfig-4.98.dist-info/METADATA,sha256=Xtvi0zedO2u7yGDMu2GlOZtwTVZgrldIp8on4VJ-kcQ,7061
412
+ machineconfig-4.98.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
413
+ machineconfig-4.98.dist-info/entry_points.txt,sha256=LcwklRJPY_uKBvStgtOJn5G_pmFCEdpgRNzUUc6twAQ,1134
414
+ machineconfig-4.98.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
415
+ machineconfig-4.98.dist-info/RECORD,,