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

@@ -121,20 +121,22 @@ from pathlib import Path
121
121
  fire_line = f"uv run --with visidata,pyarrow vd {str(file_obj)}"
122
122
  elif marimo:
123
123
  if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" """
124
- else: requirements = """--with "marimo,machineconfig[plot]>=6.45" """
124
+ else: requirements = """--with "marimo,machineconfig[plot]>=6.47" """
125
125
  fire_line = f"""
126
126
  cd {str(pyfile.parent)}
127
127
  uv run --with "marimo" marimo convert {pyfile.name} -o marimo_nb.py
128
128
  uv run {requirements} marimo edit --host 0.0.0.0 marimo_nb.py
129
129
  """
130
130
  elif jupyter:
131
- fire_line = f"uv run --with 'machineconfig[plot]>=6.45' jupyter-lab {str(nb_target)}"
131
+ if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" """
132
+ else: requirements = """--with "machineconfig[plot]>=6.47" """
133
+ fire_line = f"uv run {requirements} jupyter-lab {str(nb_target)}"
132
134
  elif vscode:
133
135
  fire_line = f"""
134
136
  cd {str(pyfile.parent)}
135
137
  uv init --python 3.14
136
138
  uv venv
137
- uv add "machineconfig[plot]>=6.45"
139
+ uv add "machineconfig[plot]>=6.47"
138
140
  # code serve-web
139
141
  code --new-window {str(pyfile)}
140
142
  """
@@ -149,7 +151,7 @@ code --new-window {str(pyfile)}
149
151
  else:
150
152
  console.print(Panel("❌ Could not determine the local machineconfig repo root. Please ensure the `REPO_ROOT` in `source_of_truth.py` is correctly set to the local path of the machineconfig repo, or do not use the `--local` flag.", title="Error", border_style="red"))
151
153
  return
152
- else: ve_line = """--with "machineconfig[plot]>=6.45" """
154
+ else: ve_line = """--with "machineconfig[plot]>=6.47" """
153
155
  # ve_path_maybe, ipython_profile_maybe = get_ve_path_and_ipython_profile(Path.cwd())
154
156
  # --python 3.14
155
157
  fire_line = f"uv run {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
@@ -42,7 +42,7 @@ def path():
42
42
  from pathlib import Path
43
43
  path = Path(navigator.__file__).resolve().parent.joinpath("path_manager_tui.py")
44
44
  from machineconfig.utils.code import run_shell_script
45
- if not Path.home().joinpath("code/machineconfig").exists(): executable = """--with "machineconfig>=6.45,textual" """
45
+ if not Path.home().joinpath("code/machineconfig").exists(): executable = """--with "machineconfig>=6.47,textual" """
46
46
  else: executable = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with textual"""
47
47
  run_shell_script(f"""uv run {executable} {path}""")
48
48
 
@@ -40,9 +40,9 @@ def install(no_copy_assets: Annotated[bool, typer.Option("--no-assets-copy", "-n
40
40
  else:
41
41
  import platform
42
42
  if platform.system() == "Windows":
43
- run_shell_script(r"""$HOME\.local\bin\uv.exe tool install --upgrade "machineconfig>=6.45" """)
43
+ run_shell_script(r"""$HOME\.local\bin\uv.exe tool install --upgrade "machineconfig>=6.47" """)
44
44
  else:
45
- run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.45" """)
45
+ run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.47" """)
46
46
  from machineconfig.profile.create_shell_profile import create_default_shell_profile
47
47
  if not no_copy_assets:
48
48
  create_default_shell_profile() # involves copying assets too
@@ -67,7 +67,7 @@ def navigate():
67
67
  path = Path(navigator.__file__).resolve().parent.joinpath("devops_navigator.py")
68
68
  from machineconfig.utils.code import run_shell_script
69
69
  if Path.home().joinpath("code/machineconfig").exists(): executable = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with textual"""
70
- else: executable = """--with "machineconfig>=6.45,textual" """
70
+ else: executable = """--with "machineconfig>=6.47,textual" """
71
71
  run_shell_script(f"""uv run {executable} {path}""")
72
72
 
73
73
 
@@ -2,7 +2,7 @@
2
2
  # /// script
3
3
  # requires-python = ">=3.13"
4
4
  # dependencies = [
5
- # "machineconfig>=6.45",
5
+ # "machineconfig>=6.47",
6
6
  # "textual",
7
7
  # "pyperclip",
8
8
  # ]
@@ -77,7 +77,7 @@ git pull originEnc master
77
77
  """
78
78
 
79
79
  if Path.home().joinpath("code/machineconfig").exists(): executable = f"""uv run --project "{str(Path.home().joinpath("code/machineconfig"))}" """
80
- else: executable = """uv run --with "machineconfig>=6.45" """
80
+ else: executable = """uv run --with "machineconfig>=6.47" """
81
81
 
82
82
  shell_path = write_shell_script_to_file(shell_script=script)
83
83
  command = f". {shell_path}"
@@ -5,7 +5,7 @@
5
5
  # mkdir ~/data/local
6
6
  # sudo mount -o nolock,noatime,nodiratime,proto=tcp,timeo=600,retrans=2,noac alex-p51s-5:/home/alex/data/local ./data/local
7
7
 
8
- uv run --python 3.14 --with "machineconfig>=6.45" python -m machineconfig.scripts.python.mount_nfs
8
+ uv run --python 3.14 --with "machineconfig>=6.47" python -m machineconfig.scripts.python.mount_nfs
9
9
  # Check if remote server is reachable and share folder exists
10
10
  if ! ping -c 1 "$remote_server" &> /dev/null; then
11
11
  echo "💥 Error: Remote server $remote_server is not reachable."
@@ -8,7 +8,7 @@ def analyze_repo_development(repo_path: Annotated[str, typer.Argument(..., help=
8
8
  from pathlib import Path
9
9
  count_lines_path = Path(count_lines.__file__)
10
10
  # --project $HOME/code/ machineconfig --group plot
11
- cmd = f"""uv run --python 3.14 --with "machineconfig[plot]>=6.45" {count_lines_path} analyze-over-time {repo_path}"""
11
+ cmd = f"""uv run --python 3.14 --with "machineconfig[plot]>=6.47" {count_lines_path} analyze-over-time {repo_path}"""
12
12
  from machineconfig.utils.code import run_shell_script
13
13
  run_shell_script(cmd)
14
14
 
@@ -7,7 +7,7 @@ $user = ''
7
7
  $sharePath = ''
8
8
  $driveLetter = ''
9
9
 
10
- uv run --python 3.14 --with "machineconfig>=6.45" python -m machineconfig.scripts.python.mount_ssh
10
+ uv run --python 3.14 --with "machineconfig>=6.47" python -m machineconfig.scripts.python.mount_ssh
11
11
 
12
12
  net use T: \\sshfs.kr\$user@$host.local
13
13
  # this worked: net use T: \\sshfs\alex@alex-p51s-5.local
@@ -1,7 +1,7 @@
1
1
  #!/bin/bash
2
2
  . <( curl -sSL "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_linux/uv.sh")
3
3
  mcfg() {
4
- "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=6.45" mcfg "$@"
4
+ "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=6.47" mcfg "$@"
5
5
  }
6
6
  alias d="mcfg devops"
7
7
  alias c="mcfg cloud"
@@ -2,7 +2,7 @@
2
2
 
3
3
  iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
4
4
  function mcfg {
5
- & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=6.45" mcfg $args
5
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=6.47" mcfg $args
6
6
  }
7
7
  function d { mcfg devops @args }
8
8
  function c { mcfg cloud @args }
@@ -1,15 +1,14 @@
1
+ import atexit
1
2
  import platform
2
3
  from typing import Optional
3
4
  import subprocess
4
- import os
5
- # import time
6
5
  from rich.console import Console
7
6
  from rich.panel import Panel
8
7
  from rich.syntax import Syntax
9
8
 
10
9
  from machineconfig.utils.accessories import randstr
11
10
  from machineconfig.utils.ve import get_ve_activate_line
12
- from machineconfig.utils.path_extended import PathExtended
11
+ from machineconfig.utils.path_extended import PathExtended # type: ignore[import-not-found]
13
12
 
14
13
 
15
14
  def get_shell_script_executing_python_file(python_file: str, func: Optional[str], ve_path: Optional[str], executable: Optional[str], strict_execution: bool = True):
@@ -138,71 +137,33 @@ def run_shell_script(script: str, display_script: bool = True, clean_env: bool =
138
137
  return proc
139
138
 
140
139
 
141
- def run_shell_script_after_exit(script: str, check_interval: float = 0.1, display_script: bool = True) -> subprocess.Popen[bytes]:
142
- current_pid = os.getpid()
140
+ def run_shell_script_after_exit(script: str, display_script: bool = True) -> None:
143
141
  console = Console()
144
142
 
145
- if platform.system() == "Windows":
146
- monitor_script = f"""$ErrorActionPreference = "Stop"
147
- $targetPid = {current_pid}
148
- $checkInterval = {check_interval}
149
-
150
- Write-Host "🔍 Monitoring process PID: $targetPid"
151
-
152
- while ($true) {{
153
- $process = Get-Process -Id $targetPid -ErrorAction SilentlyContinue
154
- if (-not $process) {{
155
- Write-Host "✅ Process $targetPid has exited. Running script..."
156
- break
157
- }}
158
- Start-Sleep -Seconds $checkInterval
159
- }}
160
-
161
- # Execute the provided script
162
- {script}
163
- """
164
- suffix = ".ps1"
165
- cmd = ["powershell", "-ExecutionPolicy", "Bypass", "-NoProfile", "-WindowStyle", "Hidden", "-File"]
166
- else:
167
- monitor_script = f"""#!/bin/bash
168
- target_pid={current_pid}
169
- check_interval={check_interval}
170
-
171
- echo "🔍 Monitoring process PID: $target_pid"
172
-
173
- while kill -0 $target_pid 2>/dev/null; do
174
- sleep $check_interval
175
- done
176
-
177
- echo "✅ Process $target_pid has exited. Running script..."
178
-
179
- # Execute the provided script
180
- {script}
181
- """
182
- suffix = ".sh"
183
- cmd = ["bash"]
184
-
185
- monitor_script_path = PathExtended.tmp().joinpath("tmp_scripts", "monitor", randstr() + suffix)
186
- monitor_script_path.parent.mkdir(parents=True, exist_ok=True)
187
- monitor_script_path.write_text(monitor_script, encoding="utf-8")
188
-
189
- if display_script:
190
- lexer = "powershell" if platform.system() == "Windows" else "bash"
191
- console.print(Panel(Syntax(code=monitor_script, lexer=lexer), title=f"📄 Monitor script @ {monitor_script_path}", subtitle="Will run after current process exits"), style="bold yellow")
192
-
193
- if platform.system() != "Windows":
194
- monitor_script_path.chmod(0o755)
195
-
196
- cmd.append(str(monitor_script_path))
197
-
198
- if platform.system() == "Windows":
199
- creation_flags = subprocess.CREATE_NEW_PROCESS_GROUP | subprocess.DETACHED_PROCESS # type: ignore
200
- process = subprocess.Popen(cmd, creationflags=creation_flags, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, stdin=subprocess.DEVNULL)
201
- else:
202
- process = subprocess.Popen(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, stdin=subprocess.DEVNULL, start_new_session=True)
203
- if display_script:
204
- console.print(f"🚀 [green]Monitor process started with PID:[/green] [blue]{process.pid}[/blue]")
205
- console.print(f"📍 [yellow]Watching PID:[/yellow] [blue]{current_pid}[/blue]")
143
+ def execute_script_at_exit() -> None:
144
+ if platform.system() == "Windows":
145
+ suffix = ".ps1"
146
+ lexer = "powershell"
147
+ else:
148
+ suffix = ".sh"
149
+ lexer = "bash"
150
+
151
+ script_path = PathExtended.tmp().joinpath("tmp_scripts", "exit", randstr() + suffix)
152
+ script_path.parent.mkdir(parents=True, exist_ok=True)
153
+ script_path.write_text(script, encoding="utf-8")
154
+
155
+ if display_script:
156
+ console.print(Panel(Syntax(code=script, lexer=lexer), title=f"📄 Exit script @ {script_path}", subtitle="Running at exit"), style="bold yellow")
157
+
158
+ if platform.system() != "Windows":
159
+ script_path.chmod(0o755)
160
+
161
+ if platform.system() == "Windows":
162
+ subprocess.run(["powershell", "-ExecutionPolicy", "Bypass", "-NoProfile", "-File", str(script_path)], check=False)
163
+ else:
164
+ subprocess.run(["bash", str(script_path)], check=False)
165
+
166
+ script_path.unlink(missing_ok=True)
206
167
 
207
- return process
168
+ atexit.register(execute_script_at_exit)
208
169
 
@@ -170,35 +170,32 @@ class CacheMemory[T]():
170
170
  def __call__(self, fresh: bool = False) -> T:
171
171
  self.last_call_is_fresh = False
172
172
  if fresh or not hasattr(self, "cache"):
173
- if self.logger:
174
- why = "There was an explicit fresh order." if fresh else "Previous cache never existed."
175
- self.logger.warning(f"""
176
- 🆕 ════════════════════ NEW CACHE ════════════════════
177
- 🔄 {self.name} cache: Populating fresh cache from source func
178
- ℹ️ Reason: {why}
179
- ════════════════════════════════════════════════════════""")
173
+ why = "There was an explicit fresh order." if fresh else "Previous cache never existed."
174
+ t0 = time.time()
175
+ self.logger.warning(f"""
176
+ 🆕 ════════════════════ NEW {self.name} CACHE ════════════════════
177
+ ℹ️ Reason: {why}""")
180
178
  self.cache = self.source_func()
179
+ self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
181
180
  self.last_call_is_fresh = True
182
181
  self.time_produced = datetime.now()
183
182
  else:
184
183
  age = self.age
185
184
  if age > self.expire:
186
- if self.logger:
187
- self.logger.warning(f"""
185
+ self.logger.warning(f"""
188
186
  🔄 ════════════════════ CACHE UPDATE ════════════════════
189
187
  ⚠️ {self.name} cache: Updating cache from source func
190
- ⏱️ Age = {age} > {self.expire}
191
- ════════════════════════════════════════════════════════""")
188
+ ⏱️ Age = {age} > {self.expire}""")
189
+ t0 = time.time()
192
190
  self.cache = self.source_func()
191
+ self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
193
192
  self.last_call_is_fresh = True
194
193
  self.time_produced = datetime.now()
195
194
  else:
196
- if self.logger:
197
- self.logger.warning(f"""
195
+ self.logger.warning(f"""
198
196
  ✅ ════════════════════ USING CACHE ════════════════════
199
197
  📦 {self.name} cache: Using cached values
200
- ⏱️ Lag = {age}
201
- ════════════════════════════════════════════════════════""")
198
+ ⏱️ Lag = {age}""")
202
199
  return self.cache
203
200
 
204
201
  @staticmethod
@@ -236,19 +233,18 @@ class Cache[T](): # This class helps to accelrate access to latest data coming
236
233
  msg1 = f"""
237
234
  📦 ════════════════════ CACHE OPERATION ════════════════════
238
235
  🔄 {self.name} cache: Reading cached values from `{self.path}`
239
- ⏱️ Lag = {age}
240
- ════════════════════════════════════════════════════════════"""
236
+ ⏱️ Lag = {age}"""
241
237
  try:
242
238
  self.cache = self.reader(self.path)
243
239
  except Exception as ex:
244
- if self.logger:
245
- msg2 = f"""
240
+ msg2 = f"""
246
241
  ❌ ════════════════════ CACHE ERROR ════════════════════
247
242
  ⚠️ {self.name} cache: Cache file is corrupted
248
- 🔍 Error: {ex}
249
- ════════════════════════════════════════════════════════"""
250
- self.logger.warning(msg1 + msg2)
243
+ 🔍 Error: {ex}"""
244
+ self.logger.warning(msg1 + msg2)
245
+ t0 = time.time()
251
246
  self.cache = self.source_func()
247
+ self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
252
248
  self.last_call_is_fresh = True
253
249
  self.time_produced = datetime.now()
254
250
  # if self.path is not None:
@@ -256,15 +252,15 @@ class Cache[T](): # This class helps to accelrate access to latest data coming
256
252
  return self.cache
257
253
  return self(fresh=False) # may be the cache is old ==> check that by passing it through the logic again.
258
254
  else:
259
- if self.logger:
260
- # Previous cache never existed or there was an explicit fresh order.
261
- why = "There was an explicit fresh order." if fresh else "Previous cache never existed or is corrupted."
262
- self.logger.warning(f"""
255
+ # Previous cache never existed or there was an explicit fresh order.
256
+ why = "There was an explicit fresh order." if fresh else "Previous cache never existed or is corrupted."
257
+ self.logger.warning(f"""
263
258
  🆕 ════════════════════ NEW CACHE ════════════════════
264
259
  🔄 {self.name} cache: Populating fresh cache from source func
265
- ℹ️ Reason: {why}
266
- ════════════════════════════════════════════════════════""")
260
+ ℹ️ Reason: {why}""")
261
+ t0 = time.time()
267
262
  self.cache = self.source_func() # fresh data.
263
+ self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
268
264
  self.last_call_is_fresh = True
269
265
  self.time_produced = datetime.now()
270
266
  self.save(self.cache, self.path)
@@ -274,23 +270,21 @@ class Cache[T](): # This class helps to accelrate access to latest data coming
274
270
  except AttributeError: # path doesn't exist (may be deleted) ==> need to repopulate cache form source_func.
275
271
  return self(fresh=True)
276
272
  if age > self.expire:
277
- if self.logger:
278
- self.logger.warning(f"""
273
+ self.logger.warning(f"""
279
274
  🔄 ════════════════════ CACHE UPDATE ════════════════════
280
275
  ⚠️ {self.name} cache: Updating cache from source func
281
- ⏱️ Age = {age} > {self.expire}
282
- ════════════════════════════════════════════════════════""")
276
+ ⏱️ Age = {age} > {self.expire}""")
277
+ t0 = time.time()
283
278
  self.cache = self.source_func()
279
+ self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
284
280
  self.last_call_is_fresh = True
285
281
  self.time_produced = datetime.now()
286
282
  self.save(self.cache, self.path)
287
283
  else:
288
- if self.logger:
289
- self.logger.warning(f"""
284
+ self.logger.warning(f"""
290
285
  ✅ ════════════════════ USING CACHE ════════════════════
291
286
  📦 {self.name} cache: Using cached values
292
- ⏱️ Lag = {age}
293
- ════════════════════════════════════════════════════════""")
287
+ ⏱️ Lag = {age}""")
294
288
  return self.cache
295
289
 
296
290
  @staticmethod
@@ -6,7 +6,7 @@ from machineconfig.utils.terminal import Response, MACHINE
6
6
  from machineconfig.utils.accessories import pprint
7
7
 
8
8
  UV_RUN_CMD = "$HOME/.local/bin/uv run"
9
- MACHINECONFIG_VERSION = "machineconfig>=6.45"
9
+ MACHINECONFIG_VERSION = "machineconfig>=6.47"
10
10
  DEFAULT_PICKLE_SUBDIR = "tmp_results/tmp_scripts/ssh"
11
11
 
12
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machineconfig
3
- Version: 6.45
3
+ Version: 6.47
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -122,7 +122,7 @@ machineconfig/scripts/linux/other/switch_ip,sha256=NQfeKMBSbFY3eP6M-BadD-TQo5qMP
122
122
  machineconfig/scripts/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
123
123
  machineconfig/scripts/python/agents.py,sha256=gGeeWCI0AN_DyDJ3G5KR9qSsXv8zkUd5dBRRWqz-dQE,10722
124
124
  machineconfig/scripts/python/cloud.py,sha256=jwftTQGhIP39wIKHB1lQbcbmo2dMnWoTcs-Wly3Ql5U,1263
125
- machineconfig/scripts/python/croshell.py,sha256=07FJF93zsG3EYbT7DpVI_LMIIU72QMPq4pqpejLgK48,7807
125
+ machineconfig/scripts/python/croshell.py,sha256=bOos2trhmmPM16g2VQcCLt8QbxdkOoNhDCasakk_Cmc,8007
126
126
  machineconfig/scripts/python/devops.py,sha256=FXs7IhTkbl0kHST4VPQLKn9y8Y7MWJcJomLLBqiJkow,2440
127
127
  machineconfig/scripts/python/devops_navigator.py,sha256=4O9_-ACeP748NcMjWQXZF7mBQpMPxqCGhLvPG3DMi4Q,236
128
128
  machineconfig/scripts/python/entry.py,sha256=a0Zk_3RnIFTQ55zSQrvOOiKom_SaoxElPMmWQgGy4V0,2221
@@ -175,12 +175,12 @@ machineconfig/scripts/python/croshell_helpers/start_slidev.py,sha256=HfJReOusTPh
175
175
  machineconfig/scripts/python/croshell_helpers/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
176
176
  machineconfig/scripts/python/croshell_helpers/viewer_template.py,sha256=ve3Q1-iKhCLc0VJijKvAeOYp2xaFOeIOC_XW956GWCc,3944
177
177
  machineconfig/scripts/python/devops_helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
178
- machineconfig/scripts/python/devops_helpers/cli_config.py,sha256=YmmIuO4tT9cBVi9uXGbPdwi4AHL6cGKf06gHcOghjYU,5652
178
+ machineconfig/scripts/python/devops_helpers/cli_config.py,sha256=A8xD9sqxYhoIn3qFgw7BHhK7bb4MZ2P8o7ysm8tuyq0,5652
179
179
  machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py,sha256=rjTys4FNf9_feP9flWM7Zvq17dxWmetSiGaHPxp25nk,2737
180
180
  machineconfig/scripts/python/devops_helpers/cli_data.py,sha256=2OWwp86-ncpGoSP9IblW7Jjej-wc-PuS8KRZ5xh0l1c,1774
181
181
  machineconfig/scripts/python/devops_helpers/cli_nw.py,sha256=kXJkdO0xY4cpD0GWC0DcjdiQXf1iVt6OBwvJb3MghAk,4176
182
182
  machineconfig/scripts/python/devops_helpers/cli_repos.py,sha256=qnpjSPM71p6vLgigIwItPo-XxR6iP9UaK7lxw3-CdfA,12505
183
- machineconfig/scripts/python/devops_helpers/cli_self.py,sha256=YA5w2n8lN5vDQaFHl3yJrmiwkdrt4RD2v-EiaCorXgo,6167
183
+ machineconfig/scripts/python/devops_helpers/cli_self.py,sha256=vfci6R--zTYYWpHiwJWe2AyCmSGDJ1vudYuTff19nB0,6167
184
184
  machineconfig/scripts/python/devops_helpers/cli_share_server.py,sha256=q9pFJ6AxPuygMr3onMNOKEuuQHbVE_6Qoyo7xRT5FX0,4196
185
185
  machineconfig/scripts/python/devops_helpers/cli_terminal.py,sha256=k_PzXaiGyE0vXr0Ii1XcJz2A7UvyPJrR31TRWt4RKRI,6019
186
186
  machineconfig/scripts/python/devops_helpers/cli_utils.py,sha256=G2RHnOvNfEWjxETZjXVu688xyLL-c0Zq22p24kXLLQ8,3487
@@ -192,7 +192,7 @@ machineconfig/scripts/python/devops_helpers/themes/choose_pwsh_theme.ps1,sha256=
192
192
  machineconfig/scripts/python/devops_helpers/themes/choose_wezterm_theme.py,sha256=pRXAGe2IpysYshsaF8CKEwHI8EGPtLcM8PtiAqM7vmM,3425
193
193
  machineconfig/scripts/python/env_manager/__init__.py,sha256=E4LAHbU1wo2dLjE36ntv8U7QNTe8TasujUAYK9SLvWk,6
194
194
  machineconfig/scripts/python/env_manager/path_manager_backend.py,sha256=ZVGlGJALhg7zNABDdwXxL7MFbL2BXPebObipXSLGbic,1552
195
- machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=fcv8JNlejk1OjeR-FLYW-7JGR116O3HunkYwwqzu0Kc,6932
195
+ machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=GcyhEppIyBllT3h14oW9dgvGPlTFih3yJsNSkx0S0_Y,6932
196
196
  machineconfig/scripts/python/helper_navigator/__init__.py,sha256=6YBy1l9ISjHE0LctVwSRMV_OFq29FOInwXFN0Ff7owM,758
197
197
  machineconfig/scripts/python/helper_navigator/command_builder.py,sha256=tMIonhYPWpdPGaiGPRg8JDCvyW0h2uxL15uL_JyWsnk,4617
198
198
  machineconfig/scripts/python/helper_navigator/command_detail.py,sha256=i4MdiCOVaXdRmLqr4K-F1Mk1u93bl5heIN97cRPCnzg,1692
@@ -221,7 +221,7 @@ machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py,sha25
221
221
  machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py,sha256=4MrlCVijbx7GQyAN9s5LDh-7heSjMXYrXdqiP6uC3ug,5378
222
222
  machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
223
223
  machineconfig/scripts/python/helpers_repos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
224
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=d6uEr7xkvpbv6Z4HvBzEfwiLFgRCTqMDj-DgJ66XEfg,9989
224
+ machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=aBTGjLYJGtR7miR932iDqaNS28EVcZKuxb-iT3j56Lw,9989
225
225
  machineconfig/scripts/python/helpers_repos/grource.py,sha256=oJj1-gqlkV3Z_BrIOXRmtzoXcuBl0xTYfulJ5D0srOc,14656
226
226
  machineconfig/scripts/python/helpers_repos/secure_repo.py,sha256=fW_GyHqWrpnf7nexHojfWHv4eLBa71IhVL_LSVMyGnE,1115
227
227
  machineconfig/scripts/python/nw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -229,7 +229,7 @@ machineconfig/scripts/python/nw/add_ssh_key.py,sha256=9JLmWu8pE7PAL5VuCFd19iVEdC
229
229
  machineconfig/scripts/python/nw/devops_add_identity.py,sha256=aPjcHbTLhxYwWYcandyAHdwuO15ZBu3fB82u6bI0tMQ,3773
230
230
  machineconfig/scripts/python/nw/devops_add_ssh_key.py,sha256=CkIl85hZLtG9k7yXLSzqi88YrilHV4hIUWHAPBwxWjw,8922
231
231
  machineconfig/scripts/python/nw/mount_drive,sha256=zemKofv7hOmRN_V3qK0q580GkfWw3VdikyVVQyiu8j8,3514
232
- machineconfig/scripts/python/nw/mount_nfs,sha256=Yhp5iY3MoGD1mGXAntIt7ng4cpa9Fi35wJZ_TXTBjtQ,1855
232
+ machineconfig/scripts/python/nw/mount_nfs,sha256=7BTPAgsrO8z-vpeNt6ByH97EXhK6CFlmatkekowgboM,1855
233
233
  machineconfig/scripts/python/nw/mount_nfs.py,sha256=lOMDY4RS7tx8gsCazVR5tNNwFbaRyO2PJlnwBCDQgCM,3573
234
234
  machineconfig/scripts/python/nw/mount_nw_drive,sha256=BqjGBCbwe5ZAsZDO3L0zHhh_gJfZy1CYOcqXA4Y-WkQ,2262
235
235
  machineconfig/scripts/python/nw/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
@@ -243,7 +243,7 @@ machineconfig/scripts/python/nw/wsl_windows_transfer.py,sha256=1ab9l-8MtAxofW5nG
243
243
  machineconfig/scripts/python/repos_helpers/action.py,sha256=M1Col8F4JEc20FCPSiELQ3PckbOL6i7YpxzfuAEtmSc,14894
244
244
  machineconfig/scripts/python/repos_helpers/clone.py,sha256=UULEG5xJuXlPGU0nqXH6U45jA9DOFqLw8B4iPytCwOQ,5471
245
245
  machineconfig/scripts/python/repos_helpers/count_lines.py,sha256=Q5c7b-DxvTlQmljoic7niTuiAVyFlwYvkVQ7uRJHiTo,16009
246
- machineconfig/scripts/python/repos_helpers/count_lines_frontend.py,sha256=w1BC0arKkTC0-cIa77grGA8A8fB3QMydkSuuCXCDbKA,607
246
+ machineconfig/scripts/python/repos_helpers/count_lines_frontend.py,sha256=dyPofy7TyphfmiR37u7AExgddlJvIQjBzhTcPUond9U,607
247
247
  machineconfig/scripts/python/repos_helpers/entrypoint.py,sha256=O6ges-eMnXroIi14PszUWGD1-ITP4T0x7hk060rFT1k,2810
248
248
  machineconfig/scripts/python/repos_helpers/record.py,sha256=FQo0swuJZOp0I2XGK-t1OQU4zJHmQ2z9zTpDD30Tmg4,11001
249
249
  machineconfig/scripts/python/repos_helpers/sync.py,sha256=CLLWy2n2gY9beXPF-mblOQ6R7cKoenkJjMiX7tHQsBk,3091
@@ -256,7 +256,7 @@ machineconfig/scripts/windows/fzfrga.bat,sha256=rU_KBMO6ii2EZ0akMnmDk9vpuhKSUZqk
256
256
  machineconfig/scripts/windows/mounts/mount_nfs.ps1,sha256=XrAdzpxE6a4OccSmWJ7YWHJTnsZK8uXnFE5j9GOPA20,2026
257
257
  machineconfig/scripts/windows/mounts/mount_nw.ps1,sha256=puxcfZc3ZCJerm8pj8OZGVoTYkhzp-h7oV-MrksSqIE,454
258
258
  machineconfig/scripts/windows/mounts/mount_smb.ps1,sha256=PzYWpIO9BpwXjdWlUQL9pnMRnOGNSkxfh4bHukJFme8,69
259
- machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=HxqA2SMXxBP6UAcjmzqaXWykPMXSxwvHspGRK3T5AJU,322
259
+ machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=nIWqGB25lr2XxpZ5INjsXWELzdIMsVbiLz21Lzhxqig,322
260
260
  machineconfig/scripts/windows/mounts/share_cloud.cmd,sha256=exD7JCdxw2LqVjw2MKCYHbVZlEqmelXtwnATng-dhJ4,1028
261
261
  machineconfig/scripts/windows/mounts/share_smb.ps1,sha256=U7x8ULYSjbgzTtiHNSKQuTaZ_apilDvkGV5Xm5hXk5M,384
262
262
  machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1,sha256=Wv-SLscdckV-1mG3p82VXKPY9zW3hgkRmcLUXIZ1daE,253
@@ -372,7 +372,7 @@ machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh,sha256=F5dbg0n9RHsKG
372
372
  machineconfig/setup_linux/ssh/openssh_all.sh,sha256=3dg6HEUFbHQOzLfSAtzK_D_GB8rGCCp_aBnxNdnidVc,824
373
373
  machineconfig/setup_linux/ssh/openssh_wsl.sh,sha256=1eeRGrloVB34K5z8yWVUMG5b9pV-WBfHgV9jqXiYgCQ,1398
374
374
  machineconfig/setup_linux/web_shortcuts/android.sh,sha256=gzep6bBhK7FCBvGcXK0fdJCtkSfBOftt0aFyDZq_eMs,68
375
- machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=Ex4EjD9SesujK1MrG03KaDS12dNPXzxJ9tAgWPoEFpY,441
375
+ machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=vpyg5Ffk2lbGsAEWWduuHYpWlV9NsieowWvzaqQ3cro,441
376
376
  machineconfig/setup_windows/__init__.py,sha256=NnSVZkIBoxoMgkj-_KAqGonH3YziBIWXOKDEcmNAGTY,386
377
377
  machineconfig/setup_windows/apps.ps1,sha256=dmZQZD4ZlNZo9jYkjIS3ag4qDAYZvaLysjmo9ELwBA4,11218
378
378
  machineconfig/setup_windows/uv.ps1,sha256=ukk1Abh-q-RfpoEqI2XTE2dcQJmHk0VFF6WqkK3TW8Q,350
@@ -382,12 +382,12 @@ machineconfig/setup_windows/others/power_options.ps1,sha256=c7Hn94jBD5GWF29CxMhm
382
382
  machineconfig/setup_windows/ssh/add-sshkey.ps1,sha256=qfPdqCpd9KP3VhH4ifsUm1Xvec7c0QVl4Wt8JIAm9HQ,1653
383
383
  machineconfig/setup_windows/ssh/add_identity.ps1,sha256=b8ZXpmNUSw3IMYvqSY7ClpdWPG39FS7MefoWnRhWN2U,506
384
384
  machineconfig/setup_windows/ssh/openssh-server.ps1,sha256=OMlYQdvuJQNxF5EILLPizB6BZAT3jAmDsv1WcVVxpFQ,2529
385
- machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=MTbHC3uw9bnGtcNp8K_TMtE32qJWajambQK9LMX5UPA,547
385
+ machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=iMYoIWVRSMI2AThvBhAzm_7myLf4Sc00PSGKMDcgRxM,547
386
386
  machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
387
387
  machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=ogxJnwpdcpH7N6dFJu95UCNoGYirZKQho_3X0F_hmXs,6791
388
388
  machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
389
389
  machineconfig/utils/accessories.py,sha256=W_9dLzjwNTW5JQk_pe3B2ijQ1nA2-8Kdg2r7VBtzgQs,4340
390
- machineconfig/utils/code.py,sha256=f0K5abTIBBurK5pSM_VRtW_npFjK18UvIG_BEyzOv40,8912
390
+ machineconfig/utils/code.py,sha256=l3Z6mRW1EKStw-aKbuYYzTA5nqJ5XFvFFTsmNvMaNo0,7545
391
391
  machineconfig/utils/installer.py,sha256=wNkX2r6dlZD9zmuIkBKj5AliNPfI9zVWgtu8XqgUVIg,10204
392
392
  machineconfig/utils/io.py,sha256=4dSieoqZO8Vvi4vW8lLoITDHBvmFp4dtl3kyeZHQ6Co,2528
393
393
  machineconfig/utils/links.py,sha256=KM6vIn3hag9FYEzLSHP5MAM9tU_RStw2mCq2_OvmmZA,23672
@@ -397,10 +397,10 @@ machineconfig/utils/options.py,sha256=vUO4Kej-vDOv64wHr2HNDyu6PATURpjd7xp6N8OOoJ
397
397
  machineconfig/utils/path_extended.py,sha256=WyJwoHnXdvSQQJ-yrxTX78FpqYmgVeKDYpNEB9UsRck,53223
398
398
  machineconfig/utils/path_helper.py,sha256=0e3Xh3BAEv27oqcezNeVLHJllGmLEgLH4T1l90m-650,8014
399
399
  machineconfig/utils/procs.py,sha256=rw8LR8MjGgvtrpcgxb3hudq2B9fkkpYUXe9x5-FgHuc,10694
400
- machineconfig/utils/scheduler.py,sha256=Uk6VT-gG7cOevnsKRcQPobTdr5zUZF0kLkdieByReMU,15749
400
+ machineconfig/utils/scheduler.py,sha256=-U6MbET_FLXxk6nGg6IWsuhZ6e_iF0mqvm6uQUrvS4Q,14739
401
401
  machineconfig/utils/scheduling.py,sha256=RF1iXJpqf4Dg18jdZWtBixz97KAHC6VKYqTFSpdLWuc,11188
402
402
  machineconfig/utils/source_of_truth.py,sha256=ZAnCRltiM07ig--P6g9_6nEAvNFC4X4ERFTVcvpIYsE,764
403
- machineconfig/utils/ssh.py,sha256=5OpuO7itcnOoPsQljHvEEp6Y_Y5bk-5AXih_xXiipNo,39079
403
+ machineconfig/utils/ssh.py,sha256=-TYtFTKc03CkncLdHjnJtZodUOUyXK-uX-eWWiwnETI,39079
404
404
  machineconfig/utils/terminal.py,sha256=IlmOByfQG-vjhaFFxxzU5rWzP5_qUzmalRfuey3PAmc,11801
405
405
  machineconfig/utils/tst.py,sha256=6u1GI49NdcpxH2BYGAusNfY5q9G_ytCGVzFM5b6HYpM,674
406
406
  machineconfig/utils/upgrade_packages.py,sha256=mSFyKvB3JhHte_x1dtmEgrJZCAXgTUQoaJUSx1OXQ3Y,4145
@@ -429,8 +429,8 @@ machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoS
429
429
  machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
430
430
  machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
431
431
  machineconfig/utils/ssh_utils/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
432
- machineconfig-6.45.dist-info/METADATA,sha256=5dnpaf9gZMXVTZ8jEEFtypLK_a7TKdAuepetjUIAEAA,2928
433
- machineconfig-6.45.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
434
- machineconfig-6.45.dist-info/entry_points.txt,sha256=M0jwN_brZdXWhmNVeXLvdKxfkv8WhhXFZYcuKBA9qnk,418
435
- machineconfig-6.45.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
436
- machineconfig-6.45.dist-info/RECORD,,
432
+ machineconfig-6.47.dist-info/METADATA,sha256=A1ZSAqZTXum3KMBDaJ_sTHMz5HUbJNsnZiWZmkHP4IY,2928
433
+ machineconfig-6.47.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
434
+ machineconfig-6.47.dist-info/entry_points.txt,sha256=M0jwN_brZdXWhmNVeXLvdKxfkv8WhhXFZYcuKBA9qnk,418
435
+ machineconfig-6.47.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
436
+ machineconfig-6.47.dist-info/RECORD,,