machineconfig 6.91__py3-none-any.whl → 6.92__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 (24) hide show
  1. machineconfig/jobs/installer/custom/hx.py +9 -8
  2. machineconfig/profile/create_links.py +1 -1
  3. machineconfig/profile/create_links_export.py +2 -2
  4. machineconfig/scripts/python/env_manager/path_manager_tui.py +1 -1
  5. machineconfig/scripts/python/helpers_devops/cli_config.py +3 -3
  6. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +1 -1
  7. machineconfig/scripts/python/helpers_devops/cli_nw.py +11 -1
  8. machineconfig/scripts/python/helpers_devops/cli_self.py +3 -3
  9. machineconfig/scripts/python/helpers_devops/cli_share_server.py +84 -0
  10. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +1 -1
  11. machineconfig/scripts/python/nw/mount_nfs +1 -1
  12. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +1 -1
  13. machineconfig/settings/marimo/marimo.toml +1 -1
  14. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  15. machineconfig/settings/shells/starship/starship.toml +16 -0
  16. machineconfig/setup_linux/web_shortcuts/interactive.sh +1 -1
  17. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +1 -1
  18. machineconfig/utils/links.py +12 -5
  19. machineconfig/utils/ssh.py +1 -1
  20. {machineconfig-6.91.dist-info → machineconfig-6.92.dist-info}/METADATA +1 -1
  21. {machineconfig-6.91.dist-info → machineconfig-6.92.dist-info}/RECORD +24 -23
  22. {machineconfig-6.91.dist-info → machineconfig-6.92.dist-info}/WHEEL +0 -0
  23. {machineconfig-6.91.dist-info → machineconfig-6.92.dist-info}/entry_points.txt +0 -0
  24. {machineconfig-6.91.dist-info → machineconfig-6.92.dist-info}/top_level.txt +0 -0
@@ -20,20 +20,21 @@ config_dict: InstallerData = {
20
20
  "doc": "Helix is a post-modern modal text editor.",
21
21
  "fileNamePattern": {
22
22
  "amd64": {
23
- "linux": "hx-linux-amd64.tar.xz",
24
- "macos": "hx-macos-amd64.tar.xz",
25
- "windows": "hx-windows-amd64.zip",
23
+ "linux": "helix-{version}-x86_64-linux.tar.xz",
24
+ "macos": "helix-{version}-x86_64-macos.tar.xz",
25
+ "windows": "helix-{version}-x86_64-windows.zip",
26
26
  },
27
27
  "arm64": {
28
- "linux": "hx-linux-arm64.tar.xz",
29
- "macos": "hx-macos-arm64.tar.xz",
30
- "windows": "hx-windows-arm64.zip",
28
+ "linux": "helix-{version}-arm64-linux.tar.xz",
29
+ "macos": "helix-{version}-arm64-macos.tar.xz",
30
+ "windows": "helix-{version}-arm64-windows.zip",
31
31
  },
32
32
  },
33
33
  }
34
34
 
35
35
 
36
- def main(version: Optional[str], install_lib: bool = False):
36
+ def main(installer_data: InstallerData, version: Optional[str], install_lib: bool = False):
37
+ _ = installer_data
37
38
  console = Console()
38
39
 
39
40
  console.print(Panel(f"HELIX EDITOR INSTALLER 🧬\nPlatform: {platform.system()}\nVersion: {'latest' if version is None else version}", title="Installer", expand=False))
@@ -137,4 +138,4 @@ def main(version: Optional[str], install_lib: bool = False):
137
138
 
138
139
 
139
140
  if __name__ == "__main__":
140
- main(version=None)
141
+ pass
@@ -79,7 +79,7 @@ def read_mapper() -> MapperFileData:
79
79
 
80
80
 
81
81
  def apply_mapper(mapper_data: dict[str, list[ConfigMapper]],
82
- on_conflict: Literal["throwError", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"],
82
+ on_conflict: Literal["throw-error", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"],
83
83
  method: Literal["symlink", "copy"]
84
84
  ):
85
85
  operation_records: list[OperationRecord] = []
@@ -4,7 +4,7 @@ from typing import Optional, Literal, Annotated
4
4
 
5
5
 
6
6
  def main_public_from_parser(method: Annotated[Literal["symlink", "copy"], typer.Option(..., help="Method to use for setting up the config file.")],
7
- on_conflict: Annotated[Literal["throwError", "overwriteDefaultPath", "backupDefaultPath"], typer.Option(..., help="Action to take on conflict")],
7
+ on_conflict: Annotated[Literal["throw-error", "overwriteDefaultPath", "backupDefaultPath"], typer.Option(..., help="Action to take on conflict")],
8
8
  which: Annotated[Optional[str], typer.Option(..., help="Specific items to process")] = None,
9
9
  interactive: Annotated[bool, typer.Option(..., help="Run in interactive mode")] = False):
10
10
  """Terminology:
@@ -32,7 +32,7 @@ def main_public_from_parser(method: Annotated[Literal["symlink", "copy"], typer.
32
32
 
33
33
 
34
34
  def main_private_from_parser(method: Annotated[Literal["symlink", "copy"], typer.Option(..., help="Method to use for linking files")],
35
- on_conflict: Annotated[Literal["throwError", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"], typer.Option(..., help="Action to take on conflict")] = "throwError",
35
+ on_conflict: Annotated[Literal["throw-error", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"], typer.Option(..., help="Action to take on conflict")] = "throw-error",
36
36
  which: Annotated[Optional[str], typer.Option(..., help="Specific items to process")] = None,
37
37
  interactive: Annotated[bool, typer.Option(..., help="Run in interactive mode")] = False):
38
38
  from machineconfig.profile.create_links import ConfigMapper, read_mapper
@@ -2,7 +2,7 @@
2
2
  # /// script
3
3
  # requires-python = ">=3.13"
4
4
  # dependencies = [
5
- # "machineconfig>=6.91",
5
+ # "machineconfig>=6.92",
6
6
  # "textual",
7
7
  # "pyperclip",
8
8
  # ]
@@ -7,7 +7,7 @@ import typer
7
7
 
8
8
 
9
9
  def private(method: Annotated[Literal["symlink", "copy"], typer.Option(..., "--method", "-m", help="Method to use for linking files")],
10
- on_conflict: Annotated[Literal["throwError", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"], typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throwError",
10
+ on_conflict: Annotated[Literal["throw-error", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"], typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
11
11
  which: Annotated[Optional[str], typer.Option(..., "--which", "-w", help="Specific items to process")] = None,
12
12
  interactive: Annotated[bool, typer.Option(..., "--interactive", "-ia", help="Run in interactive mode")] = False):
13
13
  """🔗 Manage private configuration files."""
@@ -15,7 +15,7 @@ def private(method: Annotated[Literal["symlink", "copy"], typer.Option(..., "--m
15
15
  create_links_export.main_private_from_parser(method=method, on_conflict=on_conflict, which=which, interactive=interactive)
16
16
 
17
17
  def public(method: Annotated[Literal["symlink", "copy"], typer.Option(..., "--method", "-m", help="Method to use for setting up the config file.")],
18
- on_conflict: Annotated[Literal["throwError", "overwriteDefaultPath", "backupDefaultPath"], typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throwError",
18
+ on_conflict: Annotated[Literal["throw-error", "overwriteDefaultPath", "backupDefaultPath"], typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
19
19
  which: Annotated[Optional[str], typer.Option(..., "--which", "-w", help="Specific items to process")] = None,
20
20
  interactive: Annotated[bool, typer.Option(..., "--interactive", "-ia", help="Run in interactive mode")] = False):
21
21
  """🔗 Manage public configuration files."""
@@ -46,7 +46,7 @@ def path():
46
46
  uv_with = ["textual"]
47
47
  uv_project_dir = None
48
48
  if not Path.home().joinpath("code/machineconfig").exists():
49
- uv_with.append("machineconfig>=6.91")
49
+ uv_with.append("machineconfig>=6.92")
50
50
  else:
51
51
  uv_project_dir = str(Path.home().joinpath("code/machineconfig"))
52
52
  run_shell_script(get_uv_command_executing_python_script(python_script=path.read_text(encoding="utf-8"), uv_with=uv_with, uv_project_dir=uv_project_dir)[0])
@@ -34,7 +34,7 @@ def main(
34
34
  dest_path.mkdir(parents=True, exist_ok=True)
35
35
  new_path = dest_path.joinpath(orig_path.name)
36
36
 
37
- symlink_map(config_file_default_path=orig_path, self_managed_config_file_path=new_path, on_conflict="throwError")
37
+ symlink_map(config_file_default_path=orig_path, self_managed_config_file_path=new_path, on_conflict="throw-error")
38
38
 
39
39
  console.print(
40
40
  Panel(
@@ -104,8 +104,18 @@ def get_app():
104
104
  nw_apps = typer.Typer(help="🔐 [n] Network subcommands", no_args_is_help=True, add_help_option=False, add_completion=False)
105
105
  nw_apps.command(name="share-terminal", help="📡 [t] Share terminal via web browser")(cli_terminal.main)
106
106
  nw_apps.command(name="t", help="Share terminal via web browser", hidden=True)(cli_terminal.main)
107
+
107
108
  nw_apps.command(name="share-server", help="🌐 [s] Start local/global server to share files/folders via web browser", no_args_is_help=True)(cli_share_server.main)
108
109
  nw_apps.command(name="s", help="Start local/global server to share files/folders via web browser", hidden=True, no_args_is_help=True)(cli_share_server.main)
110
+
111
+ # app = cli_share_server.get_share_file_app()
112
+ # nw_apps.add_typer(app, name="share-file", help="📁 [f] Share a file via relay server", no_args_is_help=True)
113
+ # nw_apps.add_typer(app, name="f", help="Share a file via relay server", hidden=True, no_args_is_help=True)
114
+ nw_apps.command(name="send", no_args_is_help=True, hidden=False, help="📁 [sx] send files from here.")(cli_share_server.share_file_send)
115
+ nw_apps.command(name="sx", no_args_is_help=True, hidden=True, help="📁 [sx] send files from here.")(cli_share_server.share_file_send)
116
+ nw_apps.command(name="receive", no_args_is_help=True, hidden=False, help="📁 [rx] receive files to here.")(cli_share_server.share_file_receive)
117
+ nw_apps.command(name="rx", no_args_is_help=True, hidden=True, help="📁 [rx] receive files to here.")(cli_share_server.share_file_receive)
118
+
109
119
  nw_apps.command(name="install-ssh-server", help="📡 [i] Install SSH server")(install_ssh_server)
110
120
  nw_apps.command(name="i", help="Install SSH server", hidden=True)(install_ssh_server)
111
121
  nw_apps.command(name="add-ssh-key", help="🔑 [k] Add SSH public key to this machine", no_args_is_help=True)(add_ssh_key)
@@ -117,7 +127,7 @@ def get_app():
117
127
  nw_apps.command(name="debug-ssh", help="🐛 [d] Debug SSH connection")(debug_ssh)
118
128
  nw_apps.command(name="d", help="Debug SSH connection", hidden=True)(debug_ssh)
119
129
 
120
- nw_apps.command(name="wifi-select", no_args_is_help=True, help="[w] WiFi connection utility.")(wifi_select)
130
+ nw_apps.command(name="wifi-select", no_args_is_help=True, help="📶 WiFi connection utility.")(wifi_select)
121
131
  nw_apps.command(name="w", no_args_is_help=True, hidden=True)(wifi_select)
122
132
 
123
133
  return nw_apps
@@ -48,9 +48,9 @@ def install(no_copy_assets: Annotated[bool, typer.Option("--no-assets-copy", "-n
48
48
  else:
49
49
  import platform
50
50
  if platform.system() == "Windows":
51
- run_shell_script(r"""& "$HOME\.local\bin\uv.exe" tool install --upgrade "machineconfig>=6.91" """)
51
+ run_shell_script(r"""& "$HOME\.local\bin\uv.exe" tool install --upgrade "machineconfig>=6.92" """)
52
52
  else:
53
- run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.91" """)
53
+ run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.92" """)
54
54
  from machineconfig.profile.create_shell_profile import create_default_shell_profile
55
55
  if not no_copy_assets:
56
56
  create_default_shell_profile() # involves copying assets too
@@ -75,7 +75,7 @@ def navigate():
75
75
  path = Path(navigator.__file__).resolve().parent.joinpath("devops_navigator.py")
76
76
  from machineconfig.utils.code import run_shell_script
77
77
  if Path.home().joinpath("code/machineconfig").exists(): executable = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with textual"""
78
- else: executable = """--with "machineconfig>=6.91,textual" """
78
+ else: executable = """--with "machineconfig>=6.92,textual" """
79
79
  run_shell_script(f"""uv run {executable} {path}""")
80
80
 
81
81
 
@@ -96,6 +96,90 @@ def main(
96
96
  p.wait()
97
97
 
98
98
 
99
+ def share_file_send(path: Annotated[str, typer.Argument(help="Path to the file or directory to send")]) -> None:
100
+ """Send a file using croc with relay server."""
101
+ from machineconfig.utils.installer_utils.installer import install_if_missing
102
+ install_if_missing(which="croc")
103
+ # Get relay server IP from environment or use default
104
+ import socket
105
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
106
+ s.connect(('8.8.8.8',80))
107
+ local_ip_v4 = s.getsockname()[0]
108
+ s.close()
109
+ relay_port = "443"
110
+ import subprocess
111
+ cmd = f"croc --relay {local_ip_v4}:{relay_port} send {path}"
112
+ typer.echo(f"🚀 Sending file: {path}. Use: devops network f")
113
+ subprocess.run(cmd, shell=True)
114
+
115
+
116
+ def share_file_receive(code: Annotated[str, typer.Argument(help="Receive code (format: '7121-donor-olympic-bicycle' or full relay string)")]) -> None:
117
+ """Receive a file using croc with relay server.
118
+ On the other computer run:
119
+ (For Windows)
120
+ croc --relay 10.17.62.206:443 0782-paris-pencil-torso
121
+ (For Linux/macOS)
122
+ CROC_SECRET="0782-paris-pencil-torso" croc --relay 10.17.62.206:443 """
123
+ from machineconfig.utils.installer_utils.installer import install_if_missing
124
+ install_if_missing(which="croc")
125
+ import subprocess
126
+ import os
127
+ import platform
128
+ import re
129
+
130
+ env = os.environ.copy()
131
+ is_windows = platform.system() == "Windows"
132
+
133
+ # Parse input to extract components
134
+ secret_code: str | None = None
135
+ relay_server: str | None = None
136
+
137
+ # Check if it's Linux/macOS format with CROC_SECRET
138
+ linux_match = re.match(r'CROC_SECRET\s*=\s*["\']?([^"\']+)["\']?\s+croc\s+--relay\s+(\S+)(?:\s+--yes)?', code)
139
+ if linux_match:
140
+ secret_code = linux_match.group(1)
141
+ relay_server = linux_match.group(2)
142
+ else:
143
+ # Check if it's Windows format or partial command
144
+ windows_match = re.match(r'(?:croc\s+)?(?:--relay\s+(\S+)\s+)?([a-z0-9-]+(?:-[a-z0-9-]+){3})(?:\s+--yes)?', code, re.IGNORECASE)
145
+ if windows_match:
146
+ relay_server = windows_match.group(1)
147
+ secret_code = windows_match.group(2)
148
+ else:
149
+ # Fallback: treat entire code as secret if it looks like a code
150
+ code_pattern = r'^[a-z0-9-]+(?:-[a-z0-9-]+){3}$'
151
+ if re.match(code_pattern, code.strip(), re.IGNORECASE):
152
+ secret_code = code.strip()
153
+
154
+ if not secret_code:
155
+ raise ValueError(f"Could not parse croc code from input: {code}")
156
+
157
+ # Build the appropriate command for current OS
158
+ if is_windows:
159
+ # Windows format: croc --relay server:port secret-code --yes
160
+ cmd = "croc"
161
+ if relay_server:
162
+ cmd += f" --relay {relay_server}"
163
+ cmd += f" {secret_code} --yes"
164
+ else:
165
+ # Linux/macOS format: CROC_SECRET="secret-code" croc --relay server:port --yes
166
+ env["CROC_SECRET"] = secret_code
167
+ cmd = "croc"
168
+ if relay_server:
169
+ cmd += f" --relay {relay_server}"
170
+ cmd += " --yes"
171
+
172
+ subprocess.run(cmd, shell=True, env=env)
173
+
174
+
175
+ def get_share_file_app():
176
+ app = typer.Typer(name="share-file", help="Send or receive files using croc with relay server.")
177
+ app.command(name="send", no_args_is_help=True, hidden=False, help="[s] send files from here.")(share_file_send)
178
+ app.command(name="s", no_args_is_help=True, hidden=True, help="[s] send files from here.")(share_file_send)
179
+ app.command(name="receive", no_args_is_help=True, hidden=False, help="[r] receive files to here.")(share_file_receive)
180
+ app.command(name="r", no_args_is_help=True, hidden=True, help="[r] receive files to here.")(share_file_receive)
181
+ return app
182
+
99
183
  def main_with_parser():
100
184
  typer.run(main)
101
185
 
@@ -80,7 +80,7 @@ git pull originEnc master
80
80
  uv_project_dir = f"""{str(Path.home().joinpath("code/machineconfig"))}"""
81
81
  uv_with = None
82
82
  else:
83
- uv_with = ["machineconfig>=6.91"]
83
+ uv_with = ["machineconfig>=6.92"]
84
84
  uv_project_dir = None
85
85
 
86
86
  import tempfile
@@ -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.91" python -m machineconfig.scripts.python.mount_nfs
8
+ uv run --python 3.14 --with "machineconfig>=6.92" 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."
@@ -7,7 +7,7 @@ $user = ''
7
7
  $sharePath = ''
8
8
  $driveLetter = ''
9
9
 
10
- uv run --python 3.14 --with "machineconfig>=6.91" python -m machineconfig.scripts.python.mount_ssh
10
+ uv run --python 3.14 --with "machineconfig>=6.92" 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
@@ -64,7 +64,7 @@ presets = []
64
64
  [experimental]
65
65
 
66
66
  [snippets]
67
- custom_paths = []
67
+ custom_paths = ["/home/alex/code/machineconfig/src/machineconfig/settings/marimo/snippets"]
68
68
  include_default_snippets = true
69
69
 
70
70
  [save]
@@ -0,0 +1,34 @@
1
+ import marimo
2
+ from typing import Any
3
+ from types import FunctionType
4
+
5
+ app = marimo.App(width="full")
6
+
7
+ @app.cell(hide_code=True)
8
+ def _(mo: Any):
9
+ mo.md(r"""# Globalize Lambda to Python Script""")
10
+ return
11
+
12
+
13
+ @app.cell
14
+ def _(func: FunctionType):
15
+ # Your snippet code
16
+ from machineconfig.utils.meta import lambda_to_python_script
17
+ exec(
18
+ lambda_to_python_script(
19
+ lambda: func(),
20
+ in_global=True,
21
+ import_module=False,
22
+ ),
23
+ )
24
+ return
25
+
26
+
27
+ @app.cell
28
+ def _():
29
+ import marimo as mo
30
+ return (mo,)
31
+
32
+
33
+ if __name__ == "__main__":
34
+ app.run()
@@ -56,3 +56,19 @@ nu_indicator = '󰟆'
56
56
  unknown_indicator = 'mystery shell'
57
57
  style = 'cyan bold'
58
58
  disabled = false
59
+
60
+
61
+ [git_branch]
62
+ disabled = true
63
+
64
+ [git_commit]
65
+ disabled = true
66
+
67
+ [git_state]
68
+ disabled = true
69
+
70
+ [git_status]
71
+ disabled = true
72
+
73
+ [git_metrics]
74
+ disabled = true
@@ -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.91" mcfg "$@"
4
+ "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=6.92" 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.91" mcfg $args
5
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=6.92" mcfg $args
6
6
  }
7
7
  function d { mcfg devops @args }
8
8
  function c { mcfg cloud @args }
@@ -96,14 +96,14 @@ def build_links(target_paths: list[tuple[PLike, str]], repo_root: PLike):
96
96
 
97
97
 
98
98
  def symlink_map(config_file_default_path: PathExtended, self_managed_config_file_path: PathExtended,
99
- on_conflict: Literal["throwError", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"]
99
+ on_conflict: Literal["throw-error", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"]
100
100
  ) -> OperationResult:
101
101
  """helper function. creates a symlink from `config_file_default_path` to `self_managed_config_file_path`.
102
102
 
103
103
  Returns a dict with 'action' and 'details' keys describing what was done.
104
104
 
105
105
  on_conflict strategies:
106
- - throwError: Raise exception when files differ
106
+ - throw-error: Raise exception when files differ
107
107
  - overwriteSelfManaged: Delete self_managed_config_file_path (self-managed), move config_file_default_path to self_managed_config_file_path, create symlink
108
108
  - backupSelfManaged: Backup self_managed_config_file_path (self-managed), move config_file_default_path to self_managed_config_file_path, create symlink
109
109
  - overwriteDefaultPath: Delete config_file_default_path (default path), create symlink to self_managed_config_file_path
@@ -162,7 +162,14 @@ def symlink_map(config_file_default_path: PathExtended, self_managed_config_file
162
162
  config_file_default_path.delete(sure=True)
163
163
  else:
164
164
  # Files are different, use on_conflict strategy
165
- if on_conflict == "throwError":
165
+ if on_conflict == "throw-error":
166
+ import subprocess
167
+ command = f"""delta --side-by-side "{config_file_default_path}" "{self_managed_config_file_path}" """
168
+ try:
169
+ console.print(Panel(f"🆘 CONFLICT DETECTED | Showing diff between {config_file_default_path} and {self_managed_config_file_path}", title="Conflict Detected", expand=False))
170
+ subprocess.run(command, shell=True, check=True)
171
+ except Exception:
172
+ console.print(Panel("⚠️ Could not show diff using 'delta'. Please install 'delta' for better diff visualization.", title="Delta Not Found", expand=False))
166
173
  raise RuntimeError(f"Conflict detected: {config_file_default_path} and {self_managed_config_file_path} both exist with different content")
167
174
  elif on_conflict == "overwriteSelfManaged":
168
175
  action_taken = "backing_up_target"
@@ -235,7 +242,7 @@ def symlink_map(config_file_default_path: PathExtended, self_managed_config_file
235
242
  return {"action": action_taken, "details": details}
236
243
 
237
244
 
238
- def copy_map(config_file_default_path: PathExtended, self_managed_config_file_path: PathExtended, on_conflict: Literal["throwError", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"]) -> OperationResult:
245
+ def copy_map(config_file_default_path: PathExtended, self_managed_config_file_path: PathExtended, on_conflict: Literal["throw-error", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"]) -> OperationResult:
239
246
  config_file_default_path = PathExtended(config_file_default_path).expanduser().absolute()
240
247
  self_managed_config_file_path = PathExtended(self_managed_config_file_path).expanduser().absolute()
241
248
 
@@ -283,7 +290,7 @@ def copy_map(config_file_default_path: PathExtended, self_managed_config_file_pa
283
290
  else:
284
291
  # Files are different, use on_conflict strategy
285
292
  match on_conflict:
286
- case "throwError":
293
+ case "throw-error":
287
294
  raise RuntimeError(f"Conflict detected: {config_file_default_path} and {self_managed_config_file_path} both exist with different content")
288
295
  case "overwriteSelfManaged":
289
296
  action_taken = "backing_up_target"
@@ -8,7 +8,7 @@ from machineconfig.utils.terminal import Response
8
8
  from machineconfig.utils.accessories import pprint, randstr
9
9
  from machineconfig.utils.meta import lambda_to_python_script
10
10
  UV_RUN_CMD = "$HOME/.local/bin/uv run" if platform.system() != "Windows" else """& "$env:USERPROFILE/.local/bin/uv" run"""
11
- MACHINECONFIG_VERSION = "machineconfig>=6.91"
11
+ MACHINECONFIG_VERSION = "machineconfig>=6.92"
12
12
  DEFAULT_PICKLE_SUBDIR = "tmp_results/tmp_scripts/ssh"
13
13
 
14
14
  class SSH:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machineconfig
3
- Version: 6.91
3
+ Version: 6.92
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -55,7 +55,7 @@ machineconfig/jobs/installer/installer_data.json,sha256=hF8J7-jMOZCOSFMUuko9nIsF
55
55
  machineconfig/jobs/installer/package_groups.py,sha256=CvSJogQgnz5HZfGS9DoCoPfmv0qUinLfh76zw4x58Q8,5262
56
56
  machineconfig/jobs/installer/custom/boxes.py,sha256=ws8QRbDn48oKhbQntr54I0nSfkwINbprjTy0HOpuX40,1974
57
57
  machineconfig/jobs/installer/custom/gh.py,sha256=gn7TUSrsLx7uqFqj1Z-iYglS0EYBSgtJ9jWHxaJIfXM,4119
58
- machineconfig/jobs/installer/custom/hx.py,sha256=YQClQXqWtGvon8BLFGf1Fp20JPkHgZeEZ6ebmCJQQfI,5838
58
+ machineconfig/jobs/installer/custom/hx.py,sha256=QoTdAtr1AoqQO2bJqyVAZY8kjyWzVBbtUTj6hSd1wOY,5959
59
59
  machineconfig/jobs/installer/custom_dev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
60
  machineconfig/jobs/installer/custom_dev/alacritty.py,sha256=STXertp5pE6VVhcjAfZSKBxAC94S2HAzas646jwd4ow,2754
61
61
  machineconfig/jobs/installer/custom_dev/brave.py,sha256=kHgGRwgKrvpIlGzmdnWO6HJnSrnj8RlBEV_1Zz4s_Hw,2829
@@ -94,8 +94,8 @@ machineconfig/profile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
94
94
  machineconfig/profile/backup.toml,sha256=Hb25sIdKVvLqOF62NgiOpGZxd45I6IhsNHu623RtfQQ,766
95
95
  machineconfig/profile/bash_shell_profiles.md,sha256=mio0xkMTwO-F3fikWIfgcdQaPCmQrmkxJMNtZsTe9TI,514
96
96
  machineconfig/profile/create_helper.py,sha256=_iNeuwmcEGTx6sf_f40JKHfOCuJRZQRpyE8Fo_3Q6bI,1519
97
- machineconfig/profile/create_links.py,sha256=K7T2bq08GZP9fo2NzCOE0pojAgQDe0Ofe7fNfbQlQpw,14219
98
- machineconfig/profile/create_links_export.py,sha256=6LW4ZzHhQaox6W-rAuw3_gENTVKmOXA8_JfVDA-Mfws,3294
97
+ machineconfig/profile/create_links.py,sha256=Zz9gDtL1C33uQdBzXLMPWq8-7_OklyPQ3FQRsueWO-k,14220
98
+ machineconfig/profile/create_links_export.py,sha256=n5GKQZGd0YytW_YVuau_SL7CTDWuNEe4O9x1yEsHGv8,3297
99
99
  machineconfig/profile/create_shell_profile.py,sha256=fib3YOj4QMV4dy7ysJtSzner1x-0nGtnGvnTKGyq578,10280
100
100
  machineconfig/profile/mapper.toml,sha256=CGGKi4VbRo1-AuHU7w1g94NbAys0pxn6fI-2l-lUmY0,12469
101
101
  machineconfig/profile/records/generic/shares.toml,sha256=FduDztfyQtZcr5bfx-RSKhEEweweQSWfVXkKWnx8hCY,143
@@ -162,7 +162,7 @@ machineconfig/scripts/python/ai/solutions/opencode/opencode.json,sha256=nahHKRw1
162
162
  machineconfig/scripts/python/ai/solutions/opencode/opencode.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
163
163
  machineconfig/scripts/python/env_manager/__init__.py,sha256=E4LAHbU1wo2dLjE36ntv8U7QNTe8TasujUAYK9SLvWk,6
164
164
  machineconfig/scripts/python/env_manager/path_manager_backend.py,sha256=ZVGlGJALhg7zNABDdwXxL7MFbL2BXPebObipXSLGbic,1552
165
- machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=NF37zll-rbDfognd-EAkGam9Rtfo0JItpCy1w_19BXs,6932
165
+ machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=OeBwVcNEx17Fh7ARc4hFCEC4kdzqSfWyyO6hZ_dbGnw,6932
166
166
  machineconfig/scripts/python/helpers_agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
167
  machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py,sha256=YD6-rtudHNip8tx85amSmOZZIHBP9khq4az3dF41j6U,5934
168
168
  machineconfig/scripts/python/helpers_agents/fire_agents_help_search.py,sha256=qIfSS_su2YJ1Gb0_lu4cbjlJlYMBw0v52NTGiSrGjk8,2991
@@ -192,13 +192,13 @@ machineconfig/scripts/python/helpers_croshell/start_slidev.py,sha256=HfJReOusTPh
192
192
  machineconfig/scripts/python/helpers_croshell/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
193
193
  machineconfig/scripts/python/helpers_croshell/viewer_template.py,sha256=ve3Q1-iKhCLc0VJijKvAeOYp2xaFOeIOC_XW956GWCc,3944
194
194
  machineconfig/scripts/python/helpers_devops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
195
- machineconfig/scripts/python/helpers_devops/cli_config.py,sha256=GySS823HDWtje06xdFaOfoN92VU1QJtvsHWR_6bAONA,7218
196
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py,sha256=fluxRtD6hlbh131_RmeKr2Dy8tZpeC4H9-wp2sYt0dM,2486
195
+ machineconfig/scripts/python/helpers_devops/cli_config.py,sha256=QygQk1aH_n1vzLMmMcsXGsBtQu0F3aY0CTrW9wmAH9A,7222
196
+ machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py,sha256=dduLPmaxOU9eOOy76QTG8Yzi5WQdewbiJ8X615Z19wk,2487
197
197
  machineconfig/scripts/python/helpers_devops/cli_data.py,sha256=79Xvx7YnbueruEnl69hrDg2AhVxf_zCUdlVcKfeMGyQ,1774
198
- machineconfig/scripts/python/helpers_devops/cli_nw.py,sha256=edeZPhQrm-hvOx80TPt9GNZXlXq9kkTaRSZSpNdku8w,6441
198
+ machineconfig/scripts/python/helpers_devops/cli_nw.py,sha256=9NcVJvPYaUDtmI_DSKthZxR4emMBeNWVM_M5f0YR8EQ,7302
199
199
  machineconfig/scripts/python/helpers_devops/cli_repos.py,sha256=Xwkv1adqHZvTfRSPWiqSK3PZ1XADyx3llw_YkbxaKyE,12505
200
- machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=mh_m_6kE1f1QcSQPbKUVhGKbTH4BJztq-kZd5eLciDs,6621
201
- machineconfig/scripts/python/helpers_devops/cli_share_server.py,sha256=q9pFJ6AxPuygMr3onMNOKEuuQHbVE_6Qoyo7xRT5FX0,4196
200
+ machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=ijJgwxakmij26kcir7Zem54UHiD2PEoFFhmcj6OC9XM,6621
201
+ machineconfig/scripts/python/helpers_devops/cli_share_server.py,sha256=reQNORPFuqGPho_5pcXPRwKp-7lcKk4u4GqwkTW_KFM,7859
202
202
  machineconfig/scripts/python/helpers_devops/cli_terminal.py,sha256=k_PzXaiGyE0vXr0Ii1XcJz2A7UvyPJrR31TRWt4RKRI,6019
203
203
  machineconfig/scripts/python/helpers_devops/cli_utils.py,sha256=B9pnosujOxZLpwzJO4YAqeO-2rvvOFIZgrUwGREZXfM,11118
204
204
  machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py,sha256=Dn8luB6QJzxKiiFSC-NMqiYddWZoca3A8eOjMYZDzTc,5598
@@ -225,7 +225,7 @@ machineconfig/scripts/python/helpers_navigator/search_bar.py,sha256=kDi8Jhxap8wd
225
225
  machineconfig/scripts/python/helpers_repos/action.py,sha256=8je051kpGZ7A_GRsQyWKhPZ8xVW7tSm4bnPu6VjxaXk,9755
226
226
  machineconfig/scripts/python/helpers_repos/action_helper.py,sha256=XRCtkGkNrxauqUd9qkxtfJt02Mx2gejSYDLL0jyWn24,6176
227
227
  machineconfig/scripts/python/helpers_repos/clone.py,sha256=UULEG5xJuXlPGU0nqXH6U45jA9DOFqLw8B4iPytCwOQ,5471
228
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=9ZQKGPRs_ZB_eUeoV0uZKuZnDbHjoabhKoBGNcaFRB8,10450
228
+ machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=YpRZ7WxCVINHUglX7VMukOEmty20x1xGFb6Sl554JNk,10450
229
229
  machineconfig/scripts/python/helpers_repos/count_lines.py,sha256=Q5c7b-DxvTlQmljoic7niTuiAVyFlwYvkVQ7uRJHiTo,16009
230
230
  machineconfig/scripts/python/helpers_repos/count_lines_frontend.py,sha256=vSDtrF4829jziwp6WZmGt9G8MJ9jY4hfXqtf0vhkYSE,607
231
231
  machineconfig/scripts/python/helpers_repos/entrypoint.py,sha256=WYEFGUJp9HWImlFjbs_hiFZrUqM_KEYm5VvSUjWd04I,2810
@@ -241,7 +241,7 @@ machineconfig/scripts/python/nw/add_ssh_key.py,sha256=9JLmWu8pE7PAL5VuCFd19iVEdC
241
241
  machineconfig/scripts/python/nw/devops_add_identity.py,sha256=aPjcHbTLhxYwWYcandyAHdwuO15ZBu3fB82u6bI0tMQ,3773
242
242
  machineconfig/scripts/python/nw/devops_add_ssh_key.py,sha256=CkIl85hZLtG9k7yXLSzqi88YrilHV4hIUWHAPBwxWjw,8922
243
243
  machineconfig/scripts/python/nw/mount_drive,sha256=zemKofv7hOmRN_V3qK0q580GkfWw3VdikyVVQyiu8j8,3514
244
- machineconfig/scripts/python/nw/mount_nfs,sha256=t2UWm2vkLXP7kXdeJ69Xvx5oCWSHHRc1ci3cVwOpN88,1855
244
+ machineconfig/scripts/python/nw/mount_nfs,sha256=x5_rKgP2Kza6LHCHFJqE0Ej___aUXHs-AwzcIlhYY-g,1855
245
245
  machineconfig/scripts/python/nw/mount_nfs.py,sha256=lOMDY4RS7tx8gsCazVR5tNNwFbaRyO2PJlnwBCDQgCM,3573
246
246
  machineconfig/scripts/python/nw/mount_nw_drive,sha256=BqjGBCbwe5ZAsZDO3L0zHhh_gJfZy1CYOcqXA4Y-WkQ,2262
247
247
  machineconfig/scripts/python/nw/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
@@ -260,7 +260,7 @@ machineconfig/scripts/windows/term.ps1,sha256=nme_OWis84qN-zI2c0rdysNcDIdoaEKajX
260
260
  machineconfig/scripts/windows/mounts/mount_nfs.ps1,sha256=XrAdzpxE6a4OccSmWJ7YWHJTnsZK8uXnFE5j9GOPA20,2026
261
261
  machineconfig/scripts/windows/mounts/mount_nw.ps1,sha256=puxcfZc3ZCJerm8pj8OZGVoTYkhzp-h7oV-MrksSqIE,454
262
262
  machineconfig/scripts/windows/mounts/mount_smb.ps1,sha256=PzYWpIO9BpwXjdWlUQL9pnMRnOGNSkxfh4bHukJFme8,69
263
- machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=oWAhvbU-muXOAIOPQexBRNZ0hhKhKd0P9Vh2BZXuGQY,322
263
+ machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=OijoiRRMdxQUKD-spVh_FDdISxj9At5_oeNrUv8Iwug,322
264
264
  machineconfig/scripts/windows/mounts/share_cloud.cmd,sha256=exD7JCdxw2LqVjw2MKCYHbVZlEqmelXtwnATng-dhJ4,1028
265
265
  machineconfig/scripts/windows/mounts/share_smb.ps1,sha256=U7x8ULYSjbgzTtiHNSKQuTaZ_apilDvkGV5Xm5hXk5M,384
266
266
  machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1,sha256=Wv-SLscdckV-1mG3p82VXKPY9zW3hgkRmcLUXIZ1daE,253
@@ -320,7 +320,8 @@ machineconfig/settings/lvim/linux/config.lua,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
320
320
  machineconfig/settings/lvim/windows/config.lua,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
321
321
  machineconfig/settings/lvim/windows/archive/config_additional.lua,sha256=EM__UsSkXDIIN7tIdMV-tkQV4z_jUmDCmHhjamEyiUA,651
322
322
  machineconfig/settings/lvim/windows/lua/user/custom_config.lua,sha256=wbSm8cZubnPfUhYDmd5HKYnVRZUYVj701FBax2ZgjtE,269
323
- machineconfig/settings/marimo/marimo.toml,sha256=R4osbRG-XDeQBgY1oLlk3hi5e0PU_RNc8O7UitQ7mw4,1282
323
+ machineconfig/settings/marimo/marimo.toml,sha256=tqEKoinBB4KpbOhqMbSjRhNAudpGiT1AvY05f3P2clc,1356
324
+ machineconfig/settings/marimo/snippets/globalize.py,sha256=HAS8A-gm1bW0rO7tF8SSvuE5bJMksfIpgNpMThAfzq4,600
324
325
  machineconfig/settings/mprocs/windows/mprocs.yaml,sha256=qn_bPy8eSWMAlhA9PLVO_vxqlSlzzrQ1CldFjSKpLD4,864
325
326
  machineconfig/settings/mprocs/windows/other,sha256=gIRC6swgxOmXAWEJPCOKmAdDfmLQ2-Vh9A1vsj0atAY,276
326
327
  machineconfig/settings/pistol/pistol.conf,sha256=zjhSJDA3X1TDLRfimnVgJT_Dt54lDJc5hlTBB649d5A,378
@@ -341,7 +342,7 @@ machineconfig/settings/shells/nushell/config.nu,sha256=xtko80MPteDXuOJmwJHNFhXmf
341
342
  machineconfig/settings/shells/nushell/env.nu,sha256=4VmaXb-qP6qnMD5TPzkXMLFNlB5QC4l9HEzCvXZE2GQ,315
342
343
  machineconfig/settings/shells/pwsh/init.ps1,sha256=F4rcihit8wkTY28uM2lTpAnLhtYylH1oX2-JBVwU7jk,2758
343
344
  machineconfig/settings/shells/pwsh/profile.ps1,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
344
- machineconfig/settings/shells/starship/starship.toml,sha256=5rQTY7ZpKnrnhgu2Y9OJKUYMz5lPLIftO1p1VRuVZwQ,1150
345
+ machineconfig/settings/shells/starship/starship.toml,sha256=d5lWKC0AnTcriRAZV1opEZy76QknSpKFgJ3jyW9_vZ0,1305
345
346
  machineconfig/settings/shells/vtm/settings.xml,sha256=5TNXd-i0eUGo2w3tuhY9aOkwoJdqih8_HO_U6uL2Dts,18262
346
347
  machineconfig/settings/shells/wezterm/wezterm.lua,sha256=ZaUFqVNibGD5cyzlnYhIMAakTig6P7qggi5hvHGASPk,6210
347
348
  machineconfig/settings/shells/wt/settings.json,sha256=G3MzbSfkNDoCbFfKKuS5wuSWsMff4oj6s6m-iXryNz8,10353
@@ -377,7 +378,7 @@ machineconfig/setup_linux/others/cli_installation.sh,sha256=gVvszYZJgKPRJx2SEaE3
377
378
  machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh,sha256=F5dbg0n9RHsKGPn8fIdZMn3p0RrHEkb8rWBGsdVGbus,1207
378
379
  machineconfig/setup_linux/ssh/openssh_all.sh,sha256=3dg6HEUFbHQOzLfSAtzK_D_GB8rGCCp_aBnxNdnidVc,824
379
380
  machineconfig/setup_linux/ssh/openssh_wsl.sh,sha256=1eeRGrloVB34K5z8yWVUMG5b9pV-WBfHgV9jqXiYgCQ,1398
380
- machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=WqZilrtDnyAoyY7JT5D762psA79wJjIjrUASr_v9X8U,488
381
+ machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=_wP2n9nlndOZeQXngmzXvTJqevcnZzE-JTk3s7ezcrI,488
381
382
  machineconfig/setup_mac/__init__.py,sha256=Q1waupi5vCBroLqc8Rtnw69_7jLnm2Cs7_zH_GSZgMs,616
382
383
  machineconfig/setup_mac/apps.sh,sha256=R0N6fBwLCzwy4qAormyMerXXXrHazibSkY6NrNOpTQU,2772
383
384
  machineconfig/setup_mac/apps_gui.sh,sha256=3alvddg918oMlJB2aUWJWpGGoaq5atlxcaOwhnyXlRI,9517
@@ -392,7 +393,7 @@ machineconfig/setup_windows/others/power_options.ps1,sha256=c7Hn94jBD5GWF29CxMhm
392
393
  machineconfig/setup_windows/ssh/add-sshkey.ps1,sha256=qfPdqCpd9KP3VhH4ifsUm1Xvec7c0QVl4Wt8JIAm9HQ,1653
393
394
  machineconfig/setup_windows/ssh/add_identity.ps1,sha256=b8ZXpmNUSw3IMYvqSY7ClpdWPG39FS7MefoWnRhWN2U,506
394
395
  machineconfig/setup_windows/ssh/openssh-server.ps1,sha256=OMlYQdvuJQNxF5EILLPizB6BZAT3jAmDsv1WcVVxpFQ,2529
395
- machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=QtgtNV-2PK5Bo7SbT74XtLqzTHlp4Br25QZFoQt8Ed0,616
396
+ machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=E1Atk7Cq7gFKoyfTmKThHsjYyMlAj0ikw8mygZXJib4,616
396
397
  machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
397
398
  machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=ogxJnwpdcpH7N6dFJu95UCNoGYirZKQho_3X0F_hmXs,6791
398
399
  machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -400,7 +401,7 @@ machineconfig/utils/accessories.py,sha256=Rs8R0GUb2Ub6YimkgXHnI02CShS5BKlrZdCigV
400
401
  machineconfig/utils/code.py,sha256=3YnLsCWSPyDXHl_OlvPueIYXFv_o_jmc06GkvHAV0mw,6451
401
402
  machineconfig/utils/installer.py,sha256=1ScBaTe_pRsfTYht9-LXmirgnNizNy8u1GgetUfEDO4,10351
402
403
  machineconfig/utils/io.py,sha256=4dSieoqZO8Vvi4vW8lLoITDHBvmFp4dtl3kyeZHQ6Co,2528
403
- machineconfig/utils/links.py,sha256=KM6vIn3hag9FYEzLSHP5MAM9tU_RStw2mCq2_OvmmZA,23672
404
+ machineconfig/utils/links.py,sha256=ffc8fwbQ1TVdXYn2J1rq7gCZHidxwCzlSppdyrzq4LA,24382
404
405
  machineconfig/utils/meta.py,sha256=4ocYH3Zi6bVN6FVgXoGIfoasV6oxi67I9rQ8hvyYinc,9892
405
406
  machineconfig/utils/notifications.py,sha256=tuXIudcip0tEioG-bm8BbLr3FMDve4f6BktlznBhKxM,9013
406
407
  machineconfig/utils/options.py,sha256=VWYx3EKJxIp-CJ8gDGYdjclKSc1tMUhyrC8v3seeneo,7447
@@ -410,7 +411,7 @@ machineconfig/utils/procs.py,sha256=YPA_vEYQGwPd_o_Lc6nOTBo5BrB1tSs8PJ42XiGpenM,
410
411
  machineconfig/utils/scheduler.py,sha256=fguwvINyaupOxdU5Uadyxalh_jXTXDzt0ioEgjEOKcM,14705
411
412
  machineconfig/utils/scheduling.py,sha256=vcJgajeJPSWkJNlarYJSmLvasdOuCtBM4druOAB1Nwc,11089
412
413
  machineconfig/utils/source_of_truth.py,sha256=ZAnCRltiM07ig--P6g9_6nEAvNFC4X4ERFTVcvpIYsE,764
413
- machineconfig/utils/ssh.py,sha256=GmAsn6qYk0fjpIXYgMhxEbb8zbx0ih_MvF07fo5uJF4,39008
414
+ machineconfig/utils/ssh.py,sha256=o9fIBd2kJ5YWfuuYU82dx8dvzTKGnXZ6uK6txNgDw4U,39008
414
415
  machineconfig/utils/terminal.py,sha256=VDgsjTjBmMGgZN0YIc0pJ8YksLDrBtiXON1EThy7_is,4264
415
416
  machineconfig/utils/tst.py,sha256=6u1GI49NdcpxH2BYGAusNfY5q9G_ytCGVzFM5b6HYpM,674
416
417
  machineconfig/utils/upgrade_packages.py,sha256=3H-U-Le0kn7ACYf_RHMSDav2UGnWzZEqgaL9bC0Yn4s,3695
@@ -439,8 +440,8 @@ machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoS
439
440
  machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
440
441
  machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
441
442
  machineconfig/utils/ssh_utils/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
442
- machineconfig-6.91.dist-info/METADATA,sha256=n6Dol8J3f79NUOsA_kGnSj9xz0n98TO1mfVmP2kW0dw,2928
443
- machineconfig-6.91.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
444
- machineconfig-6.91.dist-info/entry_points.txt,sha256=uf_ZPJa02_y3Fw5Z7m22cq7PwxhYd1QV2FfPNZTl_dQ,519
445
- machineconfig-6.91.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
446
- machineconfig-6.91.dist-info/RECORD,,
443
+ machineconfig-6.92.dist-info/METADATA,sha256=L8o9zBx9GVMm_RUWgQO_gNAmieK1skgXSZhIHvHP9_o,2928
444
+ machineconfig-6.92.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
445
+ machineconfig-6.92.dist-info/entry_points.txt,sha256=uf_ZPJa02_y3Fw5Z7m22cq7PwxhYd1QV2FfPNZTl_dQ,519
446
+ machineconfig-6.92.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
447
+ machineconfig-6.92.dist-info/RECORD,,